@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,171 @@
1
+ /**
2
+ * PSBT utility functions
3
+ * @packageDocumentation
4
+ */
5
+ import { varuint } from '../io/index.js';
6
+ import * as bscript from '../script.js';
7
+ import { Transaction } from '../transaction.js';
8
+ import { isP2MS, isP2PK, isP2PKH, isP2SHScript, isP2WPKH, isP2WSHScript } from './psbtutils.js';
9
+ import { checkRedeemScript, checkWitnessScript } from './validation.js';
10
+ /**
11
+ * Converts a witness script buffer to an array of witness stack items.
12
+ * @param buffer - The witness script buffer
13
+ * @returns Array of witness stack items
14
+ */
15
+ export function scriptWitnessToWitnessStack(buffer) {
16
+ let offset = 0;
17
+ function readSlice(n) {
18
+ offset += n;
19
+ return buffer.subarray(offset - n, offset);
20
+ }
21
+ function readVarInt() {
22
+ const vi = varuint.decode(buffer, offset);
23
+ offset += vi.bytes;
24
+ return vi.numberValue || 0;
25
+ }
26
+ function readVarSlice() {
27
+ return readSlice(readVarInt());
28
+ }
29
+ function readVector() {
30
+ const count = readVarInt();
31
+ const vector = [];
32
+ for (let i = 0; i < count; i++)
33
+ vector.push(readVarSlice());
34
+ return vector;
35
+ }
36
+ return readVector();
37
+ }
38
+ /**
39
+ * Converts a sighash type to a human-readable string.
40
+ * @param sighashType - The sighash type value
41
+ * @returns Human-readable sighash type string
42
+ */
43
+ export function sighashTypeToString(sighashType) {
44
+ let text = sighashType & Transaction.SIGHASH_ANYONECANPAY ? 'SIGHASH_ANYONECANPAY | ' : '';
45
+ const sigMod = sighashType & 0x1f;
46
+ switch (sigMod) {
47
+ case Transaction.SIGHASH_ALL:
48
+ text += 'SIGHASH_ALL';
49
+ break;
50
+ case Transaction.SIGHASH_SINGLE:
51
+ text += 'SIGHASH_SINGLE';
52
+ break;
53
+ case Transaction.SIGHASH_NONE:
54
+ text += 'SIGHASH_NONE';
55
+ break;
56
+ }
57
+ return text;
58
+ }
59
+ /**
60
+ * Compresses an uncompressed public key to compressed form.
61
+ * @param pubkey - The public key (33 or 65 bytes)
62
+ * @returns Compressed public key (33 bytes)
63
+ */
64
+ export function compressPubkey(pubkey) {
65
+ if (pubkey.length === 65) {
66
+ const parity = pubkey[64] & 1;
67
+ const newKey = new Uint8Array(pubkey.subarray(0, 33));
68
+ newKey[0] = 2 | parity;
69
+ return newKey;
70
+ }
71
+ return new Uint8Array(pubkey);
72
+ }
73
+ /**
74
+ * Checks if a buffer looks like a public key.
75
+ * @param buf - The buffer to check
76
+ * @returns True if the buffer is a valid compressed public key format
77
+ */
78
+ export function isPubkeyLike(buf) {
79
+ return buf.length === 33 && bscript.isCanonicalPubKey(buf);
80
+ }
81
+ /**
82
+ * Checks if a buffer looks like a signature.
83
+ * @param buf - The buffer to check
84
+ * @returns True if the buffer is a valid canonical signature format
85
+ */
86
+ export function isSigLike(buf) {
87
+ return bscript.isCanonicalScriptSignature(buf);
88
+ }
89
+ /**
90
+ * Classifies a script into a known script type.
91
+ * @param script - The script to classify
92
+ * @returns The script type
93
+ */
94
+ export function classifyScript(script) {
95
+ if (isP2WPKH(script))
96
+ return 'witnesspubkeyhash';
97
+ if (isP2PKH(script))
98
+ return 'pubkeyhash';
99
+ if (isP2MS(script))
100
+ return 'multisig';
101
+ if (isP2PK(script))
102
+ return 'pubkey';
103
+ return 'nonstandard';
104
+ }
105
+ /**
106
+ * Creates an array of numbers from 0 to n-1.
107
+ * @param n - The length of the array
108
+ * @returns Array of numbers [0, 1, 2, ..., n-1]
109
+ */
110
+ export function range(n) {
111
+ return [...Array(n).keys()];
112
+ }
113
+ /**
114
+ * Validates that a script is not P2WPKH or P2SH (invalid for P2WSH).
115
+ * @param script - The script to check
116
+ * @throws {Error} If the script is P2WPKH or P2SH
117
+ */
118
+ export function checkInvalidP2WSH(script) {
119
+ if (isP2WPKH(script) || isP2SHScript(script)) {
120
+ throw new Error('P2WPKH or P2SH can not be contained within P2WSH');
121
+ }
122
+ }
123
+ /**
124
+ * Extracts the meaningful script from a potentially wrapped script.
125
+ * Handles P2SH, P2WSH, and P2SH-P2WSH wrapping.
126
+ * @param script - The script to analyze
127
+ * @param index - The input/output index (for error messages)
128
+ * @param ioType - Whether this is an input or output
129
+ * @param redeemScript - Optional redeem script for P2SH
130
+ * @param witnessScript - Optional witness script for P2WSH
131
+ * @returns The meaningful script and its type
132
+ */
133
+ export function getMeaningfulScript(script, index, ioType, redeemScript, witnessScript) {
134
+ const isP2SH = isP2SHScript(script);
135
+ const isP2SHP2WSH = isP2SH && redeemScript && isP2WSHScript(redeemScript);
136
+ const isP2WSH = isP2WSHScript(script);
137
+ if (isP2SH && redeemScript === undefined)
138
+ throw new Error('scriptPubkey is P2SH but redeemScript missing');
139
+ let meaningfulScript;
140
+ if (isP2SHP2WSH) {
141
+ if (!witnessScript)
142
+ throw new Error('scriptPubkey or redeemScript is P2WSH but witnessScript missing');
143
+ if (!redeemScript)
144
+ throw new Error('P2SH-P2WSH requires redeemScript');
145
+ meaningfulScript = witnessScript;
146
+ checkRedeemScript(index, script, redeemScript, ioType);
147
+ checkWitnessScript(index, redeemScript, witnessScript, ioType);
148
+ checkInvalidP2WSH(meaningfulScript);
149
+ }
150
+ else if (isP2WSH) {
151
+ if (!witnessScript)
152
+ throw new Error('scriptPubkey or redeemScript is P2WSH but witnessScript missing');
153
+ meaningfulScript = witnessScript;
154
+ checkWitnessScript(index, script, witnessScript, ioType);
155
+ checkInvalidP2WSH(meaningfulScript);
156
+ }
157
+ else if (isP2SH) {
158
+ if (!redeemScript)
159
+ throw new Error('P2SH requires redeemScript');
160
+ meaningfulScript = redeemScript;
161
+ checkRedeemScript(index, script, redeemScript, ioType);
162
+ }
163
+ else {
164
+ meaningfulScript = script;
165
+ }
166
+ return {
167
+ meaningfulScript,
168
+ type: isP2SHP2WSH ? 'p2sh-p2wsh' : isP2SH ? 'p2sh' : isP2WSH ? 'p2wsh' : 'raw',
169
+ };
170
+ }
171
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/psbt/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * PSBT validation utilities
3
+ * @packageDocumentation
4
+ */
5
+ import type { PsbtInput } from 'bip174';
6
+ import type { Payment, PaymentOpts } from '../payments/index.js';
7
+ import type { Transaction } from '../transaction.js';
8
+ import type { PsbtCache } from './types.js';
9
+ import type { PublicKey, Script } from '../types.js';
10
+ /**
11
+ * Validates that a number is a valid 32-bit unsigned integer.
12
+ * @param num - The number to validate
13
+ * @throws {Error} If the number is not a valid 32-bit integer
14
+ */
15
+ export declare function check32Bit(num: number): void;
16
+ /**
17
+ * Checks if the cache is in a valid state for export.
18
+ * @param cache - The PSBT cache to check
19
+ * @throws {Error} If the cache is not BIP174 compliant
20
+ */
21
+ export declare function checkCache(cache: PsbtCache): void;
22
+ /**
23
+ * Checks if a PSBT input has been finalized.
24
+ * @param input - The PSBT input to check
25
+ * @returns True if the input has finalScriptSig or finalScriptWitness
26
+ */
27
+ export declare function isFinalized(input: PsbtInput): boolean;
28
+ /**
29
+ * Validates that a transaction has empty scriptSigs and witnesses.
30
+ * @param tx - The transaction to check
31
+ * @throws {Error} If any input has non-empty scripts
32
+ */
33
+ export declare function checkTxEmpty(tx: Transaction): void;
34
+ /**
35
+ * Checks and caches a transaction input to detect duplicates.
36
+ * @param cache - The PSBT cache
37
+ * @param input - The input to check
38
+ * @throws {Error} If a duplicate input is detected
39
+ */
40
+ export declare function checkTxInputCache(cache: PsbtCache, input: {
41
+ hash: Uint8Array;
42
+ index: number;
43
+ }): void;
44
+ /**
45
+ * Checks all transaction inputs for duplicates.
46
+ * @param tx - The transaction to check
47
+ * @param cache - The PSBT cache
48
+ * @throws {Error} If duplicate inputs are detected
49
+ */
50
+ export declare function checkTxForDupeIns(tx: Transaction, cache: PsbtCache): void;
51
+ /**
52
+ * Checks if any inputs have partial signatures that would prevent modification.
53
+ * @param inputs - The PSBT inputs to check
54
+ * @param action - The action being attempted (for error message)
55
+ * @param hasSignaturesCache - Optional cached flag (true = definitely has sigs, false = check needed)
56
+ * @throws {Error} If signatures exist and prevent modification
57
+ */
58
+ export declare function checkInputsForPartialSig(inputs: PsbtInput[], action: string, hasSignaturesCache?: boolean): void;
59
+ /**
60
+ * Validates that partial signature sighash types match the input's sighash type.
61
+ * @param input - The PSBT input to check
62
+ * @throws {Error} If sighash types don't match
63
+ */
64
+ export declare function checkPartialSigSighashes(input: PsbtInput): void;
65
+ /**
66
+ * Validates that a pubkey exists in a script.
67
+ * @param pubkey - The pubkey to find
68
+ * @param script - The script to search
69
+ * @param action - The action being attempted (for error message)
70
+ * @throws {Error} If the pubkey is not found in the script
71
+ */
72
+ export declare function checkScriptForPubkey(pubkey: PublicKey, script: Script, action: string): void;
73
+ /**
74
+ * Creates a script checker function for validating redeem/witness scripts.
75
+ * @param payment - The payment function to use (p2sh or p2wsh)
76
+ * @param paymentScriptName - Name for error messages
77
+ * @returns A function that validates scripts match
78
+ */
79
+ export declare function scriptCheckerFactory(payment: (a: Omit<Payment, 'name'>, opts?: PaymentOpts) => Payment, paymentScriptName: string): (idx: number, scriptPubKey: Script, redeemScript: Script, ioType: 'input' | 'output') => void;
80
+ /**
81
+ * Validates that a redeem script matches the scriptPubKey.
82
+ */
83
+ export declare const checkRedeemScript: (idx: number, scriptPubKey: Script, redeemScript: Script, ioType: "input" | "output") => void;
84
+ /**
85
+ * Validates that a witness script matches the scriptPubKey.
86
+ */
87
+ export declare const checkWitnessScript: (idx: number, scriptPubKey: Script, redeemScript: Script, ioType: "input" | "output") => void;
88
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/psbt/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,KAAK,EAAe,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAI9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI5C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAIjD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAErD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,CAWlD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3C,IAAI,CAKN;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAIzE;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,SAAS,EAAE,EACnB,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,OAAO,GAC7B,IAAI,CAaN;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAS/D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM5F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,EAClE,iBAAiB,EAAE,MAAM,GAC1B,CACC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,GAAG,QAAQ,KACzB,IAAI,CAiBR;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,QA1BrB,MAAM,gBACG,MAAM,gBACN,MAAM,UACZ,OAAO,GAAG,QAAQ,KACzB,IAsBgF,CAAC;AAEtF;;GAEG;AACH,eAAO,MAAM,kBAAkB,QA/BtB,MAAM,gBACG,MAAM,gBACN,MAAM,UACZ,OAAO,GAAG,QAAQ,KACzB,IA2BmF,CAAC"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * PSBT validation utilities
3
+ * @packageDocumentation
4
+ */
5
+ import { reverse, equals, toHex } from '../io/index.js';
6
+ import * as payments from '../payments/index.js';
7
+ import { checkTaprootInputForSigs, isTaprootInput } from './bip371.js';
8
+ import { checkInputForSig, pubkeyInScript } from './psbtutils.js';
9
+ import * as bscript from '../script.js';
10
+ /**
11
+ * Validates that a number is a valid 32-bit unsigned integer.
12
+ * @param num - The number to validate
13
+ * @throws {Error} If the number is not a valid 32-bit integer
14
+ */
15
+ export function check32Bit(num) {
16
+ if (typeof num !== 'number' || num !== Math.floor(num) || num > 0xffffffff || num < 0) {
17
+ throw new Error('Invalid 32 bit integer');
18
+ }
19
+ }
20
+ /**
21
+ * Checks if the cache is in a valid state for export.
22
+ * @param cache - The PSBT cache to check
23
+ * @throws {Error} If the cache is not BIP174 compliant
24
+ */
25
+ export function checkCache(cache) {
26
+ if (cache.unsafeSignNonSegwit) {
27
+ throw new Error('Not BIP174 compliant, can not export');
28
+ }
29
+ }
30
+ /**
31
+ * Checks if a PSBT input has been finalized.
32
+ * @param input - The PSBT input to check
33
+ * @returns True if the input has finalScriptSig or finalScriptWitness
34
+ */
35
+ export function isFinalized(input) {
36
+ return !!input.finalScriptSig || !!input.finalScriptWitness;
37
+ }
38
+ /**
39
+ * Validates that a transaction has empty scriptSigs and witnesses.
40
+ * @param tx - The transaction to check
41
+ * @throws {Error} If any input has non-empty scripts
42
+ */
43
+ export function checkTxEmpty(tx) {
44
+ const isEmpty = tx.ins.every((input) => input.script &&
45
+ input.script.length === 0 &&
46
+ input.witness &&
47
+ input.witness.length === 0);
48
+ if (!isEmpty) {
49
+ throw new Error('Format Error: Transaction ScriptSigs are not empty');
50
+ }
51
+ }
52
+ /**
53
+ * Checks and caches a transaction input to detect duplicates.
54
+ * @param cache - The PSBT cache
55
+ * @param input - The input to check
56
+ * @throws {Error} If a duplicate input is detected
57
+ */
58
+ export function checkTxInputCache(cache, input) {
59
+ const reversed = reverse(new Uint8Array(input.hash));
60
+ const key = `${toHex(reversed)}:${input.index}`;
61
+ if (cache.txInCache[key])
62
+ throw new Error('Duplicate input detected.');
63
+ cache.txInCache[key] = 1;
64
+ }
65
+ /**
66
+ * Checks all transaction inputs for duplicates.
67
+ * @param tx - The transaction to check
68
+ * @param cache - The PSBT cache
69
+ * @throws {Error} If duplicate inputs are detected
70
+ */
71
+ export function checkTxForDupeIns(tx, cache) {
72
+ tx.ins.forEach((input) => {
73
+ checkTxInputCache(cache, input);
74
+ });
75
+ }
76
+ /**
77
+ * Checks if any inputs have partial signatures that would prevent modification.
78
+ * @param inputs - The PSBT inputs to check
79
+ * @param action - The action being attempted (for error message)
80
+ * @param hasSignaturesCache - Optional cached flag (true = definitely has sigs, false = check needed)
81
+ * @throws {Error} If signatures exist and prevent modification
82
+ */
83
+ export function checkInputsForPartialSig(inputs, action, hasSignaturesCache) {
84
+ // Fast path: if cache says no signatures, skip entirely (O(1))
85
+ if (hasSignaturesCache === false) {
86
+ return;
87
+ }
88
+ // Only do full validation if signatures might exist
89
+ inputs.forEach((input) => {
90
+ const throws = isTaprootInput(input)
91
+ ? checkTaprootInputForSigs(input, action)
92
+ : checkInputForSig(input, action);
93
+ if (throws)
94
+ throw new Error('Can not modify transaction, signatures exist.');
95
+ });
96
+ }
97
+ /**
98
+ * Validates that partial signature sighash types match the input's sighash type.
99
+ * @param input - The PSBT input to check
100
+ * @throws {Error} If sighash types don't match
101
+ */
102
+ export function checkPartialSigSighashes(input) {
103
+ if (!input.sighashType || !input.partialSig)
104
+ return;
105
+ const { partialSig, sighashType } = input;
106
+ partialSig.forEach((pSig) => {
107
+ const { hashType } = bscript.signature.decode(pSig.signature);
108
+ if (sighashType !== hashType) {
109
+ throw new Error('Signature sighash does not match input sighash type');
110
+ }
111
+ });
112
+ }
113
+ /**
114
+ * Validates that a pubkey exists in a script.
115
+ * @param pubkey - The pubkey to find
116
+ * @param script - The script to search
117
+ * @param action - The action being attempted (for error message)
118
+ * @throws {Error} If the pubkey is not found in the script
119
+ */
120
+ export function checkScriptForPubkey(pubkey, script, action) {
121
+ if (!pubkeyInScript(pubkey, script)) {
122
+ throw new Error(`Can not ${action} for this input with the key ${toHex(pubkey)}`);
123
+ }
124
+ }
125
+ /**
126
+ * Creates a script checker function for validating redeem/witness scripts.
127
+ * @param payment - The payment function to use (p2sh or p2wsh)
128
+ * @param paymentScriptName - Name for error messages
129
+ * @returns A function that validates scripts match
130
+ */
131
+ export function scriptCheckerFactory(payment, paymentScriptName) {
132
+ return (inputIndex, scriptPubKey, redeemScript, ioType) => {
133
+ const redeemScriptOutput = payment({
134
+ redeem: { output: redeemScript },
135
+ }).output;
136
+ if (!equals(scriptPubKey, redeemScriptOutput)) {
137
+ throw new Error(`${paymentScriptName} for ${ioType} #${inputIndex} doesn't match the scriptPubKey in the prevout`);
138
+ }
139
+ };
140
+ }
141
+ /**
142
+ * Validates that a redeem script matches the scriptPubKey.
143
+ */
144
+ export const checkRedeemScript = scriptCheckerFactory(payments.p2sh, 'Redeem script');
145
+ /**
146
+ * Validates that a witness script matches the scriptPubKey.
147
+ */
148
+ export const checkWitnessScript = scriptCheckerFactory(payments.p2wsh, 'Witness script');
149
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/psbt/validation.ts"],"names":[],"mappings":"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"}