Skip to content

Latest commit

 

History

History
51 lines (43 loc) · 2.43 KB

File metadata and controls

51 lines (43 loc) · 2.43 KB
description
An introduction and overview of the VeChainThor blockchain transaction model.

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
	MaxFeePerGas          *big.Int
	MaxPriorityFeePerGas  *big.Int
	DependsOn             *thor.Bytes32 `rlp:"nil"`
	Nonce                 uint64
	Reserved              reserved
	Signature             []byte
}

Fields within the transaction body, $$\Omega$$ , 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 legacy transactions
  • Gas – maximum amount of gas allowed to pay for the transaction
  • MaxFeePerGas - the absolute maximum to pay per unit of gas
  • MaxPriorityFeePerGas - the absolute maximum tip to pay per unit of gas directly to the proposer
  • 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\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 %}