@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
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Pure utility functions for Uint8Array operations.
3
+ *
4
+ * No DataView allocations. No wrappers.
5
+ * Optimized for performance with minimal allocations.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ /**
11
+ * Concatenates multiple Uint8Arrays into a single Uint8Array.
12
+ *
13
+ * Allocates exactly once for the result array.
14
+ *
15
+ * @param arrays - Arrays to concatenate
16
+ * @returns A new Uint8Array containing all input arrays
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { concat, fromHex } from '@btc-vision/bitcoin';
21
+ *
22
+ * const a = fromHex('deadbeef');
23
+ * const b = fromHex('cafebabe');
24
+ * const result = concat([a, b]);
25
+ * // result contains deadbeefcafebabe
26
+ * ```
27
+ */
28
+ export function concat(arrays: readonly Uint8Array[]): Uint8Array {
29
+ let totalLength = 0;
30
+ for (let i = 0; i < arrays.length; i++) {
31
+ totalLength += arrays[i]!.length;
32
+ }
33
+
34
+ const result = new Uint8Array(totalLength);
35
+ let offset = 0;
36
+ for (let i = 0; i < arrays.length; i++) {
37
+ const arr = arrays[i]!;
38
+ result.set(arr, offset);
39
+ offset += arr.length;
40
+ }
41
+
42
+ return result;
43
+ }
44
+
45
+ /**
46
+ * Checks if two Uint8Arrays have identical contents.
47
+ *
48
+ * @param a - First array
49
+ * @param b - Second array
50
+ * @returns True if arrays have the same length and contents
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * import { equals, fromHex } from '@btc-vision/bitcoin';
55
+ *
56
+ * const a = fromHex('deadbeef');
57
+ * const b = fromHex('deadbeef');
58
+ * const c = fromHex('cafebabe');
59
+ *
60
+ * equals(a, b); // true
61
+ * equals(a, c); // false
62
+ * ```
63
+ */
64
+ export function equals(a: Uint8Array, b: Uint8Array): boolean {
65
+ if (a.length !== b.length) {
66
+ return false;
67
+ }
68
+ for (let i = 0; i < a.length; i++) {
69
+ if (a[i] !== b[i]) {
70
+ return false;
71
+ }
72
+ }
73
+ return true;
74
+ }
75
+
76
+ /**
77
+ * Compares two Uint8Arrays lexicographically.
78
+ *
79
+ * @param a - First array
80
+ * @param b - Second array
81
+ * @returns Negative if a < b, positive if a > b, 0 if equal
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * import { compare, fromHex } from '@btc-vision/bitcoin';
86
+ *
87
+ * const a = fromHex('0001');
88
+ * const b = fromHex('0002');
89
+ *
90
+ * compare(a, b); // -1 (a < b)
91
+ * compare(b, a); // 1 (b > a)
92
+ * compare(a, a); // 0 (equal)
93
+ * ```
94
+ */
95
+ export function compare(a: Uint8Array, b: Uint8Array): number {
96
+ const minLength = Math.min(a.length, b.length);
97
+ for (let i = 0; i < minLength; i++) {
98
+ const diff = a[i]! - b[i]!;
99
+ if (diff !== 0) {
100
+ return diff;
101
+ }
102
+ }
103
+ return a.length - b.length;
104
+ }
105
+
106
+ /**
107
+ * Checks if a Uint8Array contains only zero bytes.
108
+ *
109
+ * @param bytes - Array to check
110
+ * @returns True if all bytes are zero
111
+ *
112
+ * @example
113
+ * ```typescript
114
+ * import { isZero } from '@btc-vision/bitcoin';
115
+ *
116
+ * isZero(new Uint8Array(32)); // true
117
+ * isZero(new Uint8Array([0, 0, 1])); // false
118
+ * ```
119
+ */
120
+ export function isZero(bytes: Uint8Array): boolean {
121
+ for (let i = 0; i < bytes.length; i++) {
122
+ if (bytes[i] !== 0) {
123
+ return false;
124
+ }
125
+ }
126
+ return true;
127
+ }
128
+
129
+ /**
130
+ * Creates a copy of a Uint8Array.
131
+ *
132
+ * @param bytes - Array to clone
133
+ * @returns A new Uint8Array with the same contents
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * import { clone, fromHex } from '@btc-vision/bitcoin';
138
+ *
139
+ * const original = fromHex('deadbeef');
140
+ * const copy = clone(original);
141
+ * copy[0] = 0; // Modifying copy doesn't affect original
142
+ * ```
143
+ */
144
+ export function clone(bytes: Uint8Array): Uint8Array {
145
+ // Create a true copy - .slice() on Buffer returns a view, not a copy
146
+ const copy = new Uint8Array(bytes.length);
147
+ copy.set(bytes);
148
+ return copy;
149
+ }
150
+
151
+ /**
152
+ * Reverses a Uint8Array in place.
153
+ *
154
+ * @param bytes - Array to reverse
155
+ * @returns The same array, reversed
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * import { reverse, fromHex, toHex } from '@btc-vision/bitcoin';
160
+ *
161
+ * const bytes = fromHex('01020304');
162
+ * reverse(bytes);
163
+ * toHex(bytes); // '04030201'
164
+ * ```
165
+ */
166
+ export function reverse(bytes: Uint8Array): Uint8Array {
167
+ bytes.reverse();
168
+ return bytes;
169
+ }
170
+
171
+ /**
172
+ * Creates a reversed copy of a Uint8Array.
173
+ *
174
+ * @param bytes - Array to copy and reverse
175
+ * @returns A new reversed Uint8Array
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * import { reverseCopy, fromHex, toHex } from '@btc-vision/bitcoin';
180
+ *
181
+ * const bytes = fromHex('01020304');
182
+ * const reversed = reverseCopy(bytes);
183
+ * toHex(reversed); // '04030201'
184
+ * toHex(bytes); // '01020304' (original unchanged)
185
+ * ```
186
+ */
187
+ export function reverseCopy(bytes: Uint8Array): Uint8Array {
188
+ const result = new Uint8Array(bytes.length);
189
+ for (let i = 0; i < bytes.length; i++) {
190
+ result[i] = bytes[bytes.length - 1 - i]!;
191
+ }
192
+ return result;
193
+ }
194
+
195
+ /**
196
+ * Allocates a new Uint8Array of the specified size.
197
+ *
198
+ * @param size - Number of bytes to allocate
199
+ * @param fill - Optional fill value (default 0)
200
+ * @returns A new Uint8Array filled with the specified value
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * import { alloc, toHex } from '@btc-vision/bitcoin';
205
+ *
206
+ * const zeros = alloc(4); // 4 zero bytes
207
+ * const ones = alloc(4, 0xff); // 4 bytes of 0xff
208
+ * toHex(ones); // 'ffffffff'
209
+ * ```
210
+ */
211
+ export function alloc(size: number, fill: number = 0): Uint8Array {
212
+ const result = new Uint8Array(size);
213
+ if (fill !== 0) {
214
+ result.fill(fill);
215
+ }
216
+ return result;
217
+ }
218
+
219
+ /**
220
+ * XORs two Uint8Arrays together.
221
+ *
222
+ * @param a - First array
223
+ * @param b - Second array
224
+ * @returns A new Uint8Array with the XOR result
225
+ * @throws TypeError if arrays have different lengths
226
+ *
227
+ * @example
228
+ * ```typescript
229
+ * import { xor, fromHex, toHex } from '@btc-vision/bitcoin';
230
+ *
231
+ * const a = fromHex('ff00ff00');
232
+ * const b = fromHex('0f0f0f0f');
233
+ * const result = xor(a, b);
234
+ * toHex(result); // 'f00ff00f'
235
+ * ```
236
+ */
237
+ export function xor(a: Uint8Array, b: Uint8Array): Uint8Array {
238
+ if (a.length !== b.length) {
239
+ throw new TypeError('Arrays must have the same length for XOR operation');
240
+ }
241
+ const result = new Uint8Array(a.length);
242
+ for (let i = 0; i < a.length; i++) {
243
+ result[i] = a[i]! ^ b[i]!;
244
+ }
245
+ return result;
246
+ }
247
+
248
+ /**
249
+ * Creates a Uint8Array from a UTF-8 string.
250
+ *
251
+ * @param str - String to encode
252
+ * @returns Uint8Array containing UTF-8 encoded bytes
253
+ *
254
+ * @example
255
+ * ```typescript
256
+ * import { fromUtf8, toHex } from '@btc-vision/bitcoin';
257
+ *
258
+ * const bytes = fromUtf8('hello');
259
+ * toHex(bytes); // '68656c6c6f'
260
+ * ```
261
+ */
262
+ export function fromUtf8(str: string): Uint8Array {
263
+ return new TextEncoder().encode(str);
264
+ }
265
+
266
+ /**
267
+ * Decodes a Uint8Array to a UTF-8 string.
268
+ *
269
+ * @param bytes - Uint8Array to decode
270
+ * @returns Decoded string
271
+ *
272
+ * @example
273
+ * ```typescript
274
+ * import { toUtf8, fromHex } from '@btc-vision/bitcoin';
275
+ *
276
+ * const bytes = fromHex('68656c6c6f');
277
+ * const str = toUtf8(bytes);
278
+ * // str is 'hello'
279
+ * ```
280
+ */
281
+ export function toUtf8(bytes: Uint8Array): string {
282
+ return new TextDecoder().decode(bytes);
283
+ }
package/src/merkle.ts CHANGED
@@ -1,12 +1,15 @@
1
1
  /**
2
- * Calculates the Merkle root of an array of buffers using a specified digest function.
2
+ * Calculates the Merkle root of an array of Uint8Arrays using a specified digest function.
3
3
  *
4
- * @param values - The array of buffers.
5
- * @param digestFn - The digest function used to calculate the hash of the concatenated buffers.
6
- * @returns The Merkle root as a buffer.
4
+ * @param values - The array of Uint8Arrays.
5
+ * @param digestFn - The digest function used to calculate the hash of the concatenated arrays.
6
+ * @returns The Merkle root as a Uint8Array.
7
7
  * @throws {TypeError} If the values parameter is not an array or the digestFn parameter is not a function.
8
8
  */
9
- export function fastMerkleRoot(values: Buffer[], digestFn: (b: Buffer) => Buffer): Buffer {
9
+ export function fastMerkleRoot(
10
+ values: Uint8Array[],
11
+ digestFn: (b: Uint8Array) => Uint8Array,
12
+ ): Uint8Array {
10
13
  if (!Array.isArray(values)) throw TypeError('Expected values Array');
11
14
  if (typeof digestFn !== 'function') throw TypeError('Expected digest Function');
12
15
 
@@ -17,9 +20,11 @@ export function fastMerkleRoot(values: Buffer[], digestFn: (b: Buffer) => Buffer
17
20
  let j = 0;
18
21
 
19
22
  for (let i = 0; i < length; i += 2, ++j) {
20
- const left = results[i];
21
- const right = i + 1 === length ? left : results[i + 1];
22
- const data = Buffer.concat([left, right]);
23
+ const left = results[i]!;
24
+ const right = i + 1 === length ? left : results[i + 1]!;
25
+ const data = new Uint8Array(left.length + right.length);
26
+ data.set(left);
27
+ data.set(right, left.length);
23
28
 
24
29
  results[j] = digestFn(data);
25
30
  }
@@ -27,5 +32,5 @@ export function fastMerkleRoot(values: Buffer[], digestFn: (b: Buffer) => Buffer
27
32
  length = j;
28
33
  }
29
34
 
30
- return results[0];
35
+ return results[0]!;
31
36
  }
package/src/networks.ts CHANGED
@@ -8,18 +8,18 @@
8
8
  */
9
9
 
10
10
  export interface Bip32 {
11
- public: number;
12
- private: number;
11
+ readonly public: number;
12
+ readonly private: number;
13
13
  }
14
14
 
15
15
  export interface Network {
16
- wif: number;
17
- bip32: Bip32;
18
- messagePrefix: string;
19
- bech32: string;
20
- bech32Opnet?: string;
21
- pubKeyHash: number;
22
- scriptHash: number;
16
+ readonly wif: number;
17
+ readonly bip32: Bip32;
18
+ readonly messagePrefix: string;
19
+ readonly bech32: string;
20
+ readonly bech32Opnet?: string;
21
+ readonly pubKeyHash: number;
22
+ readonly scriptHash: number;
23
23
  }
24
24
 
25
25
  /**
@@ -1,26 +1,25 @@
1
- import { Buffer as NBuffer } from 'buffer';
2
1
  import * as bcrypto from '../crypto.js';
3
- import { getEccLib } from '../ecc_lib.js';
4
-
5
- import { varuint } from '../bufferutils.js';
6
- import { isTapleaf, Tapleaf, Taptree } from '../types.js';
2
+ import { getEccLib } from '../ecc/context.js';
3
+ import { alloc, compare, concat, equals, varuint } from '../io/index.js';
4
+ import type { Bytes32, Tapleaf, Taptree, XOnlyPublicKey } from '../types.js';
5
+ import { isTapleaf } from '../types.js';
7
6
 
8
7
  export const LEAF_VERSION_TAPSCRIPT = 0xc0;
9
8
  export const MAX_TAPTREE_DEPTH = 128;
10
9
 
11
10
  interface HashLeaf {
12
- hash: Buffer;
11
+ hash: Bytes32;
13
12
  }
14
13
 
15
14
  interface HashBranch {
16
- hash: Buffer;
15
+ hash: Bytes32;
17
16
  left: HashTree;
18
17
  right: HashTree;
19
18
  }
20
19
 
21
20
  interface TweakedPublicKey {
22
21
  parity: number;
23
- x: Buffer;
22
+ x: XOnlyPublicKey;
24
23
  }
25
24
 
26
25
  const isHashBranch = (ht: HashTree): ht is HashBranch => 'left' in ht && 'right' in ht;
@@ -35,12 +34,12 @@ export type HashTree = HashLeaf | HashBranch;
35
34
 
36
35
  /**
37
36
  * Calculates the root hash from a given control block and leaf hash.
38
- * @param controlBlock - The control block buffer.
39
- * @param leafHash - The leaf hash buffer.
40
- * @returns The root hash buffer.
37
+ * @param controlBlock - The control block.
38
+ * @param leafHash - The leaf hash.
39
+ * @returns The root hash.
41
40
  * @throws {TypeError} If the control block length is less than 33.
42
41
  */
43
- export function rootHashFromPath(controlBlock: Buffer, leafHash: Buffer): Buffer {
42
+ export function rootHashFromPath(controlBlock: Uint8Array, leafHash: Uint8Array): Bytes32 {
44
43
  if (controlBlock.length < 33)
45
44
  throw new TypeError(
46
45
  `The control-block length is too small. Got ${controlBlock.length}, expected min 33.`,
@@ -50,14 +49,14 @@ export function rootHashFromPath(controlBlock: Buffer, leafHash: Buffer): Buffer
50
49
  let kj = leafHash;
51
50
  for (let j = 0; j < m; j++) {
52
51
  const ej = controlBlock.subarray(33 + 32 * j, 65 + 32 * j);
53
- if (kj.compare(ej) < 0) {
52
+ if (compare(kj, ej) < 0) {
54
53
  kj = tapBranchHash(kj, ej);
55
54
  } else {
56
55
  kj = tapBranchHash(ej, kj);
57
56
  }
58
57
  }
59
58
 
60
- return kj;
59
+ return kj as Bytes32;
61
60
  }
62
61
 
63
62
  /**
@@ -68,13 +67,13 @@ export function toHashTree(scriptTree: Taptree): HashTree {
68
67
  if (isTapleaf(scriptTree)) return { hash: tapleafHash(scriptTree) };
69
68
 
70
69
  const hashes = [toHashTree(scriptTree[0]), toHashTree(scriptTree[1])];
71
- hashes.sort((a, b) => a.hash.compare(b.hash));
70
+ hashes.sort((a, b) => compare(a.hash, b.hash));
72
71
  const [left, right] = hashes;
73
72
 
74
73
  return {
75
- hash: tapBranchHash(left.hash, right.hash),
76
- left,
77
- right,
74
+ hash: tapBranchHash(left!.hash, right!.hash),
75
+ left: left!,
76
+ right: right!,
78
77
  };
79
78
  }
80
79
 
@@ -86,34 +85,34 @@ export function toHashTree(scriptTree: Taptree): HashTree {
86
85
  * (exclusive) needed to prove inclusion of the specified hash. undefined if no
87
86
  * path is found
88
87
  */
89
- export function findScriptPath(node: HashTree, hash: Buffer): Buffer[] | undefined {
88
+ export function findScriptPath(node: HashTree, hash: Bytes32): Bytes32[] | undefined {
90
89
  if (isHashBranch(node)) {
91
90
  const leftPath = findScriptPath(node.left, hash);
92
91
  if (leftPath !== undefined) return [...leftPath, node.right.hash];
93
92
 
94
93
  const rightPath = findScriptPath(node.right, hash);
95
94
  if (rightPath !== undefined) return [...rightPath, node.left.hash];
96
- } else if (node.hash.equals(hash)) {
95
+ } else if (equals(node.hash, hash)) {
97
96
  return [];
98
97
  }
99
98
 
100
99
  return undefined;
101
100
  }
102
101
 
103
- export function tapleafHash(leaf: Tapleaf): Buffer {
102
+ export function tapleafHash(leaf: Tapleaf): Bytes32 {
104
103
  const version = leaf.version || LEAF_VERSION_TAPSCRIPT;
105
104
  return bcrypto.taggedHash(
106
105
  'TapLeaf',
107
- NBuffer.concat([NBuffer.from([version]), serializeScript(leaf.output)]),
108
- );
106
+ concat([new Uint8Array([version]), serializeScript(leaf.output)]),
107
+ ) as Bytes32;
109
108
  }
110
109
 
111
- export function tapTweakHash(pubKey: Buffer, h: Buffer | undefined): Buffer {
112
- return bcrypto.taggedHash('TapTweak', NBuffer.concat(h ? [pubKey, h] : [pubKey]));
110
+ export function tapTweakHash(pubKey: XOnlyPublicKey, h: Bytes32 | undefined): Bytes32 {
111
+ return bcrypto.taggedHash('TapTweak', h ? concat([pubKey, h]) : pubKey) as Bytes32;
113
112
  }
114
113
 
115
- export function tweakKey(pubKey: Buffer, h: Buffer | undefined): TweakedPublicKey | null {
116
- if (!NBuffer.isBuffer(pubKey)) return null;
114
+ export function tweakKey(pubKey: XOnlyPublicKey, h: Bytes32 | undefined): TweakedPublicKey | null {
115
+ if (!(pubKey instanceof Uint8Array)) return null;
117
116
  if (pubKey.length !== 32) return null;
118
117
  if (h && h.length !== 32) return null;
119
118
 
@@ -124,17 +123,17 @@ export function tweakKey(pubKey: Buffer, h: Buffer | undefined): TweakedPublicKe
124
123
 
125
124
  return {
126
125
  parity: res.parity,
127
- x: NBuffer.from(res.xOnlyPubkey),
126
+ x: new Uint8Array(res.xOnlyPubkey) as XOnlyPublicKey,
128
127
  };
129
128
  }
130
129
 
131
- function tapBranchHash(a: Buffer, b: Buffer): Buffer {
132
- return bcrypto.taggedHash('TapBranch', NBuffer.concat([a, b]));
130
+ function tapBranchHash(a: Uint8Array, b: Uint8Array): Bytes32 {
131
+ return bcrypto.taggedHash('TapBranch', concat([a, b])) as Bytes32;
133
132
  }
134
133
 
135
- function serializeScript(s: Buffer): Buffer {
134
+ function serializeScript(s: Uint8Array): Uint8Array {
136
135
  const varintLen = varuint.encodingLength(s.length);
137
- const buffer = NBuffer.allocUnsafe(varintLen); // better
136
+ const buffer = alloc(varintLen);
138
137
  varuint.encode(s.length, buffer);
139
- return NBuffer.concat([buffer, s]);
138
+ return concat([buffer, s]);
140
139
  }