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 VoteOutput
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
}
BlockWitness save the consensus node sign
func (*BlockWitness) Delete ¶
func (bw *BlockWitness) Delete(index uint64)
Delete remove data from index position
func (*BlockWitness) Get ¶
func (bw *BlockWitness) Get(index uint64) []byte
Get return data from index position
func (*BlockWitness) Set ¶
func (bw *BlockWitness) Set(index uint64, data []byte)
Set save data to index position
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
AssetDefinition []byte
IssuanceVMVersion uint64
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
OutputType implement the txout interface
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
OutputType implement the txout interface
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, IssuanceVMVersion 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 VoteOutput ¶ added in v0.3.0
type VoteOutput struct {
OutputCommitment
// Unconsumed suffixes of the commitment and witness extensible strings.
CommitmentSuffix []byte
Vote []byte
}
VoteOutput satisfies the TypedOutput interface and represents a vote transaction.
func (*VoteOutput) OutputType ¶ added in v0.3.0
func (it *VoteOutput) OutputType() uint8
OutputType implement the txout interface