Use appropriate cosmos address prefix while signing messages (#22)

Part of https://www.notion.so/Revive-attestation-react-app-19da6b22d472809595c2fb9d2970849f

Co-authored-by: Shreerang Kale <shreerangkale@gmail.com>
Reviewed-on: cerc-io/laconic-wallet-web#22
This commit is contained in:
Prathamesh Musale 2025-02-25 10:38:59 +00:00
parent 0b4ceae6b2
commit 59176ad7cb
3 changed files with 16 additions and 3 deletions

1
.eslintignore Normal file
View File

@ -0,0 +1 @@
build

View File

@ -3,6 +3,7 @@ For more information, "visit https://docs.ethers.org/v5/cookbook/react-native/#c
import 'react-native-get-random-values'; import 'react-native-get-random-values';
import '@ethersproject/shims'; import '@ethersproject/shims';
import { fromBech32 } from '@cosmjs/encoding';
import { Wallet } from 'ethers'; import { Wallet } from 'ethers';
import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx'; import { SignDoc } from 'cosmjs-types/cosmos/tx/v1beta1/tx';
@ -24,7 +25,7 @@ const signMessage = async ({
case EIP155: case EIP155:
return await signEthMessage(message, accountId, chainId); return await signEthMessage(message, accountId, chainId);
case COSMOS: case COSMOS:
return await signCosmosMessage(message, path.path); return await signCosmosMessage(message, path.path, path.address);
default: default:
throw new Error('Invalid wallet type'); throw new Error('Invalid wallet type');
} }
@ -51,10 +52,13 @@ const signEthMessage = async (
const signCosmosMessage = async ( const signCosmosMessage = async (
message: string, message: string,
path: string, path: string,
cosmosAddress: string,
): Promise<string | undefined> => { ): Promise<string | undefined> => {
try { try {
const mnemonic = await getMnemonic(); const mnemonic = await getMnemonic();
const cosmosAccount = await getCosmosAccounts(mnemonic, path); const addressPrefix = fromBech32(cosmosAddress).prefix
const cosmosAccount = await getCosmosAccounts(mnemonic, path, addressPrefix);
const address = cosmosAccount.data.address; const address = cosmosAccount.data.address;
const cosmosSignature = await cosmosAccount.cosmosWallet.signAmino( const cosmosSignature = await cosmosAccount.cosmosWallet.signAmino(
address, address,

View File

@ -9,6 +9,7 @@ import {
StdFee, StdFee,
MsgSendEncodeObject MsgSendEncodeObject
} from '@cosmjs/stargate'; } from '@cosmjs/stargate';
import { fromBech32 } from '@cosmjs/encoding';
import { EncodeObject } from '@cosmjs/proto-signing'; import { EncodeObject } from '@cosmjs/proto-signing';
import { LaconicClient } from '@cerc-io/registry-sdk'; import { LaconicClient } from '@cerc-io/registry-sdk';
import { Buffer } from 'buffer'; import { Buffer } from 'buffer';
@ -19,6 +20,7 @@ import { Account } from '../../types';
import { getMnemonic, getPathKey } from '../misc'; import { getMnemonic, getPathKey } from '../misc';
import { getCosmosAccounts } from '../accounts'; import { getCosmosAccounts } from '../accounts';
import { COSMOS_METHODS } from './COSMOSData'; import { COSMOS_METHODS } from './COSMOSData';
import { COSMOS } from '../constants';
interface EthSendTransaction { interface EthSendTransaction {
type: 'eth_sendTransaction'; type: 'eth_sendTransaction';
@ -80,7 +82,13 @@ export async function approveWalletConnectRequest(
const path = (await getPathKey(`${namespace}:${chainId}`, account.index)) const path = (await getPathKey(`${namespace}:${chainId}`, account.index))
.path; .path;
const mnemonic = await getMnemonic(); const mnemonic = await getMnemonic();
const cosmosAccount = await getCosmosAccounts(mnemonic, path);
let addressPrefix: string | undefined
if (namespace === COSMOS) {
addressPrefix = fromBech32(account.address).prefix
}
const cosmosAccount = await getCosmosAccounts(mnemonic, path, addressPrefix);
const address = account.address; const address = account.address;
switch (request.method) { switch (request.method) {