Documentation ¶
Overview ¶
Package utxoutil is used to build value transaction
Package utxoutil contains number of utility functions useful while manipulating outputs and constructing transactions. The ConsumableOutput is a wrapper of an ledgerstate.Output which allows 'consuming' tokens and tracking remaining balances. The Builder is a flexible tansaction builder tool. It use ConsumableOutput -s to build arbitrary transactions along 'consume->spend' scheme.
Index ¶
- func ConsumableBalance(color ledgerstate.Color, consumables ...*ConsumableOutput) uint64
- func ConsumeColored(color ledgerstate.Color, amount uint64, consumables ...*ConsumableOutput) bool
- func ConsumeMany(amounts map[ledgerstate.Color]uint64, consumables ...*ConsumableOutput) bool
- func ConsumeRemaining(consumables ...*ConsumableOutput) map[ledgerstate.Color]uint64
- func EnoughBalance(color ledgerstate.Color, amount uint64, consumables ...*ConsumableOutput) bool
- func EnoughBalances(amounts map[ledgerstate.Color]uint64, consumables ...*ConsumableOutput) bool
- func FindAliasConsumableInput(aliasAddr ledgerstate.Address, consumables ...*ConsumableOutput) (*ledgerstate.AliasOutput, int, bool)
- func GetMintedAmounts(tx *ledgerstate.Transaction) map[ledgerstate.Color]uint64
- func GetSingleChainedAliasOutput(tx *ledgerstate.Transaction) (*ledgerstate.AliasOutput, error)
- func GetSingleSender(tx *ledgerstate.Transaction) (ledgerstate.Address, error)
- func MakeUTXOInputs(consumables ...*ConsumableOutput) (ledgerstate.Inputs, []ledgerstate.Output)
- func MustConsumeColored(color ledgerstate.Color, amount uint64, consumables ...*ConsumableOutput)
- func ToOutputs(consumables ...*ConsumableOutput) []ledgerstate.Output
- func UnlockInputsWithED25519KeyPairs(inputs []ledgerstate.Output, essence *ledgerstate.TransactionEssence, ...) ([]ledgerstate.UnlockBlock, error)
- type Builder
- func (b *Builder) AddAliasOutputAsRemainder(addressAlias ledgerstate.Address, stateData []byte, compress ...bool) error
- func (b *Builder) AddExtendedOutputConsume(targetAddress ledgerstate.Address, data []byte, ...) error
- func (b *Builder) AddExtendedOutputSpend(targetAddress ledgerstate.Address, data []byte, ...) error
- func (b *Builder) AddMintingOutputConsume(targetAddress ledgerstate.Address, amount uint64, payload ...[]byte) error
- func (b *Builder) AddNewAliasMint(balances map[ledgerstate.Color]uint64, stateAddress ledgerstate.Address, ...) error
- func (b *Builder) AddOutputAndSpendUnspent(out ledgerstate.Output) error
- func (b *Builder) AddRemainderOutputIfNeeded(remainderAddr ledgerstate.Address, data []byte, compress ...bool) error
- func (b *Builder) AddSigLockedColoredOutput(targetAddress ledgerstate.Address, amounts map[ledgerstate.Color]uint64, ...) error
- func (b *Builder) AddSigLockedIOTAOutput(targetAddress ledgerstate.Address, amount uint64, mint ...uint64) error
- func (b *Builder) AliasNextChainedOutput(addressAlias ledgerstate.Address) (*ledgerstate.AliasOutput, error)
- func (b *Builder) BuildEssence(compress ...bool) (*ledgerstate.TransactionEssence, []ledgerstate.Output, error)
- func (b *Builder) BuildWithED25519(keyPairs ...*ed25519.KeyPair) (*ledgerstate.Transaction, error)
- func (b *Builder) Clone() *Builder
- func (b *Builder) ConsumeAliasInput(addressAlias ledgerstate.Address) error
- func (b *Builder) ConsumeAmounts(amounts map[ledgerstate.Color]uint64) bool
- func (b *Builder) ConsumeInputByOutputID(id ledgerstate.OutputID) error
- func (b *Builder) ConsumeRemainingBalances(compress bool) []*ConsumableOutput
- func (b *Builder) ConsumedUnspent() map[ledgerstate.Color]uint64
- func (b *Builder) Spend(spend map[ledgerstate.Color]uint64) error
- func (b *Builder) SpendConsumedUnspent() map[ledgerstate.Color]uint64
- func (b *Builder) WithAccessPledge(id identity.ID) *Builder
- func (b *Builder) WithConsensusPledge(id identity.ID) *Builder
- func (b *Builder) WithTimestamp(t time.Time) *Builder
- func (b *Builder) WithVersion(v ledgerstate.TransactionEssenceVersion) *Builder
- type ConsumableOutput
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ConsumableBalance ¶
func ConsumableBalance(color ledgerstate.Color, consumables ...*ConsumableOutput) uint64
ConsumableBalance returns how many tokens of the given color can be consumed from remaining
func ConsumeColored ¶
func ConsumeColored(color ledgerstate.Color, amount uint64, consumables ...*ConsumableOutput) bool
ConsumeColored specified amount of colored tokens sequentially from specified ConsumableOutputs return nil if it was a success. In case of failure ConsumableOutputs remaining unchanged
func ConsumeMany ¶
func ConsumeMany(amounts map[ledgerstate.Color]uint64, consumables ...*ConsumableOutput) bool
ConsumeMany consumes whole collection of colored balances
func ConsumeRemaining ¶
func ConsumeRemaining(consumables ...*ConsumableOutput) map[ledgerstate.Color]uint64
ConsumeRemaining consumes all remaining tokens and return map of wasConsumed balances
func EnoughBalance ¶
func EnoughBalance(color ledgerstate.Color, amount uint64, consumables ...*ConsumableOutput) bool
EnoughBalance checks if it is enough tokens of the given color remains in the consumables
func EnoughBalances ¶
func EnoughBalances(amounts map[ledgerstate.Color]uint64, consumables ...*ConsumableOutput) bool
EnoughBalances checks is it is enough remaining tokens to consume whole collection of balances
func FindAliasConsumableInput ¶
func FindAliasConsumableInput(aliasAddr ledgerstate.Address, consumables ...*ConsumableOutput) (*ledgerstate.AliasOutput, int, bool)
FindAliasConsumableInput finds chain output with given alias address
func GetMintedAmounts ¶
func GetMintedAmounts(tx *ledgerstate.Transaction) map[ledgerstate.Color]uint64
GetMintedAmounts analyzes outputs and extracts information of new colors which were minted and respective amounts of tokens
func GetSingleChainedAliasOutput ¶
func GetSingleChainedAliasOutput(tx *ledgerstate.Transaction) (*ledgerstate.AliasOutput, error)
GetSingleChainedAliasOutput expects exactly one chained output in the transaction and returns it returns: - nil and no error if found none - error if there's more than 1
func GetSingleSender ¶
func GetSingleSender(tx *ledgerstate.Transaction) (ledgerstate.Address, error)
GetSingleSender analyzes transaction and signatures and retrieves single address which is consistent to be a 'sender': if it do not have alias input, the address corresponding to the only signature is returned if it has a single alias input (i.e. output is not an origin) it returns a alias address of the chain
func MakeUTXOInputs ¶
func MakeUTXOInputs(consumables ...*ConsumableOutput) (ledgerstate.Inputs, []ledgerstate.Output)
MakeUTXOInputs from the list of consumables makes sorted inputs with NewInputs() and returns corresponding outputs in the same (changed) order
func MustConsumeColored ¶
func MustConsumeColored(color ledgerstate.Color, amount uint64, consumables ...*ConsumableOutput)
MustConsumeColored same as as ConsumeColor only panics on unsuccessful consume
func ToOutputs ¶
func ToOutputs(consumables ...*ConsumableOutput) []ledgerstate.Output
ToOutputs extracts output objects from consumables into the slice
func UnlockInputsWithED25519KeyPairs ¶
func UnlockInputsWithED25519KeyPairs(inputs []ledgerstate.Output, essence *ledgerstate.TransactionEssence, keyPairs ...*ed25519.KeyPair) ([]ledgerstate.UnlockBlock, error)
UnlockInputsWithED25519KeyPairs signs the transaction essence with provided ED25519 pair. Then it unlocks inputs provided as a list of outputs using those signatures and returns a list of unlock blocks in the same order as inputs. It only uses no more signatures as it is needed to unlock all inputs. Other unlock blocks are references The function unlocks the following output types: - ledgerstate.AliasOutput - ledgerstate.ExtendedLockedOutput - ledgerstate.SigLockedSingleOutput - ledgerstate.SigLockedColoredOutput It unlocks inputs by using the following unlock block types: - ledgerstate.SignatureUnlockBlock - ledgerstate.ReferenceUnlockBlock - ledgerstate.AliasUnlockBlock
Types ¶
type Builder ¶
type Builder struct {
// contains filtered or unexported fields
}
Builder builder implements a structure and interface to build transactions Initial input is a list of outputs which can be used as consumable inputs Balances are tracked by "consuming" tokens from inputs and then "spending" them to outputs "consuming" tokens from inputs means:
- tracking "remaining" part of tokens in each consumable output
- placing consumed token into the "consumedUnspent"
- By SpendConsumedUnspent all tokens are cleared from "consumedUnspent" and can be used as a token payload to the output
func NewBuilder ¶
func NewBuilder(inputs ...ledgerstate.Output) *Builder
NewBuilder creates new builder for outputs
func (*Builder) AddAliasOutputAsRemainder ¶
func (b *Builder) AddAliasOutputAsRemainder(addressAlias ledgerstate.Address, stateData []byte, compress ...bool) error
AddAliasOutputAsRemainder forms an reminder by creating new alias output
func (*Builder) AddExtendedOutputConsume ¶
func (b *Builder) AddExtendedOutputConsume(targetAddress ledgerstate.Address, data []byte, amounts map[ledgerstate.Color]uint64, mint ...uint64) error
AddExtendedOutputConsume add new output. Ensures enough unspent funds by consuming if necessary
func (*Builder) AddExtendedOutputSpend ¶
func (b *Builder) AddExtendedOutputSpend(targetAddress ledgerstate.Address, data []byte, amounts map[ledgerstate.Color]uint64, mint ...uint64) error
AddExtendedOutputSpend adds extended output using unspent amounts and spends it. Fails of not enough. Do not consume inputs
func (*Builder) AddMintingOutputConsume ¶
func (b *Builder) AddMintingOutputConsume(targetAddress ledgerstate.Address, amount uint64, payload ...[]byte) error
AddMintingOutputConsume mints new tokens. Consumes additional iotas if needed
func (*Builder) AddNewAliasMint ¶
func (b *Builder) AddNewAliasMint(balances map[ledgerstate.Color]uint64, stateAddress ledgerstate.Address, stateData []byte) error
AddNewAliasMint creates new self governed chain. The identity of the chain is not known until the full transaction is produced
func (*Builder) AddOutputAndSpendUnspent ¶
func (b *Builder) AddOutputAndSpendUnspent(out ledgerstate.Output) error
AddOutputAndSpendUnspent spends the consumed-unspent tokens and adds output
func (*Builder) AddRemainderOutputIfNeeded ¶
func (b *Builder) AddRemainderOutputIfNeeded(remainderAddr ledgerstate.Address, data []byte, compress ...bool) error
AddRemainderOutputIfNeeded consumes already touched inputs and spends consumed-unspend. Creates reminder output if needed
func (*Builder) AddSigLockedColoredOutput ¶
func (b *Builder) AddSigLockedColoredOutput(targetAddress ledgerstate.Address, amounts map[ledgerstate.Color]uint64, mint ...uint64) error
AddSigLockedColoredOutput creates output, consumes inputs if needed
func (*Builder) AddSigLockedIOTAOutput ¶
func (b *Builder) AddSigLockedIOTAOutput(targetAddress ledgerstate.Address, amount uint64, mint ...uint64) error
AddSigLockedIOTAOutput adds output with iotas by consuming inputs supports minting (coloring) of part of consumed iotas
func (*Builder) AliasNextChainedOutput ¶
func (b *Builder) AliasNextChainedOutput(addressAlias ledgerstate.Address) (*ledgerstate.AliasOutput, error)
AliasNextChainedOutput creates chained output without consuming it
func (*Builder) BuildEssence ¶
func (b *Builder) BuildEssence(compress ...bool) (*ledgerstate.TransactionEssence, []ledgerstate.Output, error)
BuildEssence builds essence of the transaction. Compress option: - true means take all consumable inputs - false means take only touched (consumed) outputs. This is the default
func (*Builder) BuildWithED25519 ¶
func (b *Builder) BuildWithED25519(keyPairs ...*ed25519.KeyPair) (*ledgerstate.Transaction, error)
BuildWithED25519 build complete transaction and signs/unlocks with provided keys
func (*Builder) ConsumeAliasInput ¶
func (b *Builder) ConsumeAliasInput(addressAlias ledgerstate.Address) error
ConsumeAliasInput consumes chain input by alias
func (*Builder) ConsumeAmounts ¶
func (b *Builder) ConsumeAmounts(amounts map[ledgerstate.Color]uint64) bool
ConsumeAmounts consumes specified amounts and adds it to consumed-unspent pool
func (*Builder) ConsumeInputByOutputID ¶
func (b *Builder) ConsumeInputByOutputID(id ledgerstate.OutputID) error
ConsumeInputByOutputID consumes input by outputID
func (*Builder) ConsumeRemainingBalances ¶
func (b *Builder) ConsumeRemainingBalances(compress bool) []*ConsumableOutput
ConsumeRemainingBalances consumes touched balances
func (*Builder) ConsumedUnspent ¶
func (b *Builder) ConsumedUnspent() map[ledgerstate.Color]uint64
ConsumedUnspent return consumed-unspend pool
func (*Builder) Spend ¶
func (b *Builder) Spend(spend map[ledgerstate.Color]uint64) error
Spend spends from consumed-unspend. Return an error if not enough funds
func (*Builder) SpendConsumedUnspent ¶
func (b *Builder) SpendConsumedUnspent() map[ledgerstate.Color]uint64
SpendConsumedUnspent spends all consumed-unspent pool (empties it) and returns what was spent
func (*Builder) WithAccessPledge ¶
WithAccessPledge sets the access mana pledge
func (*Builder) WithConsensusPledge ¶
WithConsensusPledge sets the consensus mana pledge
func (*Builder) WithTimestamp ¶
WithTimestamp sets timestamp
func (*Builder) WithVersion ¶
func (b *Builder) WithVersion(v ledgerstate.TransactionEssenceVersion) *Builder
WithVersion sets Version property
type ConsumableOutput ¶
type ConsumableOutput struct {
// contains filtered or unexported fields
}
ConsumableOutput represents a wrapper of the output object. It allows 'consume' tokens and track how many remain to be consumed
func NewConsumables ¶
func NewConsumables(out ...ledgerstate.Output) []*ConsumableOutput
NewConsumables creates a slice of consumables out of slice of output objects
func SelectConsumed ¶
func SelectConsumed(consumables ...*ConsumableOutput) []*ConsumableOutput
SelectConsumed filters out untouched consumables and returns those which were consumed
func (*ConsumableOutput) Clone ¶
func (o *ConsumableOutput) Clone() *ConsumableOutput
Clone clones the consumable
func (*ConsumableOutput) ConsumableBalance ¶
func (o *ConsumableOutput) ConsumableBalance(color ledgerstate.Color) uint64
ConsumableBalance return number of tokens remaining to consume on the consumable
func (*ConsumableOutput) NothingRemains ¶
func (o *ConsumableOutput) NothingRemains() bool
NothingRemains returns true if no tokens remain to be consumed
func (*ConsumableOutput) WasConsumed ¶
func (o *ConsumableOutput) WasConsumed() bool
WasConsumed return true if consumable was 'touched', it some tokens were already consumed