UNPKG

@tronlink/core

Version:

The library serves as a core module within TronLink Extension, which provides low-level wallet functionality for both Tron and Ethereum networks, primary features includes account generation and transaction signing

60 lines (49 loc) 1.52 kB
import { GetAddressByDefinePathParams, GetAvailableAddressParams } from '../types'; import { BaseWallet } from '../wallet'; export abstract class LedgerWebHid { protected abstract makeApp(): Promise<LedgerAppBase>; protected abstract cleanUp(): Promise<void>; async getAddressByDefinePath(params: GetAddressByDefinePathParams): Promise<string> { try { const { path } = params; const app = await this.makeApp(); const { address } = await app.getAddress(path); return address; } finally { await this.cleanUp(); } } protected abstract getWallet(): BaseWallet; async getAvailableAddress( params: GetAvailableAddressParams, ): Promise<{ index: number; address: string; path: string }> { let index = 0; let address: string; let path = ''; const wallet = this.getWallet(); const { addresses } = params; // eslint-disable-next-line no-constant-condition while (true) { path = wallet.derivePath({ accountIndex: index, addressIndex: 0 }); address = await this.getAddressByDefinePath({ path }); if (!addresses.includes(address)) { break; } index++; } return { index, address, path, }; } async signPersonalMessage(transaction: any, path: string): Promise<any> { try { const app = await this.makeApp(); const response = await app.signPersonalMessage(path, transaction); return response; } finally { await this.cleanUp(); } } }