Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor wallet #24

Merged
merged 5 commits into from
Jun 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading