Documentation
¶
Overview ¶
Package precompile implements custom precompiles for the Nibiru EVM.
Precompiles are special, built-in contract interfaces that exist at predefined addresses and run custom logic outside of what is possible in standard Solidity contracts. This package extends the default Ethereum precompiles with Nibiru-specific functionality.
Key components:
- InitPrecompiles: Initializes and returns a map of precompiled contracts.
- PrecompileFunToken: Implements the FunToken precompile for ERC20-to-bank transfers.
The package also provides utility functions for working with precompiles, such as "ABIMethodByID" and "OnRunStart" for common precompile execution setup.
Index ¶
- Variables
- func DecomposeInput(abi *gethabi.ABI, input []byte) (method *gethabi.Method, args []interface{}, err error)
- func ErrArgTypeValidation(solidityHint string, arg any) error
- func ErrInvalidArgs(err error) error
- func ErrMethodCalled(method *gethabi.Method, wrapped error) error
- func InitPrecompiles(k keepers.PublicKeepers) (precompiles map[gethcommon.Address]vm.PrecompiledContract)
- func PrecompileFunToken(keepers keepers.PublicKeepers) vm.PrecompiledContract
- func PrecompileOracle(keepers keepers.PublicKeepers) vm.PrecompiledContract
- func PrecompileWasm(keepers keepers.PublicKeepers) vm.PrecompiledContract
- func RequiredGas(input []byte, abi *gethabi.ABI) uint64
- type OracleMethod
- type PrecompileMethod
- type Wasm
- type WasmBankCoin
Constants ¶
This section is empty.
Variables ¶
var PrecompileAddr_FunToken = gethcommon.HexToAddress("0x0000000000000000000000000000000000000800")
Precompile address for "FunToken.sol", the contract that enables transfers of ERC20 tokens to "nibi" addresses as bank coins using the ERC20's `FunToken` mapping.
var PrecompileAddr_Oracle = gethcommon.HexToAddress("0x0000000000000000000000000000000000000801")
Precompile address for "Oracle.sol", the contract that enables queries for exchange rates
var PrecompileAddr_Wasm = gethcommon.HexToAddress("0x0000000000000000000000000000000000000802")
Precompile address for "Wasm.sol",
Functions ¶
func DecomposeInput ¶
func ErrArgTypeValidation ¶
Error short-hand for type validation
func InitPrecompiles ¶
func InitPrecompiles( k keepers.PublicKeepers, ) (precompiles map[gethcommon.Address]vm.PrecompiledContract)
InitPrecompiles initializes and returns a map of precompiled contracts for the EVM. It combines default Ethereum precompiles with custom Nibiru precompiles.
Parameters:
- k: A keepers.PublicKeepers instance providing access to various blockchain state.
Returns:
- A map of Ethereum addresses to PrecompiledContract implementations.
func PrecompileFunToken ¶
func PrecompileFunToken(keepers keepers.PublicKeepers) vm.PrecompiledContract
func PrecompileOracle ¶
func PrecompileOracle(keepers keepers.PublicKeepers) vm.PrecompiledContract
func PrecompileWasm ¶
func PrecompileWasm(keepers keepers.PublicKeepers) vm.PrecompiledContract
Types ¶
type OracleMethod ¶
type OracleMethod string
const (
OracleMethod_QueryExchangeRate OracleMethod = "queryExchangeRate"
)
type PrecompileMethod ¶
type PrecompileMethod string
const ( WasmMethod_execute PrecompileMethod = "execute" WasmMethod_query PrecompileMethod = "query" WasmMethod_instantiate PrecompileMethod = "instantiate" WasmMethod_executeMulti PrecompileMethod = "executeMulti" WasmMethod_queryRaw PrecompileMethod = "queryRaw" )
Contract methods from Wasm.sol
const (
FunTokenMethod_BankSend PrecompileMethod = "bankSend"
)
type Wasm ¶
type Wasm struct {
*wasmkeeper.PermissionedKeeper
wasmkeeper.Keeper
}
Wasm: A struct embedding keepers for read and write operations in Wasm, such as execute, query, and instantiate.
type WasmBankCoin ¶
WasmBankCoin is a naked struct for the "BankCoin" type from Wasm.sol. The ABI parser requires an unnamed strict, so this type is only used in tests.