Skip to content

Commit

Permalink
Merge pull request #24 from cosmology-tech/doc-signers
Browse files Browse the repository at this point in the history
Refactor wallet
  • Loading branch information
Zetazzz authored Jun 21, 2024
2 parents 7beca77 + 81b2262 commit 83a2e59
Show file tree
Hide file tree
Showing 23 changed files with 430 additions and 321 deletions.
2 changes: 1 addition & 1 deletion libs/interchainjs/src/cosmwasm-stargate.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { AminoSigner } from '@interchainjs/cosmos/amino';
import { OfflineSigner } from '@interchainjs/cosmos/types/wallet';
import { toConverter, toEncoder } from '@interchainjs/cosmos/utils';
import { CosmWasmMsgs } from '@interchainjs/cosmos-types/cosmwasm';
import { CosmWasmStargateImpl as TxImpl } from '@interchainjs/cosmos-types/service-ops';
Expand All @@ -7,7 +8,6 @@ import { HttpEndpoint } from '@interchainjs/types';

import { SigningClient } from './signing-client';
import { SignerOptions } from './types/signing-client';
import { OfflineSigner } from './types/wallet';
import { defaultAuth } from './utils';

export class CosmWasmSigningClient extends SigningClient {
Expand Down
19 changes: 9 additions & 10 deletions libs/interchainjs/src/signing-client.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
import { AminoSigner } from '@interchainjs/cosmos/amino';
import { AccountData } from '@interchainjs/cosmos/types';
import { AccountData, isICosmosAccount } from '@interchainjs/cosmos/types';
import {
OfflineAminoSigner,
OfflineDirectSigner,
OfflineSigner,
} from '@interchainjs/cosmos/types/wallet';
import {
constructAuthInfo,
constructSignerInfo,
Expand Down Expand Up @@ -44,11 +49,6 @@ import {
SignerData,
SignerOptions,
} from './types/signing-client';
import {
OfflineAminoSigner,
OfflineDirectSigner,
OfflineSigner,
} from './types/wallet';
import { BroadcastTxError, defaultAuth, sleep, TimeoutError } from './utils';

/**
Expand Down Expand Up @@ -125,15 +125,14 @@ export class SigningClient {

private async getAccountData(address: string): Promise<AccountData> {
const accounts = await this.offlineSigner.getAccounts();
const account = accounts.find(
(account) => account.getAddress() === address
);
const account = accounts.find((account) => account.address === address);
if (!account) {
throw new Error(
`No such account found in OfflineSigner for address ${address}`
);
}
return account.toAccountData();

return isICosmosAccount(account) ? account.toAccountData() : account;
}

private async getPubkey(address: string): Promise<Any> {
Expand Down
2 changes: 1 addition & 1 deletion libs/interchainjs/src/stargate.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { AminoSigner } from '@interchainjs/cosmos/amino';
import { OfflineSigner } from '@interchainjs/cosmos/types/wallet';
import { toConverter, toEncoder } from '@interchainjs/cosmos/utils';
import { StargateImpl as TxImpl } from '@interchainjs/cosmos-types/service-ops';
import { StargateMsgs } from '@interchainjs/cosmos-types/stargate';
import { HttpEndpoint } from '@interchainjs/types';

import { SigningClient } from './signing-client';
import { SignerOptions } from './types/signing-client';
import { OfflineSigner } from './types/wallet';
import { defaultAuth } from './utils';

export class StargateSigningClient extends SigningClient {
Expand Down
30 changes: 0 additions & 30 deletions libs/interchainjs/src/types/wallet.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { CosmosAccount } from '@interchainjs/cosmos/types';
import { SignDoc, StdSignDoc } from '@interchainjs/types';

export type Algo = 'secp256k1' | 'ed25519' | 'sr25519';

Expand All @@ -15,34 +13,6 @@ export interface StdSignature {
signature: string;
}

export interface AminoSignResponse {
signed: StdSignDoc;
signature: StdSignature;
}

export interface OfflineAminoSigner {
getAccounts: () => Promise<CosmosAccount[]>;
signAmino: (
signerAddress: string,
signDoc: StdSignDoc
) => Promise<AminoSignResponse>;
}

export interface DirectSignResponse {
signed: SignDoc;
signature: StdSignature;
}

export interface OfflineDirectSigner {
getAccounts: () => Promise<CosmosAccount[]>;
signDirect: (
signerAddress: string,
signDoc: SignDoc
) => Promise<DirectSignResponse>;
}

export type OfflineSigner = OfflineAminoSigner | OfflineDirectSigner;

export interface WalletOptions {
bip39Password?: string;
hdPaths?: string[];
Expand Down
153 changes: 0 additions & 153 deletions libs/interchainjs/src/wallets/secp256k1.ts

This file was deleted.

41 changes: 28 additions & 13 deletions libs/interchainjs/starship/__tests__/gov.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ import './setup.test';

import { generateMnemonic } from '@confio/relayer/build/lib/helpers';
import { assertIsDeliverTxSuccess } from '@cosmjs/stargate';
import {
OfflineAminoSigner,
OfflineDirectSigner,
} from '@interchainjs/cosmos/types/wallet';
import { Secp256k1HDWallet } from '@interchainjs/cosmos/wallets/secp256k1hd';
import {
ProposalStatus,
TextProposal,
Expand All @@ -20,19 +25,23 @@ import { fromBase64, toUtf8 } from '@interchainjs/utils';
import { BigNumber } from 'bignumber.js';
import { RpcQuery } from 'interchainjs/query/rpc';
import { StargateSigningClient } from 'interchainjs/stargate';
import { OfflineAminoSigner, OfflineDirectSigner } from 'interchainjs/types';
import { Secp256k1Wallet } from 'interchainjs/wallets/secp256k1';
import { useChain } from 'starshipjs';

import { waitUntil } from '../src';

const cosmosHdPath = "m/44'/118'/0'/0/0";

describe('Governance tests for osmosis', () => {
let directSigner: OfflineDirectSigner,
aminoSigner: OfflineAminoSigner,
denom: string,
directAddress: string,
aminoAddress: string;
let chainInfo, getCoin, getRpcEndpoint: () => string, creditFromFaucet;
let commonPrefix: string,
chainInfo,
getCoin,
getRpcEndpoint: () => string,
creditFromFaucet;

// Variables used accross testcases
let queryClient: RpcQuery;
Expand All @@ -44,19 +53,25 @@ describe('Governance tests for osmosis', () => {
useChain('osmosis'));
denom = getCoin().base;

commonPrefix = chainInfo?.chain?.bech32_prefix;

// Initialize wallet
const directWallet = Secp256k1Wallet.fromMnemonic(generateMnemonic(), {
prefix: chainInfo.chain.bech32_prefix,
});
const aminoWallet = Secp256k1Wallet.fromMnemonic(generateMnemonic(), {
prefix: chainInfo.chain.bech32_prefix,
});
const directWallet = Secp256k1HDWallet.fromMnemonic(generateMnemonic(), [
{
prefix: commonPrefix,
hdPath: cosmosHdPath,
},
]);
const aminoWallet = Secp256k1HDWallet.fromMnemonic(generateMnemonic(), [
{
prefix: commonPrefix,
hdPath: cosmosHdPath,
},
]);
directSigner = directWallet.toOfflineDirectSigner();
aminoSigner = aminoWallet.toOfflineAminoSigner();
directAddress = (
await directSigner.getAccounts()
)[0].getAddress() as string;
aminoAddress = (await aminoSigner.getAccounts())[0].getAddress() as string;
directAddress = (await directSigner.getAccounts())[0].address;
aminoAddress = (await aminoSigner.getAccounts())[0].address;

// Create custom cosmos interchain client
queryClient = new RpcQuery(getRpcEndpoint());
Expand Down
22 changes: 15 additions & 7 deletions libs/interchainjs/starship/__tests__/staking.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import { ChainInfo } from '@chain-registry/client';
import { Asset } from '@chain-registry/types';
import { generateMnemonic } from '@confio/relayer/build/lib/helpers';
import { assertIsDeliverTxSuccess } from '@cosmjs/stargate';
import { OfflineDirectSigner } from '@interchainjs/cosmos/types/wallet';
import { Secp256k1HDWallet } from '@interchainjs/cosmos/wallets/secp256k1hd';
import {
BondStatus,
bondStatusToJSON,
Expand All @@ -12,13 +14,14 @@ import { MsgDelegate } from '@interchainjs/cosmos-types/cosmos/staking/v1beta1/t
import BigNumber from 'bignumber.js';
import { RpcQuery } from 'interchainjs/query/rpc';
import { StargateSigningClient } from 'interchainjs/stargate';
import { OfflineDirectSigner } from 'interchainjs/types';
import { Secp256k1Wallet } from 'interchainjs/wallets/secp256k1';
import { useChain } from 'starshipjs';

const cosmosHdPath = "m/44'/118'/0'/0/0";

describe('Staking tokens testing', () => {
let protoSigner: OfflineDirectSigner, denom: string, address: string;
let chainInfo: ChainInfo,
let commonPrefix: string,
chainInfo: ChainInfo,
getCoin: () => Asset,
getRpcEndpoint: () => string,
creditFromFaucet: (address: string, denom?: string | null) => Promise<void>;
Expand All @@ -33,13 +36,18 @@ describe('Staking tokens testing', () => {
useChain('osmosis'));
denom = getCoin().base;

commonPrefix = chainInfo?.chain?.bech32_prefix;

const mnemonic = generateMnemonic();
// Initialize wallet
const wallet = Secp256k1Wallet.fromMnemonic(mnemonic, {
prefix: chainInfo.chain.bech32_prefix,
});
const wallet = Secp256k1HDWallet.fromMnemonic(mnemonic, [
{
prefix: commonPrefix,
hdPath: cosmosHdPath,
},
]);
protoSigner = wallet.toOfflineDirectSigner();
address = (await protoSigner.getAccounts())[0].getAddress() as string;
address = (await protoSigner.getAccounts())[0].address;

// Create custom cosmos interchain client
queryClient = new RpcQuery(getRpcEndpoint());
Expand Down
Loading

0 comments on commit 83a2e59

Please sign in to comment.