Advanced
Various niche, dangerous or unstable features which can produce unexpected results and are meant to be used by the more experienced users.
gasConsumed
Available since Tact 1.5Returns the nanoToncoin Int
amount of gas consumed by TVM in the current transaction so far. The resulting value includes the cost of calling this function.
Usage example:
myStorageDue
Available since Tact 1.5Returns the nanoToncoin Int
amount of the accumulated storage fee debt. Storage fees are deducted from the incoming message value before the new contract balance is calculated.
Usage example:
getStorageFee
Available since Tact 1.5Calculates and returns the storage fee in nanoToncoins Int
for storing a contract with a given number of cells
and bits
for a number of seconds
. Uses the prices of the masterchain if isMasterchain
is true
, otherwise the prices of the basechain. The current prices are obtained from the config param 18 of TON Blockchain.
Note, that the values of cells
and bits
are taken modulo their maximum values plus . That is, specifying values higher than those listed in account state limits (max_acc_state_cells
and max_acc_state_bits
) will have the same result as with specifying the exact limits. In addition, make sure you take into account the deduplication of cells with the same hash.
Attempts to specify negative number of cells
, bits
or seconds
throw an exception with exit code 5: Integer out of expected range
.
Usage example:
getComputeFee
Available since Tact 1.5Calculates and returns the compute fee in nanoToncoins Int
for a transaction that consumed gasUsed
amount of gas. Uses the prices of the masterchain if isMasterchain
is true
, otherwise the prices of the basechain. The current prices are obtained from the config param 20 for the masterchain and config param 21 for the basechain of TON Blockchain.
When the gasUsed
is less than a certain threshold called flat_gas_limit
, there’s a minimum price to pay based on the value of flat_gas_price
. The less gas is used below this threshold, the higher the minimum price will be. See the example for getSimpleComputeFee()
to derive that threshold.
Attempts to specify negative value of gasUsed
throw an exception with exit code 5: Integer out of expected range
.
Usage example:
getSimpleComputeFee
Available since Tact 1.5Similar to getComputeFee()
, but without the flat_gas_price
, i.e. without a minimum price to pay if the gasUsed
is less than a certain threshold called flat_gas_limit
. Calculates and returns only the gasUsed
times the current gas price.
Attempts to specify negative value of gasUsed
throw an exception with exit code 5: Integer out of expected range
.
Usage example:
Context.readForwardFee
Extension function for the Context
.
Reads forward fee and returns it as Int
amount of nanoToncoins.
Usage example:
getForwardFee
Available since Tact 1.5Calculates and returns the forward fee in nanoToncoins Int
for an outgoing message consisting of a given number of cells
and bits
. Uses the prices of the masterchain if isMasterchain
is true
, otherwise the prices of the basechain. The current prices are obtained from the config param 24 for the masterchain and config param 25 for the basechain of TON Blockchain.
If both the source and the destination addresses are in the basechain, then specify isMasterchain
as false
. Otherwise, specify true
.
Note, that the values of cells
and bits
are taken modulo their maximum values plus . That is, specifying values higher than those listed in account state limits (max_msg_cells
and max_msg_bits
) will have the same result as with specifying the exact limits.
However, regardless of the values of cells
and bits
, this function always adds the minimum price based on the value of lump_price
. See the example for getSimpleForwardFee()
to derive it. In addition, make sure you take into account the deduplication of cells with the same hash, since for example the root cell and its data bits don’t count towards the forward fee and are covered by the lump_price
.
Attempts to specify negative number of cells
or bits
throw an exception with exit code 5: Integer out of expected range
.
Usage example:
getSimpleForwardFee
Available since Tact 1.5Similar to getForwardFee()
, but without the lump_price
, i.e. without the minimum price to pay regardless of the amount of cells
or bits
. Calculates and returns only the cells
times the current cell price plus bits
times the current bit price.
Attempts to specify negative number of cells
or bits
throw an exception with exit code 5: Integer out of expected range
.
Usage example:
getOriginalFwdFee
Available since Tact 1.5Calculates and returns the so-called original forward fee in nanoToncoins Int
for an outgoing message based on the fwdFee
obtained from the incoming message. If both the source and the destination addresses are in the basechain, then specify isMasterchain
as false
. Otherwise, specify true
.
This function is useful when the outgoing message depends heavily on the structure of the incoming message, so much so that you cannot fully predict the fee using getForwardFee()
alone. Even if you could, calculating the exact fee with nanoToncoin-level precision can be very expensive, so the approximation given by this function is often good enough.
Attempts to specify a negative value of fwdFee
throw an exception with exit code 5: Integer out of expected range
.
Usage example:
getConfigParam
Loads a configuration parameter of TON Blockchain by its id
number.
Usage examples:
acceptMessage
Agrees to buy some gas to finish the current transaction. This action is required to process external messages, which bring no value (hence no gas) with themselves.
Usage example:
commit
Commits the current state of registers c4
(“persistent data”) and c5
(“actions”), so that the current execution is considered “successful” with the saved values even if an exception in compute phase is thrown later.
Usage example:
nativePrepareRandom
Prepares a random number generator by using nativeRandomizeLt()
. Automatically called by randomInt()
and random()
functions.
Usage example:
nativeRandomize
Randomizes the pseudo-random number generator with the specified seed x
.
Usage example:
nativeRandomizeLt
Randomizes the random number generator with the current logical time.
Usage example:
nativeRandom
Generates and returns an -bit random number just like randomInt()
, but doesn’t initialize the random generator with nativePrepareRandom()
beforehand.
nativeRandomInterval
Generates and returns a -bit random number in the range from to max
similar to random()
, but doesn’t initialize the random generator with nativePrepareRandom()
beforehand.
nativeSendMessage
Queues the message to be sent by specifying the complete cell
and the message mode
.
nativeReserve
Calls native raw_reserve
function with specified amount and mode. The raw_reserve
is a function that creates an output action to reserve a specific amount of nanoToncoins from the remaining balance of the account.
It has the following signature in FunC:
The function takes two arguments:
amount
: The number of nanoToncoins to reserve.mode
: Determines the reservation behavior.
Function raw_reserve
is roughly equivalent to creating an outbound message carrying the specified amount
of nanoToncoins (or b
amount
nanoToncoins, where b
is the remaining balance) to oneself. This ensures that subsequent output actions cannot spend more money than the remainder.
It’s possible to use raw Int
values and manually provide them for the mode
, but for your convenience there’s a set of constants which you may use to construct the compound mode
with ease. Take a look at the following tables for more information on base modes and optional flags.
Base modes
The resulting mode
value can have the following base modes:
Mode value | Constant name | Description |
---|---|---|
ReserveExact | Reserves exactly the specified amount of nanoToncoins. | |
ReserveAllExcept | Reserves all, but the specified amount of nanoToncoins. | |
ReserveAtMost | Reserves at most the specified amount of nanoToncoins. |
Optional flags
Additionally, the resulting mode
can have the following optional flags added:
Flag value | Constant name | Description |
---|---|---|
ReserveAddOriginalBalance | Increases the amount by the original balance of the current account (before the compute phase), including all extra currencies. | |
ReserveInvertSign | Negates the amount value before performing the reservation. | |
ReserveBounceIfActionFail | Bounces the transaction if reservation fails. |
Combining modes with flags
To make the Int
value for mode
parameter, you just have to combine base modes with optional flags by applying the bitwise OR operation:
parseStdAddress
Available since Tact 1.5Converts a Slice
containing an address into the StdAddress
Struct and returns it. The StdAddress
is a built-in Struct that consists of:
Field | Type | Description |
---|---|---|
workchain | Int as int8 | Workchain ID of the address, usually (basechain) or (masterchain) |
address | Int as uint256 | Address in the specified workchain |
Attempts to pass a Slice
with layout different from the StdAddress
or to load more data than a given Slice
contains throw an exception with exit code 9: Cell underflow
.
Usage example:
parseVarAddress
Available since Tact 1.5Converts a Slice
containing an address of variable length into the VarAddress
Struct and returns it. The VarAddress
is a built-in Struct consisting of:
Field | Type | Description |
---|---|---|
workchain | Int as int32 | Workchain ID of the variable length address |
address | Slice | Address in the specified workchain |
Attempts to pass a Slice
with layout different from the VarAddress
or to load more data than a given Slice
contains throw an exception with exit code 9: Cell underflow
.
Usage example: