VECHAIN Docs
Search
⌃K

Transaction Calculation

Intrinsic Gas Calculation

The intrinsic gas for a transaction is the amount of the transaction used before any code runs. in other words, it's a constant "transaction fee" plus a fee for every byte of data supplied with the transaction.The gas in the transaction needs to be greater than or equal to the intrinsic gas used by the transaction.
gintrinsic=g0+gtype+gdatag_{intrinsic} = g_{0} + g_{type} + g_{data}
  • g0g_{0}
    is the constant transaction fee 5,000
  • There are two types of
    gtypeg_{type}
    • Regular transaction : 16,000
    • Contract creation : 48,000
  • gdata=4nz+68nnzg_{data} = 4 \cdot n_z + 68 \cdot n_{nz}
    • nzn_z
      is the number of bytes equal to zero within the data in the
      ithi^{th}
      clause and
      nnzn_{nz}
      the number of bytes not equal to zero

Total Transaction Gas Calculation

VeChainThor clauses allows a single transaction to carry out multiple tasks. Therefore, it needs to execute all the clauses cost in the transaction.
The total gas,
gtotalg_{total}
, required for a transaction can be computed as:
gtotal=g0+i(gtypei+gdatai+gvmi)g_{total} = g0 + \sum_i(g_{type}^i+g_{data}^i+g_{vm}^i)
  • where
    g0=5,000g_0 = 5,000
  • There are two types of
    gtypeg_{type}
    • Regular transaction : 16,000
    • Contract creation : 48,000
  • gdatai=4nzi+68nnzig_{data}^i = 4 \cdot n_z^i + 68 \cdot n_{nz}^i
    • nzin_z^i
      is the number of bytes equal to zero within the data in the
      ithi^{th}
      clause and
      nnzin_{nz}^i
      the number of bytes not equal to zero
  • gvmig_{vm}^i
    is the gas cost returned by the virtual machine for executing the
    ithi^{th}
    clause.

Proof of Work

VeChainThor allows the transaction-level proof of work and converts the proved work into extra gas price that will be used by the system to generate more reward to the block generator that validates the transaction. In other words, users can utilize their local computational power to make their transactions more likely to be included in a new block.
In particular, the computational work can be proved through fields Nonce and BlockRef in the transaction model. Let
nn
and
gg
represent the values of TX fields Nonce and Gas, respectively. We use
bb
to denote the number of the block indexed by TX field BlockRef and
hh
the number of the block that includes the TX. Let
Ω\Omega
denote the TX without fields Nonce and Signature,
SS
the TX sender's account address,
PP
the base gas price,
HH
the hash function and
EE
the RLP encoding function.
The PoW,
ww
, is defined as:
w=min(2641,22561H(H(E(ΩS))n))w = min(2^{64}-1, \frac {{2^{256}-1}}{H(H(E(\Omega \parallel S))\parallel n)})
The extra gas price,
Δ\Delta
, is computed as:
ΔP=P0(1gmin[g,w103(11.04)h13600243])\Delta P = P_0(\frac1{g}min[g,\frac w{10^3}(\frac 1{1.04})^\frac {h-1}{3600\cdot24\cdot3}])
with the following constraint
hh030\mid h - h_0 \mid \leq 30
The VTHO reward for packing the TX into a new block is computed as:
r=310g(P0(1+ϕ)+ΔP)r = \frac3{10}g^*(P_0(1+\phi) + \Delta P)
where
ϕ[0,1]\phi \in [0,1]
is the gas price coefficient and
gg^*
the actual amount of gas used for executing the TX.
From the above equations, we know that
  1. 1.
    Since
    h0h_0
    is a valid block number, BlockRef must refer to an existing block, that is, its value must equal the first four bytes of an existing block ID;
  2. 2.
    The TX must be packed into a block within the period of 30 blocks after block
    bb
    , or otherwise, the PoW would not be recognized by the system;
  3. 3.
    The extra gas price
    ΔP\Delta P
    can not be greater than base gas price P.

Total Gas Price

The total gas price for the transaction sender is computed as:
ptotal=pbase+pbaseϕ255p^{total} = p^{base} + p^{base} \frac\phi{255}
and the total price for block generators as
ptotal=pbase+pbaseϕ255+Δpp^{total} = p^{base} + p^{base} \frac\phi{255} + \Delta p
where
ϕ\phi
is the value of field GasPriceCoef(is the bounded interval between 0-255) and
Δp\Delta p
the extra gas price converted from the proven local computational work.
It can be seen that the gas price used to calculate the transaction cost depends solely on the input gas-price coefficient while the reward for packing the transaction into a block varies due to the transaction-level proof-of-work mechanism.