description |
---|
An introduction and overview of the VeChainThor blockchain transaction model. |
VeChainThor defines a transaction in Golang as:
// transaction.go
type Transaction struct {
body body
}
type body struct {
ChainTag byte
BlockRef uint64
Expiration uint32
Clauses []*Clause
GasPriceCoef uint8
Gas uint64
DependsOn *thor.Bytes32 `rlp:"nil"`
Nonce uint64
Reserved reserved
Signature []byte
}
Fields within the transaction body
,
-
ChainTag
– last byte of the genesis block ID which is used to identify a blockchain to prevent the cross-chain replay attack; -
BlockRef
- reference to a specific block; -
Expiration
– how long, in terms of the number of blocks, the transaction will be allowed to be mined in VeChainThor; -
Clauses
– an array of Clause objects each of which contains fieldsTo
,Value
andData
to enable a single transaction to carry multiple tasks issued by the transaction sender; -
GasPriceCoef
– coefficient used to calculate the gas price for the transaction. -
Gas
– maximum amount of gas allowed to pay for the transaction; -
DependsOn
– ID of the transaction on which the current transaction depends; -
Nonce
– a random number set by the wallet / user; -
Reserved
- reserved Object contains two fields:Features
andUnused
.-
Feature
as 32-bit unsigned integer and default set as0
.For Designated Gas Payer (VIP-191) must be set as1
-
Unused
an array of reserved field for backward compatibility, it MUST be set as an empty array for now otherwise the transaction will be considered invalid.
-
-
Signature
- transaction signature,$$sig = sign(hash(rlp\lbrace\Omega - sig \rbrace), sk))$$ ,where$$sk$$ is the transaction sender's private key.
{% hint style="info" %} Refer to the meta-transaction-features section for more detail on the unique aspects of transactions within the VeChainThor blockchain when compared to other blockchains. {% endhint %}