Documentation ¶
Index ¶
- Constants
- func ComputeOutputID(sc *SpendCommitment, inputType uint8, vote []byte) (h bc.Hash, err error)
- func GetStatusMerkleTreeProof(statuses []*bc.TxVerifyResult, flags []uint8) []*bc.Hash
- func GetTxMerkleTreeProof(txs []*Tx, relatedTxs []*Tx) ([]*bc.Hash, []uint8)
- func MapBlock(old *Block) *bc.Block
- func MapTx(oldTx *TxData) *bc.Tx
- func TxMerkleRoot(transactions []*bc.Tx) (root bc.Hash, err error)
- func TxStatusMerkleRoot(tvrs []*bc.TxVerifyResult) (root bc.Hash, err error)
- func ValidateStatusMerkleTreeProof(hashes []*bc.Hash, flags []uint8, relatedStatus []*bc.TxVerifyResult, ...) bool
- func ValidateTxMerkleTreeProof(hashes []*bc.Hash, flags []uint8, relatedHashes []*bc.Hash, merkleRoot bc.Hash) bool
- type Block
- type BlockCommitment
- type BlockHeader
- type BlockWitness
- type CoinbaseInput
- type CrossChainInput
- type CrossChainOutput
- type IntraChainOutput
- type OutputCommitment
- type SpendCommitment
- type SpendInput
- type Tx
- type TxData
- type TxInput
- func NewCoinbaseInput(arbitrary []byte) *TxInput
- func NewCrossChainInput(arguments [][]byte, sourceID bc.Hash, assetID bc.AssetID, ...) *TxInput
- func NewSpendInput(arguments [][]byte, sourceID bc.Hash, assetID bc.AssetID, ...) *TxInput
- func NewVetoInput(arguments [][]byte, sourceID bc.Hash, assetID bc.AssetID, ...) *TxInput
- func (t *TxInput) Amount() uint64
- func (t *TxInput) Arguments() [][]byte
- func (t *TxInput) AssetAmount() bc.AssetAmount
- func (t *TxInput) AssetID() bc.AssetID
- func (t *TxInput) ControlProgram() []byte
- func (t *TxInput) SetArguments(args [][]byte)
- func (t *TxInput) SpentOutputID() (o bc.Hash, err error)
- type TxOutput
- type TypedInput
- type TypedOutput
- type VetoInput
- type VoteTxOutput
Constants ¶
const ( SerBlockHeader SerBlockTransactions SerBlockFull )
serflag variables, start with 1
const ( // FlagAssist represent assist node FlagAssist = iota // FlagTxParent represent the parent of transaction of node FlagTxParent // FlagTxLeaf represent transaction of node FlagTxLeaf )
merkleFlag represent the type of merkle tree node, it's used to generate the structure of merkle tree Bitcoin has only two flags, which zero means the hash of assist node. And one means the hash of the related transaction node or it's parents, which distinguish them according to the height of the tree. But in the bytom, the height of transaction node is not fixed, so we need three flags to distinguish these nodes.
const ( CrossChainInputType uint8 = iota SpendInputType CoinbaseInputType VetoInputType )
serflag variables for input types.
const ( IntraChainOutputType uint8 = iota CrossChainOutputType VoteOutputType )
serflag variables for output types.
Variables ¶
This section is empty.
Functions ¶
func ComputeOutputID ¶
ComputeOutputID assembles an intra-chain(!) output entry given a spend commitment and computes and returns its corresponding entry ID.
func GetStatusMerkleTreeProof ¶
func GetStatusMerkleTreeProof(statuses []*bc.TxVerifyResult, flags []uint8) []*bc.Hash
GetStatusMerkleTreeProof return a proof of merkle tree, which used to proof the status of transaction is valid
func GetTxMerkleTreeProof ¶
GetTxMerkleTreeProof return a proof of merkle tree, which used to proof the transaction does exist in the merkle tree
func TxMerkleRoot ¶
TxMerkleRoot creates a merkle tree from a slice of transactions and returns the root hash of the tree.
func TxStatusMerkleRoot ¶
func TxStatusMerkleRoot(tvrs []*bc.TxVerifyResult) (root bc.Hash, err error)
TxStatusMerkleRoot creates a merkle tree from a slice of bc.TxVerifyResult
func ValidateStatusMerkleTreeProof ¶
func ValidateStatusMerkleTreeProof(hashes []*bc.Hash, flags []uint8, relatedStatus []*bc.TxVerifyResult, merkleRoot bc.Hash) bool
ValidateStatusMerkleTreeProof validate the merkle tree of transaction status
Types ¶
type Block ¶
type Block struct { BlockHeader Transactions []*Tx }
Block describes a complete block, including its header and the transactions it contains.
func (*Block) MarshalText ¶
MarshalText fulfills the json.Marshaler interface. This guarantees that blocks will get deserialized correctly when being parsed from HTTP requests.
func (*Block) MarshalTextForBlockHeader ¶
MarshalTextForBlockHeader fulfills the json.Marshaler interface.
func (*Block) MarshalTextForTransactions ¶
MarshalTextForTransactions fulfills the json.Marshaler interface.
func (*Block) UnmarshalText ¶
UnmarshalText fulfills the encoding.TextUnmarshaler interface.
type BlockCommitment ¶
type BlockCommitment struct { // TransactionsMerkleRoot is the root hash of the Merkle binary hash tree // formed by the hashes of all transactions included in the block. TransactionsMerkleRoot bc.Hash `json:"transaction_merkle_root"` // TransactionStatusHash is the root hash of the Merkle binary hash tree // formed by the hashes of all transaction verify results TransactionStatusHash bc.Hash `json:"transaction_status_hash"` }
BlockCommitment store the TransactionsMerkleRoot && TransactionStatusHash
type BlockHeader ¶
type BlockHeader struct { Version uint64 // The version of the block. Height uint64 // The height of the block. PreviousBlockHash bc.Hash // The hash of the previous block. Timestamp uint64 // The time of the block in milliseconds. BlockCommitment BlockWitness }
BlockHeader defines information about a block and is used in the Bytom
func (*BlockHeader) Hash ¶
func (bh *BlockHeader) Hash() bc.Hash
Hash returns complete hash of the block header.
func (*BlockHeader) MarshalText ¶
func (bh *BlockHeader) MarshalText() ([]byte, error)
MarshalText fulfills the json.Marshaler interface. This guarantees that block headers will get deserialized correctly when being parsed from HTTP requests.
func (*BlockHeader) Time ¶
func (bh *BlockHeader) Time() time.Time
Time returns the time represented by the Timestamp in block header.
func (*BlockHeader) UnmarshalText ¶
func (bh *BlockHeader) UnmarshalText(text []byte) error
UnmarshalText fulfills the encoding.TextUnmarshaler interface.
type BlockWitness ¶
type BlockWitness struct { // Witness is a vector of arguments for validating this block. Witness [][]byte }
func (*BlockWitness) Delete ¶
func (bw *BlockWitness) Delete(index uint64)
func (*BlockWitness) Get ¶
func (bw *BlockWitness) Get(index uint64) []byte
func (*BlockWitness) Set ¶
func (bw *BlockWitness) Set(index uint64, data []byte)
type CoinbaseInput ¶
type CoinbaseInput struct {
Arbitrary []byte
}
CoinbaseInput records the coinbase message
func (*CoinbaseInput) InputType ¶
func (cb *CoinbaseInput) InputType() uint8
InputType is the interface function for return the input type
type CrossChainInput ¶
type CrossChainInput struct { SpendCommitmentSuffix []byte // The unconsumed suffix of the spend commitment Arguments [][]byte // Witness SpendCommitment VMVersion uint64 AssetDefinition []byte IssuanceProgram []byte }
CrossChainInput satisfies the TypedInput interface and represents a cross-chain transaction.
func (*CrossChainInput) InputType ¶
func (si *CrossChainInput) InputType() uint8
InputType is the interface function for return the input type.
type CrossChainOutput ¶
type CrossChainOutput struct { OutputCommitment // Unconsumed suffixes of the commitment and witness extensible strings. CommitmentSuffix []byte }
CrossChainOutput satisfies the TypedOutput interface and represents a cross-chain transaction.
func (*CrossChainOutput) OutputType ¶
func (it *CrossChainOutput) OutputType() uint8
type IntraChainOutput ¶
type IntraChainOutput struct { OutputCommitment // Unconsumed suffixes of the commitment and witness extensible strings. CommitmentSuffix []byte }
IntraChainOutput satisfies the TypedOutput interface and represents a intra-chain transaction.
func (*IntraChainOutput) OutputType ¶
func (it *IntraChainOutput) OutputType() uint8
type OutputCommitment ¶
type OutputCommitment struct { bc.AssetAmount VMVersion uint64 ControlProgram []byte }
OutputCommitment contains the commitment data for a transaction output.
type SpendCommitment ¶
type SpendCommitment struct { bc.AssetAmount SourceID bc.Hash SourcePosition uint64 VMVersion uint64 ControlProgram []byte }
SpendCommitment contains the commitment data for a transaction output.
type SpendInput ¶
type SpendInput struct { SpendCommitmentSuffix []byte // The unconsumed suffix of the spend commitment Arguments [][]byte // Witness SpendCommitment }
SpendInput satisfies the TypedInput interface and represents a spend transaction.
func (*SpendInput) InputType ¶
func (si *SpendInput) InputType() uint8
InputType is the interface function for return the input type.
type Tx ¶
Tx holds a transaction along with its hash.
func NewTx ¶
NewTx returns a new Tx containing data and its hash. If you have already computed the hash, use struct literal notation to make a Tx object directly.
func (*Tx) SetInputArguments ¶
SetInputArguments sets the Arguments field in input n.
func (*Tx) UnmarshalText ¶
UnmarshalText fulfills the encoding.TextUnmarshaler interface.
type TxData ¶
type TxData struct { Version uint64 SerializedSize uint64 TimeRange uint64 Inputs []*TxInput Outputs []*TxOutput }
TxData encodes a transaction in the blockchain.
func (*TxData) MarshalText ¶
MarshalText fulfills the json.Marshaler interface.
func (*TxData) UnmarshalText ¶
UnmarshalText fulfills the encoding.TextUnmarshaler interface.
type TxInput ¶
type TxInput struct { AssetVersion uint64 TypedInput CommitmentSuffix []byte WitnessSuffix []byte }
TxInput is the top level struct of tx input.
func NewCoinbaseInput ¶
NewCoinbaseInput creates a new coinbase input struct
func NewCrossChainInput ¶
func NewCrossChainInput(arguments [][]byte, sourceID bc.Hash, assetID bc.AssetID, amount, sourcePos, vmVersion uint64, assetDefinition, issuanceProgram []byte) *TxInput
NewCrossChainInput create a new CrossChainInput struct. The source is created/issued by trusted federation and hence there is no need to refer to it.
func NewSpendInput ¶
func NewSpendInput(arguments [][]byte, sourceID bc.Hash, assetID bc.AssetID, amount, sourcePos uint64, controlProgram []byte) *TxInput
NewSpendInput create a new SpendInput struct.
func NewVetoInput ¶
func NewVetoInput(arguments [][]byte, sourceID bc.Hash, assetID bc.AssetID, amount, sourcePos uint64, controlProgram []byte, vote []byte) *TxInput
NewVetoInput create a new VetoInput struct.
func (*TxInput) AssetAmount ¶
func (t *TxInput) AssetAmount() bc.AssetAmount
AssetAmount return the asset id and amount of the txinput.
func (*TxInput) ControlProgram ¶
ControlProgram return the control program of the spend input
func (*TxInput) SetArguments ¶
SetArguments set the args for the input
type TxOutput ¶
type TxOutput struct { AssetVersion uint64 TypedOutput // Unconsumed suffixes of the commitment and witness extensible strings. CommitmentSuffix []byte }
TxOutput is the top level struct of tx output.
func NewCrossChainOutput ¶
NewCrossChainOutput create a new output struct
func NewIntraChainOutput ¶
NewIntraChainOutput create a new output struct
func NewVoteOutput ¶
NewVoteOutput create a new output struct
func (*TxOutput) AssetAmount ¶
func (to *TxOutput) AssetAmount() bc.AssetAmount
AssetAmount return the asset id and amount of a txoutput.
func (*TxOutput) ControlProgram ¶
ControlProgram return the control program of the txoutput
func (*TxOutput) OutputCommitment ¶
func (to *TxOutput) OutputCommitment() OutputCommitment
OutputCommitment return the OutputCommitment of a txoutput.
type TypedInput ¶
type TypedInput interface {
InputType() uint8
}
TypedInput return the txinput type.
type TypedOutput ¶
type TypedOutput interface {
OutputType() uint8
}
TypedOutput return the txoutput type.
type VetoInput ¶
type VetoInput struct { VetoCommitmentSuffix []byte // The unconsumed suffix of the output commitment Arguments [][]byte // Witness Vote []byte // voter xpub SpendCommitment }
VetoInput satisfies the TypedInput interface and represents a veto transaction.
type VoteTxOutput ¶
type VoteTxOutput struct { OutputCommitment // Unconsumed suffixes of the commitment and witness extensible strings. CommitmentSuffix []byte Vote []byte }
VoteTxOutput satisfies the TypedOutput interface and represents a vote transaction.
func (*VoteTxOutput) OutputType ¶
func (it *VoteTxOutput) OutputType() uint8