diff --git a/x/wasm/client/cli/gov_tx_test.go b/x/wasm/client/cli/gov_tx_test.go index da62d498c0..87621912c6 100644 --- a/x/wasm/client/cli/gov_tx_test.go +++ b/x/wasm/client/cli/gov_tx_test.go @@ -104,7 +104,7 @@ func TestParseCodeInfoFlags(t *testing.T) { wasmBin, err := os.ReadFile("../../keeper/testdata/hackatom.wasm.gzip") require.NoError(t, err) - checksumStr := "beb3de5e9b93b52e514c74ce87ccddb594b9bcd33b7f1af1bb6da63fc883917b" + checksumStr := "5ca46abb8e9b1b754a5c906f9c0f4eec9121ee09e3cee55ea0faba54763706e2" specs := map[string]struct { args []string diff --git a/x/wasm/client/cli/tx_test.go b/x/wasm/client/cli/tx_test.go index 28fa590ae1..04f80fc28b 100644 --- a/x/wasm/client/cli/tx_test.go +++ b/x/wasm/client/cli/tx_test.go @@ -26,22 +26,22 @@ func TestParseVerificationFlags(t *testing.T) { "gov store zipped": { srcPath: "../../keeper/testdata/hackatom.wasm.gzip", args: []string{ - "--instantiate-everybody=true", "--code-hash=beb3de5e9b93b52e514c74ce87ccddb594b9bcd33b7f1af1bb6da63fc883917b", + "--instantiate-everybody=true", "--code-hash=5ca46abb8e9b1b754a5c906f9c0f4eec9121ee09e3cee55ea0faba54763706e2", "--code-source-url=https://example.com", "--builder=cosmwasm/workspace-optimizer:0.12.11", }, expBuilder: "cosmwasm/workspace-optimizer:0.12.11", expSource: "https://example.com", - expCodeHash: "beb3de5e9b93b52e514c74ce87ccddb594b9bcd33b7f1af1bb6da63fc883917b", + expCodeHash: "5ca46abb8e9b1b754a5c906f9c0f4eec9121ee09e3cee55ea0faba54763706e2", }, "gov store raw": { srcPath: "../../keeper/testdata/hackatom.wasm", args: []string{ - "--instantiate-everybody=true", "--code-hash=beb3de5e9b93b52e514c74ce87ccddb594b9bcd33b7f1af1bb6da63fc883917b", + "--instantiate-everybody=true", "--code-hash=5ca46abb8e9b1b754a5c906f9c0f4eec9121ee09e3cee55ea0faba54763706e2", "--code-source-url=https://example.com", "--builder=cosmwasm/workspace-optimizer:0.12.11", }, expBuilder: "cosmwasm/workspace-optimizer:0.12.11", expSource: "https://example.com", - expCodeHash: "beb3de5e9b93b52e514c74ce87ccddb594b9bcd33b7f1af1bb6da63fc883917b", + expCodeHash: "5ca46abb8e9b1b754a5c906f9c0f4eec9121ee09e3cee55ea0faba54763706e2", }, "gov store checksum mismatch": { srcPath: "../../keeper/testdata/hackatom.wasm", diff --git a/x/wasm/keeper/keeper_test.go b/x/wasm/keeper/keeper_test.go index 128afd6c2c..8b289d31a5 100644 --- a/x/wasm/keeper/keeper_test.go +++ b/x/wasm/keeper/keeper_test.go @@ -64,7 +64,7 @@ func TestCreateSuccess(t *testing.T) { require.NoError(t, err) require.Equal(t, hackatomWasm, storedCode) // and events emitted - codeHash := strings.ToLower("beb3de5e9b93b52e514c74ce87ccddb594b9bcd33b7f1af1bb6da63fc883917b") + codeHash := strings.ToLower("5ca46abb8e9b1b754a5c906f9c0f4eec9121ee09e3cee55ea0faba54763706e2") exp := sdk.Events{sdk.NewEvent("store_code", sdk.NewAttribute("code_checksum", codeHash), sdk.NewAttribute("code_id", "1"))} assert.Equal(t, exp, em.Events()) } @@ -417,7 +417,7 @@ func TestInstantiate(t *testing.T) { gasAfter := ctx.GasMeter().GasConsumed() if types.EnableGasVerification { - require.Equal(t, uint64(0x1b5bc), gasAfter-gasBefore) + require.Equal(t, uint64(0x1b5bd), gasAfter-gasBefore) } // ensure it is stored properly diff --git a/x/wasm/keeper/proposal_integration_test.go b/x/wasm/keeper/proposal_integration_test.go index e5637d5ef6..acfa30a413 100644 --- a/x/wasm/keeper/proposal_integration_test.go +++ b/x/wasm/keeper/proposal_integration_test.go @@ -35,7 +35,7 @@ func TestStoreCodeProposal(t *testing.T) { require.NoError(t, err) gzippedWasmCode, err := os.ReadFile("./testdata/hackatom.wasm.gzip") require.NoError(t, err) - checksum, err := hex.DecodeString("beb3de5e9b93b52e514c74ce87ccddb594b9bcd33b7f1af1bb6da63fc883917b") + checksum, err := hex.DecodeString("5ca46abb8e9b1b754a5c906f9c0f4eec9121ee09e3cee55ea0faba54763706e2") require.NoError(t, err) specs := map[string]struct { @@ -330,7 +330,7 @@ func TestStoreAndInstantiateContractProposal(t *testing.T) { wasmCode, err := os.ReadFile("./testdata/hackatom.wasm") require.NoError(t, err) - checksum, err := hex.DecodeString("beb3de5e9b93b52e514c74ce87ccddb594b9bcd33b7f1af1bb6da63fc883917b") + checksum, err := hex.DecodeString("5ca46abb8e9b1b754a5c906f9c0f4eec9121ee09e3cee55ea0faba54763706e2") require.NoError(t, err) var ( diff --git a/x/wasm/keeper/recurse_test.go b/x/wasm/keeper/recurse_test.go index d6f73cfa41..cab895b148 100644 --- a/x/wasm/keeper/recurse_test.go +++ b/x/wasm/keeper/recurse_test.go @@ -57,8 +57,8 @@ func TestGasCostOnQuery(t *testing.T) { // Note: about 100 SDK gas (10k wasmer gas) for each round of sha256 GasWork50 uint64 = 64_218 // this is a little shy of 50k gas - to keep an eye on the limit - GasReturnUnhashed uint64 = 32 - GasReturnHashed uint64 = 27 + GasReturnUnhashed uint64 = 29 + GasReturnHashed uint64 = 24 ) cases := map[string]struct { @@ -208,9 +208,9 @@ func TestLimitRecursiveQueryGas(t *testing.T) { const ( // Note: about 100 SDK gas (10k wasmer gas) for each round of sha256 - GasWork2k uint64 = 77_206 // = NewContractInstanceCosts + x // we have 6x gas used in cpu than in the instance + GasWork2k uint64 = 77_161 // = NewContractInstanceCosts + x // we have 6x gas used in cpu than in the instance // This is overhead for calling into a sub-contract - GasReturnHashed uint64 = 27 + GasReturnHashed uint64 = 25 ) cases := map[string]struct { @@ -261,7 +261,7 @@ func TestLimitRecursiveQueryGas(t *testing.T) { expectQueriesFromContract: 10, expectOutOfGas: false, expectError: "query wasm contract failed", // Error we get from the contract instance doing the failing query, not wasmd - expectedGas: 10*(GasWork2k+GasReturnHashed) - 247, + expectedGas: 10*(GasWork2k+GasReturnHashed) - 229, }, } diff --git a/x/wasm/keeper/reflect_test.go b/x/wasm/keeper/reflect_test.go index d2e2ded65f..a641ffe156 100644 --- a/x/wasm/keeper/reflect_test.go +++ b/x/wasm/keeper/reflect_test.go @@ -2,6 +2,7 @@ package keeper import ( "encoding/json" + "fmt" "os" "strings" "testing" @@ -36,7 +37,10 @@ func mustParse(t *testing.T, data []byte, res interface{}) { require.NoError(t, err) } -const ReflectFeatures = "staking,mask,stargate,cosmwasm_1_1" +const ( + ReflectFeatures = "staking,mask,stargate,cosmwasm_1_1" + CyberpunkFeatures = "staking,mask,stargate,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3" +) func TestReflectContractSend(t *testing.T) { cdc := MakeEncodingConfig(t).Marshaler @@ -546,7 +550,7 @@ func TestWasmRawQueryWithNil(t *testing.T) { } func TestRustPanicIsHandled(t *testing.T) { - ctx, keepers := CreateTestInput(t, false, ReflectFeatures) + ctx, keepers := CreateTestInput(t, false, CyberpunkFeatures) keeper := keepers.ContractKeeper creator := keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))...) @@ -568,6 +572,119 @@ func TestRustPanicIsHandled(t *testing.T) { assert.Nil(t, gotData) } +func TestQueryDenomsIntegration(t *testing.T) { + ctx, keepers := CreateTestInput(t, false, CyberpunkFeatures) + ck, k := keepers.ContractKeeper, keepers.WasmKeeper + creator := keepers.Faucet.NewFundedRandomAccount(ctx, sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))...) + + // upload code + codeID, _, err := ck.Create(ctx, creator, testdata.CyberpunkContractWasm(), nil) + require.NoError(t, err) + + contractAddr, _, err := ck.Instantiate(ctx, codeID, creator, nil, []byte("{}"), "cyberpunk contract", nil) + require.NoError(t, err) + + var ( + metadata1 = banktypes.Metadata{ + Description: "testing", + DenomUnits: []*banktypes.DenomUnit{ + {Denom: "ualx", Exponent: 0, Aliases: []string{"microalx"}}, + {Denom: "alx", Exponent: 6, Aliases: []string{"ALX"}}, + }, + Base: "ualx", + Display: "alx", + Name: "my test denom", + Symbol: "XALX", + URI: "https://example.com/ualx", + URIHash: "my_hash", + } + metadata2 = banktypes.Metadata{ + Description: "testing2", + DenomUnits: []*banktypes.DenomUnit{ + {Denom: "ublx", Exponent: 0, Aliases: []string{"microblx"}}, + {Denom: "blx", Exponent: 6, Aliases: []string{"BLX"}}, + }, + Base: "ublx", + Display: "blx", + Name: "my other test denom", + Symbol: "XBLX", + } + ) + type dict map[string]any + + keepers.BankKeeper.SetDenomMetaData(ctx, metadata1) + keepers.BankKeeper.SetDenomMetaData(ctx, metadata2) + + specs := map[string]struct { + query string + exp []byte + expErr *errorsmod.Error + }{ + "all denoms": { + query: `{"denoms":{}}`, + exp: mustMarshal(t, []dict{ + { + "description": "testing", + "denom_units": []dict{ + {"denom": "ualx", "exponent": 0, "aliases": []string{"microalx"}}, + {"denom": "alx", "exponent": 6, "aliases": []string{"ALX"}}, + }, + "base": "ualx", + "display": "alx", + "name": "my test denom", + "symbol": "XALX", + "uri": "https://example.com/ualx", + "uri_hash": "my_hash", + }, { + "description": "testing2", + "denom_units": []dict{ + {"denom": "ublx", "exponent": 0, "aliases": []string{"microblx"}}, + {"denom": "blx", "exponent": 6, "aliases": []string{"BLX"}}, + }, + "base": "ublx", + "display": "blx", + "name": "my other test denom", + "symbol": "XBLX", + "uri": "", + "uri_hash": "", + }, + }), + }, + "single denom": { + query: `{"denom":{"denom":"ublx"}}`, + exp: mustMarshal(t, dict{ + "description": "testing2", + "denom_units": []dict{ + {"denom": "ublx", "exponent": 0, "aliases": []string{"microblx"}}, + {"denom": "blx", "exponent": 6, "aliases": []string{"BLX"}}, + }, + "base": "ublx", + "display": "blx", + "name": "my other test denom", + "symbol": "XBLX", + "uri": "", + "uri_hash": "", + }), + }, + "unknown denom": { + query: `{"denom":{"denom":"unknown"}}`, + expErr: sdkerrors.ErrNotFound, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + gotData, gotErr := k.QuerySmart(ctx, contractAddr, []byte(spec.query)) + if spec.expErr != nil { + require.Error(t, gotErr) + assert.Contains(t, gotErr.Error(), fmt.Sprintf("codespace: %s, code: %d:", spec.expErr.Codespace(), spec.expErr.ABCICode())) + return + } + require.NoError(t, gotErr) + assert.JSONEq(t, string(spec.exp), string(gotData), string(gotData)) + }) + } +} + func checkAccount(t *testing.T, ctx sdk.Context, accKeeper authkeeper.AccountKeeper, bankKeeper bankkeeper.Keeper, addr sdk.AccAddress, expected sdk.Coins) { acct := accKeeper.GetAccount(ctx, addr) if expected == nil { diff --git a/x/wasm/keeper/testdata/cyberpunk.wasm b/x/wasm/keeper/testdata/cyberpunk.wasm index 355804ad13..7f81df52e1 100644 Binary files a/x/wasm/keeper/testdata/cyberpunk.wasm and b/x/wasm/keeper/testdata/cyberpunk.wasm differ diff --git a/x/wasm/keeper/testdata/hackatom.wasm b/x/wasm/keeper/testdata/hackatom.wasm index baa03a853a..d7ae04051c 100644 Binary files a/x/wasm/keeper/testdata/hackatom.wasm and b/x/wasm/keeper/testdata/hackatom.wasm differ diff --git a/x/wasm/keeper/testdata/hackatom.wasm.gzip b/x/wasm/keeper/testdata/hackatom.wasm.gzip index 3c95e9b1d4..58da39db0b 100644 Binary files a/x/wasm/keeper/testdata/hackatom.wasm.gzip and b/x/wasm/keeper/testdata/hackatom.wasm.gzip differ diff --git a/x/wasm/keeper/testdata/ibc_reflect_send.wasm b/x/wasm/keeper/testdata/ibc_reflect_send.wasm index 0f7d7e4593..a6a2b7ff4a 100644 Binary files a/x/wasm/keeper/testdata/ibc_reflect_send.wasm and b/x/wasm/keeper/testdata/ibc_reflect_send.wasm differ diff --git a/x/wasm/keeper/testdata/reflect.wasm b/x/wasm/keeper/testdata/reflect.wasm index 31735645df..23fcff5533 100644 Binary files a/x/wasm/keeper/testdata/reflect.wasm and b/x/wasm/keeper/testdata/reflect.wasm differ diff --git a/x/wasm/keeper/testdata/staking.wasm b/x/wasm/keeper/testdata/staking.wasm index 015ae00ed7..635b04ec15 100644 Binary files a/x/wasm/keeper/testdata/staking.wasm and b/x/wasm/keeper/testdata/staking.wasm differ diff --git a/x/wasm/keeper/testdata/version.txt b/x/wasm/keeper/testdata/version.txt index 79127d85a4..f5ca6914e9 100644 --- a/x/wasm/keeper/testdata/version.txt +++ b/x/wasm/keeper/testdata/version.txt @@ -1 +1,3 @@ -v1.2.0 +v1.3.0 +burner.wasm: v1.2.0 +ibc-reflect.wasm: custom build, see: https://github.com/CosmWasm/cosmwasm/pull/1690