From 155737a30188b0440d3fa5330b64a2601c9cb490 Mon Sep 17 00:00:00 2001 From: Oleg Nikonychev Date: Mon, 1 Jul 2024 22:44:28 +0400 Subject: [PATCH] feat(evm): init evm precompiles on start --- app/app.go | 4 ++++ x/evm/keeper/keeper.go | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/app/app.go b/app/app.go index a5bc73557..b89a7b817 100644 --- a/app/app.go +++ b/app/app.go @@ -10,6 +10,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/NibiruChain/nibiru/app/ante" "github.com/NibiruChain/nibiru/app/wasmext" @@ -259,6 +260,9 @@ func NewNibiruApp( app.capabilityKeeper.Seal() } + ctx := sdk.NewContext(app.CommitMultiStore(), tmproto.Header{}, false, nil) + app.EvmKeeper.InitPrecompiles(ctx) + return app } diff --git a/x/evm/keeper/keeper.go b/x/evm/keeper/keeper.go index e809b7577..55c5275c0 100644 --- a/x/evm/keeper/keeper.go +++ b/x/evm/keeper/keeper.go @@ -4,6 +4,9 @@ package keeper import ( "math/big" + "github.com/NibiruChain/collections" + "github.com/NibiruChain/nibiru/precompiles/erc20" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" "github.com/ethereum/go-ethereum/core" gethcore "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" @@ -81,6 +84,25 @@ func NewKeeper( } } +func (k *Keeper) InitPrecompiles(ctx sdk.Context) { + // Create precompile objects for fungible tokens + iter := k.FunTokens.Iterate(ctx, collections.Range[[]byte]{}) + defer iter.Close() + for ; iter.Valid(); iter.Next() { + erc20Precompile, err := erc20.NewPrecompile(iter.Value(), k.bankKeeper.(bankkeeper.Keeper)) + if err != nil { + panic(err) + } + err = k.AddEVMExtensions( + ctx, + erc20Precompile, + ) + if err != nil { + panic(err) + } + } +} + // GetEvmGasBalance: Implements `evm.EVMKeeper` from // "github.com/NibiruChain/nibiru/app/ante/evm": Load account's balance of gas // tokens for EVM execution