From 96de8b980b391d0cbe015bd2b55b052254bee035 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Thu, 29 Feb 2024 18:46:19 +0100 Subject: [PATCH 1/9] Bump wasmd image to v0.51.0-rc.3 --- scripts/wasmd/env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/wasmd/env b/scripts/wasmd/env index d3dd44fc3e..e001fafae1 100644 --- a/scripts/wasmd/env +++ b/scripts/wasmd/env @@ -1,5 +1,5 @@ # Choose from https://hub.docker.com/r/cosmwasm/wasmd/tags REPOSITORY="cosmwasm/wasmd" -VERSION="v0.50.0" +VERSION="v0.51.0-rc.3" CONTAINER_NAME="wasmd" From ab0d6b1475ede948bda699293bf89f3d9ed3280b Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 15 Apr 2024 11:49:09 +0200 Subject: [PATCH 2/9] Re-enable Amino JSON signing for wasmd messages --- packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts index 025cea9677..2ce46b49c9 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts @@ -128,7 +128,6 @@ describe("SigningCosmWasmClient", () => { it("works with legacy Amino signer access type", async () => { pendingWithoutWasmd(); - pending("wasmd 0.50 does not work with Amino JSON signing"); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const options = { ...defaultSigningClientOptions, prefix: wasmd.prefix }; const client = await SigningCosmWasmClient.connectWithSigner(wasmd.endpoint, wallet, options); @@ -264,7 +263,6 @@ describe("SigningCosmWasmClient", () => { it("works with legacy Amino signer", async () => { pendingWithoutWasmd(); - pending("wasmd 0.50 does not work with Amino JSON signing"); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( wasmd.endpoint, @@ -348,7 +346,6 @@ describe("SigningCosmWasmClient", () => { it("works with Amino JSON signing", async () => { pendingWithoutWasmd(); - pending("wasmd 0.50 does not work with Amino JSON signing"); const aminoJsonWallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix, }); @@ -530,7 +527,6 @@ describe("SigningCosmWasmClient", () => { it("works with legacy Amino signer", async () => { pendingWithoutWasmd(); - pending("wasmd 0.50 does not work with Amino JSON signing"); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( wasmd.endpoint, @@ -634,7 +630,6 @@ describe("SigningCosmWasmClient", () => { it("works with legacy Amino signer", async () => { pendingWithoutWasmd(); - pending("wasmd 0.50 does not work with Amino JSON signing"); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( wasmd.endpoint, From 9f2b68f3bc8a80c0cc8fc52c6ae3b3eb4e5b1451 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 15 Apr 2024 12:18:16 +0200 Subject: [PATCH 3/9] Try v0.51.0-rc.4 --- scripts/wasmd/env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/wasmd/env b/scripts/wasmd/env index e001fafae1..c6d862245d 100644 --- a/scripts/wasmd/env +++ b/scripts/wasmd/env @@ -1,5 +1,5 @@ # Choose from https://hub.docker.com/r/cosmwasm/wasmd/tags REPOSITORY="cosmwasm/wasmd" -VERSION="v0.51.0-rc.3" +VERSION="v0.51.0-rc.4" CONTAINER_NAME="wasmd" From 13767ef07e9065c9fd1a40ee80ac73363730db1f Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Wed, 17 Apr 2024 11:15:56 +0200 Subject: [PATCH 4/9] Add simple "works with legacy Amino signer" for code upload --- .../src/signingcosmwasmclient.spec.ts | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts index 2ce46b49c9..db5524693f 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts @@ -126,13 +126,34 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with legacy Amino signer access type", async () => { + it("works with legacy Amino signer", async () => { + pendingWithoutWasmd(); + const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); + const client = await SigningCosmWasmClient.connectWithSigner( + wasmd.endpoint, + wallet, + defaultSigningClientOptions, + ); + const wasm = getHackatom().data; + const { codeId, checksum, originalSize, compressedSize } = await client.upload( + alice.address0, + wasm, + defaultUploadFee, + ); + expect(checksum).toEqual(toHex(sha256(wasm))); + expect(originalSize).toEqual(wasm.length); + expect(compressedSize).toBeLessThan(wasm.length * 0.5); + expect(codeId).toBeGreaterThanOrEqual(1); + client.disconnect(); + }); + + it("works with legacy Amino signer (instantiatePermission set)", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const options = { ...defaultSigningClientOptions, prefix: wasmd.prefix }; const client = await SigningCosmWasmClient.connectWithSigner(wasmd.endpoint, wallet, options); const wasm = getHackatom().data; - const accessConfig: AccessConfig = { + const instantiatePermission: AccessConfig = { permission: AccessType.ACCESS_TYPE_EVERYBODY, address: "", addresses: [], @@ -142,7 +163,7 @@ describe("SigningCosmWasmClient", () => { wasm, defaultUploadFee, "test memo", - accessConfig, + instantiatePermission, ); expect(checksum).toEqual(toHex(sha256(wasm))); expect(originalSize).toEqual(wasm.length); From e20a95c442a773a0c814f6763cf0cb784124f717 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Wed, 17 Apr 2024 11:18:31 +0200 Subject: [PATCH 5/9] Remove unnecessary prefix from options --- .../cosmwasm-stargate/src/signingcosmwasmclient.spec.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts index db5524693f..567fc0707e 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts @@ -150,8 +150,11 @@ describe("SigningCosmWasmClient", () => { it("works with legacy Amino signer (instantiatePermission set)", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); - const options = { ...defaultSigningClientOptions, prefix: wasmd.prefix }; - const client = await SigningCosmWasmClient.connectWithSigner(wasmd.endpoint, wallet, options); + const client = await SigningCosmWasmClient.connectWithSigner( + wasmd.endpoint, + wallet, + defaultSigningClientOptions, + ); const wasm = getHackatom().data; const instantiatePermission: AccessConfig = { permission: AccessType.ACCESS_TYPE_EVERYBODY, From 5db290f94ce0e1e09fbfdccd3291d56a3bbb3d9f Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Wed, 17 Apr 2024 12:19:32 +0200 Subject: [PATCH 6/9] Improve Amino JSON test coverage --- .../src/signingcosmwasmclient.spec.ts | 90 +++++++++++++------ .../stargate/src/modules/gov/messages.spec.ts | 4 +- .../src/modules/staking/messages.spec.ts | 4 +- .../src/modules/vesting/messages.spec.ts | 2 +- .../src/signingstargateclient.spec.ts | 4 +- 5 files changed, 68 insertions(+), 36 deletions(-) diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts index 567fc0707e..c136c5d6eb 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts @@ -126,7 +126,7 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with legacy Amino signer", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( @@ -147,7 +147,7 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with legacy Amino signer (instantiatePermission set)", async () => { + it("works with Amino JSON signer (instantiatePermission set)", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( @@ -285,7 +285,7 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with legacy Amino signer", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( @@ -293,8 +293,9 @@ describe("SigningCosmWasmClient", () => { wallet, defaultSigningClientOptions, ); + const funds = [coin(1234, "ucosm"), coin(321, "ustake")]; - // With admin + // Without admin await client.instantiate( alice.address0, deployedHackatom.codeId, @@ -304,10 +305,13 @@ describe("SigningCosmWasmClient", () => { }, "contract 1", defaultInstantiateFee, - { admin: makeRandomAddress() }, + { + funds: funds, + memo: "instantiate it", + }, ); - // Without admin + // With admin await client.instantiate( alice.address0, deployedHackatom.codeId, @@ -317,6 +321,10 @@ describe("SigningCosmWasmClient", () => { }, "contract 1", defaultInstantiateFee, + { + funds: funds, + admin: makeRandomAddress(), + }, ); client.disconnect(); @@ -368,41 +376,65 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with Amino JSON signing", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutWasmd(); - const aminoJsonWallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { + const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix, }); const client = await SigningCosmWasmClient.connectWithSigner( wasmd.endpoint, - aminoJsonWallet, + wallet, defaultSigningClientOptions, ); const { codeId } = await client.upload(alice.address0, getHackatom().data, defaultUploadFee); const funds = [coin(1234, "ucosm"), coin(321, "ustake")]; - const salt = Random.getBytes(64); const msg = { verifier: alice.address0, beneficiary: makeRandomAddress(), }; - const { contractAddress } = await client.instantiate2( - alice.address0, - codeId, - salt, - msg, - "My cool label--", - defaultInstantiateFee, - { - memo: "Let's see if the memo is used", - funds: funds, - }, - ); + // Without admin + { + const salt = Random.getBytes(64); + const { contractAddress } = await client.instantiate2( + alice.address0, + codeId, + salt, + msg, + "My cool label--", + defaultInstantiateFee, + { + memo: "Let's see if the memo is used", + funds: funds, + }, + ); + const ucosmBalance = await client.getBalance(contractAddress, "ucosm"); + const ustakeBalance = await client.getBalance(contractAddress, "ustake"); + expect(ucosmBalance).toEqual(funds[0]); + expect(ustakeBalance).toEqual(funds[1]); + } - const ucosmBalance = await client.getBalance(contractAddress, "ucosm"); - const ustakeBalance = await client.getBalance(contractAddress, "ustake"); - expect(ucosmBalance).toEqual(funds[0]); - expect(ustakeBalance).toEqual(funds[1]); + // With admin + { + const salt = Random.getBytes(64); + const { contractAddress } = await client.instantiate2( + alice.address0, + codeId, + salt, + msg, + "My cool label--", + defaultInstantiateFee, + { + memo: "Let's see if the memo is used", + funds: funds, + admin: makeRandomAddress(), + }, + ); + const ucosmBalance = await client.getBalance(contractAddress, "ucosm"); + const ustakeBalance = await client.getBalance(contractAddress, "ustake"); + expect(ucosmBalance).toEqual(funds[0]); + expect(ustakeBalance).toEqual(funds[1]); + } client.disconnect(); }); @@ -549,7 +581,7 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with legacy Amino signer", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( @@ -652,7 +684,7 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with legacy Amino signer", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( @@ -813,7 +845,7 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with legacy Amino signer", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( diff --git a/packages/stargate/src/modules/gov/messages.spec.ts b/packages/stargate/src/modules/gov/messages.spec.ts index da995ad07e..dbd8becf3c 100644 --- a/packages/stargate/src/modules/gov/messages.spec.ts +++ b/packages/stargate/src/modules/gov/messages.spec.ts @@ -148,7 +148,7 @@ describe("gov messages", () => { client.disconnect(); }); - it("works with Amino JSON sign mode", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutSimapp(); assert(voterWalletAmino); assert(proposalId, "Missing proposal ID"); @@ -206,7 +206,7 @@ describe("gov messages", () => { client.disconnect(); }); - it("works with Amino JSON sign mode", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutSimapp(); if (simapp50Enabled()) pending("Not working, see https://github.com/cosmos/cosmos-sdk/issues/18546"); assert(voterWalletAmino); diff --git a/packages/stargate/src/modules/staking/messages.spec.ts b/packages/stargate/src/modules/staking/messages.spec.ts index 1fe96c8569..36c4b5093b 100644 --- a/packages/stargate/src/modules/staking/messages.spec.ts +++ b/packages/stargate/src/modules/staking/messages.spec.ts @@ -94,7 +94,7 @@ describe("staking messages", () => { client.disconnect(); }); - it("works with Amino JSON sign mode", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutSimapp(); if (simapp50Enabled()) pending("Not working, see https://github.com/cosmos/cosmos-sdk/issues/18546"); @@ -235,7 +235,7 @@ describe("staking messages", () => { client.disconnect(); }); - it("works with Amino JSON sign mode", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutSimapp(); if (simapp50Enabled()) pending("Not working, see https://github.com/cosmos/cosmos-sdk/issues/18546"); diff --git a/packages/stargate/src/modules/vesting/messages.spec.ts b/packages/stargate/src/modules/vesting/messages.spec.ts index 64649fef58..8dd553a4b0 100644 --- a/packages/stargate/src/modules/vesting/messages.spec.ts +++ b/packages/stargate/src/modules/vesting/messages.spec.ts @@ -45,7 +45,7 @@ describe("vesting messages", () => { client.disconnect(); }); - it("works with Amino JSON sign mode", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutSimapp46OrHigher(); // Amino JSON broken on chain before Cosmos SDK 0.46 const wallet = await Secp256k1HdWallet.fromMnemonic(faucet.mnemonic); const client = await SigningStargateClient.connectWithSigner( diff --git a/packages/stargate/src/signingstargateclient.spec.ts b/packages/stargate/src/signingstargateclient.spec.ts index 399186c7f0..e8d7f8aedd 100644 --- a/packages/stargate/src/signingstargateclient.spec.ts +++ b/packages/stargate/src/signingstargateclient.spec.ts @@ -133,7 +133,7 @@ describe("SigningStargateClient", () => { expect(after).toEqual(amount[0]); }); - it("works with legacy Amino signer", async () => { + it("works with Amino JSON signer", async () => { pendingWithoutSimapp(); const wallet = await Secp256k1HdWallet.fromMnemonic(faucet.mnemonic); const client = await SigningStargateClient.connectWithSigner( @@ -301,7 +301,7 @@ describe("SigningStargateClient", () => { } }); - it("works with Amino signing", async () => { + it("works with Amino JSON signer", async () => { pending("We cannot test this easily anymore since the IBC module was removed from simapp"); const wallet = await Secp256k1HdWallet.fromMnemonic(faucet.mnemonic); const client = await SigningStargateClient.connectWithSigner( From 1c48a1ffc64ff3a06578cc1d88164d4ccfe2489a Mon Sep 17 00:00:00 2001 From: Pino' Surace Date: Fri, 19 Apr 2024 15:33:51 +0200 Subject: [PATCH 7/9] Try v0.51.0-rc.5 --- scripts/wasmd/env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/wasmd/env b/scripts/wasmd/env index c6d862245d..29d66ded4a 100644 --- a/scripts/wasmd/env +++ b/scripts/wasmd/env @@ -1,5 +1,5 @@ # Choose from https://hub.docker.com/r/cosmwasm/wasmd/tags REPOSITORY="cosmwasm/wasmd" -VERSION="v0.51.0-rc.4" +VERSION="v0.51.0-rc.5" CONTAINER_NAME="wasmd" From 6fd57fe3b559617813675b9cd129ab827181c392 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 22 Apr 2024 10:33:44 +0200 Subject: [PATCH 8/9] Test two different instantiatePermission --- .../src/signingcosmwasmclient.spec.ts | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts index c136c5d6eb..6e4f1002b5 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts @@ -147,7 +147,7 @@ describe("SigningCosmWasmClient", () => { client.disconnect(); }); - it("works with Amino JSON signer (instantiatePermission set)", async () => { + it("works with Amino JSON signer (instantiatePermission set to one address)", async () => { pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( @@ -156,11 +156,37 @@ describe("SigningCosmWasmClient", () => { defaultSigningClientOptions, ); const wasm = getHackatom().data; - const instantiatePermission: AccessConfig = { + const instantiatePermission = AccessConfig.fromPartial({ + permission: AccessType.ACCESS_TYPE_ANY_OF_ADDRESSES, + addresses: [makeRandomAddress()], + }); + const { codeId, checksum, originalSize, compressedSize } = await client.upload( + alice.address0, + wasm, + defaultUploadFee, + "test memo", + instantiatePermission, + ); + expect(checksum).toEqual(toHex(sha256(wasm))); + expect(originalSize).toEqual(wasm.length); + expect(compressedSize).toBeLessThan(wasm.length * 0.5); + expect(codeId).toBeGreaterThanOrEqual(1); + client.disconnect(); + }); + + it("works with Amino JSON signer (instantiatePermission set to everybody)", async () => { + pendingWithoutWasmd(); + const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); + const client = await SigningCosmWasmClient.connectWithSigner( + wasmd.endpoint, + wallet, + defaultSigningClientOptions, + ); + const wasm = getHackatom().data; + const instantiatePermission = AccessConfig.fromPartial({ permission: AccessType.ACCESS_TYPE_EVERYBODY, - address: "", addresses: [], - }; + }); const { codeId, checksum, originalSize, compressedSize } = await client.upload( alice.address0, wasm, From e6361e9e63dd791e13286be517ef02e0d4272a33 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Mon, 22 Apr 2024 10:53:11 +0200 Subject: [PATCH 9/9] Disable tests due to known Amino JSON issue See https://github.com/CosmWasm/wasmd/issues/1863 --- packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts index 6e4f1002b5..90f6c7a3a0 100644 --- a/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts +++ b/packages/cosmwasm-stargate/src/signingcosmwasmclient.spec.ts @@ -148,6 +148,7 @@ describe("SigningCosmWasmClient", () => { }); it("works with Amino JSON signer (instantiatePermission set to one address)", async () => { + pending("Known issue: https://github.com/CosmWasm/wasmd/issues/1863"); pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner( @@ -175,6 +176,7 @@ describe("SigningCosmWasmClient", () => { }); it("works with Amino JSON signer (instantiatePermission set to everybody)", async () => { + pending("Known issue: https://github.com/CosmWasm/wasmd/issues/1863"); pendingWithoutWasmd(); const wallet = await Secp256k1HdWallet.fromMnemonic(alice.mnemonic, { prefix: wasmd.prefix }); const client = await SigningCosmWasmClient.connectWithSigner(