diff --git a/app/app_parallel.go b/app/app_parallel.go index 34cd247fa4..eb3bba5337 100644 --- a/app/app_parallel.go +++ b/app/app_parallel.go @@ -117,15 +117,17 @@ func getTxFeeHandler() sdk.GetTxFeeHandler { // getTxFeeAndFromHandler get tx fee and from func getTxFeeAndFromHandler(ek appante.EVMKeeper) sdk.GetTxFeeAndFromHandler { - return func(ctx sdk.Context, tx sdk.Tx) (fee sdk.Coins, isEvm bool, isE2C bool, from string, to string, err error, supportPara bool) { + return func(ctx sdk.Context, tx sdk.Tx) (fee sdk.Coins, isEvm bool, needUpdateTXCounter bool, from string, to string, err error, supportPara bool) { if evmTx, ok := tx.(*evmtypes.MsgEthereumTx); ok { isEvm = true supportPara = true if appante.IsE2CTx(ek, &ctx, evmTx) { - isE2C = true + if tmtypes.HigherThanVenus6(ctx.BlockHeight()) { + needUpdateTXCounter = true + } // E2C will include cosmos Msg in the Payload. // Sometimes, this Msg do not support parallel execution. - if !isParaSupportedE2CMsg(evmTx.Data.Payload) { + if !tmtypes.HigherThanVenus6(ctx.BlockHeight()) || !isParaSupportedE2CMsg(evmTx.Data.Payload) { supportPara = false } } @@ -143,11 +145,18 @@ func getTxFeeAndFromHandler(ek appante.EVMKeeper) sdk.GetTxFeeAndFromHandler { } } else if feeTx, ok := tx.(authante.FeeTx); ok { fee = feeTx.GetFee() - if stdTx, ok := tx.(*auth.StdTx); ok && len(stdTx.Msgs) == 1 { // only support one message - if msg, ok := stdTx.Msgs[0].(interface{ CalFromAndToForPara() (string, string) }); ok { - from, to = msg.CalFromAndToForPara() - if tmtypes.HigherThanVenus6(ctx.BlockHeight()) { - supportPara = true + if tx.GetType() == sdk.StdTxType { + if tmtypes.HigherThanEarth(ctx.BlockHeight()) { + needUpdateTXCounter = true + } + txMsgs := tx.GetMsgs() + // only support one message + if len(txMsgs) == 1 { + if msg, ok := txMsgs[0].(interface{ CalFromAndToForPara() (string, string) }); ok { + from, to = msg.CalFromAndToForPara() + if tmtypes.HigherThanVenus6(ctx.BlockHeight()) { + supportPara = true + } } } } diff --git a/cmd/client/flags.go b/cmd/client/flags.go index 6f96b5bdeb..30d859922e 100644 --- a/cmd/client/flags.go +++ b/cmd/client/flags.go @@ -113,7 +113,7 @@ func RegisterAppFlag(cmd *cobra.Command) { cmd.Flags().String(tmdb.FlagRocksdbOpts, "", "Options of rocksdb. (block_size=4KB,block_cache=1GB,statistics=true,allow_mmap_reads=true,max_open_files=-1,unordered_write=true,pipelined_write=true)") cmd.Flags().String(types.FlagNodeMode, "", "Node mode (rpc|val|archive) is used to manage flags") - cmd.Flags().Bool(consensus.EnablePrerunTx, true, "enable proactively runtx mode, default close") + cmd.Flags().Bool(consensus.EnablePrerunTx, true, "enable proactively runtx mode, default open") cmd.Flags().String(automation.ConsensusRole, "", "consensus role") cmd.Flags().String(automation.ConsensusTestcase, "", "consensus test case file") diff --git a/dev/vmbridge.sh b/dev/vmbridge.sh index 8b3abd2a97..2bd3c753d9 100755 --- a/dev/vmbridge.sh +++ b/dev/vmbridge.sh @@ -1,4 +1,4 @@ -res=$(exchaincli tx wasm store ./wasm/vmbridge-erc20/artifacts/cw_erc20.wasm --fees 0.01okt --from captain --gas=20000000 -b block -y) +res=$(exchaincli tx wasm store ./wasm/erc20/artifacts/cw_erc20.wasm --fees 0.01okt --from captain --gas=20000000 -b block -y) echo "store--------------" echo $res code_id=$(echo "$res" | jq '.logs[0].events[1].attributes[0].value' | sed 's/\"//g') diff --git a/dev/wasm/erc20/src/contract.rs b/dev/wasm/erc20/src/contract.rs index 772ccdac8e..34cca06b54 100644 --- a/dev/wasm/erc20/src/contract.rs +++ b/dev/wasm/erc20/src/contract.rs @@ -86,12 +86,6 @@ pub fn execute( recipient, amount, } => try_send_to_erc20(deps, env,evmContract,recipient,amount,info), - - ExecuteMsg::CallToEvmMsg { - evmaddr, - calldata, - value, - } => try_call_to_evm(deps, env,evmaddr,calldata,value,info), } } @@ -160,29 +154,7 @@ fn try_mint_cw20( .add_attribute("amount", amount.to_string())) } -fn try_call_to_evm( - deps: DepsMut, - _env: Env, - evmaddr: String, - calldata: String, - value: Uint128, - info: MessageInfo, -) -> Result, ContractError> { - let submsg = SendToEvmMsg { - sender: _env.contract.address.to_string(), - evmaddr: evmaddr.to_string(), - calldata: calldata, - value: value, - }; - - Ok(Response::new() - .add_attribute("action", "call to evm") - .add_attribute("evmaddr", evmaddr.to_string()) - .add_attribute("value", value.to_string()) - .add_message(submsg) - .set_data(b"the result data")) -} fn try_send_to_erc20( deps: DepsMut, diff --git a/dev/wasm/erc20/src/msg.rs b/dev/wasm/erc20/src/msg.rs index abcbdd2085..1d85691378 100644 --- a/dev/wasm/erc20/src/msg.rs +++ b/dev/wasm/erc20/src/msg.rs @@ -48,11 +48,6 @@ pub enum ExecuteMsg { recipient: String, amount: Uint128, }, - CallToEvm { - evmContract: String, - calldata: String, - value: Uint128, - } } #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] @@ -71,21 +66,6 @@ impl Into> for SendToEvmMsg { } impl CustomMsg for SendToEvmMsg {} -#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] -#[serde(rename_all = "snake_case")] -pub struct CallToEvmMsg { - pub sender: String, - pub evmaddr: String, - pub calldata: String, - pub value: Uint128, - -} -impl Into> for CallToEvmMsg { - fn into(self) -> CosmosMsg { - CosmosMsg::Custom(self) - } -} -impl CustomMsg for CallToEvmMsg {} #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] #[serde(rename_all = "snake_case")] diff --git a/dev/wasm/vmbridge-erc20/src/contract.rs b/dev/wasm/vmbridge-erc20/src/contract.rs index 475cf5af98..500c4bf507 100644 --- a/dev/wasm/vmbridge-erc20/src/contract.rs +++ b/dev/wasm/vmbridge-erc20/src/contract.rs @@ -157,11 +157,11 @@ fn try_mint_cw20( recipient: String, amount: Uint128, ) -> Result, ContractError> { - if info.sender.to_string() != EVM_CONTRACT_ADDR.to_string() { - return Err(ContractError::ContractERC20Err { - addr:info.sender.to_string() - }); - } + // if info.sender.to_string() != EVM_CONTRACT_ADDR.to_string() { + // return Err(ContractError::ContractERC20Err { + // addr:info.sender.to_string() + // }); + // } let amount_raw = amount.u128(); let recipient_address = deps.api.addr_validate(recipient.as_str())?; let mut account_balance = read_balance(deps.storage, &recipient_address)?; diff --git a/libs/cosmos-sdk/baseapp/baseapp.go b/libs/cosmos-sdk/baseapp/baseapp.go index 994cc1f679..4af0353f1a 100644 --- a/libs/cosmos-sdk/baseapp/baseapp.go +++ b/libs/cosmos-sdk/baseapp/baseapp.go @@ -697,10 +697,16 @@ func (app *BaseApp) getContextForTx(mode runTxMode, txBytes []byte) sdk.Context ctx.SetGasMeter(sdk.NewInfiniteGasMeter()) } if app.parallelTxManage.isAsyncDeliverTx && mode == runTxModeDeliverInAsync { + app.parallelTxManage.txByteMpCMIndexLock.RLock() ctx.SetParaMsg(&sdk.ParaMsg{ - HaveCosmosTxInBlock: app.parallelTxManage.haveCosmosTxInBlock, + // Concurrency security issues need to be considered here, + // and there is a small probability that NeedUpdateTXCounter() will be wrong + // due to concurrent reading and writing of pm.txIndexMpUpdateTXCounter (slice), + // but such tx will be rerun, so this case can be ignored. + NeedUpdateTXCounter: app.parallelTxManage.NeedUpdateTXCounter(), CosmosIndexInBlock: app.parallelTxManage.txByteMpCosmosIndex[string(txBytes)], }) + app.parallelTxManage.txByteMpCMIndexLock.RUnlock() ctx.SetTxBytes(txBytes) ctx.ResetWatcher() } diff --git a/libs/cosmos-sdk/baseapp/baseapp_parallel.go b/libs/cosmos-sdk/baseapp/baseapp_parallel.go index 05fb432253..81435b9820 100644 --- a/libs/cosmos-sdk/baseapp/baseapp_parallel.go +++ b/libs/cosmos-sdk/baseapp/baseapp_parallel.go @@ -24,14 +24,14 @@ var ( ) type extraDataForTx struct { - supportPara bool - fee sdk.Coins - isEvm bool - isE2C bool - from string - to string - stdTx sdk.Tx - decodeErr error + supportPara bool + fee sdk.Coins + isEvm bool + needUpdateTXCounter bool + from string + to string + stdTx sdk.Tx + decodeErr error } type txWithIndex struct { @@ -71,15 +71,15 @@ func (app *BaseApp) getExtraDataByTxs(txs [][]byte) { app.blockDataCache.SetTx(txBytes, tx) } - coin, isEvm, isE2C, s, toAddr, _, supportPara := app.getTxFeeAndFromHandler(app.getContextForTx(runTxModeDeliver, txBytes), tx) + coin, isEvm, needUpdateTXCounter, s, toAddr, _, supportPara := app.getTxFeeAndFromHandler(app.getContextForTx(runTxModeDeliver, txBytes), tx) para.extraTxsInfo[index] = &extraDataForTx{ - supportPara: supportPara, - fee: coin, - isEvm: isEvm, - isE2C: isE2C, - from: s, - to: toAddr, - stdTx: tx, + supportPara: supportPara, + fee: coin, + isEvm: isEvm, + needUpdateTXCounter: needUpdateTXCounter, + from: s, + to: toAddr, + stdTx: tx, } wg.Done() } @@ -129,49 +129,45 @@ func Union(x string, yString string) { // calGroup cal group by txs func (app *BaseApp) calGroup() { - para := app.parallelTxManage + pm := app.parallelTxManage rootAddr = make(map[string]string, 0) - para.cosmosTxIndexInBlock = 0 - for index, tx := range para.extraTxsInfo { + pm.cosmosTxIndexInBlock = 0 + for index, tx := range pm.extraTxsInfo { if tx.supportPara { //evmTx & wasmTx Union(tx.from, tx.to) } else { - para.haveCosmosTxInBlock = true app.parallelTxManage.putResult(index, &executeResult{paraMsg: &sdk.ParaMsg{}, msIsNil: true}) } - if (!tx.isEvm && tx.supportPara) || tx.isE2C { - // means wasm or e2c tx - para.haveCosmosTxInBlock = true + if tx.needUpdateTXCounter { + pm.txIndexMpUpdateTXCounter[index] = true + pm.txByteMpCosmosIndex[string(pm.txs[index])] = pm.cosmosTxIndexInBlock + pm.cosmosTxIndexInBlock++ } - if !tx.isEvm || tx.isE2C { - para.txByteMpCosmosIndex[string(para.txs[index])] = para.cosmosTxIndexInBlock - para.cosmosTxIndexInBlock++ - } } addrToID := make(map[string]int, 0) - for index, txInfo := range para.extraTxsInfo { + for index, txInfo := range pm.extraTxsInfo { if !txInfo.supportPara { continue } rootAddr := Find(txInfo.from) id, exist := addrToID[rootAddr] if !exist { - id = len(para.groupList) + id = len(pm.groupList) addrToID[rootAddr] = id } - para.groupList[id] = append(para.groupList[id], index) - para.txIndexWithGroup[index] = id + pm.groupList[id] = append(pm.groupList[id], index) + pm.txIndexWithGroup[index] = id } - groupSize := len(para.groupList) + groupSize := len(pm.groupList) for groupIndex := 0; groupIndex < groupSize; groupIndex++ { - list := para.groupList[groupIndex] + list := pm.groupList[groupIndex] for index := 0; index < len(list); index++ { if index+1 <= len(list)-1 { app.parallelTxManage.nextTxInGroup[list[index]] = list[index+1] @@ -247,7 +243,7 @@ func (app *BaseApp) runTxs() []*abci.ResponseDeliverTx { break } isReRun := false - if pm.isConflict(res) || overFlow(currentGas, res.resp.GasUsed, maxGas) { + if pm.isConflict(res) || overFlow(currentGas, res.resp.GasUsed, maxGas) || pm.haveAnteErrTx { rerunIdx++ isReRun = true // conflict rerun tx @@ -256,8 +252,10 @@ func (app *BaseApp) runTxs() []*abci.ResponseDeliverTx { } res = app.deliverTxWithCache(pm.upComingTxIndex) } + if res.paraMsg.AnteErr != nil { res.msIsNil = true + pm.handleAnteErrTx(res.paraMsg.NeedUpdateTXCounter) } pm.deliverTxs[pm.upComingTxIndex] = &res.resp @@ -268,7 +266,7 @@ func (app *BaseApp) runTxs() []*abci.ResponseDeliverTx { app.deliverState.ctx.BlockGasMeter().ConsumeGas(sdk.Gas(res.resp.GasUsed), "unexpected error") pm.blockGasMeterMu.Unlock() - pm.SetCurrentIndex(pm.upComingTxIndex, res) + pm.SetCurrentIndexRes(pm.upComingTxIndex, res) if !res.msIsNil { pm.currTxFee = pm.currTxFee.Add(pm.extraTxsInfo[pm.upComingTxIndex].fee.Sub(pm.finalResult[pm.upComingTxIndex].paraMsg.RefundFee)...) @@ -320,7 +318,7 @@ func (app *BaseApp) runTxs() []*abci.ResponseDeliverTx { ctx, _ := app.cacheTxContext(app.getContextForTx(runTxModeDeliver, []byte{}), []byte{}) ctx.SetMultiStore(app.parallelTxManage.cms) - if app.parallelTxManage.haveCosmosTxInBlock { + if app.parallelTxManage.NeedUpdateTXCounter() { app.updateCosmosTxCount(ctx, app.parallelTxManage.cosmosTxIndexInBlock-1) } @@ -454,16 +452,19 @@ func newExecuteResult(r abci.ResponseDeliverTx, ms sdk.CacheMultiStore, counter } type parallelTxManager struct { - blockHeight int64 - groupTasks []*groupTask - blockGasMeterMu sync.Mutex - haveCosmosTxInBlock bool - isAsyncDeliverTx bool - txs [][]byte - txSize int - alreadyEnd bool - cosmosTxIndexInBlock int - txByteMpCosmosIndex map[string]int + blockHeight int64 + groupTasks []*groupTask + blockGasMeterMu sync.Mutex + isAsyncDeliverTx bool + txs [][]byte + txSize int + alreadyEnd bool + + cosmosTxIndexInBlock int + txByteMpCMIndexLock sync.RWMutex + txByteMpCosmosIndex map[string]int + txIndexMpUpdateTXCounter []bool + haveAnteErrTx bool resultCh chan int resultCb func(data int) @@ -634,6 +635,8 @@ func newParallelTxManager() *parallelTxManager { txIndexWithGroup: make(map[int]int), resultCh: make(chan int, maxTxResultInChan), + txByteMpCMIndexLock: sync.RWMutex{}, + blockMpCache: newCacheRWSetList(), chainMpCache: newCacheRWSetList(), blockMultiStores: newCacheMultiStoreList(), @@ -764,7 +767,6 @@ func (pm *parallelTxManager) init(txs [][]byte, blockHeight int64, deliverStateM txSize := len(txs) pm.blockHeight = blockHeight pm.groupTasks = make([]*groupTask, 0) - pm.haveCosmosTxInBlock = false pm.isAsyncDeliverTx = true pm.txs = txs pm.txSize = txSize @@ -788,6 +790,8 @@ func (pm *parallelTxManager) init(txs [][]byte, blockHeight int64, deliverStateM pm.txByteMpCosmosIndex = make(map[string]int, 0) pm.nextTxInGroup = make(map[int]int) + pm.haveAnteErrTx = false + pm.txIndexMpUpdateTXCounter = make([]bool, txSize) pm.extraTxsInfo = make([]*extraDataForTx, txSize) pm.txReps = make([]*executeResult, txSize) pm.finalResult = make([]*executeResult, txSize) @@ -815,7 +819,7 @@ func (pm *parallelTxManager) getParentMsByTxIndex(txIndex int) (sdk.CacheMultiSt return ms, useCurrent } -func (pm *parallelTxManager) SetCurrentIndex(txIndex int, res *executeResult) { +func (pm *parallelTxManager) SetCurrentIndexRes(txIndex int, res *executeResult) { if res.msIsNil { return } @@ -837,3 +841,29 @@ func (pm *parallelTxManager) SetCurrentIndex(txIndex int, res *executeResult) { } } + +func (pm *parallelTxManager) NeedUpdateTXCounter() bool { + res := false + for _, v := range pm.txIndexMpUpdateTXCounter { + res = res || v + } + return res +} + +// When an AnteErr tx is encountered, this tx will be discarded, +// and the cosmosIndex of the remaining tx needs to be corrected. +func (pm *parallelTxManager) handleAnteErrTx(needUpdateTXCounter bool) { + pm.haveAnteErrTx = true + pm.txIndexMpUpdateTXCounter[pm.upComingTxIndex] = false + + if needUpdateTXCounter { + pm.cosmosTxIndexInBlock-- + pm.txByteMpCMIndexLock.Lock() + for index, tx := range pm.txs { + if _, ok := pm.txByteMpCosmosIndex[string(tx)]; ok && index > pm.upComingTxIndex { + pm.txByteMpCosmosIndex[string(tx)]-- + } + } + pm.txByteMpCMIndexLock.Unlock() + } +} diff --git a/libs/cosmos-sdk/types/context.go b/libs/cosmos-sdk/types/context.go index 8016d61ddc..7a10eab2de 100644 --- a/libs/cosmos-sdk/types/context.go +++ b/libs/cosmos-sdk/types/context.go @@ -2,17 +2,17 @@ package types import ( "context" - "github.com/ethereum/go-ethereum/core/vm" "sync" "time" + "github.com/ethereum/go-ethereum/core/vm" "github.com/gogo/protobuf/proto" - "github.com/okex/exchain/libs/system/trace" - abci "github.com/okex/exchain/libs/tendermint/abci/types" - "github.com/okex/exchain/libs/tendermint/libs/log" "github.com/okex/exchain/libs/cosmos-sdk/store/gaskv" stypes "github.com/okex/exchain/libs/cosmos-sdk/store/types" + "github.com/okex/exchain/libs/system/trace" + abci "github.com/okex/exchain/libs/tendermint/abci/types" + "github.com/okex/exchain/libs/tendermint/libs/log" ) /* @@ -92,7 +92,8 @@ func (c *Context) IsDeliverWithSerial() bool { } func (c *Context) UseParamCache() bool { - return c.isDeliverWithSerial || (c.paraMsg != nil && !c.paraMsg.HaveCosmosTxInBlock) || c.checkTx + // NeedUpdateTXCounter of E2C tx also is true. + return c.isDeliverWithSerial || (c.paraMsg != nil && !c.paraMsg.NeedUpdateTXCounter) || c.checkTx } func (c *Context) IsCheckTx() bool { return c.checkTx } diff --git a/libs/cosmos-sdk/types/utils.go b/libs/cosmos-sdk/types/utils.go index dca8183929..7403b06140 100644 --- a/libs/cosmos-sdk/types/utils.go +++ b/libs/cosmos-sdk/types/utils.go @@ -96,7 +96,7 @@ func NewDB(name, dir string) (db dbm.DB, err error) { type ParaMsg struct { UseCurrentState bool - HaveCosmosTxInBlock bool + NeedUpdateTXCounter bool AnteErr error RefundFee Coins LogIndex int diff --git a/x/evm/types/state_transition.go b/x/evm/types/state_transition.go index 50a082be29..a21354e824 100644 --- a/x/evm/types/state_transition.go +++ b/x/evm/types/state_transition.go @@ -7,9 +7,6 @@ import ( "math/big" "strings" - "github.com/okex/exchain/libs/system/trace" - "github.com/okex/exchain/libs/tendermint/types" - "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -21,6 +18,8 @@ import ( sdk "github.com/okex/exchain/libs/cosmos-sdk/types" sdkerrors "github.com/okex/exchain/libs/cosmos-sdk/types/errors" "github.com/okex/exchain/libs/cosmos-sdk/types/innertx" + "github.com/okex/exchain/libs/system/trace" + "github.com/okex/exchain/libs/tendermint/types" ) // StateTransition defines data to transitionDB in evm @@ -328,19 +327,20 @@ func (st StateTransition) TransitionDb(ctx sdk.Context, config ChainConfig) (exe // return trace log if tracetxlog no matter err = nil or not nil defer func() { var traceLogs []byte + var traceErr error if st.TraceTxLog { result := &core.ExecutionResult{ UsedGas: gasConsumed, Err: err, ReturnData: ret, } - traceLogs, err = GetTracerResult(tracer, result) - if err != nil { - traceLogs = []byte(err.Error()) + traceLogs, traceErr = GetTracerResult(tracer, result) + if traceErr != nil { + traceLogs = []byte(traceErr.Error()) } else { - traceLogs, err = integratePreimage(csdb, traceLogs) - if err != nil { - traceLogs = []byte(err.Error()) + traceLogs, traceErr = integratePreimage(csdb, traceLogs) + if traceErr != nil { + traceLogs = []byte(traceErr.Error()) } } if exeRes == nil { diff --git a/x/vmbridge/keeper/evm_test.go b/x/vmbridge/keeper/evm_test.go index 174d822980..a843fcebed 100644 --- a/x/vmbridge/keeper/evm_test.go +++ b/x/vmbridge/keeper/evm_test.go @@ -216,25 +216,25 @@ func (suite *KeeperTestSuite) TestSendToWasmEventHandler_Handle() { data = input }, func() { - queryAddr := sdk.AccAddress(ethAddr.Bytes()) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + queryAddr := sdk.WasmAddress(ethAddr.Bytes()) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"1\"}", string(result)) }, - types.ErrIsNotOKCAddr, + nil, }, { "normal topic,recipient is ex", func() { wasmAddrStr := suite.wasmContract.String() - queryAddr := sdk.AccAddress(ethAddr.Bytes()) + queryAddr := sdk.WasmAddress(ethAddr.Bytes()) input, err := getSendToWasmEventData(wasmAddrStr, queryAddr.String(), big.NewInt(1)) suite.Require().NoError(err) data = input }, func() { queryAddr := sdk.WasmAddress(ethAddr.Bytes()) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"1\"}", string(result)) }, @@ -244,14 +244,14 @@ func (suite *KeeperTestSuite) TestSendToWasmEventHandler_Handle() { "normal topic,amount is zero", func() { wasmAddrStr := suite.wasmContract.String() - queryAddr := sdk.AccAddress(ethAddr.Bytes()) + queryAddr := sdk.WasmAddress(ethAddr.Bytes()) input, err := getSendToWasmEventData(wasmAddrStr, queryAddr.String(), big.NewInt(0)) suite.Require().NoError(err) data = input }, func() { queryAddr := sdk.WasmAddress(ethAddr.Bytes()) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"0\"}", string(result)) }, diff --git a/x/vmbridge/keeper/keeper_test.go b/x/vmbridge/keeper/keeper_test.go index 5bae132cfd..a8c6f021c0 100644 --- a/x/vmbridge/keeper/keeper_test.go +++ b/x/vmbridge/keeper/keeper_test.go @@ -37,7 +37,7 @@ type KeeperTestSuite struct { keeper *keeper.Keeper addr sdk.AccAddress - wasmContract sdk.AccAddress + wasmContract sdk.WasmAddress codeId uint64 evmContract common.Address @@ -87,8 +87,7 @@ func (suite *KeeperTestSuite) SetupTest() { suite.Require().NoError(err) initMsg := []byte(fmt.Sprintf("{\"decimals\":10,\"initial_balances\":[{\"address\":\"%s\",\"amount\":\"100000000\"}],\"name\":\"my test token\", \"symbol\":\"MTT\"}", suite.addr.String())) - temp, _, err := suite.app.WasmPermissionKeeper.Instantiate(suite.ctx, suite.codeId, sdk.AccToAWasmddress(suite.addr), sdk.AccToAWasmddress(suite.addr), initMsg, "label", sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}) - suite.wasmContract = sdk.WasmToAccAddress(temp) + suite.wasmContract, _, err = suite.app.WasmPermissionKeeper.Instantiate(suite.ctx, suite.codeId, sdk.AccToAWasmddress(suite.addr), sdk.AccToAWasmddress(suite.addr), initMsg, "label", sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)}) suite.Require().NoError(err) palyload := "60806040526040518060600160405280603d815260200162002355603d913960079080519060200190620000359291906200004a565b503480156200004357600080fd5b506200015f565b8280546200005890620000fa565b90600052602060002090601f0160209004810192826200007c5760008555620000c8565b82601f106200009757805160ff1916838001178555620000c8565b82800160010185558215620000c8579182015b82811115620000c7578251825591602001919060010190620000aa565b5b509050620000d79190620000db565b5090565b5b80821115620000f6576000816000905550600101620000dc565b5090565b600060028204905060018216806200011357607f821691505b602082108114156200012a576200012962000130565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6121e6806200016f6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370a08231116100ad578063cc1207c011610071578063cc1207c014610330578063d069cf761461034c578063d241877c1461037c578063dd62ed3e1461039a578063ee366654146103ca57610121565b806370a08231146102665780638e155cee1461029657806395d89b41146102b2578063a457c2d7146102d0578063a9059cbb1461030057610121565b8063313ce567116100f4578063313ce567146101c257806335b2bd2d146101e057806339509351146101fe5780633a0c76ea1461022e57806340c10f191461024a57610121565b806306fdde0314610126578063095ea7b31461014457806318160ddd1461017457806323b872dd14610192575b600080fd5b61012e6103e8565b60405161013b91906119a9565b60405180910390f35b61015e600480360381019061015991906114c5565b61047a565b60405161016b919061198e565b60405180910390f35b61017c610496565b6040516101899190611b70565b60405180910390f35b6101ac60048036038101906101a79190611472565b6104a0565b6040516101b9919061198e565b60405180910390f35b6101ca6104c8565b6040516101d79190611b8b565b60405180910390f35b6101e86104df565b6040516101f59190611973565b60405180910390f35b610218600480360381019061021391906114c5565b6104f7565b604051610225919061198e565b60405180910390f35b610248600480360381019061024391906115c2565b61059a565b005b610264600480360381019061025f91906114c5565b6105e4565b005b610280600480360381019061027b9190611405565b6105f2565b60405161028d9190611b70565b60405180910390f35b6102b060048036038101906102ab9190611579565b61063b565b005b6102ba610655565b6040516102c791906119a9565b60405180910390f35b6102ea60048036038101906102e591906114c5565b6106e7565b6040516102f7919061198e565b60405180910390f35b61031a600480360381019061031591906114c5565b6107ca565b604051610327919061198e565b60405180910390f35b61034a6004803603810190610345919061164d565b6107e6565b005b61036660048036038101906103619190611505565b6107f5565b604051610373919061198e565b60405180910390f35b6103846108b4565b60405161039191906119a9565b60405180910390f35b6103b460048036038101906103af9190611432565b610942565b6040516103c19190611b70565b60405180910390f35b6103d26109c9565b6040516103df91906119a9565b60405180910390f35b6060600180546103f790611d59565b80601f016020809104026020016040519081016040528092919081815260200182805461042390611d59565b80156104705780601f1061044557610100808354040283529160200191610470565b820191906000526020600020905b81548152906001019060200180831161045357829003601f168201915b5050505050905090565b60008033905061048b8185856109d8565b600191505092915050565b6000600454905090565b6000803390506104b1858285610ba3565b6104bc858585610c2f565b60019150509392505050565b6000600360009054906101000a900460ff16905090565b73c63cf6c8e1f3df41085e9d8af49584dae1432b4f81565b60008033905061058f818585600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461058a9190611c38565b6109d8565b600191505092915050565b6105a43382610e9d565b7f41e4c36823b869e11ae85a7e623a332d31d961ba9ed670a3c9cb71c973c53caa8284836040516105d7939291906119cb565b60405180910390a1505050565b6105ee828261105e565b5050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b806007908051906020019061065192919061125d565b5050565b60606002805461066490611d59565b80601f016020809104026020016040519081016040528092919081815260200182805461069090611d59565b80156106dd5780601f106106b2576101008083540402835291602001916106dd565b820191906000526020600020905b8154815290600101906020018083116106c057829003601f168201915b5050505050905090565b6000803390506000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a890611b30565b60405180910390fd5b6107be82868684036109d8565b60019250505092915050565b6000803390506107db818585610c2f565b600191505092915050565b6107f18283836111a7565b5050565b600073c63cf6c8e1f3df41085e9d8af49584dae1432b4f73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461084357600080fd5b6007604051602001610855919061195c565b60405160208183030381529060405280519060200120858560405160200161087e929190611943565b604051602081830303815290604052805190602001201461089e57600080fd5b6108a8838361105e565b60019050949350505050565b600780546108c190611d59565b80601f01602080910402602001604051908101604052809291908181526020018280546108ed90611d59565b801561093a5780601f1061090f5761010080835404028352916020019161093a565b820191906000526020600020905b81548152906001019060200180831161091d57829003601f168201915b505050505081565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60606109d3610655565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90611b10565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaf90611a50565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610b969190611b70565b60405180910390a3505050565b6000610baf8484610942565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c295781811015610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290611a90565b60405180910390fd5b610c2884848484036109d8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9690611af0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0690611a10565b60405180910390fd5b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90611ab0565b60405180910390fd5b818103600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e2b9190611c38565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e8f9190611b70565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490611ad0565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8b90611a30565b60405180910390fd5b818103600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160046000828254610fec9190611c8e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516110519190611b70565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590611b50565b60405180910390fd5b80600460008282546110e09190611c38565b9250508190555080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111369190611c38565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161119b9190611b70565b60405180910390a35050565b60008054906101000a900460ff16156111f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ec90611a70565b60405180910390fd5b60016000806101000a81548160ff021916908315150217905550826001908051906020019061122592919061125d565b50816002908051906020019061123c92919061125d565b5080600360006101000a81548160ff021916908360ff160217905550505050565b82805461126990611d59565b90600052602060002090601f01602090048101928261128b57600085556112d2565b82601f106112a457805160ff19168380011785556112d2565b828001600101855582156112d2579182015b828111156112d15782518255916020019190600101906112b6565b5b5090506112df91906112e3565b5090565b5b808211156112fc5760008160009055506001016112e4565b5090565b600061131361130e84611bcb565b611ba6565b90508281526020810184848401111561132f5761132e611e58565b5b61133a848285611d17565b509392505050565b6000813590506113518161216b565b92915050565b60008083601f84011261136d5761136c611e4e565b5b8235905067ffffffffffffffff81111561138a57611389611e49565b5b6020830191508360018202830111156113a6576113a5611e53565b5b9250929050565b600082601f8301126113c2576113c1611e4e565b5b81356113d2848260208601611300565b91505092915050565b6000813590506113ea81612182565b92915050565b6000813590506113ff81612199565b92915050565b60006020828403121561141b5761141a611e62565b5b600061142984828501611342565b91505092915050565b6000806040838503121561144957611448611e62565b5b600061145785828601611342565b925050602061146885828601611342565b9150509250929050565b60008060006060848603121561148b5761148a611e62565b5b600061149986828701611342565b93505060206114aa86828701611342565b92505060406114bb868287016113db565b9150509250925092565b600080604083850312156114dc576114db611e62565b5b60006114ea85828601611342565b92505060206114fb858286016113db565b9150509250929050565b6000806000806060858703121561151f5761151e611e62565b5b600085013567ffffffffffffffff81111561153d5761153c611e5d565b5b61154987828801611357565b9450945050602061155c87828801611342565b925050604061156d878288016113db565b91505092959194509250565b60006020828403121561158f5761158e611e62565b5b600082013567ffffffffffffffff8111156115ad576115ac611e5d565b5b6115b9848285016113ad565b91505092915050565b6000806000606084860312156115db576115da611e62565b5b600084013567ffffffffffffffff8111156115f9576115f8611e5d565b5b611605868287016113ad565b935050602084013567ffffffffffffffff81111561162657611625611e5d565b5b611632868287016113ad565b9250506040611643868287016113db565b9150509250925092565b6000806040838503121561166457611663611e62565b5b600083013567ffffffffffffffff81111561168257611681611e5d565b5b61168e858286016113ad565b925050602061169f858286016113f0565b9150509250929050565b6116b281611cc2565b82525050565b6116c181611cd4565b82525050565b60006116d38385611c2d565b93506116e0838584611d17565b82840190509392505050565b60006116f782611c11565b6117018185611c1c565b9350611711818560208601611d26565b61171a81611e67565b840191505092915050565b6000815461173281611d59565b61173c8186611c2d565b9450600182166000811461175757600181146117685761179b565b60ff1983168652818601935061179b565b61177185611bfc565b60005b8381101561179357815481890152600182019150602081019050611774565b838801955050505b50505092915050565b60006117b1602383611c1c565b91506117bc82611e78565b604082019050919050565b60006117d4602283611c1c565b91506117df82611ec7565b604082019050919050565b60006117f7602283611c1c565b915061180282611f16565b604082019050919050565b600061181a601b83611c1c565b915061182582611f65565b602082019050919050565b600061183d601d83611c1c565b915061184882611f8e565b602082019050919050565b6000611860602683611c1c565b915061186b82611fb7565b604082019050919050565b6000611883602183611c1c565b915061188e82612006565b604082019050919050565b60006118a6602583611c1c565b91506118b182612055565b604082019050919050565b60006118c9602483611c1c565b91506118d4826120a4565b604082019050919050565b60006118ec602583611c1c565b91506118f7826120f3565b604082019050919050565b600061190f601f83611c1c565b915061191a82612142565b602082019050919050565b61192e81611d00565b82525050565b61193d81611d0a565b82525050565b60006119508284866116c7565b91508190509392505050565b60006119688284611725565b915081905092915050565b600060208201905061198860008301846116a9565b92915050565b60006020820190506119a360008301846116b8565b92915050565b600060208201905081810360008301526119c381846116ec565b905092915050565b600060608201905081810360008301526119e581866116ec565b905081810360208301526119f981856116ec565b9050611a086040830184611925565b949350505050565b60006020820190508181036000830152611a29816117a4565b9050919050565b60006020820190508181036000830152611a49816117c7565b9050919050565b60006020820190508181036000830152611a69816117ea565b9050919050565b60006020820190508181036000830152611a898161180d565b9050919050565b60006020820190508181036000830152611aa981611830565b9050919050565b60006020820190508181036000830152611ac981611853565b9050919050565b60006020820190508181036000830152611ae981611876565b9050919050565b60006020820190508181036000830152611b0981611899565b9050919050565b60006020820190508181036000830152611b29816118bc565b9050919050565b60006020820190508181036000830152611b49816118df565b9050919050565b60006020820190508181036000830152611b6981611902565b9050919050565b6000602082019050611b856000830184611925565b92915050565b6000602082019050611ba06000830184611934565b92915050565b6000611bb0611bc1565b9050611bbc8282611d8b565b919050565b6000604051905090565b600067ffffffffffffffff821115611be657611be5611e1a565b5b611bef82611e67565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000611c4382611d00565b9150611c4e83611d00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c8357611c82611dbc565b5b828201905092915050565b6000611c9982611d00565b9150611ca483611d00565b925082821015611cb757611cb6611dbc565b5b828203905092915050565b6000611ccd82611ce0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015611d44578082015181840152602081019050611d29565b83811115611d53576000848401525b50505050565b60006002820490506001821680611d7157607f821691505b60208210811415611d8557611d84611deb565b5b50919050565b611d9482611e67565b810181811067ffffffffffffffff82111715611db357611db2611e1a565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20616c726561647920696e697469616c697a65643b0000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b61217481611cc2565b811461217f57600080fd5b50565b61218b81611d00565b811461219657600080fd5b50565b6121a281611d0a565b81146121ad57600080fd5b5056fea264697066735822122022151d41dd9654958225e494d6adc336a64e7ff8fe7993ba1764f69906eb984064736f6c6343000807003365783134686a32746176713866706573647778786375343472747933686839307668756a7276636d73746c347a723374786d6676773973366671753237" diff --git a/x/vmbridge/keeper/wasm.go b/x/vmbridge/keeper/wasm.go index bec97e7659..b64cd56ba2 100644 --- a/x/vmbridge/keeper/wasm.go +++ b/x/vmbridge/keeper/wasm.go @@ -14,11 +14,7 @@ import ( ) func (k Keeper) SendToWasm(ctx sdk.Context, caller sdk.AccAddress, wasmContractAddr, recipient string, amount sdk.Int) error { - // must check recipient is ex address - if !sdk.IsOKCAddress(recipient) { - return types.ErrIsNotOKCAddr - } - to, err := sdk.AccAddressFromBech32(recipient) + _, err := sdk.WasmAddressFromBech32(recipient) if err != nil { return err } @@ -26,7 +22,7 @@ func (k Keeper) SendToWasm(ctx sdk.Context, caller sdk.AccAddress, wasmContractA if amount.IsNegative() { return types.ErrAmountNegative } - input, err := types.GetMintCW20Input(amount.String(), sdk.AccToAWasmddress(to).String()) + input, err := types.GetMintCW20Input(amount.String(), recipient) if err != nil { return err } diff --git a/x/vmbridge/keeper/wasm_test.go b/x/vmbridge/keeper/wasm_test.go index 328a3e72be..7afe5ad4c5 100644 --- a/x/vmbridge/keeper/wasm_test.go +++ b/x/vmbridge/keeper/wasm_test.go @@ -27,7 +27,7 @@ func (suite *KeeperTestSuite) TestKeeper_SendToWasm() { reset := func() { caller = sdk.AccAddress(contract.Bytes()) wasmContractAddr = suite.wasmContract.String() - recipient = sdk.AccAddress(ethAddr.Bytes()).String() + recipient = ethAddr.String() amount = sdk.NewInt(1) } testCases := []struct { @@ -42,7 +42,7 @@ func (suite *KeeperTestSuite) TestKeeper_SendToWasm() { }, func() { queryAddr := sdk.WasmAddress(ethAddr.Bytes()) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"1\"}", string(result)) }, @@ -55,11 +55,11 @@ func (suite *KeeperTestSuite) TestKeeper_SendToWasm() { }, func() { queryAddr := sdk.WasmAddress(ethAddr.Bytes()) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"1\"}", string(result)) }, - nil, + errors.New("execute wasm contract failed: Generic error: addr_validate errored: Address is not normalized"), }, { "recipient is 0x", @@ -68,11 +68,11 @@ func (suite *KeeperTestSuite) TestKeeper_SendToWasm() { }, func() { queryAddr := sdk.WasmAddress(ethAddr.Bytes()) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"1\"}", string(result)) }, - types.ErrIsNotOKCAddr, + nil, }, { "recipient is wasmaddr", @@ -81,24 +81,24 @@ func (suite *KeeperTestSuite) TestKeeper_SendToWasm() { }, func() { queryAddr := sdk.WasmAddress(make([]byte, 32)) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"1\"}", string(result)) }, - nil, + errors.New("execute wasm contract failed: Generic error: addr_validate errored: Address is not normalized"), }, { - "recipient is wasmaddr 0x", + "recipient is 0x 32", func() { recipient = "0x" + hex.EncodeToString(make([]byte, 32)) }, func() { queryAddr := sdk.WasmAddress(make([]byte, 32)) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"1\"}", string(result)) }, - types.ErrIsNotOKCAddr, + errors.New("incorrect address length"), }, { "normal topic,amount is zero", @@ -107,7 +107,7 @@ func (suite *KeeperTestSuite) TestKeeper_SendToWasm() { }, func() { queryAddr := sdk.WasmAddress(ethAddr.Bytes()) - result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, sdk.AccToAWasmddress(suite.wasmContract), []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) + result, err := suite.app.WasmKeeper.QuerySmart(suite.ctx, suite.wasmContract, []byte(fmt.Sprintf("{\"balance\":{\"address\":\"%s\"}}", queryAddr.String()))) suite.Require().NoError(err) suite.Require().Equal("{\"balance\":\"0\"}", string(result)) }, diff --git a/x/wasm/keeper/ante.go b/x/wasm/keeper/ante.go index a38077d69d..e3aca72ce3 100644 --- a/x/wasm/keeper/ante.go +++ b/x/wasm/keeper/ante.go @@ -3,10 +3,8 @@ package keeper import ( "encoding/binary" - types2 "github.com/okex/exchain/libs/tendermint/types" - sdk "github.com/okex/exchain/libs/cosmos-sdk/types" - + tmtypes "github.com/okex/exchain/libs/tendermint/types" "github.com/okex/exchain/x/wasm/types" ) @@ -30,7 +28,7 @@ func NewCountTXDecorator(storeKey sdk.StoreKey) *CountTXDecorator { // The ante handler passes the counter value via sdk.Context upstream. See `types.TXCounter(ctx)` to read the value. // Simulations don't get a tx counter value assigned. func (a CountTXDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - if simulate || !types2.HigherThanEarth(ctx.BlockHeight()) { + if simulate || !tmtypes.HigherThanEarth(ctx.BlockHeight()) { return next(ctx, tx, simulate) } currentGasmeter := ctx.GasMeter() @@ -108,7 +106,9 @@ func (d LimitSimulationGasDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simu } func UpdateTxCount(ctx sdk.Context, storeKey sdk.StoreKey, txCount int) { - store := ctx.KVStore(storeKey) - currentHeight := ctx.BlockHeight() - store.Set(types.TXCounterPrefix, encodeHeightCounter(currentHeight, uint32(txCount+1))) + if tmtypes.HigherThanEarth(ctx.BlockHeight()) { + store := ctx.KVStore(storeKey) + currentHeight := ctx.BlockHeight() + store.Set(types.TXCounterPrefix, encodeHeightCounter(currentHeight, uint32(txCount+1))) + } }