Precompiles
Currency Swap precompile
Section titled “Currency Swap precompile”Use this precompile to transfer the funds from your EVM account to any Native account.
| Property | Description |
|---|---|
| Address | 0x0000000000000000000000000000000000000900 |
| Input | See contract interface. |
| Output | See contract interface. |
Contract interface
Section titled “Contract interface”// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.7.0 <0.9.0;
/** * @title Currency Swap Interface * * An interface enabling swapping the funds from EVM accounts to * native Substrate accounts. * * Address: 0x0000000000000000000000000000000000000900 */interface CurrencySwap { /** * Transfer the funds from an EVM account to native substrate account. * Selector: 76467cbd * * @param nativeAddress The native address to send the funds to. * @return success Whether or not the swap was successful. */ function swap(bytes32 nativeAddress) external payable returns (bool success);}Bioauth status check precompile
Section titled “Bioauth status check precompile”Use this precompile to check if the specified address has an active bioauth. Takes the validator public key (type AccountId in the Humanode runtime code, also known as native - or Substrate - account).
| Property | Description |
|---|---|
| Address | 0x0000000000000000000000000000000000000800 |
| Input |
The public key to check. |
| Output |
|
Helper Library
Section titled “Helper Library”You can use the helper library below together with your smart contract code to simplify invoking the precompile.
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
library bioauth { function isAuthenticated(bytes32 accountId) public view returns (bool result) { address precompile = 0x0000000000000000000000000000000000000800; bytes memory payload = abi.encodePacked(accountId); (bool success, bytes memory returnData) = precompile.staticcall(payload); assert(success); assert(returnData.length == 1); return (returnData[0] != 0); }}EVM to native account mapping precompile
Section titled “EVM to native account mapping precompile”Use this precompile to find a corresponding mapped native AccountId for provided EVM address. This is useful to be used in combination with Bioauth precompile as you don’t need to worry about a proper AccountId to do bioauth check.
Description
| Property | Description |
|---|---|
| Address | 0x0000000000000000000000000000000000000801 |
| Input |
|
| Output |
|
Helper Library
Section titled “Helper Library”You can use the helper library below together with your smart contract code to simplify invoking the precompile.
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
library evmAccounts { function claimedNativeAccount(bytes20 evmAddress) public view returns (bool, bytes32) { address precompile = 0x0000000000000000000000000000000000000801; bytes memory payload = abi.encodePacked(evmAddress); (bool success, bytes memory returnData) = precompile.staticcall(payload); assert(success); if (returnData.length == 0) { return (false, 0x0); } bytes32 nativeAccount = abi.decode(returnData, (bytes32)); return (true, nativeAccount); }}