mirror of
https://github.com/ton-blockchain/ton
synced 2025-02-13 03:32:22 +00:00
* TVM v6 * New tuple with unpacked config parameters in c7 * New instructions for calculating fees * Change unpacked_config_tuple, fix typo --------- Co-authored-by: SpyCheese <mikle98@yandex.ru>
3.8 KiB
3.8 KiB
Global versions
Global version is a parameter specified in ConfigParam 8
(block.tlb).
Various features are enabled depending on the global version.
Version 4
New TVM instructions
PREVMCBLOCKS
,PREVKEYBLOCK
GLOBALID
HASHEXT(A)(R)
ECRECOVER
SENDMSG
RUNVM
,RUNVMX
GASCONSUMED
RIST255_...
instructionsBLS_...
instructionsP256_CHKSIGNS
,P256_CHKSIGNU
Division
Division instruction can add a number to the
intermediate value before division (e.g. (xy+w)/z
).
Stack operations
- Arguments of
PICK
,ROLL
,ROLLREV
,BLKSWX
,REVX
,DROPX
,XCHGX
,CHKDEPTH
,ONLYTOPX
,ONLYX
are now unlimited. ROLL
,ROLLREV
,BLKSWX
,REVX
,ONLYTOPX
consume more gas when arguments are big.
c7 tuple
c7 tuple extended from 10 to 14 elements:
- 10: code of the smart contract.
- 11: value of the incoming message.
- 12: fees collected in the storage phase.
- 13: information about previous blocks.
Action phase
- If "send message" action fails, the account is required to pay for processing cells of the message.
- Flag +16 in actions "Send message", "Reserve", "Change library" causes bounce if action fails.
Storage phase
- Unpaid storage fee is now saved to
due_payment
Version 5
Gas limits
Version 5 enables higher gas limits for special contracts.
- Gas limit for all transactions on special contracts is set to
special_gas_limit
fromConfigParam 20
(which is 35M at the moment of writing). Previously only ticktock transactions had this limit, while ordinary transactions had a default limit ofgas_limit
gas (1M). - Gas usage of special contracts is not taken into account when checking block limits. This allows keeping masterchain block limits low while having high gas limits for elector.
- Gas limit on
EQD_v9j1rlsuHHw2FIhcsCFFSD367ldfDdCKcsNmNpIRzUlu
is increased tospecial_gas_limit * 2
until 2024-02-29. See this post for details.
Loading libraries
- Loading "nested libraries" (i.e. a library cell that points to another library cell) throws an exception.
- Loading a library consumes gas for cell load only once (for the library cell), not twice (both for the library cell and the cell in the library).
XLOAD
now works differently. When it takes a library cell, it returns the cell that it points to. This allows loading "nested libraries", if needed.
Version 6
c7 tuple
c7 tuple extended from 14 to 15 elements. The new element is a tuple that contains some config parameters as cell slices. If the parameter is absent from the config, the value is null.
- 0:
StoragePrices
fromConfigParam 18
. Not the whole dict, but only the one StoragePrices entry (one which corresponds to the current time). - 1:
ConfigParam 19
(global id). - 2:
ConfigParam 20
(mc gas prices). - 3:
ConfigParam 21
(gas prices). - 4:
ConfigParam 24
(mc fwd fees). - 5:
ConfigParam 25
(fwd fees). - 6:
ConfigParam 43
(size limits).
New TVM instructions
GETEXECUTIONPRICE
(gas_used is_mc - price
) - calculates gas fee.GETSTORAGEPRICE
(cells bits seconds is_mc - price
) - calculates storage fees (only current StoragePrices entry is used).GETFORWARDPRICE
(cells bits is_mc - price
) - calculates forward fee.GETPRECOMPILEDGAS
(- null
) - reserved, currently returnsnull
.gas_used
,cells
,bits
,time_delta
are integers in range0..2^63-1
.
Other changes
GLOBALID
getsConfigParam 19
from the tuple, not from the config dict. This decreases gas usage.SENDMSG
getsConfigParam 24/25
(message prices) from the tuple, not from the config dict, and also usesConfigParam 43
to get max_msg_cells.