diff --git a/package.json b/package.json index cbd8216b..4d15bd46 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,7 @@ }, "packageManager": "yarn@3.2.0", "dependencies": { - "@changesets/cli": "^2.24.4" + "@changesets/cli": "^2.24.4", + "bech32": "^2.0.0" } } diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index 56a2f12a..5523dcf2 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -2,6 +2,7 @@ import { makeSignDoc as makeSignDocAmino } from "@cosmjs/amino"; import { createWasmAminoConverters } from "@cosmjs/cosmwasm-stargate"; import { fromBase64, fromBech32 } from "@cosmjs/encoding"; +import { bech32m } from "bech32"; import { Int53 } from "@cosmjs/math"; import { Decimal } from "@cosmjs/math"; import { makePubkeyAnyFromAccount } from "./proto-signing/pubkey"; @@ -1866,11 +1867,20 @@ export class SkipClient { switch (chain?.chainType) { case types.ChainType.Cosmos: try { - const { prefix } = fromBech32(userAddress.address); - return chain.bech32Prefix === prefix; - } catch (_error) { + if (chain.chainID.includes("penumbra")) { + try { + return chain.bech32Prefix === bech32m.decode(userAddress.address, 143)?.prefix; + } catch { + // The temporary solution to route around Noble address breakage. + // This can be entirely removed once `noble-1` upgrades. + return ["penumbracompat1", "tpenumbra"].includes(fromBech32(userAddress.address).prefix); + } + } + return chain.bech32Prefix === fromBech32(userAddress.address).prefix; + } catch { return false; } + case types.ChainType.EVM: try { return isAddress(userAddress.address); diff --git a/yarn.lock b/yarn.lock index ec31a193..79e43aa8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24953,6 +24953,7 @@ __metadata: "@typescript-eslint/eslint-plugin": ^6.21.0 "@typescript-eslint/parser": ^6.21.0 axios: 1.x + bech32: ^2.0.0 cosmjs-types: 0.9.0 eslint: ^8.56.0 eslint-config-prettier: ^9.1.0