@tedcryptoorg/cosmos-signer
Version:
Cosmos Signer - A library for signing transactions for Cosmos SDK chains
57 lines (56 loc) • 1.79 kB
JavaScript
import { Slip10RawIndex, pathToString } from '@cosmjs/crypto';
import BaseWallet from "./BaseWallet";
import { DirectSecp256k1HdWallet } from '@cosmjs/proto-signing';
export class OfflineWallet extends BaseWallet {
mnemonic;
logger;
name = 'offline';
label = 'Offline Wallet';
keychangeEvent = 'offline_keystorechange';
constructor(mnemonic, logger) {
super({}, logger);
this.mnemonic = mnemonic;
this.logger = logger;
}
async connect(network) {
try {
await this.getSigner(network);
return null;
}
catch (error) {
this.logger?.error('Failed to connect to offline wallet', error);
}
throw new Error('Failed to connect to offline wallet');
}
async getKey() {
throw new Error('Offline wallet does not have a key');
}
async getSigner(network) {
if (!this.signer) {
const hdPath = [
Slip10RawIndex.hardened(44),
Slip10RawIndex.hardened(Number(network.slip44)),
Slip10RawIndex.hardened(0),
Slip10RawIndex.normal(0),
Slip10RawIndex.normal(0)
];
if (Number(network.slip44) !== 118) {
this.logger?.log('Using HD Path', pathToString(hdPath));
}
this.signer = await DirectSecp256k1HdWallet.fromMnemonic(this.mnemonic, {
prefix: network.bech32_prefix,
hdPaths: [hdPath]
});
}
return this.signer;
}
signDirectSupport() {
return true;
}
signAminoSupport() {
return false;
}
async signAmino(...args) {
throw new Error('Amino signing is not supported in offline mode');
}
}