@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
package/build/block.js CHANGED
@@ -1,99 +1,190 @@
1
- import { BufferReader, BufferWriter, reverseBuffer, varuint } from './bufferutils.js';
2
1
  import * as bcrypto from './crypto.js';
2
+ import { BinaryReader, BinaryWriter, varuint, equals, fromHex, alloc, compare, toHex, reverse } from './io/index.js';
3
3
  import { fastMerkleRoot } from './merkle.js';
4
4
  import { Transaction } from './transaction.js';
5
- import * as types from './types.js';
6
- const { typeforce } = types;
7
5
  const errorMerkleNoTxes = new TypeError('Cannot compute merkle root for zero transactions');
8
6
  const errorWitnessNotSegwit = new TypeError('Cannot compute witness commit for non-segwit block');
7
+ const WITNESS_COMMIT_PREFIX = fromHex('6a24aa21a9ed');
8
+ /**
9
+ * Represents a Bitcoin block with header fields and optional transactions.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { Block, fromHex } from '@btc-vision/bitcoin';
14
+ *
15
+ * // Parse a block from hex
16
+ * const block = Block.fromHex('0100000000000000...');
17
+ *
18
+ * // Access block properties
19
+ * console.log(block.version);
20
+ * console.log(block.getId());
21
+ * console.log(block.timestamp);
22
+ *
23
+ * // Check proof of work
24
+ * if (block.checkProofOfWork()) {
25
+ * console.log('Valid PoW');
26
+ * }
27
+ * ```
28
+ */
9
29
  export class Block {
10
- constructor() {
11
- this.version = 1;
12
- this.prevHash = undefined;
13
- this.merkleRoot = undefined;
14
- this.timestamp = 0;
15
- this.witnessCommit = undefined;
16
- this.bits = 0;
17
- this.nonce = 0;
18
- this.transactions = undefined;
19
- }
30
+ /** Block version number */
31
+ version = 1;
32
+ /** Hash of the previous block (32 bytes) */
33
+ prevHash = undefined;
34
+ /** Merkle root of the transactions (32 bytes) */
35
+ merkleRoot = undefined;
36
+ /** Block timestamp (Unix time) */
37
+ timestamp = 0;
38
+ /** Witness commitment for SegWit blocks (32 bytes) */
39
+ witnessCommit = undefined;
40
+ /** Compact representation of the target threshold */
41
+ bits = 0;
42
+ /** Nonce used for proof of work */
43
+ nonce = 0;
44
+ /** Array of transactions included in the block */
45
+ transactions = undefined;
46
+ /**
47
+ * Parses a Block from a Uint8Array.
48
+ * @param buffer - The raw block data (minimum 80 bytes for header only)
49
+ * @returns Parsed Block instance
50
+ * @throws Error if buffer is too small
51
+ */
20
52
  static fromBuffer(buffer) {
21
53
  if (buffer.length < 80)
22
54
  throw new Error('Buffer too small (< 80 bytes)');
23
- const bufferReader = new BufferReader(buffer);
55
+ const reader = new BinaryReader(buffer);
24
56
  const block = new Block();
25
- block.version = bufferReader.readInt32();
26
- block.prevHash = bufferReader.readSlice(32);
27
- block.merkleRoot = bufferReader.readSlice(32);
28
- block.timestamp = bufferReader.readUInt32();
29
- block.bits = bufferReader.readUInt32();
30
- block.nonce = bufferReader.readUInt32();
57
+ block.version = reader.readInt32LE();
58
+ block.prevHash = reader.readBytes(32);
59
+ block.merkleRoot = reader.readBytes(32);
60
+ block.timestamp = reader.readUInt32LE();
61
+ block.bits = reader.readUInt32LE();
62
+ block.nonce = reader.readUInt32LE();
31
63
  if (buffer.length === 80)
32
64
  return block;
33
65
  const readTransaction = () => {
34
- const tx = Transaction.fromBuffer(bufferReader.buffer.subarray(bufferReader.offset), true);
35
- bufferReader.offset += tx.byteLength();
66
+ const tx = Transaction.fromBuffer(reader.data.subarray(reader.offset), true);
67
+ reader.offset += tx.byteLength();
36
68
  return tx;
37
69
  };
38
- const nTransactions = bufferReader.readVarInt();
70
+ const nTransactions = reader.readVarInt();
39
71
  block.transactions = [];
40
72
  for (let i = 0; i < nTransactions; ++i) {
41
73
  const tx = readTransaction();
42
74
  block.transactions.push(tx);
43
75
  }
44
76
  const witnessCommit = block.getWitnessCommit();
77
+ // This Block contains a witness commit
45
78
  if (witnessCommit)
46
79
  block.witnessCommit = witnessCommit;
47
80
  return block;
48
81
  }
82
+ /**
83
+ * Parses a Block from a hex string.
84
+ * @param hex - Hexadecimal representation of the block
85
+ * @returns Parsed Block instance
86
+ */
49
87
  static fromHex(hex) {
50
- return Block.fromBuffer(Buffer.from(hex, 'hex'));
88
+ return Block.fromBuffer(fromHex(hex));
51
89
  }
90
+ /**
91
+ * Calculates the target threshold from the compact bits representation.
92
+ * @param bits - Compact bits value from block header
93
+ * @returns 32-byte target threshold
94
+ */
52
95
  static calculateTarget(bits) {
53
96
  const exponent = ((bits & 0xff000000) >> 24) - 3;
54
97
  const mantissa = bits & 0x007fffff;
55
- const target = Buffer.alloc(32, 0);
56
- target.writeUIntBE(mantissa, 29 - exponent, 3);
98
+ const target = alloc(32);
99
+ // Write mantissa as big-endian at the computed offset
100
+ const offset = 29 - exponent;
101
+ target[offset] = (mantissa >> 16) & 0xff;
102
+ target[offset + 1] = (mantissa >> 8) & 0xff;
103
+ target[offset + 2] = mantissa & 0xff;
57
104
  return target;
58
105
  }
106
+ /**
107
+ * Calculates the merkle root for a list of transactions.
108
+ * @param transactions - Array of transactions
109
+ * @param forWitness - If true, calculate witness merkle root (for SegWit)
110
+ * @returns 32-byte merkle root hash
111
+ * @throws TypeError if transactions is empty or not an array
112
+ */
59
113
  static calculateMerkleRoot(transactions, forWitness) {
60
- typeforce([{ getHash: types.Function }], transactions);
114
+ if (!Array.isArray(transactions)) {
115
+ throw new TypeError('Expected an array of transactions');
116
+ }
61
117
  if (transactions.length === 0)
62
118
  throw errorMerkleNoTxes;
63
119
  if (forWitness && !txesHaveWitnessCommit(transactions))
64
120
  throw errorWitnessNotSegwit;
65
121
  const hashes = transactions.map((transaction) => transaction.getHash(forWitness));
66
122
  const rootHash = fastMerkleRoot(hashes, bcrypto.hash256);
67
- return forWitness
68
- ? bcrypto.hash256(Buffer.concat([rootHash, transactions[0].ins[0].witness[0]]))
69
- : rootHash;
123
+ if (forWitness) {
124
+ const witness = transactions[0].ins[0].witness[0];
125
+ const combined = new Uint8Array(rootHash.length + witness.length);
126
+ combined.set(rootHash);
127
+ combined.set(witness, rootHash.length);
128
+ return bcrypto.hash256(combined);
129
+ }
130
+ return rootHash;
70
131
  }
132
+ /**
133
+ * Extracts the witness commitment from the coinbase transaction.
134
+ * @returns 32-byte witness commitment or null if not found
135
+ */
71
136
  getWitnessCommit() {
72
- if (!txesHaveWitnessCommit(this.transactions))
137
+ if (!this.transactions || !txesHaveWitnessCommit(this.transactions))
73
138
  return null;
74
- const witnessCommits = this.transactions[0].outs.filter((out) => out.script.subarray(0, 6).equals(Buffer.from('6a24aa21a9ed', 'hex'))).map((out) => out.script.subarray(6, 38));
139
+ // The merkle root for the witness data is in an OP_RETURN output.
140
+ // There is no rule for the index of the output, so use filter to find it.
141
+ // The root is prepended with 0xaa21a9ed so check for 0x6a24aa21a9ed
142
+ // If multiple commits are found, the output with highest index is assumed.
143
+ const witnessCommits = this.transactions[0].outs
144
+ .filter((out) => equals(out.script.subarray(0, 6), WITNESS_COMMIT_PREFIX))
145
+ .map((out) => out.script.subarray(6, 38));
75
146
  if (witnessCommits.length === 0)
76
147
  return null;
148
+ // Use the commit with the highest output (should only be one though)
77
149
  const result = witnessCommits[witnessCommits.length - 1];
78
- if (!(result instanceof Buffer && result.length === 32))
150
+ if (!(result instanceof Uint8Array && result.length === 32))
79
151
  return null;
80
152
  return result;
81
153
  }
154
+ /**
155
+ * Checks if this block has a witness commitment.
156
+ * @returns True if the block has a witness commitment
157
+ */
82
158
  hasWitnessCommit() {
83
- if (this.witnessCommit instanceof Buffer && this.witnessCommit.length === 32)
159
+ if (this.witnessCommit instanceof Uint8Array && this.witnessCommit.length === 32)
84
160
  return true;
85
161
  if (this.getWitnessCommit() !== null)
86
162
  return true;
87
163
  return false;
88
164
  }
165
+ /**
166
+ * Checks if any transaction in this block has witness data.
167
+ * @returns True if any transaction has witness data
168
+ */
89
169
  hasWitness() {
90
- return anyTxHasWitness(this.transactions);
170
+ return this.transactions ? anyTxHasWitness(this.transactions) : false;
91
171
  }
172
+ /**
173
+ * Calculates the weight of this block.
174
+ * Weight = (base size * 3) + total size
175
+ * @returns Block weight in weight units
176
+ */
92
177
  weight() {
93
178
  const base = this.byteLength(false, false);
94
179
  const total = this.byteLength(false, true);
95
180
  return base * 3 + total;
96
181
  }
182
+ /**
183
+ * Calculates the serialized byte length of this block.
184
+ * @param headersOnly - If true, return only header size (80 bytes)
185
+ * @param allowWitness - If true, include witness data in calculation
186
+ * @returns Byte length of the serialized block
187
+ */
97
188
  byteLength(headersOnly, allowWitness = true) {
98
189
  if (headersOnly || !this.transactions)
99
190
  return 80;
@@ -101,81 +192,122 @@ export class Block {
101
192
  varuint.encodingLength(this.transactions.length) +
102
193
  this.transactions.reduce((a, x) => a + x.byteLength(allowWitness), 0));
103
194
  }
195
+ /**
196
+ * Computes the double-SHA256 hash of the block header.
197
+ * @returns 32-byte block hash
198
+ */
104
199
  getHash() {
105
200
  return bcrypto.hash256(this.toBuffer(true));
106
201
  }
202
+ /**
203
+ * Returns the block ID (hash in reversed hex format, as displayed in block explorers).
204
+ * @returns Block ID as hex string
205
+ */
107
206
  getId() {
108
- return reverseBuffer(this.getHash()).toString('hex');
207
+ return toHex(reverse(this.getHash()));
109
208
  }
209
+ /**
210
+ * Converts the block timestamp to a Date object.
211
+ * @returns UTC date of the block
212
+ */
110
213
  getUTCDate() {
111
- const date = new Date(0);
214
+ const date = new Date(0); // epoch
112
215
  date.setUTCSeconds(this.timestamp);
113
216
  return date;
114
217
  }
218
+ /**
219
+ * Serializes the block to a Uint8Array.
220
+ * @param headersOnly - If true, only serialize the 80-byte header
221
+ * @returns Serialized block data
222
+ */
115
223
  toBuffer(headersOnly) {
116
- const buffer = Buffer.allocUnsafe(this.byteLength(headersOnly));
117
- const bufferWriter = new BufferWriter(buffer);
118
- bufferWriter.writeInt32(this.version);
119
- bufferWriter.writeSlice(this.prevHash);
120
- bufferWriter.writeSlice(this.merkleRoot);
121
- bufferWriter.writeUInt32(this.timestamp);
122
- bufferWriter.writeUInt32(this.bits);
123
- bufferWriter.writeUInt32(this.nonce);
224
+ if (!this.prevHash)
225
+ throw new TypeError('Block prevHash is required');
226
+ if (!this.merkleRoot)
227
+ throw new TypeError('Block merkleRoot is required');
228
+ const buffer = new Uint8Array(this.byteLength(headersOnly));
229
+ const writer = new BinaryWriter(buffer);
230
+ writer.writeInt32LE(this.version);
231
+ writer.writeBytes(this.prevHash);
232
+ writer.writeBytes(this.merkleRoot);
233
+ writer.writeUInt32LE(this.timestamp);
234
+ writer.writeUInt32LE(this.bits);
235
+ writer.writeUInt32LE(this.nonce);
124
236
  if (headersOnly || !this.transactions)
125
237
  return buffer;
126
- const encoded = varuint.encode(this.transactions.length, buffer, bufferWriter.offset);
127
- bufferWriter.offset += encoded.bytes;
238
+ writer.writeVarInt(this.transactions.length);
128
239
  this.transactions.forEach((tx) => {
129
- const txSize = tx.byteLength();
130
- tx.toBuffer(buffer, bufferWriter.offset);
131
- bufferWriter.offset += txSize;
240
+ const txSize = tx.byteLength(); // TODO: extract from toBuffer?
241
+ tx.toBuffer(buffer.subarray(writer.offset));
242
+ writer.offset += txSize;
132
243
  });
133
244
  return buffer;
134
245
  }
246
+ /**
247
+ * Serializes the block to a hex string.
248
+ * @param headersOnly - If true, only serialize the 80-byte header
249
+ * @returns Hex string representation of the block
250
+ */
135
251
  toHex(headersOnly) {
136
- return this.toBuffer(headersOnly).toString('hex');
252
+ return toHex(this.toBuffer(headersOnly));
137
253
  }
254
+ /**
255
+ * Validates the merkle root and witness commitment (if present).
256
+ * @returns True if the transaction roots are valid
257
+ */
138
258
  checkTxRoots() {
259
+ // If the Block has segwit transactions but no witness commit,
260
+ // there's no way it can be valid, so fail the check.
139
261
  const hasWitnessCommit = this.hasWitnessCommit();
140
262
  if (!hasWitnessCommit && this.hasWitness())
141
263
  return false;
142
- return this.__checkMerkleRoot() && (hasWitnessCommit ? this.__checkWitnessCommit() : true);
264
+ return this.#checkMerkleRoot() && (hasWitnessCommit ? this.#checkWitnessCommit() : true);
143
265
  }
266
+ /**
267
+ * Validates that the block hash meets the target threshold (proof of work).
268
+ * @returns True if the block's proof of work is valid
269
+ */
144
270
  checkProofOfWork() {
145
- const hash = reverseBuffer(this.getHash());
271
+ const hash = reverse(this.getHash());
146
272
  const target = Block.calculateTarget(this.bits);
147
- return hash.compare(target) <= 0;
273
+ return compare(hash, target) <= 0;
148
274
  }
149
- __checkMerkleRoot() {
275
+ #checkMerkleRoot() {
150
276
  if (!this.transactions)
151
277
  throw errorMerkleNoTxes;
278
+ if (!this.merkleRoot)
279
+ throw new TypeError('Block merkleRoot is required');
152
280
  const actualMerkleRoot = Block.calculateMerkleRoot(this.transactions);
153
- return this.merkleRoot.compare(actualMerkleRoot) === 0;
281
+ return compare(this.merkleRoot, actualMerkleRoot) === 0;
154
282
  }
155
- __checkWitnessCommit() {
283
+ #checkWitnessCommit() {
156
284
  if (!this.transactions)
157
285
  throw errorMerkleNoTxes;
158
286
  if (!this.hasWitnessCommit())
159
287
  throw errorWitnessNotSegwit;
288
+ if (!this.witnessCommit)
289
+ throw errorWitnessNotSegwit;
160
290
  const actualWitnessCommit = Block.calculateMerkleRoot(this.transactions, true);
161
- return this.witnessCommit.compare(actualWitnessCommit) === 0;
291
+ return compare(this.witnessCommit, actualWitnessCommit) === 0;
162
292
  }
163
293
  }
294
+ /**
295
+ * Checks if the coinbase transaction has witness data (required for witness commitment).
296
+ * @param transactions - Array of transactions
297
+ * @returns True if coinbase has witness data
298
+ */
164
299
  function txesHaveWitnessCommit(transactions) {
165
- return (transactions instanceof Array &&
166
- transactions[0] &&
167
- transactions[0].ins &&
168
- transactions[0].ins instanceof Array &&
169
- transactions[0].ins[0] &&
170
- transactions[0].ins[0].witness &&
171
- transactions[0].ins[0].witness instanceof Array &&
172
- transactions[0].ins[0].witness.length > 0);
300
+ const coinbase = transactions[0];
301
+ if (!coinbase?.ins?.[0]?.witness)
302
+ return false;
303
+ return coinbase.ins[0].witness.length > 0;
173
304
  }
305
+ /**
306
+ * Checks if any transaction in the array has witness data.
307
+ * @param transactions - Array of transactions
308
+ * @returns True if any transaction has witness data
309
+ */
174
310
  function anyTxHasWitness(transactions) {
175
- return (transactions instanceof Array &&
176
- transactions.some((tx) => typeof tx === 'object' &&
177
- tx.ins instanceof Array &&
178
- tx.ins.some((input) => typeof input === 'object' &&
179
- input.witness instanceof Array &&
180
- input.witness.length > 0)));
311
+ return transactions.some((tx) => tx.ins?.some((input) => input.witness && input.witness.length > 0));
181
312
  }
313
+ //# sourceMappingURL=block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../src/block.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Branded type definitions for type-safe primitives.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ declare const __brand: unique symbol;
7
+ type Brand<T, B extends string> = T & {
8
+ readonly [__brand]: B;
9
+ };
10
+ export type Bytes32 = Brand<Uint8Array, 'Bytes32'>;
11
+ export type Bytes20 = Brand<Uint8Array, 'Bytes20'>;
12
+ export type PublicKey = Brand<Uint8Array, 'PublicKey'>;
13
+ export type XOnlyPublicKey = Brand<Uint8Array, 'XOnlyPublicKey'>;
14
+ export type Satoshi = Brand<bigint, 'Satoshi'>;
15
+ export type PrivateKey = Brand<Uint8Array, 'PrivateKey'>;
16
+ export type Signature = Brand<Uint8Array, 'Signature'>;
17
+ export type SchnorrSignature = Brand<Uint8Array, 'SchnorrSignature'>;
18
+ export type Script = Brand<Uint8Array, 'Script'>;
19
+ export {};
20
+ //# sourceMappingURL=branded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branded.d.ts","sourceRoot":"","sources":["../src/branded.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,CAAC;AACrC,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACnD,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACvD,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AACzD,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACvD,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AACrE,MAAM,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Branded type definitions for type-safe primitives.
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=branded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branded.js","sourceRoot":"","sources":["../src/branded.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1 +1,2 @@
1
1
  export { createHash, createHmac, pbkdf2Sync, randomBytes } from 'crypto';
2
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/crypto/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}
@@ -1 +1,2 @@
1
1
  export { createHash, createHmac, pbkdf2Sync, randomBytes } from 'crypto';
2
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/crypto/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC"}
package/build/crypto.d.ts CHANGED
@@ -1,13 +1,52 @@
1
- export declare function ripemd160(buffer: Buffer): Buffer;
2
- export declare function sha1(buffer: Buffer): Buffer;
3
- export declare function sha256(buffer: Buffer): Buffer;
4
- export declare function hash160(buffer: Buffer): Buffer;
5
- export declare function hash256(buffer: Buffer): Buffer;
1
+ import type { Bytes32, Bytes20 } from './types.js';
2
+ /**
3
+ * Computes RIPEMD-160 hash of the input.
4
+ * @param data - Input data
5
+ * @returns 20-byte hash (Bytes20)
6
+ */
7
+ export declare function ripemd160(data: Uint8Array): Bytes20;
8
+ /**
9
+ * Computes SHA-1 hash of the input.
10
+ * @param data - Input data
11
+ * @returns 20-byte hash (Bytes20)
12
+ */
13
+ export declare function sha1(data: Uint8Array): Bytes20;
14
+ /**
15
+ * Computes SHA-256 hash of the input.
16
+ * @param data - Input data
17
+ * @returns 32-byte hash (Bytes32)
18
+ */
19
+ export declare function sha256(data: Uint8Array): Bytes32;
20
+ /**
21
+ * Computes HASH160 (RIPEMD160(SHA256(data))) of the input.
22
+ * @param data - Input data
23
+ * @returns 20-byte hash (Bytes20)
24
+ */
25
+ export declare function hash160(data: Uint8Array): Bytes20;
26
+ /**
27
+ * Computes double SHA-256 hash of the input.
28
+ * @param data - Input data
29
+ * @returns 32-byte hash (Bytes32)
30
+ */
31
+ export declare function hash256(data: Uint8Array): Bytes32;
32
+ /**
33
+ * BIP340/Taproot tag names for tagged hashing.
34
+ */
6
35
  export declare const TAGS: readonly ["BIP0340/challenge", "BIP0340/aux", "BIP0340/nonce", "TapLeaf", "TapBranch", "TapSighash", "TapTweak", "KeyAgg list", "KeyAgg coefficient"];
7
36
  export type TaggedHashPrefix = (typeof TAGS)[number];
8
37
  type TaggedHashPrefixes = {
9
- [key in TaggedHashPrefix]: Buffer;
38
+ [key in TaggedHashPrefix]: Uint8Array;
10
39
  };
40
+ /**
41
+ * Precomputed tagged hash prefixes: SHA256(tag) || SHA256(tag)
42
+ */
11
43
  export declare const TAGGED_HASH_PREFIXES: TaggedHashPrefixes;
12
- export declare function taggedHash(prefix: TaggedHashPrefix, data: Buffer): Buffer;
44
+ /**
45
+ * Computes a BIP340-style tagged hash.
46
+ * @param prefix - The tag name
47
+ * @param data - Input data
48
+ * @returns 32-byte hash (Bytes32)
49
+ */
50
+ export declare function taggedHash(prefix: TaggedHashPrefix, data: Uint8Array): Bytes32;
13
51
  export {};
52
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,uJAUP,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,KAAK,kBAAkB,GAAG;KACrB,GAAG,IAAI,gBAAgB,GAAG,UAAU;CACxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBAsDlC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAE9E"}