@swapkit/wallet-hardware 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/THIRD_PARTY_LICENSES.md +2344 -0
- package/dist/chunk-09e51wma.js +4 -0
- package/dist/chunk-09e51wma.js.map +167 -0
- package/dist/chunk-0arpsm5f.js +4 -0
- package/dist/chunk-0arpsm5f.js.map +10 -0
- package/dist/chunk-1amf58aq.js +4 -0
- package/dist/{chunk-vwv6z2mk.js.map → chunk-1amf58aq.js.map} +2 -2
- package/dist/chunk-3t17wpjg.js +17 -0
- package/dist/chunk-3t17wpjg.js.map +29 -0
- package/dist/chunk-5c7b7z2d.js +4 -0
- package/dist/{chunk-9gy0xve4.js.map → chunk-5c7b7z2d.js.map} +2 -2
- package/dist/chunk-5p3ttw6y.js +4 -0
- package/dist/{chunk-n05bv2n5.js.map → chunk-5p3ttw6y.js.map} +1 -1
- package/dist/chunk-dptbnkzm.js +64 -0
- package/dist/chunk-dptbnkzm.js.map +260 -0
- package/dist/chunk-ds2m83jp.js +5 -0
- package/dist/chunk-ds2m83jp.js.map +11 -0
- package/dist/chunk-eenx3cv6.js +4 -0
- package/dist/chunk-eenx3cv6.js.map +33 -0
- package/dist/chunk-gr3eswf1.js +4 -0
- package/dist/chunk-gr3eswf1.js.map +73 -0
- package/dist/{chunk-7fsaymh4.js → chunk-hg71hp4m.js} +3 -3
- package/dist/{chunk-7fsaymh4.js.map → chunk-hg71hp4m.js.map} +1 -1
- package/dist/chunk-jewm2ag3.js +5 -0
- package/dist/chunk-jewm2ag3.js.map +10 -0
- package/dist/chunk-jzrytcrf.js +4 -0
- package/dist/chunk-jzrytcrf.js.map +12 -0
- package/dist/chunk-k3thje6a.js +4 -0
- package/dist/chunk-k3thje6a.js.map +9 -0
- package/dist/chunk-nhva847d.js +5 -0
- package/dist/chunk-nhva847d.js.map +9 -0
- package/dist/chunk-tm47brht.js +4 -0
- package/dist/chunk-tm47brht.js.map +140 -0
- package/dist/chunk-xmvg4cds.js +4 -0
- package/dist/chunk-xmvg4cds.js.map +127 -0
- package/dist/chunk-xx7cwpzq.js +4 -0
- package/dist/chunk-xx7cwpzq.js.map +9 -0
- package/dist/chunk-yrxe491r.js +20 -0
- package/dist/chunk-yrxe491r.js.map +17 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/keepkey/index.cjs +2 -2
- package/dist/keepkey/index.cjs.map +2 -2
- package/dist/keepkey/index.js +2 -2
- package/dist/keepkey/index.js.map +2 -2
- package/dist/ledger/index.cjs +90 -2
- package/dist/ledger/index.cjs.map +830 -23
- package/dist/ledger/index.js +2 -2
- package/dist/ledger/index.js.map +21 -19
- package/dist/trezor/index.cjs +2 -2
- package/dist/trezor/index.cjs.map +5 -4
- package/dist/trezor/index.js +2 -2
- package/dist/trezor/index.js.map +3 -3
- package/dist/types/helpers/psbt.d.ts +9 -0
- package/dist/types/helpers/psbt.d.ts.map +1 -0
- package/dist/types/ledger/clients/bitcoin.d.ts +36 -0
- package/dist/types/ledger/clients/bitcoin.d.ts.map +1 -0
- package/dist/types/ledger/clients/cosmos.d.ts +38 -10
- package/dist/types/ledger/clients/cosmos.d.ts.map +1 -1
- package/dist/types/ledger/clients/evm.d.ts +37 -46
- package/dist/types/ledger/clients/evm.d.ts.map +1 -1
- package/dist/types/ledger/clients/near.d.ts +5 -2
- package/dist/types/ledger/clients/near.d.ts.map +1 -1
- package/dist/types/ledger/clients/sui.d.ts +8 -12
- package/dist/types/ledger/clients/sui.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/index.d.ts +34 -8
- package/dist/types/ledger/clients/thorchain/index.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/protocol.d.ts +58 -0
- package/dist/types/ledger/clients/thorchain/protocol.d.ts.map +1 -0
- package/dist/types/ledger/clients/tron.d.ts +11 -8
- package/dist/types/ledger/clients/tron.d.ts.map +1 -1
- package/dist/types/ledger/clients/utxo-legacy-adapter.d.ts +3 -2
- package/dist/types/ledger/clients/utxo-legacy-adapter.d.ts.map +1 -1
- package/dist/types/ledger/clients/utxo-legacy-outputs.d.ts +18 -0
- package/dist/types/ledger/clients/utxo-legacy-outputs.d.ts.map +1 -0
- package/dist/types/ledger/clients/utxo.d.ts +10 -13
- package/dist/types/ledger/clients/utxo.d.ts.map +1 -1
- package/dist/types/ledger/clients/xrp.d.ts +4 -1
- package/dist/types/ledger/clients/xrp.d.ts.map +1 -1
- package/dist/types/ledger/clients/zcash.d.ts +53 -0
- package/dist/types/ledger/clients/zcash.d.ts.map +1 -0
- package/dist/types/ledger/helpers/dmk.d.ts +24 -0
- package/dist/types/ledger/helpers/dmk.d.ts.map +1 -0
- package/dist/types/ledger/helpers/executeDeviceAction.d.ts +34 -0
- package/dist/types/ledger/helpers/executeDeviceAction.d.ts.map +1 -0
- package/dist/types/ledger/helpers/getLedgerAddress.d.ts +1 -1
- package/dist/types/ledger/helpers/getLedgerAddress.d.ts.map +1 -1
- package/dist/types/ledger/helpers/getLedgerClient.d.ts +10 -3
- package/dist/types/ledger/helpers/getLedgerClient.d.ts.map +1 -1
- package/dist/types/ledger/helpers/index.d.ts +2 -1
- package/dist/types/ledger/helpers/index.d.ts.map +1 -1
- package/dist/types/ledger/helpers/ledgerJsDmkBridge.d.ts +26 -0
- package/dist/types/ledger/helpers/ledgerJsDmkBridge.d.ts.map +1 -0
- package/dist/types/ledger/helpers/ledgerJsDmkTransport.d.ts +13 -0
- package/dist/types/ledger/helpers/ledgerJsDmkTransport.d.ts.map +1 -0
- package/dist/types/ledger/helpers/lowS.d.ts +6 -0
- package/dist/types/ledger/helpers/lowS.d.ts.map +1 -0
- package/dist/types/ledger/helpers/rawTx.d.ts +2 -0
- package/dist/types/ledger/helpers/rawTx.d.ts.map +1 -0
- package/dist/types/ledger/index.d.ts +19 -7
- package/dist/types/ledger/index.d.ts.map +1 -1
- package/dist/types/ledger/types.d.ts +6 -10
- package/dist/types/ledger/types.d.ts.map +1 -1
- package/dist/types/trezor/index.d.ts +2 -2
- package/dist/types/trezor/index.d.ts.map +1 -1
- package/package.json +36 -36
- package/src/helpers/psbt.ts +26 -0
- package/src/ledger/clients/bitcoin.ts +575 -0
- package/src/ledger/clients/cosmos.ts +180 -51
- package/src/ledger/clients/evm.ts +238 -195
- package/src/ledger/clients/near.ts +43 -13
- package/src/ledger/clients/sui.ts +55 -68
- package/src/ledger/clients/thorchain/index.ts +210 -86
- package/src/ledger/clients/thorchain/protocol.ts +166 -0
- package/src/ledger/clients/tron.ts +49 -37
- package/src/ledger/clients/utxo-legacy-adapter.ts +35 -32
- package/src/ledger/clients/utxo-legacy-outputs.ts +122 -0
- package/src/ledger/clients/utxo.ts +108 -206
- package/src/ledger/clients/xrp.ts +39 -23
- package/src/ledger/clients/zcash.ts +440 -0
- package/src/ledger/helpers/dmk.ts +231 -0
- package/src/ledger/helpers/executeDeviceAction.ts +201 -0
- package/src/ledger/helpers/getLedgerClient.ts +101 -72
- package/src/ledger/helpers/index.ts +6 -1
- package/src/ledger/helpers/ledgerJsDmkBridge.ts +109 -0
- package/src/ledger/helpers/ledgerJsDmkTransport.ts +88 -0
- package/src/ledger/helpers/lowS.ts +30 -0
- package/src/ledger/helpers/rawTx.ts +12 -0
- package/src/ledger/index.ts +564 -369
- package/src/ledger/types.ts +15 -10
- package/src/trezor/index.ts +117 -25
- package/dist/chunk-3yr76n9s.js +0 -5
- package/dist/chunk-3yr76n9s.js.map +0 -10
- package/dist/chunk-9gy0xve4.js +0 -4
- package/dist/chunk-bwf31zxr.js +0 -4
- package/dist/chunk-bwf31zxr.js.map +0 -10
- package/dist/chunk-egtwbe6q.js +0 -4
- package/dist/chunk-egtwbe6q.js.map +0 -10
- package/dist/chunk-n05bv2n5.js +0 -5
- package/dist/chunk-vwv6z2mk.js +0 -4
- package/dist/types/ledger/clients/thorchain/common.d.ts +0 -28
- package/dist/types/ledger/clients/thorchain/common.d.ts.map +0 -1
- package/dist/types/ledger/clients/thorchain/helpers.d.ts +0 -7
- package/dist/types/ledger/clients/thorchain/helpers.d.ts.map +0 -1
- package/dist/types/ledger/clients/thorchain/lib.d.ts +0 -22
- package/dist/types/ledger/clients/thorchain/lib.d.ts.map +0 -1
- package/dist/types/ledger/clients/thorchain/utils.d.ts +0 -2
- package/dist/types/ledger/clients/thorchain/utils.d.ts.map +0 -1
- package/dist/types/ledger/clients/utxo-psbt.d.ts +0 -18
- package/dist/types/ledger/clients/utxo-psbt.d.ts.map +0 -1
- package/dist/types/ledger/cosmosTypes.d.ts +0 -40
- package/dist/types/ledger/cosmosTypes.d.ts.map +0 -1
- package/dist/types/ledger/helpers/getLedgerTransport.d.ts +0 -3
- package/dist/types/ledger/helpers/getLedgerTransport.d.ts.map +0 -1
- package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts +0 -14
- package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts.map +0 -1
- package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts +0 -14
- package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts.map +0 -1
- package/src/ledger/clients/thorchain/common.ts +0 -93
- package/src/ledger/clients/thorchain/helpers.ts +0 -120
- package/src/ledger/clients/thorchain/lib.ts +0 -258
- package/src/ledger/clients/thorchain/utils.ts +0 -69
- package/src/ledger/clients/utxo-psbt.ts +0 -172
- package/src/ledger/cosmosTypes.ts +0 -98
- package/src/ledger/helpers/getLedgerTransport.ts +0 -102
- package/src/ledger/helpers/ledgerNetworkInfo.ts +0 -127
- package/src/ledger/interfaces/CosmosLedgerInterface.ts +0 -67
|
@@ -1,85 +1,214 @@
|
|
|
1
|
+
import type { StdSignDoc } from "@cosmjs/amino";
|
|
2
|
+
import type { SignerCosmos } from "@ledgerhq/device-signer-kit-cosmos";
|
|
3
|
+
import type LegacyCosmosApp from "@ledgerhq/hw-app-cosmos";
|
|
1
4
|
import type Transport from "@ledgerhq/hw-transport";
|
|
5
|
+
import { hex } from "@scure/base";
|
|
2
6
|
import {
|
|
3
7
|
type DerivationPathArray,
|
|
4
8
|
derivationPathToString,
|
|
5
9
|
NetworkDerivationPath,
|
|
6
10
|
SwapKitError,
|
|
7
11
|
} from "@swapkit/helpers";
|
|
8
|
-
import {
|
|
12
|
+
import type { OfflineAminoSigner } from "@swapkit/toolboxes/cosmos";
|
|
9
13
|
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
import type { LedgerDMKSession } from "../helpers/dmk";
|
|
15
|
+
import { createLedgerSessionSigner } from "../helpers/dmk";
|
|
16
|
+
import {
|
|
17
|
+
executeLedgerDeviceAction,
|
|
18
|
+
type LedgerDeviceActionStateHandler,
|
|
19
|
+
toLedgerDeviceError,
|
|
20
|
+
ZONDAX_USER_REFUSED_STATUS_WORDS,
|
|
21
|
+
} from "../helpers/executeDeviceAction";
|
|
22
|
+
import { toLowSSignature } from "../helpers/lowS";
|
|
23
|
+
|
|
24
|
+
interface CosmosLedgerParams {
|
|
25
|
+
derivationPath?: DerivationPathArray | string;
|
|
26
|
+
dmkSession?: LedgerDMKSession;
|
|
27
|
+
onDeviceActionState?: LedgerDeviceActionStateHandler;
|
|
28
|
+
transport?: Transport;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
interface CosmosAddressAndPublicKey {
|
|
32
|
+
address: string;
|
|
33
|
+
publicKey: string;
|
|
34
|
+
}
|
|
12
35
|
|
|
13
|
-
|
|
36
|
+
function normalizeCosmosPath(path: DerivationPathArray | string) {
|
|
37
|
+
const normalized = (typeof path === "string" ? path : derivationPathToString(path))
|
|
38
|
+
.replace(/^m\//, "")
|
|
39
|
+
.replace(/^\/+/, "");
|
|
14
40
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
41
|
+
if (!/^44'\/118'\/\d+'\/(0|1)\/\d+$/.test(normalized)) {
|
|
42
|
+
throw new SwapKitError("wallet_ledger_invalid_params", {
|
|
43
|
+
path: normalized,
|
|
44
|
+
reason: "Expected a five-level Cosmos derivation path with coin type 118",
|
|
45
|
+
});
|
|
19
46
|
}
|
|
20
47
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const { publicKey, address } = await this.getAddressAndPubKey();
|
|
48
|
+
return normalized;
|
|
49
|
+
}
|
|
24
50
|
|
|
25
|
-
|
|
51
|
+
// cosmjs is CJS and `require`s ESM-only `@scure/base`; loading it lazily keeps Bun from rejecting that
|
|
52
|
+
// require when the module graph also contains the ESM-only `@swapkit/*` packages.
|
|
53
|
+
async function normalizeCosmosSignature(signature: Uint8Array) {
|
|
54
|
+
const { Secp256k1Signature } = await import("@cosmjs/crypto");
|
|
55
|
+
try {
|
|
56
|
+
return toLowSSignature(
|
|
57
|
+
signature.length === 64
|
|
58
|
+
? Secp256k1Signature.fromFixedLength(signature).toFixedLength()
|
|
59
|
+
: Secp256k1Signature.fromDer(signature).toFixedLength(),
|
|
60
|
+
);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
throw new SwapKitError("wallet_ledger_invalid_response", error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
26
65
|
|
|
27
|
-
|
|
28
|
-
|
|
66
|
+
export class CosmosLedger {
|
|
67
|
+
readonly chain = "cosmos";
|
|
68
|
+
readonly derivationPath: string;
|
|
69
|
+
private readonly onDeviceActionState?: LedgerDeviceActionStateHandler;
|
|
70
|
+
private readonly transport?: Transport;
|
|
71
|
+
private legacyAppPromise?: Promise<LegacyCosmosApp>;
|
|
72
|
+
private pubKey: string | null = null;
|
|
73
|
+
private readonly getSessionSigner: () => Promise<SignerCosmos>;
|
|
74
|
+
|
|
75
|
+
constructor({
|
|
76
|
+
derivationPath = NetworkDerivationPath.GAIA,
|
|
77
|
+
dmkSession,
|
|
78
|
+
onDeviceActionState,
|
|
79
|
+
transport,
|
|
80
|
+
}: CosmosLedgerParams = {}) {
|
|
81
|
+
this.derivationPath = normalizeCosmosPath(derivationPath);
|
|
82
|
+
this.getSessionSigner = createLedgerSessionSigner({
|
|
83
|
+
build: async (session) => {
|
|
84
|
+
const { SignerCosmosBuilder } = await import("@ledgerhq/device-signer-kit-cosmos");
|
|
85
|
+
return new SignerCosmosBuilder(session).build();
|
|
86
|
+
},
|
|
87
|
+
dmkSession,
|
|
88
|
+
});
|
|
89
|
+
this.onDeviceActionState = onDeviceActionState;
|
|
90
|
+
this.transport = transport;
|
|
91
|
+
}
|
|
29
92
|
|
|
30
|
-
|
|
31
|
-
|
|
93
|
+
private getSigner() {
|
|
94
|
+
if (this.transport) {
|
|
95
|
+
throw new SwapKitError("wallet_ledger_invalid_params", {
|
|
96
|
+
reason: "A Device Signer Kit operation is unavailable when a legacy transport is supplied",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
32
99
|
|
|
33
|
-
|
|
100
|
+
return this.getSessionSigner();
|
|
101
|
+
}
|
|
34
102
|
|
|
35
|
-
|
|
36
|
-
|
|
103
|
+
private getLegacyApp() {
|
|
104
|
+
if (!this.transport) {
|
|
105
|
+
throw new SwapKitError("wallet_ledger_invalid_params", { reason: "Legacy Cosmos transport is unavailable" });
|
|
106
|
+
}
|
|
37
107
|
|
|
38
|
-
|
|
39
|
-
|
|
108
|
+
this.legacyAppPromise ??= import("@ledgerhq/hw-app-cosmos").then(
|
|
109
|
+
({ default: CosmosApp }) => new CosmosApp(this.transport as Transport),
|
|
110
|
+
);
|
|
111
|
+
return this.legacyAppPromise;
|
|
112
|
+
}
|
|
40
113
|
|
|
41
|
-
|
|
114
|
+
// An injected LedgerJS transport rejects with hw-transport and hw-app-cosmos errors; map them as the signer kit
|
|
115
|
+
// path below does.
|
|
116
|
+
private async runLegacyOperation<Output>(operation: (app: LegacyCosmosApp) => Promise<Output>) {
|
|
117
|
+
const app = await this.getLegacyApp();
|
|
118
|
+
try {
|
|
119
|
+
return await operation(app);
|
|
120
|
+
} catch (error) {
|
|
121
|
+
throw toLedgerDeviceError(error, { userRefusedStatusWords: ZONDAX_USER_REFUSED_STATUS_WORDS });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
42
124
|
|
|
43
|
-
|
|
125
|
+
private async signBytes(message: Uint8Array) {
|
|
126
|
+
if (this.transport) {
|
|
127
|
+
const response = await this.runLegacyOperation((app) =>
|
|
128
|
+
app.sign(this.derivationPath, new TextDecoder().decode(message)),
|
|
129
|
+
);
|
|
130
|
+
if (response.return_code !== 0x9000 || !response.signature) {
|
|
131
|
+
throw new SwapKitError("wallet_ledger_invalid_response", { returnCode: response.return_code });
|
|
132
|
+
}
|
|
133
|
+
return normalizeCosmosSignature(response.signature);
|
|
134
|
+
}
|
|
44
135
|
|
|
45
|
-
this.
|
|
136
|
+
const signer = await this.getSigner();
|
|
137
|
+
const signature = await executeLedgerDeviceAction({
|
|
138
|
+
action: () => signer.signTransaction(this.derivationPath, this.chain, message),
|
|
139
|
+
onDeviceActionState: this.onDeviceActionState,
|
|
140
|
+
userRefusedStatusWords: ZONDAX_USER_REFUSED_STATUS_WORDS,
|
|
141
|
+
});
|
|
142
|
+
return normalizeCosmosSignature(signature);
|
|
143
|
+
}
|
|
46
144
|
|
|
47
|
-
|
|
48
|
-
|
|
145
|
+
async connect() {
|
|
146
|
+
if (this.transport) await this.getLegacyApp();
|
|
147
|
+
else await this.getSigner();
|
|
49
148
|
|
|
50
|
-
|
|
51
|
-
|
|
149
|
+
const { address, publicKey } = await this.getAddressAndPubKey();
|
|
150
|
+
this.pubKey = Buffer.from(publicKey, "hex").toString("base64");
|
|
151
|
+
return address;
|
|
152
|
+
}
|
|
52
153
|
|
|
53
|
-
|
|
54
|
-
const accountIndex = accounts.findIndex((account) => account.address === signerAddress);
|
|
154
|
+
async disconnect() {}
|
|
55
155
|
|
|
56
|
-
|
|
57
|
-
|
|
156
|
+
async getAddressAndPubKey(): Promise<CosmosAddressAndPublicKey> {
|
|
157
|
+
if (this.transport) {
|
|
158
|
+
return this.runLegacyOperation((app) => app.getAddress(this.derivationPath, this.chain));
|
|
58
159
|
}
|
|
59
160
|
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
161
|
+
const signer = await this.getSigner();
|
|
162
|
+
const { address, publicKey } = await executeLedgerDeviceAction({
|
|
163
|
+
action: () => signer.getAddress(this.derivationPath, this.chain),
|
|
164
|
+
onDeviceActionState: this.onDeviceActionState,
|
|
165
|
+
userRefusedStatusWords: ZONDAX_USER_REFUSED_STATUS_WORDS,
|
|
166
|
+
});
|
|
167
|
+
return { address, publicKey: hex.encode(publicKey) };
|
|
168
|
+
}
|
|
66
169
|
|
|
67
|
-
|
|
68
|
-
|
|
170
|
+
async showAddressAndPubKey(): Promise<CosmosAddressAndPublicKey> {
|
|
171
|
+
if (this.transport) {
|
|
172
|
+
return this.runLegacyOperation((app) => app.getAddress(this.derivationPath, this.chain, true));
|
|
173
|
+
}
|
|
69
174
|
|
|
70
|
-
this.
|
|
175
|
+
const signer = await this.getSigner();
|
|
176
|
+
const { address, publicKey } = await executeLedgerDeviceAction({
|
|
177
|
+
action: () => signer.getAddress(this.derivationPath, this.chain, { checkOnDevice: true }),
|
|
178
|
+
onDeviceActionState: this.onDeviceActionState,
|
|
179
|
+
userRefusedStatusWords: ZONDAX_USER_REFUSED_STATUS_WORDS,
|
|
180
|
+
});
|
|
181
|
+
return { address, publicKey: hex.encode(publicKey) };
|
|
182
|
+
}
|
|
71
183
|
|
|
72
|
-
|
|
184
|
+
async signTransaction(rawTx: string | Uint8Array, sequence = "0") {
|
|
185
|
+
const signature = await this.signBytes(typeof rawTx === "string" ? new TextEncoder().encode(rawTx) : rawTx);
|
|
186
|
+
if (!this.pubKey) {
|
|
187
|
+
const { publicKey } = await this.getAddressAndPubKey();
|
|
188
|
+
this.pubKey = Buffer.from(publicKey, "hex").toString("base64");
|
|
189
|
+
}
|
|
73
190
|
|
|
74
|
-
return {
|
|
75
|
-
}
|
|
191
|
+
return [{ pub_key: { type: "tendermint/PubKeySecp256k1", value: this.pubKey }, sequence, signature }];
|
|
192
|
+
}
|
|
76
193
|
|
|
77
|
-
|
|
78
|
-
|
|
194
|
+
// Typed against the toolbox signer contract so CosmosLedger satisfies `createSigningStargateClient`.
|
|
195
|
+
async signAmino(
|
|
196
|
+
signerAddress: string,
|
|
197
|
+
signDoc: Parameters<OfflineAminoSigner["signAmino"]>[1],
|
|
198
|
+
): ReturnType<OfflineAminoSigner["signAmino"]> {
|
|
199
|
+
const accounts = await this.getAccounts();
|
|
200
|
+
const account = accounts.find(({ address }) => address === signerAddress);
|
|
201
|
+
if (!account) {
|
|
202
|
+
throw new SwapKitError("wallet_ledger_address_not_found", { address: signerAddress });
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const { encodeSecp256k1Signature, serializeSignDoc } = await import("@cosmjs/amino");
|
|
206
|
+
const signature = await this.signBytes(serializeSignDoc(signDoc as StdSignDoc));
|
|
207
|
+
return { signature: encodeSecp256k1Signature(account.pubkey, signature), signed: signDoc };
|
|
208
|
+
}
|
|
79
209
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
};
|
|
210
|
+
async getAccounts() {
|
|
211
|
+
const { address, publicKey } = await this.getAddressAndPubKey();
|
|
212
|
+
return [{ address, algo: "secp256k1" as const, pubkey: hex.decode(publicKey) }];
|
|
213
|
+
}
|
|
85
214
|
}
|