@swapkit/wallet-hardware 6.2.0 → 6.3.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 +4 -4
- package/dist/{chunk-rydhx4se.js → chunk-0k1b2ddn.js} +3 -3
- package/dist/{chunk-rydhx4se.js.map → chunk-0k1b2ddn.js.map} +2 -2
- package/dist/{chunk-j3n6fbqh.js → chunk-2tzsz8f3.js} +4 -4
- package/dist/{chunk-j3n6fbqh.js.map → chunk-2tzsz8f3.js.map} +1 -1
- package/dist/{chunk-2jddegc1.js → chunk-410fpx61.js} +4 -4
- package/dist/{chunk-2jddegc1.js.map → chunk-410fpx61.js.map} +1 -1
- package/dist/chunk-8mkdjmw2.js +4 -0
- package/dist/chunk-8mkdjmw2.js.map +10 -0
- package/dist/{chunk-7kwtpk70.js → chunk-96p7njae.js} +3 -3
- package/dist/{chunk-7kwtpk70.js.map → chunk-96p7njae.js.map} +2 -2
- package/dist/{chunk-g6rrzxcx.js → chunk-97nsp4z6.js} +3 -3
- package/dist/{chunk-g6rrzxcx.js.map → chunk-97nsp4z6.js.map} +1 -1
- package/dist/{chunk-kaw35ae2.js → chunk-9a9gn4pb.js} +3 -3
- package/dist/{chunk-a47dwwv6.js.map → chunk-9a9gn4pb.js.map} +1 -1
- package/dist/chunk-a39rm9nv.js +4 -0
- package/dist/{chunk-42xrtarj.js.map → chunk-a39rm9nv.js.map} +5 -5
- package/dist/chunk-c8mwf9cn.js +4 -0
- package/dist/{chunk-kaw35ae2.js.map → chunk-c8mwf9cn.js.map} +1 -1
- package/dist/{chunk-b7htg03t.js → chunk-dhhmywmb.js} +4 -4
- package/dist/{chunk-b7htg03t.js.map → chunk-dhhmywmb.js.map} +1 -1
- package/dist/{chunk-x28a37pz.js → chunk-dsa641rq.js} +3 -3
- package/dist/{chunk-x28a37pz.js.map → chunk-dsa641rq.js.map} +2 -2
- package/dist/{chunk-7rbvcts9.js → chunk-grj9nvte.js} +3 -3
- package/dist/{chunk-7rbvcts9.js.map → chunk-grj9nvte.js.map} +1 -1
- package/dist/{chunk-tecse0bj.js → chunk-napm4102.js} +3 -3
- package/dist/{chunk-tecse0bj.js.map → chunk-napm4102.js.map} +1 -1
- package/dist/{chunk-a47dwwv6.js → chunk-nb08g045.js} +3 -3
- package/dist/{chunk-sp3dq5hr.js.map → chunk-nb08g045.js.map} +1 -1
- package/dist/chunk-npe2r2ge.js +4 -0
- package/dist/{chunk-tm5gk51g.js.map → chunk-npe2r2ge.js.map} +1 -1
- package/dist/chunk-p9mwkgye.js +4 -0
- package/dist/{chunk-s2akss77.js.map → chunk-p9mwkgye.js.map} +14 -12
- package/dist/{chunk-b093ajcq.js → chunk-qjp8j8e5.js} +3 -3
- package/dist/{chunk-b093ajcq.js.map → chunk-qjp8j8e5.js.map} +1 -1
- package/dist/{chunk-71kfnwdp.js → chunk-r1fk1sx9.js} +3 -3
- package/dist/{chunk-71kfnwdp.js.map → chunk-r1fk1sx9.js.map} +1 -1
- package/dist/{chunk-5xg0xc0g.js → chunk-ta7bqmy3.js} +3 -3
- package/dist/{chunk-5xg0xc0g.js.map → chunk-ta7bqmy3.js.map} +1 -1
- package/dist/{chunk-545s1tsc.js → chunk-tgvgr630.js} +3 -3
- package/dist/{chunk-545s1tsc.js.map → chunk-tgvgr630.js.map} +2 -2
- package/dist/{chunk-035dayv6.js → chunk-v8x9ptxs.js} +3 -3
- package/dist/{chunk-035dayv6.js.map → chunk-v8x9ptxs.js.map} +1 -1
- package/dist/{chunk-mzan0m09.js → chunk-wm89desc.js} +20 -20
- package/dist/{chunk-mzan0m09.js.map → chunk-wm89desc.js.map} +12 -10
- package/dist/{chunk-a6vcbcyd.js → chunk-wtyhjt5e.js} +3 -3
- package/dist/{chunk-a6vcbcyd.js.map → chunk-wtyhjt5e.js.map} +1 -1
- package/dist/{chunk-s5a5v0m1.js → chunk-xskdbz15.js} +3 -3
- package/dist/{chunk-s5a5v0m1.js.map → chunk-xskdbz15.js.map} +2 -2
- package/dist/{chunk-sbebfr50.js → chunk-ytjqb1sd.js} +3 -3
- package/dist/{chunk-sbebfr50.js.map → chunk-ytjqb1sd.js.map} +1 -1
- package/dist/{chunk-ys51wj1c.js → chunk-zbesf7sy.js} +3 -3
- package/dist/{chunk-ys51wj1c.js.map → chunk-zbesf7sy.js.map} +1 -1
- package/dist/keepkey/index.js +2 -2
- package/dist/keepkey/index.js.map +1 -1
- package/dist/ledger/index.cjs +28 -28
- package/dist/ledger/index.cjs.map +28 -24
- package/dist/ledger/index.js +2 -2
- package/dist/ledger/index.js.map +4 -4
- 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/ledger/clients/zcash.d.ts.map +1 -1
- package/dist/types/trezor/hypercoreSigner.d.ts +22 -0
- package/dist/types/trezor/hypercoreSigner.d.ts.map +1 -0
- package/dist/types/trezor/index.d.ts +2 -2
- package/dist/types/trezor/index.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/ledger/clients/zcash.ts +16 -6
- package/src/ledger/index.ts +2 -2
- package/src/trezor/hypercoreSigner.ts +96 -0
- package/src/trezor/index.ts +72 -16
- package/dist/chunk-42xrtarj.js +0 -4
- package/dist/chunk-s2akss77.js +0 -4
- package/dist/chunk-sp3dq5hr.js +0 -4
- package/dist/chunk-tm5gk51g.js +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/trezor/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EACL,KAAK,mBAAmB,EAQxB,KAAK,SAAS,EAGf,MAAM,kBAAkB,CAAC;AAY1B,OAAO,EAA0C,KAAK,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAQlH,KAAK,oBAAoB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA6HjD,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,UA6B9E;AAoJD,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,2BAS1E;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/trezor/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,EACL,KAAK,mBAAmB,EAQxB,KAAK,SAAS,EAGf,MAAM,kBAAkB,CAAC;AAY1B,OAAO,EAA0C,KAAK,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAQlH,KAAK,oBAAoB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA6HjD,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,UA6B9E;AAoJD,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,2BAS1E;AA2nCD,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,KAAK,EACZ,cAAc,CAAC,EAAE,mBAAmB,EACpC,EAAE,YAAY,EAAE,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/C,OAAO,CAAC,6BAA6B,GAAG,SAAS,CAAC,CA0CpD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;CAiIvB,CAAC;AAEH,eAAO,MAAM,uBAAuB,obAAyC,CAAC"}
|
package/package.json
CHANGED
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
"@cosmjs/amino": "~0.37.0",
|
|
6
6
|
"@cosmjs/crypto": "0.37.0",
|
|
7
7
|
"@keepkey/keepkey-sdk": "~0.2.62",
|
|
8
|
-
"@ledgerhq/context-module": "~2.
|
|
9
|
-
"@ledgerhq/device-management-kit": "~1.
|
|
8
|
+
"@ledgerhq/context-module": "~2.8.0",
|
|
9
|
+
"@ledgerhq/device-management-kit": "~1.11.0",
|
|
10
10
|
"@ledgerhq/device-signer-kit-bitcoin": "~1.3.3",
|
|
11
11
|
"@ledgerhq/device-signer-kit-cosmos": "~1.0.1",
|
|
12
|
-
"@ledgerhq/device-signer-kit-ethereum": "~1.18.
|
|
13
|
-
"@ledgerhq/device-signer-kit-zcash": "~0.
|
|
12
|
+
"@ledgerhq/device-signer-kit-ethereum": "~1.18.2",
|
|
13
|
+
"@ledgerhq/device-signer-kit-zcash": "~0.9.0",
|
|
14
14
|
"@ledgerhq/device-transport-kit-web-hid": "~1.2.4",
|
|
15
15
|
"@ledgerhq/hw-app-btc": "~10.22.1",
|
|
16
16
|
"@ledgerhq/hw-app-cosmos": "~6.36.7",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"@scure/bip32": "2.2.0",
|
|
28
28
|
"@solana/web3.js": "~1.98.4",
|
|
29
29
|
"@stellar/stellar-sdk": "~16.1.0",
|
|
30
|
-
"@swapkit/helpers": "^6.
|
|
31
|
-
"@swapkit/toolboxes": "^6.
|
|
32
|
-
"@swapkit/utxo-signer": "^3.
|
|
30
|
+
"@swapkit/helpers": "^6.4.2",
|
|
31
|
+
"@swapkit/toolboxes": "^6.6.0",
|
|
32
|
+
"@swapkit/utxo-signer": "^3.3.0",
|
|
33
33
|
"@swapkit/wallet-core": "^5.1.0",
|
|
34
34
|
"@ton-community/ton-ledger": "~7.3.0",
|
|
35
35
|
"@ton/core": "~0.63.1",
|
|
@@ -48,12 +48,12 @@
|
|
|
48
48
|
"@cosmjs/amino": "0.37.0",
|
|
49
49
|
"@cosmjs/crypto": "0.37.0",
|
|
50
50
|
"@keepkey/keepkey-sdk": "0.2.62",
|
|
51
|
-
"@ledgerhq/context-module": "2.
|
|
52
|
-
"@ledgerhq/device-management-kit": "1.
|
|
51
|
+
"@ledgerhq/context-module": "2.8.0",
|
|
52
|
+
"@ledgerhq/device-management-kit": "1.11.0",
|
|
53
53
|
"@ledgerhq/device-signer-kit-bitcoin": "1.3.3",
|
|
54
54
|
"@ledgerhq/device-signer-kit-cosmos": "1.0.1",
|
|
55
|
-
"@ledgerhq/device-signer-kit-ethereum": "1.18.
|
|
56
|
-
"@ledgerhq/device-signer-kit-zcash": "0.
|
|
55
|
+
"@ledgerhq/device-signer-kit-ethereum": "1.18.2",
|
|
56
|
+
"@ledgerhq/device-signer-kit-zcash": "0.9.0",
|
|
57
57
|
"@ledgerhq/device-transport-kit-web-hid": "1.2.4",
|
|
58
58
|
"@ledgerhq/hw-app-btc": "10.22.1",
|
|
59
59
|
"@ledgerhq/hw-app-cosmos": "6.36.7",
|
|
@@ -125,5 +125,5 @@
|
|
|
125
125
|
"type-check:go": "tsgo"
|
|
126
126
|
},
|
|
127
127
|
"type": "module",
|
|
128
|
-
"version": "6.
|
|
128
|
+
"version": "6.3.0"
|
|
129
129
|
}
|
|
@@ -22,7 +22,7 @@ import { executeLedgerDeviceAction, type LedgerDeviceActionStateHandler } from "
|
|
|
22
22
|
import { runLedgerJsOperation } from "../helpers/ledgerJsDmkBridge";
|
|
23
23
|
import { ZcashLedger as LegacyZcashLedger } from "./utxo";
|
|
24
24
|
|
|
25
|
-
// @swapkit/utxo-signer
|
|
25
|
+
// @swapkit/utxo-signer exports no NU6.2 activation height.
|
|
26
26
|
const NU6_2_ACTIVATION_HEIGHT = 3_364_600;
|
|
27
27
|
|
|
28
28
|
interface ZcashLedgerParams {
|
|
@@ -74,6 +74,11 @@ function parseZcashPath(path: DerivationPathArray | string): ParsedZcashPath {
|
|
|
74
74
|
return { account, accountPath, fullPath: `${accountPath}/${match[2] ?? 0}/${match[3] ?? 0}` };
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
function deviceChangePath(path: DerivationPathArray | string) {
|
|
78
|
+
const { fullPath } = parseZcashPath(path);
|
|
79
|
+
return fullPath.split("/")[3] === "1" ? fullPath : undefined;
|
|
80
|
+
}
|
|
81
|
+
|
|
77
82
|
function uint32LE(value: number) {
|
|
78
83
|
const bytes = new Uint8Array(4);
|
|
79
84
|
new DataView(bytes.buffer).setUint32(0, value >>> 0, true);
|
|
@@ -161,8 +166,7 @@ function parsePreviousTransaction({ bytes, version }: { bytes: Uint8Array; versi
|
|
|
161
166
|
return { ...transparentFields, extraData: reader.rest(), locktime, nExpiryHeight };
|
|
162
167
|
}
|
|
163
168
|
|
|
164
|
-
// Either byte order binds a txid equally:
|
|
165
|
-
// ZcashTransaction.fromBytes keeps them in wire order.
|
|
169
|
+
// Either byte order binds a txid equally: utxo-signer below 3.2 parsed raw transactions with wire-order txids.
|
|
166
170
|
function matchesTxid({ hash, txid }: { hash: string; txid: Uint8Array }) {
|
|
167
171
|
const normalized = hash.toLowerCase();
|
|
168
172
|
return normalized === hex.encode(txid) || normalized === hex.encode(txid.slice().reverse());
|
|
@@ -178,17 +182,21 @@ async function serializeOutputs(tx: ZcashTransaction) {
|
|
|
178
182
|
}
|
|
179
183
|
|
|
180
184
|
async function activationHeight(consensusBranchId: number) {
|
|
181
|
-
const { ZCASH_IRONWOOD_ACTIVATION_HEIGHT, ZcashConsensusBranchId } = await import(
|
|
185
|
+
const { ZCASH_IRONWOOD_ACTIVATION_HEIGHT, ZCASH_NU7_ACTIVATION_HEIGHT, ZcashConsensusBranchId } = await import(
|
|
186
|
+
"@swapkit/utxo-signer"
|
|
187
|
+
);
|
|
182
188
|
|
|
183
189
|
switch (consensusBranchId) {
|
|
184
190
|
case ZcashConsensusBranchId.NU6_2:
|
|
185
191
|
return NU6_2_ACTIVATION_HEIGHT;
|
|
186
192
|
case ZcashConsensusBranchId.IRONWOOD:
|
|
187
193
|
return ZCASH_IRONWOOD_ACTIVATION_HEIGHT;
|
|
194
|
+
case ZcashConsensusBranchId.NU7:
|
|
195
|
+
return ZCASH_NU7_ACTIVATION_HEIGHT;
|
|
188
196
|
default:
|
|
189
197
|
throw new SwapKitError("wallet_ledger_invalid_params", {
|
|
190
198
|
consensusBranchId,
|
|
191
|
-
reason: "Ledger Zcash DSK signing supports NU6.2 and
|
|
199
|
+
reason: "Ledger Zcash DSK signing supports NU6.2, Ironwood and NU7 target branches",
|
|
192
200
|
});
|
|
193
201
|
}
|
|
194
202
|
}
|
|
@@ -394,6 +402,8 @@ export function ZcashLedger({
|
|
|
394
402
|
utxo.index,
|
|
395
403
|
null,
|
|
396
404
|
tx.getInput(inputIndex).sequence ?? 0xffffffff,
|
|
405
|
+
// Frames a v4 previous transaction with this branch id; unset, the kit assumes the latest upgrade
|
|
406
|
+
blockHeight,
|
|
397
407
|
],
|
|
398
408
|
),
|
|
399
409
|
);
|
|
@@ -401,7 +411,7 @@ export function ZcashLedger({
|
|
|
401
411
|
additionals: ["zcash", "sapling"],
|
|
402
412
|
associatedKeysets: paths,
|
|
403
413
|
blockHeight,
|
|
404
|
-
changePath:
|
|
414
|
+
changePath: deviceChangePath(changePath ?? configuredPath.fullPath),
|
|
405
415
|
expiryHeight: uint32LE(tx.expiryHeight),
|
|
406
416
|
inputs,
|
|
407
417
|
lockTime: tx.lockTime,
|
package/src/ledger/index.ts
CHANGED
|
@@ -217,8 +217,8 @@ function getLedgerAccountXpub({ chain, path, signer, xpubVersion }: LedgerAccoun
|
|
|
217
217
|
.exhaustive();
|
|
218
218
|
}
|
|
219
219
|
|
|
220
|
-
//
|
|
221
|
-
//
|
|
220
|
+
// Txids are looked up in display order, the order the UTXO API names transactions by. utxo-signer below 3.2
|
|
221
|
+
// parsed raw transactions with wire-order txids, so the reversed order is tried as a fallback. A txid and its
|
|
222
222
|
// byte reversal cannot both name real transactions, so the fallback cannot fetch an unrelated one.
|
|
223
223
|
function resolveZcashInputUtxos(transaction: ZcashTransaction): Promise<UTXOType[]> {
|
|
224
224
|
const zcashApi = getUtxoApi(Chain.Zcash);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Chain, type DerivationPathArray, derivationPathToString, SwapKitError } from "@swapkit/helpers";
|
|
2
|
+
import type { TypedDataDomain, TypedDataField } from "ethers";
|
|
3
|
+
|
|
4
|
+
type TypedDataTypes = Record<string, TypedDataField[]>;
|
|
5
|
+
type TypedDataValue = Record<string, unknown>;
|
|
6
|
+
|
|
7
|
+
function notSupported(reason: string) {
|
|
8
|
+
return new SwapKitError({ errorKey: "wallet_trezor_method_not_supported", info: { chain: Chain.Hype, reason } });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export async function toTrezorHyperCoreTypedData(
|
|
12
|
+
domain: TypedDataDomain,
|
|
13
|
+
types: TypedDataTypes,
|
|
14
|
+
message: TypedDataValue,
|
|
15
|
+
) {
|
|
16
|
+
const { TypedDataEncoder } = await import("ethers");
|
|
17
|
+
const { EIP712Domain: _, ...structTypes } = types;
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
// ethers checks the domain, the type graph and every value; the device still gets the caller's own data
|
|
21
|
+
const payload: { primaryType: string; types: TypedDataTypes } = TypedDataEncoder.getPayload(
|
|
22
|
+
domain,
|
|
23
|
+
structTypes,
|
|
24
|
+
message,
|
|
25
|
+
);
|
|
26
|
+
return {
|
|
27
|
+
domain,
|
|
28
|
+
message,
|
|
29
|
+
primaryType: payload.primaryType,
|
|
30
|
+
types: { EIP712Domain: payload.types.EIP712Domain, ...structTypes },
|
|
31
|
+
};
|
|
32
|
+
} catch (error) {
|
|
33
|
+
throw notSupported(`Invalid HyperCore typed data: ${(error as Error).message}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function getHyperCoreSigner({
|
|
38
|
+
address: knownAddress,
|
|
39
|
+
derivationPath,
|
|
40
|
+
}: {
|
|
41
|
+
address?: string;
|
|
42
|
+
derivationPath: DerivationPathArray;
|
|
43
|
+
}) {
|
|
44
|
+
const path = derivationPathToString(derivationPath);
|
|
45
|
+
let address = knownAddress ?? "";
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
getAddress: async () => {
|
|
49
|
+
if (address) return address;
|
|
50
|
+
|
|
51
|
+
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
52
|
+
const result = await TrezorConnect.ethereumGetAddress({ path, showOnTrezor: true });
|
|
53
|
+
|
|
54
|
+
if (!result.success) {
|
|
55
|
+
throw new SwapKitError({
|
|
56
|
+
errorKey: "wallet_trezor_failed_to_get_address",
|
|
57
|
+
info: { chain: Chain.Hype, derivationPath, error: result.payload.error },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
address = result.payload.address;
|
|
62
|
+
return address;
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
// HyperCore has no transactions: every action goes through signTypedData
|
|
66
|
+
signTransaction: () => Promise.reject(notSupported("HyperCore actions are signed with signTypedData")),
|
|
67
|
+
|
|
68
|
+
signTypedData: async (domain: TypedDataDomain, types: TypedDataTypes, message: TypedDataValue) => {
|
|
69
|
+
const data = await toTrezorHyperCoreTypedData(domain, types, message);
|
|
70
|
+
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
71
|
+
|
|
72
|
+
const result = await TrezorConnect.ethereumSignTypedData({
|
|
73
|
+
data: data as Parameters<typeof TrezorConnect.ethereumSignTypedData>[0]["data"],
|
|
74
|
+
metamask_v4_compat: true,
|
|
75
|
+
path,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
if (!result.success) {
|
|
79
|
+
throw new SwapKitError({
|
|
80
|
+
errorKey: "wallet_trezor_failed_to_sign_transaction",
|
|
81
|
+
info: { chain: Chain.Hype, error: result.payload.error },
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Hyperliquid takes the account from the signature, so a stale known address would act from another account
|
|
86
|
+
if (result.payload.address.toLowerCase() !== address.toLowerCase()) {
|
|
87
|
+
throw new SwapKitError({
|
|
88
|
+
errorKey: "wallet_trezor_failed_to_sign_transaction",
|
|
89
|
+
info: { chain: Chain.Hype, error: "Trezor signed with a different address", signer: result.payload.address },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return result.payload.signature.startsWith("0x") ? result.payload.signature : `0x${result.payload.signature}`;
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
package/src/trezor/index.ts
CHANGED
|
@@ -409,14 +409,25 @@ async function decodeOutputAddress(script: Uint8Array): Promise<string | undefin
|
|
|
409
409
|
return undefined;
|
|
410
410
|
}
|
|
411
411
|
|
|
412
|
+
// The signed PCZT takes the v5 header Trezor signed, so the extracted transaction matches the signatures
|
|
412
413
|
async function extractSignaturesFromSignedTx(signedTxHex: string, pczt: PCZT): Promise<PCZT> {
|
|
413
|
-
const { ZcashTransaction: ZcashTx, Script } = await import("@swapkit/utxo-signer");
|
|
414
|
+
const { ZcashTransaction: ZcashTx, Script, createPCZT } = await import("@swapkit/utxo-signer");
|
|
414
415
|
const signedTx = ZcashTx.fromHex(signedTxHex, { allowUnknownOutputs: true });
|
|
415
|
-
const signedPczt =
|
|
416
|
+
const signedPczt = createPCZT({
|
|
417
|
+
coinType: pczt.getGlobal().coinType,
|
|
418
|
+
consensusBranchId: signedTx.consensusBranchId,
|
|
419
|
+
expiryHeight: signedTx.expiryHeight,
|
|
420
|
+
lockTime: signedTx.lockTime,
|
|
421
|
+
version: signedTx.version,
|
|
422
|
+
versionGroupId: signedTx.versionGroupId,
|
|
423
|
+
});
|
|
424
|
+
for (let i = 0; i < pczt.inputsLength; i++) signedPczt.addInput(pczt.getInput(i));
|
|
425
|
+
for (let i = 0; i < pczt.outputsLength; i++) signedPczt.addOutput(pczt.getOutput(i));
|
|
416
426
|
|
|
417
427
|
for (let i = 0; i < signedTx.inputsLength; i++) {
|
|
418
428
|
const signedInput = signedTx.getInput(i);
|
|
419
|
-
|
|
429
|
+
// utxo-signer 3.2 parses the signature script into scriptSig; 3.1 put it in script.
|
|
430
|
+
const script = signedInput.scriptSig ?? signedInput.script;
|
|
420
431
|
if (script && script.length > 0) {
|
|
421
432
|
const scriptParts = Script.decode(script);
|
|
422
433
|
if (scriptParts.length >= 2) {
|
|
@@ -427,6 +438,33 @@ async function extractSignaturesFromSignedTx(signedTxHex: string, pczt: PCZT): P
|
|
|
427
438
|
return signedPczt;
|
|
428
439
|
}
|
|
429
440
|
|
|
441
|
+
// A transaction parsed from raw bytes carries no input amounts, and v5 signing commits to them
|
|
442
|
+
async function resolveZcashInputAmounts(tx: ZcashTransaction): Promise<UTXOType[]> {
|
|
443
|
+
const { hex: hexEncode } = await import("@scure/base");
|
|
444
|
+
const zcashApi = getUtxoApi(Chain.Zcash);
|
|
445
|
+
const previousTransactions = new Map<string, ReturnType<typeof zcashApi.getTransactionDetails>>();
|
|
446
|
+
|
|
447
|
+
return Promise.all(
|
|
448
|
+
Array.from({ length: tx.inputsLength }, async (_, inputIndex) => {
|
|
449
|
+
const input = tx.getInput(inputIndex);
|
|
450
|
+
const hash = hexEncode.encode(input.txid);
|
|
451
|
+
if (input.value > 0n) return { hash, index: input.index, value: Number(input.value) };
|
|
452
|
+
|
|
453
|
+
const previous = previousTransactions.get(hash) ?? zcashApi.getTransactionDetails(hash);
|
|
454
|
+
previousTransactions.set(hash, previous);
|
|
455
|
+
const output = (await previous).outputs.find(({ index }) => index === input.index);
|
|
456
|
+
if (!output || !(output.value > 0)) {
|
|
457
|
+
throw new SwapKitError({
|
|
458
|
+
errorKey: "wallet_missing_params",
|
|
459
|
+
info: { chain: Chain.Zcash, inputIndex, reason: "Unable to resolve the Zcash input amount", txid: hash },
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
return { hash, index: input.index, value: output.value };
|
|
464
|
+
}),
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
|
|
430
468
|
function buildZcashTxInputsForTrezor(
|
|
431
469
|
tx: ZcashTransaction,
|
|
432
470
|
utxoInputs: UTXOType[],
|
|
@@ -492,11 +530,11 @@ type ZcashTrezorSignRequest = {
|
|
|
492
530
|
inputs: { amount: string; prev_hash: string; prev_index: number }[];
|
|
493
531
|
locktime: number;
|
|
494
532
|
outputs: { address?: string; amount: string; script_type: string }[];
|
|
495
|
-
version: number;
|
|
496
|
-
versionGroupId: number;
|
|
497
533
|
};
|
|
498
534
|
|
|
499
|
-
|
|
535
|
+
type ZcashTrezorHeader = { version: number; versionGroupId: number };
|
|
536
|
+
|
|
537
|
+
function describeZcashSignRequest({ inputs, outputs, ...header }: ZcashTrezorSignRequest & ZcashTrezorHeader) {
|
|
500
538
|
const sum = (amounts: { amount: string }[]) => amounts.reduce((total, { amount }) => total + BigInt(amount), 0n);
|
|
501
539
|
const inputTotal = sum(inputs);
|
|
502
540
|
const outputTotal = sum(outputs);
|
|
@@ -639,6 +677,17 @@ async function getTrezorWallet<T extends Chain>({
|
|
|
639
677
|
return { ...toolbox, address };
|
|
640
678
|
}
|
|
641
679
|
|
|
680
|
+
case Chain.Hype: {
|
|
681
|
+
const { getHyperCoreToolbox } = await import("@swapkit/toolboxes/hypercore");
|
|
682
|
+
const { getHyperCoreSigner } = await import("./hypercoreSigner");
|
|
683
|
+
|
|
684
|
+
const signer = getHyperCoreSigner({ address: providedAddress, derivationPath });
|
|
685
|
+
const address = await signer.getAddress();
|
|
686
|
+
const toolbox = getHyperCoreToolbox({ signer });
|
|
687
|
+
|
|
688
|
+
return { ...toolbox, address };
|
|
689
|
+
}
|
|
690
|
+
|
|
642
691
|
case Chain.Ripple: {
|
|
643
692
|
const { getRippleToolbox } = await import("@swapkit/toolboxes/ripple");
|
|
644
693
|
const { getRippleSigner } = await import("./rippleSigner");
|
|
@@ -705,16 +754,25 @@ async function getTrezorWallet<T extends Chain>({
|
|
|
705
754
|
|
|
706
755
|
const address = providedAddress ?? (await getAddress());
|
|
707
756
|
|
|
757
|
+
// Always v5: v4 signing makes Connect fetch previous transactions, and it cannot parse v6 ones
|
|
708
758
|
const signWithTrezor = async (request: ZcashTrezorSignRequest, signingPath: "pczt" | "transaction") => {
|
|
709
759
|
const TrezorConnect = (await import("@trezor/connect-web")).default;
|
|
710
|
-
const
|
|
760
|
+
const { ZcashVersion, ZcashVersionGroupId } = await import("@swapkit/utxo-signer");
|
|
761
|
+
const signRequest = { ...request, version: ZcashVersion.NU5, versionGroupId: ZcashVersionGroupId.NU5 };
|
|
762
|
+
const result = await TrezorConnect.signTransaction({ ...signRequest, coin, overwintered: true } as Parameters<
|
|
711
763
|
typeof TrezorConnect.signTransaction
|
|
712
764
|
>[0]);
|
|
713
765
|
|
|
714
766
|
if (!result.success) {
|
|
715
767
|
throw new SwapKitError({
|
|
716
768
|
errorKey: "wallet_trezor_failed_to_sign_transaction",
|
|
717
|
-
info: {
|
|
769
|
+
info: {
|
|
770
|
+
...result.payload,
|
|
771
|
+
chain,
|
|
772
|
+
derivationPath,
|
|
773
|
+
request: describeZcashSignRequest(signRequest),
|
|
774
|
+
signingPath,
|
|
775
|
+
},
|
|
718
776
|
});
|
|
719
777
|
}
|
|
720
778
|
|
|
@@ -734,8 +792,6 @@ async function getTrezorWallet<T extends Chain>({
|
|
|
734
792
|
inputs,
|
|
735
793
|
locktime: global.lockTime,
|
|
736
794
|
outputs,
|
|
737
|
-
version: global.txVersion,
|
|
738
|
-
versionGroupId: global.versionGroupId,
|
|
739
795
|
};
|
|
740
796
|
const serializedTx = await signWithTrezor(request, "pczt");
|
|
741
797
|
|
|
@@ -749,10 +805,10 @@ async function getTrezorWallet<T extends Chain>({
|
|
|
749
805
|
|
|
750
806
|
const signZcashTransactionWithSerializedTx = async (tx: ZcashTransaction) => {
|
|
751
807
|
const { hex: hexEncode } = await import("@scure/base");
|
|
752
|
-
const { NETWORKS
|
|
808
|
+
const { NETWORKS } = await import("@swapkit/utxo-signer");
|
|
753
809
|
const address_n = hardenDerivationPath(derivationPath);
|
|
754
810
|
|
|
755
|
-
const inputs = buildZcashTxInputsForTrezor(tx,
|
|
811
|
+
const inputs = buildZcashTxInputsForTrezor(tx, await resolveZcashInputAmounts(tx), address_n, hexEncode);
|
|
756
812
|
const outputs = await buildZcashTxOutputsForTrezor({
|
|
757
813
|
addressN: address_n,
|
|
758
814
|
chain,
|
|
@@ -763,12 +819,10 @@ async function getTrezorWallet<T extends Chain>({
|
|
|
763
819
|
|
|
764
820
|
const request = {
|
|
765
821
|
branchId: tx.consensusBranchId,
|
|
766
|
-
expiry:
|
|
822
|
+
expiry: tx.expiryHeight,
|
|
767
823
|
inputs,
|
|
768
|
-
locktime:
|
|
824
|
+
locktime: tx.lockTime,
|
|
769
825
|
outputs,
|
|
770
|
-
version: 4,
|
|
771
|
-
versionGroupId: ZcashVersionGroupId.SAPLING,
|
|
772
826
|
};
|
|
773
827
|
const serializedTx = await signWithTrezor(request, "transaction");
|
|
774
828
|
|
|
@@ -1570,6 +1624,7 @@ export const trezorWallet = createWallet({
|
|
|
1570
1624
|
[Chain.Ethereum]: { direct: true, typedData: true },
|
|
1571
1625
|
[Chain.Gnosis]: { direct: true, typedData: true },
|
|
1572
1626
|
[Chain.Dogecoin]: { direct: true },
|
|
1627
|
+
[Chain.Hype]: { direct: true },
|
|
1573
1628
|
[Chain.Hyperevm]: { direct: true, typedData: true },
|
|
1574
1629
|
[Chain.Litecoin]: { direct: true },
|
|
1575
1630
|
[Chain.Monad]: { direct: true, typedData: true },
|
|
@@ -1598,6 +1653,7 @@ export const trezorWallet = createWallet({
|
|
|
1598
1653
|
Chain.Dogecoin,
|
|
1599
1654
|
Chain.Ethereum,
|
|
1600
1655
|
Chain.Gnosis,
|
|
1656
|
+
Chain.Hype,
|
|
1601
1657
|
Chain.Hyperevm,
|
|
1602
1658
|
Chain.Litecoin,
|
|
1603
1659
|
Chain.Monad,
|
package/dist/chunk-42xrtarj.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{Ba as D,Ca as H}from"./chunk-rydhx4se.js";import{$c as i0,Jb as o,Kb as U,Ma as qY,Nc as zQ,Pa as _Q,Qa as _0,Tc as s0,Td as vX,Ua as i,Uc as q0,Va as CQ,Vc as a0,Wa as W,Wc as r,Xc as TQ,Ya as qQ,Yc as c,Za as j,Zc as GQ,_c as n0,ab as z,ad as VQ,bb as nX,cb as P,db as b,fb as DQ,ib as I0,jd as hQ,kd as T,ld as I,md as p,nd as $8,qc as FX}from"./chunk-mzan0m09.js";import{Xd as ZY}from"./chunk-kaw35ae2.js";var BK=ZY(qY(),1);var V={AppBinding:Symbol.for("AppBinding")};var d="Zcash";var ZQ={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId")};var v=224,m={FIRST:0,NEXT:128,CHANGE_PATH:255},g={DEFAULT:0,SAPLING:5,HASH_INPUT_CONTINUE:128},A={FIRST:0,NEXT:128,LAST:1},e={CONTINUE:0,FINISHED:1},UQ=255;var R={6300:{message:"GPAuthFailedError"},"63c0":{message:"PinRemainingAttemptsError"},6400:{message:"ExecutionError"},6700:{message:"IncorrectLengthError"},6981:{message:"CommandIncompatibleFileStructureError"},6982:{message:"SecurityStatusNotSatisfiedError"},6985:{message:"UserRejectedError"},6986:{message:"ConditionsOfUseNotSatisfiedError"},"6a80":{message:"IncorrectDataError"},"6a84":{message:"NotEnoughMemorySpaceError"},"6a88":{message:"ReferencedDataNotFoundError"},"6a89":{message:"FileAlreadyExistsError"},"6a8a":{message:"SwapWithoutTrustedInputsError"},"6b00":{message:"IncorrectP1P2Error"},"6d00":{message:"InsNotSupportedError"},"6e00":{message:"ClaNotSupportedError"},"6f00":{message:"TechnicalProblemError"},"6f01":{message:"VersionParsingFailError"},"6f03":{message:"RngFailureError"},"6f42":{message:"LicensingError"},"6faa":{message:"HaltedError"},9240:{message:"MemoryProblemError"},9400:{message:"NoEFSelectedError"},9402:{message:"InvalidOffsetError"},9404:{message:"FileNotFoundError"},9408:{message:"InconsistentFileError"},9484:{message:"AlgorithmNotSupportedError"},9485:{message:"InvalidKCVError"},9802:{message:"CodeNotInitializedError"},9804:{message:"AccessConditionNotFullfilledError"},9808:{message:"ContradictionSecretCodeStatusError"},9810:{message:"ContradictionInvalidationError"},9840:{message:"CodeBlockedError"},9850:{message:"MaxValueReachedError"},b007:{message:"BadStateError"},unsupported_v6_transaction:{message:"UnsupportedV6TransactionError"}};class c0 extends DQ{constructor(Q){super({tag:"ZcashAppCommandError",...Q})}}var M=(Q)=>new c0(Q);var l0=32,Z8=64;class KQ{name="GetAddress";args;errorHelper=new D(R,M);constructor(Q){this.args=Q}getApdu(){let Q={cla:v,ins:Z8,p1:this.args.checkOnDevice?1:0,p2:0},X=new W(Q),$=H.splitPath(this.args.derivationPath);return X.add8BitUIntToData($.length),$.forEach((Y)=>{X.add32BitUIntToData(Y)}),X.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new qQ(Q),$=X.extract8BitUInt();if($===void 0)return P({error:new j("Public key length is missing")});if(X.testMinimalLength($)===!1)return P({error:new j("Public key is missing")});let Y=X.extractFieldByLength($);if(Y===void 0)return P({error:new j("Unable to extract public key")});let J=X.extract8BitUInt();if(J===void 0)return P({error:new j("Address length is missing")});if(X.testMinimalLength(J)===!1)return P({error:new j("Address is missing")});let N=X.extractFieldByLength(J);if(N===void 0)return P({error:new j("Unable to extract address")});let Z=X.encodeToString(N);if(X.testMinimalLength(l0)===!1)return P({error:new j("Chain code is missing")});let q=X.extractFieldByLength(l0);return q===void 0?P({error:new j("Unable to extract chain code")}):P({data:{publicKey:Y,address:Z,chainCode:q}})})}}var q8=196;class Q0{name="getAppConfig";errorHelper=new D(R,M);getApdu(){return new W({cla:v,ins:q8,p1:0,p2:g.DEFAULT}).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new qQ(Q);X.extract8BitUInt(),X.extract8BitUInt();let $=X.extract8BitUInt(),Y=X.extract8BitUInt(),J=X.extract8BitUInt();return $===void 0||Y===void 0||J===void 0?P({error:new j("Cannot extract version")}):P({data:{version:`${$}.${Y}.${J}`}})})}}class X0{name="SignMessage";args;constructor(Q){this.args=Q}getApdu(){throw console.log(this.args),Error("SignMessageCommand.getApdu() not implemented")}parseResponse(Q){throw Error("SignMessageCommand.parseResponse() not implemented")}}var OQ={UFVK:0,ORCHARD_FVK:1},K8=80;class LQ{name="GetFullViewingKey";errorHelper=new D(R,M);args;constructor(Q){this.args=Q}getApdu(){let Q=this.args.isContinue?m.NEXT:m.FIRST,X={cla:v,ins:K8,p1:Q,p2:this.args.p2},$=new W(X);if(!this.args.isContinue){let Y=H.splitPath(this.args.derivationPath);if($.add8BitUIntToData(Y.length),Y.forEach((J)=>{$.add32BitUIntToData(J)}),this.args.p2===OQ.UFVK){if(!this.args.transparentDerivationPath)throw Error("GetFullViewingKeyCommand: UFVK export requires a transparent derivation path (app-zcash >= v3.8.0)");let J=H.splitPath(this.args.transparentDerivationPath);$.add8BitUIntToData(J.length),J.forEach((N)=>{$.add32BitUIntToData(N)})}}return $.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>P({data:{data:new Uint8Array(Q.data)}}))}}function o0(Q){return Q==="orchardFvk"?OQ.ORCHARD_FVK:OQ.UFVK}function L(...Q){let X=Q.reduce((J,N)=>J+N.length,0),$=new Uint8Array(X),Y=0;return Q.forEach((J)=>{$.set(J,Y),Y+=J.length}),$}function bQ(Q,X){return`32'/${Q}/${X}`}var p0=96;function O8(Q){let X=`Orchard FVK must be ${p0} bytes (got ${Q.length})`;if(Q.length<2)return X;let $=new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint16(0,!1);return 2+$===Q.length?`${X}. Payload matches UFVK framing (u16 BE length + ${$} bytes). Use mode "ufvk" for this response, or use a Zcash app build that exports raw Orchard FVK for GET_VK P2=0x01.`:X}function P8(Q){return Q.length!==p0?z({error:new j(O8(Q))}):z({data:{mode:"orchardFvk",fullViewingKey:Q}})}function z8(Q){if(Q.length<2)return!1;let X=new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint16(0,!1);return Q.length>=2+X}function j8(Q){if(Q.length<2)return z({error:new j("UFVK string length is missing")});let X=new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint16(0,!1);if(2+X>Q.length)return z({error:new j("UFVK string is truncated")});let $=Q.slice(2,2+X),Y;try{Y=new TextDecoder("utf-8",{fatal:!0}).decode($)}catch{return z({error:new j("UFVK is not valid UTF-8")})}return 2+X<Q.length?z({error:new j("UFVK response has extra trailing bytes")}):z({data:{mode:"ufvk",fullViewingKey:Y}})}function x8(Q){let X=Q.split("/");if(X.length<3)return{error:new j(`Zcash UFVK derivation path must have at least purpose/coin/account levels (got "${Q}")`)};let[,$,Y]=X;return!$||!Y?{error:new j(`Zcash UFVK derivation path components are malformed (got "${Q}")`)}:{orchardDerivationPath:bQ($,Y),transparentDerivationPath:`44'/${$}/${Y}`}}class $0{constructor(Q,X){this.api=Q,this.args=X}async run(){let Q=o0(this.args.mode),X;if(this.args.mode==="ufvk"){let N=x8(this.args.derivationPath);if("error"in N)return z({error:N.error});X={isContinue:!1,p2:OQ.UFVK,derivationPath:N.orchardDerivationPath,transparentDerivationPath:N.transparentDerivationPath}}else X={isContinue:!1,p2:OQ.ORCHARD_FVK,derivationPath:this.args.derivationPath};let $=await this.api.sendCommand(new LQ(X));if(!b($))return z({error:$.error});let Y=new Uint8Array($.data.data),J=Y;for(;Y.length===CQ&&!(this.args.mode==="ufvk"&&z8(J));){let N=await this.api.sendCommand(new LQ({isContinue:!0,p2:Q}));if(!b(N))return z({error:N.error});Y=new Uint8Array(N.data.data),J=L(J,Y)}return this.args.mode==="ufvk"?j8(J):P8(J)}}var G8=81;class Y0{name="GetShieldedAddress";args;errorHelper=new D(R,M);constructor(Q){this.args=Q}getApdu(){let Q={cla:v,ins:G8,p1:this.args.checkOnDevice?1:0,p2:0},X=new W(Q),$=H.splitPath(this.args.orchardDerivationPath),Y=H.splitPath(this.args.transparentDerivationPath);return[$,Y].forEach((J)=>{X.add8BitUIntToData(J.length),J.forEach((N)=>{X.add32BitUIntToData(N)})}),X.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{if(Q.data.length===CQ)return P({error:new j("Response requires continuation which is not supported")});let X=new qQ(Q),$=X.extract16BitUInt();if($===void 0)return P({error:new j("Address length is missing")});if(X.testMinimalLength($)===!1)return P({error:new j("Address is missing")});let Y=X.extractFieldByLength($);if(Y===void 0)return P({error:new j("Unable to extract address")});if(X.testMinimalLength(1))return P({error:new j("Unexpected trailing bytes in response")});let J;try{J=new TextDecoder("utf-8",{fatal:!0}).decode(Y)}catch{return P({error:new j("Address is not valid UTF-8")})}return P({data:{address:J}})})}}function w8(Q){let X=Q.startsWith("m/")?Q.slice(2):Q,$=X.split("/");if($.length!==5)return{error:new j(`Shielded address derivation path must have exactly 5 levels purpose/coin/account/change/index (got "${Q}")`)};let Y=(O)=>/^\d+'?$/.test(O);if(!$.every(Y))return{error:new j(`Shielded address derivation path contains non-numeric components (got "${Q}")`)};let[J,N,Z,q]=$;return J!=="44'"?{error:new j(`Shielded address derivation path purpose must be 44' (got "${J}")`)}:N?.endsWith("'")?Z?.endsWith("'")?q!=="0"?{error:new j(`Shielded address derivation path change must be 0 (got "${q}")`)}:{orchardDerivationPath:bQ(N,Z),transparentDerivationPath:X}:{error:new j(`Shielded address derivation path account must be hardened (got "${Z}")`)}:{error:new j(`Shielded address derivation path coin type must be hardened (got "${N}")`)}}class J0{constructor(Q,X){this.api=Q,this.args=X}async run(){let Q=w8(this.args.derivationPath);if("error"in Q)return z({error:Q.error});let X=await this.api.sendCommand(new Y0({orchardDerivationPath:Q.orchardDerivationPath,transparentDerivationPath:Q.transparentDerivationPath,checkOnDevice:this.args.checkOnDevice}));return b(X)?z({data:{address:X.data.address}}):z({error:X.error})}}var N0=4,k8=66;class yQ{name="GetTrustedInput";errorHelper=new D(R,M);args;constructor(Q){this.args=Q}getApdu(){let{transaction:Q,indexLookup:X}=this.args,$,Y=!1;if(typeof X=="number"&&X>=0){Y=!0;let N=new Uint8Array(N0);new DataView(N.buffer,N.byteOffset,N.byteLength).setUint32(0,X,!1),$=new Uint8Array(Q.length+N0),$.set(N,0),$.set(Q,N0)}else $=Q;let J={cla:v,ins:k8,p1:Y?m.FIRST:m.NEXT,p2:g.DEFAULT};return new W(J).addBufferToData($).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:Q}))}}class Z0 extends DQ{appVersion;constructor(Q){super({tag:"UnsupportedV6TransactionError",message:`The Zcash app version ${Q} installed on the device does not support V6 (Ironwood) source transactions, so a UTXO received from one cannot be signed. Support is expected in a future Zcash app update.`,errorCode:"unsupported_v6_transaction"}),this.appVersion=Q}}function F8(Q,X,$,Y){if(typeof Q.setBigUint64==="function")return Q.setBigUint64(X,$,Y);let J=BigInt(32),N=BigInt(4294967295),Z=Number($>>J&N),q=Number($&N),O=Y?4:0,w=Y?0:4;Q.setUint32(X+O,Z,Y),Q.setUint32(X+w,q,Y)}function K0(Q,X,$){return Q&X^~Q&$}function O0(Q,X,$){return Q&X^Q&$^X&$}class xQ extends i0{constructor(Q,X,$,Y){super();this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=Q,this.outputLen=X,this.padOffset=$,this.isLE=Y,this.buffer=new Uint8Array(Q),this.view=TQ(this.buffer)}update(Q){q0(this),Q=n0(Q),s0(Q);let{view:X,buffer:$,blockLen:Y}=this,J=Q.length;for(let N=0;N<J;){let Z=Math.min(Y-this.pos,J-N);if(Z===Y){let q=TQ(Q);for(;Y<=J-N;N+=Y)this.process(q,N);continue}if($.set(Q.subarray(N,N+Z),this.pos),this.pos+=Z,N+=Z,this.pos===Y)this.process(X,0),this.pos=0}return this.length+=Q.length,this.roundClean(),this}digestInto(Q){q0(this),a0(Q,this),this.finished=!0;let{buffer:X,view:$,blockLen:Y,isLE:J}=this,{pos:N}=this;if(X[N++]=128,r(this.buffer.subarray(N)),this.padOffset>Y-N)this.process($,0),N=0;for(let K=N;K<Y;K++)X[K]=0;F8($,Y-8,BigInt(this.length*8),J),this.process($,0);let Z=TQ(Q),q=this.outputLen;if(q%4)throw Error("_sha2: outputLen should be aligned to 32bit");let O=q/4,w=this.get();if(O>w.length)throw Error("_sha2: outputLen bigger than state");for(let K=0;K<O;K++)Z.setUint32(4*K,w[K],J)}digest(){let{buffer:Q,outputLen:X}=this;this.digestInto(Q);let $=Q.slice(0,X);return this.destroy(),$}_cloneInto(Q){Q||(Q=new this.constructor),Q.set(...this.get());let{blockLen:X,buffer:$,length:Y,finished:J,destroyed:N,pos:Z}=this;if(Q.destroyed=N,Q.finished=J,Q.length=Y,Q.pos=Z,Y%X)Q.buffer.set($);return Q}clone(){return this._cloneInto()}}var s=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var v8=Uint8Array.from([7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8]),e0=(()=>Uint8Array.from(Array(16).fill(0).map((Q,X)=>X)))(),R8=(()=>e0.map((Q)=>(9*Q+5)%16))(),r0=(()=>{let $=[[e0],[R8]];for(let Y=0;Y<4;Y++)for(let J of $)J.push(J[Y].map((N)=>v8[N]));return $})(),QX=(()=>r0[0])(),XX=(()=>r0[1])(),$X=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[12,13,11,15,6,9,9,7,12,15,11,13,7,8,7,7],[13,15,14,11,7,7,6,8,13,14,13,12,5,5,6,9],[14,11,12,14,8,6,5,5,15,12,15,14,9,9,8,6],[15,12,13,13,9,5,8,6,14,11,12,11,8,6,5,5]].map((Q)=>Uint8Array.from(Q)),M8=QX.map((Q,X)=>Q.map(($)=>$X[X][$])),W8=XX.map((Q,X)=>Q.map(($)=>$X[X][$])),U8=Uint32Array.from([0,1518500249,1859775393,2400959708,2840853838]),D8=Uint32Array.from([1352829926,1548603684,1836072691,2053994217,0]);function t0(Q,X,$,Y){if(Q===0)return X^$^Y;if(Q===1)return X&$|~X&Y;if(Q===2)return(X|~$)^Y;if(Q===3)return X&Y|$&~Y;return X^($|~Y)}var BQ=new Uint32Array(16);class P0 extends xQ{constructor(){super(64,20,8,!0);this.h0=1732584193,this.h1=-271733879,this.h2=-1732584194,this.h3=271733878,this.h4=-1009589776}get(){let{h0:Q,h1:X,h2:$,h3:Y,h4:J}=this;return[Q,X,$,Y,J]}set(Q,X,$,Y,J){this.h0=Q|0,this.h1=X|0,this.h2=$|0,this.h3=Y|0,this.h4=J|0}process(Q,X){for(let x=0;x<16;x++,X+=4)BQ[x]=Q.getUint32(X,!0);let $=this.h0|0,Y=$,J=this.h1|0,N=J,Z=this.h2|0,q=Z,O=this.h3|0,w=O,K=this.h4|0,k=K;for(let x=0;x<5;x++){let f=4-x,y=U8[x],h=D8[x],F=QX[x],G=XX[x],t=M8[x],jQ=W8[x];for(let u=0;u<16;u++){let NQ=GQ($+t0(x,J,Z,O)+BQ[F[u]]+y,t[u])+K|0;$=K,K=O,O=GQ(Z,10)|0,Z=J,J=NQ}for(let u=0;u<16;u++){let NQ=GQ(Y+t0(f,N,q,w)+BQ[G[u]]+h,jQ[u])+k|0;Y=k,k=w,w=GQ(q,10)|0,q=N,N=NQ}}this.set(this.h1+Z+w|0,this.h2+O+k|0,this.h3+K+Y|0,this.h4+$+N|0,this.h0+J+q|0)}roundClean(){r(BQ)}destroy(){this.destroyed=!0,r(this.buffer),this.set(0,0,0,0,0)}}var YX=VQ(()=>new P0);var JX=YX;var L8=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),QQ=new Uint32Array(64);class z0 extends xQ{constructor(Q=32){super(64,Q,8,!1);this.A=s[0]|0,this.B=s[1]|0,this.C=s[2]|0,this.D=s[3]|0,this.E=s[4]|0,this.F=s[5]|0,this.G=s[6]|0,this.H=s[7]|0}get(){let{A:Q,B:X,C:$,D:Y,E:J,F:N,G:Z,H:q}=this;return[Q,X,$,Y,J,N,Z,q]}set(Q,X,$,Y,J,N,Z,q){this.A=Q|0,this.B=X|0,this.C=$|0,this.D=Y|0,this.E=J|0,this.F=N|0,this.G=Z|0,this.H=q|0}process(Q,X){for(let K=0;K<16;K++,X+=4)QQ[K]=Q.getUint32(X,!1);for(let K=16;K<64;K++){let k=QQ[K-15],x=QQ[K-2],f=c(k,7)^c(k,18)^k>>>3,y=c(x,17)^c(x,19)^x>>>10;QQ[K]=y+QQ[K-7]+f+QQ[K-16]|0}let{A:$,B:Y,C:J,D:N,E:Z,F:q,G:O,H:w}=this;for(let K=0;K<64;K++){let k=c(Z,6)^c(Z,11)^c(Z,25),x=w+k+K0(Z,q,O)+L8[K]+QQ[K]|0,y=(c($,2)^c($,13)^c($,22))+O0($,Y,J)|0;w=O,O=q,q=Z,Z=N+x|0,N=J,J=Y,Y=$,$=x+y|0}$=$+this.A|0,Y=Y+this.B|0,J=J+this.C|0,N=N+this.D|0,Z=Z+this.E|0,q=q+this.F|0,O=O+this.G|0,w=w+this.H|0,this.set($,Y,J,N,Z,q,O,w)}roundClean(){r(QQ)}destroy(){this.set(0,0,0,0,0,0,0,0),r(this.buffer)}}var NX=VQ(()=>new z0);var ZX=NX;function qX(Q){let X=new Uint8Array(4);return new DataView(X.buffer).setUint32(0,Q>>>0,!1),X}function E(Q){let X=new Uint8Array(4);return new DataView(X.buffer).setUint32(0,Q>>>0,!0),X}var fQ=50,PX=0,x0=4294967295,gQ=1,b8=118,C8=169,y8=20,T8=136,B8=172,a={NU6_3:3428143,NU6_2:3364600,NU6_1:3146400,NU6:2726400,NU5:1687104,CANOPY:1046400,HEARTWOOD:903000,BLOSSOM:653600,SAPLING:419200},_=(Q)=>Uint8Array.from(Q),V8=(Q,X)=>new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint16(X,!0),EQ=(Q,X)=>new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint32(X,!0),E8=(Q)=>({prevout:_(Q.prevout),script:_(Q.script),sequence:_(Q.sequence),tree:Q.tree?_(Q.tree):void 0}),I8=(Q)=>({amount:_(Q.amount),script:_(Q.script)}),zX=(Q)=>({version:_(Q.version),inputs:Q.inputs.map(E8),outputs:Q.outputs?.map(I8),locktime:Q.locktime?_(Q.locktime):void 0,timestamp:Q.timestamp?_(Q.timestamp):void 0,nVersionGroupId:Q.nVersionGroupId?_(Q.nVersionGroupId):void 0,nExpiryHeight:Q.nExpiryHeight?_(Q.nExpiryHeight):void 0,extraData:Q.extraData?_(Q.extraData):void 0,consensusBranchId:Q.consensusBranchId?_(Q.consensusBranchId):void 0}),C=(Q)=>Q<253?Uint8Array.of(Q):Q<=65535?Uint8Array.of(253,Q&255,Q>>8&255):Uint8Array.of(254,Q&255,Q>>8&255,Q>>16&255,Q>>24&255),KX=(Q,X)=>{if(X>=Q.length)return null;let $=Q[X];if($<253)return[$,X+1];if($===253)return X+3>Q.length?null:[V8(Q,X+1),X+3];if($===254)return X+5>Q.length?null:[EQ(Q,X+1)>>>0,X+5];if($===255){if(X+9>Q.length)return null;let Y=EQ(Q,X+1);return EQ(Q,X+5)!==0?null:[Y,X+9]}return null},jX=(Q)=>{if(Q.length===0)return null;let X=KX(Q,0);if(X===null||X[0]<0)return null;let $=X[0],Y=X[1],J=[];for(let N=0;N<$;N+=1){if(Y+8>Q.length)return null;Y+=8;let Z=KX(Q,Y);if(Z===null)return null;let[q,O]=Z;if(q<0||O+q>Q.length)return null;J.push(Q.subarray(O,O+q)),Y=O+q}return Y!==Q.length?null:J},OX=({outputs:Q})=>{let X=new Uint8Array(0);return Q&&(X=L(X,C(Q.length)),Q.forEach(($)=>{X=L(X,$.amount,C($.script.length),$.script)})),X},G0=(Q,X)=>{let $=new Uint8Array(0);if(Q.inputs.forEach((Z)=>{$=L($,Z.prevout,C(Z.script.length),Z.script,Z.sequence)}),Q.version.length>=4&&(EQ(Q.version,0)&2147483647)===4){let Z=Q.locktime&&Q.locktime.byteLength>0?Q.locktime:new Uint8Array(4),q=IQ(Q.nExpiryHeight),O=Q.extraData||new Uint8Array(0);return L(Q.version,Q.nVersionGroupId||new Uint8Array(0),Q.consensusBranchId||new Uint8Array(0),C(Q.inputs.length),$,OX(Q),new Uint8Array(3),Z,C(q.length+O.length),q,O)}let Y=OX(Q);Q.outputs&&Q.locktime&&(Y=L(Y,new Uint8Array(3),Q.extraData||new Uint8Array(0)));let J=Q.locktime&&Q.locktime.byteLength>0?Q.locktime:new Uint8Array(4),N=IQ(Q.nExpiryHeight);return L(Q.version,X??Q.timestamp??new Uint8Array(0),Q.nVersionGroupId||new Uint8Array(0),Q.consensusBranchId||new Uint8Array(0),J,N,C(Q.inputs.length),$,Y)},w0=(Q)=>{let X=((Q.at(64)??0)&1)===0?2:3;return L(Uint8Array.of(X),Q.subarray(1,33))},f8=(Q)=>JX(ZX(Q)),xX=(Q)=>{let X;if(Q.length===65?X=w0(Q):Q.length===33?X=Q:X=null,X?.length!==33)throw Error("Expected 65-byte uncompressed or 33-byte compressed secp256k1 public key");let $=f8(X);return L(Uint8Array.of(b8,C8,y8),$,Uint8Array.of(T8,B8))},SQ=(Q)=>Q==null||Q>=a.NU6_3?E(933566043):Q>=a.NU6_2?E(1412952880):Q>=a.NU6_1?E(1307332080):Q>=a.NU6?E(3370586197):Q>=a.NU5?E(3268858036):Q>=a.CANOPY?E(3925833126):Q>=a.HEARTWOOD?E(4122551051):Q>=a.BLOSSOM?E(733220448):Q>=a.SAPLING?E(1991772603):E(1537743641),GX=()=>E(2147483653),j0=4;function IQ(Q){if(Q===void 0||Q.byteLength===0)return new Uint8Array(j0);if(Q.byteLength!==j0)throw Error(`expiryHeight must be ${j0} bytes (got ${Q.byteLength})`);return _(Q)}var wX="0.0.0",kX={version:""},g8="3.8.0";class RX{resolve(Q,X){if(Q.sessionStateType===FX.Connected)return{isCompatible:!1,version:wX};let $=Q.currentApp;return $?.name!==d?{isCompatible:!1,version:wX}:{isCompatible:!0,version:$.version}}}function MX(Q){try{let X=Q.getDeviceSessionState(),$=new RX,{isCompatible:Y,version:J}=$.resolve(X,kX);return Y?new vX(X,kX,$).withMinVersionInclusive(g8).check()?void 0:J:void 0}catch{return}}var VX=255,S8=4,m8=VX-S8,H8=VX,W0=4,_8=5*W0,XQ=3*W0,S=32,EX=8,h8=1,mQ=64,WX=192,n=52,u8=16,FQ=512,PQ=n+FQ+u8,IX=80,A8=S,d8=A8+S,c8=d8+S,F0=S,l8=F0+S,wQ=l8+S,o8=wQ+PQ+IX,v0=S,R0=v0+S,M0=R0+S,p8=M0+S,kQ=p8+S,s8=kQ+PQ+IX,fX=h8+EX,a8=fX+S,UX=128,DX=50,n8=2147483647,i8=4,t8=5,gX=6,LX=3632576152,k0=(Q,X)=>(l(Q,X,X+1),Q[X]??0),U0=(Q,X)=>(l(Q,X,X+4),new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint32(X,!0)),e8=(Q,X)=>{l(Q,X,X+8);let $=new DataView(Q.buffer,Q.byteOffset,Q.byteLength),Y=$.getUint32(X,!0);return $.getUint32(X+4,!0)*4294967296+Y},bX=(Q)=>`0x${Q.toString(16).padStart(8,"0")}`,l=(Q,X,$)=>{if(X<0||$<X||$>Q.length)throw Error("Malformed transaction while splitting trusted input chunks")},$Q=(Q,X)=>{let $=k0(Q,X);if($<253)return{value:$,byteLength:1,nextOffset:X+1};if($===253)return{value:k0(Q,X+1)+(k0(Q,X+2)<<8),byteLength:3,nextOffset:X+3};if($===254)return{value:U0(Q,X+1),byteLength:5,nextOffset:X+5};l(Q,X+1,X+9);let Y=e8(Q,X+1);if(!Number.isSafeInteger(Y))throw Error("CompactSize value exceeds JavaScript safe integer range");return{value:Y,byteLength:9,nextOffset:X+9}},CX=(Q)=>{let X=Q.filter((J)=>J.length>0);if(X.length===0)throw Error("Cannot send trusted input for an empty transaction");let $=[],Y=!0;return X.forEach((J)=>{let N=0;for(;N<J.length;){let Z=Math.min(N+(Y?m8:H8),J.length);$.push(J.slice(N,Z)),N=Z,Y=!1}}),$},r8=(Q,X)=>L(Q,new Uint8Array([4]),X),Q$={actions:[],digestData:new Uint8Array},X$=(Q,X)=>{let $=X;return{take:(Y)=>{l(Q,$,$+Y);let J=Q.slice($,$+Y);return $+=Y,J},skip:(Y)=>{l(Q,$,$+Y),$+=Y},takeCount:()=>{let{value:Y,nextOffset:J}=$Q(Q,$);return $=J,Y},consumed:()=>$}},yX=(Q,X)=>{let $=Q.takeCount();if($===0)return Q$;let Y=Array.from({length:$},()=>Q.take(s8)),J=Q.take(X?a8:fX);return X||Q.skip(S),{actions:Y,digestData:J}},TX=(Q,X)=>{if(X===0)return;let $=Q.takeCount();Q.skip($+X*mQ+mQ)},$$=(Q,X,$)=>{let Y=X$(Q,X),J=Y.takeCount(),N=Array.from({length:J},()=>Y.take(c8)),Z=Y.takeCount(),q=Array.from({length:Z},()=>Y.take(o8)),O=new Uint8Array,w=new Uint8Array;(J>0||Z>0)&&(O=Y.take(EX),J>0&&($?Y.skip(S):w=Y.take(S)),Y.skip(J*(WX+mQ)+Z*WX+mQ));let K=yX(Y,!$);TX(Y,K.actions.length);let k;if($&&(k=yX(Y,!1),TX(Y,k.actions.length)),Y.consumed()!==Q.length)throw Error("Malformed transaction while splitting trusted input chunks");return{saplingSpends:N,saplingOutputs:q,saplingValueBalance:O,saplingAnchor:w,orchard:K,ironwood:k}},Y$=(Q)=>{let X=Q.subarray(0,F0),$=Q.subarray(F0,wQ),Y=Q.subarray(wQ,wQ+PQ),J=Q.subarray(wQ+PQ);return{compact:L($,Y.subarray(0,n)),memo:Y.subarray(n,n+FQ),nonCompact:L(X,Y.subarray(n+FQ),J)}},J$=(Q)=>{let X=Q.subarray(0,v0),$=Q.subarray(v0,R0),Y=Q.subarray(R0,M0),J=Q.subarray(M0,kQ),N=Q.subarray(kQ,kQ+PQ),Z=Q.subarray(kQ+PQ);return{compact:L($,J,N.subarray(0,n)),memo:N.subarray(n,n+FQ),nonCompact:L(X,Y,N.subarray(n+FQ),Z)}},BX=(Q,X)=>{X.forEach(($)=>{for(let Y=0;Y<$.length;Y+=UX)Q.push($.subarray(Y,Y+UX))})},N$=(Q,X)=>{if(Q.push(L(C(X.saplingSpends.length),C(X.saplingOutputs.length),C(X.orchard.actions.length),...X.ironwood!==void 0?[C(X.ironwood.actions.length)]:[])),X.saplingSpends.length>0||X.saplingOutputs.length>0){Q.push(L(X.saplingValueBalance,X.saplingAnchor)),X.saplingSpends.forEach((Y)=>Q.push(Y));let $=X.saplingOutputs.map(Y$);$.forEach(({compact:Y})=>Q.push(Y)),BX(Q,$.map(({memo:Y})=>Y)),$.forEach(({nonCompact:Y})=>Q.push(Y))}(X.ironwood!==void 0?[X.orchard,X.ironwood]:[X.orchard]).forEach(($)=>{if($.actions.length===0)return;let Y=$.actions.map(J$);Y.forEach(({compact:J})=>Q.push(J)),BX(Q,Y.map(({memo:J})=>J)),Y.forEach(({nonCompact:J})=>Q.push(J)),Q.push($.digestData)})},SX=(Q)=>U0(Q,0)&n8,Z$=(Q)=>SX(Q)===gX,q$=(Q)=>{let X=SX(Q),$=X===i8,Y=X===gX;if(!$&&!Y&&X!==t8)throw Error(`Unsupported transaction version ${X} while splitting trusted input chunks`);if(Y){let K=U0(Q,W0);if(K!==LX)throw Error(`Unexpected version group id for a v6 transaction while splitting trusted input chunks: expected ${bX(LX)}, got ${bX(K)}`)}let J=0,N=new Uint8Array,Z=new Uint8Array,q=[];$?J+=XQ:(l(Q,XQ,XQ+8),N=Q.slice(XQ,XQ+4),Z=Q.slice(XQ+4,XQ+8),J+=_8);let O=$Q(Q,J);J=O.nextOffset,q.push(L(Q.slice(0,XQ),Q.slice(J-O.byteLength,J)));for(let K=0;K<O.value;K+=1){let k=J;l(Q,J,J+36),J+=36;let x=$Q(Q,J);J=x.nextOffset,q.push(Q.slice(k,J));let f=J;l(Q,J,J+x.value+4),J+=x.value+4;let y=Q.slice(f,J);for(let h=0;h<y.length;h+=DX)q.push(y.slice(h,h+DX))}let w=$Q(Q,J);J=w.nextOffset,q.push(Q.slice(J-w.byteLength,J));for(let K=0;K<w.value;K+=1){let k=J;l(Q,J,J+8),J+=8;let x=$Q(Q,J);J=x.nextOffset,l(Q,J,J+x.value),J+=x.value,q.push(Q.slice(k,J))}if($){let K=$Q(Q,J),k=$Q(Q,K.nextOffset),x=$Q(Q,k.nextOffset);return q.push(Q.slice(J,x.nextOffset)),q.push(Q.slice(x.nextOffset)),CX(q)}return N$(q,$$(Q,J,Y)),q.push(r8(N,Z)),CX(q)};class vQ{constructor(Q,X){this.api=Q,this.args=X}async run(){let Q=this.args.indexLookup??0,X=q$(this.args.transaction);if(Z$(this.args.transaction)){let Z=MX(this.api);if(Z!==void 0)return z({error:new Z0(Z)})}let $=X[0];if(!$)throw Error("Unable to prepare first trusted input APDU chunk");let Y=await this.api.sendCommand(new yQ({transaction:$,indexLookup:Q}));if(!b(Y))return z({error:Y.error});let J=Y.data,N=1;for(;N<X.length;){let Z=X[N];if(!Z)throw Error("Unable to prepare trusted input APDU chunk");let q=await this.api.sendCommand(new yQ({transaction:Z}));if(!b(q))return z({error:q.error});J=q.data,N+=1}return z({data:J})}}var K$=82;class D0{constructor(Q){this.args=Q}name="PcztHeader";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:K$,p1:A.FIRST,p2:e.CONTINUE};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var O$=88;class L0{constructor(Q){this.args=Q}name="PcztIronwoodAction";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:O$,p1:this.args.p1,p2:this.args.p2};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var P$=86;class b0{constructor(Q){this.args=Q}name="PcztOrchardAction";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:P$,p1:this.args.p1,p2:this.args.p2};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var z$=83;class C0{constructor(Q){this.args=Q}name="PcztTransparentInput";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:z$,p1:this.args.p1,p2:this.args.p2};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var j$=84;class y0{constructor(Q){this.args=Q}name="PcztTransparentOutput";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:j$,p1:this.args.p1,p2:this.args.p2};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var x$=89,mX=64;class T0{constructor(Q){this.args=Q}name="SignPcztIronwood";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:x$,p1:A.FIRST,p2:this.args.actionIndex};return new W(Q).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new Uint8Array(Q.data);return X.length!==mX?P({error:new j(`Expected ${mX}-byte Ironwood spendAuthSig, got ${X.length}`)}):P({data:{spendAuthSig:X}})})}}var G$=87,HX=64;class B0{constructor(Q){this.args=Q}name="SignPcztOrchard";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:G$,p1:A.FIRST,p2:this.args.actionIndex};return new W(Q).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new Uint8Array(Q.data);return X.length!==HX?P({error:new j(`Expected ${HX}-byte Orchard spendAuthSig, got ${X.length}`)}):P({data:{spendAuthSig:X}})})}}var w$=85;class V0{constructor(Q){this.args=Q}name="SignPcztTransparent";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:w$,p1:A.FIRST,p2:this.args.inputIndex};return new W(Q).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new Uint8Array(Q.data);return X.length<2?P({error:new j(`Expected a transparent signature with a trailing sighash byte, got ${X.length} bytes`)}):X[X.length-1]!==gQ?P({error:new j(`Expected sighash_type SIGHASH_ALL (0x01), got 0x${X[X.length-1].toString(16)}`)}):P({data:{signature:X}})})}}var _X=new Uint8Array(32),hX=(Q)=>{let X=H.splitPath(Q),$=new i;return $.add8BitUIntToData(X.length),X.forEach((Y)=>$.add32BitUIntToData(Y)),$.build()},uX=(Q)=>{if(Q===null)return Uint8Array.of(0);let X=new i;return X.add8BitUIntToData(1),X.add32BitUIntToData(Q,!1),X.build()},AX=(Q)=>Q?L(C(1),Q.pubkey,Q.seedFingerprint??_X,hX(Q.signingPath)):C(0),k$=(Q,X)=>L(X??_X,hX(Q)),HQ=(Q)=>F$(L(C(Q.length),Q)),F$=(Q)=>{if(Q.length<=UQ)return[Q];let X=[];for(let $=0;$<Q.length;$+=UQ)X.push(Q.subarray($,$+UQ));return X},dX=(Q)=>{let X=new i;return X.addBufferToData(Uint8Array.of(80,67,90,84)),X.add32BitUIntToData(Q.txVersion>=6?2:1,!1),X.add32BitUIntToData(Q.txVersion,!1),X.add32BitUIntToData(Q.versionGroupId,!1),X.add32BitUIntToData(Q.consensusBranchId,!1),X.addBufferToData(uX(Q.fallbackLockTime)),X.add32BitUIntToData(Q.expiryHeight,!1),X.add32BitUIntToData(Q.coinType,!1),X.add8BitUIntToData(Q.txModifiable),X.build()},cX=(Q)=>{let X=[C(Q.length)];for(let $ of Q){let Y=new i;Y.addBufferToData($.prevoutTxid),Y.add32BitUIntToData($.prevoutIndex,!1),Y.addBufferToData(uX($.sequence)),Y.add64BitUIntToData($.value,!1),X.push(Y.build()),X.push(...HQ($.scriptPubKey)),X.push(L(Uint8Array.of($.sighashType),AX($.derivation)))}return X},lX=(Q)=>{let X=[C(Q.length)];for(let $ of Q){let Y=new i;Y.add64BitUIntToData($.value,!1),X.push(Y.build()),X.push(...HQ($.scriptPubKey)),X.push(AX($.derivation))}return X},oX=(Q)=>{let X=[C(Q.actions.length)];if(Q.actions.length===0)return X;for(let J of Q.actions){let N=new i;N.addBufferToData(J.cvNet),N.addBufferToData(J.nullifier),N.addBufferToData(J.rk),N.addBufferToData(J.spendRecipient),N.add64BitUIntToData(J.spendValue,!1),N.addBufferToData(J.spendRho),N.addBufferToData(J.spendRseed),N.addBufferToData(J.alpha),X.push(N.build()),X.push(k$(J.signingPath,J.seedFingerprint)),X.push(L(J.cmx,J.ephemeralKey)),X.push(...HQ(J.encCiphertext)),X.push(...HQ(J.outCiphertext));let Z=new i;Z.addBufferToData(J.recipient),Z.add64BitUIntToData(J.value,!1),Z.addBufferToData(J.rseed),Z.addBufferToData(J.rcv),"notePlaintextVersion"in J&&Z.add8BitUIntToData(J.notePlaintextVersion),X.push(Z.build())}let $=new i,Y=Q.valueBalance;return $.add8BitUIntToData(Q.flags),$.add64BitUIntToData(Y<0n?-Y:Y,!1),$.add8BitUIntToData(Y<0n?1:0),$.addBufferToData(Q.anchor),X.push($.build()),X},pX=(Q)=>oX(Q),sX=(Q)=>oX(Q),RQ=(Q,X)=>Q===0?A.FIRST:Q===X-1?A.LAST:A.NEXT,E0=(Q,X,$)=>$&&Q===X-1?e.FINISHED:e.CONTINUE;var v$={actions:[],flags:0,valueBalance:0n,anchor:new Uint8Array(32)},R$=6;class f0{constructor(Q,X){this.api=Q,this.args=X}async run(){let{global:Q,transparentInputs:X,transparentOutputs:$,orchardBundle:Y,ironwoodBundle:J}=this.args.transaction,N=Y??v$,Z=J??null,q=Q.txVersion===R$;if(q&&Z===null)return z({error:new I0("V6 transaction requires a non-null Ironwood bundle")});if(!q&&Z!==null)return z({error:new I0("V5 transaction does not support an Ironwood bundle")});let O=q&&Z!==null,w=await this.api.sendCommand(new D0({data:dX(Q)}));if(!b(w))return z({error:w.error});let K=cX(X);for(let F=0;F<K.length;F+=1){let G=await this.api.sendCommand(new C0({data:K[F],p1:RQ(F,K.length),p2:e.CONTINUE}));if(!b(G))return z({error:G.error})}let k=lX($);for(let F=0;F<k.length;F+=1){let G=await this.api.sendCommand(new y0({data:k[F],p1:RQ(F,k.length),p2:e.CONTINUE}));if(!b(G))return z({error:G.error})}let x=pX(N);for(let F=0;F<x.length;F+=1){let G=await this.api.sendCommand(new b0({data:x[F],p1:RQ(F,x.length),p2:E0(F,x.length,!q)}));if(!b(G))return z({error:G.error})}if(O){let F=sX(Z);for(let G=0;G<F.length;G+=1){let t=await this.api.sendCommand(new L0({data:F[G],p1:RQ(G,F.length),p2:E0(G,F.length,!0)}));if(!b(t))return z({error:t.error})}}let f=[];for(let F=0;F<N.actions.length;F+=1){if(N.actions[F].spendValue===0n)continue;let G=await this.api.sendCommand(new B0({actionIndex:F}));if(!b(G))return z({error:G.error});f.push(G.data)}let y=[];if(O)for(let F=0;F<Z.actions.length;F+=1){if(Z.actions[F].spendValue===0n)continue;let G=await this.api.sendCommand(new T0({actionIndex:F}));if(!b(G))return z({error:G.error});y.push(G.data)}let h=[];for(let F=0;F<X.length;F+=1){let G=await this.api.sendCommand(new V0({inputIndex:F}));if(!b(G))return z({error:G.error});h.push(G.data.signature)}return z({data:{orchard:f,transparentInputSigs:h,ironwood:y}})}}var M$=74;class g0{constructor(Q){this.args=Q}name="HashOutputFull";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:M$,p1:this.args.isLastChunk?m.NEXT:m.FIRST,p2:g.DEFAULT};return new W(Q).addBufferToData(this.args.outputChunk).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:Q}))}}var W$=74;class S0{constructor(Q){this.args=Q}name="ProvideOutputFullChangePath";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:W$,p1:m.CHANGE_PATH,p2:g.DEFAULT},X=new W(Q),$=H.splitPath(this.args.derivationPath);return X.add8BitUIntToData($.length),$.forEach((Y)=>{X.add32BitUIntToData(Y)}),X.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:Q}))}}class m0{constructor(Q){this.args=Q}name="SignTransaction";errorHelper=new D(R,M);getApdu(){let{derivationPath:Q,expiryHeight:X,lockTime:$,sigHashType:Y}=this.args,J=H.splitPath(Q),N=qX($),Z={cla:v,ins:72,p2:g.DEFAULT,p1:0},q=new W(Z);return q.add8BitUIntToData(J.length),J.forEach((O)=>{q.add32BitUIntToData(O)}),q.add8BitUIntToData(0).addBufferToData(N).add8BitUIntToData(Y),q.addBufferToData(X),q.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new Uint8Array(Q.data);return X.length>0&&(X[0]=48),P({data:{signature:X}})})}}var U$=68;class MQ{constructor(Q){this.args=Q}name="StartUntrustedHashTransactionInput";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:U$,p1:this.args.firstRound?m.FIRST:m.NEXT,p2:this.args.newTransaction?g.SAPLING:g.HASH_INPUT_CONTINUE};return new W(Q).addBufferToData(this.args.transactionData).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:Q}))}}var D$=72;class H0{constructor(Q){this.args=Q}name="ZcashSaplingOutputCommit";errorHelper=new D(R,M);getApdu(){let{lockTime:Q,sigHashType:X,expiryHeight:$}=this.args,Y=L(E(Q),Uint8Array.of(0,0),Uint8Array.of(X&255),$);if(Y.length!==11)throw Error("ZcashSaplingOutputCommit: internal payload length");let J={cla:v,ins:D$,p1:0,p2:g.DEFAULT};return new W(J).addBufferToData(Y).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:{committed:!0}}))}}function aX(Q,X){if(Q.length!==X.length)return!1;for(let $=0;$<Q.length;$+=1)if(Q[$]!==X[$])return!1;return!0}class h0{constructor(Q,X){this.api=Q,this.args=X}async run(){let Q={...{lockTime:PX,sigHashType:gQ,additionals:[]},...this.args.transactionArg},{inputs:X,associatedKeysets:$,blockHeight:Y,changePath:J,outputScriptHex:N,lockTime:Z,sigHashType:q,additionals:O,expiryHeight:w}=Q,K=new Set(O.map((B)=>B.trim().toLowerCase()));if(!K.has("zcash"))return z({error:new j('signTransaction requires additionals to include "zcash" (Zcash transparent signing only).')});let k=K.has("sapling");if(X.length!==$.length)return z({error:new j("Inputs and associatedKeysets lengths mismatch")});let x=E(Z),f=GX(),y;try{y=IQ(w)}catch(B){return z({error:new j(B instanceof Error?B.message:"Invalid expiryHeight")})}let h=_Q(N)??new Uint8Array,F=new Uint8Array(0),G={inputs:[],version:f,timestamp:new Uint8Array(0)};G.nVersionGroupId=Uint8Array.of(10,39,167,38),G.nExpiryHeight=y,G.extraData=k?new Uint8Array(11):Uint8Array.of(0);let t=await this.collectTrustedInputsAndOutputs(X);if(!("trustedInputs"in t))return t;let{trustedInputs:jQ,regularOutputs:u}=t;G.inputs=X.map((B,WQ)=>{let N8=E(B.length>=4&&typeof B[3]=="number"?B[3]:x0);return{script:u[WQ].script,prevout:F,sequence:N8}});let NQ=await this.collectPublicKeys($);if(!Array.isArray(NQ))return NQ;let tQ=NQ,eQ=await this.shouldProvideChangePath(J,$,tQ,h);if(typeof eQ!="boolean")return eQ;G.consensusBranchId=SQ(Y);let A0=await this.executeHashSequence(G,jQ,J,eQ,h,k,Z,q,y);if(A0)return A0;let rQ=await this.signEachInput(X,$,u,G,jQ,Z,q,y);if(!Array.isArray(rQ))return rQ;let d0=rQ;G.version=f,G.consensusBranchId=SQ(Y);for(let B=0;B<X.length;B+=1){G.inputs[B].script=L(Uint8Array.of(d0[B].length),d0[B],Uint8Array.of(tQ[B].length),tQ[B]);let WQ=4;G.inputs[B].prevout=jQ[B].value.subarray(WQ,WQ+36)}G.locktime=x;let J8=L(G0(G,G.timestamp),h,Uint8Array.of(0,0,0));return z({data:_0(J8,!0)})}async collectTrustedInputsAndOutputs(Q){let X=[],$=[];for(let Y of Q){let J=Y[0],N=zX(J);N.consensusBranchId=SQ(Y[4]);let Z=await this.getTrustedInput(Y[1],N,J.serializedPreviousTransactionOverride);if(typeof Z!="string")return Z;let q=E(Y.length>=4&&typeof Y[3]=="number"?Y[3]:x0);if(X.push({trustedInput:!0,value:_Q(Z)??new Uint8Array,sequence:q}),N.outputs&&Y[1]<=N.outputs.length-1){let O=N.outputs[Y[1]];if(!O)return z({error:new j("Invalid output index in previous transaction")});$.push(O)}else return z({error:new j("Invalid output index in previous transaction")})}return{trustedInputs:X,regularOutputs:$}}async collectPublicKeys(Q){let X=[];for(let $ of Q){let Y=await this.api.sendCommand(new KQ({derivationPath:$,checkOnDevice:!1}));if(!b(Y))return z({error:Y.error});X.push(w0(Y.data.publicKey))}return X}async shouldProvideChangePath(Q,X,$,Y){let J=typeof Q=="string"?Q.trim():"";if(J==="")return!1;let N=X.indexOf(J),Z;if(N>=0)Z=$[N];else{let q=await this.api.sendCommand(new KQ({derivationPath:J,checkOnDevice:!1}));if(!b(q))return z({error:q.error});Z=q.data.publicKey}try{let q=xX(Z),O=jX(Y);return O!==null&&O.length>=2&&O.some((w)=>aX(w,q))}catch{return!1}}async executeHashSequence(Q,X,$,Y,J,N,Z,q,O){let w=await this.startUntrustedHashTransactionInput(!0,Q,X);if(w)return w;if(Y&&$){let k=await this.api.sendCommand(new S0({derivationPath:$}));if(!b(k))return z({error:k.error})}let K=await this.hashOutputFull(J);if(K)return K;if(N){let k=await this.api.sendCommand(new H0({lockTime:Z,sigHashType:q,expiryHeight:O}));if(!b(k))return z({error:k.error})}return null}async signEachInput(Q,X,$,Y,J,N,Z,q){let O=[];for(let w=0;w<Q.length;w+=1){let K=Q[w],k=K.length>=3&&typeof K[2]=="string"?_Q(K[2])??new Uint8Array:$[w].script,x={...Y,inputs:[{...Y.inputs[w],script:k}]},f=await this.startUntrustedHashTransactionInput(!1,x,[J[w]]);if(f)return f;let y=await this.api.sendCommand(new m0({derivationPath:X[w],lockTime:N,sigHashType:Z,expiryHeight:q}));if(!b(y))return z({error:y.error});O.push(y.data.signature)}return O}async getTrustedInput(Q,X,$){let Y=$&&$.length>0?$:G0(X,X.timestamp),J=await new vQ(this.api,{transaction:Y,indexLookup:Q}).run();return nX(J)?_0(J.data.data,!1):z({error:J.error})}async hashOutputFull(Q){let X=0;for(;X<Q.length;){let $=X+fQ>=Q.length?Q.length-X:fQ,Y=Q.subarray(X,X+$),J=await this.api.sendCommand(new g0({outputChunk:Y,isLastChunk:X+$===Q.length}));if(!b(J))return z({error:J.error});X+=$}return null}buildScriptBlocks(Q){if(Q.script.length===0)return[Q.sequence];let X=[],$=0;for(;$!==Q.script.length;){let Y=Math.min(fQ,Q.script.length-$),J=Q.script.subarray($,$+Y);X.push($+Y===Q.script.length?L(J,Q.sequence):Uint8Array.from(J)),$+=Y}return X}async sendInputBlocks(Q,X){for(let $ of Q){let Y=await this.api.sendCommand(new MQ({newTransaction:X,firstRound:!1,transactionData:$}));if(!b(Y))return z({error:Y.error})}return null}async startUntrustedHashTransactionInput(Q,X,$){let Y=X.consensusBranchId||new Uint8Array(0),J=L(X.version,X.timestamp||new Uint8Array(0),X.nVersionGroupId||new Uint8Array(0),Y,C(X.inputs.length)),N=await this.api.sendCommand(new MQ({newTransaction:Q,firstRound:!0,transactionData:J}));if(!b(N))return z({error:N.error});for(let Z=0;Z<X.inputs.length;Z+=1){let q=X.inputs[Z],O=$[Z].value,w=$[Z].trustedInput?Uint8Array.of(1,O.length):Uint8Array.of(0),K=L(w,O,C(q.script.length)),k=await this.api.sendCommand(new MQ({newTransaction:Q,firstRound:!1,transactionData:K}));if(!b(k))return z({error:k.error});let x=await this.sendInputBlocks(this.buildScriptBlocks(q),Q);if(x)return x}return null}}var{defineProperty:L$,getOwnPropertyDescriptor:b$}=Object,C$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?b$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&L$(X,$,J),J},iX=(Q,X)=>($,Y)=>X($,Y,Q),uQ=class{constructor(Q,X){this.dmk=Q,this.sessionId=X}getAppConfig(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new hQ({input:{command:new Q0,appName:d,requiredUserInteraction:o.None,skipOpenApp:Q.skipOpenApp}})})}getAddress(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new hQ({input:{command:new KQ(Q),appName:d,requiredUserInteraction:Q.checkOnDevice?o.VerifyAddress:o.None,skipOpenApp:Q.skipOpenApp}})})}getShieldedAddress(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new J0(X,{derivationPath:Q.derivationPath,checkOnDevice:Q.checkOnDevice}).run(),appName:d,requiredUserInteraction:Q.checkOnDevice?o.VerifyAddress:o.None,skipOpenApp:Q.skipOpenApp}})})}getFullViewingKey(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new $0(X,{derivationPath:Q.derivationPath,mode:Q.mode}).run(),appName:d,requiredUserInteraction:o.None,skipOpenApp:Q.skipOpenApp}})})}signTransaction(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new h0(X,Q).run(),appName:d,requiredUserInteraction:o.SignTransaction,skipOpenApp:Q.skipOpenApp??!1}})})}signPcztTransaction(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new f0(X,{transaction:Q.transaction}).run(),appName:d,requiredUserInteraction:o.SignTransaction,skipOpenApp:Q.skipOpenApp??!1}})})}signMessage(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new hQ({input:{command:new X0(Q),appName:d,requiredUserInteraction:o.SignPersonalMessage,skipOpenApp:Q.skipOpenApp}})})}getTrustedInput(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new vQ(X,Q).run(),appName:d,requiredUserInteraction:o.None,skipOpenApp:Q.skipOpenApp??!1}})})}};uQ=C$([I(),iX(0,T(ZQ.Dmk)),iX(1,T(ZQ.SessionId))],uQ);var tX=()=>new p(({bind:Q})=>{Q(V.AppBinding).to(uQ)});var YQ={GetAddressUseCase:Symbol.for("GetAddressUseCase"),GetFullViewingKeyUseCase:Symbol.for("GetFullViewingKeyUseCase"),GetShieldedAddressUseCase:Symbol.for("GetShieldedAddressUseCase")};var{defineProperty:y$,getOwnPropertyDescriptor:T$}=Object,B$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?T$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&y$(X,$,J),J},V$=(Q,X)=>($,Y)=>X($,Y,Q),AQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.getAddress({derivationPath:Q,checkOnDevice:X?.checkOnDevice??!1,skipOpenApp:X?.skipOpenApp??!1})}};AQ=B$([I(),V$(0,T(V.AppBinding))],AQ);var{defineProperty:E$,getOwnPropertyDescriptor:I$}=Object,f$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?I$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&E$(X,$,J),J},g$=(Q,X)=>($,Y)=>X($,Y,Q),dQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.getFullViewingKey({derivationPath:Q,mode:X?.mode??"ufvk",skipOpenApp:X?.skipOpenApp??!1})}};dQ=f$([I(),g$(0,T(V.AppBinding))],dQ);var{defineProperty:S$,getOwnPropertyDescriptor:m$}=Object,H$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?m$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&S$(X,$,J),J},_$=(Q,X)=>($,Y)=>X($,Y,Q),cQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.getShieldedAddress({derivationPath:Q,checkOnDevice:X?.checkOnDevice??!1,skipOpenApp:X?.skipOpenApp??!1})}};cQ=H$([I(),_$(0,T(V.AppBinding))],cQ);var eX=()=>new p(({bind:Q})=>{Q(YQ.GetAddressUseCase).to(AQ),Q(YQ.GetFullViewingKeyUseCase).to(dQ),Q(YQ.GetShieldedAddressUseCase).to(cQ)});var lQ={GetAppConfigUseCase:Symbol.for("GetAppConfigUseCase")};var{defineProperty:h$,getOwnPropertyDescriptor:u$}=Object,A$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?u$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&h$(X,$,J),J},d$=(Q,X)=>($,Y)=>X($,Y,Q),oQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(){return this._appBinder.getAppConfig({skipOpenApp:!1})}};oQ=A$([I(),d$(0,T(V.AppBinding))],oQ);var rX=()=>new p(({bind:Q})=>{Q(lQ.GetAppConfigUseCase).to(oQ)});var pQ={SignMessageUseCase:Symbol.for("SignMessageUseCase")};var{defineProperty:c$,getOwnPropertyDescriptor:l$}=Object,o$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?l$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&c$(X,$,J),J},p$=(Q,X)=>($,Y)=>X($,Y,Q),sQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.signMessage({derivationPath:Q,message:X,skipOpenApp:!1})}};sQ=o$([I(),p$(0,T(V.AppBinding))],sQ);var Q8=()=>new p(({bind:Q})=>{Q(pQ.SignMessageUseCase).to(sQ)});var JQ={GetTrustedInputUseCase:Symbol.for("GetTrustedInputUseCase"),SignTransactionUseCase:Symbol.for("SignTransactionUseCase"),SignPcztTransactionUseCase:Symbol.for("SignPcztTransactionUseCase")};var{defineProperty:s$,getOwnPropertyDescriptor:a$}=Object,n$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?a$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&s$(X,$,J),J},i$=(Q,X)=>($,Y)=>X($,Y,Q),aQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.getTrustedInput({transaction:Q,indexLookup:X?.indexLookup,skipOpenApp:X?.skipOpenApp??!1})}};aQ=n$([I(),i$(0,T(V.AppBinding))],aQ);var{defineProperty:t$,getOwnPropertyDescriptor:e$}=Object,r$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?e$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&t$(X,$,J),J},QY=(Q,X)=>($,Y)=>X($,Y,Q),nQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.signPcztTransaction({transaction:Q,skipOpenApp:X?.skipOpenApp})}};nQ=r$([I(),QY(0,T(V.AppBinding))],nQ);var{defineProperty:XY,getOwnPropertyDescriptor:$Y}=Object,YY=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?$Y(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&XY(X,$,J),J},JY=(Q,X)=>($,Y)=>X($,Y,Q),iQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.signTransaction({transactionArg:Q,skipOpenApp:X?.skipOpenApp})}};iQ=YY([I(),JY(0,T(V.AppBinding))],iQ);var X8=()=>new p(({bind:Q})=>{Q(JQ.GetTrustedInputUseCase).to(aQ),Q(JQ.SignTransactionUseCase).to(iQ),Q(JQ.SignPcztTransactionUseCase).to(nQ)});var Y8=({dmk:Q,sessionId:X})=>{let $=new $8;return $.bind(ZQ.Dmk).toConstantValue(Q),$.bind(ZQ.SessionId).toConstantValue(X),$.loadSync(tX(),rX(),eX(),X8(),Q8()),$};class u0{_container;constructor({dmk:Q,sessionId:X}){this._container=Y8({dmk:Q,sessionId:X})}getAppConfig(){return this._container.get(lQ.GetAppConfigUseCase).execute()}getAddress(Q,X){return this._container.get(YQ.GetAddressUseCase).execute(Q,X)}getFullViewingKey(Q,X){return this._container.get(YQ.GetFullViewingKeyUseCase).execute(Q,X)}getShieldedAddress(Q,X){return this._container.get(YQ.GetShieldedAddressUseCase).execute(Q,X)}signTransaction(Q,X){return this._container.get(JQ.SignTransactionUseCase).execute(Q,X)}signPcztTransaction(Q,X){return this._container.get(JQ.SignPcztTransactionUseCase).execute(Q,X)}signMessage(Q,X){return this._container.get(pQ.SignMessageUseCase).execute(Q,X)}getTrustedInput(Q,X){return this._container.get(JQ.GetTrustedInputUseCase).execute(Q,X)}}class NY{_dmk;_sessionId;constructor({dmk:Q,sessionId:X}){this._dmk=Q,this._sessionId=X}build(){return new u0({dmk:this._dmk,sessionId:this._sessionId})}}export{NY as SignerZcashBuilder};
|
|
2
|
-
|
|
3
|
-
//# debugId=D52C30B5021C73FE64756E2164756E21
|
|
4
|
-
//# sourceMappingURL=chunk-42xrtarj.js.map
|