Add Ledger interfaces (#211)

This commit is contained in:
Jaco Greeff
2019-09-17 13:21:18 +02:00
committed by GitHub
parent 34b0350501
commit 425ca93aa0
8 changed files with 161 additions and 4 deletions
+3 -1
View File
@@ -5,11 +5,13 @@
import { assertSingletonPackage } from '@polkadot/util';
import keyring, { Keyring } from './Keyring';
import { openLedger } from './ledger';
assertSingletonPackage('@polkadot/ui-keyring');
export default keyring;
export {
Keyring
Keyring,
openLedger
};
+36
View File
@@ -0,0 +1,36 @@
declare module 'ledger-polkadot' {
import Transport from '@ledgerhq/hw-transport';
export interface ResponseBase {
error_message: string;
return_code: number;
}
export interface ReponseAddress extends ResponseBase {
address: string;
pubKey: string;
}
export interface ResponseVersion extends ResponseBase {
device_locked: boolean;
major: number;
minor: number;
patch: number;
test_mode: boolean;
}
export interface ResponseSign extends ResponseBase {
signature: string;
}
declare class LedgerApp {
constructor (transport: Transport, scrambleKey?: string);
getVersion (): Promise<ResponseVersion>;
getAddress (account: number, change: number, addressIndex: number, requireConfirmation?: boolean): Promise<ResponseAddress>;
signSendChunk (chunkIdx: number, chunkNum: number, chunk: Buffer): Promise<ResponseSign>;
sign (account: number, change: number, addressIndex: number, message: Uint8Array): Promise<ResponseSign>;
}
export default LedgerApp;
}
+22
View File
@@ -0,0 +1,22 @@
// Copyright 2017-2019 @polkadot/ui-keyring authors & contributors
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import Transport from '@ledgerhq/hw-transport';
import LedgerU2F from '@ledgerhq/hw-transport-u2f';
import LedgerWebUSB from '@ledgerhq/hw-transport-webusb';
import LedgerApp from 'ledger-polkadot';
export async function openLedger (type: 'u2f' | 'webusb'): Promise<LedgerApp> {
let transport: Transport;
if (type === 'u2f') {
transport = await LedgerU2F.create(7500);
} else if (type === 'webusb') {
transport = await LedgerWebUSB.create();
} else {
throw new Error(`Unsupported transport ${type}`);
}
return new LedgerApp(transport);
}
@@ -0,0 +1 @@
declare module '@ledgerhq/hw-transport-webusb';