From a0dc5605f1a7f378bba5d26e96260f8b9fb4b383 Mon Sep 17 00:00:00 2001 From: Carlton Hanna Date: Tue, 15 Feb 2022 14:37:06 -0700 Subject: [PATCH 1/3] Use the length of contractAddr to support variable length addresses --- x/wasm/types/keys.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/wasm/types/keys.go b/x/wasm/types/keys.go index 982bf1a069..c2f5e84d12 100644 --- a/x/wasm/types/keys.go +++ b/x/wasm/types/keys.go @@ -87,7 +87,7 @@ func GetContractCodeHistoryElementKey(contractAddr sdk.AccAddress, pos uint64) [ // GetContractCodeHistoryElementPrefix returns the key prefix for a contract code history entry: `` func GetContractCodeHistoryElementPrefix(contractAddr sdk.AccAddress) []byte { prefixLen := len(ContractCodeHistoryElementPrefix) - r := make([]byte, prefixLen+ContractAddrLen) + r := make([]byte, prefixLen+len(contractAddr)) copy(r[0:], ContractCodeHistoryElementPrefix) copy(r[prefixLen:], contractAddr) return r From 773eef810d79d9fb47cce49e7f0cc042aed051eb Mon Sep 17 00:00:00 2001 From: Carlton Hanna Date: Tue, 15 Feb 2022 15:06:52 -0700 Subject: [PATCH 2/3] Add contract address len to index --- x/wasm/types/keys.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/x/wasm/types/keys.go b/x/wasm/types/keys.go index c2f5e84d12..fb636ef4f3 100644 --- a/x/wasm/types/keys.go +++ b/x/wasm/types/keys.go @@ -57,7 +57,8 @@ func GetContractStorePrefix(addr sdk.AccAddress) []byte { func GetContractByCreatedSecondaryIndexKey(contractAddr sdk.AccAddress, c ContractCodeHistoryEntry) []byte { prefix := GetContractByCodeIDSecondaryIndexPrefix(c.CodeID) prefixLen := len(prefix) - r := make([]byte, prefixLen+AbsoluteTxPositionLen+ContractAddrLen) + contractAddrLen := len(contractAddr) + r := make([]byte, prefixLen+AbsoluteTxPositionLen+contractAddrLen) copy(r[0:], prefix) copy(r[prefixLen:], c.Updated.Bytes()) copy(r[prefixLen+AbsoluteTxPositionLen:], contractAddr) @@ -87,7 +88,8 @@ func GetContractCodeHistoryElementKey(contractAddr sdk.AccAddress, pos uint64) [ // GetContractCodeHistoryElementPrefix returns the key prefix for a contract code history entry: `` func GetContractCodeHistoryElementPrefix(contractAddr sdk.AccAddress) []byte { prefixLen := len(ContractCodeHistoryElementPrefix) - r := make([]byte, prefixLen+len(contractAddr)) + contractAddrLen := len(contractAddr) + r := make([]byte, prefixLen+contractAddrLen) copy(r[0:], ContractCodeHistoryElementPrefix) copy(r[prefixLen:], contractAddr) return r From 18ed4084e6214755baeb31e029e0957379e52d3b Mon Sep 17 00:00:00 2001 From: fkneeland Date: Tue, 22 Feb 2022 21:41:15 -0700 Subject: [PATCH 3/3] add support for M1 --- go.mod | 2 ++ x/wasm/keeper/relay.go | 5 +---- x/wasm/keeper/wasmtesting/mock_engine.go | 6 +++--- x/wasm/types/wasmer_engine.go | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 661f7f146d..e84c4d99ba 100644 --- a/go.mod +++ b/go.mod @@ -131,4 +131,6 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 google.golang.org/grpc => google.golang.org/grpc v1.33.2 + github.com/CosmWasm/cosmwasm => ../cosmwasm + github.com/CosmWasm/wasmvm => ../wasmvm ) diff --git a/x/wasm/keeper/relay.go b/x/wasm/keeper/relay.go index 9c1948dd2e..84ee1de726 100644 --- a/x/wasm/keeper/relay.go +++ b/x/wasm/keeper/relay.go @@ -131,11 +131,8 @@ func (k Keeper) OnRecvPacket( if execErr != nil { return nil, sdkerrors.Wrap(types.ErrExecuteFailed, execErr.Error()) } - if res.Err != "" { // handle error case as before https://github.com/CosmWasm/wasmvm/commit/c300106fe5c9426a495f8e10821e00a9330c56c6 - return nil, sdkerrors.Wrap(types.ErrExecuteFailed, res.Err) - } // note submessage reply results can overwrite the `Acknowledgement` data - return k.handleContractResponse(ctx, contractAddr, contractInfo.IBCPortID, res.Ok.Messages, res.Ok.Attributes, res.Ok.Acknowledgement, res.Ok.Events) + return k.handleContractResponse(ctx, contractAddr, contractInfo.IBCPortID, res.Messages, res.Attributes, res.Acknowledgement, res.Events) } // OnAckPacket calls the contract to handle the "acknowledgement" data which can contain success or failure of a packet diff --git a/x/wasm/keeper/wasmtesting/mock_engine.go b/x/wasm/keeper/wasmtesting/mock_engine.go index 06bdd25ecb..b0995bbccf 100644 --- a/x/wasm/keeper/wasmtesting/mock_engine.go +++ b/x/wasm/keeper/wasmtesting/mock_engine.go @@ -30,7 +30,7 @@ type MockWasmer struct { IBCChannelOpenFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelOpenMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (uint64, error) IBCChannelConnectFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelConnectMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) IBCChannelCloseFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCChannelCloseMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) - IBCPacketReceiveFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) + IBCPacketReceiveFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResponse, uint64, error) IBCPacketAckFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketAckMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) IBCPacketTimeoutFn func(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketTimeoutMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCBasicResponse, uint64, error) PinFn func(checksum wasmvm.Checksum) error @@ -59,7 +59,7 @@ func (m *MockWasmer) IBCChannelClose(codeID wasmvm.Checksum, env wasmvmtypes.Env return m.IBCChannelCloseFn(codeID, env, msg, store, goapi, querier, gasMeter, gasLimit, deserCost) } -func (m *MockWasmer) IBCPacketReceive(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResult, uint64, error) { +func (m *MockWasmer) IBCPacketReceive(codeID wasmvm.Checksum, env wasmvmtypes.Env, msg wasmvmtypes.IBCPacketReceiveMsg, store wasmvm.KVStore, goapi wasmvm.GoAPI, querier wasmvm.Querier, gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction) (*wasmvmtypes.IBCReceiveResponse, uint64, error) { if m.IBCPacketReceiveFn == nil { panic("not supposed to be called!") } @@ -248,7 +248,7 @@ type IBCContractCallbacks interface { gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction, - ) (*wasmvmtypes.IBCReceiveResult, uint64, error) + ) (*wasmvmtypes.IBCReceiveResponse, uint64, error) IBCPacketAck( codeID wasmvm.Checksum, diff --git a/x/wasm/types/wasmer_engine.go b/x/wasm/types/wasmer_engine.go index 83988e82af..b73ef2c7f3 100644 --- a/x/wasm/types/wasmer_engine.go +++ b/x/wasm/types/wasmer_engine.go @@ -191,7 +191,7 @@ type WasmerEngine interface { gasMeter wasmvm.GasMeter, gasLimit uint64, deserCost wasmvmtypes.UFraction, - ) (*wasmvmtypes.IBCReceiveResult, uint64, error) + ) (*wasmvmtypes.IBCReceiveResponse, uint64, error) // IBCPacketAck is available on IBC-enabled contracts and is called when an // the response for an outgoing packet (previously sent by this contract)