utxo-lib 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (249) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/src/address.d.ts +11 -0
  4. package/dist/src/address.d.ts.map +1 -0
  5. package/dist/src/address.js +37 -0
  6. package/dist/src/addressFormat.d.ts +53 -0
  7. package/dist/src/addressFormat.d.ts.map +1 -0
  8. package/dist/src/addressFormat.js +110 -0
  9. package/dist/src/bitgo/Musig2.d.ts +51 -0
  10. package/dist/src/bitgo/Musig2.d.ts.map +1 -0
  11. package/dist/src/bitgo/Musig2.js +175 -0
  12. package/dist/src/bitgo/Unspent.d.ts +95 -0
  13. package/dist/src/bitgo/Unspent.d.ts.map +1 -0
  14. package/dist/src/bitgo/Unspent.js +138 -0
  15. package/dist/src/bitgo/UtxoPsbt.d.ts +132 -0
  16. package/dist/src/bitgo/UtxoPsbt.d.ts.map +1 -0
  17. package/dist/src/bitgo/UtxoPsbt.js +469 -0
  18. package/dist/src/bitgo/UtxoTransaction.d.ts +22 -0
  19. package/dist/src/bitgo/UtxoTransaction.d.ts.map +1 -0
  20. package/dist/src/bitgo/UtxoTransaction.js +97 -0
  21. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts +26 -0
  22. package/dist/src/bitgo/UtxoTransactionBuilder.d.ts.map +1 -0
  23. package/dist/src/bitgo/UtxoTransactionBuilder.js +67 -0
  24. package/dist/src/bitgo/bbc/DashPsbt.d.ts +12 -0
  25. package/dist/src/bitgo/bbc/DashPsbt.d.ts.map +1 -0
  26. package/dist/src/bitgo/bbc/DashPsbt.js +27 -0
  27. package/dist/src/bitgo/bbc/DashTransaction.d.ts +39 -0
  28. package/dist/src/bitgo/bbc/DashTransaction.d.ts.map +1 -0
  29. package/dist/src/bitgo/bbc/DashTransaction.js +109 -0
  30. package/dist/src/bitgo/bbc/DashTransactionBuilder.d.ts +14 -0
  31. package/dist/src/bitgo/bbc/DashTransactionBuilder.d.ts.map +1 -0
  32. package/dist/src/bitgo/bbc/DashTransactionBuilder.js +28 -0
  33. package/dist/src/bitgo/bbc/index.d.ts +4 -0
  34. package/dist/src/bitgo/bbc/index.d.ts.map +1 -0
  35. package/dist/src/bitgo/bbc/index.js +16 -0
  36. package/dist/src/bitgo/bitcoincash/address.d.ts +35 -0
  37. package/dist/src/bitgo/bitcoincash/address.d.ts.map +1 -0
  38. package/dist/src/bitgo/bitcoincash/address.js +151 -0
  39. package/dist/src/bitgo/bitcoincash/index.d.ts +2 -0
  40. package/dist/src/bitgo/bitcoincash/index.d.ts.map +1 -0
  41. package/dist/src/bitgo/bitcoincash/index.js +14 -0
  42. package/dist/src/bitgo/dash/DashPsbt.d.ts +12 -0
  43. package/dist/src/bitgo/dash/DashPsbt.d.ts.map +1 -0
  44. package/dist/src/bitgo/dash/DashPsbt.js +27 -0
  45. package/dist/src/bitgo/dash/DashTransaction.d.ts +39 -0
  46. package/dist/src/bitgo/dash/DashTransaction.d.ts.map +1 -0
  47. package/dist/src/bitgo/dash/DashTransaction.js +109 -0
  48. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts +14 -0
  49. package/dist/src/bitgo/dash/DashTransactionBuilder.d.ts.map +1 -0
  50. package/dist/src/bitgo/dash/DashTransactionBuilder.js +28 -0
  51. package/dist/src/bitgo/dash/index.d.ts +4 -0
  52. package/dist/src/bitgo/dash/index.d.ts.map +1 -0
  53. package/dist/src/bitgo/dash/index.js +16 -0
  54. package/dist/src/bitgo/index.d.ts +17 -0
  55. package/dist/src/bitgo/index.d.ts.map +1 -0
  56. package/dist/src/bitgo/index.js +30 -0
  57. package/dist/src/bitgo/keyutil.d.ts +17 -0
  58. package/dist/src/bitgo/keyutil.d.ts.map +1 -0
  59. package/dist/src/bitgo/keyutil.js +37 -0
  60. package/dist/src/bitgo/nonStandardHalfSigned.d.ts +7 -0
  61. package/dist/src/bitgo/nonStandardHalfSigned.d.ts.map +1 -0
  62. package/dist/src/bitgo/nonStandardHalfSigned.js +56 -0
  63. package/dist/src/bitgo/outputScripts.d.ts +84 -0
  64. package/dist/src/bitgo/outputScripts.d.ts.map +1 -0
  65. package/dist/src/bitgo/outputScripts.js +297 -0
  66. package/dist/src/bitgo/parseInput.d.ts +92 -0
  67. package/dist/src/bitgo/parseInput.d.ts.map +1 -0
  68. package/dist/src/bitgo/parseInput.js +344 -0
  69. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts +24 -0
  70. package/dist/src/bitgo/psbt/fromHalfSigned.d.ts.map +1 -0
  71. package/dist/src/bitgo/psbt/fromHalfSigned.js +91 -0
  72. package/dist/src/bitgo/psbt/scriptTypes.d.ts +6 -0
  73. package/dist/src/bitgo/psbt/scriptTypes.d.ts.map +1 -0
  74. package/dist/src/bitgo/psbt/scriptTypes.js +23 -0
  75. package/dist/src/bitgo/signature.d.ts +84 -0
  76. package/dist/src/bitgo/signature.d.ts.map +1 -0
  77. package/dist/src/bitgo/signature.js +222 -0
  78. package/dist/src/bitgo/tnumber.d.ts +9 -0
  79. package/dist/src/bitgo/tnumber.d.ts.map +1 -0
  80. package/dist/src/bitgo/tnumber.js +31 -0
  81. package/dist/src/bitgo/transaction.d.ts +29 -0
  82. package/dist/src/bitgo/transaction.d.ts.map +1 -0
  83. package/dist/src/bitgo/transaction.js +247 -0
  84. package/dist/src/bitgo/types.d.ts +5 -0
  85. package/dist/src/bitgo/types.d.ts.map +1 -0
  86. package/dist/src/bitgo/types.js +12 -0
  87. package/dist/src/bitgo/wallet/Psbt.d.ts +47 -0
  88. package/dist/src/bitgo/wallet/Psbt.d.ts.map +1 -0
  89. package/dist/src/bitgo/wallet/Psbt.js +232 -0
  90. package/dist/src/bitgo/wallet/Unspent.d.ts +47 -0
  91. package/dist/src/bitgo/wallet/Unspent.d.ts.map +1 -0
  92. package/dist/src/bitgo/wallet/Unspent.js +154 -0
  93. package/dist/src/bitgo/wallet/WalletKeys.d.ts +72 -0
  94. package/dist/src/bitgo/wallet/WalletKeys.d.ts.map +1 -0
  95. package/dist/src/bitgo/wallet/WalletKeys.js +104 -0
  96. package/dist/src/bitgo/wallet/WalletOutput.d.ts +18 -0
  97. package/dist/src/bitgo/wallet/WalletOutput.d.ts.map +1 -0
  98. package/dist/src/bitgo/wallet/WalletOutput.js +69 -0
  99. package/dist/src/bitgo/wallet/WalletScripts.d.ts +7 -0
  100. package/dist/src/bitgo/wallet/WalletScripts.d.ts.map +1 -0
  101. package/dist/src/bitgo/wallet/WalletScripts.js +15 -0
  102. package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts +19 -0
  103. package/dist/src/bitgo/wallet/WalletUnspentSigner.d.ts.map +1 -0
  104. package/dist/src/bitgo/wallet/WalletUnspentSigner.js +47 -0
  105. package/dist/src/bitgo/wallet/chains.d.ts +57 -0
  106. package/dist/src/bitgo/wallet/chains.d.ts.map +1 -0
  107. package/dist/src/bitgo/wallet/chains.js +106 -0
  108. package/dist/src/bitgo/wallet/index.d.ts +8 -0
  109. package/dist/src/bitgo/wallet/index.d.ts.map +1 -0
  110. package/dist/src/bitgo/wallet/index.js +20 -0
  111. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts +26 -0
  112. package/dist/src/bitgo/zcash/ZcashBufferutils.d.ts.map +1 -0
  113. package/dist/src/bitgo/zcash/ZcashBufferutils.js +157 -0
  114. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts +36 -0
  115. package/dist/src/bitgo/zcash/ZcashPsbt.d.ts.map +1 -0
  116. package/dist/src/bitgo/zcash/ZcashPsbt.js +146 -0
  117. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts +61 -0
  118. package/dist/src/bitgo/zcash/ZcashTransaction.d.ts.map +1 -0
  119. package/dist/src/bitgo/zcash/ZcashTransaction.js +341 -0
  120. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts +21 -0
  121. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.d.ts.map +1 -0
  122. package/dist/src/bitgo/zcash/ZcashTransactionBuilder.js +105 -0
  123. package/dist/src/bitgo/zcash/address.d.ts +8 -0
  124. package/dist/src/bitgo/zcash/address.d.ts.map +1 -0
  125. package/dist/src/bitgo/zcash/address.js +57 -0
  126. package/dist/src/bitgo/zcash/hashZip0244.d.ts +27 -0
  127. package/dist/src/bitgo/zcash/hashZip0244.d.ts.map +1 -0
  128. package/dist/src/bitgo/zcash/hashZip0244.js +184 -0
  129. package/dist/src/bitgo/zcash/index.d.ts +4 -0
  130. package/dist/src/bitgo/zcash/index.d.ts.map +1 -0
  131. package/dist/src/bitgo/zcash/index.js +16 -0
  132. package/dist/src/classify.d.ts +19 -0
  133. package/dist/src/classify.d.ts.map +1 -0
  134. package/dist/src/classify.js +89 -0
  135. package/dist/src/index.d.ts +13 -0
  136. package/dist/src/index.d.ts.map +1 -0
  137. package/dist/src/index.js +36 -0
  138. package/dist/src/networks.d.ts +119 -0
  139. package/dist/src/networks.d.ts.map +1 -0
  140. package/dist/src/networks.js +477 -0
  141. package/dist/src/noble_ecc.d.ts +28 -0
  142. package/dist/src/noble_ecc.d.ts.map +1 -0
  143. package/dist/src/noble_ecc.js +168 -0
  144. package/dist/src/payments/index.d.ts +4 -0
  145. package/dist/src/payments/index.d.ts.map +1 -0
  146. package/dist/src/payments/index.js +8 -0
  147. package/dist/src/payments/p2tr.d.ts +3 -0
  148. package/dist/src/payments/p2tr.d.ts.map +1 -0
  149. package/dist/src/payments/p2tr.js +348 -0
  150. package/dist/src/payments/p2tr_ns.d.ts +3 -0
  151. package/dist/src/payments/p2tr_ns.d.ts.map +1 -0
  152. package/dist/src/payments/p2tr_ns.js +134 -0
  153. package/dist/src/taproot.d.ts +141 -0
  154. package/dist/src/taproot.d.ts.map +1 -0
  155. package/dist/src/taproot.js +384 -0
  156. package/dist/src/templates/multisig/index.d.ts +4 -0
  157. package/dist/src/templates/multisig/index.d.ts.map +1 -0
  158. package/dist/src/templates/multisig/index.js +8 -0
  159. package/dist/src/templates/multisig/input.d.ts +7 -0
  160. package/dist/src/templates/multisig/input.d.ts.map +1 -0
  161. package/dist/src/templates/multisig/input.js +25 -0
  162. package/dist/src/templates/multisig/output.d.ts +7 -0
  163. package/dist/src/templates/multisig/output.d.ts.map +1 -0
  164. package/dist/src/templates/multisig/output.js +38 -0
  165. package/dist/src/templates/nulldata.d.ts +10 -0
  166. package/dist/src/templates/nulldata.d.ts.map +1 -0
  167. package/dist/src/templates/nulldata.js +17 -0
  168. package/dist/src/templates/pubkey/index.d.ts +4 -0
  169. package/dist/src/templates/pubkey/index.d.ts.map +1 -0
  170. package/dist/src/templates/pubkey/index.js +8 -0
  171. package/dist/src/templates/pubkey/input.d.ts +7 -0
  172. package/dist/src/templates/pubkey/input.d.ts.map +1 -0
  173. package/dist/src/templates/pubkey/input.js +14 -0
  174. package/dist/src/templates/pubkey/output.d.ts +7 -0
  175. package/dist/src/templates/pubkey/output.d.ts.map +1 -0
  176. package/dist/src/templates/pubkey/output.js +15 -0
  177. package/dist/src/templates/pubkeyhash/index.d.ts +4 -0
  178. package/dist/src/templates/pubkeyhash/index.d.ts.map +1 -0
  179. package/dist/src/templates/pubkeyhash/index.js +8 -0
  180. package/dist/src/templates/pubkeyhash/input.d.ts +7 -0
  181. package/dist/src/templates/pubkeyhash/input.d.ts.map +1 -0
  182. package/dist/src/templates/pubkeyhash/input.js +16 -0
  183. package/dist/src/templates/pubkeyhash/output.d.ts +6 -0
  184. package/dist/src/templates/pubkeyhash/output.d.ts.map +1 -0
  185. package/dist/src/templates/pubkeyhash/output.js +20 -0
  186. package/dist/src/templates/scripthash/index.d.ts +4 -0
  187. package/dist/src/templates/scripthash/index.d.ts.map +1 -0
  188. package/dist/src/templates/scripthash/index.js +8 -0
  189. package/dist/src/templates/scripthash/input.d.ts +6 -0
  190. package/dist/src/templates/scripthash/input.d.ts.map +1 -0
  191. package/dist/src/templates/scripthash/input.js +43 -0
  192. package/dist/src/templates/scripthash/output.d.ts +6 -0
  193. package/dist/src/templates/scripthash/output.d.ts.map +1 -0
  194. package/dist/src/templates/scripthash/output.js +15 -0
  195. package/dist/src/templates/taproot/index.d.ts +4 -0
  196. package/dist/src/templates/taproot/index.d.ts.map +1 -0
  197. package/dist/src/templates/taproot/index.js +8 -0
  198. package/dist/src/templates/taproot/input.d.ts +6 -0
  199. package/dist/src/templates/taproot/input.d.ts.map +1 -0
  200. package/dist/src/templates/taproot/input.js +23 -0
  201. package/dist/src/templates/taproot/output.d.ts +6 -0
  202. package/dist/src/templates/taproot/output.d.ts.map +1 -0
  203. package/dist/src/templates/taproot/output.js +15 -0
  204. package/dist/src/templates/taprootnofn/index.d.ts +4 -0
  205. package/dist/src/templates/taprootnofn/index.d.ts.map +1 -0
  206. package/dist/src/templates/taprootnofn/index.js +8 -0
  207. package/dist/src/templates/taprootnofn/input.d.ts +7 -0
  208. package/dist/src/templates/taprootnofn/input.d.ts.map +1 -0
  209. package/dist/src/templates/taprootnofn/input.js +24 -0
  210. package/dist/src/templates/taprootnofn/output.d.ts +7 -0
  211. package/dist/src/templates/taprootnofn/output.d.ts.map +1 -0
  212. package/dist/src/templates/taprootnofn/output.js +28 -0
  213. package/dist/src/templates/witnesscommitment/index.d.ts +3 -0
  214. package/dist/src/templates/witnesscommitment/index.d.ts.map +1 -0
  215. package/dist/src/templates/witnesscommitment/index.js +6 -0
  216. package/dist/src/templates/witnesscommitment/output.d.ts +8 -0
  217. package/dist/src/templates/witnesscommitment/output.d.ts.map +1 -0
  218. package/dist/src/templates/witnesscommitment/output.js +31 -0
  219. package/dist/src/templates/witnesspubkeyhash/index.d.ts +4 -0
  220. package/dist/src/templates/witnesspubkeyhash/index.d.ts.map +1 -0
  221. package/dist/src/templates/witnesspubkeyhash/index.js +8 -0
  222. package/dist/src/templates/witnesspubkeyhash/input.d.ts +7 -0
  223. package/dist/src/templates/witnesspubkeyhash/input.d.ts.map +1 -0
  224. package/dist/src/templates/witnesspubkeyhash/input.js +19 -0
  225. package/dist/src/templates/witnesspubkeyhash/output.d.ts +6 -0
  226. package/dist/src/templates/witnesspubkeyhash/output.d.ts.map +1 -0
  227. package/dist/src/templates/witnesspubkeyhash/output.js +15 -0
  228. package/dist/src/templates/witnessscripthash/index.d.ts +4 -0
  229. package/dist/src/templates/witnessscripthash/index.d.ts.map +1 -0
  230. package/dist/src/templates/witnessscripthash/index.js +8 -0
  231. package/dist/src/templates/witnessscripthash/input.d.ts +6 -0
  232. package/dist/src/templates/witnessscripthash/input.d.ts.map +1 -0
  233. package/dist/src/templates/witnessscripthash/input.js +35 -0
  234. package/dist/src/templates/witnessscripthash/output.d.ts +6 -0
  235. package/dist/src/templates/witnessscripthash/output.d.ts.map +1 -0
  236. package/dist/src/templates/witnessscripthash/output.js +15 -0
  237. package/dist/src/testutil/index.d.ts +3 -0
  238. package/dist/src/testutil/index.d.ts.map +1 -0
  239. package/dist/src/testutil/index.js +15 -0
  240. package/dist/src/testutil/keys.d.ts +10 -0
  241. package/dist/src/testutil/keys.d.ts.map +1 -0
  242. package/dist/src/testutil/keys.js +40 -0
  243. package/dist/src/testutil/mock.d.ts +21 -0
  244. package/dist/src/testutil/mock.d.ts.map +1 -0
  245. package/dist/src/testutil/mock.js +86 -0
  246. package/dist/src/transaction_builder.d.ts +47 -0
  247. package/dist/src/transaction_builder.d.ts.map +1 -0
  248. package/dist/src/transaction_builder.js +1084 -0
  249. package/package.json +87 -0
@@ -0,0 +1,21 @@
1
+ /// <reference types="node" />
2
+ import * as bitcoinjs from 'bitcoinjs-lib';
3
+ import { Network } from '../..';
4
+ import { ZcashNetwork, ZcashTransaction } from './ZcashTransaction';
5
+ import { UtxoTransactionBuilder } from '../UtxoTransactionBuilder';
6
+ export declare class ZcashTransactionBuilder<TNumber extends number | bigint = number> extends UtxoTransactionBuilder<TNumber, ZcashTransaction<TNumber>> {
7
+ constructor(network: ZcashNetwork);
8
+ protected createInitialTransaction(network: Network): ZcashTransaction<TNumber>;
9
+ static fromTransaction<TNumber extends number | bigint = number>(transaction: ZcashTransaction<TNumber>, network?: Network, prevOutput?: bitcoinjs.TxOutput<TNumber>[]): ZcashTransactionBuilder<TNumber>;
10
+ setVersion(version: number, overwinter?: boolean): void;
11
+ setDefaultsForVersion(network: Network, version: number): void;
12
+ private hasSignatures;
13
+ private setPropertyCheckSignatures;
14
+ setConsensusBranchId(consensusBranchId: number): void;
15
+ setVersionGroupId(versionGroupId: number): void;
16
+ setExpiryHeight(expiryHeight: number): void;
17
+ build(): ZcashTransaction<TNumber>;
18
+ buildIncomplete(): ZcashTransaction<TNumber>;
19
+ addOutput(scriptPubKey: string | Buffer, value: TNumber): number;
20
+ }
21
+ //# sourceMappingURL=ZcashTransactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ZcashTransactionBuilder.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/ZcashTransactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,SAAS,MAAM,eAAe,CAAC;AAI3C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAGL,YAAY,EACZ,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,qBAAa,uBAAuB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,CAAE,SAAQ,sBAAsB,CAC3G,OAAO,EACP,gBAAgB,CAAC,OAAO,CAAC,CAC1B;gBACa,OAAO,EAAE,YAAY;IAIjC,SAAS,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;IAI/E,MAAM,CAAC,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,EAC7D,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC,EACtC,OAAO,CAAC,EAAE,OAAO,EACjB,UAAU,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,GACzC,uBAAuB,CAAC,OAAO,CAAC;IAiCnC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,UAAO,GAAG,IAAI;IAMpD,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAmB9D,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,0BAA0B;IAUlC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAKrD,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAK/C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAK3C,KAAK,IAAI,gBAAgB,CAAC,OAAO,CAAC;IAIlC,eAAe,IAAI,gBAAgB,CAAC,OAAO,CAAC;IAI5C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM;CAQjE"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZcashTransactionBuilder = void 0;
4
+ const types = require("bitcoinjs-lib/src/types");
5
+ const typeforce = require('typeforce');
6
+ const ZcashTransaction_1 = require("./ZcashTransaction");
7
+ const UtxoTransactionBuilder_1 = require("../UtxoTransactionBuilder");
8
+ const address_1 = require("./address");
9
+ class ZcashTransactionBuilder extends UtxoTransactionBuilder_1.UtxoTransactionBuilder {
10
+ constructor(network) {
11
+ super(network);
12
+ }
13
+ createInitialTransaction(network) {
14
+ return new ZcashTransaction_1.ZcashTransaction(network);
15
+ }
16
+ static fromTransaction(transaction, network, prevOutput) {
17
+ const txb = new ZcashTransactionBuilder(transaction.network);
18
+ // Copy transaction fields
19
+ txb.setVersion(transaction.version, !!transaction.overwintered);
20
+ txb.setLockTime(transaction.locktime);
21
+ // Copy Zcash overwinter fields. Omitted if the transaction builder is not for Zcash.
22
+ if (txb.tx.isOverwinterCompatible()) {
23
+ txb.setVersionGroupId(transaction.versionGroupId);
24
+ txb.setExpiryHeight(transaction.expiryHeight);
25
+ }
26
+ txb.setConsensusBranchId(transaction.consensusBranchId);
27
+ // Copy outputs (done first to avoid signature invalidation)
28
+ transaction.outs.forEach(function (txOut) {
29
+ txb.addOutput(txOut.script, txOut.value);
30
+ });
31
+ // Copy inputs
32
+ transaction.ins.forEach(function (txIn) {
33
+ txb.__addInputUnsafe(txIn.hash, txIn.index, {
34
+ sequence: txIn.sequence,
35
+ script: txIn.script,
36
+ witness: txIn.witness,
37
+ value: txIn.value,
38
+ });
39
+ });
40
+ return txb;
41
+ }
42
+ setVersion(version, overwinter = true) {
43
+ typeforce(types.UInt32, version);
44
+ this.tx.overwintered = overwinter ? 1 : 0;
45
+ this.tx.version = version;
46
+ }
47
+ setDefaultsForVersion(network, version) {
48
+ switch (version) {
49
+ case 4:
50
+ case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_CANOPY:
51
+ case ZcashTransaction_1.ZcashTransaction.VERSION4_BRANCH_NU5:
52
+ this.setVersion(4);
53
+ break;
54
+ case 5:
55
+ case ZcashTransaction_1.ZcashTransaction.VERSION5_BRANCH_NU5:
56
+ this.setVersion(5);
57
+ break;
58
+ default:
59
+ throw new Error(`invalid version ${version}`);
60
+ }
61
+ this.tx.versionGroupId = ZcashTransaction_1.getDefaultVersionGroupIdForVersion(version);
62
+ this.tx.consensusBranchId = ZcashTransaction_1.getDefaultConsensusBranchIdForVersion(network, version);
63
+ }
64
+ hasSignatures() {
65
+ return this.__INPUTS.some(function (input) {
66
+ return input.signatures !== undefined;
67
+ });
68
+ }
69
+ setPropertyCheckSignatures(propName, value) {
70
+ if (this.tx[propName] === value) {
71
+ return;
72
+ }
73
+ if (this.hasSignatures()) {
74
+ throw new Error(`Changing property ${propName} for a partially signed transaction would invalidate signatures`);
75
+ }
76
+ this.tx[propName] = value;
77
+ }
78
+ setConsensusBranchId(consensusBranchId) {
79
+ typeforce(types.UInt32, consensusBranchId);
80
+ this.setPropertyCheckSignatures('consensusBranchId', consensusBranchId);
81
+ }
82
+ setVersionGroupId(versionGroupId) {
83
+ typeforce(types.UInt32, versionGroupId);
84
+ this.setPropertyCheckSignatures('versionGroupId', versionGroupId);
85
+ }
86
+ setExpiryHeight(expiryHeight) {
87
+ typeforce(types.UInt32, expiryHeight);
88
+ this.setPropertyCheckSignatures('expiryHeight', expiryHeight);
89
+ }
90
+ build() {
91
+ return super.build();
92
+ }
93
+ buildIncomplete() {
94
+ return super.buildIncomplete();
95
+ }
96
+ addOutput(scriptPubKey, value) {
97
+ // Attempt to get a script if it's a base58 or bech32 address string
98
+ if (typeof scriptPubKey === 'string') {
99
+ scriptPubKey = address_1.toOutputScript(scriptPubKey, this.network);
100
+ }
101
+ return super.addOutput(scriptPubKey, value);
102
+ }
103
+ }
104
+ exports.ZcashTransactionBuilder = ZcashTransactionBuilder;
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vemNhc2gvWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaURBQWlEO0FBQ2pELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUd2Qyx5REFLNEI7QUFDNUIsc0VBQW1FO0FBQ25FLHVDQUEyQztBQUUzQyxNQUFhLHVCQUFrRSxTQUFRLCtDQUd0RjtJQUNDLFlBQVksT0FBcUI7UUFDL0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFFUyx3QkFBd0IsQ0FBQyxPQUFnQjtRQUNqRCxPQUFPLElBQUksbUNBQWdCLENBQVUsT0FBdUIsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUNwQixXQUFzQyxFQUN0QyxPQUFpQixFQUNqQixVQUEwQztRQUUxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLHVCQUF1QixDQUFVLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV0RSwwQkFBMEI7UUFDMUIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEMscUZBQXFGO1FBQ3JGLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsR0FBRyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDL0M7UUFFRCxHQUFHLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLGlCQUFp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LEtBQUssQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxlQUFlLENBQUMsWUFBb0I7UUFDbEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBK0IsQ0FBQztJQUNwRCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sS0FBSyxDQUFDLGVBQWUsRUFBK0IsQ0FBQztJQUM5RCxDQUFDO0lBRUQsU0FBUyxDQUFDLFlBQTZCLEVBQUUsS0FBYztRQUNyRCxvRUFBb0U7UUFDcEUsSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7WUFDcEMsWUFBWSxHQUFHLHdCQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFrQixDQUFDLENBQUM7U0FDdEU7UUFFRCxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRjtBQXpIRCwwREF5SEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiaXRjb2luanMgZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICdiaXRjb2luanMtbGliL3NyYy90eXBlcyc7XG5jb25zdCB0eXBlZm9yY2UgPSByZXF1aXJlKCd0eXBlZm9yY2UnKTtcblxuaW1wb3J0IHsgTmV0d29yayB9IGZyb20gJy4uLy4uJztcbmltcG9ydCB7XG4gIGdldERlZmF1bHRDb25zZW5zdXNCcmFuY2hJZEZvclZlcnNpb24sXG4gIGdldERlZmF1bHRWZXJzaW9uR3JvdXBJZEZvclZlcnNpb24sXG4gIFpjYXNoTmV0d29yayxcbiAgWmNhc2hUcmFuc2FjdGlvbixcbn0gZnJvbSAnLi9aY2FzaFRyYW5zYWN0aW9uJztcbmltcG9ydCB7IFV0eG9UcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi9VdHhvVHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IHRvT3V0cHV0U2NyaXB0IH0gZnJvbSAnLi9hZGRyZXNzJztcblxuZXhwb3J0IGNsYXNzIFpjYXNoVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgVXR4b1RyYW5zYWN0aW9uQnVpbGRlcjxcbiAgVE51bWJlcixcbiAgWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPlxuPiB7XG4gIGNvbnN0cnVjdG9yKG5ldHdvcms6IFpjYXNoTmV0d29yaykge1xuICAgIHN1cGVyKG5ldHdvcmspO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUluaXRpYWxUcmFuc2FjdGlvbihuZXR3b3JrOiBOZXR3b3JrKTogWmNhc2hUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIG5ldyBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+KG5ldHdvcmsgYXMgWmNhc2hOZXR3b3JrKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgdHJhbnNhY3Rpb246IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gICAgbmV0d29yaz86IE5ldHdvcmssXG4gICAgcHJldk91dHB1dD86IGJpdGNvaW5qcy5UeE91dHB1dDxUTnVtYmVyPltdXG4gICk6IFpjYXNoVHJhbnNhY3Rpb25CdWlsZGVyPFROdW1iZXI+IHtcbiAgICBjb25zdCB0eGIgPSBuZXcgWmNhc2hUcmFuc2FjdGlvbkJ1aWxkZXI8VE51bWJlcj4odHJhbnNhY3Rpb24ubmV0d29yayk7XG5cbiAgICAvLyBDb3B5IHRyYW5zYWN0aW9uIGZpZWxkc1xuICAgIHR4Yi5zZXRWZXJzaW9uKHRyYW5zYWN0aW9uLnZlcnNpb24sICEhdHJhbnNhY3Rpb24ub3ZlcndpbnRlcmVkKTtcbiAgICB0eGIuc2V0TG9ja1RpbWUodHJhbnNhY3Rpb24ubG9ja3RpbWUpO1xuXG4gICAgLy8gQ29weSBaY2FzaCBvdmVyd2ludGVyIGZpZWxkcy4gT21pdHRlZCBpZiB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBpcyBub3QgZm9yIFpjYXNoLlxuICAgIGlmICh0eGIudHguaXNPdmVyd2ludGVyQ29tcGF0aWJsZSgpKSB7XG4gICAgICB0eGIuc2V0VmVyc2lvbkdyb3VwSWQodHJhbnNhY3Rpb24udmVyc2lvbkdyb3VwSWQpO1xuICAgICAgdHhiLnNldEV4cGlyeUhlaWdodCh0cmFuc2FjdGlvbi5leHBpcnlIZWlnaHQpO1xuICAgIH1cblxuICAgIHR4Yi5zZXRDb25zZW5zdXNCcmFuY2hJZCh0cmFuc2FjdGlvbi5jb25zZW5zdXNCcmFuY2hJZCk7XG5cbiAgICAvLyBDb3B5IG91dHB1dHMgKGRvbmUgZmlyc3QgdG8gYXZvaWQgc2lnbmF0dXJlIGludmFsaWRhdGlvbilcbiAgICB0cmFuc2FjdGlvbi5vdXRzLmZvckVhY2goZnVuY3Rpb24gKHR4T3V0KSB7XG4gICAgICB0eGIuYWRkT3V0cHV0KHR4T3V0LnNjcmlwdCwgdHhPdXQudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgLy8gQ29weSBpbnB1dHNcbiAgICB0cmFuc2FjdGlvbi5pbnMuZm9yRWFjaChmdW5jdGlvbiAodHhJbikge1xuICAgICAgKHR4YiBhcyBhbnkpLl9fYWRkSW5wdXRVbnNhZmUodHhJbi5oYXNoLCB0eEluLmluZGV4LCB7XG4gICAgICAgIHNlcXVlbmNlOiB0eEluLnNlcXVlbmNlLFxuICAgICAgICBzY3JpcHQ6IHR4SW4uc2NyaXB0LFxuICAgICAgICB3aXRuZXNzOiB0eEluLndpdG5lc3MsXG4gICAgICAgIHZhbHVlOiAodHhJbiBhcyBhbnkpLnZhbHVlLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHhiO1xuICB9XG5cbiAgc2V0VmVyc2lvbih2ZXJzaW9uOiBudW1iZXIsIG92ZXJ3aW50ZXIgPSB0cnVlKTogdm9pZCB7XG4gICAgdHlwZWZvcmNlKHR5cGVzLlVJbnQzMiwgdmVyc2lvbik7XG4gICAgdGhpcy50eC5vdmVyd2ludGVyZWQgPSBvdmVyd2ludGVyID8gMSA6IDA7XG4gICAgdGhpcy50eC52ZXJzaW9uID0gdmVyc2lvbjtcbiAgfVxuXG4gIHNldERlZmF1bHRzRm9yVmVyc2lvbihuZXR3b3JrOiBOZXR3b3JrLCB2ZXJzaW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKHZlcnNpb24pIHtcbiAgICAgIGNhc2UgNDpcbiAgICAgIGNhc2UgWmNhc2hUcmFuc2FjdGlvbi5WRVJTSU9ONF9CUkFOQ0hfQ0FOT1BZOlxuICAgICAgY2FzZSBaY2FzaFRyYW5zYWN0aW9uLlZFUlNJT040X0JSQU5DSF9OVTU6XG4gICAgICAgIHRoaXMuc2V0VmVyc2lvbig0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIFpjYXNoVHJhbnNhY3Rpb24uVkVSU0lPTjVfQlJBTkNIX05VNTpcbiAgICAgICAgdGhpcy5zZXRWZXJzaW9uKDUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB2ZXJzaW9uICR7dmVyc2lvbn1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnR4LnZlcnNpb25Hcm91cElkID0gZ2V0RGVmYXVsdFZlcnNpb25Hcm91cElkRm9yVmVyc2lvbih2ZXJzaW9uKTtcbiAgICB0aGlzLnR4LmNvbnNlbnN1c0JyYW5jaElkID0gZ2V0RGVmYXVsdENvbnNlbnN1c0JyYW5jaElkRm9yVmVyc2lvbihuZXR3b3JrLCB2ZXJzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzU2lnbmF0dXJlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5fX0lOUFVUUy5zb21lKGZ1bmN0aW9uIChpbnB1dDogeyBzaWduYXR1cmVzOiB1bmtub3duIH0pIHtcbiAgICAgIHJldHVybiBpbnB1dC5zaWduYXR1cmVzICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFByb3BlcnR5Q2hlY2tTaWduYXR1cmVzKHByb3BOYW1lOiBrZXlvZiBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+LCB2YWx1ZTogdW5rbm93bikge1xuICAgIGlmICh0aGlzLnR4W3Byb3BOYW1lXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzU2lnbmF0dXJlcygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENoYW5naW5nIHByb3BlcnR5ICR7cHJvcE5hbWV9IGZvciBhIHBhcnRpYWxseSBzaWduZWQgdHJhbnNhY3Rpb24gd291bGQgaW52YWxpZGF0ZSBzaWduYXR1cmVzYCk7XG4gICAgfVxuICAgIHRoaXMudHhbcHJvcE5hbWVdID0gdmFsdWUgYXMgYW55O1xuICB9XG5cbiAgc2V0Q29uc2Vuc3VzQnJhbmNoSWQoY29uc2Vuc3VzQnJhbmNoSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIHR5cGVmb3JjZSh0eXBlcy5VSW50MzIsIGNvbnNlbnN1c0JyYW5jaElkKTtcbiAgICB0aGlzLnNldFByb3BlcnR5Q2hlY2tTaWduYXR1cmVzKCdjb25zZW5zdXNCcmFuY2hJZCcsIGNvbnNlbnN1c0JyYW5jaElkKTtcbiAgfVxuXG4gIHNldFZlcnNpb25Hcm91cElkKHZlcnNpb25Hcm91cElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCB2ZXJzaW9uR3JvdXBJZCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eUNoZWNrU2lnbmF0dXJlcygndmVyc2lvbkdyb3VwSWQnLCB2ZXJzaW9uR3JvdXBJZCk7XG4gIH1cblxuICBzZXRFeHBpcnlIZWlnaHQoZXhwaXJ5SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0eXBlZm9yY2UodHlwZXMuVUludDMyLCBleHBpcnlIZWlnaHQpO1xuICAgIHRoaXMuc2V0UHJvcGVydHlDaGVja1NpZ25hdHVyZXMoJ2V4cGlyeUhlaWdodCcsIGV4cGlyeUhlaWdodCk7XG4gIH1cblxuICBidWlsZCgpOiBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICByZXR1cm4gc3VwZXIuYnVpbGQoKSBhcyBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+O1xuICB9XG5cbiAgYnVpbGRJbmNvbXBsZXRlKCk6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIHJldHVybiBzdXBlci5idWlsZEluY29tcGxldGUoKSBhcyBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+O1xuICB9XG5cbiAgYWRkT3V0cHV0KHNjcmlwdFB1YktleTogc3RyaW5nIHwgQnVmZmVyLCB2YWx1ZTogVE51bWJlcik6IG51bWJlciB7XG4gICAgLy8gQXR0ZW1wdCB0byBnZXQgYSBzY3JpcHQgaWYgaXQncyBhIGJhc2U1OCBvciBiZWNoMzIgYWRkcmVzcyBzdHJpbmdcbiAgICBpZiAodHlwZW9mIHNjcmlwdFB1YktleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNjcmlwdFB1YktleSA9IHRvT3V0cHV0U2NyaXB0KHNjcmlwdFB1YktleSwgdGhpcy5uZXR3b3JrIGFzIE5ldHdvcmspO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5hZGRPdXRwdXQoc2NyaXB0UHViS2V5LCB2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,8 @@
1
+ /// <reference types="node" />
2
+ import { Base58CheckResult } from 'bitcoinjs-lib/src/address';
3
+ import { Network } from '../../networks';
4
+ export declare function fromBase58Check(address: string): Base58CheckResult;
5
+ export declare function toBase58Check(hash: Buffer, version: number): string;
6
+ export declare function fromOutputScript(outputScript: Buffer, network: Network): string;
7
+ export declare function toOutputScript(address: string, network: Network): Buffer;
8
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/address.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAW,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAIlD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAKlE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOnE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAgB/E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAUxE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toOutputScript = exports.fromOutputScript = exports.toBase58Check = exports.fromBase58Check = void 0;
4
+ const assert = require("assert");
5
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
6
+ const types = require("bitcoinjs-lib/src/types");
7
+ const networks_1 = require("../../networks");
8
+ const bs58check = require('bs58check');
9
+ const typeforce = require('typeforce');
10
+ function fromBase58Check(address) {
11
+ const payload = bs58check.decode(address);
12
+ const version = payload.readUInt16BE(0);
13
+ const hash = payload.slice(2);
14
+ return { version, hash };
15
+ }
16
+ exports.fromBase58Check = fromBase58Check;
17
+ function toBase58Check(hash, version) {
18
+ typeforce(types.tuple(types.Hash160bit, types.Number), arguments);
19
+ const payload = Buffer.allocUnsafe(22);
20
+ payload.writeUInt16BE(version, 0);
21
+ hash.copy(payload, 2);
22
+ return bs58check.encode(payload);
23
+ }
24
+ exports.toBase58Check = toBase58Check;
25
+ function fromOutputScript(outputScript, network) {
26
+ assert(networks_1.isZcash(network));
27
+ let o;
28
+ let prefix;
29
+ try {
30
+ o = bitcoinjs_lib_1.payments.p2pkh({ output: outputScript });
31
+ prefix = network.pubKeyHash;
32
+ }
33
+ catch (e) { }
34
+ try {
35
+ o = bitcoinjs_lib_1.payments.p2sh({ output: outputScript });
36
+ prefix = network.scriptHash;
37
+ }
38
+ catch (e) { }
39
+ if (!o || !o.hash || prefix === undefined) {
40
+ throw new Error(`unsupported outputScript`);
41
+ }
42
+ return toBase58Check(o.hash, prefix);
43
+ }
44
+ exports.fromOutputScript = fromOutputScript;
45
+ function toOutputScript(address, network) {
46
+ assert(networks_1.isZcash(network));
47
+ const { version, hash } = fromBase58Check(address);
48
+ if (version === network.pubKeyHash) {
49
+ return bitcoinjs_lib_1.payments.p2pkh({ hash }).output;
50
+ }
51
+ if (version === network.scriptHash) {
52
+ return bitcoinjs_lib_1.payments.p2sh({ hash }).output;
53
+ }
54
+ throw new Error(address + ' has no matching Script');
55
+ }
56
+ exports.toOutputScript = toOutputScript;
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iaXRnby96Y2FzaC9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFpQztBQUNqQyxpREFBeUM7QUFDekMsaURBQWlEO0FBRWpELDZDQUFrRDtBQUNsRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXZDLFNBQWdCLGVBQWUsQ0FBQyxPQUFlO0lBQzdDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUxELDBDQUtDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLElBQVksRUFBRSxPQUFlO0lBQ3pELFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWxFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEIsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLENBQUM7QUFQRCxzQ0FPQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLFlBQW9CLEVBQUUsT0FBZ0I7SUFDckUsTUFBTSxDQUFDLGtCQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJLENBQUMsQ0FBQztJQUNOLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSTtRQUNGLENBQUMsR0FBRyx3QkFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0tBQzdCO0lBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRTtJQUNkLElBQUk7UUFDRixDQUFDLEdBQUcsd0JBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUM1QyxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7SUFDZCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztLQUM3QztJQUNELE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQWhCRCw0Q0FnQkM7QUFFRCxTQUFnQixjQUFjLENBQUMsT0FBZSxFQUFFLE9BQWdCO0lBQzlELE1BQU0sQ0FBQyxrQkFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekIsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUNsQyxPQUFPLHdCQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFnQixDQUFDO0tBQ2xEO0lBQ0QsSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUNsQyxPQUFPLHdCQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFnQixDQUFDO0tBQ2pEO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLEdBQUcseUJBQXlCLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBVkQsd0NBVUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHBheW1lbnRzIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICdiaXRjb2luanMtbGliL3NyYy90eXBlcyc7XG5pbXBvcnQgeyBCYXNlNThDaGVja1Jlc3VsdCB9IGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL2FkZHJlc3MnO1xuaW1wb3J0IHsgaXNaY2FzaCwgTmV0d29yayB9IGZyb20gJy4uLy4uL25ldHdvcmtzJztcbmNvbnN0IGJzNThjaGVjayA9IHJlcXVpcmUoJ2JzNThjaGVjaycpO1xuY29uc3QgdHlwZWZvcmNlID0gcmVxdWlyZSgndHlwZWZvcmNlJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQmFzZTU4Q2hlY2soYWRkcmVzczogc3RyaW5nKTogQmFzZTU4Q2hlY2tSZXN1bHQge1xuICBjb25zdCBwYXlsb2FkID0gYnM1OGNoZWNrLmRlY29kZShhZGRyZXNzKTtcbiAgY29uc3QgdmVyc2lvbiA9IHBheWxvYWQucmVhZFVJbnQxNkJFKDApO1xuICBjb25zdCBoYXNoID0gcGF5bG9hZC5zbGljZSgyKTtcbiAgcmV0dXJuIHsgdmVyc2lvbiwgaGFzaCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9CYXNlNThDaGVjayhoYXNoOiBCdWZmZXIsIHZlcnNpb246IG51bWJlcik6IHN0cmluZyB7XG4gIHR5cGVmb3JjZSh0eXBlcy50dXBsZSh0eXBlcy5IYXNoMTYwYml0LCB0eXBlcy5OdW1iZXIpLCBhcmd1bWVudHMpO1xuXG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMjIpO1xuICBwYXlsb2FkLndyaXRlVUludDE2QkUodmVyc2lvbiwgMCk7XG4gIGhhc2guY29weShwYXlsb2FkLCAyKTtcbiAgcmV0dXJuIGJzNThjaGVjay5lbmNvZGUocGF5bG9hZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tT3V0cHV0U2NyaXB0KG91dHB1dFNjcmlwdDogQnVmZmVyLCBuZXR3b3JrOiBOZXR3b3JrKTogc3RyaW5nIHtcbiAgYXNzZXJ0KGlzWmNhc2gobmV0d29yaykpO1xuICBsZXQgbztcbiAgbGV0IHByZWZpeDtcbiAgdHJ5IHtcbiAgICBvID0gcGF5bWVudHMucDJwa2goeyBvdXRwdXQ6IG91dHB1dFNjcmlwdCB9KTtcbiAgICBwcmVmaXggPSBuZXR3b3JrLnB1YktleUhhc2g7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIHRyeSB7XG4gICAgbyA9IHBheW1lbnRzLnAyc2goeyBvdXRwdXQ6IG91dHB1dFNjcmlwdCB9KTtcbiAgICBwcmVmaXggPSBuZXR3b3JrLnNjcmlwdEhhc2g7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIGlmICghbyB8fCAhby5oYXNoIHx8IHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBvdXRwdXRTY3JpcHRgKTtcbiAgfVxuICByZXR1cm4gdG9CYXNlNThDaGVjayhvLmhhc2gsIHByZWZpeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b091dHB1dFNjcmlwdChhZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IE5ldHdvcmspOiBCdWZmZXIge1xuICBhc3NlcnQoaXNaY2FzaChuZXR3b3JrKSk7XG4gIGNvbnN0IHsgdmVyc2lvbiwgaGFzaCB9ID0gZnJvbUJhc2U1OENoZWNrKGFkZHJlc3MpO1xuICBpZiAodmVyc2lvbiA9PT0gbmV0d29yay5wdWJLZXlIYXNoKSB7XG4gICAgcmV0dXJuIHBheW1lbnRzLnAycGtoKHsgaGFzaCB9KS5vdXRwdXQgYXMgQnVmZmVyO1xuICB9XG4gIGlmICh2ZXJzaW9uID09PSBuZXR3b3JrLnNjcmlwdEhhc2gpIHtcbiAgICByZXR1cm4gcGF5bWVudHMucDJzaCh7IGhhc2ggfSkub3V0cHV0IGFzIEJ1ZmZlcjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYWRkcmVzcyArICcgaGFzIG5vIG1hdGNoaW5nIFNjcmlwdCcpO1xufVxuIl19
@@ -0,0 +1,27 @@
1
+ /// <reference types="node" />
2
+ /**
3
+ * Implements hashing methods described in https://zips.z.cash/zip-0244.
4
+ * Only supports full transparent transactions without shielded inputs or outputs.
5
+ */
6
+ import { TxInput, TxOutput } from 'bitcoinjs-lib';
7
+ import { ZcashTransaction } from './ZcashTransaction';
8
+ declare type SignatureParams<TNumber extends number | bigint = number> = {
9
+ inIndex?: number;
10
+ prevOutScript: Buffer;
11
+ value: TNumber;
12
+ hashType: number;
13
+ };
14
+ /**
15
+ * Blake2b hashing algorithm for Zcash
16
+ * @param buffer
17
+ * @param personalization
18
+ * @returns 256-bit BLAKE2b hash
19
+ */
20
+ export declare function getBlake2bHash(buffer: Buffer, personalization: string | Buffer): Buffer;
21
+ export declare function getPrevoutsDigest<TNumber extends number | bigint>(ins: TxInput[], tag?: string, sigParams?: SignatureParams<TNumber>): Buffer;
22
+ export declare function getSequenceDigest<TNumber extends number | bigint>(ins: TxInput[], tag?: string, sigParams?: SignatureParams<TNumber>): Buffer;
23
+ export declare function getOutputsDigest<TNumber extends number | bigint>(outs: TxOutput<TNumber>[], tag?: string, sigParams?: SignatureParams<TNumber>): Buffer;
24
+ export declare function getTxidDigest<TNumber extends number | bigint>(tx: ZcashTransaction<TNumber>): Buffer;
25
+ export declare function getSignatureDigest<TNumber extends number | bigint>(tx: ZcashTransaction<TNumber>, inIndex: number | undefined, prevOutScript: Buffer, value: TNumber, hashType: number): Buffer;
26
+ export {};
27
+ //# sourceMappingURL=hashZip0244.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashZip0244.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/hashZip0244.ts"],"names":[],"mappings":";AAAA;;;GAGG;AACH,OAAO,EAAe,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAK/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,aAAK,eAAe,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAIvF;AAcD,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,GAAG,EAAE,OAAO,EAAE,EACd,GAAG,SAAqB,EACxB,SAAS,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GACnC,MAAM,CAaR;AAED,wBAAgB,iBAAiB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/D,GAAG,EAAE,OAAO,EAAE,EACd,GAAG,SAAqB,EACxB,SAAS,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GACnC,MAAM,CAsBR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAC9D,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,EACzB,GAAG,SAAqB,EACxB,SAAS,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GACnC,MAAM,CAsCR;AAoFD,wBAAgB,aAAa,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,MAAM,CAGpG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAChE,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAQR"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSignatureDigest = exports.getTxidDigest = exports.getOutputsDigest = exports.getSequenceDigest = exports.getPrevoutsDigest = exports.getBlake2bHash = void 0;
4
+ /**
5
+ * Implements hashing methods described in https://zips.z.cash/zip-0244.
6
+ * Only supports full transparent transactions without shielded inputs or outputs.
7
+ */
8
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
9
+ const bufferutils_1 = require("bitcoinjs-lib/src/bufferutils");
10
+ const blake2b = require('@bitgo/blake2b');
11
+ const UtxoTransaction_1 = require("../UtxoTransaction");
12
+ /**
13
+ * Blake2b hashing algorithm for Zcash
14
+ * @param buffer
15
+ * @param personalization
16
+ * @returns 256-bit BLAKE2b hash
17
+ */
18
+ function getBlake2bHash(buffer, personalization) {
19
+ const out = Buffer.allocUnsafe(32);
20
+ personalization = Buffer.from(personalization);
21
+ return blake2b(out.length, null, null, personalization).update(buffer).digest(out);
22
+ }
23
+ exports.getBlake2bHash = getBlake2bHash;
24
+ function getHeaderDigest(tx) {
25
+ // https://zips.z.cash/zip-0244#t-1-header-digest
26
+ const mask = tx.overwintered ? 1 : 0;
27
+ const writer = bufferutils_1.BufferWriter.withCapacity(4 * 5);
28
+ writer.writeInt32(tx.version | (mask << 31)); // Set overwinter bit
29
+ writer.writeUInt32(tx.versionGroupId);
30
+ writer.writeUInt32(tx.consensusBranchId);
31
+ writer.writeUInt32(tx.locktime);
32
+ writer.writeUInt32(tx.expiryHeight);
33
+ return getBlake2bHash(writer.end(), 'ZTxIdHeadersHash');
34
+ }
35
+ function getPrevoutsDigest(ins, tag = 'ZTxIdPrevoutHash', sigParams) {
36
+ if (sigParams) {
37
+ if (sigParams.hashType & bitcoinjs_lib_1.Transaction.SIGHASH_ANYONECANPAY) {
38
+ return getPrevoutsDigest([]);
39
+ }
40
+ }
41
+ const bufferWriter = new bufferutils_1.BufferWriter(Buffer.allocUnsafe(36 * ins.length));
42
+ ins.forEach(function (txIn) {
43
+ bufferWriter.writeSlice(txIn.hash);
44
+ bufferWriter.writeUInt32(txIn.index);
45
+ });
46
+ return getBlake2bHash(bufferWriter.end(), tag);
47
+ }
48
+ exports.getPrevoutsDigest = getPrevoutsDigest;
49
+ function getSequenceDigest(ins, tag = 'ZTxIdSequencHash', sigParams) {
50
+ // txid: https://zips.z.cash/zip-0244#t-2b-sequence-digest
51
+ // sig: https://zips.z.cash/zip-0244#s-2b-sequence-sig-digest
52
+ // https://github.com/zcash-hackworks/zcash-test-vectors/blob/dd8fdb/zip_0244.py#L263
53
+ if (sigParams) {
54
+ const { hashType } = sigParams;
55
+ if (hashType & bitcoinjs_lib_1.Transaction.SIGHASH_ANYONECANPAY ||
56
+ (hashType & 0x1f) === bitcoinjs_lib_1.Transaction.SIGHASH_SINGLE ||
57
+ (hashType & 0x1f) === bitcoinjs_lib_1.Transaction.SIGHASH_NONE) {
58
+ return getSequenceDigest([]);
59
+ }
60
+ }
61
+ const bufferWriter = new bufferutils_1.BufferWriter(Buffer.allocUnsafe(4 * ins.length));
62
+ ins.forEach(function (txIn) {
63
+ bufferWriter.writeUInt32(txIn.sequence);
64
+ });
65
+ return getBlake2bHash(bufferWriter.end(), tag);
66
+ }
67
+ exports.getSequenceDigest = getSequenceDigest;
68
+ function getOutputsDigest(outs, tag = 'ZTxIdOutputsHash', sigParams) {
69
+ // txid: https://zips.z.cash/zip-0244#t-2c-outputs-digest
70
+ // sig: https://zips.z.cash/zip-0244#s-2c-outputs-sig-digest
71
+ // https://github.com/zcash-hackworks/zcash-test-vectors/blob/dd8fdb/zip_0244.py#L275
72
+ if (sigParams) {
73
+ let { hashType } = sigParams;
74
+ hashType = hashType & 0x1f;
75
+ if (hashType === bitcoinjs_lib_1.Transaction.SIGHASH_SINGLE) {
76
+ if (sigParams.inIndex === undefined) {
77
+ throw new Error();
78
+ }
79
+ if (outs[sigParams.inIndex] === undefined) {
80
+ return getOutputsDigest(outs);
81
+ }
82
+ return getOutputsDigest([outs[sigParams.inIndex]]);
83
+ }
84
+ if (hashType === bitcoinjs_lib_1.Transaction.SIGHASH_NONE) {
85
+ return getOutputsDigest([]);
86
+ }
87
+ return getOutputsDigest(outs, tag);
88
+ }
89
+ // Find out the size of the outputs and write them
90
+ const txOutsSize = outs.reduce(function (sum, output) {
91
+ return sum + 8 + UtxoTransaction_1.varSliceSize(output.script);
92
+ }, 0);
93
+ const bufferWriter = new bufferutils_1.BufferWriter(Buffer.allocUnsafe(txOutsSize));
94
+ outs.forEach(function (out) {
95
+ bufferWriter.writeUInt64(out.value);
96
+ bufferWriter.writeVarSlice(out.script);
97
+ });
98
+ return getBlake2bHash(bufferWriter.end(), tag);
99
+ }
100
+ exports.getOutputsDigest = getOutputsDigest;
101
+ function getTxinDigest(input, sigParams) {
102
+ // https://zips.z.cash/zip-0244#s-2d-txin-sig-digest
103
+ // https://github.com/zcash-hackworks/zcash-test-vectors/blob/dd8fdb/zip_0244.py#L291
104
+ const writer = bufferutils_1.BufferWriter.withCapacity(32 /* prevout hash */ +
105
+ 4 /* prevout vin */ +
106
+ UtxoTransaction_1.varSliceSize(sigParams.prevOutScript) +
107
+ 8 /* value */ +
108
+ 4 /* sequence */);
109
+ writer.writeSlice(input.hash);
110
+ writer.writeUInt32(input.index);
111
+ writer.writeVarSlice(sigParams.prevOutScript);
112
+ writer.writeUInt64(sigParams.value);
113
+ writer.writeUInt32(input.sequence);
114
+ return getBlake2bHash(writer.end(), 'Zcash___TxInHash');
115
+ }
116
+ function getTransparentDigest(tx, sigParams) {
117
+ // txid: https://zips.z.cash/zip-0244#t-2-transparent-digest
118
+ // sig: https://zips.z.cash/zip-0244#s-2a-prevouts-sig-digest
119
+ if (sigParams) {
120
+ if (sigParams.inIndex === undefined) {
121
+ return getTransparentDigest(tx);
122
+ }
123
+ }
124
+ let buffer;
125
+ if (tx.ins.length || tx.outs.length) {
126
+ const writer = bufferutils_1.BufferWriter.withCapacity(32 * (sigParams ? 4 : 3));
127
+ writer.writeSlice(getPrevoutsDigest(tx.ins, undefined, sigParams));
128
+ writer.writeSlice(getSequenceDigest(tx.ins, undefined, sigParams));
129
+ writer.writeSlice(getOutputsDigest(tx.outs, undefined, sigParams));
130
+ if (sigParams) {
131
+ if (sigParams.inIndex === undefined) {
132
+ throw new Error();
133
+ }
134
+ writer.writeSlice(getTxinDigest(tx.ins[sigParams.inIndex], sigParams));
135
+ }
136
+ buffer = writer.end();
137
+ }
138
+ else {
139
+ buffer = Buffer.of();
140
+ }
141
+ return getBlake2bHash(buffer, 'ZTxIdTranspaHash');
142
+ }
143
+ function getSaplingDigest(tx) {
144
+ // https://zips.z.cash/zip-0244#t-3-sapling-digest
145
+ return getBlake2bHash(Buffer.of(), 'ZTxIdSaplingHash');
146
+ }
147
+ function getOrchardDigest(tx) {
148
+ // https://zips.z.cash/zip-0244#t-4-orchard-digest
149
+ return getBlake2bHash(Buffer.of(), 'ZTxIdOrchardHash');
150
+ }
151
+ /**
152
+ * @param tx
153
+ * @param signatureParams - calculates txid when undefined
154
+ */
155
+ function getDigest(tx, signatureParams) {
156
+ // txid: https://zips.z.cash/zip-0244#id4
157
+ // sig: https://zips.z.cash/zip-0244#id13
158
+ const writer = bufferutils_1.BufferWriter.withCapacity(32 * 4);
159
+ writer.writeSlice(getHeaderDigest(tx));
160
+ writer.writeSlice(getTransparentDigest(tx, signatureParams));
161
+ writer.writeSlice(getSaplingDigest(tx));
162
+ writer.writeSlice(getOrchardDigest(tx));
163
+ const tag = 'ZcashTxHash_';
164
+ const personalization = bufferutils_1.BufferWriter.withCapacity(tag.length + 4 /* UInt32 */);
165
+ personalization.writeSlice(Buffer.from(tag));
166
+ personalization.writeUInt32(tx.consensusBranchId);
167
+ return getBlake2bHash(writer.end(), personalization.end());
168
+ }
169
+ function getTxidDigest(tx) {
170
+ // https://zips.z.cash/zip-0244#id4
171
+ return getDigest(tx);
172
+ }
173
+ exports.getTxidDigest = getTxidDigest;
174
+ function getSignatureDigest(tx, inIndex, prevOutScript, value, hashType) {
175
+ // https://zips.z.cash/zip-0244#id13
176
+ return getDigest(tx, {
177
+ inIndex,
178
+ prevOutScript,
179
+ value,
180
+ hashType,
181
+ });
182
+ }
183
+ exports.getSignatureDigest = getSignatureDigest;
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaFppcDAyNDQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vemNhc2gvaGFzaFppcDAyNDQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7OztHQUdHO0FBQ0gsaURBQStEO0FBQy9ELCtEQUE2RDtBQUU3RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUcxQyx3REFBa0Q7QUFTbEQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsTUFBYyxFQUFFLGVBQWdDO0lBQzdFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDL0MsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUpELHdDQUlDO0FBRUQsU0FBUyxlQUFlLENBQWtDLEVBQTZCO0lBQ3JGLGlEQUFpRDtJQUNqRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRywwQkFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7SUFDbkUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwQyxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLEdBQWMsRUFDZCxHQUFHLEdBQUcsa0JBQWtCLEVBQ3hCLFNBQW9DO0lBRXBDLElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSSxTQUFTLENBQUMsUUFBUSxHQUFHLDJCQUFXLENBQUMsb0JBQW9CLEVBQUU7WUFDekQsT0FBTyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM5QjtLQUNGO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQkFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzNFLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJO1FBQ3hCLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFqQkQsOENBaUJDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQy9CLEdBQWMsRUFDZCxHQUFHLEdBQUcsa0JBQWtCLEVBQ3hCLFNBQW9DO0lBRXBDLDBEQUEwRDtJQUMxRCw2REFBNkQ7SUFDN0QscUZBQXFGO0lBQ3JGLElBQUksU0FBUyxFQUFFO1FBQ2IsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUNFLFFBQVEsR0FBRywyQkFBVyxDQUFDLG9CQUFvQjtZQUMzQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSywyQkFBVyxDQUFDLGNBQWM7WUFDaEQsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssMkJBQVcsQ0FBQyxZQUFZLEVBQzlDO1lBQ0EsT0FBTyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM5QjtLQUNGO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQkFBWSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRTFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJO1FBQ3hCLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUExQkQsOENBMEJDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLElBQXlCLEVBQ3pCLEdBQUcsR0FBRyxrQkFBa0IsRUFDeEIsU0FBb0M7SUFFcEMseURBQXlEO0lBQ3pELDREQUE0RDtJQUM1RCxxRkFBcUY7SUFDckYsSUFBSSxTQUFTLEVBQUU7UUFDYixJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQzdCLFFBQVEsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksUUFBUSxLQUFLLDJCQUFXLENBQUMsY0FBYyxFQUFFO1lBQzNDLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQzthQUNuQjtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQ3pDLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0I7WUFDRCxPQUFPLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLFFBQVEsS0FBSywyQkFBVyxDQUFDLFlBQVksRUFBRTtZQUN6QyxPQUFPLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDcEM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxNQUFNO1FBQ2xELE9BQU8sR0FBRyxHQUFHLENBQUMsR0FBRyw4QkFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFTixNQUFNLFlBQVksR0FBRyxJQUFJLDBCQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBRXRFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHO1FBQ3hCLFlBQVksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUExQ0QsNENBMENDO0FBRUQsU0FBUyxhQUFhLENBQWtDLEtBQWMsRUFBRSxTQUFtQztJQUN6RyxvREFBb0Q7SUFDcEQscUZBQXFGO0lBQ3JGLE1BQU0sTUFBTSxHQUFHLDBCQUFZLENBQUMsWUFBWSxDQUN0QyxFQUFFLENBQUMsa0JBQWtCO1FBQ25CLENBQUMsQ0FBQyxpQkFBaUI7UUFDbkIsOEJBQVksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxXQUFXO1FBQ2IsQ0FBQyxDQUFDLGNBQWMsQ0FDbkIsQ0FBQztJQUNGLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixFQUFpRCxFQUNqRCxTQUFvQztJQUVwQyw0REFBNEQ7SUFDNUQsNkRBQTZEO0lBQzdELElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTtZQUNuQyxPQUFPLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pDO0tBQ0Y7SUFFRCxJQUFJLE1BQU0sQ0FBQztJQUNYLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDbkMsTUFBTSxNQUFNLEdBQUcsMEJBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFO2dCQUNuQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7YUFDbkI7WUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN2QjtTQUFNO1FBQ0wsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztLQUN0QjtJQUNELE9BQU8sY0FBYyxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFrQyxFQUE2QjtJQUN0RixrREFBa0Q7SUFDbEQsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQWtDLEVBQTZCO0lBQ3RGLGtEQUFrRDtJQUNsRCxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxTQUFTLENBQ2hCLEVBQTZCLEVBQzdCLGVBQTBDO0lBRTFDLHlDQUF5QztJQUN6Qyx5Q0FBeUM7SUFDekMsTUFBTSxNQUFNLEdBQUcsMEJBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXhDLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQztJQUMzQixNQUFNLGVBQWUsR0FBRywwQkFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvRSxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFrQyxFQUE2QjtJQUMxRixtQ0FBbUM7SUFDbkMsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUhELHNDQUdDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQ2hDLEVBQTZCLEVBQzdCLE9BQTJCLEVBQzNCLGFBQXFCLEVBQ3JCLEtBQWMsRUFDZCxRQUFnQjtJQUVoQixvQ0FBb0M7SUFDcEMsT0FBTyxTQUFTLENBQUMsRUFBRSxFQUFFO1FBQ25CLE9BQU87UUFDUCxhQUFhO1FBQ2IsS0FBSztRQUNMLFFBQVE7S0FDVCxDQUFDLENBQUM7QUFDTCxDQUFDO0FBZEQsZ0RBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEltcGxlbWVudHMgaGFzaGluZyBtZXRob2RzIGRlc2NyaWJlZCBpbiBodHRwczovL3ppcHMuei5jYXNoL3ppcC0wMjQ0LlxuICogT25seSBzdXBwb3J0cyBmdWxsIHRyYW5zcGFyZW50IHRyYW5zYWN0aW9ucyB3aXRob3V0IHNoaWVsZGVkIGlucHV0cyBvciBvdXRwdXRzLlxuICovXG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHhJbnB1dCwgVHhPdXRwdXQgfSBmcm9tICdiaXRjb2luanMtbGliJztcbmltcG9ydCB7IEJ1ZmZlcldyaXRlciB9IGZyb20gJ2JpdGNvaW5qcy1saWIvc3JjL2J1ZmZlcnV0aWxzJztcblxuY29uc3QgYmxha2UyYiA9IHJlcXVpcmUoJ0BiaXRnby9ibGFrZTJiJyk7XG5cbmltcG9ydCB7IFpjYXNoVHJhbnNhY3Rpb24gfSBmcm9tICcuL1pjYXNoVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgdmFyU2xpY2VTaXplIH0gZnJvbSAnLi4vVXR4b1RyYW5zYWN0aW9uJztcblxudHlwZSBTaWduYXR1cmVQYXJhbXM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSB7XG4gIGluSW5kZXg/OiBudW1iZXI7XG4gIHByZXZPdXRTY3JpcHQ6IEJ1ZmZlcjtcbiAgdmFsdWU6IFROdW1iZXI7XG4gIGhhc2hUeXBlOiBudW1iZXI7XG59O1xuXG4vKipcbiAqIEJsYWtlMmIgaGFzaGluZyBhbGdvcml0aG0gZm9yIFpjYXNoXG4gKiBAcGFyYW0gYnVmZmVyXG4gKiBAcGFyYW0gcGVyc29uYWxpemF0aW9uXG4gKiBAcmV0dXJucyAyNTYtYml0IEJMQUtFMmIgaGFzaFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qmxha2UyYkhhc2goYnVmZmVyOiBCdWZmZXIsIHBlcnNvbmFsaXphdGlvbjogc3RyaW5nIHwgQnVmZmVyKTogQnVmZmVyIHtcbiAgY29uc3Qgb3V0ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDMyKTtcbiAgcGVyc29uYWxpemF0aW9uID0gQnVmZmVyLmZyb20ocGVyc29uYWxpemF0aW9uKTtcbiAgcmV0dXJuIGJsYWtlMmIob3V0Lmxlbmd0aCwgbnVsbCwgbnVsbCwgcGVyc29uYWxpemF0aW9uKS51cGRhdGUoYnVmZmVyKS5kaWdlc3Qob3V0KTtcbn1cblxuZnVuY3Rpb24gZ2V0SGVhZGVyRGlnZXN0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHR4OiBaY2FzaFRyYW5zYWN0aW9uPFROdW1iZXI+KTogQnVmZmVyIHtcbiAgLy8gaHR0cHM6Ly96aXBzLnouY2FzaC96aXAtMDI0NCN0LTEtaGVhZGVyLWRpZ2VzdFxuICBjb25zdCBtYXNrID0gdHgub3ZlcndpbnRlcmVkID8gMSA6IDA7XG4gIGNvbnN0IHdyaXRlciA9IEJ1ZmZlcldyaXRlci53aXRoQ2FwYWNpdHkoNCAqIDUpO1xuICB3cml0ZXIud3JpdGVJbnQzMih0eC52ZXJzaW9uIHwgKG1hc2sgPDwgMzEpKTsgLy8gU2V0IG92ZXJ3aW50ZXIgYml0XG4gIHdyaXRlci53cml0ZVVJbnQzMih0eC52ZXJzaW9uR3JvdXBJZCk7XG4gIHdyaXRlci53cml0ZVVJbnQzMih0eC5jb25zZW5zdXNCcmFuY2hJZCk7XG4gIHdyaXRlci53cml0ZVVJbnQzMih0eC5sb2NrdGltZSk7XG4gIHdyaXRlci53cml0ZVVJbnQzMih0eC5leHBpcnlIZWlnaHQpO1xuICByZXR1cm4gZ2V0Qmxha2UyYkhhc2god3JpdGVyLmVuZCgpLCAnWlR4SWRIZWFkZXJzSGFzaCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJldm91dHNEaWdlc3Q8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIGluczogVHhJbnB1dFtdLFxuICB0YWcgPSAnWlR4SWRQcmV2b3V0SGFzaCcsXG4gIHNpZ1BhcmFtcz86IFNpZ25hdHVyZVBhcmFtczxUTnVtYmVyPlxuKTogQnVmZmVyIHtcbiAgaWYgKHNpZ1BhcmFtcykge1xuICAgIGlmIChzaWdQYXJhbXMuaGFzaFR5cGUgJiBUcmFuc2FjdGlvbi5TSUdIQVNIX0FOWU9ORUNBTlBBWSkge1xuICAgICAgcmV0dXJuIGdldFByZXZvdXRzRGlnZXN0KFtdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXJXcml0ZXIgPSBuZXcgQnVmZmVyV3JpdGVyKEJ1ZmZlci5hbGxvY1Vuc2FmZSgzNiAqIGlucy5sZW5ndGgpKTtcbiAgaW5zLmZvckVhY2goZnVuY3Rpb24gKHR4SW4pIHtcbiAgICBidWZmZXJXcml0ZXIud3JpdGVTbGljZSh0eEluLmhhc2gpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVVJbnQzMih0eEluLmluZGV4KTtcbiAgfSk7XG4gIHJldHVybiBnZXRCbGFrZTJiSGFzaChidWZmZXJXcml0ZXIuZW5kKCksIHRhZyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXF1ZW5jZURpZ2VzdDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgaW5zOiBUeElucHV0W10sXG4gIHRhZyA9ICdaVHhJZFNlcXVlbmNIYXNoJyxcbiAgc2lnUGFyYW1zPzogU2lnbmF0dXJlUGFyYW1zPFROdW1iZXI+XG4pOiBCdWZmZXIge1xuICAvLyB0eGlkOiBodHRwczovL3ppcHMuei5jYXNoL3ppcC0wMjQ0I3QtMmItc2VxdWVuY2UtZGlnZXN0XG4gIC8vIHNpZzogaHR0cHM6Ly96aXBzLnouY2FzaC96aXAtMDI0NCNzLTJiLXNlcXVlbmNlLXNpZy1kaWdlc3RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoLWhhY2t3b3Jrcy96Y2FzaC10ZXN0LXZlY3RvcnMvYmxvYi9kZDhmZGIvemlwXzAyNDQucHkjTDI2M1xuICBpZiAoc2lnUGFyYW1zKSB7XG4gICAgY29uc3QgeyBoYXNoVHlwZSB9ID0gc2lnUGFyYW1zO1xuICAgIGlmIChcbiAgICAgIGhhc2hUeXBlICYgVHJhbnNhY3Rpb24uU0lHSEFTSF9BTllPTkVDQU5QQVkgfHxcbiAgICAgIChoYXNoVHlwZSAmIDB4MWYpID09PSBUcmFuc2FjdGlvbi5TSUdIQVNIX1NJTkdMRSB8fFxuICAgICAgKGhhc2hUeXBlICYgMHgxZikgPT09IFRyYW5zYWN0aW9uLlNJR0hBU0hfTk9ORVxuICAgICkge1xuICAgICAgcmV0dXJuIGdldFNlcXVlbmNlRGlnZXN0KFtdKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXJXcml0ZXIgPSBuZXcgQnVmZmVyV3JpdGVyKEJ1ZmZlci5hbGxvY1Vuc2FmZSg0ICogaW5zLmxlbmd0aCkpO1xuXG4gIGlucy5mb3JFYWNoKGZ1bmN0aW9uICh0eEluKSB7XG4gICAgYnVmZmVyV3JpdGVyLndyaXRlVUludDMyKHR4SW4uc2VxdWVuY2UpO1xuICB9KTtcblxuICByZXR1cm4gZ2V0Qmxha2UyYkhhc2goYnVmZmVyV3JpdGVyLmVuZCgpLCB0YWcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0c0RpZ2VzdDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgb3V0czogVHhPdXRwdXQ8VE51bWJlcj5bXSxcbiAgdGFnID0gJ1pUeElkT3V0cHV0c0hhc2gnLFxuICBzaWdQYXJhbXM/OiBTaWduYXR1cmVQYXJhbXM8VE51bWJlcj5cbik6IEJ1ZmZlciB7XG4gIC8vIHR4aWQ6IGh0dHBzOi8vemlwcy56LmNhc2gvemlwLTAyNDQjdC0yYy1vdXRwdXRzLWRpZ2VzdFxuICAvLyBzaWc6IGh0dHBzOi8vemlwcy56LmNhc2gvemlwLTAyNDQjcy0yYy1vdXRwdXRzLXNpZy1kaWdlc3RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3pjYXNoLWhhY2t3b3Jrcy96Y2FzaC10ZXN0LXZlY3RvcnMvYmxvYi9kZDhmZGIvemlwXzAyNDQucHkjTDI3NVxuICBpZiAoc2lnUGFyYW1zKSB7XG4gICAgbGV0IHsgaGFzaFR5cGUgfSA9IHNpZ1BhcmFtcztcbiAgICBoYXNoVHlwZSA9IGhhc2hUeXBlICYgMHgxZjtcblxuICAgIGlmIChoYXNoVHlwZSA9PT0gVHJhbnNhY3Rpb24uU0lHSEFTSF9TSU5HTEUpIHtcbiAgICAgIGlmIChzaWdQYXJhbXMuaW5JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgfVxuICAgICAgaWYgKG91dHNbc2lnUGFyYW1zLmluSW5kZXhdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGdldE91dHB1dHNEaWdlc3Qob3V0cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0T3V0cHV0c0RpZ2VzdChbb3V0c1tzaWdQYXJhbXMuaW5JbmRleF1dKTtcbiAgICB9XG5cbiAgICBpZiAoaGFzaFR5cGUgPT09IFRyYW5zYWN0aW9uLlNJR0hBU0hfTk9ORSkge1xuICAgICAgcmV0dXJuIGdldE91dHB1dHNEaWdlc3QoW10pO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRPdXRwdXRzRGlnZXN0KG91dHMsIHRhZyk7XG4gIH1cblxuICAvLyBGaW5kIG91dCB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0cyBhbmQgd3JpdGUgdGhlbVxuICBjb25zdCB0eE91dHNTaXplID0gb3V0cy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgb3V0cHV0KSB7XG4gICAgcmV0dXJuIHN1bSArIDggKyB2YXJTbGljZVNpemUob3V0cHV0LnNjcmlwdCk7XG4gIH0sIDApO1xuXG4gIGNvbnN0IGJ1ZmZlcldyaXRlciA9IG5ldyBCdWZmZXJXcml0ZXIoQnVmZmVyLmFsbG9jVW5zYWZlKHR4T3V0c1NpemUpKTtcblxuICBvdXRzLmZvckVhY2goZnVuY3Rpb24gKG91dCkge1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVVJbnQ2NChvdXQudmFsdWUpO1xuICAgIGJ1ZmZlcldyaXRlci53cml0ZVZhclNsaWNlKG91dC5zY3JpcHQpO1xuICB9KTtcblxuICByZXR1cm4gZ2V0Qmxha2UyYkhhc2goYnVmZmVyV3JpdGVyLmVuZCgpLCB0YWcpO1xufVxuXG5mdW5jdGlvbiBnZXRUeGluRGlnZXN0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KGlucHV0OiBUeElucHV0LCBzaWdQYXJhbXM6IFNpZ25hdHVyZVBhcmFtczxUTnVtYmVyPikge1xuICAvLyBodHRwczovL3ppcHMuei5jYXNoL3ppcC0wMjQ0I3MtMmQtdHhpbi1zaWctZGlnZXN0XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96Y2FzaC1oYWNrd29ya3MvemNhc2gtdGVzdC12ZWN0b3JzL2Jsb2IvZGQ4ZmRiL3ppcF8wMjQ0LnB5I0wyOTFcbiAgY29uc3Qgd3JpdGVyID0gQnVmZmVyV3JpdGVyLndpdGhDYXBhY2l0eShcbiAgICAzMiAvKiBwcmV2b3V0IGhhc2ggKi8gK1xuICAgICAgNCAvKiBwcmV2b3V0IHZpbiAqLyArXG4gICAgICB2YXJTbGljZVNpemUoc2lnUGFyYW1zLnByZXZPdXRTY3JpcHQpICtcbiAgICAgIDggLyogdmFsdWUgKi8gK1xuICAgICAgNCAvKiBzZXF1ZW5jZSAqL1xuICApO1xuICB3cml0ZXIud3JpdGVTbGljZShpbnB1dC5oYXNoKTtcbiAgd3JpdGVyLndyaXRlVUludDMyKGlucHV0LmluZGV4KTtcbiAgd3JpdGVyLndyaXRlVmFyU2xpY2Uoc2lnUGFyYW1zLnByZXZPdXRTY3JpcHQpO1xuICB3cml0ZXIud3JpdGVVSW50NjQoc2lnUGFyYW1zLnZhbHVlKTtcbiAgd3JpdGVyLndyaXRlVUludDMyKGlucHV0LnNlcXVlbmNlKTtcbiAgcmV0dXJuIGdldEJsYWtlMmJIYXNoKHdyaXRlci5lbmQoKSwgJ1pjYXNoX19fVHhJbkhhc2gnKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhbnNwYXJlbnREaWdlc3Q8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gIHR4OiB7IGluczogVHhJbnB1dFtdOyBvdXRzOiBUeE91dHB1dDxUTnVtYmVyPltdIH0sXG4gIHNpZ1BhcmFtcz86IFNpZ25hdHVyZVBhcmFtczxUTnVtYmVyPlxuKTogQnVmZmVyIHtcbiAgLy8gdHhpZDogaHR0cHM6Ly96aXBzLnouY2FzaC96aXAtMDI0NCN0LTItdHJhbnNwYXJlbnQtZGlnZXN0XG4gIC8vIHNpZzogaHR0cHM6Ly96aXBzLnouY2FzaC96aXAtMDI0NCNzLTJhLXByZXZvdXRzLXNpZy1kaWdlc3RcbiAgaWYgKHNpZ1BhcmFtcykge1xuICAgIGlmIChzaWdQYXJhbXMuaW5JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZ2V0VHJhbnNwYXJlbnREaWdlc3QodHgpO1xuICAgIH1cbiAgfVxuXG4gIGxldCBidWZmZXI7XG4gIGlmICh0eC5pbnMubGVuZ3RoIHx8IHR4Lm91dHMubGVuZ3RoKSB7XG4gICAgY29uc3Qgd3JpdGVyID0gQnVmZmVyV3JpdGVyLndpdGhDYXBhY2l0eSgzMiAqIChzaWdQYXJhbXMgPyA0IDogMykpO1xuICAgIHdyaXRlci53cml0ZVNsaWNlKGdldFByZXZvdXRzRGlnZXN0KHR4LmlucywgdW5kZWZpbmVkLCBzaWdQYXJhbXMpKTtcbiAgICB3cml0ZXIud3JpdGVTbGljZShnZXRTZXF1ZW5jZURpZ2VzdCh0eC5pbnMsIHVuZGVmaW5lZCwgc2lnUGFyYW1zKSk7XG4gICAgd3JpdGVyLndyaXRlU2xpY2UoZ2V0T3V0cHV0c0RpZ2VzdCh0eC5vdXRzLCB1bmRlZmluZWQsIHNpZ1BhcmFtcykpO1xuICAgIGlmIChzaWdQYXJhbXMpIHtcbiAgICAgIGlmIChzaWdQYXJhbXMuaW5JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgfVxuICAgICAgd3JpdGVyLndyaXRlU2xpY2UoZ2V0VHhpbkRpZ2VzdCh0eC5pbnNbc2lnUGFyYW1zLmluSW5kZXhdLCBzaWdQYXJhbXMpKTtcbiAgICB9XG4gICAgYnVmZmVyID0gd3JpdGVyLmVuZCgpO1xuICB9IGVsc2Uge1xuICAgIGJ1ZmZlciA9IEJ1ZmZlci5vZigpO1xuICB9XG4gIHJldHVybiBnZXRCbGFrZTJiSGFzaChidWZmZXIsICdaVHhJZFRyYW5zcGFIYXNoJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNhcGxpbmdEaWdlc3Q8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4odHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4pOiBCdWZmZXIge1xuICAvLyBodHRwczovL3ppcHMuei5jYXNoL3ppcC0wMjQ0I3QtMy1zYXBsaW5nLWRpZ2VzdFxuICByZXR1cm4gZ2V0Qmxha2UyYkhhc2goQnVmZmVyLm9mKCksICdaVHhJZFNhcGxpbmdIYXNoJyk7XG59XG5cbmZ1bmN0aW9uIGdldE9yY2hhcmREaWdlc3Q8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4odHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4pOiBCdWZmZXIge1xuICAvLyBodHRwczovL3ppcHMuei5jYXNoL3ppcC0wMjQ0I3QtNC1vcmNoYXJkLWRpZ2VzdFxuICByZXR1cm4gZ2V0Qmxha2UyYkhhc2goQnVmZmVyLm9mKCksICdaVHhJZE9yY2hhcmRIYXNoJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHR4XG4gKiBAcGFyYW0gc2lnbmF0dXJlUGFyYW1zIC0gY2FsY3VsYXRlcyB0eGlkIHdoZW4gdW5kZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGdldERpZ2VzdDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIHNpZ25hdHVyZVBhcmFtcz86IFNpZ25hdHVyZVBhcmFtczxUTnVtYmVyPlxuKTogQnVmZmVyIHtcbiAgLy8gdHhpZDogaHR0cHM6Ly96aXBzLnouY2FzaC96aXAtMDI0NCNpZDRcbiAgLy8gc2lnOiBodHRwczovL3ppcHMuei5jYXNoL3ppcC0wMjQ0I2lkMTNcbiAgY29uc3Qgd3JpdGVyID0gQnVmZmVyV3JpdGVyLndpdGhDYXBhY2l0eSgzMiAqIDQpO1xuICB3cml0ZXIud3JpdGVTbGljZShnZXRIZWFkZXJEaWdlc3QodHgpKTtcbiAgd3JpdGVyLndyaXRlU2xpY2UoZ2V0VHJhbnNwYXJlbnREaWdlc3QodHgsIHNpZ25hdHVyZVBhcmFtcykpO1xuICB3cml0ZXIud3JpdGVTbGljZShnZXRTYXBsaW5nRGlnZXN0KHR4KSk7XG4gIHdyaXRlci53cml0ZVNsaWNlKGdldE9yY2hhcmREaWdlc3QodHgpKTtcblxuICBjb25zdCB0YWcgPSAnWmNhc2hUeEhhc2hfJztcbiAgY29uc3QgcGVyc29uYWxpemF0aW9uID0gQnVmZmVyV3JpdGVyLndpdGhDYXBhY2l0eSh0YWcubGVuZ3RoICsgNCAvKiBVSW50MzIgKi8pO1xuICBwZXJzb25hbGl6YXRpb24ud3JpdGVTbGljZShCdWZmZXIuZnJvbSh0YWcpKTtcbiAgcGVyc29uYWxpemF0aW9uLndyaXRlVUludDMyKHR4LmNvbnNlbnN1c0JyYW5jaElkKTtcbiAgcmV0dXJuIGdldEJsYWtlMmJIYXNoKHdyaXRlci5lbmQoKSwgcGVyc29uYWxpemF0aW9uLmVuZCgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR4aWREaWdlc3Q8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4odHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4pOiBCdWZmZXIge1xuICAvLyBodHRwczovL3ppcHMuei5jYXNoL3ppcC0wMjQ0I2lkNFxuICByZXR1cm4gZ2V0RGlnZXN0KHR4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25hdHVyZURpZ2VzdDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IFpjYXNoVHJhbnNhY3Rpb248VE51bWJlcj4sXG4gIGluSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgcHJldk91dFNjcmlwdDogQnVmZmVyLFxuICB2YWx1ZTogVE51bWJlcixcbiAgaGFzaFR5cGU6IG51bWJlclxuKTogQnVmZmVyIHtcbiAgLy8gaHR0cHM6Ly96aXBzLnouY2FzaC96aXAtMDI0NCNpZDEzXG4gIHJldHVybiBnZXREaWdlc3QodHgsIHtcbiAgICBpbkluZGV4LFxuICAgIHByZXZPdXRTY3JpcHQsXG4gICAgdmFsdWUsXG4gICAgaGFzaFR5cGUsXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,4 @@
1
+ export * from './ZcashPsbt';
2
+ export * from './ZcashTransaction';
3
+ export * from './ZcashTransactionBuilder';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/bitgo/zcash/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./ZcashPsbt"), exports);
14
+ __exportStar(require("./ZcashTransaction"), exports);
15
+ __exportStar(require("./ZcashTransactionBuilder"), exports);
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYml0Z28vemNhc2gvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsOENBQTRCO0FBQzVCLHFEQUFtQztBQUNuQyw0REFBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL1pjYXNoUHNidCc7XG5leHBvcnQgKiBmcm9tICcuL1pjYXNoVHJhbnNhY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9aY2FzaFRyYW5zYWN0aW9uQnVpbGRlcic7XG4iXX0=
@@ -0,0 +1,19 @@
1
+ /// <reference types="node" />
2
+ declare const types: {
3
+ P2MS: string;
4
+ NONSTANDARD: string;
5
+ NULLDATA: string;
6
+ P2PK: string;
7
+ P2PKH: string;
8
+ P2SH: string;
9
+ P2WPKH: string;
10
+ P2WSH: string;
11
+ P2TR: string;
12
+ P2TR_NS: string;
13
+ WITNESS_COMMITMENT: string;
14
+ };
15
+ declare function classifyOutput(script: Buffer): string;
16
+ declare function classifyInput(script: Buffer, allowIncomplete?: boolean): string;
17
+ declare function classifyWitness(script: Buffer[], allowIncomplete?: boolean): string;
18
+ export { classifyInput as input, classifyOutput as output, classifyWitness as witness, types };
19
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/classify.ts"],"names":[],"mappings":";AAYA,QAAA,MAAM,KAAK;;;;;;;;;;;;CAYV,CAAC;AAEF,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAkB9C;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAYxE;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,GAAG,MAAM,CAU5E;AAED,OAAO,EAAE,aAAa,IAAI,KAAK,EAAE,cAAc,IAAI,MAAM,EAAE,eAAe,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC"}