Documentation ¶
Index ¶
- Variables
- func DefaultUnauthorizedCoinTransactionExceptionCallback(tx modules.ConsensusTransaction, dedupAddresses []types.UnlockHash, ...) (bool, error)
- type AuthAddressBaseTransactionController
- type AuthAddressUpdateTransaction
- type AuthAddressUpdateTransactionController
- func (autc AuthAddressUpdateTransactionController) DecodeTransactionData(r io.Reader) (types.TransactionData, error)
- func (autc AuthAddressUpdateTransactionController) EncodeTransactionData(w io.Writer, txData types.TransactionData) error
- func (autc AuthAddressUpdateTransactionController) EncodeTransactionIDInput(w io.Writer, txData types.TransactionData) error
- func (autc AuthAddressUpdateTransactionController) GetCommonExtensionData(extension interface{}) (types.CommonTransactionExtensionData, error)
- func (autc AuthAddressUpdateTransactionController) JSONDecodeTransactionData(data []byte) (types.TransactionData, error)
- func (autc AuthAddressUpdateTransactionController) JSONEncodeTransactionData(txData types.TransactionData) ([]byte, error)
- func (autc AuthAddressUpdateTransactionController) SignExtension(extension interface{}, ...) (interface{}, error)
- func (autc AuthAddressUpdateTransactionController) SignatureHash(t types.Transaction, extraObjects ...interface{}) (crypto.Hash, error)
- type AuthAddressUpdateTransactionExtension
- type AuthConditionUpdateTransaction
- func AuthConditionUpdateTransactionFromTransaction(tx types.Transaction, expectedVersion types.TransactionVersion, ...) (AuthConditionUpdateTransaction, error)
- func AuthConditionUpdateTransactionFromTransactionData(txData types.TransactionData, requireMinerFees bool) (AuthConditionUpdateTransaction, error)
- type AuthConditionUpdateTransactionController
- func (cutc AuthConditionUpdateTransactionController) DecodeTransactionData(r io.Reader) (types.TransactionData, error)
- func (cutc AuthConditionUpdateTransactionController) EncodeTransactionData(w io.Writer, txData types.TransactionData) error
- func (cutc AuthConditionUpdateTransactionController) EncodeTransactionIDInput(w io.Writer, txData types.TransactionData) error
- func (cutc AuthConditionUpdateTransactionController) GetCommonExtensionData(extension interface{}) (types.CommonTransactionExtensionData, error)
- func (cutc AuthConditionUpdateTransactionController) JSONDecodeTransactionData(data []byte) (types.TransactionData, error)
- func (cutc AuthConditionUpdateTransactionController) JSONEncodeTransactionData(txData types.TransactionData) ([]byte, error)
- func (cutc AuthConditionUpdateTransactionController) SignExtension(extension interface{}, ...) (interface{}, error)
- func (cutc AuthConditionUpdateTransactionController) SignatureHash(t types.Transaction, extraObjects ...interface{}) (crypto.Hash, error)
- type AuthConditionUpdateTransactionExtension
- type AuthInfoGetter
- type Plugin
- func (p *Plugin) ApplyBlock(block modules.ConsensusBlock, bucket *persist.LazyBoltBucket) error
- func (p *Plugin) ApplyBlockHeader(modules.ConsensusBlockHeader, *persist.LazyBoltBucket) error
- func (p *Plugin) ApplyTransaction(txn modules.ConsensusTransaction, bucket *persist.LazyBoltBucket) error
- func (p *Plugin) Close() error
- func (p *Plugin) GetActiveAuthCondition() (types.UnlockConditionProxy, error)
- func (p *Plugin) GetAddressesAuthStateAt(height types.BlockHeight, addresses []types.UnlockHash, ...) ([]bool, error)
- func (p *Plugin) GetAddressesAuthStateNow(addresses []types.UnlockHash, exitEarlyFn func(index int, state bool) bool) ([]bool, error)
- func (p *Plugin) GetAuthConditionAt(height types.BlockHeight) (types.UnlockConditionProxy, error)
- func (p *Plugin) InitPlugin(metadata *persist.Metadata, bucket *bolt.Bucket, ...) (persist.Metadata, error)
- func (p *Plugin) RevertBlock(block modules.ConsensusBlock, bucket *persist.LazyBoltBucket) error
- func (p *Plugin) RevertBlockHeader(modules.ConsensusBlockHeader, *persist.LazyBoltBucket) error
- func (p *Plugin) RevertTransaction(txn modules.ConsensusTransaction, bucket *persist.LazyBoltBucket) error
- func (p *Plugin) TransactionValidatorVersionFunctionMapping() map[types.TransactionVersion][]modules.PluginTransactionValidationFunction
- func (p *Plugin) TransactionValidators() []modules.PluginTransactionValidationFunction
- type PluginOpts
- type UnauthorizedCoinTransactionExceptionCallback
Constants ¶
This section is empty.
Variables ¶
var ( SpecifierAuthAddressUpdateTransaction = types.Specifier{'a', 'u', 't', 'h', ' ', 'a', 'd', 'd', 'r', ' ', 'u', 'p', 'd', 'a', 't', 'e'} SpecifierAuthConditionUpdateTransaction = types.Specifier{'a', 'u', 't', 'h', ' ', 'c', 'o', 'n', 'd', ' ', 'u', 'p', 'd', 'a', 't', 'e'} )
These Specifiers are used internally when calculating a Transaction's ID. See Rivine's Specifier for more details.
Functions ¶
func DefaultUnauthorizedCoinTransactionExceptionCallback ¶
func DefaultUnauthorizedCoinTransactionExceptionCallback(tx modules.ConsensusTransaction, dedupAddresses []types.UnlockHash, ctx types.TransactionValidationContext) (bool, error)
DefaultUnauthorizedCoinTransactionExceptionCallback is the default callback that is used in ase the auth coin plugin does not define a custom callback.
Types ¶
type AuthAddressBaseTransactionController ¶ added in v1.3.1
type AuthAddressBaseTransactionController struct {
RequireMinerFees bool
}
AuthAddressBaseTransactionController is the base controller for all authaddress controllers, that require miner fees.
type AuthAddressUpdateTransaction ¶
type AuthAddressUpdateTransaction struct { // Nonce used to ensure the uniqueness of a AuthAddressUpdateTransaction's ID and signature. Nonce types.TransactionNonce `json:"nonce"` // AuthAddresses contains a list of addresses to be authorized, // it is also considered valid to authorize an address that is already authorized. AuthAddresses []types.UnlockHash `json:"authaddresses"` // AuthAddresses contains a list of addresses to be authorized, // it is also considered valid to deauthorize an address that has no authorization. DeauthAddresses []types.UnlockHash `json:"deauthaddresses"` // ArbitraryData can be used for any purpose ArbitraryData []byte `json:"arbitrarydata,omitempty"` // AuthFulfillment defines the fulfillment which is used in order to // fulfill the globally defined AuthCondition. AuthFulfillment types.UnlockFulfillmentProxy `json:"authfulfillment"` // Minerfees, a fee paid for this minter definition transaction. MinerFees []types.Currency `json:"minerfees,omitempty"` }
AuthAddressUpdateTransaction is to be used by the owner(s) of the Authorized Condition, as a medium in order to (de)authorize address(es).
/!\ This transaction requires NO Miner Fee.
func AuthAddressUpdateTransactionFromTransaction ¶
func AuthAddressUpdateTransactionFromTransaction(tx types.Transaction, expectedVersion types.TransactionVersion, requireMinerFees bool) (AuthAddressUpdateTransaction, error)
AuthAddressUpdateTransactionFromTransaction creates a AuthAddressUpdateTransaction, using a regular in-memory rivine transaction.
Past the (tx) Version validation it piggy-backs onto the `AuthAddressUpdateTransactionFromTransactionData` constructor.
func AuthAddressUpdateTransactionFromTransactionData ¶
func AuthAddressUpdateTransactionFromTransactionData(txData types.TransactionData, requireMinerFees bool) (AuthAddressUpdateTransaction, error)
AuthAddressUpdateTransactionFromTransactionData creates a AuthAddressUpdateTransaction, using the TransactionData from a regular in-memory rivine transaction.
func (*AuthAddressUpdateTransaction) Transaction ¶
func (autx *AuthAddressUpdateTransaction) Transaction(version types.TransactionVersion) types.Transaction
Transaction returns this AuthAddressUpdateTransaction as regular rivine transaction, using AuthAddressUpdateTransaction as the type.
func (*AuthAddressUpdateTransaction) TransactionData ¶
func (autx *AuthAddressUpdateTransaction) TransactionData() types.TransactionData
TransactionData returns this AuthAddressUpdateTransaction as regular rivine transaction data.
type AuthAddressUpdateTransactionController ¶
type AuthAddressUpdateTransactionController struct { AuthAddressBaseTransactionController // AuthInfoGetter is used to get (coin) authorization information. AuthInfoGetter AuthInfoGetter // TransactionVersion is used to validate/set the transaction version // of an auth address update transaction. TransactionVersion types.TransactionVersion }
AuthAddressUpdateTransactionController defines a custom transaction controller, for an Auth AddressUpdate Transaction. It allows the modification of the set of addresses that are authorizes in order to receive or send coins.
func (AuthAddressUpdateTransactionController) DecodeTransactionData ¶
func (autc AuthAddressUpdateTransactionController) DecodeTransactionData(r io.Reader) (types.TransactionData, error)
DecodeTransactionData implements TransactionController.DecodeTransactionData
func (AuthAddressUpdateTransactionController) EncodeTransactionData ¶
func (autc AuthAddressUpdateTransactionController) EncodeTransactionData(w io.Writer, txData types.TransactionData) error
EncodeTransactionData implements TransactionController.EncodeTransactionData
func (AuthAddressUpdateTransactionController) EncodeTransactionIDInput ¶
func (autc AuthAddressUpdateTransactionController) EncodeTransactionIDInput(w io.Writer, txData types.TransactionData) error
EncodeTransactionIDInput implements TransactionIDEncoder.EncodeTransactionIDInput
func (AuthAddressUpdateTransactionController) GetCommonExtensionData ¶
func (autc AuthAddressUpdateTransactionController) GetCommonExtensionData(extension interface{}) (types.CommonTransactionExtensionData, error)
GetCommonExtensionData implements TransactionCommonExtensionDataGetter.GetCommonExtensionData
func (AuthAddressUpdateTransactionController) JSONDecodeTransactionData ¶
func (autc AuthAddressUpdateTransactionController) JSONDecodeTransactionData(data []byte) (types.TransactionData, error)
JSONDecodeTransactionData implements TransactionController.JSONDecodeTransactionData
func (AuthAddressUpdateTransactionController) JSONEncodeTransactionData ¶
func (autc AuthAddressUpdateTransactionController) JSONEncodeTransactionData(txData types.TransactionData) ([]byte, error)
JSONEncodeTransactionData implements TransactionController.JSONEncodeTransactionData
func (AuthAddressUpdateTransactionController) SignExtension ¶
func (autc AuthAddressUpdateTransactionController) SignExtension(extension interface{}, sign func(*types.UnlockFulfillmentProxy, types.UnlockConditionProxy, ...interface{}) error) (interface{}, error)
SignExtension implements TransactionExtensionSigner.SignExtension
func (AuthAddressUpdateTransactionController) SignatureHash ¶
func (autc AuthAddressUpdateTransactionController) SignatureHash(t types.Transaction, extraObjects ...interface{}) (crypto.Hash, error)
SignatureHash implements TransactionSignatureHasher.SignatureHash
type AuthAddressUpdateTransactionExtension ¶
type AuthAddressUpdateTransactionExtension struct { Nonce types.TransactionNonce AuthAddresses []types.UnlockHash DeauthAddresses []types.UnlockHash AuthFulfillment types.UnlockFulfillmentProxy }
AuthAddressUpdateTransactionExtension defines the AuthAddressUpdateTransaction Extension Data
type AuthConditionUpdateTransaction ¶
type AuthConditionUpdateTransaction struct { // Nonce used to ensure the uniqueness of a AuthConditionUpdateTransaction's ID and signature. Nonce types.TransactionNonce `json:"nonce"` // ArbitraryData can be used for any purpose ArbitraryData []byte `json:"arbitrarydata,omitempty"` // AuthCondition defines the condition which will have to fulfilled // in order to prove powers of authority when changing power (again) or using those powers to update // the set of authorized addresses. AuthCondition types.UnlockConditionProxy `json:"authcondition"` // AuthFulfillment defines the fulfillment which is used in order to // fulfill the globally defined AuthCondition. AuthFulfillment types.UnlockFulfillmentProxy `json:"authfulfillment"` // Minerfees, a fee paid for this minter definition transaction. MinerFees []types.Currency `json:"minerfees,omitempty"` }
AuthConditionUpdateTransaction is to be used by the owner(s) of the Authorized Condition, as a medium in order transfer the authorization power to a new condition.
/!\ This transaction requires NO Miner Fee.
func AuthConditionUpdateTransactionFromTransaction ¶
func AuthConditionUpdateTransactionFromTransaction(tx types.Transaction, expectedVersion types.TransactionVersion, requireMinerFees bool) (AuthConditionUpdateTransaction, error)
AuthConditionUpdateTransactionFromTransaction creates a AuthConditionUpdateTransaction, using a regular in-memory rivine transaction.
Past the (tx) Version validation it piggy-backs onto the `AuthAddressUpdateTransactionFromTransactionData` constructor.
func AuthConditionUpdateTransactionFromTransactionData ¶
func AuthConditionUpdateTransactionFromTransactionData(txData types.TransactionData, requireMinerFees bool) (AuthConditionUpdateTransaction, error)
AuthConditionUpdateTransactionFromTransactionData creates a AuthConditionUpdateTransaction, using the TransactionData from a regular in-memory rivine transaction.
func (*AuthConditionUpdateTransaction) Transaction ¶
func (autx *AuthConditionUpdateTransaction) Transaction(version types.TransactionVersion) types.Transaction
Transaction returns this AuthAddressUpdateTransaction as regular rivine transaction, using AuthAddressUpdateTransaction as the type.
func (*AuthConditionUpdateTransaction) TransactionData ¶
func (autx *AuthConditionUpdateTransaction) TransactionData() types.TransactionData
TransactionData returns this AuthAddressUpdateTransaction as regular rivine transaction data.
type AuthConditionUpdateTransactionController ¶
type AuthConditionUpdateTransactionController struct { AuthAddressBaseTransactionController // AuthInfoGetter is used to get (coin) authorization information. AuthInfoGetter AuthInfoGetter // TransactionVersion is used to validate/set the transaction version // of an auth address update transaction. TransactionVersion types.TransactionVersion }
AuthConditionUpdateTransactionController defines a custom transaction controller, for an Auth ConditionUpdate Transaction. It allows the modification of the set of addresses that are authorizes in order to receive or send coins.
func (AuthConditionUpdateTransactionController) DecodeTransactionData ¶
func (cutc AuthConditionUpdateTransactionController) DecodeTransactionData(r io.Reader) (types.TransactionData, error)
DecodeTransactionData implements TransactionController.DecodeTransactionData
func (AuthConditionUpdateTransactionController) EncodeTransactionData ¶
func (cutc AuthConditionUpdateTransactionController) EncodeTransactionData(w io.Writer, txData types.TransactionData) error
EncodeTransactionData implements TransactionController.EncodeTransactionData
func (AuthConditionUpdateTransactionController) EncodeTransactionIDInput ¶
func (cutc AuthConditionUpdateTransactionController) EncodeTransactionIDInput(w io.Writer, txData types.TransactionData) error
EncodeTransactionIDInput implements TransactionIDEncoder.EncodeTransactionIDInput
func (AuthConditionUpdateTransactionController) GetCommonExtensionData ¶
func (cutc AuthConditionUpdateTransactionController) GetCommonExtensionData(extension interface{}) (types.CommonTransactionExtensionData, error)
GetCommonExtensionData implements TransactionCommonExtensionDataGetter.GetCommonExtensionData
func (AuthConditionUpdateTransactionController) JSONDecodeTransactionData ¶
func (cutc AuthConditionUpdateTransactionController) JSONDecodeTransactionData(data []byte) (types.TransactionData, error)
JSONDecodeTransactionData implements TransactionController.JSONDecodeTransactionData
func (AuthConditionUpdateTransactionController) JSONEncodeTransactionData ¶
func (cutc AuthConditionUpdateTransactionController) JSONEncodeTransactionData(txData types.TransactionData) ([]byte, error)
JSONEncodeTransactionData implements TransactionController.JSONEncodeTransactionData
func (AuthConditionUpdateTransactionController) SignExtension ¶
func (cutc AuthConditionUpdateTransactionController) SignExtension(extension interface{}, sign func(*types.UnlockFulfillmentProxy, types.UnlockConditionProxy, ...interface{}) error) (interface{}, error)
SignExtension implements TransactionExtensionSigner.SignExtension
func (AuthConditionUpdateTransactionController) SignatureHash ¶
func (cutc AuthConditionUpdateTransactionController) SignatureHash(t types.Transaction, extraObjects ...interface{}) (crypto.Hash, error)
SignatureHash implements TransactionSignatureHasher.SignatureHash
type AuthConditionUpdateTransactionExtension ¶
type AuthConditionUpdateTransactionExtension struct { Nonce types.TransactionNonce AuthCondition types.UnlockConditionProxy AuthFulfillment types.UnlockFulfillmentProxy }
AuthConditionUpdateTransactionExtension defines the AuthConditionUpdateTransaction Extension Data
type AuthInfoGetter ¶
type AuthInfoGetter interface { // GetActiveAuthCondition returns the active auth condition. // In other words, the auth condition at the current block height. GetActiveAuthCondition() (types.UnlockConditionProxy, error) // GetAuthConditionAt returns the auth condition at a given block height. GetAuthConditionAt(height types.BlockHeight) (types.UnlockConditionProxy, error) // GetAddressesAuthStateNow rerturns for each requested address, in order as given, // the current auth state for that address as a boolean: true if authed, false otherwise. // If exitEarlyFn is given GetAddressesAuthStateNow can stop earlier in case exitEarlyFn returns true for an iteration. GetAddressesAuthStateNow(addresses []types.UnlockHash, exitEarlyFn func(index int, state bool) bool) ([]bool, error) // GetAddressesAuthStateAt rerturns for each requested address, in order as given, // the auth state at the given height for that address as a boolean: true if authed, false otherwise. // If exitEarlyFn is given GetAddressesAuthStateNow can stop earlier in case exitEarlyFn returns true for an iteration. GetAddressesAuthStateAt(height types.BlockHeight, addresses []types.UnlockHash, exitEarlyFn func(index int, state bool) bool) ([]bool, error) }
AuthInfoGetter allows you to check if a list of addresses are authorized, as well as what the auth condition is at a given (as well as current) [block] height.
type Plugin ¶
type Plugin struct { RequireMinerFees bool // contains filtered or unexported fields }
Plugin is a struct defines the Auth. Coin Transfer plugin
func NewPlugin ¶
func NewPlugin(genesisAuthCondition types.UnlockConditionProxy, authAddressUpdateTransactionVersion, authConditionUpdateTransactionVersion types.TransactionVersion, opts *PluginOpts) *Plugin
NewPlugin creates a new Plugin with a genesisAuthCondition and correct transaction versions. NOTE: do not register the default rivine transaction versions (0x00 and 0x01) if you use this plugin!!!
func (*Plugin) ApplyBlock ¶
func (p *Plugin) ApplyBlock(block modules.ConsensusBlock, bucket *persist.LazyBoltBucket) error
ApplyBlock applies a block's minting transactions to the minting bucket.
func (*Plugin) ApplyBlockHeader ¶ added in v1.3.1
func (p *Plugin) ApplyBlockHeader(modules.ConsensusBlockHeader, *persist.LazyBoltBucket) error
ApplyBlockHeader applies nothing and has no effect on this plugin.
func (*Plugin) ApplyTransaction ¶
func (p *Plugin) ApplyTransaction(txn modules.ConsensusTransaction, bucket *persist.LazyBoltBucket) error
ApplyTransaction applies a minting transactions to the minting bucket.
func (*Plugin) GetActiveAuthCondition ¶
func (p *Plugin) GetActiveAuthCondition() (types.UnlockConditionProxy, error)
GetActiveAuthCondition implements types.AuthInfoGetter.GetActiveAuthCondition
func (*Plugin) GetAddressesAuthStateAt ¶
func (p *Plugin) GetAddressesAuthStateAt(height types.BlockHeight, addresses []types.UnlockHash, exitEarlyFn func(index int, state bool) bool) ([]bool, error)
GetAddressesAuthStateAt rerturns for each requested address, in order as given, the auth state at the given height for that address as a boolean: true if authed, false otherwise. If exitEarlyFn is given GetAddressesAuthStateNow can stop earlier in case exitEarlyFn returns true for an iteration.
func (*Plugin) GetAddressesAuthStateNow ¶
func (p *Plugin) GetAddressesAuthStateNow(addresses []types.UnlockHash, exitEarlyFn func(index int, state bool) bool) ([]bool, error)
GetAddressesAuthStateNow rerturns for each requested address, in order as given, the current auth state for that address as a boolean: true if authed, false otherwise. If exitEarlyFn is given GetAddressesAuthStateNow can stop earlier in case exitEarlyFn returns true for an iteration.
func (*Plugin) GetAuthConditionAt ¶
func (p *Plugin) GetAuthConditionAt(height types.BlockHeight) (types.UnlockConditionProxy, error)
GetAuthConditionAt implements types.AuthInfoGetter.GetAuthConditionAt
func (*Plugin) InitPlugin ¶
func (p *Plugin) InitPlugin(metadata *persist.Metadata, bucket *bolt.Bucket, storage modules.PluginViewStorage, unregisterCallback modules.PluginUnregisterCallback) (persist.Metadata, error)
InitPlugin initializes the Bucket for the first time
func (*Plugin) RevertBlock ¶
func (p *Plugin) RevertBlock(block modules.ConsensusBlock, bucket *persist.LazyBoltBucket) error
RevertBlock reverts a block's minting transaction from the minting bucket
func (*Plugin) RevertBlockHeader ¶ added in v1.3.1
func (p *Plugin) RevertBlockHeader(modules.ConsensusBlockHeader, *persist.LazyBoltBucket) error
RevertBlockHeader reverts nothing and has no effect on this plugin.
func (*Plugin) RevertTransaction ¶
func (p *Plugin) RevertTransaction(txn modules.ConsensusTransaction, bucket *persist.LazyBoltBucket) error
RevertTransaction reverts a minting transaction from the minting bucket
func (*Plugin) TransactionValidatorVersionFunctionMapping ¶
func (p *Plugin) TransactionValidatorVersionFunctionMapping() map[types.TransactionVersion][]modules.PluginTransactionValidationFunction
TransactionValidatorVersionFunctionMapping returns all tx validators for specific tx versions linked to this plugin
func (*Plugin) TransactionValidators ¶
func (p *Plugin) TransactionValidators() []modules.PluginTransactionValidationFunction
TransactionValidators returns all tx validators linked to this plugin
type PluginOpts ¶
type PluginOpts struct { // in case your chain requires custom logic to define what transaction can be considered valid for // coin transfers with unauthorized addresses due to whatever rules (e.g. version, pure refund coin flow, ...) UnauthorizedCoinTransactionExceptionCallback UnauthorizedCoinTransactionExceptionCallback // UnlockHashFilter can be used to filter what unlock hashes require authorization and which not. // It is optional, and if none given, all unlockhashes except // the NilUnlockHash and AtomicSwap contract addresses require authorization. // Returns true in case authorization cheque is required, False otherwise. UnlockHashFilter func(types.UnlockHash) bool // RequireMinerFees can be used to enable minerfees on authorization transactions. RequireMinerFees bool // Reverse can be used to reverse the logic of this plugin. // This means that by default all addresses are authorized and can send transactions. Reverse bool }
PluginOpts are extra optional configurations one can make to the AuthCoin Plugin
type UnauthorizedCoinTransactionExceptionCallback ¶
type UnauthorizedCoinTransactionExceptionCallback func(tx modules.ConsensusTransaction, dedupAddresses []types.UnlockHash, ctx types.TransactionValidationContext) (bool, error)
UnauthorizedCoinTransactionExceptionCallback is the function signature for the callback that can be used for chains that requires custom logic to define what transaction can be considered valid for coin transfers with unauthorized addresses due to whatever rules (e.g. version, pure refund coin flow, ...) True is returned in case this tx does not require an authorization check, False otherwise.