@ledgerhq/hw-app-btc 10.5.0 → 10.6.0-next.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 (194) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +6 -0
  3. package/README.md +3 -2
  4. package/lib/Btc.d.ts +1 -0
  5. package/lib/Btc.d.ts.map +1 -1
  6. package/lib/Btc.js +35 -41
  7. package/lib/Btc.js.map +1 -1
  8. package/lib/BtcNew.d.ts.map +1 -1
  9. package/lib/BtcNew.js +191 -216
  10. package/lib/BtcNew.js.map +1 -1
  11. package/lib/BtcOld.js +23 -37
  12. package/lib/BtcOld.js.map +1 -1
  13. package/lib/bip32.d.ts +1 -0
  14. package/lib/bip32.d.ts.map +1 -1
  15. package/lib/buffertools.d.ts +1 -0
  16. package/lib/buffertools.d.ts.map +1 -1
  17. package/lib/buffertools.js +3 -3
  18. package/lib/buffertools.js.map +1 -1
  19. package/lib/compressPublicKey.d.ts +1 -0
  20. package/lib/compressPublicKey.d.ts.map +1 -1
  21. package/lib/constants.d.ts +1 -0
  22. package/lib/constants.d.ts.map +1 -1
  23. package/lib/constants.js +3 -1
  24. package/lib/constants.js.map +1 -1
  25. package/lib/createTransaction.d.ts +19 -1
  26. package/lib/createTransaction.d.ts.map +1 -1
  27. package/lib/createTransaction.js +273 -245
  28. package/lib/createTransaction.js.map +1 -1
  29. package/lib/finalizeInput.d.ts +1 -0
  30. package/lib/finalizeInput.d.ts.map +1 -1
  31. package/lib/finalizeInput.js +18 -29
  32. package/lib/finalizeInput.js.map +1 -1
  33. package/lib/getAppAndVersion.d.ts +1 -0
  34. package/lib/getAppAndVersion.d.ts.map +1 -1
  35. package/lib/getAppAndVersion.js +6 -15
  36. package/lib/getAppAndVersion.js.map +1 -1
  37. package/lib/getTrustedInput.d.ts +1 -0
  38. package/lib/getTrustedInput.d.ts.map +1 -1
  39. package/lib/getTrustedInput.js +83 -96
  40. package/lib/getTrustedInput.js.map +1 -1
  41. package/lib/getWalletPublicKey.js +27 -34
  42. package/lib/getWalletPublicKey.js.map +1 -1
  43. package/lib/hashPublicKey.d.ts +1 -0
  44. package/lib/hashPublicKey.d.ts.map +1 -1
  45. package/lib/newops/accounttype.d.ts +1 -0
  46. package/lib/newops/accounttype.d.ts.map +1 -1
  47. package/lib/newops/accounttype.js +2 -0
  48. package/lib/newops/accounttype.js.map +1 -1
  49. package/lib/newops/appClient.d.ts +1 -0
  50. package/lib/newops/appClient.d.ts.map +1 -1
  51. package/lib/newops/appClient.js +90 -110
  52. package/lib/newops/appClient.js.map +1 -1
  53. package/lib/newops/clientCommands.d.ts +1 -0
  54. package/lib/newops/clientCommands.d.ts.map +1 -1
  55. package/lib/newops/clientCommands.js +18 -10
  56. package/lib/newops/clientCommands.js.map +1 -1
  57. package/lib/newops/merkelizedPsbt.d.ts +1 -0
  58. package/lib/newops/merkelizedPsbt.d.ts.map +1 -1
  59. package/lib/newops/merkelizedPsbt.js +5 -2
  60. package/lib/newops/merkelizedPsbt.js.map +1 -1
  61. package/lib/newops/merkle.d.ts +1 -0
  62. package/lib/newops/merkle.d.ts.map +1 -1
  63. package/lib/newops/merkle.js +8 -0
  64. package/lib/newops/merkle.js.map +1 -1
  65. package/lib/newops/merkleMap.d.ts +1 -0
  66. package/lib/newops/merkleMap.d.ts.map +1 -1
  67. package/lib/newops/merkleMap.js +4 -0
  68. package/lib/newops/merkleMap.js.map +1 -1
  69. package/lib/newops/policy.d.ts +1 -0
  70. package/lib/newops/policy.d.ts.map +1 -1
  71. package/lib/newops/policy.js +2 -0
  72. package/lib/newops/policy.js.map +1 -1
  73. package/lib/newops/psbtExtractor.d.ts +1 -0
  74. package/lib/newops/psbtExtractor.d.ts.map +1 -1
  75. package/lib/newops/psbtExtractor.js +2 -3
  76. package/lib/newops/psbtExtractor.js.map +1 -1
  77. package/lib/newops/psbtv2.d.ts +1 -0
  78. package/lib/newops/psbtv2.d.ts.map +1 -1
  79. package/lib/newops/psbtv2.js +10 -10
  80. package/lib/newops/psbtv2.js.map +1 -1
  81. package/lib/serializeTransaction.d.ts +1 -0
  82. package/lib/serializeTransaction.d.ts.map +1 -1
  83. package/lib/signMessage.js +38 -49
  84. package/lib/signMessage.js.map +1 -1
  85. package/lib/signP2SHTransaction.js +72 -83
  86. package/lib/signP2SHTransaction.js.map +1 -1
  87. package/lib/signTransaction.d.ts +1 -0
  88. package/lib/signTransaction.d.ts.map +1 -1
  89. package/lib/startUntrustedHashTransactionInput.d.ts +1 -0
  90. package/lib/startUntrustedHashTransactionInput.d.ts.map +1 -1
  91. package/lib/startUntrustedHashTransactionInput.js +52 -63
  92. package/lib/startUntrustedHashTransactionInput.js.map +1 -1
  93. package/lib/types.d.ts +1 -0
  94. package/lib/types.d.ts.map +1 -1
  95. package/lib/varint.d.ts +1 -0
  96. package/lib/varint.d.ts.map +1 -1
  97. package/lib-es/Btc.d.ts +1 -0
  98. package/lib-es/Btc.d.ts.map +1 -1
  99. package/lib-es/Btc.js +35 -41
  100. package/lib-es/Btc.js.map +1 -1
  101. package/lib-es/BtcNew.d.ts.map +1 -1
  102. package/lib-es/BtcNew.js +191 -216
  103. package/lib-es/BtcNew.js.map +1 -1
  104. package/lib-es/BtcOld.js +23 -37
  105. package/lib-es/BtcOld.js.map +1 -1
  106. package/lib-es/bip32.d.ts +1 -0
  107. package/lib-es/bip32.d.ts.map +1 -1
  108. package/lib-es/buffertools.d.ts +1 -0
  109. package/lib-es/buffertools.d.ts.map +1 -1
  110. package/lib-es/buffertools.js +3 -3
  111. package/lib-es/buffertools.js.map +1 -1
  112. package/lib-es/compressPublicKey.d.ts +1 -0
  113. package/lib-es/compressPublicKey.d.ts.map +1 -1
  114. package/lib-es/constants.d.ts +1 -0
  115. package/lib-es/constants.d.ts.map +1 -1
  116. package/lib-es/constants.js +2 -0
  117. package/lib-es/constants.js.map +1 -1
  118. package/lib-es/createTransaction.d.ts +19 -1
  119. package/lib-es/createTransaction.d.ts.map +1 -1
  120. package/lib-es/createTransaction.js +272 -245
  121. package/lib-es/createTransaction.js.map +1 -1
  122. package/lib-es/finalizeInput.d.ts +1 -0
  123. package/lib-es/finalizeInput.d.ts.map +1 -1
  124. package/lib-es/finalizeInput.js +18 -29
  125. package/lib-es/finalizeInput.js.map +1 -1
  126. package/lib-es/getAppAndVersion.d.ts +1 -0
  127. package/lib-es/getAppAndVersion.d.ts.map +1 -1
  128. package/lib-es/getAppAndVersion.js +6 -15
  129. package/lib-es/getAppAndVersion.js.map +1 -1
  130. package/lib-es/getTrustedInput.d.ts +1 -0
  131. package/lib-es/getTrustedInput.d.ts.map +1 -1
  132. package/lib-es/getTrustedInput.js +83 -96
  133. package/lib-es/getTrustedInput.js.map +1 -1
  134. package/lib-es/getWalletPublicKey.js +27 -34
  135. package/lib-es/getWalletPublicKey.js.map +1 -1
  136. package/lib-es/hashPublicKey.d.ts +1 -0
  137. package/lib-es/hashPublicKey.d.ts.map +1 -1
  138. package/lib-es/newops/accounttype.d.ts +1 -0
  139. package/lib-es/newops/accounttype.d.ts.map +1 -1
  140. package/lib-es/newops/accounttype.js +2 -0
  141. package/lib-es/newops/accounttype.js.map +1 -1
  142. package/lib-es/newops/appClient.d.ts +1 -0
  143. package/lib-es/newops/appClient.d.ts.map +1 -1
  144. package/lib-es/newops/appClient.js +90 -110
  145. package/lib-es/newops/appClient.js.map +1 -1
  146. package/lib-es/newops/clientCommands.d.ts +1 -0
  147. package/lib-es/newops/clientCommands.d.ts.map +1 -1
  148. package/lib-es/newops/clientCommands.js +18 -10
  149. package/lib-es/newops/clientCommands.js.map +1 -1
  150. package/lib-es/newops/merkelizedPsbt.d.ts +1 -0
  151. package/lib-es/newops/merkelizedPsbt.d.ts.map +1 -1
  152. package/lib-es/newops/merkelizedPsbt.js +5 -2
  153. package/lib-es/newops/merkelizedPsbt.js.map +1 -1
  154. package/lib-es/newops/merkle.d.ts +1 -0
  155. package/lib-es/newops/merkle.d.ts.map +1 -1
  156. package/lib-es/newops/merkle.js +8 -0
  157. package/lib-es/newops/merkle.js.map +1 -1
  158. package/lib-es/newops/merkleMap.d.ts +1 -0
  159. package/lib-es/newops/merkleMap.d.ts.map +1 -1
  160. package/lib-es/newops/merkleMap.js +4 -0
  161. package/lib-es/newops/merkleMap.js.map +1 -1
  162. package/lib-es/newops/policy.d.ts +1 -0
  163. package/lib-es/newops/policy.d.ts.map +1 -1
  164. package/lib-es/newops/policy.js +2 -0
  165. package/lib-es/newops/policy.js.map +1 -1
  166. package/lib-es/newops/psbtExtractor.d.ts +1 -0
  167. package/lib-es/newops/psbtExtractor.d.ts.map +1 -1
  168. package/lib-es/newops/psbtExtractor.js +2 -3
  169. package/lib-es/newops/psbtExtractor.js.map +1 -1
  170. package/lib-es/newops/psbtv2.d.ts +1 -0
  171. package/lib-es/newops/psbtv2.d.ts.map +1 -1
  172. package/lib-es/newops/psbtv2.js +10 -10
  173. package/lib-es/newops/psbtv2.js.map +1 -1
  174. package/lib-es/serializeTransaction.d.ts +1 -0
  175. package/lib-es/serializeTransaction.d.ts.map +1 -1
  176. package/lib-es/signMessage.js +38 -49
  177. package/lib-es/signMessage.js.map +1 -1
  178. package/lib-es/signP2SHTransaction.js +72 -83
  179. package/lib-es/signP2SHTransaction.js.map +1 -1
  180. package/lib-es/signTransaction.d.ts +1 -0
  181. package/lib-es/signTransaction.d.ts.map +1 -1
  182. package/lib-es/startUntrustedHashTransactionInput.d.ts +1 -0
  183. package/lib-es/startUntrustedHashTransactionInput.d.ts.map +1 -1
  184. package/lib-es/startUntrustedHashTransactionInput.js +52 -63
  185. package/lib-es/startUntrustedHashTransactionInput.js.map +1 -1
  186. package/lib-es/types.d.ts +1 -0
  187. package/lib-es/types.d.ts.map +1 -1
  188. package/lib-es/varint.d.ts +1 -0
  189. package/lib-es/varint.d.ts.map +1 -1
  190. package/package.json +5 -4
  191. package/src/BtcNew.ts +7 -1
  192. package/src/constants.ts +3 -0
  193. package/src/createTransaction.ts +68 -5
  194. package/tests/createTransaction.test.ts +225 -0
package/lib-es/BtcNew.js CHANGED
@@ -1,12 +1,3 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
1
  import { crypto } from "bitcoinjs-lib";
11
2
  import { pointCompress } from "tiny-secp256k1";
12
3
  import { getXpubComponents, hardenedPathOf, pathArrayToString, pathStringToArray, pubkeyFromXpub, } from "./bip32";
@@ -33,6 +24,7 @@ import { serializeTransaction } from "./serializeTransaction";
33
24
  *
34
25
  */
35
26
  export default class BtcNew {
27
+ client;
36
28
  constructor(client) {
37
29
  this.client = client;
38
30
  }
@@ -66,16 +58,14 @@ export default class BtcNew {
66
58
  *
67
59
  * We opted for adding a new function, which can greatly simplify client code.
68
60
  */
69
- getWalletXpub(_a) {
70
- return __awaiter(this, arguments, void 0, function* ({ path, xpubVersion, }) {
71
- const pathElements = pathStringToArray(path);
72
- const xpub = yield this.client.getExtendedPubkey(false, pathElements);
73
- const xpubComponents = getXpubComponents(xpub);
74
- if (xpubComponents.version != xpubVersion) {
75
- throw new Error(`Expected xpub version ${xpubVersion} doesn't match the xpub version from the device ${xpubComponents.version}`);
76
- }
77
- return xpub;
78
- });
61
+ async getWalletXpub({ path, xpubVersion, }) {
62
+ const pathElements = pathStringToArray(path);
63
+ const xpub = await this.client.getExtendedPubkey(false, pathElements);
64
+ const xpubComponents = getXpubComponents(xpub);
65
+ if (xpubComponents.version != xpubVersion) {
66
+ throw new Error(`Expected xpub version ${xpubVersion} doesn't match the xpub version from the device ${xpubComponents.version}`);
67
+ }
68
+ return xpub;
79
69
  }
80
70
  /**
81
71
  * This method returns a public key, a bitcoin address, and and a chaincode
@@ -84,24 +74,21 @@ export default class BtcNew {
84
74
  * Limitation: If the path is not a leaf node of a standard path, the address
85
75
  * will be the empty string "", see this.getWalletAddress() for details.
86
76
  */
87
- getWalletPublicKey(path, opts) {
88
- return __awaiter(this, void 0, void 0, function* () {
89
- var _a, _b;
90
- if (!isPathNormal(path)) {
91
- throw Error(`non-standard path: ${path}`);
92
- }
93
- const pathElements = pathStringToArray(path);
94
- const xpub = yield this.client.getExtendedPubkey(false, pathElements);
95
- const display = (_a = opts === null || opts === void 0 ? void 0 : opts.verify) !== null && _a !== void 0 ? _a : false;
96
- const address = yield this.getWalletAddress(pathElements, descrTemplFrom((_b = opts === null || opts === void 0 ? void 0 : opts.format) !== null && _b !== void 0 ? _b : "legacy"), display);
97
- const components = getXpubComponents(xpub);
98
- const uncompressedPubkey = Buffer.from(pointCompress(components.pubkey, false));
99
- return {
100
- publicKey: uncompressedPubkey.toString("hex"),
101
- bitcoinAddress: address,
102
- chainCode: components.chaincode.toString("hex"),
103
- };
104
- });
77
+ async getWalletPublicKey(path, opts) {
78
+ if (!isPathNormal(path)) {
79
+ throw Error(`non-standard path: ${path}`);
80
+ }
81
+ const pathElements = pathStringToArray(path);
82
+ const xpub = await this.client.getExtendedPubkey(false, pathElements);
83
+ const display = opts?.verify ?? false;
84
+ const address = await this.getWalletAddress(pathElements, descrTemplFrom(opts?.format ?? "legacy"), display);
85
+ const components = getXpubComponents(xpub);
86
+ const uncompressedPubkey = Buffer.from(pointCompress(components.pubkey, false));
87
+ return {
88
+ publicKey: uncompressedPubkey.toString("hex"),
89
+ bitcoinAddress: address,
90
+ chainCode: components.chaincode.toString("hex"),
91
+ };
105
92
  }
106
93
  /**
107
94
  * Get an address for the specified path.
@@ -118,18 +105,16 @@ export default class BtcNew {
118
105
  * way to get the address from the device. In this case we have to create it
119
106
  * ourselves, but we don't at this time, and instead return an empty ("") address.
120
107
  */
121
- getWalletAddress(pathElements, descrTempl, display) {
122
- return __awaiter(this, void 0, void 0, function* () {
123
- const accountPath = hardenedPathOf(pathElements);
124
- if (accountPath.length + 2 != pathElements.length) {
125
- return "";
126
- }
127
- const accountXpub = yield this.client.getExtendedPubkey(false, accountPath);
128
- const masterFingerprint = yield this.client.getMasterFingerprint();
129
- const policy = new WalletPolicy(descrTempl, createKey(masterFingerprint, accountPath, accountXpub));
130
- const changeAndIndex = pathElements.slice(-2, pathElements.length);
131
- return this.client.getWalletAddress(policy, Buffer.alloc(32, 0), changeAndIndex[0], changeAndIndex[1], display);
132
- });
108
+ async getWalletAddress(pathElements, descrTempl, display) {
109
+ const accountPath = hardenedPathOf(pathElements);
110
+ if (accountPath.length + 2 != pathElements.length) {
111
+ return "";
112
+ }
113
+ const accountXpub = await this.client.getExtendedPubkey(false, accountPath);
114
+ const masterFingerprint = await this.client.getMasterFingerprint();
115
+ const policy = new WalletPolicy(descrTempl, createKey(masterFingerprint, accountPath, accountXpub));
116
+ const changeAndIndex = pathElements.slice(-2, pathElements.length);
117
+ return this.client.getWalletAddress(policy, Buffer.alloc(32, 0), changeAndIndex[0], changeAndIndex[1], display);
133
118
  }
134
119
  /**
135
120
  * Build and sign a transaction. See Btc.createPaymentTransaction for
@@ -139,116 +124,112 @@ export default class BtcNew {
139
124
  * a psbt which is finally signed and finalized, and the extracted fully signed
140
125
  * transaction is returned.
141
126
  */
142
- createPaymentTransaction(arg) {
143
- return __awaiter(this, void 0, void 0, function* () {
144
- const inputCount = arg.inputs.length;
145
- if (inputCount == 0) {
146
- throw Error("No inputs");
147
- }
148
- const psbt = new PsbtV2();
149
- // The master fingerprint is needed when adding BIP32 derivation paths on
150
- // the psbt.
151
- const masterFp = yield this.client.getMasterFingerprint();
152
- const accountType = accountTypeFromArg(arg, psbt, masterFp);
153
- if (arg.lockTime != undefined) {
154
- // The signer will assume locktime 0 if unset
155
- psbt.setGlobalFallbackLocktime(arg.lockTime);
156
- }
157
- psbt.setGlobalInputCount(inputCount);
158
- psbt.setGlobalPsbtVersion(2);
159
- psbt.setGlobalTxVersion(2);
160
- let notifyCount = 0;
161
- const progress = () => {
162
- if (!arg.onDeviceStreaming)
163
- return;
164
- arg.onDeviceStreaming({
165
- total: 2 * inputCount,
166
- index: notifyCount,
167
- progress: ++notifyCount / (2 * inputCount),
168
- });
169
- };
170
- let accountXpub = "";
171
- let accountPath = [];
172
- for (let i = 0; i < inputCount; i++) {
173
- progress();
174
- const pathElems = pathStringToArray(arg.associatedKeysets[i]);
175
- if (accountXpub == "") {
176
- // We assume all inputs belong to the same account so we set
177
- // the account xpub and path based on the first input.
178
- accountPath = pathElems.slice(0, -2);
179
- accountXpub = yield this.client.getExtendedPubkey(false, accountPath);
180
- }
181
- yield this.setInput(psbt, i, arg.inputs[i], pathElems, accountType, masterFp, arg.sigHashType);
127
+ async createPaymentTransaction(arg) {
128
+ const inputCount = arg.inputs.length;
129
+ if (inputCount == 0) {
130
+ throw Error("No inputs");
131
+ }
132
+ const psbt = new PsbtV2();
133
+ // The master fingerprint is needed when adding BIP32 derivation paths on
134
+ // the psbt.
135
+ const masterFp = await this.client.getMasterFingerprint();
136
+ const accountType = accountTypeFromArg(arg, psbt, masterFp);
137
+ if (arg.lockTime != undefined) {
138
+ // The signer will assume locktime 0 if unset
139
+ psbt.setGlobalFallbackLocktime(arg.lockTime);
140
+ }
141
+ psbt.setGlobalInputCount(inputCount);
142
+ psbt.setGlobalPsbtVersion(2);
143
+ psbt.setGlobalTxVersion(2);
144
+ let notifyCount = 0;
145
+ const progress = () => {
146
+ if (!arg.onDeviceStreaming)
147
+ return;
148
+ arg.onDeviceStreaming({
149
+ total: 2 * inputCount,
150
+ index: notifyCount,
151
+ progress: ++notifyCount / (2 * inputCount),
152
+ });
153
+ };
154
+ let accountXpub = "";
155
+ let accountPath = [];
156
+ for (let i = 0; i < inputCount; i++) {
157
+ progress();
158
+ const pathElems = pathStringToArray(arg.associatedKeysets[i]);
159
+ if (accountXpub == "") {
160
+ // We assume all inputs belong to the same account so we set
161
+ // the account xpub and path based on the first input.
162
+ accountPath = pathElems.slice(0, -2);
163
+ accountXpub = await this.client.getExtendedPubkey(false, accountPath);
182
164
  }
183
- const outputsConcat = Buffer.from(arg.outputScriptHex, "hex");
184
- const outputsBufferReader = new BufferReader(outputsConcat);
185
- const outputCount = outputsBufferReader.readVarInt();
186
- psbt.setGlobalOutputCount(outputCount);
187
- const changeData = yield this.outputScriptAt(accountPath, accountType, arg.changePath);
188
- // If the caller supplied a changePath, we must make sure there actually is
189
- // a change output. If no change output found, we'll throw an error.
190
- let changeFound = !changeData;
191
- for (let i = 0; i < outputCount; i++) {
192
- const amount = Number(outputsBufferReader.readUInt64());
193
- const outputScript = outputsBufferReader.readVarSlice();
194
- psbt.setOutputAmount(i, amount);
195
- psbt.setOutputScript(i, outputScript);
196
- // We won't know if we're paying to ourselves, because there's no
197
- // information in arg to support multiple "change paths". One exception is
198
- // if there are multiple outputs to the change address.
199
- const isChange = changeData && outputScript.equals(changeData === null || changeData === void 0 ? void 0 : changeData.cond.scriptPubKey);
200
- if (isChange) {
201
- changeFound = true;
202
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
203
- const changePath = pathStringToArray(arg.changePath);
204
- const pubkey = changeData.pubkey;
205
- accountType.setOwnOutput(i, changeData.cond, [pubkey], [changePath]);
206
- }
165
+ await this.setInput(psbt, i, arg.inputs[i], pathElems, accountType, masterFp, arg.sigHashType);
166
+ }
167
+ const outputsConcat = Buffer.from(arg.outputScriptHex, "hex");
168
+ const outputsBufferReader = new BufferReader(outputsConcat);
169
+ const outputCount = outputsBufferReader.readVarInt();
170
+ psbt.setGlobalOutputCount(outputCount);
171
+ const changeData = await this.outputScriptAt(accountPath, accountType, arg.changePath);
172
+ // If the caller supplied a changePath, we must make sure there actually is
173
+ // a change output. If no change output found, we'll throw an error.
174
+ let changeFound = !changeData;
175
+ for (let i = 0; i < outputCount; i++) {
176
+ const amount = Number(outputsBufferReader.readUInt64());
177
+ const outputScript = outputsBufferReader.readVarSlice();
178
+ psbt.setOutputAmount(i, amount);
179
+ psbt.setOutputScript(i, outputScript);
180
+ // We won't know if we're paying to ourselves, because there's no
181
+ // information in arg to support multiple "change paths". One exception is
182
+ // if there are multiple outputs to the change address.
183
+ const isChange = changeData && outputScript.equals(changeData?.cond.scriptPubKey);
184
+ if (isChange) {
185
+ changeFound = true;
186
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
187
+ const changePath = pathStringToArray(arg.changePath);
188
+ const pubkey = changeData.pubkey;
189
+ accountType.setOwnOutput(i, changeData.cond, [pubkey], [changePath]);
207
190
  }
208
- if (!changeFound) {
209
- throw new Error("Change script not found among outputs! " + (changeData === null || changeData === void 0 ? void 0 : changeData.cond.scriptPubKey.toString("hex")));
191
+ }
192
+ if (!changeFound) {
193
+ throw new Error("Change script not found among outputs! " + changeData?.cond.scriptPubKey.toString("hex"));
194
+ }
195
+ const key = createKey(masterFp, accountPath, accountXpub);
196
+ const p = new WalletPolicy(accountType.getDescriptorTemplate(), key);
197
+ // This is cheating, because it's not actually requested on the
198
+ // device yet, but it will be, soonish.
199
+ if (arg.onDeviceSignatureRequested)
200
+ arg.onDeviceSignatureRequested();
201
+ let firstSigned = false;
202
+ // This callback will be called once for each signature yielded.
203
+ const progressCallback = () => {
204
+ if (!firstSigned) {
205
+ firstSigned = true;
206
+ arg.onDeviceSignatureGranted && arg.onDeviceSignatureGranted();
210
207
  }
211
- const key = createKey(masterFp, accountPath, accountXpub);
212
- const p = new WalletPolicy(accountType.getDescriptorTemplate(), key);
213
- // This is cheating, because it's not actually requested on the
214
- // device yet, but it will be, soonish.
215
- if (arg.onDeviceSignatureRequested)
216
- arg.onDeviceSignatureRequested();
217
- let firstSigned = false;
218
- // This callback will be called once for each signature yielded.
219
- const progressCallback = () => {
220
- if (!firstSigned) {
221
- firstSigned = true;
222
- arg.onDeviceSignatureGranted && arg.onDeviceSignatureGranted();
223
- }
224
- progress();
225
- };
226
- yield this.signPsbt(psbt, p, progressCallback);
227
- finalize(psbt);
228
- const serializedTx = extract(psbt);
229
- return serializedTx.toString("hex");
230
- });
208
+ progress();
209
+ };
210
+ await this.signPsbt(psbt, p, progressCallback);
211
+ finalize(psbt);
212
+ const serializedTx = extract(psbt);
213
+ return serializedTx.toString("hex");
231
214
  }
232
215
  /**
233
216
  * Signs an arbitrary hex-formatted message with the private key at
234
217
  * the provided derivation path according to the Bitcoin Signature format
235
218
  * and returns v, r, s.
236
219
  */
237
- signMessage(_a) {
238
- return __awaiter(this, arguments, void 0, function* ({ path, messageHex }) {
239
- const pathElements = pathStringToArray(path);
240
- const message = Buffer.from(messageHex, "hex");
241
- const sig = yield this.client.signMessage(message, pathElements);
242
- const buf = Buffer.from(sig, "base64");
243
- const v = buf.readUInt8() - 27 - 4;
244
- const r = buf.slice(1, 33).toString("hex");
245
- const s = buf.slice(33, 65).toString("hex");
246
- return {
247
- v,
248
- r,
249
- s,
250
- };
251
- });
220
+ async signMessage({ path, messageHex }) {
221
+ const pathElements = pathStringToArray(path);
222
+ const message = Buffer.from(messageHex, "hex");
223
+ const sig = await this.client.signMessage(message, pathElements);
224
+ const buf = Buffer.from(sig, "base64");
225
+ const v = buf.readUInt8() - 27 - 4;
226
+ const r = buf.slice(1, 33).toString("hex");
227
+ const s = buf.slice(33, 65).toString("hex");
228
+ return {
229
+ v,
230
+ r,
231
+ s,
232
+ };
252
233
  }
253
234
  /**
254
235
  * Calculates an output script along with public key and possible redeemScript
@@ -258,59 +239,55 @@ export default class BtcNew {
258
239
  * wrapped p2wpkh), and pubkey at provided path. The values of these three
259
240
  * properties depend on the accountType used.
260
241
  */
261
- outputScriptAt(accountPath, accountType, path) {
262
- return __awaiter(this, void 0, void 0, function* () {
263
- if (!path)
264
- return undefined;
265
- const pathElems = pathStringToArray(path);
266
- // Make sure path is in our account, otherwise something fishy is probably
267
- // going on.
268
- for (let i = 0; i < accountPath.length; i++) {
269
- if (accountPath[i] != pathElems[i]) {
270
- throw new Error(`Path ${path} not in account ${pathArrayToString(accountPath)}`);
271
- }
242
+ async outputScriptAt(accountPath, accountType, path) {
243
+ if (!path)
244
+ return undefined;
245
+ const pathElems = pathStringToArray(path);
246
+ // Make sure path is in our account, otherwise something fishy is probably
247
+ // going on.
248
+ for (let i = 0; i < accountPath.length; i++) {
249
+ if (accountPath[i] != pathElems[i]) {
250
+ throw new Error(`Path ${path} not in account ${pathArrayToString(accountPath)}`);
272
251
  }
273
- const xpub = yield this.client.getExtendedPubkey(false, pathElems);
274
- const pubkey = pubkeyFromXpub(xpub);
275
- const cond = accountType.spendingCondition([pubkey]);
276
- return { cond, pubkey };
277
- });
252
+ }
253
+ const xpub = await this.client.getExtendedPubkey(false, pathElems);
254
+ const pubkey = pubkeyFromXpub(xpub);
255
+ const cond = accountType.spendingCondition([pubkey]);
256
+ return { cond, pubkey };
278
257
  }
279
258
  /**
280
259
  * Adds relevant data about an input to the psbt. This includes sequence,
281
260
  * previous txid, output index, spent UTXO, redeem script for wrapped p2wpkh,
282
261
  * public key and its derivation path.
283
262
  */
284
- setInput(psbt, i, input, pathElements, accountType, masterFP, sigHashType) {
285
- return __awaiter(this, void 0, void 0, function* () {
286
- const inputTx = input[0];
287
- const spentOutputIndex = input[1];
288
- // redeemScript will be null for wrapped p2wpkh, we need to create it
289
- // ourselves. But if set, it should be used.
290
- const redeemScript = input[2] ? Buffer.from(input[2], "hex") : undefined;
291
- const sequence = input[3];
292
- if (sequence != undefined) {
293
- psbt.setInputSequence(i, sequence);
294
- }
295
- if (sigHashType != undefined) {
296
- psbt.setInputSighashType(i, sigHashType);
297
- }
298
- const inputTxBuffer = serializeTransaction(inputTx, true);
299
- const inputTxid = crypto.hash256(inputTxBuffer);
300
- const xpubBase58 = yield this.client.getExtendedPubkey(false, pathElements);
301
- const pubkey = pubkeyFromXpub(xpubBase58);
302
- if (!inputTx.outputs)
303
- throw Error("Missing outputs array in transaction to sign");
304
- const spentTxOutput = inputTx.outputs[spentOutputIndex];
305
- const spendCondition = {
306
- scriptPubKey: spentTxOutput.script,
307
- redeemScript: redeemScript,
308
- };
309
- const spentOutput = { cond: spendCondition, amount: spentTxOutput.amount };
310
- accountType.setInput(i, inputTxBuffer, spentOutput, [pubkey], [pathElements]);
311
- psbt.setInputPreviousTxId(i, inputTxid);
312
- psbt.setInputOutputIndex(i, spentOutputIndex);
313
- });
263
+ async setInput(psbt, i, input, pathElements, accountType, masterFP, sigHashType) {
264
+ const inputTx = input[0];
265
+ const spentOutputIndex = input[1];
266
+ // redeemScript will be null for wrapped p2wpkh, we need to create it
267
+ // ourselves. But if set, it should be used.
268
+ const redeemScript = input[2] ? Buffer.from(input[2], "hex") : undefined;
269
+ const sequence = input[3];
270
+ if (sequence != undefined) {
271
+ psbt.setInputSequence(i, sequence);
272
+ }
273
+ if (sigHashType != undefined) {
274
+ psbt.setInputSighashType(i, sigHashType);
275
+ }
276
+ const inputTxBuffer = serializeTransaction(inputTx, true);
277
+ const inputTxid = crypto.hash256(inputTxBuffer);
278
+ const xpubBase58 = await this.client.getExtendedPubkey(false, pathElements);
279
+ const pubkey = pubkeyFromXpub(xpubBase58);
280
+ if (!inputTx.outputs)
281
+ throw Error("Missing outputs array in transaction to sign");
282
+ const spentTxOutput = inputTx.outputs[spentOutputIndex];
283
+ const spendCondition = {
284
+ scriptPubKey: spentTxOutput.script,
285
+ redeemScript: redeemScript,
286
+ };
287
+ const spentOutput = { cond: spendCondition, amount: spentTxOutput.amount };
288
+ accountType.setInput(i, inputTxBuffer, spentOutput, [pubkey], [pathElements]);
289
+ psbt.setInputPreviousTxId(i, inputTxid);
290
+ psbt.setInputOutputIndex(i, spentOutputIndex);
314
291
  }
315
292
  /**
316
293
  * This implements the "Signer" role of the BIP370 transaction signing
@@ -321,27 +298,25 @@ export default class BtcNew {
321
298
  * comment in-line. The signatures returned from the hardware device is added
322
299
  * to the appropriate input fields of the PSBT.
323
300
  */
324
- signPsbt(psbt, walletPolicy, progressCallback) {
325
- return __awaiter(this, void 0, void 0, function* () {
326
- const sigs = yield this.client.signPsbt(psbt, walletPolicy, Buffer.alloc(32, 0), progressCallback);
327
- sigs.forEach((v, k) => {
328
- // Note: Looking at BIP32 derivation does not work in the generic case,
329
- // since some inputs might not have a BIP32-derived pubkey.
330
- const pubkeys = psbt.getInputKeyDatas(k, psbtIn.BIP32_DERIVATION);
331
- let pubkey;
332
- if (pubkeys.length != 1) {
333
- // No legacy BIP32_DERIVATION, assume we're using taproot.
334
- pubkey = psbt.getInputKeyDatas(k, psbtIn.TAP_BIP32_DERIVATION);
335
- if (pubkey.length == 0) {
336
- throw Error(`Missing pubkey derivation for input ${k}`);
337
- }
338
- psbt.setInputTapKeySig(k, v);
339
- }
340
- else {
341
- pubkey = pubkeys[0];
342
- psbt.setInputPartialSig(k, pubkey, v);
301
+ async signPsbt(psbt, walletPolicy, progressCallback) {
302
+ const sigs = await this.client.signPsbt(psbt, walletPolicy, Buffer.alloc(32, 0), progressCallback);
303
+ sigs.forEach((v, k) => {
304
+ // Note: Looking at BIP32 derivation does not work in the generic case,
305
+ // since some inputs might not have a BIP32-derived pubkey.
306
+ const pubkeys = psbt.getInputKeyDatas(k, psbtIn.BIP32_DERIVATION);
307
+ let pubkey;
308
+ if (pubkeys.length != 1) {
309
+ // No legacy BIP32_DERIVATION, assume we're using taproot.
310
+ pubkey = psbt.getInputKeyDatas(k, psbtIn.TAP_BIP32_DERIVATION);
311
+ if (pubkey.length == 0) {
312
+ throw Error(`Missing pubkey derivation for input ${k}`);
343
313
  }
344
- });
314
+ psbt.setInputTapKeySig(k, v);
315
+ }
316
+ else {
317
+ pubkey = pubkeys[0];
318
+ psbt.setInputPartialSig(k, pubkey, v);
319
+ }
345
320
  });
346
321
  }
347
322
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BtcNew.js","sourceRoot":"","sources":["../src/BtcNew.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAEL,KAAK,EACL,IAAI,EACJ,MAAM,EACN,aAAa,GAEd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,SAAS,EAA6B,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,aAAa;6DAAC,EAClB,IAAI,EACJ,WAAW,GAIZ;YACC,MAAM,YAAY,GAAa,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACtE,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAI,cAAc,CAAC,OAAO,IAAI,WAAW,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,yBAAyB,WAAW,mDAAmD,cAAc,CAAC,OAAO,EAAE,CAChH,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED;;;;;;OAMG;IACG,kBAAkB,CACtB,IAAY,EACZ,IAGC;;;YAMD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,YAAY,GAAa,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAEtE,MAAM,OAAO,GAAG,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,mCAAI,KAAK,CAAC;YAEtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CACzC,YAAY,EACZ,cAAc,CAAC,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,mCAAI,QAAQ,CAAC,EACxC,OAAO,CACR,CAAC;YACF,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAChF,OAAO;gBACL,SAAS,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC7C,cAAc,EAAE,OAAO;gBACvB,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;aAChD,CAAC;QACJ,CAAC;KAAA;IAED;;;;;;;;;;;;;;OAcG;IACW,gBAAgB,CAC5B,YAAsB,EACtB,UAAqC,EACrC,OAAgB;;YAEhB,MAAM,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBAClD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC5E,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACnE,MAAM,MAAM,GAAG,IAAI,YAAY,CAC7B,UAAU,EACV,SAAS,CAAC,iBAAiB,EAAE,WAAW,EAAE,WAAW,CAAC,CACvD,CAAC;YACF,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CACjC,MAAM,EACN,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EACnB,cAAc,CAAC,CAAC,CAAC,EACjB,cAAc,CAAC,CAAC,CAAC,EACjB,OAAO,CACR,CAAC;QACJ,CAAC;KAAA;IAED;;;;;;;OAOG;IACG,wBAAwB,CAAC,GAAyB;;YACtD,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YACrC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;gBACpB,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YAC1B,yEAAyE;YACzE,YAAY;YACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAE1D,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAE5D,IAAI,GAAG,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC9B,6CAA6C;gBAC7C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACpB,IAAI,CAAC,GAAG,CAAC,iBAAiB;oBAAE,OAAO;gBACnC,GAAG,CAAC,iBAAiB,CAAC;oBACpB,KAAK,EAAE,CAAC,GAAG,UAAU;oBACrB,KAAK,EAAE,WAAW;oBAClB,QAAQ,EAAE,EAAE,WAAW,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;iBAC3C,CAAC,CAAC;YACL,CAAC,CAAC;YAEF,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,WAAW,GAAa,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACpC,QAAQ,EAAE,CAAC;gBACX,MAAM,SAAS,GAAa,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxE,IAAI,WAAW,IAAI,EAAE,EAAE,CAAC;oBACtB,4DAA4D;oBAC5D,sDAAsD;oBACtD,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACrC,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,IAAI,CAAC,QAAQ,CACjB,IAAI,EACJ,CAAC,EACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EACb,SAAS,EACT,WAAW,EACX,QAAQ,EACR,GAAG,CAAC,WAAW,CAChB,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YAC9D,MAAM,mBAAmB,GAAG,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,EAAE,CAAC;YACrD,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;YACvF,2EAA2E;YAC3E,oEAAoE;YACpE,IAAI,WAAW,GAAG,CAAC,UAAU,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxD,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,EAAE,CAAC;gBACxD,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBAEtC,iEAAiE;gBACjE,0EAA0E;gBAC1E,uDAAuD;gBACvD,MAAM,QAAQ,GAAG,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBAClF,IAAI,QAAQ,EAAE,CAAC;oBACb,WAAW,GAAG,IAAI,CAAC;oBACnB,oEAAoE;oBACpE,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAW,CAAC,CAAC;oBACtD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;oBAEjC,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA,CAC1F,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAC1D,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;YACrE,+DAA+D;YAC/D,uCAAuC;YACvC,IAAI,GAAG,CAAC,0BAA0B;gBAAE,GAAG,CAAC,0BAA0B,EAAE,CAAC;YAErE,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,gEAAgE;YAChE,MAAM,gBAAgB,GAAG,GAAG,EAAE;gBAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,WAAW,GAAG,IAAI,CAAC;oBACnB,GAAG,CAAC,wBAAwB,IAAI,GAAG,CAAC,wBAAwB,EAAE,CAAC;gBACjE,CAAC;gBACD,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC;YAEF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC/C,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACnC,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;KAAA;IAED;;;;OAIG;IACG,WAAW;6DAAC,EAAE,IAAI,EAAE,UAAU,EAAwC;YAK1E,MAAM,YAAY,GAAa,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAEvC,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAE5C,OAAO;gBACL,CAAC;gBACD,CAAC;gBACD,CAAC;aACF,CAAC;QACJ,CAAC;KAAA;IAED;;;;;;;OAOG;IACW,cAAc,CAC1B,WAAqB,EACrB,WAAwB,EACxB,IAAwB;;YAExB,IAAI,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YAC5B,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC1C,0EAA0E;YAC1E,YAAY;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnC,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,mBAAmB,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1B,CAAC;KAAA;IAED;;;;OAIG;IACW,QAAQ,CACpB,IAAY,EACZ,CAAS,EACT,KAAkF,EAClF,YAAsB,EACtB,WAAwB,EACxB,QAAgB,EAChB,WAAoB;;YAEpB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC,qEAAqE;YACrE,4CAA4C;YAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;gBAC7B,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAE5E,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACxD,MAAM,cAAc,GAAsB;gBACxC,YAAY,EAAE,aAAa,CAAC,MAAM;gBAClC,YAAY,EAAE,YAAY;aAC3B,CAAC;YACF,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC;YAC3E,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;YAE9E,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACxC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAChD,CAAC;KAAA;IAED;;;;;;;;OAQG;IACW,QAAQ,CACpB,IAAY,EACZ,YAA0B,EAC1B,gBAA4B;;YAE5B,MAAM,IAAI,GAAwB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAC1D,IAAI,EACJ,YAAY,EACZ,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EACnB,gBAAgB,CACjB,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpB,uEAAuE;gBACvE,2DAA2D;gBAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAClE,IAAI,MAAM,CAAC;gBACX,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACxB,0DAA0D;oBAC1D,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;oBAC/D,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;wBACvB,MAAM,KAAK,CAAC,uCAAuC,CAAC,EAAE,CAAC,CAAC;oBAC1D,CAAC;oBACD,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;CACF;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,aAA4B;IAClD,IAAI,aAAa,IAAI,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,aAAa,IAAI,MAAM;QAAE,OAAO,cAAc,CAAC;IACnD,IAAI,aAAa,IAAI,QAAQ;QAAE,OAAO,UAAU,CAAC;IACjD,IAAI,aAAa,IAAI,SAAS;QAAE,OAAO,QAAQ,CAAC;IAChD,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,aAAa,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CACzB,GAAyB,EACzB,IAAY,EACZ,QAAgB;IAEhB,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzE,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1E,IAAI,GAAG,CAAC,MAAM;QAAE,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;EAoBE;AAEF,4EAA4E;AAC5E,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,qBAAqB;AAE3C,MAAM,gBAAgB,GAAG;IACvB,CAAC,EAAE,UAAU;IACb,CAAC,EAAE,oBAAoB;IACvB,EAAE,EAAE,OAAO;CACZ,CAAC;AAEF,MAAM,yBAAyB,GAAG;IAChC,EAAE,EAAE,yEAAyE;IAC7E,EAAE,EAAE,yEAAyE;IAC7E,EAAE,EAAE,yEAAyE;IAC7E,EAAE,EAAE,yEAAyE;CAC9E,CAAC;AAEF,MAAM,uBAAuB,GAAG;IAC9B,EAAE,EAAE,yEAAyE;CAC9E,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACnC,MAAM,IAAI,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC;AACjE,MAAM,MAAM,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEhF,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE,MAAM,iCAAiC,GAAG,IAAI,GAAG,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7F,MAAM,gCAAgC,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1F,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE1C,aAAa;IACb,IACE,SAAS,CAAC,MAAM,IAAI,CAAC;QACrB,SAAS,CAAC,MAAM,IAAI,CAAC;QACrB,iCAAiC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnD,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;IACZ,IACE,SAAS,CAAC,MAAM,IAAI,CAAC;QACrB,SAAS,CAAC,MAAM,IAAI,CAAC;QACrB,gCAAgC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClD,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAClB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"BtcNew.js","sourceRoot":"","sources":["../src/BtcNew.ts"],"names":[],"mappings":"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"}