@btc-vision/bitcoin 6.5.5 → 7.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/AUDIT/README.md +9 -0
  2. package/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
  3. package/SECURITY.md +27 -0
  4. package/benchmark/psbt-2000-inputs.bench.ts +178 -0
  5. package/benchmark/signing.bench.ts +147 -0
  6. package/browser/address.d.ts +56 -9
  7. package/browser/address.d.ts.map +1 -0
  8. package/browser/bech32utils.d.ts +9 -1
  9. package/browser/bech32utils.d.ts.map +1 -0
  10. package/browser/bip66.d.ts +11 -6
  11. package/browser/bip66.d.ts.map +1 -0
  12. package/browser/block.d.ts +117 -11
  13. package/browser/block.d.ts.map +1 -0
  14. package/browser/branded.d.ts +20 -0
  15. package/browser/branded.d.ts.map +1 -0
  16. package/browser/crypto/crypto.d.ts +1 -0
  17. package/browser/crypto/crypto.d.ts.map +1 -0
  18. package/browser/crypto.d.ts +46 -7
  19. package/browser/crypto.d.ts.map +1 -0
  20. package/browser/ecc/context.d.ts +129 -0
  21. package/browser/ecc/context.d.ts.map +1 -0
  22. package/browser/ecc/index.d.ts +11 -0
  23. package/browser/ecc/index.d.ts.map +1 -0
  24. package/browser/ecc/types.d.ts +128 -0
  25. package/browser/ecc/types.d.ts.map +1 -0
  26. package/browser/ecpair.d.ts +99 -0
  27. package/browser/errors.d.ts +124 -0
  28. package/browser/errors.d.ts.map +1 -0
  29. package/browser/index.d.ts +32 -5
  30. package/browser/index.d.ts.map +1 -0
  31. package/browser/index.js +12482 -101
  32. package/browser/io/BinaryReader.d.ts +276 -0
  33. package/browser/io/BinaryReader.d.ts.map +1 -0
  34. package/browser/io/BinaryWriter.d.ts +391 -0
  35. package/browser/io/BinaryWriter.d.ts.map +1 -0
  36. package/browser/io/MemoryPool.d.ts +220 -0
  37. package/browser/io/MemoryPool.d.ts.map +1 -0
  38. package/browser/io/base64.d.ts +13 -0
  39. package/browser/io/base64.d.ts.map +1 -0
  40. package/browser/io/hex.d.ts +67 -0
  41. package/browser/io/hex.d.ts.map +1 -0
  42. package/browser/io/index.d.ts +17 -0
  43. package/browser/io/index.d.ts.map +1 -0
  44. package/browser/io/utils.d.ts +199 -0
  45. package/browser/io/utils.d.ts.map +1 -0
  46. package/browser/merkle.d.ts +10 -1
  47. package/browser/merkle.d.ts.map +1 -0
  48. package/browser/networks.d.ts +70 -9
  49. package/browser/networks.d.ts.map +1 -0
  50. package/browser/opcodes.d.ts +1 -0
  51. package/browser/opcodes.d.ts.map +1 -0
  52. package/browser/payments/bip341.d.ts +35 -9
  53. package/browser/payments/bip341.d.ts.map +1 -0
  54. package/browser/payments/embed.d.ts +112 -1
  55. package/browser/payments/embed.d.ts.map +1 -0
  56. package/browser/payments/index.d.ts +17 -10
  57. package/browser/payments/index.d.ts.map +1 -0
  58. package/browser/payments/p2ms.d.ts +150 -0
  59. package/browser/payments/p2ms.d.ts.map +1 -0
  60. package/browser/payments/p2op.d.ts +150 -24
  61. package/browser/payments/p2op.d.ts.map +1 -0
  62. package/browser/payments/p2pk.d.ts +154 -1
  63. package/browser/payments/p2pk.d.ts.map +1 -0
  64. package/browser/payments/p2pkh.d.ts +176 -1
  65. package/browser/payments/p2pkh.d.ts.map +1 -0
  66. package/browser/payments/p2sh.d.ts +150 -1
  67. package/browser/payments/p2sh.d.ts.map +1 -0
  68. package/browser/payments/p2tr.d.ts +185 -1
  69. package/browser/payments/p2tr.d.ts.map +1 -0
  70. package/browser/payments/p2wpkh.d.ts +161 -1
  71. package/browser/payments/p2wpkh.d.ts.map +1 -0
  72. package/browser/payments/p2wsh.d.ts +146 -1
  73. package/browser/payments/p2wsh.d.ts.map +1 -0
  74. package/browser/payments/types.d.ts +94 -64
  75. package/browser/payments/types.d.ts.map +1 -0
  76. package/browser/psbt/bip371.d.ts +34 -8
  77. package/browser/psbt/bip371.d.ts.map +1 -0
  78. package/browser/psbt/psbtutils.d.ts +56 -16
  79. package/browser/psbt/psbtutils.d.ts.map +1 -0
  80. package/browser/psbt/types.d.ts +245 -0
  81. package/browser/psbt/types.d.ts.map +1 -0
  82. package/browser/psbt/utils.d.ts +64 -0
  83. package/browser/psbt/utils.d.ts.map +1 -0
  84. package/browser/psbt/validation.d.ts +84 -0
  85. package/browser/psbt/validation.d.ts.map +1 -0
  86. package/browser/psbt.d.ts +82 -118
  87. package/browser/psbt.d.ts.map +1 -0
  88. package/browser/pubkey.d.ts +27 -6
  89. package/browser/pubkey.d.ts.map +1 -0
  90. package/browser/push_data.d.ts +24 -2
  91. package/browser/push_data.d.ts.map +1 -0
  92. package/browser/script.d.ts +33 -8
  93. package/browser/script.d.ts.map +1 -0
  94. package/browser/script_number.d.ts +17 -0
  95. package/browser/script_number.d.ts.map +1 -0
  96. package/browser/script_signature.d.ts +23 -5
  97. package/browser/script_signature.d.ts.map +1 -0
  98. package/browser/transaction.d.ts +160 -18
  99. package/browser/transaction.d.ts.map +1 -0
  100. package/browser/types.d.ts +36 -38
  101. package/browser/types.d.ts.map +1 -0
  102. package/browser/workers/WorkerSigningPool.d.ts +143 -0
  103. package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
  104. package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
  105. package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
  106. package/browser/workers/ecc-bundle.d.ts +25 -0
  107. package/browser/workers/ecc-bundle.d.ts.map +1 -0
  108. package/browser/workers/index.d.ts +91 -0
  109. package/browser/workers/index.d.ts.map +1 -0
  110. package/browser/workers/psbt-parallel.d.ts +88 -0
  111. package/browser/workers/psbt-parallel.d.ts.map +1 -0
  112. package/browser/workers/signing-worker.d.ts +37 -0
  113. package/browser/workers/signing-worker.d.ts.map +1 -0
  114. package/browser/workers/types.d.ts +365 -0
  115. package/browser/workers/types.d.ts.map +1 -0
  116. package/build/address.d.ts +57 -10
  117. package/build/address.d.ts.map +1 -0
  118. package/build/address.js +80 -24
  119. package/build/address.js.map +1 -0
  120. package/build/bech32utils.d.ts +9 -1
  121. package/build/bech32utils.d.ts.map +1 -0
  122. package/build/bech32utils.js +10 -2
  123. package/build/bech32utils.js.map +1 -0
  124. package/build/bip66.d.ts +11 -6
  125. package/build/bip66.d.ts.map +1 -0
  126. package/build/bip66.js +32 -3
  127. package/build/bip66.js.map +1 -0
  128. package/build/block.d.ts +117 -11
  129. package/build/block.d.ts.map +1 -0
  130. package/build/block.js +204 -72
  131. package/build/block.js.map +1 -0
  132. package/build/branded.d.ts +20 -0
  133. package/build/branded.d.ts.map +1 -0
  134. package/build/branded.js +7 -0
  135. package/build/branded.js.map +1 -0
  136. package/build/crypto/crypto.d.ts +1 -0
  137. package/build/crypto/crypto.d.ts.map +1 -0
  138. package/build/crypto/crypto.js +1 -0
  139. package/build/crypto/crypto.js.map +1 -0
  140. package/build/crypto.d.ts +46 -7
  141. package/build/crypto.d.ts.map +1 -0
  142. package/build/crypto.js +65 -20
  143. package/build/crypto.js.map +1 -0
  144. package/build/ecc/context.d.ts +135 -0
  145. package/build/ecc/context.d.ts.map +1 -0
  146. package/build/ecc/context.js +232 -0
  147. package/build/ecc/context.js.map +1 -0
  148. package/build/ecc/index.d.ts +11 -0
  149. package/build/ecc/index.d.ts.map +1 -0
  150. package/build/ecc/index.js +11 -0
  151. package/build/ecc/index.js.map +1 -0
  152. package/build/ecc/types.d.ts +134 -0
  153. package/build/ecc/types.d.ts.map +1 -0
  154. package/build/ecc/types.js +8 -0
  155. package/build/ecc/types.js.map +1 -0
  156. package/build/errors.d.ts +124 -0
  157. package/build/errors.d.ts.map +1 -0
  158. package/build/errors.js +155 -0
  159. package/build/errors.js.map +1 -0
  160. package/build/index.d.ts +32 -5
  161. package/build/index.d.ts.map +1 -0
  162. package/build/index.js +26 -3
  163. package/build/index.js.map +1 -0
  164. package/build/io/BinaryReader.d.ts +276 -0
  165. package/build/io/BinaryReader.d.ts.map +1 -0
  166. package/build/io/BinaryReader.js +425 -0
  167. package/build/io/BinaryReader.js.map +1 -0
  168. package/build/io/BinaryWriter.d.ts +391 -0
  169. package/build/io/BinaryWriter.d.ts.map +1 -0
  170. package/build/io/BinaryWriter.js +611 -0
  171. package/build/io/BinaryWriter.js.map +1 -0
  172. package/build/io/MemoryPool.d.ts +220 -0
  173. package/build/io/MemoryPool.d.ts.map +1 -0
  174. package/build/io/MemoryPool.js +309 -0
  175. package/build/io/MemoryPool.js.map +1 -0
  176. package/build/io/base64.d.ts +13 -0
  177. package/build/io/base64.d.ts.map +1 -0
  178. package/build/io/base64.js +20 -0
  179. package/build/io/base64.js.map +1 -0
  180. package/build/io/hex.d.ts +67 -0
  181. package/build/io/hex.d.ts.map +1 -0
  182. package/build/io/hex.js +138 -0
  183. package/build/io/hex.js.map +1 -0
  184. package/build/io/index.d.ts +17 -0
  185. package/build/io/index.d.ts.map +1 -0
  186. package/build/io/index.js +23 -0
  187. package/build/io/index.js.map +1 -0
  188. package/build/io/utils.d.ts +199 -0
  189. package/build/io/utils.d.ts.map +1 -0
  190. package/build/io/utils.js +271 -0
  191. package/build/io/utils.js.map +1 -0
  192. package/build/merkle.d.ts +10 -1
  193. package/build/merkle.d.ts.map +1 -0
  194. package/build/merkle.js +12 -1
  195. package/build/merkle.js.map +1 -0
  196. package/build/networks.d.ts +70 -9
  197. package/build/networks.d.ts.map +1 -0
  198. package/build/networks.js +90 -4
  199. package/build/networks.js.map +1 -0
  200. package/build/opcodes.d.ts +1 -0
  201. package/build/opcodes.d.ts.map +1 -0
  202. package/build/opcodes.js +1 -0
  203. package/build/opcodes.js.map +1 -0
  204. package/build/payments/bip341.d.ts +36 -9
  205. package/build/payments/bip341.d.ts.map +1 -0
  206. package/build/payments/bip341.js +35 -15
  207. package/build/payments/bip341.js.map +1 -0
  208. package/build/payments/embed.d.ts +120 -1
  209. package/build/payments/embed.d.ts.map +1 -0
  210. package/build/payments/embed.js +215 -34
  211. package/build/payments/embed.js.map +1 -0
  212. package/build/payments/index.d.ts +17 -10
  213. package/build/payments/index.d.ts.map +1 -0
  214. package/build/payments/index.js +20 -10
  215. package/build/payments/index.js.map +1 -0
  216. package/build/payments/p2ms.d.ts +159 -1
  217. package/build/payments/p2ms.d.ts.map +1 -0
  218. package/build/payments/p2ms.js +427 -108
  219. package/build/payments/p2ms.js.map +1 -0
  220. package/build/payments/p2op.d.ts +158 -24
  221. package/build/payments/p2op.d.ts.map +1 -0
  222. package/build/payments/p2op.js +379 -93
  223. package/build/payments/p2op.js.map +1 -0
  224. package/build/payments/p2pk.d.ts +162 -1
  225. package/build/payments/p2pk.d.ts.map +1 -0
  226. package/build/payments/p2pk.js +327 -58
  227. package/build/payments/p2pk.js.map +1 -0
  228. package/build/payments/p2pkh.d.ts +185 -1
  229. package/build/payments/p2pkh.d.ts.map +1 -0
  230. package/build/payments/p2pkh.js +467 -114
  231. package/build/payments/p2pkh.js.map +1 -0
  232. package/build/payments/p2sh.d.ts +159 -1
  233. package/build/payments/p2sh.d.ts.map +1 -0
  234. package/build/payments/p2sh.js +500 -152
  235. package/build/payments/p2sh.js.map +1 -0
  236. package/build/payments/p2tr.d.ts +193 -1
  237. package/build/payments/p2tr.d.ts.map +1 -0
  238. package/build/payments/p2tr.js +592 -174
  239. package/build/payments/p2tr.js.map +1 -0
  240. package/build/payments/p2wpkh.d.ts +170 -1
  241. package/build/payments/p2wpkh.d.ts.map +1 -0
  242. package/build/payments/p2wpkh.js +429 -104
  243. package/build/payments/p2wpkh.js.map +1 -0
  244. package/build/payments/p2wsh.d.ts +155 -1
  245. package/build/payments/p2wsh.d.ts.map +1 -0
  246. package/build/payments/p2wsh.js +466 -144
  247. package/build/payments/p2wsh.js.map +1 -0
  248. package/build/payments/types.d.ts +98 -64
  249. package/build/payments/types.d.ts.map +1 -0
  250. package/build/payments/types.js +17 -13
  251. package/build/payments/types.js.map +1 -0
  252. package/build/psbt/bip371.d.ts +35 -9
  253. package/build/psbt/bip371.d.ts.map +1 -0
  254. package/build/psbt/bip371.js +113 -28
  255. package/build/psbt/bip371.js.map +1 -0
  256. package/build/psbt/psbtutils.d.ts +56 -16
  257. package/build/psbt/psbtutils.d.ts.map +1 -0
  258. package/build/psbt/psbtutils.js +71 -16
  259. package/build/psbt/psbtutils.js.map +1 -0
  260. package/build/psbt/types.d.ts +249 -0
  261. package/build/psbt/types.d.ts.map +1 -0
  262. package/build/psbt/types.js +6 -0
  263. package/build/psbt/types.js.map +1 -0
  264. package/build/psbt/utils.d.ts +68 -0
  265. package/build/psbt/utils.d.ts.map +1 -0
  266. package/build/psbt/utils.js +171 -0
  267. package/build/psbt/utils.js.map +1 -0
  268. package/build/psbt/validation.d.ts +88 -0
  269. package/build/psbt/validation.d.ts.map +1 -0
  270. package/build/psbt/validation.js +149 -0
  271. package/build/psbt/validation.js.map +1 -0
  272. package/build/psbt.d.ts +84 -120
  273. package/build/psbt.d.ts.map +1 -0
  274. package/build/psbt.js +411 -412
  275. package/build/psbt.js.map +1 -0
  276. package/build/pubkey.d.ts +27 -6
  277. package/build/pubkey.d.ts.map +1 -0
  278. package/build/pubkey.js +37 -13
  279. package/build/pubkey.js.map +1 -0
  280. package/build/push_data.d.ts +24 -2
  281. package/build/push_data.d.ts.map +1 -0
  282. package/build/push_data.js +44 -12
  283. package/build/push_data.js.map +1 -0
  284. package/build/script.d.ts +33 -8
  285. package/build/script.d.ts.map +1 -0
  286. package/build/script.js +100 -36
  287. package/build/script.js.map +1 -0
  288. package/build/script_number.d.ts +17 -0
  289. package/build/script_number.d.ts.map +1 -0
  290. package/build/script_number.js +19 -0
  291. package/build/script_number.js.map +1 -0
  292. package/build/script_signature.d.ts +23 -5
  293. package/build/script_signature.d.ts.map +1 -0
  294. package/build/script_signature.js +48 -15
  295. package/build/script_signature.js.map +1 -0
  296. package/build/transaction.d.ts +160 -18
  297. package/build/transaction.d.ts.map +1 -0
  298. package/build/transaction.js +443 -176
  299. package/build/transaction.js.map +1 -0
  300. package/build/tsconfig.build.tsbuildinfo +1 -0
  301. package/build/types.d.ts +36 -38
  302. package/build/types.d.ts.map +1 -0
  303. package/build/types.js +175 -57
  304. package/build/types.js.map +1 -0
  305. package/build/workers/WorkerSigningPool.d.ts +174 -0
  306. package/build/workers/WorkerSigningPool.d.ts.map +1 -0
  307. package/build/workers/WorkerSigningPool.js +553 -0
  308. package/build/workers/WorkerSigningPool.js.map +1 -0
  309. package/build/workers/WorkerSigningPool.node.d.ts +124 -0
  310. package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
  311. package/build/workers/WorkerSigningPool.node.js +753 -0
  312. package/build/workers/WorkerSigningPool.node.js.map +1 -0
  313. package/build/workers/ecc-bundle.d.ts +25 -0
  314. package/build/workers/ecc-bundle.d.ts.map +1 -0
  315. package/build/workers/ecc-bundle.js +25 -0
  316. package/build/workers/ecc-bundle.js.map +1 -0
  317. package/build/workers/index.d.ts +91 -0
  318. package/build/workers/index.d.ts.map +1 -0
  319. package/build/workers/index.js +114 -0
  320. package/build/workers/index.js.map +1 -0
  321. package/build/workers/psbt-parallel.d.ts +117 -0
  322. package/build/workers/psbt-parallel.d.ts.map +1 -0
  323. package/build/workers/psbt-parallel.js +233 -0
  324. package/build/workers/psbt-parallel.js.map +1 -0
  325. package/build/workers/signing-worker.d.ts +37 -0
  326. package/build/workers/signing-worker.d.ts.map +1 -0
  327. package/build/workers/signing-worker.js +350 -0
  328. package/build/workers/signing-worker.js.map +1 -0
  329. package/build/workers/types.d.ts +365 -0
  330. package/build/workers/types.d.ts.map +1 -0
  331. package/build/workers/types.js +60 -0
  332. package/build/workers/types.js.map +1 -0
  333. package/package.json +83 -25
  334. package/scripts/bundle-ecc.ts +111 -0
  335. package/src/address.ts +81 -44
  336. package/src/bech32utils.ts +3 -3
  337. package/src/bip66.ts +34 -24
  338. package/src/block.ts +196 -84
  339. package/src/branded.ts +18 -0
  340. package/src/crypto.ts +64 -26
  341. package/src/ecc/context.ts +277 -0
  342. package/src/ecc/index.ts +14 -0
  343. package/src/ecc/types.ts +154 -0
  344. package/src/ecpair.d.ts +99 -0
  345. package/src/errors.ts +163 -0
  346. package/src/index.ts +113 -9
  347. package/src/io/BinaryReader.ts +461 -0
  348. package/src/io/BinaryWriter.ts +696 -0
  349. package/src/io/MemoryPool.ts +343 -0
  350. package/src/io/base64.ts +20 -0
  351. package/src/io/hex.ts +155 -0
  352. package/src/io/index.ts +41 -0
  353. package/src/io/utils.ts +283 -0
  354. package/src/merkle.ts +14 -9
  355. package/src/networks.ts +9 -9
  356. package/src/payments/bip341.ts +34 -33
  357. package/src/payments/embed.ts +244 -41
  358. package/src/payments/index.ts +12 -10
  359. package/src/payments/p2ms.ts +490 -118
  360. package/src/payments/p2op.ts +431 -133
  361. package/src/payments/p2pk.ts +370 -72
  362. package/src/payments/p2pkh.ts +524 -130
  363. package/src/payments/p2sh.ts +572 -172
  364. package/src/payments/p2tr.ts +686 -194
  365. package/src/payments/p2wpkh.ts +484 -107
  366. package/src/payments/p2wsh.ts +526 -164
  367. package/src/payments/types.ts +80 -66
  368. package/src/psbt/bip371.ts +68 -51
  369. package/src/psbt/psbtutils.ts +39 -40
  370. package/src/psbt/types.ts +331 -0
  371. package/src/psbt/utils.ts +188 -0
  372. package/src/psbt/validation.ts +192 -0
  373. package/src/psbt.ts +566 -809
  374. package/src/pubkey.ts +24 -25
  375. package/src/push_data.ts +18 -16
  376. package/src/script.ts +82 -64
  377. package/src/script_number.ts +6 -6
  378. package/src/script_signature.ts +33 -36
  379. package/src/transaction.ts +458 -238
  380. package/src/types.ts +231 -100
  381. package/src/workers/WorkerSigningPool.node.ts +887 -0
  382. package/src/workers/WorkerSigningPool.ts +670 -0
  383. package/src/workers/ecc-bundle.ts +26 -0
  384. package/src/workers/index.ts +165 -0
  385. package/src/workers/psbt-parallel.ts +332 -0
  386. package/src/workers/signing-worker.ts +353 -0
  387. package/src/workers/types.ts +413 -0
  388. package/test/address.spec.ts +9 -6
  389. package/test/bitcoin.core.spec.ts +16 -17
  390. package/test/block.spec.ts +8 -7
  391. package/test/bufferutils.spec.ts +228 -214
  392. package/test/crypto.spec.ts +19 -11
  393. package/test/fixtures/p2pk.json +0 -8
  394. package/test/fixtures/p2pkh.json +1 -1
  395. package/test/fixtures/p2sh.json +1 -1
  396. package/test/fixtures/script.json +1 -1
  397. package/test/fixtures/transaction.json +2 -2
  398. package/test/integration/_regtest.ts +25 -0
  399. package/test/integration/addresses.spec.ts +4 -3
  400. package/test/integration/bip32.spec.ts +2 -1
  401. package/test/integration/blocks.spec.ts +1 -1
  402. package/test/integration/cltv.spec.ts +18 -16
  403. package/test/integration/csv.spec.ts +37 -64
  404. package/test/integration/payments.spec.ts +5 -3
  405. package/test/integration/taproot.spec.ts +76 -83
  406. package/test/integration/transactions.spec.ts +38 -35
  407. package/test/payments.spec.ts +35 -13
  408. package/test/payments.utils.ts +17 -16
  409. package/test/psbt.spec.ts +111 -100
  410. package/test/script.spec.ts +11 -10
  411. package/test/script_signature.spec.ts +9 -11
  412. package/test/taproot-cache.spec.ts +694 -0
  413. package/test/transaction.spec.ts +32 -40
  414. package/test/types.spec.ts +74 -29
  415. package/test/workers-pool.spec.ts +963 -0
  416. package/test/workers-signing.spec.ts +635 -0
  417. package/test/workers.spec.ts +1390 -0
  418. package/tsconfig.base.json +34 -18
  419. package/tsconfig.browser.json +15 -0
  420. package/tsconfig.build.json +5 -0
  421. package/tsconfig.json +5 -14
  422. package/vite.config.browser.ts +3 -42
  423. package/vitest.config.integration.ts +11 -0
  424. package/browser/bufferutils.d.ts +0 -34
  425. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  426. package/browser/chunks/payments-yjA0Evsv.js +0 -1089
  427. package/browser/chunks/psbt-URK2hBFc.js +0 -4039
  428. package/browser/chunks/script-DyPItFEl.js +0 -318
  429. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  430. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  431. package/browser/ecc_lib.d.ts +0 -3
  432. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  433. package/browser/hooks/HookedSigner.d.ts +0 -4
  434. package/browser/hooks/SignatureManager.d.ts +0 -13
  435. package/browser/payments/lazy.d.ts +0 -2
  436. package/browser/typeforce.d.ts +0 -38
  437. package/build/bufferutils.d.ts +0 -34
  438. package/build/bufferutils.js +0 -141
  439. package/build/ecc_lib.d.ts +0 -3
  440. package/build/ecc_lib.js +0 -61
  441. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  442. package/build/hooks/AdvancedSignatureManager.js +0 -52
  443. package/build/hooks/HookedSigner.d.ts +0 -4
  444. package/build/hooks/HookedSigner.js +0 -64
  445. package/build/hooks/SignatureManager.d.ts +0 -13
  446. package/build/hooks/SignatureManager.js +0 -45
  447. package/build/payments/lazy.d.ts +0 -2
  448. package/build/payments/lazy.js +0 -28
  449. package/build/tsconfig.tsbuildinfo +0 -1
  450. package/src/bufferutils.ts +0 -188
  451. package/src/ecc_lib.ts +0 -94
  452. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  453. package/src/hooks/HookedSigner.ts +0 -108
  454. package/src/hooks/SignatureManager.ts +0 -84
  455. package/src/payments/lazy.ts +0 -28
  456. package/src/typeforce.d.ts +0 -38
  457. package/tsconfig.webpack.json +0 -18
@@ -0,0 +1,343 @@
1
+ /**
2
+ * Memory pool using SharedArrayBuffer for zero-allocation operations.
3
+ *
4
+ * Provides thread-safe memory allocation using Atomics for concurrent access.
5
+ * Ideal for parsing operations where temporary buffers are needed.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ /**
11
+ * Thread-safe memory pool using SharedArrayBuffer.
12
+ *
13
+ * Allocates memory from a pre-allocated SharedArrayBuffer pool,
14
+ * eliminating garbage collection pressure from repeated allocations.
15
+ *
16
+ * Uses Atomics for thread-safe allocation when used with Workers.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { MemoryPool } from '@btc-vision/bitcoin';
21
+ *
22
+ * // Create a 1MB pool
23
+ * const pool = new MemoryPool(1024 * 1024);
24
+ *
25
+ * // Allocate memory for transaction parsing
26
+ * const txBuffer = pool.alloc(500);
27
+ * // ... use txBuffer ...
28
+ *
29
+ * // Reset pool when done (all allocations become invalid)
30
+ * pool.reset();
31
+ * ```
32
+ */
33
+ export class MemoryPool {
34
+ /**
35
+ * The underlying SharedArrayBuffer.
36
+ */
37
+ readonly #buffer: SharedArrayBuffer;
38
+
39
+ /**
40
+ * View for data allocations.
41
+ */
42
+ readonly #data: Uint8Array;
43
+
44
+ /**
45
+ * Control array for atomic offset management.
46
+ * Located at the end of the buffer.
47
+ */
48
+ readonly #control: Int32Array;
49
+
50
+ /**
51
+ * Maximum allocatable size (buffer size minus control bytes).
52
+ */
53
+ readonly #maxSize: number;
54
+
55
+ /**
56
+ * Creates a new MemoryPool.
57
+ *
58
+ * @param size - Size of the pool in bytes (default 4MB)
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * import { MemoryPool } from '@btc-vision/bitcoin';
63
+ *
64
+ * // 4MB pool (default)
65
+ * const pool = new MemoryPool();
66
+ *
67
+ * // 16MB pool
68
+ * const largePool = new MemoryPool(16 * 1024 * 1024);
69
+ * ```
70
+ */
71
+ public constructor(size: number = 4 * 1024 * 1024) {
72
+ // Add 4 bytes for atomic control (current offset)
73
+ const totalSize = size + 4;
74
+ this.#buffer = new SharedArrayBuffer(totalSize);
75
+ this.#data = new Uint8Array(this.#buffer, 0, size);
76
+ this.#control = new Int32Array(this.#buffer, size, 1);
77
+ this.#maxSize = size;
78
+ }
79
+
80
+ /**
81
+ * Creates a MemoryPool from an existing SharedArrayBuffer.
82
+ *
83
+ * Useful for sharing a pool between Workers.
84
+ *
85
+ * @param buffer - Existing SharedArrayBuffer
86
+ * @returns A new MemoryPool instance wrapping the buffer
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * // Main thread
91
+ * const pool = new MemoryPool(1024 * 1024);
92
+ * worker.postMessage({ buffer: pool.sharedBuffer });
93
+ *
94
+ * // Worker thread
95
+ * self.onmessage = (e) => {
96
+ * const pool = MemoryPool.fromSharedBuffer(e.data.buffer);
97
+ * const mem = pool.alloc(100);
98
+ * };
99
+ * ```
100
+ */
101
+ public static fromSharedBuffer(buffer: SharedArrayBuffer): MemoryPool {
102
+ const pool = Object.create(MemoryPool.prototype) as MemoryPool;
103
+ const size = buffer.byteLength - 4;
104
+
105
+ // Use Object.defineProperty to set private fields on the created object
106
+ Object.defineProperty(pool, '#buffer', { value: buffer });
107
+ Object.defineProperty(pool, '#data', { value: new Uint8Array(buffer, 0, size) });
108
+ Object.defineProperty(pool, '#control', { value: new Int32Array(buffer, size, 1) });
109
+ Object.defineProperty(pool, '#maxSize', { value: size });
110
+
111
+ return pool;
112
+ }
113
+
114
+ /**
115
+ * Total capacity of the pool in bytes.
116
+ */
117
+ public get capacity(): number {
118
+ return this.#maxSize;
119
+ }
120
+
121
+ /**
122
+ * Current allocation offset (bytes used).
123
+ *
124
+ * Uses Atomics for thread-safe reading.
125
+ */
126
+ public get used(): number {
127
+ return Atomics.load(this.#control, 0);
128
+ }
129
+
130
+ /**
131
+ * Remaining available bytes.
132
+ */
133
+ public get available(): number {
134
+ return this.#maxSize - this.used;
135
+ }
136
+
137
+ /**
138
+ * The underlying SharedArrayBuffer.
139
+ *
140
+ * Can be transferred to Workers for shared memory access.
141
+ */
142
+ public get sharedBuffer(): SharedArrayBuffer {
143
+ return this.#buffer;
144
+ }
145
+
146
+ /**
147
+ * Allocates memory from the pool.
148
+ *
149
+ * Thread-safe using Atomics.add for concurrent access.
150
+ *
151
+ * @param size - Number of bytes to allocate
152
+ * @returns Uint8Array view into the pool
153
+ * @throws RangeError if pool is exhausted
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * const pool = new MemoryPool(1024);
158
+ * const buf1 = pool.alloc(100); // First 100 bytes
159
+ * const buf2 = pool.alloc(200); // Next 200 bytes
160
+ * ```
161
+ */
162
+ public alloc(size: number): Uint8Array {
163
+ if (size <= 0) {
164
+ throw new RangeError('Allocation size must be positive');
165
+ }
166
+
167
+ // Atomically reserve space
168
+ const oldOffset = Atomics.add(this.#control, 0, size);
169
+
170
+ if (oldOffset + size > this.#maxSize) {
171
+ // Undo the allocation
172
+ Atomics.sub(this.#control, 0, size);
173
+ throw new RangeError(
174
+ `MemoryPool exhausted: requested ${size} bytes, only ${this.#maxSize - oldOffset} available`,
175
+ );
176
+ }
177
+
178
+ return this.#data.subarray(oldOffset, oldOffset + size);
179
+ }
180
+
181
+ /**
182
+ * Allocates memory and fills it with zeros.
183
+ *
184
+ * @param size - Number of bytes to allocate
185
+ * @returns Uint8Array view into the pool, filled with zeros
186
+ * @throws RangeError if pool is exhausted
187
+ */
188
+ public allocZeroed(size: number): Uint8Array {
189
+ const mem = this.alloc(size);
190
+ mem.fill(0);
191
+ return mem;
192
+ }
193
+
194
+ /**
195
+ * Allocates memory for a specific typed array.
196
+ *
197
+ * @param length - Number of elements
198
+ * @param bytesPerElement - Size of each element in bytes
199
+ * @returns Uint8Array view (use constructor of target type on underlying buffer)
200
+ * @throws RangeError if pool is exhausted
201
+ *
202
+ * @example
203
+ * ```typescript
204
+ * const pool = new MemoryPool(1024);
205
+ * const bytes = pool.allocTyped(10, 4); // 40 bytes for 10 Uint32
206
+ * const u32View = new Uint32Array(bytes.buffer, bytes.byteOffset, 10);
207
+ * ```
208
+ */
209
+ public allocTyped(length: number, bytesPerElement: number): Uint8Array {
210
+ return this.alloc(length * bytesPerElement);
211
+ }
212
+
213
+ /**
214
+ * Resets the pool, making all memory available again.
215
+ *
216
+ * WARNING: All previously allocated views become invalid.
217
+ * Only call when you're sure no references are held.
218
+ *
219
+ * Thread-safe using Atomics.store.
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * const pool = new MemoryPool(1024);
224
+ * const buf = pool.alloc(100);
225
+ * // ... use buf ...
226
+ * pool.reset(); // buf is now invalid!
227
+ * ```
228
+ */
229
+ public reset(): void {
230
+ Atomics.store(this.#control, 0, 0);
231
+ }
232
+
233
+ /**
234
+ * Checks if the pool can accommodate an allocation.
235
+ *
236
+ * @param size - Number of bytes needed
237
+ * @returns True if allocation would succeed
238
+ */
239
+ public canAlloc(size: number): boolean {
240
+ return this.available >= size;
241
+ }
242
+ }
243
+
244
+ /**
245
+ * Non-shared memory pool using regular ArrayBuffer.
246
+ *
247
+ * Use when SharedArrayBuffer is not available (e.g., browsers without
248
+ * proper COOP/COEP headers) or when thread-safety is not needed.
249
+ *
250
+ * @example
251
+ * ```typescript
252
+ * import { SimpleMemoryPool } from '@btc-vision/bitcoin';
253
+ *
254
+ * const pool = new SimpleMemoryPool(1024 * 1024);
255
+ * const buf = pool.alloc(100);
256
+ * ```
257
+ */
258
+ export class SimpleMemoryPool {
259
+ readonly #data: Uint8Array;
260
+ #offset: number = 0;
261
+
262
+ /**
263
+ * Creates a new SimpleMemoryPool.
264
+ *
265
+ * @param size - Size of the pool in bytes
266
+ */
267
+ public constructor(size: number) {
268
+ this.#data = new Uint8Array(size);
269
+ }
270
+
271
+ /**
272
+ * Total capacity of the pool in bytes.
273
+ */
274
+ public get capacity(): number {
275
+ return this.#data.length;
276
+ }
277
+
278
+ /**
279
+ * Current allocation offset (bytes used).
280
+ */
281
+ public get used(): number {
282
+ return this.#offset;
283
+ }
284
+
285
+ /**
286
+ * Remaining available bytes.
287
+ */
288
+ public get available(): number {
289
+ return this.#data.length - this.#offset;
290
+ }
291
+
292
+ /**
293
+ * Allocates memory from the pool.
294
+ *
295
+ * @param size - Number of bytes to allocate
296
+ * @returns Uint8Array view into the pool
297
+ * @throws RangeError if pool is exhausted
298
+ */
299
+ public alloc(size: number): Uint8Array {
300
+ if (size <= 0) {
301
+ throw new RangeError('Allocation size must be positive');
302
+ }
303
+
304
+ if (this.#offset + size > this.#data.length) {
305
+ throw new RangeError(
306
+ `SimpleMemoryPool exhausted: requested ${size} bytes, only ${this.available} available`,
307
+ );
308
+ }
309
+
310
+ const start = this.#offset;
311
+ this.#offset += size;
312
+ return this.#data.subarray(start, this.#offset);
313
+ }
314
+
315
+ /**
316
+ * Allocates memory and fills it with zeros.
317
+ *
318
+ * @param size - Number of bytes to allocate
319
+ * @returns Uint8Array view into the pool, filled with zeros
320
+ */
321
+ public allocZeroed(size: number): Uint8Array {
322
+ const mem = this.alloc(size);
323
+ mem.fill(0);
324
+ return mem;
325
+ }
326
+
327
+ /**
328
+ * Resets the pool, making all memory available again.
329
+ */
330
+ public reset(): void {
331
+ this.#offset = 0;
332
+ }
333
+
334
+ /**
335
+ * Checks if the pool can accommodate an allocation.
336
+ *
337
+ * @param size - Number of bytes needed
338
+ * @returns True if allocation would succeed
339
+ */
340
+ public canAlloc(size: number): boolean {
341
+ return this.available >= size;
342
+ }
343
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Base64 encoding and decoding utilities.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+
7
+ /**
8
+ * Decodes a base64 string to a Uint8Array.
9
+ *
10
+ * @param base64 - The base64-encoded string to decode
11
+ * @returns Uint8Array containing the decoded bytes
12
+ */
13
+ export function fromBase64(base64: string): Uint8Array {
14
+ const binaryString = atob(base64);
15
+ const bytes = new Uint8Array(binaryString.length);
16
+ for (let i = 0; i < binaryString.length; i++) {
17
+ bytes[i] = binaryString.charCodeAt(i);
18
+ }
19
+ return bytes;
20
+ }
package/src/io/hex.ts ADDED
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Hex encoding and decoding utilities.
3
+ *
4
+ * Direct implementations with zero dependencies and no wrappers.
5
+ * Optimized for performance with lookup tables.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ /**
11
+ * Lookup table for byte to hex conversion.
12
+ * Pre-computed for O(1) lookup per byte.
13
+ */
14
+ const BYTE_TO_HEX: readonly string[] = Array.from({ length: 256 }, (_, i) =>
15
+ i.toString(16).padStart(2, '0'),
16
+ );
17
+
18
+ /**
19
+ * Lookup table for hex character to nibble conversion.
20
+ * Returns -1 for invalid characters.
21
+ */
22
+ const HEX_TO_NIBBLE: readonly number[] = (() => {
23
+ const table = new Array<number>(128).fill(-1);
24
+ for (let i = 0; i < 10; i++) {
25
+ table[0x30 + i] = i; // '0'-'9'
26
+ }
27
+ for (let i = 0; i < 6; i++) {
28
+ table[0x41 + i] = 10 + i; // 'A'-'F'
29
+ table[0x61 + i] = 10 + i; // 'a'-'f'
30
+ }
31
+ return table;
32
+ })();
33
+
34
+ /**
35
+ * Converts a Uint8Array to a lowercase hex string.
36
+ *
37
+ * @param bytes - The byte array to convert
38
+ * @returns Lowercase hex string representation
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * import { toHex } from '@btc-vision/bitcoin';
43
+ *
44
+ * const bytes = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);
45
+ * const hex = toHex(bytes);
46
+ * console.log(hex); // 'deadbeef'
47
+ * ```
48
+ */
49
+ export function toHex(bytes: Uint8Array): string {
50
+ let result = '';
51
+ for (let i = 0; i < bytes.length; i++) {
52
+ result += BYTE_TO_HEX[bytes[i]!];
53
+ }
54
+ return result;
55
+ }
56
+
57
+ /**
58
+ * Converts a hex string to a Uint8Array.
59
+ *
60
+ * Accepts hex strings with or without '0x' prefix.
61
+ * Case-insensitive (accepts both 'DEADBEEF' and 'deadbeef').
62
+ *
63
+ * @param hex - The hex string to convert
64
+ * @returns Uint8Array containing the decoded bytes
65
+ * @throws TypeError if hex string has odd length
66
+ * @throws TypeError if hex string contains invalid characters
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * import { fromHex, toHex } from '@btc-vision/bitcoin';
71
+ *
72
+ * const bytes = fromHex('deadbeef');
73
+ * console.log(bytes); // Uint8Array [222, 173, 190, 239]
74
+ *
75
+ * // Also works with 0x prefix
76
+ * const bytes2 = fromHex('0xCAFEBABE');
77
+ * console.log(toHex(bytes2)); // 'cafebabe'
78
+ * ```
79
+ */
80
+ export function fromHex(hex: string): Uint8Array {
81
+ // Strip 0x prefix if present
82
+ if (hex.length >= 2 && hex[0] === '0' && (hex[1] === 'x' || hex[1] === 'X')) {
83
+ hex = hex.slice(2);
84
+ }
85
+
86
+ const len = hex.length;
87
+ if (len % 2 !== 0) {
88
+ throw new TypeError('Invalid hex string: odd length');
89
+ }
90
+
91
+ const byteLength = len / 2;
92
+ const result = new Uint8Array(byteLength);
93
+
94
+ for (let i = 0; i < byteLength; i++) {
95
+ const charIndex = i * 2;
96
+ const highCode = hex.charCodeAt(charIndex);
97
+ const lowCode = hex.charCodeAt(charIndex + 1);
98
+
99
+ // Bounds check for lookup table
100
+ if (highCode >= 128 || lowCode >= 128) {
101
+ throw new TypeError(`Invalid hex character at position ${charIndex}`);
102
+ }
103
+
104
+ const high = HEX_TO_NIBBLE[highCode];
105
+ const low = HEX_TO_NIBBLE[lowCode];
106
+
107
+ if (high === -1) {
108
+ throw new TypeError(`Invalid hex character at position ${charIndex}`);
109
+ }
110
+ if (low === -1) {
111
+ throw new TypeError(`Invalid hex character at position ${charIndex + 1}`);
112
+ }
113
+
114
+ result[i] = (high! << 4) | low!;
115
+ }
116
+
117
+ return result;
118
+ }
119
+
120
+ /**
121
+ * Checks if a string is valid hexadecimal.
122
+ *
123
+ * @param value - The string to check
124
+ * @returns True if the string is valid hex (even length, valid chars)
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * import { isHex } from '@btc-vision/bitcoin';
129
+ *
130
+ * isHex('deadbeef'); // true
131
+ * isHex('0xdeadbeef'); // true
132
+ * isHex('DEADBEEF'); // true
133
+ * isHex('deadbee'); // false (odd length)
134
+ * isHex('deadbeeg'); // false (invalid char)
135
+ * ```
136
+ */
137
+ export function isHex(value: string): boolean {
138
+ let hex = value;
139
+ if (hex.length >= 2 && hex[0] === '0' && (hex[1] === 'x' || hex[1] === 'X')) {
140
+ hex = hex.slice(2);
141
+ }
142
+
143
+ if (hex.length % 2 !== 0) {
144
+ return false;
145
+ }
146
+
147
+ for (let i = 0; i < hex.length; i++) {
148
+ const code = hex.charCodeAt(i);
149
+ if (code >= 128 || HEX_TO_NIBBLE[code] === -1) {
150
+ return false;
151
+ }
152
+ }
153
+
154
+ return true;
155
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * High-performance binary I/O module.
3
+ *
4
+ * This module provides efficient binary reading and writing with
5
+ * zero-allocation operations through stateful DataView instances.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ import * as varuint from 'varuint-bitcoin';
11
+
12
+ // Binary reading and writing
13
+ export { BinaryReader } from './BinaryReader.js';
14
+ export { BinaryWriter, GrowableBinaryWriter } from './BinaryWriter.js';
15
+
16
+ // Hex encoding/decoding
17
+ export { toHex, fromHex, isHex } from './hex.js';
18
+
19
+ // Base64 decoding
20
+ export { fromBase64 } from './base64.js';
21
+
22
+ // Utility functions
23
+ export {
24
+ concat,
25
+ equals,
26
+ compare,
27
+ isZero,
28
+ clone,
29
+ reverse,
30
+ reverseCopy,
31
+ alloc,
32
+ xor,
33
+ fromUtf8,
34
+ toUtf8,
35
+ } from './utils.js';
36
+
37
+ // Memory pools
38
+ export { MemoryPool, SimpleMemoryPool } from './MemoryPool.js';
39
+
40
+ // Re-export varuint for Bitcoin CompactSize encoding
41
+ export { varuint };