From bad0847025ffd6ba395cbda4a7aba4d79432eb1e Mon Sep 17 00:00:00 2001 From: HuangYi Date: Tue, 31 Oct 2023 15:13:16 +0800 Subject: [PATCH 01/11] Problem: logs in callback contract are lost Closes: #1231 Solution: - re-emit those logs --- CHANGELOG.md | 1 + integration_tests/test_ica_precompile.py | 2 ++ x/cronos/keeper/keeper.go | 14 ++++++++++++-- x/cronos/keeper/precompiles/utils.go | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 664257e030..d7fe420fc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - [#1217](https://github.com/crypto-org-chain/cronos/pull/1217) Use the default chain-id behavour in sdk. - [#1216](https://github.com/crypto-org-chain/cronos/pull/1216) Update ethermint to fix of avoid redundant parse chainID from gensis when start server. - [#1230](https://github.com/crypto-org-chain/cronos/pull/1230) Fix mem store in versiondb multistore. +- [#]() Re-emit logs in callback contract. *October 17, 2023* diff --git a/integration_tests/test_ica_precompile.py b/integration_tests/test_ica_precompile.py index 52c39e14c7..09311a1823 100644 --- a/integration_tests/test_ica_precompile.py +++ b/integration_tests/test_ica_precompile.py @@ -302,3 +302,5 @@ def submit_msgs_ro(func, str): assert expected_seq == last_seq assert status == Status.FAIL assert cli_host.balance(ica_address, denom=denom) == balance + + print(tcontract.events.OnPacketResult().get_logs()) diff --git a/x/cronos/keeper/keeper.go b/x/cronos/keeper/keeper.go index 8a013756a4..9bfb1acedd 100644 --- a/x/cronos/keeper/keeper.go +++ b/x/cronos/keeper/keeper.go @@ -23,6 +23,7 @@ import ( cronosprecompiles "github.com/crypto-org-chain/cronos/v2/x/cronos/keeper/precompiles" "github.com/crypto-org-chain/cronos/v2/x/cronos/types" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/vm" // this line is used by starport scaffolding # ibc/keeper/import ) @@ -298,8 +299,17 @@ func (k Keeper) onPacketResult( return err } gasLimit := k.GetParams(ctx).MaxCallbackGas - _, _, err = k.CallEVM(ctx, &contractAddr, data, big.NewInt(0), gasLimit) - return err + _, rsp, err := k.CallEVM(ctx, &contractAddr, data, big.NewInt(0), gasLimit) + if err != nil { + return err + } + + if stateDB, ok := ctx.Value("statedb").(vm.StateDB); ok { + for _, l := range rsp.Logs { + stateDB.AddLog(l.ToEthereum()) + } + } + return nil } func (k Keeper) IBCOnAcknowledgementPacketCallback( diff --git a/x/cronos/keeper/precompiles/utils.go b/x/cronos/keeper/precompiles/utils.go index 34c70ceb0d..4b5a477116 100644 --- a/x/cronos/keeper/precompiles/utils.go +++ b/x/cronos/keeper/precompiles/utils.go @@ -45,6 +45,7 @@ func exec[Req any, PReq interface { var res Resp if err := stateDB.ExecuteNativeAction(contract, converter, func(ctx sdk.Context) error { var err error + ctx = ctx.WithValue("statedb", stateDB) res, err = action(ctx, msg) return err }); err != nil { From 3a4335c6b70555a82c234475776f1a8cd2672430 Mon Sep 17 00:00:00 2001 From: yihuang Date: Tue, 31 Oct 2023 15:15:11 +0800 Subject: [PATCH 02/11] Update CHANGELOG.md Signed-off-by: yihuang --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7fe420fc3..2e11d90d80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ - [#1217](https://github.com/crypto-org-chain/cronos/pull/1217) Use the default chain-id behavour in sdk. - [#1216](https://github.com/crypto-org-chain/cronos/pull/1216) Update ethermint to fix of avoid redundant parse chainID from gensis when start server. - [#1230](https://github.com/crypto-org-chain/cronos/pull/1230) Fix mem store in versiondb multistore. -- [#]() Re-emit logs in callback contract. +- [#1233](https://github.com/crypto-org-chain/cronos/pull/1233) Re-emit logs in callback contract. *October 17, 2023* From b65f2b15653b87a7f91cb3eec501430b6c22f31c Mon Sep 17 00:00:00 2001 From: HuangYi Date: Tue, 31 Oct 2023 15:22:54 +0800 Subject: [PATCH 03/11] constant refactor --- x/cronos/keeper/keeper.go | 2 +- x/cronos/keeper/precompiles/utils.go | 3 ++- x/cronos/types/keys.go | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/x/cronos/keeper/keeper.go b/x/cronos/keeper/keeper.go index 9bfb1acedd..769a08fd48 100644 --- a/x/cronos/keeper/keeper.go +++ b/x/cronos/keeper/keeper.go @@ -304,7 +304,7 @@ func (k Keeper) onPacketResult( return err } - if stateDB, ok := ctx.Value("statedb").(vm.StateDB); ok { + if stateDB, ok := ctx.Value(types.StateDBContextKey).(vm.StateDB); ok { for _, l := range rsp.Logs { stateDB.AddLog(l.ToEthereum()) } diff --git a/x/cronos/keeper/precompiles/utils.go b/x/cronos/keeper/precompiles/utils.go index 4b5a477116..eee9c1dd73 100644 --- a/x/cronos/keeper/precompiles/utils.go +++ b/x/cronos/keeper/precompiles/utils.go @@ -7,6 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/crypto-org-chain/cronos/v2/x/cronos/types" "github.com/ethereum/go-ethereum/common" "github.com/evmos/ethermint/x/evm/statedb" ) @@ -45,7 +46,7 @@ func exec[Req any, PReq interface { var res Resp if err := stateDB.ExecuteNativeAction(contract, converter, func(ctx sdk.Context) error { var err error - ctx = ctx.WithValue("statedb", stateDB) + ctx = ctx.WithValue(types.StateDBContextKey, stateDB) res, err = action(ctx, msg) return err }); err != nil { diff --git a/x/cronos/types/keys.go b/x/cronos/types/keys.go index 91a8b6b2e6..5ce37cec80 100644 --- a/x/cronos/types/keys.go +++ b/x/cronos/types/keys.go @@ -27,6 +27,8 @@ const ( prefixContractToDenom paramsKey prefixAdminToPermissions + + StateDBContextKey = "statedb" ) // KVStore key prefixes From 8a3e3d4c2dc64e4942c505e4ded23c4263a6423b Mon Sep 17 00:00:00 2001 From: HuangYi Date: Tue, 31 Oct 2023 16:04:06 +0800 Subject: [PATCH 04/11] fix getLogs --- integration_tests/test_ica_precompile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/test_ica_precompile.py b/integration_tests/test_ica_precompile.py index 09311a1823..2115ee9216 100644 --- a/integration_tests/test_ica_precompile.py +++ b/integration_tests/test_ica_precompile.py @@ -303,4 +303,4 @@ def submit_msgs_ro(func, str): assert status == Status.FAIL assert cli_host.balance(ica_address, denom=denom) == balance - print(tcontract.events.OnPacketResult().get_logs()) + print(tcontract.events.OnPacketResult.getLogs()) From 59f0a5371541b4d29c4548b91a5dc13463677e84 Mon Sep 17 00:00:00 2001 From: HuangYi Date: Wed, 1 Nov 2023 15:28:36 +0800 Subject: [PATCH 05/11] use precompile relayer to test ica callback --- integration_tests/test_ica_precompile.py | 91 +++++++++++++++++++++++- 1 file changed, 88 insertions(+), 3 deletions(-) diff --git a/integration_tests/test_ica_precompile.py b/integration_tests/test_ica_precompile.py index 2115ee9216..09444bb6aa 100644 --- a/integration_tests/test_ica_precompile.py +++ b/integration_tests/test_ica_precompile.py @@ -1,8 +1,11 @@ import base64 +import itertools import json from enum import IntEnum import pytest +from hexbytes import HexBytes +from pystarport import cluster from web3.datastructures import AttributeDict from .ibc_utils import ( @@ -45,9 +48,15 @@ class Status(IntEnum): @pytest.fixture(scope="module") def ibc(request, tmp_path_factory): "prepare-network" - name = "ibc" + name = "ibc_rly" path = tmp_path_factory.mktemp(name) - yield from prepare_network(path, name, incentivized=False, connection_only=True) + yield from prepare_network( + path, + name, + incentivized=False, + connection_only=True, + relayer=cluster.Relayer.RLY.value, + ) def register_acc(cli, w3, register, query, data, addr, channel_id): @@ -181,6 +190,7 @@ def test_sc_call(ibc): cli_host = ibc.chainmain.cosmos_cli() cli_controller = ibc.cronos.cosmos_cli() w3 = ibc.cronos.w3 + begin_block = w3.eth.block_number contract = w3.eth.contract(address=CONTRACT, abi=contract_info) jsonfile = CONTRACTS["TestICA"] tcontract = deploy_contract(w3, jsonfile) @@ -303,4 +313,79 @@ def submit_msgs_ro(func, str): assert status == Status.FAIL assert cli_host.balance(ica_address, denom=denom) == balance - print(tcontract.events.OnPacketResult.getLogs()) + # check logs emitted in callback + logs = get_logs_since(w3, addr, begin_block) + assert_logs_equal( + logs, + [ + { + "address": addr, + "topics": [ + HexBytes( + "0xb58d968e02022e42ce2b8f5c494b724806ff73755eb957ff2be7a62947" + "8ac9f9" + ) + ], + "data": HexBytes( + "0x00000000000000000000000000000000000000000000000000000000000000" + "010000000000000000000000000000000000000000000000000000000000000001" + ), + "transactionIndex": 1, + "logIndex": 0, + "removed": False, + }, + { + "address": addr, + "topics": [ + HexBytes( + "0xb58d968e02022e42ce2b8f5c494b724806ff73755eb957ff2be7a62947" + "8ac9f9" + ) + ], + "data": HexBytes( + "0x00000000000000000000000000000000000000000000000000000000000000" + "020000000000000000000000000000000000000000000000000000000000000001" + ), + "transactionIndex": 1, + "logIndex": 0, + "removed": False, + }, + { + "address": addr, + "topics": [ + HexBytes( + "0xb58d968e02022e42ce2b8f5c494b724806ff73755eb957ff2be7a62947" + "8ac9f9" + ) + ], + "data": HexBytes( + "0x00000000000000000000000000000000000000000000000000000000000000" + "030000000000000000000000000000000000000000000000000000000000000002" + ), + "transactionIndex": 1, + "logIndex": 0, + "removed": False, + }, + { + "address": addr, + "topics": [ + HexBytes( + "0xb58d968e02022e42ce2b8f5c494b724806ff73755eb957ff2be7a62947" + "8ac9f9" + ) + ], + "data": HexBytes( + "0x00000000000000000000000000000000000000000000000000000000000000" + "040000000000000000000000000000000000000000000000000000000000000002" + ), + "transactionIndex": 1, + "logIndex": 0, + "removed": False, + }, + ], + ) + + +def assert_logs_equal(logs, exp_logs): + for exp_log, log in itertools.zip_longest(exp_logs, logs): + assert exp_log.items() <= log.items() From 24750f14e34eb3e368e2dfe8189c54b7865238bc Mon Sep 17 00:00:00 2001 From: HuangYi Date: Wed, 1 Nov 2023 15:53:26 +0800 Subject: [PATCH 06/11] cover crc20 callbacks as well --- x/cronos/keeper/evm.go | 9 +++++++++ x/cronos/keeper/keeper.go | 8 +------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/x/cronos/keeper/evm.go b/x/cronos/keeper/evm.go index 3b17abb73b..9ff615e1f5 100644 --- a/x/cronos/keeper/evm.go +++ b/x/cronos/keeper/evm.go @@ -8,6 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/ethereum/go-ethereum/common" ethtypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" evmtypes "github.com/evmos/ethermint/x/evm/types" @@ -35,6 +36,14 @@ func (k Keeper) CallEVM(ctx sdk.Context, to *common.Address, data []byte, value if err != nil { return nil, nil, err } + + // if the call originally comes from an ibc-in precompiled message, re-emit the logs into the original stateDB. + if stateDB, ok := ctx.Value(types.StateDBContextKey).(vm.StateDB); ok { + for _, l := range ret.Logs { + stateDB.AddLog(l.ToEthereum()) + } + } + return &msg, ret, nil } diff --git a/x/cronos/keeper/keeper.go b/x/cronos/keeper/keeper.go index 769a08fd48..14aab65695 100644 --- a/x/cronos/keeper/keeper.go +++ b/x/cronos/keeper/keeper.go @@ -23,7 +23,6 @@ import ( cronosprecompiles "github.com/crypto-org-chain/cronos/v2/x/cronos/keeper/precompiles" "github.com/crypto-org-chain/cronos/v2/x/cronos/types" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/vm" // this line is used by starport scaffolding # ibc/keeper/import ) @@ -299,16 +298,11 @@ func (k Keeper) onPacketResult( return err } gasLimit := k.GetParams(ctx).MaxCallbackGas - _, rsp, err := k.CallEVM(ctx, &contractAddr, data, big.NewInt(0), gasLimit) + _, _, err = k.CallEVM(ctx, &contractAddr, data, big.NewInt(0), gasLimit) if err != nil { return err } - if stateDB, ok := ctx.Value(types.StateDBContextKey).(vm.StateDB); ok { - for _, l := range rsp.Logs { - stateDB.AddLog(l.ToEthereum()) - } - } return nil } From 9cb8be65e2adf5fc392d584ebff1774d4387c841 Mon Sep 17 00:00:00 2001 From: HuangYi Date: Wed, 1 Nov 2023 16:10:30 +0800 Subject: [PATCH 07/11] inject the statedb in ethermint --- go.mod | 2 +- go.sum | 4 ++-- gomod2nix.toml | 4 ++-- x/cronos/keeper/evm.go | 5 +++-- x/cronos/keeper/keeper.go | 6 +----- x/cronos/keeper/precompiles/utils.go | 2 -- x/cronos/types/keys.go | 2 -- 7 files changed, 9 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index 49be3460c3..561b82d3f2 100644 --- a/go.mod +++ b/go.mod @@ -234,7 +234,7 @@ replace ( // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt/v4 v4.4.2 github.com/ethereum/go-ethereum => github.com/evmos/go-ethereum v1.10.26-evmos-rc1 - github.com/evmos/ethermint => github.com/crypto-org-chain/ethermint v0.6.1-0.20231027030935-291bfa0458c4 + github.com/evmos/ethermint => github.com/crypto-org-chain/ethermint v0.6.1-0.20231101080732-b9078abfe0fd // Fix upstream GHSA-h395-qcrw-5vmq and GHSA-3vp4-m3rf-835h vulnerabilities. // TODO Remove it: https://github.com/cosmos/cosmos-sdk/issues/10409 github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.0 diff --git a/go.sum b/go.sum index 00183b6562..147cee1f5e 100644 --- a/go.sum +++ b/go.sum @@ -484,8 +484,8 @@ github.com/crypto-org-chain/cometbft-db v0.0.0-20231011055109-57922ac52a63 h1:R1 github.com/crypto-org-chain/cometbft-db v0.0.0-20231011055109-57922ac52a63/go.mod h1:rocwIfnS+kA060x64gkSIRvWB9StSppIkJuo5MWzL24= github.com/crypto-org-chain/cosmos-sdk v0.46.0-beta2.0.20231013072415-eec017435467 h1:m0/aHPIJAzi2MSP3TXzzbLTFf+koRFQiaYmerRZUtK4= github.com/crypto-org-chain/cosmos-sdk v0.46.0-beta2.0.20231013072415-eec017435467/go.mod h1:G384omH7cXgm90xXR7xpHvsKG7vdBaDuz4To6GpTHUU= -github.com/crypto-org-chain/ethermint v0.6.1-0.20231027030935-291bfa0458c4 h1:uLaq7qqIYJ2tJ5fQE5EBvqAgvM5Y4jWbz9V4AURwMGI= -github.com/crypto-org-chain/ethermint v0.6.1-0.20231027030935-291bfa0458c4/go.mod h1:rbAKU2rftDobCIoCiol3SO+bTqw2cERu9TEki7PvfK0= +github.com/crypto-org-chain/ethermint v0.6.1-0.20231101080732-b9078abfe0fd h1:8AWwJrxYtQxoZ1rrM9+w6MLScVe6LzskRo8UF9ep7Qs= +github.com/crypto-org-chain/ethermint v0.6.1-0.20231101080732-b9078abfe0fd/go.mod h1:rbAKU2rftDobCIoCiol3SO+bTqw2cERu9TEki7PvfK0= github.com/crypto-org-chain/gravity-bridge/module/v2 v2.0.1-0.20230825054824-75403cd90c6e h1:rSTc35OBjjCBx47rHPWBCIHNGPbMnEj8f7fNcK2TjVI= github.com/crypto-org-chain/gravity-bridge/module/v2 v2.0.1-0.20230825054824-75403cd90c6e/go.mod h1:HBaDqlFjlaXJwVQtA7jHejyaA7xwjXI2o6pU/ccP3tE= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= diff --git a/gomod2nix.toml b/gomod2nix.toml index a208b4cfe0..f433fd8f68 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -216,8 +216,8 @@ schema = 3 hash = "sha256-GgcReGsIIuBE2TabDYqDO9sBGogdVr9RSh4arQzdPnE=" replaced = "github.com/evmos/go-ethereum" [mod."github.com/evmos/ethermint"] - version = "v0.6.1-0.20231027030935-291bfa0458c4" - hash = "sha256-T+iQ9tSyGTvJn7wSIFCFWqUeU9KUk3Ml4v1rgC9FENk=" + version = "v0.6.1-0.20231101080732-b9078abfe0fd" + hash = "sha256-FlKoOdJbNqQfloOxV5AGd5TIm3VLjoZW8YOLnuJY7FY=" replaced = "github.com/crypto-org-chain/ethermint" [mod."github.com/felixge/httpsnoop"] version = "v1.0.2" diff --git a/x/cronos/keeper/evm.go b/x/cronos/keeper/evm.go index 9ff615e1f5..b722a17204 100644 --- a/x/cronos/keeper/evm.go +++ b/x/cronos/keeper/evm.go @@ -10,6 +10,7 @@ import ( ethtypes "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/evmos/ethermint/x/evm/statedb" evmtypes "github.com/evmos/ethermint/x/evm/types" "github.com/crypto-org-chain/cronos/v2/x/cronos/types" @@ -37,8 +38,8 @@ func (k Keeper) CallEVM(ctx sdk.Context, to *common.Address, data []byte, value return nil, nil, err } - // if the call originally comes from an ibc-in precompiled message, re-emit the logs into the original stateDB. - if stateDB, ok := ctx.Value(types.StateDBContextKey).(vm.StateDB); ok { + // if the call is from an precompiled contract call, then re-emit the logs into the original stateDB. + if stateDB, ok := ctx.Value(statedb.StateDBContextKey).(vm.StateDB); ok { for _, l := range ret.Logs { stateDB.AddLog(l.ToEthereum()) } diff --git a/x/cronos/keeper/keeper.go b/x/cronos/keeper/keeper.go index 14aab65695..8a013756a4 100644 --- a/x/cronos/keeper/keeper.go +++ b/x/cronos/keeper/keeper.go @@ -299,11 +299,7 @@ func (k Keeper) onPacketResult( } gasLimit := k.GetParams(ctx).MaxCallbackGas _, _, err = k.CallEVM(ctx, &contractAddr, data, big.NewInt(0), gasLimit) - if err != nil { - return err - } - - return nil + return err } func (k Keeper) IBCOnAcknowledgementPacketCallback( diff --git a/x/cronos/keeper/precompiles/utils.go b/x/cronos/keeper/precompiles/utils.go index eee9c1dd73..34c70ceb0d 100644 --- a/x/cronos/keeper/precompiles/utils.go +++ b/x/cronos/keeper/precompiles/utils.go @@ -7,7 +7,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/crypto-org-chain/cronos/v2/x/cronos/types" "github.com/ethereum/go-ethereum/common" "github.com/evmos/ethermint/x/evm/statedb" ) @@ -46,7 +45,6 @@ func exec[Req any, PReq interface { var res Resp if err := stateDB.ExecuteNativeAction(contract, converter, func(ctx sdk.Context) error { var err error - ctx = ctx.WithValue(types.StateDBContextKey, stateDB) res, err = action(ctx, msg) return err }); err != nil { diff --git a/x/cronos/types/keys.go b/x/cronos/types/keys.go index 5ce37cec80..91a8b6b2e6 100644 --- a/x/cronos/types/keys.go +++ b/x/cronos/types/keys.go @@ -27,8 +27,6 @@ const ( prefixContractToDenom paramsKey prefixAdminToPermissions - - StateDBContextKey = "statedb" ) // KVStore key prefixes From 7f4114a1951001c59856995b9c825132ab284cdb Mon Sep 17 00:00:00 2001 From: mmsqe Date: Thu, 2 Nov 2023 09:02:21 +0800 Subject: [PATCH 08/11] simplify assert log --- integration_tests/test_ica_precompile.py | 93 ++++-------------------- 1 file changed, 13 insertions(+), 80 deletions(-) diff --git a/integration_tests/test_ica_precompile.py b/integration_tests/test_ica_precompile.py index 09444bb6aa..323f91ef45 100644 --- a/integration_tests/test_ica_precompile.py +++ b/integration_tests/test_ica_precompile.py @@ -1,10 +1,8 @@ import base64 -import itertools import json from enum import IntEnum import pytest -from hexbytes import HexBytes from pystarport import cluster from web3.datastructures import AttributeDict @@ -186,11 +184,14 @@ def check_status(): wait_for_fn("current status", check_status) +def assert_packet_event(logs, seq, status): + return logs[0].args == AttributeDict({"seq": seq, "status": status}) + + def test_sc_call(ibc): cli_host = ibc.chainmain.cosmos_cli() cli_controller = ibc.cronos.cosmos_cli() w3 = ibc.cronos.w3 - begin_block = w3.eth.block_number contract = w3.eth.contract(address=CONTRACT, abi=contract_info) jsonfile = CONTRACTS["TestICA"] tcontract = deploy_contract(w3, jsonfile) @@ -251,8 +252,11 @@ def submit_msgs_ro(func, str): last_seq = tcontract.caller.getLastSeq() wait_for_status_change(tcontract, last_seq) status = tcontract.caller.statusMap(last_seq) + status = tcontract.caller.statusMap(last_seq) assert expected_seq == last_seq assert status == Status.SUCCESS + (logs) = tcontract.events.OnPacketResult.getLogs() + assert_packet_event(logs, expected_seq, status) balance -= diff assert cli_host.balance(ica_address, denom=denom) == balance @@ -272,6 +276,8 @@ def submit_msgs_ro(func, str): status = tcontract.caller.statusMap(last_seq) assert expected_seq == last_seq assert status == Status.SUCCESS + (logs) = tcontract.events.OnPacketResult.getLogs() + assert_packet_event(logs, expected_seq, status) balance -= diff assert cli_host.balance(ica_address, denom=denom) == balance @@ -292,6 +298,8 @@ def submit_msgs_ro(func, str): status = tcontract.caller.statusMap(last_seq) assert expected_seq == last_seq assert status == Status.FAIL + (logs) = tcontract.events.OnPacketResult.getLogs() + assert_packet_event(logs, expected_seq, status) assert cli_host.balance(ica_address, denom=denom) == balance # balance should not change on timeout @@ -311,81 +319,6 @@ def submit_msgs_ro(func, str): status = tcontract.caller.statusMap(last_seq) assert expected_seq == last_seq assert status == Status.FAIL + (logs) = tcontract.events.OnPacketResult.getLogs() + assert_packet_event(logs, expected_seq, status) assert cli_host.balance(ica_address, denom=denom) == balance - - # check logs emitted in callback - logs = get_logs_since(w3, addr, begin_block) - assert_logs_equal( - logs, - [ - { - "address": addr, - "topics": [ - HexBytes( - "0xb58d968e02022e42ce2b8f5c494b724806ff73755eb957ff2be7a62947" - "8ac9f9" - ) - ], - "data": HexBytes( - "0x00000000000000000000000000000000000000000000000000000000000000" - "010000000000000000000000000000000000000000000000000000000000000001" - ), - "transactionIndex": 1, - "logIndex": 0, - "removed": False, - }, - { - "address": addr, - "topics": [ - HexBytes( - "0xb58d968e02022e42ce2b8f5c494b724806ff73755eb957ff2be7a62947" - "8ac9f9" - ) - ], - "data": HexBytes( - "0x00000000000000000000000000000000000000000000000000000000000000" - "020000000000000000000000000000000000000000000000000000000000000001" - ), - "transactionIndex": 1, - "logIndex": 0, - "removed": False, - }, - { - "address": addr, - "topics": [ - HexBytes( - "0xb58d968e02022e42ce2b8f5c494b724806ff73755eb957ff2be7a62947" - "8ac9f9" - ) - ], - "data": HexBytes( - "0x00000000000000000000000000000000000000000000000000000000000000" - "030000000000000000000000000000000000000000000000000000000000000002" - ), - "transactionIndex": 1, - "logIndex": 0, - "removed": False, - }, - { - "address": addr, - "topics": [ - HexBytes( - "0xb58d968e02022e42ce2b8f5c494b724806ff73755eb957ff2be7a62947" - "8ac9f9" - ) - ], - "data": HexBytes( - "0x00000000000000000000000000000000000000000000000000000000000000" - "040000000000000000000000000000000000000000000000000000000000000002" - ), - "transactionIndex": 1, - "logIndex": 0, - "removed": False, - }, - ], - ) - - -def assert_logs_equal(logs, exp_logs): - for exp_log, log in itertools.zip_longest(exp_logs, logs): - assert exp_log.items() <= log.items() From 25c3feedfb8e85b2509f82a39cc0743e7c778a2d Mon Sep 17 00:00:00 2001 From: mmsqe Date: Thu, 2 Nov 2023 09:02:37 +0800 Subject: [PATCH 09/11] test without rly precompile --- integration_tests/test_ica_precompile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/test_ica_precompile.py b/integration_tests/test_ica_precompile.py index 323f91ef45..c7ecdc9cb1 100644 --- a/integration_tests/test_ica_precompile.py +++ b/integration_tests/test_ica_precompile.py @@ -46,7 +46,7 @@ class Status(IntEnum): @pytest.fixture(scope="module") def ibc(request, tmp_path_factory): "prepare-network" - name = "ibc_rly" + name = "ibc" path = tmp_path_factory.mktemp(name) yield from prepare_network( path, From 561361d8b0f76142b1602cb8ff3e592e86b205be Mon Sep 17 00:00:00 2001 From: mmsqe Date: Thu, 2 Nov 2023 09:20:37 +0800 Subject: [PATCH 10/11] cleanup --- integration_tests/test_ica_precompile.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/integration_tests/test_ica_precompile.py b/integration_tests/test_ica_precompile.py index c7ecdc9cb1..e8d8407e41 100644 --- a/integration_tests/test_ica_precompile.py +++ b/integration_tests/test_ica_precompile.py @@ -184,7 +184,9 @@ def check_status(): wait_for_fn("current status", check_status) -def assert_packet_event(logs, seq, status): +def assert_packet_result(event, seq, status): + (logs) = event.getLogs() + assert len(logs) > 0 return logs[0].args == AttributeDict({"seq": seq, "status": status}) @@ -252,11 +254,9 @@ def submit_msgs_ro(func, str): last_seq = tcontract.caller.getLastSeq() wait_for_status_change(tcontract, last_seq) status = tcontract.caller.statusMap(last_seq) - status = tcontract.caller.statusMap(last_seq) assert expected_seq == last_seq assert status == Status.SUCCESS - (logs) = tcontract.events.OnPacketResult.getLogs() - assert_packet_event(logs, expected_seq, status) + assert_packet_result(tcontract.events.OnPacketResult, last_seq, status) balance -= diff assert cli_host.balance(ica_address, denom=denom) == balance @@ -276,8 +276,7 @@ def submit_msgs_ro(func, str): status = tcontract.caller.statusMap(last_seq) assert expected_seq == last_seq assert status == Status.SUCCESS - (logs) = tcontract.events.OnPacketResult.getLogs() - assert_packet_event(logs, expected_seq, status) + assert_packet_result(tcontract.events.OnPacketResult, last_seq, status) balance -= diff assert cli_host.balance(ica_address, denom=denom) == balance @@ -298,8 +297,7 @@ def submit_msgs_ro(func, str): status = tcontract.caller.statusMap(last_seq) assert expected_seq == last_seq assert status == Status.FAIL - (logs) = tcontract.events.OnPacketResult.getLogs() - assert_packet_event(logs, expected_seq, status) + assert_packet_result(tcontract.events.OnPacketResult, last_seq, status) assert cli_host.balance(ica_address, denom=denom) == balance # balance should not change on timeout @@ -319,6 +317,5 @@ def submit_msgs_ro(func, str): status = tcontract.caller.statusMap(last_seq) assert expected_seq == last_seq assert status == Status.FAIL - (logs) = tcontract.events.OnPacketResult.getLogs() - assert_packet_event(logs, expected_seq, status) + assert_packet_result(tcontract.events.OnPacketResult, last_seq, status) assert cli_host.balance(ica_address, denom=denom) == balance From 3a2201e843f735dc84acfe6120885e5f0e67712d Mon Sep 17 00:00:00 2001 From: mmsqe Date: Thu, 2 Nov 2023 09:31:43 +0800 Subject: [PATCH 11/11] Revert "test without rly precompile" This reverts commit 25c3feedfb8e85b2509f82a39cc0743e7c778a2d. --- integration_tests/test_ica_precompile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/test_ica_precompile.py b/integration_tests/test_ica_precompile.py index e8d8407e41..0174d4a66f 100644 --- a/integration_tests/test_ica_precompile.py +++ b/integration_tests/test_ica_precompile.py @@ -46,7 +46,7 @@ class Status(IntEnum): @pytest.fixture(scope="module") def ibc(request, tmp_path_factory): "prepare-network" - name = "ibc" + name = "ibc_rly" path = tmp_path_factory.mktemp(name) yield from prepare_network( path,