@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.
Files changed (77) hide show
  1. package/dist/THIRD_PARTY_LICENSES.md +4 -4
  2. package/dist/{chunk-rydhx4se.js → chunk-0k1b2ddn.js} +3 -3
  3. package/dist/{chunk-rydhx4se.js.map → chunk-0k1b2ddn.js.map} +2 -2
  4. package/dist/{chunk-j3n6fbqh.js → chunk-2tzsz8f3.js} +4 -4
  5. package/dist/{chunk-j3n6fbqh.js.map → chunk-2tzsz8f3.js.map} +1 -1
  6. package/dist/{chunk-2jddegc1.js → chunk-410fpx61.js} +4 -4
  7. package/dist/{chunk-2jddegc1.js.map → chunk-410fpx61.js.map} +1 -1
  8. package/dist/chunk-8mkdjmw2.js +4 -0
  9. package/dist/chunk-8mkdjmw2.js.map +10 -0
  10. package/dist/{chunk-7kwtpk70.js → chunk-96p7njae.js} +3 -3
  11. package/dist/{chunk-7kwtpk70.js.map → chunk-96p7njae.js.map} +2 -2
  12. package/dist/{chunk-g6rrzxcx.js → chunk-97nsp4z6.js} +3 -3
  13. package/dist/{chunk-g6rrzxcx.js.map → chunk-97nsp4z6.js.map} +1 -1
  14. package/dist/{chunk-kaw35ae2.js → chunk-9a9gn4pb.js} +3 -3
  15. package/dist/{chunk-a47dwwv6.js.map → chunk-9a9gn4pb.js.map} +1 -1
  16. package/dist/chunk-a39rm9nv.js +4 -0
  17. package/dist/{chunk-42xrtarj.js.map → chunk-a39rm9nv.js.map} +5 -5
  18. package/dist/chunk-c8mwf9cn.js +4 -0
  19. package/dist/{chunk-kaw35ae2.js.map → chunk-c8mwf9cn.js.map} +1 -1
  20. package/dist/{chunk-b7htg03t.js → chunk-dhhmywmb.js} +4 -4
  21. package/dist/{chunk-b7htg03t.js.map → chunk-dhhmywmb.js.map} +1 -1
  22. package/dist/{chunk-x28a37pz.js → chunk-dsa641rq.js} +3 -3
  23. package/dist/{chunk-x28a37pz.js.map → chunk-dsa641rq.js.map} +2 -2
  24. package/dist/{chunk-7rbvcts9.js → chunk-grj9nvte.js} +3 -3
  25. package/dist/{chunk-7rbvcts9.js.map → chunk-grj9nvte.js.map} +1 -1
  26. package/dist/{chunk-tecse0bj.js → chunk-napm4102.js} +3 -3
  27. package/dist/{chunk-tecse0bj.js.map → chunk-napm4102.js.map} +1 -1
  28. package/dist/{chunk-a47dwwv6.js → chunk-nb08g045.js} +3 -3
  29. package/dist/{chunk-sp3dq5hr.js.map → chunk-nb08g045.js.map} +1 -1
  30. package/dist/chunk-npe2r2ge.js +4 -0
  31. package/dist/{chunk-tm5gk51g.js.map → chunk-npe2r2ge.js.map} +1 -1
  32. package/dist/chunk-p9mwkgye.js +4 -0
  33. package/dist/{chunk-s2akss77.js.map → chunk-p9mwkgye.js.map} +14 -12
  34. package/dist/{chunk-b093ajcq.js → chunk-qjp8j8e5.js} +3 -3
  35. package/dist/{chunk-b093ajcq.js.map → chunk-qjp8j8e5.js.map} +1 -1
  36. package/dist/{chunk-71kfnwdp.js → chunk-r1fk1sx9.js} +3 -3
  37. package/dist/{chunk-71kfnwdp.js.map → chunk-r1fk1sx9.js.map} +1 -1
  38. package/dist/{chunk-5xg0xc0g.js → chunk-ta7bqmy3.js} +3 -3
  39. package/dist/{chunk-5xg0xc0g.js.map → chunk-ta7bqmy3.js.map} +1 -1
  40. package/dist/{chunk-545s1tsc.js → chunk-tgvgr630.js} +3 -3
  41. package/dist/{chunk-545s1tsc.js.map → chunk-tgvgr630.js.map} +2 -2
  42. package/dist/{chunk-035dayv6.js → chunk-v8x9ptxs.js} +3 -3
  43. package/dist/{chunk-035dayv6.js.map → chunk-v8x9ptxs.js.map} +1 -1
  44. package/dist/{chunk-mzan0m09.js → chunk-wm89desc.js} +20 -20
  45. package/dist/{chunk-mzan0m09.js.map → chunk-wm89desc.js.map} +12 -10
  46. package/dist/{chunk-a6vcbcyd.js → chunk-wtyhjt5e.js} +3 -3
  47. package/dist/{chunk-a6vcbcyd.js.map → chunk-wtyhjt5e.js.map} +1 -1
  48. package/dist/{chunk-s5a5v0m1.js → chunk-xskdbz15.js} +3 -3
  49. package/dist/{chunk-s5a5v0m1.js.map → chunk-xskdbz15.js.map} +2 -2
  50. package/dist/{chunk-sbebfr50.js → chunk-ytjqb1sd.js} +3 -3
  51. package/dist/{chunk-sbebfr50.js.map → chunk-ytjqb1sd.js.map} +1 -1
  52. package/dist/{chunk-ys51wj1c.js → chunk-zbesf7sy.js} +3 -3
  53. package/dist/{chunk-ys51wj1c.js.map → chunk-zbesf7sy.js.map} +1 -1
  54. package/dist/keepkey/index.js +2 -2
  55. package/dist/keepkey/index.js.map +1 -1
  56. package/dist/ledger/index.cjs +28 -28
  57. package/dist/ledger/index.cjs.map +28 -24
  58. package/dist/ledger/index.js +2 -2
  59. package/dist/ledger/index.js.map +4 -4
  60. package/dist/trezor/index.cjs +2 -2
  61. package/dist/trezor/index.cjs.map +5 -4
  62. package/dist/trezor/index.js +2 -2
  63. package/dist/trezor/index.js.map +3 -3
  64. package/dist/types/ledger/clients/zcash.d.ts.map +1 -1
  65. package/dist/types/trezor/hypercoreSigner.d.ts +22 -0
  66. package/dist/types/trezor/hypercoreSigner.d.ts.map +1 -0
  67. package/dist/types/trezor/index.d.ts +2 -2
  68. package/dist/types/trezor/index.d.ts.map +1 -1
  69. package/package.json +12 -12
  70. package/src/ledger/clients/zcash.ts +16 -6
  71. package/src/ledger/index.ts +2 -2
  72. package/src/trezor/hypercoreSigner.ts +96 -0
  73. package/src/trezor/index.ts +72 -16
  74. package/dist/chunk-42xrtarj.js +0 -4
  75. package/dist/chunk-s2akss77.js +0 -4
  76. package/dist/chunk-sp3dq5hr.js +0 -4
  77. 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;AAqkCD,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;;;;;;;;;;CA+HvB,CAAC;AAEH,eAAO,MAAM,uBAAuB,uaAAyC,CAAC"}
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.6.0",
9
- "@ledgerhq/device-management-kit": "~1.9.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.1",
13
- "@ledgerhq/device-signer-kit-zcash": "~0.7.1",
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.3.0",
31
- "@swapkit/toolboxes": "^6.4.1",
32
- "@swapkit/utxo-signer": "^3.1.1",
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.6.0",
52
- "@ledgerhq/device-management-kit": "1.9.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.1",
56
- "@ledgerhq/device-signer-kit-zcash": "0.7.1",
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.2.0"
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 3.1.0 exports only the Ironwood activation height.
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: toolbox-built transactions keep display-order txids, while
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("@swapkit/utxo-signer");
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 Ironwood target branches",
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: changePath ? parseZcashPath(changePath).fullPath : configuredPath.fullPath,
414
+ changePath: deviceChangePath(changePath ?? configuredPath.fullPath),
405
415
  expiryHeight: uint32LE(tx.expiryHeight),
406
416
  inputs,
407
417
  lockTime: tx.lockTime,
@@ -217,8 +217,8 @@ function getLedgerAccountXpub({ chain, path, signer, xpubVersion }: LedgerAccoun
217
217
  .exhaustive();
218
218
  }
219
219
 
220
- // Toolbox-built transactions keep input txids in display order, the order the UTXO API looks transactions up by,
221
- // while ZcashTransaction.fromBytes (raw API route transactions) keeps them in wire order, so try both. A txid and its
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
+ }
@@ -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 = pczt.clone();
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
- const script = signedInput.script;
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
- function describeZcashSignRequest({ inputs, outputs, ...header }: ZcashTrezorSignRequest) {
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 result = await TrezorConnect.signTransaction({ ...request, coin, overwintered: true } as Parameters<
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: { ...result.payload, chain, derivationPath, request: describeZcashSignRequest(request), signingPath },
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, ZcashVersionGroupId } = await import("@swapkit/utxo-signer");
808
+ const { NETWORKS } = await import("@swapkit/utxo-signer");
753
809
  const address_n = hardenDerivationPath(derivationPath);
754
810
 
755
- const inputs = buildZcashTxInputsForTrezor(tx, [], address_n, hexEncode);
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: 0,
822
+ expiry: tx.expiryHeight,
767
823
  inputs,
768
- locktime: 0,
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,
@@ -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