Skip to main content

Pre-compiles and Solidity functions

=nil; provides several pre-compiled contracts that abstract over complex operations and provide a quick way to execute computationally-heavy actions.

ASYNC_CALL

ASYNC_CALL is the pre-compile used in the asyncCall() function, which allows for async execution of contract functions:

function asyncCall(
address dst,
address refundTo,
address bounceTo,
uint feeCredit,
uint8 forwardKind,
bool deploy,
uint value,
bytes memory callData
) internal returns(bool)

Alternative signature for calling a contract with custom currencies:

function asyncCall(
address dst,
address refundTo,
address bounceTo,
uint feeCredit,
uint8 forwardKind,
bool deploy,
uint value,
Token[] memory tokens,
bytes memory callData
)

A concise signature:

    function asyncCall(
address dst,
address bounceTo,
uint value,
bytes memory callData
) internal returns(bool)

The contract takes a function call and spawns a new message. Whenever this message is processed, the function call is executed.

The 'Core concepts' section contains a primer on async execution and there is also a tutorial on using asyncCall().

VERIFY_SIGNATURE

VERIFY_SIGNATURE is the pre-compile used in the validateSignature() function. The function has the following signature:

function validateSignature(
bytes memory pubkey,
uint256 messageHash,
bytes memory signature
) internal view returns (bool)

The function verifies if the given message signature is valid for the provided pubKey, messageHash and signature.

SEND_MESSAGE

SEND_MESSAGE is the pre-compile used in the sendMessage() function:

function sendMessage(uint g, bytes memory message) internal

The function sends a 'raw' message via the pre-compile.

IS_INTERNAL_MESSAGE

IS_INTERNAL_MESSAGE is the pre-compile used in the isInternalMessage() function:

function isInternalMessage() internal view returns (bool)

The function is called as part of the onlyInternal and onlyExternal function modifiers to check if a given message is internal.

SEND_CURRENCY_SYNC

This precompile is used in the syncCall() function:

function syncCall(
address dst,
uint gas,
uint value,
Token[] memory tokens,
bytes memory callData
) internal returns(bool, bytes memory)

The function calls a smart contract synchronously and, if needed, sends custom tokens.

MINT_CURRENCY

MINT_CURRENCY is the pre-compile used in the mintToken() function:

function mintToken(uint256 id, uint256 amount) internal returns(bool)

The function mints the custom token with the given id.

GET_CURRENCY_BALANCE

GET_CURRENCY_BALANCE is the pre-compile used in the tokensBalance() function:

function tokensBalance(address addr, uint256 id) internal returns(uint256)

The function shows how many tokens with the given id are held by the contract at the given addr.

GET_MESSAGE_TOKENS

GET_MESSAGE_TOKENS is the pre-compile used in the msgTokens() function.

function msgTokens() internal returns(Token[] memory)

The function returns the list of tokens for the current message.

GET_GAS_PRICE

GET_GAS_PRICE is used in the getGasPrice() function:

function getGasPrice(address addr) internal returns(uint256)

The function returns the current gas price at the shard where the specified address is located.