From 2d26defe516262966354e689f91ec09d72d2ba36 Mon Sep 17 00:00:00 2001 From: Joe Schnetzler Date: Thu, 27 Jun 2024 01:43:02 -0400 Subject: [PATCH 1/6] Fix type error --- .../cosmos-extension-metamask/src/extension/client.ts | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/wallets/cosmos-extension-metamask/src/extension/client.ts b/wallets/cosmos-extension-metamask/src/extension/client.ts index 0870e33f0..40167a1c1 100644 --- a/wallets/cosmos-extension-metamask/src/extension/client.ts +++ b/wallets/cosmos-extension-metamask/src/extension/client.ts @@ -77,10 +77,7 @@ export class CosmosExtensionClient implements WalletClient { return [await this.getAccount(chainId)]; }, signDirect: async (signerAddress: string, signDoc: SignDoc) => - await this.signDirect(chainId, signerAddress, { - ...signDoc, - accountNumber: BigInt(signDoc.accountNumber.toInt()), - }), + await this.signDirect(chainId, signerAddress, signDoc), }; } @@ -108,9 +105,6 @@ export class CosmosExtensionClient implements WalletClient { signDoc: DirectSignDoc, signOptions?: SignOptions ) { - return await this.cosmos.signDirect(chainId, signer, { - ...signDoc, - accountNumber: new Long(Number(signDoc.accountNumber.toString())), - }); + return await this.cosmos.signDirect(chainId, signer, signDoc); } } From dbd2aecfa6b345f3d10af40b87a750a56def211c Mon Sep 17 00:00:00 2001 From: Joe Schnetzler Date: Thu, 27 Jun 2024 04:33:32 -0400 Subject: [PATCH 2/6] Update types for DirectSignDoc --- .../src/extension/client.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/wallets/cosmos-extension-metamask/src/extension/client.ts b/wallets/cosmos-extension-metamask/src/extension/client.ts index 40167a1c1..fcf57e5a6 100644 --- a/wallets/cosmos-extension-metamask/src/extension/client.ts +++ b/wallets/cosmos-extension-metamask/src/extension/client.ts @@ -76,8 +76,15 @@ export class CosmosExtensionClient implements WalletClient { getAccounts: async () => { return [await this.getAccount(chainId)]; }, - signDirect: async (signerAddress: string, signDoc: SignDoc) => - await this.signDirect(chainId, signerAddress, signDoc), + signDirect: async (signerAddress: string, signDoc: SignDoc) => { + const newSignDoc: DirectSignDoc = { + bodyBytes: signDoc.bodyBytes, + authInfoBytes: signDoc.authInfoBytes, + chainId: signDoc.chainId, + accountNumber: BigInt(signDoc.accountNumber.toString()) + }; + return await this.signDirect(chainId, signerAddress, newSignDoc) + } }; } @@ -105,6 +112,12 @@ export class CosmosExtensionClient implements WalletClient { signDoc: DirectSignDoc, signOptions?: SignOptions ) { - return await this.cosmos.signDirect(chainId, signer, signDoc); + const signDocNew: SignDoc = { + bodyBytes: signDoc.bodyBytes, + authInfoBytes: signDoc.authInfoBytes, + chainId: signDoc.chainId, + accountNumber: new Long(Number(signDoc.accountNumber.toString()), Number(signDoc.accountNumber.toString()), true) + }; + return await this.cosmos.signDirect(chainId, signer, signDocNew); } } From b6d04442f18632de8b7807ca4dfd022d1dabeea3 Mon Sep 17 00:00:00 2001 From: Joe Schnetzler Date: Thu, 27 Jun 2024 04:59:54 -0400 Subject: [PATCH 3/6] Package update --- wallets/cosmos-extension-metamask/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wallets/cosmos-extension-metamask/package.json b/wallets/cosmos-extension-metamask/package.json index 477fb1f79..caf2a735c 100644 --- a/wallets/cosmos-extension-metamask/package.json +++ b/wallets/cosmos-extension-metamask/package.json @@ -62,7 +62,7 @@ "dependencies": { "@chain-registry/keplr": "1.68.2", "@cosmos-kit/core": "^2.13.0", - "@cosmsnap/snapper": "^0.2.3", + "@cosmsnap/snapper": "^0.2.4", "cosmjs-types": ">=0.9.0" }, "peerDependencies": { @@ -70,4 +70,4 @@ "@cosmjs/proto-signing": ">=0.32.3" }, "gitHead": "2b5f2de5d9ed1580be4137736dfc6cce779679d1" -} +} \ No newline at end of file From 64e7423adcbabe7f0a93aeacd75246f97a082b00 Mon Sep 17 00:00:00 2001 From: Joe Schnetzler Date: Thu, 27 Jun 2024 17:35:30 -0400 Subject: [PATCH 4/6] Update type formats --- .../src/extension/client.ts | 56 +++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/wallets/cosmos-extension-metamask/src/extension/client.ts b/wallets/cosmos-extension-metamask/src/extension/client.ts index fcf57e5a6..822bbfc36 100644 --- a/wallets/cosmos-extension-metamask/src/extension/client.ts +++ b/wallets/cosmos-extension-metamask/src/extension/client.ts @@ -1,12 +1,13 @@ import { OfflineAminoSigner, StdSignature, StdSignDoc } from '@cosmjs/amino'; -import { Algo } from '@cosmjs/proto-signing'; +import { Algo, DirectSignResponse, OfflineDirectSigner } from '@cosmjs/proto-signing'; import { ChainRecord, DirectSignDoc, SignType } from '@cosmos-kit/core'; import { SignOptions, WalletClient } from '@cosmos-kit/core'; import { Chain, - CosmJSOfflineSigner, CosmosSnap, installSnap, + signDirect, + signAmino, suggestChain, } from '@cosmsnap/snapper'; import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; @@ -64,28 +65,14 @@ export class CosmosExtensionClient implements WalletClient { default: return this.getOfflineSignerAmino(chainId); } - // return this.client.getOfflineSignerAuto(chainId); } getOfflineSignerAmino(chainId: string) { - return new CosmJSOfflineSigner(chainId) as unknown as OfflineAminoSigner; + return this.getOfflineSigner(chainId, "amino") as unknown as OfflineAminoSigner; } getOfflineSignerDirect(chainId: string) { - return { - getAccounts: async () => { - return [await this.getAccount(chainId)]; - }, - signDirect: async (signerAddress: string, signDoc: SignDoc) => { - const newSignDoc: DirectSignDoc = { - bodyBytes: signDoc.bodyBytes, - authInfoBytes: signDoc.authInfoBytes, - chainId: signDoc.chainId, - accountNumber: BigInt(signDoc.accountNumber.toString()) - }; - return await this.signDirect(chainId, signerAddress, newSignDoc) - } - }; + return this.getOfflineSigner(chainId, "direct") as unknown as OfflineDirectSigner; } async signAmino( @@ -94,7 +81,7 @@ export class CosmosExtensionClient implements WalletClient { signDoc: StdSignDoc, signOptions?: SignOptions ) { - return await this.cosmos.signAmino(chainId, signer, signDoc); + return await signAmino(chainId, signer, signDoc); } async signArbitrary( @@ -111,13 +98,36 @@ export class CosmosExtensionClient implements WalletClient { signer: string, signDoc: DirectSignDoc, signOptions?: SignOptions - ) { - const signDocNew: SignDoc = { + ): Promise { + if (chainId !== signDoc.chainId) { + throw new Error('Chain IDs do not match.'); + } + + const { accountNumber } = signDoc; + + const accountNumberLong = new Long(Number(accountNumber.toString()) || 0, Number(accountNumber.toString()), true); + + const newSignDoc: SignDoc = { bodyBytes: signDoc.bodyBytes, authInfoBytes: signDoc.authInfoBytes, chainId: signDoc.chainId, - accountNumber: new Long(Number(signDoc.accountNumber.toString()), Number(signDoc.accountNumber.toString()), true) + accountNumber: accountNumberLong + }; + + let signRes = await signDirect(chainId, signer, newSignDoc); + + const sign = { + signature: signRes.signature, + signed: { + ...signRes.signed, + accountNumber: accountNumberLong, + authInfoBytes: new Uint8Array( + Object.values(signRes.signed.authInfoBytes), + ), + bodyBytes: new Uint8Array(Object.values(signRes.signed.bodyBytes)), + }, }; - return await this.cosmos.signDirect(chainId, signer, signDocNew); + + return sign; } } From 8dadb870488d107b245054ab1db3409ef464a08a Mon Sep 17 00:00:00 2001 From: Joe Schnetzler Date: Thu, 27 Jun 2024 17:46:01 -0400 Subject: [PATCH 5/6] fromString --- wallets/cosmos-extension-metamask/src/extension/client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wallets/cosmos-extension-metamask/src/extension/client.ts b/wallets/cosmos-extension-metamask/src/extension/client.ts index 822bbfc36..c5642c48a 100644 --- a/wallets/cosmos-extension-metamask/src/extension/client.ts +++ b/wallets/cosmos-extension-metamask/src/extension/client.ts @@ -105,7 +105,7 @@ export class CosmosExtensionClient implements WalletClient { const { accountNumber } = signDoc; - const accountNumberLong = new Long(Number(accountNumber.toString()) || 0, Number(accountNumber.toString()), true); + const accountNumberLong = Long.fromString(accountNumber.toString()); const newSignDoc: SignDoc = { bodyBytes: signDoc.bodyBytes, From 57fad895720c97b85012da1959ce4b807d8e77e8 Mon Sep 17 00:00:00 2001 From: Joe Schnetzler Date: Fri, 28 Jun 2024 00:39:33 -0400 Subject: [PATCH 6/6] Fix inifinity loop --- wallets/cosmos-extension-metamask/src/extension/client.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wallets/cosmos-extension-metamask/src/extension/client.ts b/wallets/cosmos-extension-metamask/src/extension/client.ts index c5642c48a..bb6a1410a 100644 --- a/wallets/cosmos-extension-metamask/src/extension/client.ts +++ b/wallets/cosmos-extension-metamask/src/extension/client.ts @@ -68,11 +68,11 @@ export class CosmosExtensionClient implements WalletClient { } getOfflineSignerAmino(chainId: string) { - return this.getOfflineSigner(chainId, "amino") as unknown as OfflineAminoSigner; + return this.cosmos.getOfflineSigner(chainId, "amino") as unknown as OfflineAminoSigner; } getOfflineSignerDirect(chainId: string) { - return this.getOfflineSigner(chainId, "direct") as unknown as OfflineDirectSigner; + return this.cosmos.getOfflineSigner(chainId, "direct") as unknown as OfflineDirectSigner; } async signAmino(