-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsigner.ts
69 lines (64 loc) · 2.37 KB
/
signer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { promises as fsPromises } from 'fs'
import type { Config } from './types'
import type { Signer, AddressDerivationFn, MnemonicToSeedFn, SeedToKeypairFn } from '@chorus-one/signer'
import { KeyType } from '@chorus-one/signer'
import { SignerType } from './enums'
import { FireblocksSigner } from '@chorus-one/signer-fireblocks'
import { LocalSigner } from '@chorus-one/signer-local'
import { Logger } from '@chorus-one/utils'
import { LedgerTonSigner } from '@chorus-one/signer-ledger-ton'
import TransportNodeHid from '@ledgerhq/hw-transport-node-hid'
export async function newSigner (
config: Config,
signerType: SignerType,
options: {
keyType?: KeyType
logger?: Logger
addressDerivationFn?: AddressDerivationFn
mnemonicToSeedFn?: MnemonicToSeedFn
seedToKeypairFn?: SeedToKeypairFn
}
): Promise<Signer> {
switch (signerType) {
case SignerType.FIREBLOCKS: {
if (options.addressDerivationFn === undefined) {
throw new Error('address derivation function required for fireblocks signer')
}
const apiSecretKey = (await fsPromises.readFile(config.fireblocks.apiSecretKeyPath, 'utf-8')).trim()
const apiKey = (await fsPromises.readFile(config.fireblocks.apiKeyPath, 'utf-8')).trim()
return new FireblocksSigner({
apiSecretKey,
apiKey,
addressDerivationFn: options.addressDerivationFn,
logger: options.logger,
...config.fireblocks
})
}
case SignerType.LOCAL: {
if (options.addressDerivationFn === undefined) {
throw new Error('address derivation function required for local signer')
}
const mnemonic = (await fsPromises.readFile(config.localsigner.mnemonicPath, 'utf-8')).trim()
return new LocalSigner({
mnemonic,
addressDerivationFn: options.addressDerivationFn,
mnemonicToSeedFn: options.mnemonicToSeedFn,
seedToKeypairFn: options.seedToKeypairFn,
logger: options.logger,
keyType: options.keyType ?? KeyType.SECP256K1,
...config.localsigner
})
}
case SignerType.LEDGER: {
if (config.networkType !== 'ton') {
throw new Error('Ledger signer is only supported for TON network')
}
const transport = await TransportNodeHid.create()
return new LedgerTonSigner({
transport: transport,
logger: options.logger,
...config.ledger
})
}
}
}