@btc-vision/bitcoin 6.5.6 → 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 (455) 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 +56 -9
  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 +12482 -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 +57 -10
  115. package/build/address.d.ts.map +1 -0
  116. package/build/address.js +80 -24
  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 +204 -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 +36 -9
  203. package/build/payments/bip341.d.ts.map +1 -0
  204. package/build/payments/bip341.js +35 -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 -152
  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 +429 -104
  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 +466 -144
  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 +113 -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 +411 -412
  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 +100 -36
  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 +175 -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 +66 -8
  332. package/scripts/bundle-ecc.ts +111 -0
  333. package/src/address.ts +81 -44
  334. package/src/bech32utils.ts +3 -3
  335. package/src/bip66.ts +34 -24
  336. package/src/block.ts +196 -84
  337. package/src/branded.ts +18 -0
  338. package/src/crypto.ts +64 -26
  339. package/src/ecc/context.ts +277 -0
  340. package/src/ecc/index.ts +14 -0
  341. package/src/ecc/types.ts +154 -0
  342. package/src/ecpair.d.ts +99 -0
  343. package/src/errors.ts +163 -0
  344. package/src/index.ts +113 -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 +34 -33
  355. package/src/payments/embed.ts +244 -41
  356. package/src/payments/index.ts +12 -10
  357. package/src/payments/p2ms.ts +490 -118
  358. package/src/payments/p2op.ts +431 -133
  359. package/src/payments/p2pk.ts +370 -72
  360. package/src/payments/p2pkh.ts +524 -130
  361. package/src/payments/p2sh.ts +572 -172
  362. package/src/payments/p2tr.ts +686 -194
  363. package/src/payments/p2wpkh.ts +484 -107
  364. package/src/payments/p2wsh.ts +526 -164
  365. package/src/payments/types.ts +80 -66
  366. package/src/psbt/bip371.ts +68 -51
  367. package/src/psbt/psbtutils.ts +39 -40
  368. package/src/psbt/types.ts +331 -0
  369. package/src/psbt/utils.ts +188 -0
  370. package/src/psbt/validation.ts +192 -0
  371. package/src/psbt.ts +566 -809
  372. package/src/pubkey.ts +22 -23
  373. package/src/push_data.ts +18 -16
  374. package/src/script.ts +82 -64
  375. package/src/script_number.ts +6 -6
  376. package/src/script_signature.ts +33 -36
  377. package/src/transaction.ts +458 -238
  378. package/src/types.ts +231 -100
  379. package/src/workers/WorkerSigningPool.node.ts +887 -0
  380. package/src/workers/WorkerSigningPool.ts +670 -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 +332 -0
  384. package/src/workers/signing-worker.ts +353 -0
  385. package/src/workers/types.ts +413 -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/vite.config.browser.ts +3 -42
  421. package/vitest.config.integration.ts +2 -0
  422. package/browser/bufferutils.d.ts +0 -34
  423. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  424. package/browser/chunks/payments-B1wlSccx.js +0 -1089
  425. package/browser/chunks/psbt-BCNk7JUx.js +0 -4055
  426. package/browser/chunks/script-DyPItFEl.js +0 -318
  427. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  428. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  429. package/browser/ecc_lib.d.ts +0 -3
  430. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  431. package/browser/hooks/HookedSigner.d.ts +0 -4
  432. package/browser/hooks/SignatureManager.d.ts +0 -13
  433. package/browser/payments/lazy.d.ts +0 -2
  434. package/browser/typeforce.d.ts +0 -38
  435. package/build/bufferutils.d.ts +0 -34
  436. package/build/bufferutils.js +0 -141
  437. package/build/ecc_lib.d.ts +0 -3
  438. package/build/ecc_lib.js +0 -61
  439. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  440. package/build/hooks/AdvancedSignatureManager.js +0 -52
  441. package/build/hooks/HookedSigner.d.ts +0 -4
  442. package/build/hooks/HookedSigner.js +0 -64
  443. package/build/hooks/SignatureManager.d.ts +0 -13
  444. package/build/hooks/SignatureManager.js +0 -45
  445. package/build/payments/lazy.d.ts +0 -2
  446. package/build/payments/lazy.js +0 -28
  447. package/build/tsconfig.tsbuildinfo +0 -1
  448. package/src/bufferutils.ts +0 -188
  449. package/src/ecc_lib.ts +0 -94
  450. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  451. package/src/hooks/HookedSigner.ts +0 -108
  452. package/src/hooks/SignatureManager.ts +0 -84
  453. package/src/payments/lazy.ts +0 -28
  454. package/src/typeforce.d.ts +0 -38
  455. package/tsconfig.webpack.json +0 -18
@@ -0,0 +1,188 @@
1
+ /**
2
+ * PSBT utility functions
3
+ * @packageDocumentation
4
+ */
5
+
6
+ import { varuint } from '../io/index.js';
7
+ import * as bscript from '../script.js';
8
+ import { Transaction } from '../transaction.js';
9
+ import { isP2MS, isP2PK, isP2PKH, isP2SHScript, isP2WPKH, isP2WSHScript } from './psbtutils.js';
10
+ import type { ScriptType } from './types.js';
11
+ import type { Script } from '../types.js';
12
+ import { checkRedeemScript, checkWitnessScript } from './validation.js';
13
+
14
+ /**
15
+ * Converts a witness script buffer to an array of witness stack items.
16
+ * @param buffer - The witness script buffer
17
+ * @returns Array of witness stack items
18
+ */
19
+ export function scriptWitnessToWitnessStack(buffer: Uint8Array): Uint8Array[] {
20
+ let offset = 0;
21
+
22
+ function readSlice(n: number): Uint8Array {
23
+ offset += n;
24
+ return buffer.subarray(offset - n, offset);
25
+ }
26
+
27
+ function readVarInt(): number {
28
+ const vi = varuint.decode(buffer, offset);
29
+ offset += vi.bytes;
30
+ return vi.numberValue || 0;
31
+ }
32
+
33
+ function readVarSlice(): Uint8Array {
34
+ return readSlice(readVarInt());
35
+ }
36
+
37
+ function readVector(): Uint8Array[] {
38
+ const count = readVarInt();
39
+ const vector: Uint8Array[] = [];
40
+ for (let i = 0; i < count; i++) vector.push(readVarSlice());
41
+ return vector;
42
+ }
43
+
44
+ return readVector();
45
+ }
46
+
47
+ /**
48
+ * Converts a sighash type to a human-readable string.
49
+ * @param sighashType - The sighash type value
50
+ * @returns Human-readable sighash type string
51
+ */
52
+ export function sighashTypeToString(sighashType: number): string {
53
+ let text = sighashType & Transaction.SIGHASH_ANYONECANPAY ? 'SIGHASH_ANYONECANPAY | ' : '';
54
+ const sigMod = sighashType & 0x1f;
55
+ switch (sigMod) {
56
+ case Transaction.SIGHASH_ALL:
57
+ text += 'SIGHASH_ALL';
58
+ break;
59
+ case Transaction.SIGHASH_SINGLE:
60
+ text += 'SIGHASH_SINGLE';
61
+ break;
62
+ case Transaction.SIGHASH_NONE:
63
+ text += 'SIGHASH_NONE';
64
+ break;
65
+ }
66
+ return text;
67
+ }
68
+
69
+ /**
70
+ * Compresses an uncompressed public key to compressed form.
71
+ * @param pubkey - The public key (33 or 65 bytes)
72
+ * @returns Compressed public key (33 bytes)
73
+ */
74
+ export function compressPubkey(pubkey: Uint8Array): Uint8Array {
75
+ if (pubkey.length === 65) {
76
+ const parity = pubkey[64]! & 1;
77
+ const newKey = new Uint8Array(pubkey.subarray(0, 33));
78
+ newKey[0] = 2 | parity;
79
+ return newKey;
80
+ }
81
+ return new Uint8Array(pubkey);
82
+ }
83
+
84
+ /**
85
+ * Checks if a buffer looks like a public key.
86
+ * @param buf - The buffer to check
87
+ * @returns True if the buffer is a valid compressed public key format
88
+ */
89
+ export function isPubkeyLike(buf: Uint8Array): boolean {
90
+ return buf.length === 33 && bscript.isCanonicalPubKey(buf);
91
+ }
92
+
93
+ /**
94
+ * Checks if a buffer looks like a signature.
95
+ * @param buf - The buffer to check
96
+ * @returns True if the buffer is a valid canonical signature format
97
+ */
98
+ export function isSigLike(buf: Uint8Array): boolean {
99
+ return bscript.isCanonicalScriptSignature(buf);
100
+ }
101
+
102
+ /**
103
+ * Classifies a script into a known script type.
104
+ * @param script - The script to classify
105
+ * @returns The script type
106
+ */
107
+ export function classifyScript(script: Uint8Array): ScriptType {
108
+ if (isP2WPKH(script)) return 'witnesspubkeyhash';
109
+ if (isP2PKH(script)) return 'pubkeyhash';
110
+ if (isP2MS(script)) return 'multisig';
111
+ if (isP2PK(script)) return 'pubkey';
112
+ return 'nonstandard';
113
+ }
114
+
115
+ /**
116
+ * Creates an array of numbers from 0 to n-1.
117
+ * @param n - The length of the array
118
+ * @returns Array of numbers [0, 1, 2, ..., n-1]
119
+ */
120
+ export function range(n: number): number[] {
121
+ return [...Array(n).keys()];
122
+ }
123
+
124
+ /**
125
+ * Validates that a script is not P2WPKH or P2SH (invalid for P2WSH).
126
+ * @param script - The script to check
127
+ * @throws {Error} If the script is P2WPKH or P2SH
128
+ */
129
+ export function checkInvalidP2WSH(script: Uint8Array): void {
130
+ if (isP2WPKH(script) || isP2SHScript(script)) {
131
+ throw new Error('P2WPKH or P2SH can not be contained within P2WSH');
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Extracts the meaningful script from a potentially wrapped script.
137
+ * Handles P2SH, P2WSH, and P2SH-P2WSH wrapping.
138
+ * @param script - The script to analyze
139
+ * @param index - The input/output index (for error messages)
140
+ * @param ioType - Whether this is an input or output
141
+ * @param redeemScript - Optional redeem script for P2SH
142
+ * @param witnessScript - Optional witness script for P2WSH
143
+ * @returns The meaningful script and its type
144
+ */
145
+ export function getMeaningfulScript(
146
+ script: Uint8Array,
147
+ index: number,
148
+ ioType: 'input' | 'output',
149
+ redeemScript?: Uint8Array,
150
+ witnessScript?: Uint8Array,
151
+ ): {
152
+ meaningfulScript: Uint8Array;
153
+ type: 'p2sh' | 'p2wsh' | 'p2sh-p2wsh' | 'raw';
154
+ } {
155
+ const isP2SH = isP2SHScript(script);
156
+ const isP2SHP2WSH = isP2SH && redeemScript && isP2WSHScript(redeemScript);
157
+ const isP2WSH = isP2WSHScript(script);
158
+
159
+ if (isP2SH && redeemScript === undefined)
160
+ throw new Error('scriptPubkey is P2SH but redeemScript missing');
161
+ let meaningfulScript: Uint8Array;
162
+
163
+ if (isP2SHP2WSH) {
164
+ if (!witnessScript)
165
+ throw new Error('scriptPubkey or redeemScript is P2WSH but witnessScript missing');
166
+ if (!redeemScript) throw new Error('P2SH-P2WSH requires redeemScript');
167
+ meaningfulScript = witnessScript;
168
+ checkRedeemScript(index, script as Script, redeemScript as Script, ioType);
169
+ checkWitnessScript(index, redeemScript as Script, witnessScript as Script, ioType);
170
+ checkInvalidP2WSH(meaningfulScript);
171
+ } else if (isP2WSH) {
172
+ if (!witnessScript)
173
+ throw new Error('scriptPubkey or redeemScript is P2WSH but witnessScript missing');
174
+ meaningfulScript = witnessScript;
175
+ checkWitnessScript(index, script as Script, witnessScript as Script, ioType);
176
+ checkInvalidP2WSH(meaningfulScript);
177
+ } else if (isP2SH) {
178
+ if (!redeemScript) throw new Error('P2SH requires redeemScript');
179
+ meaningfulScript = redeemScript;
180
+ checkRedeemScript(index, script as Script, redeemScript as Script, ioType);
181
+ } else {
182
+ meaningfulScript = script;
183
+ }
184
+ return {
185
+ meaningfulScript,
186
+ type: isP2SHP2WSH ? 'p2sh-p2wsh' : isP2SH ? 'p2sh' : isP2WSH ? 'p2wsh' : 'raw',
187
+ };
188
+ }
@@ -0,0 +1,192 @@
1
+ /**
2
+ * PSBT validation utilities
3
+ * @packageDocumentation
4
+ */
5
+
6
+ import type { PsbtInput } from 'bip174';
7
+ import { reverse, equals, toHex } from '../io/index.js';
8
+ import * as payments from '../payments/index.js';
9
+ import type { P2SHPayment, Payment, PaymentOpts } from '../payments/index.js';
10
+ import { checkTaprootInputForSigs, isTaprootInput } from './bip371.js';
11
+ import { checkInputForSig, pubkeyInScript } from './psbtutils.js';
12
+ import * as bscript from '../script.js';
13
+ import type { Transaction } from '../transaction.js';
14
+ import type { PsbtCache } from './types.js';
15
+ import type { PublicKey, Script } from '../types.js';
16
+
17
+ /**
18
+ * Validates that a number is a valid 32-bit unsigned integer.
19
+ * @param num - The number to validate
20
+ * @throws {Error} If the number is not a valid 32-bit integer
21
+ */
22
+ export function check32Bit(num: number): void {
23
+ if (typeof num !== 'number' || num !== Math.floor(num) || num > 0xffffffff || num < 0) {
24
+ throw new Error('Invalid 32 bit integer');
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Checks if the cache is in a valid state for export.
30
+ * @param cache - The PSBT cache to check
31
+ * @throws {Error} If the cache is not BIP174 compliant
32
+ */
33
+ export function checkCache(cache: PsbtCache): void {
34
+ if (cache.unsafeSignNonSegwit) {
35
+ throw new Error('Not BIP174 compliant, can not export');
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Checks if a PSBT input has been finalized.
41
+ * @param input - The PSBT input to check
42
+ * @returns True if the input has finalScriptSig or finalScriptWitness
43
+ */
44
+ export function isFinalized(input: PsbtInput): boolean {
45
+ return !!input.finalScriptSig || !!input.finalScriptWitness;
46
+ }
47
+
48
+ /**
49
+ * Validates that a transaction has empty scriptSigs and witnesses.
50
+ * @param tx - The transaction to check
51
+ * @throws {Error} If any input has non-empty scripts
52
+ */
53
+ export function checkTxEmpty(tx: Transaction): void {
54
+ const isEmpty = tx.ins.every(
55
+ (input) =>
56
+ input.script &&
57
+ input.script.length === 0 &&
58
+ input.witness &&
59
+ input.witness.length === 0,
60
+ );
61
+ if (!isEmpty) {
62
+ throw new Error('Format Error: Transaction ScriptSigs are not empty');
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Checks and caches a transaction input to detect duplicates.
68
+ * @param cache - The PSBT cache
69
+ * @param input - The input to check
70
+ * @throws {Error} If a duplicate input is detected
71
+ */
72
+ export function checkTxInputCache(
73
+ cache: PsbtCache,
74
+ input: { hash: Uint8Array; index: number },
75
+ ): void {
76
+ const reversed = reverse(new Uint8Array(input.hash));
77
+ const key = `${toHex(reversed)}:${input.index}`;
78
+ if (cache.txInCache[key]) throw new Error('Duplicate input detected.');
79
+ (cache.txInCache as Record<string, number>)[key] = 1;
80
+ }
81
+
82
+ /**
83
+ * Checks all transaction inputs for duplicates.
84
+ * @param tx - The transaction to check
85
+ * @param cache - The PSBT cache
86
+ * @throws {Error} If duplicate inputs are detected
87
+ */
88
+ export function checkTxForDupeIns(tx: Transaction, cache: PsbtCache): void {
89
+ tx.ins.forEach((input) => {
90
+ checkTxInputCache(cache, input);
91
+ });
92
+ }
93
+
94
+ /**
95
+ * Checks if any inputs have partial signatures that would prevent modification.
96
+ * @param inputs - The PSBT inputs to check
97
+ * @param action - The action being attempted (for error message)
98
+ * @param hasSignaturesCache - Optional cached flag (true = definitely has sigs, false = check needed)
99
+ * @throws {Error} If signatures exist and prevent modification
100
+ */
101
+ export function checkInputsForPartialSig(
102
+ inputs: PsbtInput[],
103
+ action: string,
104
+ hasSignaturesCache?: boolean,
105
+ ): void {
106
+ // Fast path: if cache says no signatures, skip entirely (O(1))
107
+ if (hasSignaturesCache === false) {
108
+ return;
109
+ }
110
+
111
+ // Only do full validation if signatures might exist
112
+ inputs.forEach((input) => {
113
+ const throws = isTaprootInput(input)
114
+ ? checkTaprootInputForSigs(input, action)
115
+ : checkInputForSig(input, action);
116
+ if (throws) throw new Error('Can not modify transaction, signatures exist.');
117
+ });
118
+ }
119
+
120
+ /**
121
+ * Validates that partial signature sighash types match the input's sighash type.
122
+ * @param input - The PSBT input to check
123
+ * @throws {Error} If sighash types don't match
124
+ */
125
+ export function checkPartialSigSighashes(input: PsbtInput): void {
126
+ if (!input.sighashType || !input.partialSig) return;
127
+ const { partialSig, sighashType } = input;
128
+ partialSig.forEach((pSig) => {
129
+ const { hashType } = bscript.signature.decode(pSig.signature);
130
+ if (sighashType !== hashType) {
131
+ throw new Error('Signature sighash does not match input sighash type');
132
+ }
133
+ });
134
+ }
135
+
136
+ /**
137
+ * Validates that a pubkey exists in a script.
138
+ * @param pubkey - The pubkey to find
139
+ * @param script - The script to search
140
+ * @param action - The action being attempted (for error message)
141
+ * @throws {Error} If the pubkey is not found in the script
142
+ */
143
+ export function checkScriptForPubkey(pubkey: PublicKey, script: Script, action: string): void {
144
+ if (!pubkeyInScript(pubkey, script)) {
145
+ throw new Error(
146
+ `Can not ${action} for this input with the key ${toHex(pubkey)}`,
147
+ );
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Creates a script checker function for validating redeem/witness scripts.
153
+ * @param payment - The payment function to use (p2sh or p2wsh)
154
+ * @param paymentScriptName - Name for error messages
155
+ * @returns A function that validates scripts match
156
+ */
157
+ export function scriptCheckerFactory(
158
+ payment: (a: Omit<Payment, 'name'>, opts?: PaymentOpts) => Payment,
159
+ paymentScriptName: string,
160
+ ): (
161
+ idx: number,
162
+ scriptPubKey: Script,
163
+ redeemScript: Script,
164
+ ioType: 'input' | 'output',
165
+ ) => void {
166
+ return (
167
+ inputIndex: number,
168
+ scriptPubKey: Script,
169
+ redeemScript: Script,
170
+ ioType: 'input' | 'output',
171
+ ): void => {
172
+ const redeemScriptOutput = payment({
173
+ redeem: { output: redeemScript },
174
+ } as P2SHPayment).output as Uint8Array;
175
+
176
+ if (!equals(scriptPubKey, redeemScriptOutput)) {
177
+ throw new Error(
178
+ `${paymentScriptName} for ${ioType} #${inputIndex} doesn't match the scriptPubKey in the prevout`,
179
+ );
180
+ }
181
+ };
182
+ }
183
+
184
+ /**
185
+ * Validates that a redeem script matches the scriptPubKey.
186
+ */
187
+ export const checkRedeemScript = scriptCheckerFactory(payments.p2sh, 'Redeem script');
188
+
189
+ /**
190
+ * Validates that a witness script matches the scriptPubKey.
191
+ */
192
+ export const checkWitnessScript = scriptCheckerFactory(payments.p2wsh, 'Witness script');