@btc-vision/bitcoin 6.5.6 → 7.0.0-alpha.1

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 (456) hide show
  1. package/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
  2. package/benchmark/psbt-2000-inputs.bench.ts +178 -0
  3. package/benchmark/signing.bench.ts +147 -0
  4. package/browser/address.d.ts +57 -10
  5. package/browser/address.d.ts.map +1 -0
  6. package/browser/bech32utils.d.ts +9 -1
  7. package/browser/bech32utils.d.ts.map +1 -0
  8. package/browser/bip66.d.ts +11 -6
  9. package/browser/bip66.d.ts.map +1 -0
  10. package/browser/block.d.ts +117 -11
  11. package/browser/block.d.ts.map +1 -0
  12. package/browser/branded.d.ts +20 -0
  13. package/browser/branded.d.ts.map +1 -0
  14. package/browser/crypto/crypto.d.ts +1 -0
  15. package/browser/crypto/crypto.d.ts.map +1 -0
  16. package/browser/crypto.d.ts +46 -7
  17. package/browser/crypto.d.ts.map +1 -0
  18. package/browser/ecc/context.d.ts +129 -0
  19. package/browser/ecc/context.d.ts.map +1 -0
  20. package/browser/ecc/index.d.ts +11 -0
  21. package/browser/ecc/index.d.ts.map +1 -0
  22. package/browser/ecc/types.d.ts +128 -0
  23. package/browser/ecc/types.d.ts.map +1 -0
  24. package/browser/ecpair.d.ts +99 -0
  25. package/browser/errors.d.ts +124 -0
  26. package/browser/errors.d.ts.map +1 -0
  27. package/browser/index.d.ts +32 -5
  28. package/browser/index.d.ts.map +1 -0
  29. package/browser/index.js +12477 -101
  30. package/browser/io/BinaryReader.d.ts +276 -0
  31. package/browser/io/BinaryReader.d.ts.map +1 -0
  32. package/browser/io/BinaryWriter.d.ts +391 -0
  33. package/browser/io/BinaryWriter.d.ts.map +1 -0
  34. package/browser/io/MemoryPool.d.ts +220 -0
  35. package/browser/io/MemoryPool.d.ts.map +1 -0
  36. package/browser/io/base64.d.ts +13 -0
  37. package/browser/io/base64.d.ts.map +1 -0
  38. package/browser/io/hex.d.ts +67 -0
  39. package/browser/io/hex.d.ts.map +1 -0
  40. package/browser/io/index.d.ts +17 -0
  41. package/browser/io/index.d.ts.map +1 -0
  42. package/browser/io/utils.d.ts +199 -0
  43. package/browser/io/utils.d.ts.map +1 -0
  44. package/browser/merkle.d.ts +10 -1
  45. package/browser/merkle.d.ts.map +1 -0
  46. package/browser/networks.d.ts +70 -9
  47. package/browser/networks.d.ts.map +1 -0
  48. package/browser/opcodes.d.ts +1 -0
  49. package/browser/opcodes.d.ts.map +1 -0
  50. package/browser/payments/bip341.d.ts +35 -9
  51. package/browser/payments/bip341.d.ts.map +1 -0
  52. package/browser/payments/embed.d.ts +112 -1
  53. package/browser/payments/embed.d.ts.map +1 -0
  54. package/browser/payments/index.d.ts +17 -10
  55. package/browser/payments/index.d.ts.map +1 -0
  56. package/browser/payments/p2ms.d.ts +150 -0
  57. package/browser/payments/p2ms.d.ts.map +1 -0
  58. package/browser/payments/p2op.d.ts +150 -24
  59. package/browser/payments/p2op.d.ts.map +1 -0
  60. package/browser/payments/p2pk.d.ts +154 -1
  61. package/browser/payments/p2pk.d.ts.map +1 -0
  62. package/browser/payments/p2pkh.d.ts +176 -1
  63. package/browser/payments/p2pkh.d.ts.map +1 -0
  64. package/browser/payments/p2sh.d.ts +150 -1
  65. package/browser/payments/p2sh.d.ts.map +1 -0
  66. package/browser/payments/p2tr.d.ts +185 -1
  67. package/browser/payments/p2tr.d.ts.map +1 -0
  68. package/browser/payments/p2wpkh.d.ts +161 -1
  69. package/browser/payments/p2wpkh.d.ts.map +1 -0
  70. package/browser/payments/p2wsh.d.ts +146 -1
  71. package/browser/payments/p2wsh.d.ts.map +1 -0
  72. package/browser/payments/types.d.ts +94 -64
  73. package/browser/payments/types.d.ts.map +1 -0
  74. package/browser/psbt/bip371.d.ts +34 -8
  75. package/browser/psbt/bip371.d.ts.map +1 -0
  76. package/browser/psbt/psbtutils.d.ts +56 -16
  77. package/browser/psbt/psbtutils.d.ts.map +1 -0
  78. package/browser/psbt/types.d.ts +245 -0
  79. package/browser/psbt/types.d.ts.map +1 -0
  80. package/browser/psbt/utils.d.ts +64 -0
  81. package/browser/psbt/utils.d.ts.map +1 -0
  82. package/browser/psbt/validation.d.ts +84 -0
  83. package/browser/psbt/validation.d.ts.map +1 -0
  84. package/browser/psbt.d.ts +82 -118
  85. package/browser/psbt.d.ts.map +1 -0
  86. package/browser/pubkey.d.ts +27 -6
  87. package/browser/pubkey.d.ts.map +1 -0
  88. package/browser/push_data.d.ts +24 -2
  89. package/browser/push_data.d.ts.map +1 -0
  90. package/browser/script.d.ts +33 -8
  91. package/browser/script.d.ts.map +1 -0
  92. package/browser/script_number.d.ts +17 -0
  93. package/browser/script_number.d.ts.map +1 -0
  94. package/browser/script_signature.d.ts +23 -5
  95. package/browser/script_signature.d.ts.map +1 -0
  96. package/browser/transaction.d.ts +160 -18
  97. package/browser/transaction.d.ts.map +1 -0
  98. package/browser/types.d.ts +36 -38
  99. package/browser/types.d.ts.map +1 -0
  100. package/browser/workers/WorkerSigningPool.d.ts +143 -0
  101. package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
  102. package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
  103. package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
  104. package/browser/workers/ecc-bundle.d.ts +25 -0
  105. package/browser/workers/ecc-bundle.d.ts.map +1 -0
  106. package/browser/workers/index.d.ts +91 -0
  107. package/browser/workers/index.d.ts.map +1 -0
  108. package/browser/workers/psbt-parallel.d.ts +88 -0
  109. package/browser/workers/psbt-parallel.d.ts.map +1 -0
  110. package/browser/workers/signing-worker.d.ts +37 -0
  111. package/browser/workers/signing-worker.d.ts.map +1 -0
  112. package/browser/workers/types.d.ts +365 -0
  113. package/browser/workers/types.d.ts.map +1 -0
  114. package/build/address.d.ts +58 -11
  115. package/build/address.d.ts.map +1 -0
  116. package/build/address.js +82 -25
  117. package/build/address.js.map +1 -0
  118. package/build/bech32utils.d.ts +9 -1
  119. package/build/bech32utils.d.ts.map +1 -0
  120. package/build/bech32utils.js +10 -2
  121. package/build/bech32utils.js.map +1 -0
  122. package/build/bip66.d.ts +11 -6
  123. package/build/bip66.d.ts.map +1 -0
  124. package/build/bip66.js +32 -3
  125. package/build/bip66.js.map +1 -0
  126. package/build/block.d.ts +117 -11
  127. package/build/block.d.ts.map +1 -0
  128. package/build/block.js +202 -72
  129. package/build/block.js.map +1 -0
  130. package/build/branded.d.ts +20 -0
  131. package/build/branded.d.ts.map +1 -0
  132. package/build/branded.js +7 -0
  133. package/build/branded.js.map +1 -0
  134. package/build/crypto/crypto.d.ts +1 -0
  135. package/build/crypto/crypto.d.ts.map +1 -0
  136. package/build/crypto/crypto.js +1 -0
  137. package/build/crypto/crypto.js.map +1 -0
  138. package/build/crypto.d.ts +46 -7
  139. package/build/crypto.d.ts.map +1 -0
  140. package/build/crypto.js +65 -20
  141. package/build/crypto.js.map +1 -0
  142. package/build/ecc/context.d.ts +135 -0
  143. package/build/ecc/context.d.ts.map +1 -0
  144. package/build/ecc/context.js +232 -0
  145. package/build/ecc/context.js.map +1 -0
  146. package/build/ecc/index.d.ts +11 -0
  147. package/build/ecc/index.d.ts.map +1 -0
  148. package/build/ecc/index.js +11 -0
  149. package/build/ecc/index.js.map +1 -0
  150. package/build/ecc/types.d.ts +134 -0
  151. package/build/ecc/types.d.ts.map +1 -0
  152. package/build/ecc/types.js +8 -0
  153. package/build/ecc/types.js.map +1 -0
  154. package/build/errors.d.ts +124 -0
  155. package/build/errors.d.ts.map +1 -0
  156. package/build/errors.js +155 -0
  157. package/build/errors.js.map +1 -0
  158. package/build/index.d.ts +32 -5
  159. package/build/index.d.ts.map +1 -0
  160. package/build/index.js +26 -3
  161. package/build/index.js.map +1 -0
  162. package/build/io/BinaryReader.d.ts +276 -0
  163. package/build/io/BinaryReader.d.ts.map +1 -0
  164. package/build/io/BinaryReader.js +425 -0
  165. package/build/io/BinaryReader.js.map +1 -0
  166. package/build/io/BinaryWriter.d.ts +391 -0
  167. package/build/io/BinaryWriter.d.ts.map +1 -0
  168. package/build/io/BinaryWriter.js +611 -0
  169. package/build/io/BinaryWriter.js.map +1 -0
  170. package/build/io/MemoryPool.d.ts +220 -0
  171. package/build/io/MemoryPool.d.ts.map +1 -0
  172. package/build/io/MemoryPool.js +309 -0
  173. package/build/io/MemoryPool.js.map +1 -0
  174. package/build/io/base64.d.ts +13 -0
  175. package/build/io/base64.d.ts.map +1 -0
  176. package/build/io/base64.js +20 -0
  177. package/build/io/base64.js.map +1 -0
  178. package/build/io/hex.d.ts +67 -0
  179. package/build/io/hex.d.ts.map +1 -0
  180. package/build/io/hex.js +138 -0
  181. package/build/io/hex.js.map +1 -0
  182. package/build/io/index.d.ts +17 -0
  183. package/build/io/index.d.ts.map +1 -0
  184. package/build/io/index.js +23 -0
  185. package/build/io/index.js.map +1 -0
  186. package/build/io/utils.d.ts +199 -0
  187. package/build/io/utils.d.ts.map +1 -0
  188. package/build/io/utils.js +271 -0
  189. package/build/io/utils.js.map +1 -0
  190. package/build/merkle.d.ts +10 -1
  191. package/build/merkle.d.ts.map +1 -0
  192. package/build/merkle.js +12 -1
  193. package/build/merkle.js.map +1 -0
  194. package/build/networks.d.ts +70 -9
  195. package/build/networks.d.ts.map +1 -0
  196. package/build/networks.js +90 -4
  197. package/build/networks.js.map +1 -0
  198. package/build/opcodes.d.ts +1 -0
  199. package/build/opcodes.d.ts.map +1 -0
  200. package/build/opcodes.js +1 -0
  201. package/build/opcodes.js.map +1 -0
  202. package/build/payments/bip341.d.ts +35 -9
  203. package/build/payments/bip341.d.ts.map +1 -0
  204. package/build/payments/bip341.js +34 -15
  205. package/build/payments/bip341.js.map +1 -0
  206. package/build/payments/embed.d.ts +120 -1
  207. package/build/payments/embed.d.ts.map +1 -0
  208. package/build/payments/embed.js +215 -34
  209. package/build/payments/embed.js.map +1 -0
  210. package/build/payments/index.d.ts +17 -10
  211. package/build/payments/index.d.ts.map +1 -0
  212. package/build/payments/index.js +20 -10
  213. package/build/payments/index.js.map +1 -0
  214. package/build/payments/p2ms.d.ts +159 -1
  215. package/build/payments/p2ms.d.ts.map +1 -0
  216. package/build/payments/p2ms.js +427 -108
  217. package/build/payments/p2ms.js.map +1 -0
  218. package/build/payments/p2op.d.ts +158 -24
  219. package/build/payments/p2op.d.ts.map +1 -0
  220. package/build/payments/p2op.js +379 -93
  221. package/build/payments/p2op.js.map +1 -0
  222. package/build/payments/p2pk.d.ts +162 -1
  223. package/build/payments/p2pk.d.ts.map +1 -0
  224. package/build/payments/p2pk.js +327 -58
  225. package/build/payments/p2pk.js.map +1 -0
  226. package/build/payments/p2pkh.d.ts +185 -1
  227. package/build/payments/p2pkh.d.ts.map +1 -0
  228. package/build/payments/p2pkh.js +467 -114
  229. package/build/payments/p2pkh.js.map +1 -0
  230. package/build/payments/p2sh.d.ts +159 -1
  231. package/build/payments/p2sh.d.ts.map +1 -0
  232. package/build/payments/p2sh.js +500 -150
  233. package/build/payments/p2sh.js.map +1 -0
  234. package/build/payments/p2tr.d.ts +193 -1
  235. package/build/payments/p2tr.d.ts.map +1 -0
  236. package/build/payments/p2tr.js +592 -174
  237. package/build/payments/p2tr.js.map +1 -0
  238. package/build/payments/p2wpkh.d.ts +170 -1
  239. package/build/payments/p2wpkh.d.ts.map +1 -0
  240. package/build/payments/p2wpkh.js +428 -103
  241. package/build/payments/p2wpkh.js.map +1 -0
  242. package/build/payments/p2wsh.d.ts +155 -1
  243. package/build/payments/p2wsh.d.ts.map +1 -0
  244. package/build/payments/p2wsh.js +465 -143
  245. package/build/payments/p2wsh.js.map +1 -0
  246. package/build/payments/types.d.ts +98 -64
  247. package/build/payments/types.d.ts.map +1 -0
  248. package/build/payments/types.js +17 -13
  249. package/build/payments/types.js.map +1 -0
  250. package/build/psbt/bip371.d.ts +35 -9
  251. package/build/psbt/bip371.d.ts.map +1 -0
  252. package/build/psbt/bip371.js +117 -28
  253. package/build/psbt/bip371.js.map +1 -0
  254. package/build/psbt/psbtutils.d.ts +56 -16
  255. package/build/psbt/psbtutils.d.ts.map +1 -0
  256. package/build/psbt/psbtutils.js +71 -16
  257. package/build/psbt/psbtutils.js.map +1 -0
  258. package/build/psbt/types.d.ts +249 -0
  259. package/build/psbt/types.d.ts.map +1 -0
  260. package/build/psbt/types.js +6 -0
  261. package/build/psbt/types.js.map +1 -0
  262. package/build/psbt/utils.d.ts +68 -0
  263. package/build/psbt/utils.d.ts.map +1 -0
  264. package/build/psbt/utils.js +171 -0
  265. package/build/psbt/utils.js.map +1 -0
  266. package/build/psbt/validation.d.ts +88 -0
  267. package/build/psbt/validation.d.ts.map +1 -0
  268. package/build/psbt/validation.js +149 -0
  269. package/build/psbt/validation.js.map +1 -0
  270. package/build/psbt.d.ts +84 -120
  271. package/build/psbt.d.ts.map +1 -0
  272. package/build/psbt.js +406 -413
  273. package/build/psbt.js.map +1 -0
  274. package/build/pubkey.d.ts +27 -6
  275. package/build/pubkey.d.ts.map +1 -0
  276. package/build/pubkey.js +36 -12
  277. package/build/pubkey.js.map +1 -0
  278. package/build/push_data.d.ts +24 -2
  279. package/build/push_data.d.ts.map +1 -0
  280. package/build/push_data.js +44 -12
  281. package/build/push_data.js.map +1 -0
  282. package/build/script.d.ts +33 -8
  283. package/build/script.d.ts.map +1 -0
  284. package/build/script.js +101 -37
  285. package/build/script.js.map +1 -0
  286. package/build/script_number.d.ts +17 -0
  287. package/build/script_number.d.ts.map +1 -0
  288. package/build/script_number.js +19 -0
  289. package/build/script_number.js.map +1 -0
  290. package/build/script_signature.d.ts +23 -5
  291. package/build/script_signature.d.ts.map +1 -0
  292. package/build/script_signature.js +48 -15
  293. package/build/script_signature.js.map +1 -0
  294. package/build/transaction.d.ts +160 -18
  295. package/build/transaction.d.ts.map +1 -0
  296. package/build/transaction.js +443 -176
  297. package/build/transaction.js.map +1 -0
  298. package/build/tsconfig.build.tsbuildinfo +1 -0
  299. package/build/types.d.ts +36 -38
  300. package/build/types.d.ts.map +1 -0
  301. package/build/types.js +169 -57
  302. package/build/types.js.map +1 -0
  303. package/build/workers/WorkerSigningPool.d.ts +174 -0
  304. package/build/workers/WorkerSigningPool.d.ts.map +1 -0
  305. package/build/workers/WorkerSigningPool.js +553 -0
  306. package/build/workers/WorkerSigningPool.js.map +1 -0
  307. package/build/workers/WorkerSigningPool.node.d.ts +124 -0
  308. package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
  309. package/build/workers/WorkerSigningPool.node.js +753 -0
  310. package/build/workers/WorkerSigningPool.node.js.map +1 -0
  311. package/build/workers/ecc-bundle.d.ts +25 -0
  312. package/build/workers/ecc-bundle.d.ts.map +1 -0
  313. package/build/workers/ecc-bundle.js +25 -0
  314. package/build/workers/ecc-bundle.js.map +1 -0
  315. package/build/workers/index.d.ts +91 -0
  316. package/build/workers/index.d.ts.map +1 -0
  317. package/build/workers/index.js +114 -0
  318. package/build/workers/index.js.map +1 -0
  319. package/build/workers/psbt-parallel.d.ts +117 -0
  320. package/build/workers/psbt-parallel.d.ts.map +1 -0
  321. package/build/workers/psbt-parallel.js +233 -0
  322. package/build/workers/psbt-parallel.js.map +1 -0
  323. package/build/workers/signing-worker.d.ts +37 -0
  324. package/build/workers/signing-worker.d.ts.map +1 -0
  325. package/build/workers/signing-worker.js +350 -0
  326. package/build/workers/signing-worker.js.map +1 -0
  327. package/build/workers/types.d.ts +365 -0
  328. package/build/workers/types.d.ts.map +1 -0
  329. package/build/workers/types.js +60 -0
  330. package/build/workers/types.js.map +1 -0
  331. package/package.json +68 -9
  332. package/scripts/bundle-ecc.ts +111 -0
  333. package/src/address.ts +91 -45
  334. package/src/bech32utils.ts +3 -3
  335. package/src/bip66.ts +34 -24
  336. package/src/block.ts +205 -86
  337. package/src/branded.ts +18 -0
  338. package/src/crypto.ts +64 -26
  339. package/src/ecc/context.ts +280 -0
  340. package/src/ecc/index.ts +14 -0
  341. package/src/ecc/types.ts +147 -0
  342. package/src/ecpair.d.ts +99 -0
  343. package/src/errors.ts +163 -0
  344. package/src/index.ts +112 -9
  345. package/src/io/BinaryReader.ts +461 -0
  346. package/src/io/BinaryWriter.ts +696 -0
  347. package/src/io/MemoryPool.ts +343 -0
  348. package/src/io/base64.ts +20 -0
  349. package/src/io/hex.ts +155 -0
  350. package/src/io/index.ts +41 -0
  351. package/src/io/utils.ts +283 -0
  352. package/src/merkle.ts +14 -9
  353. package/src/networks.ts +9 -9
  354. package/src/payments/bip341.ts +32 -33
  355. package/src/payments/embed.ts +244 -41
  356. package/src/payments/index.ts +12 -10
  357. package/src/payments/p2ms.ts +497 -118
  358. package/src/payments/p2op.ts +432 -134
  359. package/src/payments/p2pk.ts +370 -72
  360. package/src/payments/p2pkh.ts +524 -130
  361. package/src/payments/p2sh.ts +572 -169
  362. package/src/payments/p2tr.ts +686 -194
  363. package/src/payments/p2wpkh.ts +482 -105
  364. package/src/payments/p2wsh.ts +524 -162
  365. package/src/payments/types.ts +80 -66
  366. package/src/psbt/bip371.ts +72 -51
  367. package/src/psbt/psbtutils.ts +39 -40
  368. package/src/psbt/types.ts +324 -0
  369. package/src/psbt/utils.ts +188 -0
  370. package/src/psbt/validation.ts +185 -0
  371. package/src/psbt.ts +608 -827
  372. package/src/pubkey.ts +22 -23
  373. package/src/push_data.ts +18 -16
  374. package/src/script.ts +81 -66
  375. package/src/script_number.ts +6 -6
  376. package/src/script_signature.ts +33 -36
  377. package/src/transaction.ts +462 -239
  378. package/src/types.ts +229 -100
  379. package/src/workers/WorkerSigningPool.node.ts +887 -0
  380. package/src/workers/WorkerSigningPool.ts +666 -0
  381. package/src/workers/ecc-bundle.ts +26 -0
  382. package/src/workers/index.ts +165 -0
  383. package/src/workers/psbt-parallel.ts +327 -0
  384. package/src/workers/signing-worker.ts +353 -0
  385. package/src/workers/types.ts +417 -0
  386. package/test/address.spec.ts +9 -6
  387. package/test/bitcoin.core.spec.ts +16 -17
  388. package/test/block.spec.ts +8 -7
  389. package/test/bufferutils.spec.ts +228 -214
  390. package/test/crypto.spec.ts +19 -11
  391. package/test/fixtures/p2pk.json +0 -8
  392. package/test/fixtures/p2pkh.json +1 -1
  393. package/test/fixtures/p2sh.json +1 -1
  394. package/test/fixtures/script.json +1 -1
  395. package/test/fixtures/transaction.json +2 -2
  396. package/test/integration/_regtest.ts +25 -0
  397. package/test/integration/addresses.spec.ts +4 -3
  398. package/test/integration/bip32.spec.ts +2 -1
  399. package/test/integration/blocks.spec.ts +1 -1
  400. package/test/integration/cltv.spec.ts +18 -16
  401. package/test/integration/csv.spec.ts +37 -64
  402. package/test/integration/payments.spec.ts +5 -3
  403. package/test/integration/taproot.spec.ts +76 -83
  404. package/test/integration/transactions.spec.ts +38 -35
  405. package/test/payments.spec.ts +35 -13
  406. package/test/payments.utils.ts +17 -16
  407. package/test/psbt.spec.ts +111 -100
  408. package/test/script.spec.ts +11 -10
  409. package/test/script_signature.spec.ts +9 -11
  410. package/test/taproot-cache.spec.ts +694 -0
  411. package/test/transaction.spec.ts +32 -40
  412. package/test/types.spec.ts +74 -29
  413. package/test/workers-pool.spec.ts +963 -0
  414. package/test/workers-signing.spec.ts +635 -0
  415. package/test/workers.spec.ts +1390 -0
  416. package/tsconfig.base.json +34 -18
  417. package/tsconfig.browser.json +15 -0
  418. package/tsconfig.build.json +5 -0
  419. package/tsconfig.json +5 -14
  420. package/typedoc.json +29 -0
  421. package/vite.config.browser.ts +3 -42
  422. package/vitest.config.integration.ts +2 -0
  423. package/browser/bufferutils.d.ts +0 -34
  424. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  425. package/browser/chunks/payments-B1wlSccx.js +0 -1089
  426. package/browser/chunks/psbt-BCNk7JUx.js +0 -4055
  427. package/browser/chunks/script-DyPItFEl.js +0 -318
  428. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  429. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  430. package/browser/ecc_lib.d.ts +0 -3
  431. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  432. package/browser/hooks/HookedSigner.d.ts +0 -4
  433. package/browser/hooks/SignatureManager.d.ts +0 -13
  434. package/browser/payments/lazy.d.ts +0 -2
  435. package/browser/typeforce.d.ts +0 -38
  436. package/build/bufferutils.d.ts +0 -34
  437. package/build/bufferutils.js +0 -141
  438. package/build/ecc_lib.d.ts +0 -3
  439. package/build/ecc_lib.js +0 -61
  440. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  441. package/build/hooks/AdvancedSignatureManager.js +0 -52
  442. package/build/hooks/HookedSigner.d.ts +0 -4
  443. package/build/hooks/HookedSigner.js +0 -64
  444. package/build/hooks/SignatureManager.d.ts +0 -13
  445. package/build/hooks/SignatureManager.js +0 -45
  446. package/build/payments/lazy.d.ts +0 -2
  447. package/build/payments/lazy.js +0 -28
  448. package/build/tsconfig.tsbuildinfo +0 -1
  449. package/src/bufferutils.ts +0 -188
  450. package/src/ecc_lib.ts +0 -94
  451. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  452. package/src/hooks/HookedSigner.ts +0 -108
  453. package/src/hooks/SignatureManager.ts +0 -84
  454. package/src/payments/lazy.ts +0 -28
  455. package/src/typeforce.d.ts +0 -38
  456. package/tsconfig.webpack.json +0 -18
@@ -4,7 +4,10 @@ import * as ecc from 'tiny-secp256k1';
4
4
  import { ECPairFactory } from 'ecpair';
5
5
  import { describe, it } from 'vitest';
6
6
  import * as bitcoin from '../../src/index.js';
7
- import { regtestUtils } from './_regtest.js';
7
+ import { fromHex, compare } from '../../src/index.js';
8
+ import type { Satoshi, PublicKey } from '../../src/index.js';
9
+ import type { HDSigner } from '../../src/psbt/types.js';
10
+ import { regtestUtils, broadcastAndVerify } from './_regtest.js';
8
11
 
9
12
  import rng from 'randombytes';
10
13
 
@@ -12,7 +15,7 @@ const ECPair = ECPairFactory(ecc);
12
15
  const regtest = { ...regtestUtils.network, bech32Opnet: 'opreg' };
13
16
  const bip32 = BIP32Factory(ecc);
14
17
 
15
- const validator = (pubkey: Buffer, msghash: Buffer, signature: Buffer): boolean =>
18
+ const validator = (pubkey: Uint8Array, msghash: Uint8Array, signature: Uint8Array): boolean =>
16
19
  ECPair.fromPublicKey(pubkey).verify(msghash, signature);
17
20
 
18
21
  // See bottom of file for some helper functions used to make the payment objects needed.
@@ -29,8 +32,8 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
29
32
  index: 0,
30
33
  sequence: 0xffffffff, // These are defaults. This line is not needed.
31
34
 
32
- // non-segwit inputs now require passing the whole previous tx as Buffer
33
- nonWitnessUtxo: Buffer.from(
35
+ // non-segwit inputs now require passing the whole previous tx as Uint8Array
36
+ nonWitnessUtxo: fromHex(
34
37
  '0200000001f9f34e95b9d5c8abcd20fc5bd4a825d1517be62f0f775e5f36da944d9' +
35
38
  '452e550000000006b483045022100c86e9a111afc90f64b4904bd609e9eaed80d48' +
36
39
  'ca17c162b1aca0a788ac3526f002207bb79b60d4fc6526329bf18a77135dc566020' +
@@ -44,7 +47,6 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
44
47
  '76a9148bbc95d2709c71607c60ee3f097c1217482f518d88ac' +
45
48
  // locktime
46
49
  '00000000',
47
- 'hex',
48
50
  ),
49
51
 
50
52
  // // If this input was segwit, instead of nonWitnessUtxo, you would add
@@ -63,7 +65,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
63
65
  });
64
66
  psbt.addOutput({
65
67
  address: '1KRMKfeZcmosxALVYESdPNez1AP1mEtywp',
66
- value: 80000,
68
+ value: 80000n as Satoshi,
67
69
  });
68
70
  psbt.signInput(0, alice);
69
71
  psbt.validateSignaturesOfInput(0, validator);
@@ -103,11 +105,11 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
103
105
  .addInput(inputData2) // alice2 unspent
104
106
  .addOutput({
105
107
  address: 'mwCwTceJvYV27KXBc3NJZys6CjsgsoeHmf',
106
- value: 8e4,
108
+ value: 80000n as Satoshi,
107
109
  }) // the actual "spend"
108
110
  .addOutput({
109
111
  address: alice2.payment.address, // OR script, which is a Buffer.
110
- value: 1e4,
112
+ value: 10000n as Satoshi,
111
113
  }); // Alice's change
112
114
  // (in)(5e4 + 7e4) - (out)(8e4 + 1e4) = (fee)3e4 = 30000, this is the miner fee
113
115
 
@@ -199,7 +201,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
199
201
  .addInput(inputData1)
200
202
  .addOutput({
201
203
  address: regtestUtils.RANDOM_ADDRESS,
202
- value: 1e4,
204
+ value: 10000n as Satoshi,
203
205
  })
204
206
  .signInput(0, multisig.keys[0])
205
207
  .signInput(0, multisig.keys[2]);
@@ -243,11 +245,11 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
243
245
  const keyPair = p2sh.keys[0];
244
246
  const outputData = {
245
247
  script: p2sh.payment.output, // sending to myself for fun
246
- value: 2e4,
248
+ value: 20000n as Satoshi,
247
249
  };
248
250
  const outputData2 = {
249
251
  script: p2sh.payment.output, // sending to myself for fun
250
- value: 7e4,
252
+ value: 70000n as Satoshi,
251
253
  };
252
254
 
253
255
  const tx = new bitcoin.Psbt()
@@ -277,11 +279,11 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
277
279
  const keyPair = p2sh.keys[0];
278
280
  const outputData = {
279
281
  script: p2sh.payment.output,
280
- value: 2e4,
282
+ value: 20000n as Satoshi,
281
283
  };
282
284
  const outputData2 = {
283
285
  script: p2sh.payment.output,
284
- value: 7e4,
286
+ value: 70000n as Satoshi,
285
287
  };
286
288
  const tx = new bitcoin.Psbt()
287
289
  .addInputs([inputData, inputData2])
@@ -312,7 +314,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
312
314
  .addInput(inputData)
313
315
  .addOutput({
314
316
  address: regtestUtils.RANDOM_ADDRESS,
315
- value: 2e4,
317
+ value: 20000n as Satoshi,
316
318
  })
317
319
  .signInput(0, p2wpkh.keys[0]);
318
320
 
@@ -341,18 +343,19 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
341
343
  .addInput(inputData)
342
344
  .addOutput({
343
345
  address: regtestUtils.RANDOM_ADDRESS,
344
- value: 2e4,
346
+ value: 20000n as Satoshi,
345
347
  })
346
348
  .signInput(0, p2wpkh.keys[0]);
347
349
  psbt.finalizeAllInputs();
348
350
  const tx = psbt.extractTransaction();
349
- await regtestUtils.broadcast(tx.toHex());
350
- await regtestUtils.verify({
351
- txId: tx.getId(),
352
- address: regtestUtils.RANDOM_ADDRESS,
353
- vout: 0,
354
- value: 2e4,
355
- });
351
+ await broadcastAndVerify(tx.toHex(), () =>
352
+ regtestUtils.verify({
353
+ txId: tx.getId(),
354
+ address: regtestUtils.RANDOM_ADDRESS,
355
+ vout: 0,
356
+ value: 2e4,
357
+ }),
358
+ );
356
359
  });
357
360
 
358
361
  it('can create (and broadcast via 3PBP) a Transaction, w/ a P2WSH(P2PK) input', async () => {
@@ -372,7 +375,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
372
375
  .addInput(inputData)
373
376
  .addOutput({
374
377
  address: regtestUtils.RANDOM_ADDRESS,
375
- value: 2e4,
378
+ value: 20000n as Satoshi,
376
379
  })
377
380
  .signInput(0, p2wsh.keys[0]);
378
381
 
@@ -401,7 +404,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
401
404
  .addInput(inputData)
402
405
  .addOutput({
403
406
  address: regtestUtils.RANDOM_ADDRESS,
404
- value: 2e4,
407
+ value: 20000n as Satoshi,
405
408
  })
406
409
  .signInput(0, p2wsh.keys[0]);
407
410
  psbt.finalizeAllInputs();
@@ -433,7 +436,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
433
436
  .addInput(inputData)
434
437
  .addOutput({
435
438
  address: regtestUtils.RANDOM_ADDRESS,
436
- value: 2e4,
439
+ value: 20000n as Satoshi,
437
440
  })
438
441
  .signInput(0, p2sh.keys[0])
439
442
  .signInput(0, p2sh.keys[2])
@@ -475,7 +478,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
475
478
  .addInput(inputData)
476
479
  .addOutput({
477
480
  address: regtestUtils.RANDOM_ADDRESS,
478
- value: 2e4,
481
+ value: 20000n as Satoshi,
479
482
  })
480
483
  .signInput(0, p2sh.keys[0])
481
484
  .signInput(0, p2sh.keys[2])
@@ -504,7 +507,7 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
504
507
  .addInput(inputData)
505
508
  .addOutput({
506
509
  address: regtestUtils.RANDOM_ADDRESS,
507
- value: 2e4,
510
+ value: 20000n as Satoshi,
508
511
  })
509
512
  .signInput(0, p2sh.keys[0]);
510
513
  psbt.finalizeAllInputs();
@@ -558,12 +561,12 @@ describe('bitcoinjs-lib (transactions with psbt)', () => {
558
561
  // .updateInput(0, updateData) // if you didn't merge the bip32Derivation with inputData
559
562
  .addOutput({
560
563
  address: regtestUtils.RANDOM_ADDRESS,
561
- value: 2e4,
564
+ value: 20000n as Satoshi,
562
565
  })
563
- .signInputHD(0, hdRoot); // must sign with root!!!
566
+ .signInputHD(0, hdRoot as unknown as HDSigner); // must sign with root!!!
564
567
 
565
568
  assert.strictEqual(psbt.validateSignaturesOfInput(0, validator), true);
566
- assert.strictEqual(psbt.validateSignaturesOfInput(0, validator, childNode.publicKey), true);
569
+ assert.strictEqual(psbt.validateSignaturesOfInput(0, validator, childNode.publicKey as PublicKey), true);
567
570
  psbt.finalizeAllInputs();
568
571
 
569
572
  const tx = psbt.extractTransaction();
@@ -605,7 +608,7 @@ function createPayment(_type: string, myKeys?: any[], network?: any): any {
605
608
  if (type.slice(0, 4) === 'p2ms') {
606
609
  payment = bitcoin.payments.p2ms({
607
610
  m,
608
- pubkeys: keys.map((key) => key.publicKey).sort((a, b) => a.compare(b)),
611
+ pubkeys: keys.map((key) => key.publicKey).sort((a, b) => compare(a, b)),
609
612
  network,
610
613
  });
611
614
  } else if (['p2sh', 'p2wsh'].indexOf(type) > -1) {
@@ -629,7 +632,7 @@ function createPayment(_type: string, myKeys?: any[], network?: any): any {
629
632
 
630
633
  function getWitnessUtxo(out: any): any {
631
634
  delete out.address;
632
- out.script = Buffer.from(out.script, 'hex');
635
+ out.script = fromHex(out.script);
633
636
  return out;
634
637
  }
635
638
 
@@ -639,10 +642,10 @@ async function getInputData(
639
642
  isSegwit: boolean,
640
643
  redeemType: string,
641
644
  ): Promise<any> {
642
- const unspent = await regtestUtils.faucetComplex(payment.output, amount);
645
+ const unspent = await regtestUtils.faucetComplex(Buffer.from(payment.output), amount);
643
646
  const utx = await regtestUtils.fetch(unspent.txId);
644
- // for non segwit inputs, you must pass the full transaction buffer
645
- const nonWitnessUtxo = Buffer.from(utx.txHex, 'hex');
647
+ // for non segwit inputs, you must pass the full transaction as Uint8Array
648
+ const nonWitnessUtxo = fromHex(utx.txHex);
646
649
  // for segwit inputs, you only need the output script and value as an object.
647
650
  const witnessUtxo = getWitnessUtxo(utx.outs[unspent.vout]);
648
651
  const mixin = isSegwit ? { witnessUtxo } : { nonWitnessUtxo };
@@ -2,28 +2,51 @@ import assert from 'assert';
2
2
  import * as ecc from 'tiny-secp256k1';
3
3
  import { beforeEach, describe, it } from 'vitest';
4
4
  import { initEccLib } from '../src/index.js';
5
+ import type { EccLib } from '../src/index.js';
5
6
  import type { P2SHPayment, PaymentCreator } from '../src/payments/index.js';
6
7
  import { p2pk, p2wsh } from '../src/payments/index.js';
7
8
  import * as u from './payments.utils.js';
8
9
  import fs from 'node:fs';
9
-
10
- const require = async (name: string) => {
11
- const mod = await import(name);
12
-
13
- return mod.default || mod;
10
+ import { fromHex } from '../src/io/index.js';
11
+ import type { PublicKey } from '../src/types.js';
12
+
13
+ // Pre-load all payment modules synchronously-like at import time
14
+ import * as embedModule from '../src/payments/embed.js';
15
+ import * as p2msModule from '../src/payments/p2ms.js';
16
+ import * as p2pkModule from '../src/payments/p2pk.js';
17
+ import * as p2pkhModule from '../src/payments/p2pkh.js';
18
+ import * as p2shModule from '../src/payments/p2sh.js';
19
+ import * as p2wpkhModule from '../src/payments/p2wpkh.js';
20
+ import * as p2wshModule from '../src/payments/p2wsh.js';
21
+ import * as p2trModule from '../src/payments/p2tr.js';
22
+
23
+ const paymentModules: Record<string, { [key: string]: PaymentCreator }> = {
24
+ embed: embedModule as any,
25
+ p2ms: p2msModule as any,
26
+ p2pk: p2pkModule as any,
27
+ p2pkh: p2pkhModule as any,
28
+ p2sh: p2shModule as any,
29
+ p2wpkh: p2wpkhModule as any,
30
+ p2wsh: p2wshModule as any,
31
+ p2tr: p2trModule as any,
14
32
  };
15
33
 
34
+ // Initialize ECC library at module load time
35
+ initEccLib(ecc as unknown as EccLib);
36
+
16
37
  ['embed', 'p2ms', 'p2pk', 'p2pkh', 'p2sh', 'p2wpkh', 'p2wsh', 'p2tr'].forEach((p) => {
17
- describe(p, async () => {
38
+ describe(p, () => {
39
+ // Ensure ECC library is initialized before each test
18
40
  beforeEach(() => {
19
- initEccLib(p === 'p2tr' ? ecc : undefined);
41
+ initEccLib(ecc as unknown as EccLib);
20
42
  });
43
+
44
+ const payment = paymentModules[p]!;
21
45
  let fn: PaymentCreator;
22
- const payment = await require('../src/payments/' + p);
23
46
  if (p === 'embed') {
24
- fn = payment.p2data;
47
+ fn = payment['p2data']!;
25
48
  } else {
26
- fn = payment[p];
49
+ fn = payment[p]!;
27
50
  }
28
51
 
29
52
  const fixtures = JSON.parse(fs.readFileSync('test/fixtures/' + p + '.json', 'utf8'));
@@ -63,10 +86,9 @@ const require = async (name: string) => {
63
86
  const actual = fn({
64
87
  redeem: p2wsh({
65
88
  redeem: p2pk({
66
- pubkey: Buffer.from(
89
+ pubkey: fromHex(
67
90
  '03e15819590382a9dd878f01e2f0cbce541564eb415e43b440472d883ecd283058',
68
- 'hex',
69
- ),
91
+ ) as PublicKey,
70
92
  }),
71
93
  }),
72
94
  } as P2SHPayment);
@@ -1,26 +1,27 @@
1
1
  import * as t from 'assert';
2
2
  import * as BNETWORKS from '../src/networks.js';
3
3
  import * as bscript from '../src/script.js';
4
+ import { toHex, fromHex as ioFromHex } from '../src/io/index.js';
4
5
 
5
- function tryHex(x: Buffer | Buffer[]): string | string[] {
6
- if (Buffer.isBuffer(x)) return x.toString('hex');
6
+ function tryHex(x: Uint8Array | Uint8Array[]): string | string[] {
7
+ if (x instanceof Uint8Array) return toHex(x);
7
8
  if (Array.isArray(x)) return x.map(tryHex) as string[];
8
9
  return x;
9
10
  }
10
11
 
11
- function fromHex(x: string | string[]): Buffer | Buffer[] {
12
- if (typeof x === 'string') return Buffer.from(x, 'hex');
13
- if (Array.isArray(x)) return x.map(fromHex) as Buffer[];
12
+ function fromHex(x: string | string[]): Uint8Array | Uint8Array[] {
13
+ if (typeof x === 'string') return ioFromHex(x);
14
+ if (Array.isArray(x)) return x.map(fromHex) as Uint8Array[];
14
15
  return x;
15
16
  }
16
17
 
17
- function tryASM(x: Buffer): string {
18
- if (Buffer.isBuffer(x)) return bscript.toASM(x);
18
+ function tryASM(x: Uint8Array): string {
19
+ if (x instanceof Uint8Array) return bscript.toASM(x);
19
20
  return x;
20
21
  }
21
22
 
22
- function asmToBuffer(x: string): Buffer {
23
- if (x === '') return Buffer.alloc(0);
23
+ function asmToBuffer(x: string): Uint8Array {
24
+ if (x === '') return new Uint8Array(0);
24
25
  return bscript.fromASM(x);
25
26
  }
26
27
 
@@ -99,11 +100,11 @@ export function preform(x: any): any {
99
100
 
100
101
  if (x.network) x.network = (BNETWORKS as any)[x.network];
101
102
  if (typeof x.inputHex === 'string') {
102
- x.input = Buffer.from(x.inputHex, 'hex');
103
+ x.input = ioFromHex(x.inputHex);
103
104
  delete x.inputHex;
104
105
  }
105
106
  if (typeof x.outputHex === 'string') {
106
- x.output = Buffer.from(x.outputHex, 'hex');
107
+ x.output = ioFromHex(x.outputHex);
107
108
  delete x.outputHex;
108
109
  }
109
110
  if (typeof x.output === 'string') x.output = asmToBuffer(x.output);
@@ -111,14 +112,14 @@ export function preform(x: any): any {
111
112
  if (Array.isArray(x.witness)) x.witness = x.witness.map(fromHex);
112
113
 
113
114
  if (x.data) x.data = x.data.map(fromHex);
114
- if (x.hash) x.hash = Buffer.from(x.hash, 'hex');
115
- if (x.pubkey) x.pubkey = Buffer.from(x.pubkey, 'hex');
116
- if (x.internalPubkey) x.internalPubkey = Buffer.from(x.internalPubkey, 'hex');
117
- if (x.signature) x.signature = Buffer.from(x.signature, 'hex');
115
+ if (x.hash) x.hash = ioFromHex(x.hash);
116
+ if (x.pubkey) x.pubkey = ioFromHex(x.pubkey);
117
+ if (x.internalPubkey) x.internalPubkey = ioFromHex(x.internalPubkey);
118
+ if (x.signature) x.signature = ioFromHex(x.signature);
118
119
  if (x.pubkeys) x.pubkeys = x.pubkeys.map(fromHex);
119
120
  if (x.signatures)
120
121
  x.signatures = x.signatures.map((y: any) => {
121
- return Number.isFinite(y) ? y : Buffer.from(y, 'hex');
122
+ return Number.isFinite(y) ? y : ioFromHex(y);
122
123
  });
123
124
  if (x.redeem) {
124
125
  x.redeem = Object.assign({}, x.redeem);