Precompiles
A precompile is a common functionality used in smart contracts that has been compiled in advance, so Ethereum nodes can run it more efficiently. From a contract's perspective, this is a single command like an opcode.
The Frontier EVM used on Astar network provides several useful precompiled contracts. These contracts are implemented in our ecosystem as a native implementation. The precompiled contracts 0x01
through 0x08
are the same as those in Ethereum (see list below). Additionally, Astar implements precompiled contracts starting from 0x5001
, that support new Astar features.
Ethereum Native Precompiles
Precompile | Address |
---|---|
ECRecover | 0x0000000000000000000000000000000000000001 |
Sha256 | 0x0000000000000000000000000000000000000002 |
Ripemd160 | 0x0000000000000000000000000000000000000003 |
Identity | 0x0000000000000000000000000000000000000004 |
Modexp | 0x0000000000000000000000000000000000000005 |
Bn128Add | 0x0000000000000000000000000000000000000006 |
Bn128Mul | 0x0000000000000000000000000000000000000007 |
Bn128Pairing | 0x0000000000000000000000000000000000000008 |
Non-Ethereum Native Precompiles
Precompile | Address |
---|---|
Sha3FIPS256 | 0x0000000000000000000000000000000000000400 |
Dispatch | 0x0000000000000000000000000000000000000401 |
ECRecoverPublicKey | 0x0000000000000000000000000000000000000402 |
Ed25519Verify | 0x0000000000000000000000000000000000000403 |
Astar Specific Precompiles
Precompile | Address |
---|---|
DappsStaking | 0x0000000000000000000000000000000000005001 |
Sr25519 | 0x0000000000000000000000000000000000005002 |
SubstrateEcdsa | 0x0000000000000000000000000000000000005003 |
XCM | 0x0000000000000000000000000000000000005004 |
assets-erc20 | ASSET_PRECOMPILE_ADDRESS_PREFIX |
The interface descriptions for these precompiles can be found in the precompiles
folder: Astar repo.
The Addresses can be checked in the Astar repo for each runtime in precompile.rs
files.
Usage Example
This section demonstrates how to interact with the dApp Staking precompile from your contract or using Remix IDE. Other precompiles can be accessed in a similar manner.
From contract
DappsStakingV3.sol
contains functions that mimic the interface of the latest version of dApp Staking
. The interface can be found in the Astar repository.
Developers are encouraged to use this interface to fully utilize dApp staking functionality.
import "./DappsStakingV3.sol";
contract A {
DAppStaking public constant DAPPS_STAKING = DAppStaking(0x0000000000000000000000000000000000005001);
/// @notice Check protocol state
/// @return ProtocolState: The current protocol state.
function checkProtocolState() public view returns (DAppStaking.ProtocolState memory) {
DAppStaking.ProtocolState memory protocolState = DAPPS_STAKING.protocol_state();
return protocolState;
}
}