Skip to content

Commit

Permalink
fix: compilation errors
Browse files Browse the repository at this point in the history
  • Loading branch information
k-yang committed Jan 14, 2025
1 parent 8507e06 commit bd6e0d5
Show file tree
Hide file tree
Showing 4 changed files with 234 additions and 48 deletions.
24 changes: 22 additions & 2 deletions x/evm/evmmodule/genesis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ import (
"cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
gethcommon "github.com/ethereum/go-ethereum/common"
gethcore "github.com/ethereum/go-ethereum/core/types"
"github.com/stretchr/testify/suite"

"github.com/NibiruChain/nibiru/v2/eth"
"github.com/NibiruChain/nibiru/v2/x/evm"
"github.com/NibiruChain/nibiru/v2/x/evm/embeds"
"github.com/NibiruChain/nibiru/v2/x/evm/evmmodule"
"github.com/NibiruChain/nibiru/v2/x/evm/evmtest"
"github.com/NibiruChain/nibiru/v2/x/evm/keeper"
)

type Suite struct {
Expand Down Expand Up @@ -53,12 +55,30 @@ func (s *Suite) TestExportInitGenesis() {
)
s.Require().NoError(err)

txConfig := deps.EvmKeeper.TxConfig(deps.Ctx, gethcommon.BigToHash(big.NewInt(0)))
stateDB := deps.EvmKeeper.NewStateDB(deps.Ctx, txConfig)
evmCfg := deps.EvmKeeper.GetEVMConfig(deps.Ctx)
evmMsg := gethcore.NewMessage(
evm.EVM_MODULE_ADDRESS,
&evm.EVM_MODULE_ADDRESS,
deps.EvmKeeper.GetAccNonce(deps.Ctx, evm.EVM_MODULE_ADDRESS),
big.NewInt(0),
keeper.Erc20GasLimitExecute,
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
[]byte{},
gethcore.AccessList{},
false,
)
evmObj := deps.EvmKeeper.NewEVM(deps.Ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB)

// Transfer ERC-20 tokens to user A
_, _, err = deps.EvmKeeper.ERC20().Transfer(erc20Addr, fromUser, toUserA, amountToSendA, deps.Ctx)
_, _, err = deps.EvmKeeper.ERC20().Transfer(erc20Addr, fromUser, toUserA, amountToSendA, deps.Ctx, evmObj)
s.Require().NoError(err)

// Transfer ERC-20 tokens to user B
_, _, err = deps.EvmKeeper.ERC20().Transfer(erc20Addr, fromUser, toUserB, amountToSendB, deps.Ctx)
_, _, err = deps.EvmKeeper.ERC20().Transfer(erc20Addr, fromUser, toUserB, amountToSendB, deps.Ctx, evmObj)
s.Require().NoError(err)

// Create fungible token from bank coin
Expand Down
61 changes: 53 additions & 8 deletions x/evm/precompile/oracle_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ethereum/go-ethereum/common"
gethcommon "github.com/ethereum/go-ethereum/common"
gethcore "github.com/ethereum/go-ethereum/core/types"
"github.com/stretchr/testify/suite"

"github.com/NibiruChain/nibiru/v2/x/evm"
Expand Down Expand Up @@ -62,15 +64,36 @@ func (s *OracleSuite) TestOracle_HappyPath() {
resp *evm.MsgEthereumTxResponse,
err error,
) {
return deps.EvmKeeper.CallContract(
contractInput, err := embeds.SmartContract_Oracle.ABI.Pack(
string(precompile.OracleMethod_queryExchangeRate),
"unibi:uusd",
)
s.Require().NoError(err)
txConfig := deps.EvmKeeper.TxConfig(ctx, gethcommon.BigToHash(big.NewInt(0)))
stateDB := deps.EvmKeeper.NewStateDB(ctx, txConfig)
evmCfg := deps.EvmKeeper.GetEVMConfig(ctx)
evmMsg := gethcore.NewMessage(
evm.EVM_MODULE_ADDRESS,
&evm.EVM_MODULE_ADDRESS,
deps.EvmKeeper.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS),
big.NewInt(0),
OracleGasLimitQuery,
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
contractInput,
gethcore.AccessList{},
false,
)
evmObj := deps.EvmKeeper.NewEVM(ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB)
return deps.EvmKeeper.CallContractWithInput(
ctx,
embeds.SmartContract_Oracle.ABI,
evmObj,
deps.Sender.EthAddr,
&precompile.PrecompileAddr_Oracle,
false,
contractInput,
OracleGasLimitQuery,
"queryExchangeRate",
"unibi:uusd",
)
}

Expand Down Expand Up @@ -121,15 +144,37 @@ func (s *OracleSuite) TestOracle_HappyPath() {
ctx := deps.Ctx.
WithBlockTime(secondsLater).
WithBlockHeight(deps.Ctx.BlockHeight() + 50)
resp, err := deps.EvmKeeper.CallContract(

contractInput, err := embeds.SmartContract_Oracle.ABI.Pack(
string(precompile.OracleMethod_chainLinkLatestRoundData),
"unibi:uusd",
)
s.Require().NoError(err)
txConfig := deps.EvmKeeper.TxConfig(ctx, gethcommon.BigToHash(big.NewInt(0)))
stateDB := deps.EvmKeeper.NewStateDB(ctx, txConfig)
evmCfg := deps.EvmKeeper.GetEVMConfig(ctx)
evmMsg := gethcore.NewMessage(
evm.EVM_MODULE_ADDRESS,
&evm.EVM_MODULE_ADDRESS,
deps.EvmKeeper.GetAccNonce(ctx, evm.EVM_MODULE_ADDRESS),
big.NewInt(0),
OracleGasLimitQuery,
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
contractInput,
gethcore.AccessList{},
false,
)
evmObj := deps.EvmKeeper.NewEVM(ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB)
resp, err := deps.EvmKeeper.CallContractWithInput(
ctx,
embeds.SmartContract_Oracle.ABI,
evmObj,
deps.Sender.EthAddr,
&precompile.PrecompileAddr_Oracle,
false,
contractInput,
OracleGasLimitQuery,
"chainLinkLatestRoundData",
"unibi:uusd",
)
s.NoError(err)

Expand Down
172 changes: 137 additions & 35 deletions x/evm/precompile/wasm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@ import (
"math/big"

wasm "github.com/CosmWasm/wasmd/x/wasm/types"
gethcommon "github.com/ethereum/go-ethereum/common"
gethcore "github.com/ethereum/go-ethereum/core/types"

"github.com/NibiruChain/nibiru/v2/x/common/testutil"
"github.com/NibiruChain/nibiru/v2/x/common/testutil/testapp"
"github.com/NibiruChain/nibiru/v2/x/evm"
"github.com/NibiruChain/nibiru/v2/x/evm/embeds"
"github.com/NibiruChain/nibiru/v2/x/evm/evmtest"
"github.com/NibiruChain/nibiru/v2/x/evm/precompile"
Expand Down Expand Up @@ -48,19 +51,39 @@ func (s *WasmSuite) TestExecuteHappy() {
err = json.Unmarshal(fundsJson, &funds)
s.Require().NoError(err, "fundsJson %s, funds %s", fundsJson, funds)

ethTxResp, err := deps.EvmKeeper.CallContract(
contractInput, err := embeds.SmartContract_Wasm.ABI.Pack(
string(precompile.WasmMethod_execute),
wasmContract.String(),
msgArgsBz,
funds,
)
s.Require().NoError(err)
txConfig := deps.EvmKeeper.TxConfig(deps.Ctx, gethcommon.BigToHash(big.NewInt(0)))
stateDB := deps.EvmKeeper.NewStateDB(deps.Ctx, txConfig)
evmCfg := deps.EvmKeeper.GetEVMConfig(deps.Ctx)
evmMsg := gethcore.NewMessage(
evm.EVM_MODULE_ADDRESS,
&evm.EVM_MODULE_ADDRESS,
deps.EvmKeeper.GetAccNonce(deps.Ctx, evm.EVM_MODULE_ADDRESS),
big.NewInt(0),
evmtest.FunTokenGasLimitSendToEvm,
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
contractInput,
gethcore.AccessList{},
false,
)
evmObj := deps.EvmKeeper.NewEVM(deps.Ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB)

ethTxResp, err := deps.EvmKeeper.CallContractWithInput(
deps.Ctx,
embeds.SmartContract_Wasm.ABI,
evmObj,
deps.Sender.EthAddr,
&precompile.PrecompileAddr_Wasm,
true,
contractInput,
WasmGasLimitExecute,
string(precompile.WasmMethod_execute),
[]any{
wasmContract.String(),
msgArgsBz,
funds,
}...,
)
s.Require().NoError(err)
s.Require().NotEmpty(ethTxResp.Ret)
Expand All @@ -79,19 +102,14 @@ func (s *WasmSuite) TestExecuteHappy() {
}
`, coinDenom, deps.Sender.NibiruAddr))

ethTxResp, err = deps.EvmKeeper.CallContract(
ethTxResp, err = deps.EvmKeeper.CallContractWithInput(
deps.Ctx,
embeds.SmartContract_Wasm.ABI,
evmObj,
deps.Sender.EthAddr,
&precompile.PrecompileAddr_Wasm,
true,
contractInput,
WasmGasLimitExecute,
string(precompile.WasmMethod_execute),
[]any{
wasmContract.String(),
msgArgsBz,
funds,
}...,
)

s.Require().NoError(err)
Expand Down Expand Up @@ -137,18 +155,38 @@ func (s *WasmSuite) assertWasmCounterStateRaw(
) {
deps.ResetGasMeter()

ethTxResp, err := deps.EvmKeeper.CallContract(
contractInput, err := embeds.SmartContract_Wasm.ABI.Pack(
string(precompile.WasmMethod_queryRaw),
wasmContract.String(),
[]byte(`state`),
)
s.Require().NoError(err)
txConfig := deps.EvmKeeper.TxConfig(deps.Ctx, gethcommon.BigToHash(big.NewInt(0)))
stateDB := deps.EvmKeeper.NewStateDB(deps.Ctx, txConfig)
evmCfg := deps.EvmKeeper.GetEVMConfig(deps.Ctx)
evmMsg := gethcore.NewMessage(
evm.EVM_MODULE_ADDRESS,
&evm.EVM_MODULE_ADDRESS,
deps.EvmKeeper.GetAccNonce(deps.Ctx, evm.EVM_MODULE_ADDRESS),
big.NewInt(0),
WasmGasLimitQuery,
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
contractInput,
gethcore.AccessList{},
false,
)
evmObj := deps.EvmKeeper.NewEVM(deps.Ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB)

ethTxResp, err := deps.EvmKeeper.CallContractWithInput(
deps.Ctx,
embeds.SmartContract_Wasm.ABI,
evmObj,
deps.Sender.EthAddr,
&precompile.PrecompileAddr_Wasm,
true,
contractInput,
WasmGasLimitQuery,
string(precompile.WasmMethod_queryRaw),
[]any{
wasmContract.String(),
[]byte(`state`),
}...,
)
s.Require().NoError(err)
s.Require().NotEmpty(ethTxResp.Ret)
Expand Down Expand Up @@ -310,15 +348,37 @@ func (s *WasmSuite) TestSadArgsExecute() {
s.Run(tc.name, func() {
deps := evmtest.NewTestDeps()

ethTxResp, err := deps.EvmKeeper.CallContract(
contractInput, err := abi.Pack(
string(tc.methodName),
tc.callArgs...,
)
s.Require().NoError(err)
txConfig := deps.EvmKeeper.TxConfig(deps.Ctx, gethcommon.BigToHash(big.NewInt(0)))
stateDB := deps.EvmKeeper.NewStateDB(deps.Ctx, txConfig)
evmCfg := deps.EvmKeeper.GetEVMConfig(deps.Ctx)
evmMsg := gethcore.NewMessage(
evm.EVM_MODULE_ADDRESS,
&evm.EVM_MODULE_ADDRESS,
deps.EvmKeeper.GetAccNonce(deps.Ctx, evm.EVM_MODULE_ADDRESS),
big.NewInt(0),
WasmGasLimitExecute,
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
contractInput,
gethcore.AccessList{},
false,
)
evmObj := deps.EvmKeeper.NewEVM(deps.Ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB)

ethTxResp, err := deps.EvmKeeper.CallContractWithInput(
deps.Ctx,
abi,
evmObj,
deps.Sender.EthAddr,
&precompile.PrecompileAddr_Wasm,
true,
contractInput,
WasmGasLimitExecute,
string(tc.methodName),
tc.callArgs...,
)

s.Require().ErrorContains(err, tc.wantError, "ethTxResp %v", ethTxResp)
Expand Down Expand Up @@ -443,15 +503,36 @@ func (s *WasmSuite) TestExecuteMultiValidation() {

for _, tc := range testCases {
s.Run(tc.name, func() {
ethTxResp, err := deps.EvmKeeper.CallContract(
contractInput, err := embeds.SmartContract_Wasm.ABI.Pack(
string(precompile.WasmMethod_executeMulti),
tc.executeMsgs,
)
s.Require().NoError(err)
txConfig := deps.EvmKeeper.TxConfig(deps.Ctx, gethcommon.BigToHash(big.NewInt(0)))
stateDB := deps.EvmKeeper.NewStateDB(deps.Ctx, txConfig)
evmCfg := deps.EvmKeeper.GetEVMConfig(deps.Ctx)
evmMsg := gethcore.NewMessage(
evm.EVM_MODULE_ADDRESS,
&evm.EVM_MODULE_ADDRESS,
deps.EvmKeeper.GetAccNonce(deps.Ctx, evm.EVM_MODULE_ADDRESS),
big.NewInt(0),
WasmGasLimitExecute,
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
contractInput,
gethcore.AccessList{},
false,
)
evmObj := deps.EvmKeeper.NewEVM(deps.Ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB)
ethTxResp, err := deps.EvmKeeper.CallContractWithInput(
deps.Ctx,
embeds.SmartContract_Wasm.ABI,
evmObj,
deps.Sender.EthAddr,
&precompile.PrecompileAddr_Wasm,
true,
contractInput,
WasmGasLimitExecute,
string(precompile.WasmMethod_executeMulti),
[]any{tc.executeMsgs}...,
)

if tc.wantError != "" {
Expand Down Expand Up @@ -489,15 +570,36 @@ func (s *WasmSuite) TestExecuteMultiPartialExecution() {
},
}

ethTxResp, err := deps.EvmKeeper.CallContract(
contractInput, err := embeds.SmartContract_Wasm.ABI.Pack(
string(precompile.WasmMethod_executeMulti),
executeMsgs,
)
s.Require().NoError(err)
txConfig := deps.EvmKeeper.TxConfig(deps.Ctx, gethcommon.BigToHash(big.NewInt(0)))
stateDB := deps.EvmKeeper.NewStateDB(deps.Ctx, txConfig)
evmCfg := deps.EvmKeeper.GetEVMConfig(deps.Ctx)
evmMsg := gethcore.NewMessage(
evm.EVM_MODULE_ADDRESS,
&evm.EVM_MODULE_ADDRESS,
deps.EvmKeeper.GetAccNonce(deps.Ctx, evm.EVM_MODULE_ADDRESS),
big.NewInt(0),
WasmGasLimitExecute,
big.NewInt(0),
big.NewInt(0),
big.NewInt(0),
contractInput,
gethcore.AccessList{},
false,
)
evmObj := deps.EvmKeeper.NewEVM(deps.Ctx, evmMsg, evmCfg, nil /*tracer*/, stateDB)
ethTxResp, err := deps.EvmKeeper.CallContractWithInput(
deps.Ctx,
embeds.SmartContract_Wasm.ABI,
evmObj,
deps.Sender.EthAddr,
&precompile.PrecompileAddr_Wasm,
true,
contractInput,
WasmGasLimitExecute,
string(precompile.WasmMethod_executeMulti),
[]any{executeMsgs}...,
)

// Verify that the call failed
Expand Down
Loading

0 comments on commit bd6e0d5

Please sign in to comment.