Transaction Model

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,
, are defined as:
  • 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 fields To, Value and Data 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 and Unused.
    • Feature as 32-bit unsigned integer and default set as 0.For Designated Gas Payer (VIP-191) must be set as 1
    • 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{Ωsig}),sk))sig = sign(hash(rlp\lbrace\Omega - sig \rbrace), sk))
    is the transaction sender's private key.
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.