@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
package/src/types.ts CHANGED
@@ -1,132 +1,261 @@
1
- import { Buffer as NBuffer } from 'buffer';
2
- import typeforce from 'typeforce';
3
-
4
- export { typeforce };
5
-
6
1
  /**
7
- * Typeforce type validator - validates that a value matches a given type.
2
+ * Core type definitions, branded types, and type guard functions.
3
+ *
4
+ * @packageDocumentation
8
5
  */
9
- export type TypeforceValidator = (value: unknown) => boolean;
6
+ import { compare, equals, fromHex, isZero } from './io/index.js';
7
+ import type {
8
+ Bytes20,
9
+ Bytes32,
10
+ PrivateKey,
11
+ PublicKey,
12
+ Satoshi,
13
+ SchnorrSignature,
14
+ Script,
15
+ Signature,
16
+ XOnlyPublicKey,
17
+ } from './branded.js';
10
18
 
11
- const ZERO32 = NBuffer.alloc(32, 0);
12
- const EC_P = NBuffer.from(
13
- 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f',
14
- 'hex',
15
- );
19
+ // ============================================================================
20
+ // Branded Types (re-exported from branded.ts to avoid circular dependencies)
21
+ // ============================================================================
16
22
 
17
- /**
18
- * Checks if two arrays of Buffers are equal.
19
- * @param a - The first array of Buffers.
20
- * @param b - The second array of Buffers.
21
- * @returns True if the arrays are equal, false otherwise.
22
- */
23
- export function stacksEqual(a: Buffer[], b: Buffer[]): boolean {
24
- if (a.length !== b.length) return false;
23
+ export type {
24
+ Bytes32,
25
+ Bytes20,
26
+ PublicKey,
27
+ XOnlyPublicKey,
28
+ Satoshi,
29
+ PrivateKey,
30
+ Signature,
31
+ SchnorrSignature,
32
+ Script,
33
+ } from './branded.js';
34
+
35
+ // ============================================================================
36
+ // Constants
37
+ // ============================================================================
38
+
39
+ /** @internal Do not mutate */
40
+ const EC_P = fromHex('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');
41
+ /** @internal Do not mutate — secp256k1 curve order */
42
+ const EC_N = fromHex('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');
43
+
44
+ export const SATOSHI_MAX = 21n * 10n ** 14n;
45
+ export const TAPLEAF_VERSION_MASK = 0xfe;
46
+
47
+ // ============================================================================
48
+ // Type Guards
49
+ // ============================================================================
25
50
 
26
- return a.every((x, i) => {
27
- return x.equals(b[i]);
28
- });
51
+ export function isUInt8(value: unknown): value is number {
52
+ return typeof value === 'number' && Number.isInteger(value) && value >= 0 && value <= 0xff;
29
53
  }
30
54
 
31
- /**
32
- * Checks if the given value is a valid elliptic curve point.
33
- * @param p - The value to check.
34
- * @returns True if the value is a valid elliptic curve point, false otherwise.
35
- */
36
- export function isPoint(p: Buffer | number | undefined | null): boolean {
37
- if (!NBuffer.isBuffer(p)) return false;
38
- if (p.length < 33) return false;
55
+ export function isUInt32(value: unknown): value is number {
56
+ return (
57
+ typeof value === 'number' && Number.isInteger(value) && value >= 0 && value <= 0xffffffff
58
+ );
59
+ }
60
+
61
+ export function isNumber(value: unknown): value is number {
62
+ return typeof value === 'number' && Number.isFinite(value);
63
+ }
39
64
 
40
- const t = p[0]; // First byte = point format indicator
41
- const x = p.subarray(1, 33); // Next 32 bytes = X coordinate
65
+ export function isUint8Array(value: unknown): value is Uint8Array {
66
+ return value instanceof Uint8Array;
67
+ }
42
68
 
43
- // Validate X coordinate
44
- if (x.compare(ZERO32) === 0) return false; // X cannot be zero
45
- if (x.compare(EC_P) >= 0) return false; // X must be < P
69
+ export function isUint8ArrayN<N extends number>(
70
+ value: unknown,
71
+ n: N,
72
+ ): value is Uint8Array & { readonly length: N } {
73
+ return value instanceof Uint8Array && value.length === n;
74
+ }
46
75
 
47
- // Check for compressed format (0x02 or 0x03), must be exactly 33 bytes total
48
- if ((t === 0x02 || t === 0x03) && p.length === 33) {
76
+ export function isArray(value: unknown): value is unknown[] {
77
+ return Array.isArray(value);
78
+ }
79
+
80
+ export function isHex(value: unknown): value is string {
81
+ if (typeof value !== 'string') return false;
82
+ if (value.length % 2 !== 0) return false;
83
+ return /^[0-9a-fA-F]*$/.test(value);
84
+ }
85
+
86
+ export function isBytes32(value: unknown): value is Bytes32 {
87
+ return value instanceof Uint8Array && value.length === 32;
88
+ }
89
+
90
+ export function isBytes20(value: unknown): value is Bytes20 {
91
+ return value instanceof Uint8Array && value.length === 20;
92
+ }
93
+
94
+ export function isXOnlyPublicKey(value: unknown): value is XOnlyPublicKey {
95
+ if (!(value instanceof Uint8Array) || value.length !== 32) return false;
96
+ if (isZero(value)) return false;
97
+ if (compare(value, EC_P) >= 0) return false;
98
+ return true;
99
+ }
100
+
101
+ export function isPoint(value: unknown): value is PublicKey {
102
+ if (!(value instanceof Uint8Array)) return false;
103
+ if (value.length < 33) return false;
104
+
105
+ const prefix = value[0];
106
+ const x = value.subarray(1, 33);
107
+
108
+ if (isZero(x)) return false;
109
+ if (compare(x, EC_P) >= 0) return false;
110
+
111
+ if ((prefix === 0x02 || prefix === 0x03) && value.length === 33) {
49
112
  return true;
50
113
  }
51
114
 
52
- // For uncompressed (0x04) or hybrid (0x06 or 0x07) formats, must be 65 bytes total
53
- if (p.length !== 65) return false;
115
+ if (value.length !== 65) return false;
54
116
 
55
- const y = p.subarray(33); // Last 32 bytes = Y coordinate
117
+ const y = value.subarray(33);
118
+ if (isZero(y)) return false;
119
+ if (compare(y, EC_P) >= 0) return false;
56
120
 
57
- // Validate Y coordinate
58
- if (y.compare(ZERO32) === 0) return false; // Y cannot be zero
59
- if (y.compare(EC_P) >= 0) return false; // Y must be < P
121
+ return prefix === 0x04 || prefix === 0x06 || prefix === 0x07;
122
+ }
60
123
 
61
- // 0x04 = uncompressed, 0x06/0x07 = hybrid (also 65 bytes, but with Y's parity bit set)
62
- return t === 0x04 || t === 0x06 || t === 0x07;
124
+ export function isSatoshi(value: unknown): value is Satoshi {
125
+ return typeof value === 'bigint' && value >= 0n && value <= SATOSHI_MAX;
63
126
  }
64
127
 
65
- const SATOSHI_MAX: number = 21 * 1e14;
128
+ export function isPrivateKey(value: unknown): value is PrivateKey {
129
+ if (!(value instanceof Uint8Array) || value.length !== 32) return false;
130
+ if (isZero(value)) return false;
131
+ if (compare(value, EC_N) >= 0) return false;
132
+ return true;
133
+ }
66
134
 
67
- export function Satoshi(value: number): boolean {
68
- return typeforce.UInt53(value) && value <= SATOSHI_MAX;
135
+ export function isSchnorrSignature(value: unknown): value is SchnorrSignature {
136
+ return value instanceof Uint8Array && value.length === 64;
69
137
  }
70
138
 
71
- export interface XOnlyPointAddTweakResult {
72
- parity: 1 | 0;
73
- xOnlyPubkey: Uint8Array;
139
+ export function isSignature(value: unknown): value is Signature {
140
+ return value instanceof Uint8Array && value.length >= 8 && value.length <= 73;
74
141
  }
75
142
 
143
+ export function isScript(value: unknown): value is Script {
144
+ return value instanceof Uint8Array;
145
+ }
146
+
147
+ // ============================================================================
148
+ // Taproot Types
149
+ // ============================================================================
150
+
76
151
  export interface Tapleaf {
77
- output: Buffer;
78
- version?: number;
152
+ readonly output: Uint8Array;
153
+ readonly version?: number;
79
154
  }
80
155
 
81
- export const TAPLEAF_VERSION_MASK = 0xfe;
156
+ export type Taptree = [Taptree | Tapleaf, Taptree | Tapleaf] | Tapleaf;
157
+
158
+ export function isTapleaf(value: unknown): value is Tapleaf {
159
+ if (!value || typeof value !== 'object') return false;
160
+
161
+ const obj = value as Record<string, unknown>;
162
+ if (!('output' in obj)) return false;
163
+ if (!(obj['output'] instanceof Uint8Array)) return false;
164
+
165
+ if (obj['version'] !== undefined) {
166
+ if (typeof obj['version'] !== 'number') return false;
167
+ if ((obj['version'] & TAPLEAF_VERSION_MASK) !== obj['version']) return false;
168
+ }
82
169
 
83
- export function isTapleaf(o: unknown): o is Tapleaf {
84
- if (!o || typeof o !== 'object' || !('output' in o)) return false;
85
- const obj = o as Record<string, unknown>;
86
- if (!NBuffer.isBuffer(obj.output)) return false;
87
- if (obj.version !== undefined)
88
- return ((obj.version as number) & TAPLEAF_VERSION_MASK) === obj.version;
89
170
  return true;
90
171
  }
91
172
 
92
- /**
93
- * Binary tree repsenting script path spends for a Taproot input.
94
- * Each node is either a single Tapleaf, or a pair of Tapleaf | Taptree.
95
- * The tree has no balancing requirements.
96
- */
97
- export type Taptree = [Taptree | Tapleaf, Taptree | Tapleaf] | Tapleaf;
173
+ export function isTaptree(value: unknown): value is Taptree {
174
+ if (!Array.isArray(value)) return isTapleaf(value);
175
+ if (value.length !== 2) return false;
176
+ return value.every((node: unknown) => isTaptree(node));
177
+ }
178
+
179
+ // ============================================================================
180
+ // ECC Interface (re-exported from ecc/types.ts for backward compatibility)
181
+ // ============================================================================
182
+
183
+ export type { XOnlyPointAddTweakResult, EccLib, Parity } from './ecc/types.js';
98
184
 
99
- export function isTaptree(scriptTree: unknown): scriptTree is Taptree {
100
- if (!globalThis.Array.isArray(scriptTree)) return isTapleaf(scriptTree);
101
- if (scriptTree.length !== 2) return false;
102
- return scriptTree.every((t: unknown) => isTaptree(t));
103
- }
104
-
105
- export interface TinySecp256k1Interface {
106
- isXOnlyPoint(p: Uint8Array): boolean;
107
-
108
- xOnlyPointAddTweak(p: Uint8Array, tweak: Uint8Array): XOnlyPointAddTweakResult | null;
109
- }
110
-
111
- export const Buffer256bit: TypeforceValidator = typeforce.BufferN(32);
112
- export const Hash160bit: TypeforceValidator = typeforce.BufferN(20);
113
- export const Hash256bit: TypeforceValidator = typeforce.BufferN(32);
114
- export const Number: TypeforceValidator = typeforce.Number;
115
- export const Array: TypeforceValidator = typeforce.Array;
116
- export const Boolean: TypeforceValidator = typeforce.Boolean;
117
- export const String: TypeforceValidator = typeforce.String;
118
- export const Buffer: TypeforceValidator = typeforce.Buffer;
119
- export const Hex: TypeforceValidator = typeforce.Hex;
120
- export const maybe: (type: unknown) => TypeforceValidator = typeforce.maybe;
121
- export const tuple: (...types: unknown[]) => TypeforceValidator = typeforce.tuple;
122
- export const UInt8: TypeforceValidator = typeforce.UInt8;
123
- export const UInt32: TypeforceValidator = typeforce.UInt32;
124
- export const Function: TypeforceValidator = typeforce.Function;
125
- export const BufferN: (n: number) => TypeforceValidator = typeforce.BufferN;
126
- export const Null: TypeforceValidator = typeforce.Null;
127
- export const oneOf: (...types: unknown[]) => TypeforceValidator = typeforce.oneOf;
128
-
129
- // Stack types - used by script and payments
130
- export type StackElement = globalThis.Buffer | number;
131
- export type Stack = StackElement[];
185
+ // ============================================================================
186
+ // Stack Types
187
+ // ============================================================================
188
+
189
+ export type StackElement = Uint8Array | number;
190
+ export type Stack = readonly StackElement[];
132
191
  export type StackFunction = () => Stack;
192
+
193
+ // ============================================================================
194
+ // Utility Functions
195
+ // ============================================================================
196
+
197
+ export function stacksEqual(a: Uint8Array[], b: Uint8Array[]): boolean {
198
+ if (a.length !== b.length) return false;
199
+ return a.every((x, i) => equals(x, b[i]!));
200
+ }
201
+
202
+ export function toBytes32(value: Uint8Array): Bytes32 {
203
+ if (!isBytes32(value)) {
204
+ throw new TypeError(`Expected 32-byte Uint8Array, got ${value.length} bytes`);
205
+ }
206
+ return value;
207
+ }
208
+
209
+ export function toBytes20(value: Uint8Array): Bytes20 {
210
+ if (!isBytes20(value)) {
211
+ throw new TypeError(`Expected 20-byte Uint8Array, got ${value.length} bytes`);
212
+ }
213
+ return value;
214
+ }
215
+
216
+ export function toSatoshi(value: bigint): Satoshi {
217
+ if (value < 0n) {
218
+ throw new RangeError(`Satoshi cannot be negative, got ${value}`);
219
+ }
220
+ if (value > SATOSHI_MAX) {
221
+ throw new RangeError(`Satoshi exceeds maximum supply (${SATOSHI_MAX}), got ${value}`);
222
+ }
223
+ return value as Satoshi;
224
+ }
225
+
226
+ // ============================================================================
227
+ // Assertion Helpers
228
+ // ============================================================================
229
+
230
+ export function assertXOnlyPublicKey(
231
+ value: unknown,
232
+ name: string,
233
+ ): asserts value is XOnlyPublicKey {
234
+ if (!(value instanceof Uint8Array)) {
235
+ throw new TypeError(`${name} must be Uint8Array, got ${typeof value}`);
236
+ }
237
+ if (value.length !== 32) {
238
+ throw new TypeError(`${name} must be 32 bytes, got ${value.length}`);
239
+ }
240
+ if (isZero(value)) {
241
+ throw new RangeError(`${name} cannot be zero`);
242
+ }
243
+ if (compare(value, EC_P) >= 0) {
244
+ throw new RangeError(`${name} exceeds curve order`);
245
+ }
246
+ }
247
+
248
+ export function assertPrivateKey(value: unknown, name: string): asserts value is PrivateKey {
249
+ if (!(value instanceof Uint8Array)) {
250
+ throw new TypeError(`${name} must be Uint8Array, got ${typeof value}`);
251
+ }
252
+ if (value.length !== 32) {
253
+ throw new TypeError(`${name} must be 32 bytes, got ${value.length}`);
254
+ }
255
+ if (isZero(value)) {
256
+ throw new RangeError(`${name} cannot be zero`);
257
+ }
258
+ if (compare(value, EC_N) >= 0) {
259
+ throw new RangeError(`${name} exceeds curve order`);
260
+ }
261
+ }