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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. package/AUDIT/README.md +9 -0
  2. package/HOW_TO_WRITE_GOOD_CODE.md +2436 -0
  3. package/SECURITY.md +27 -0
  4. package/benchmark/psbt-2000-inputs.bench.ts +178 -0
  5. package/benchmark/signing.bench.ts +147 -0
  6. package/browser/address.d.ts +56 -9
  7. package/browser/address.d.ts.map +1 -0
  8. package/browser/bech32utils.d.ts +9 -1
  9. package/browser/bech32utils.d.ts.map +1 -0
  10. package/browser/bip66.d.ts +11 -6
  11. package/browser/bip66.d.ts.map +1 -0
  12. package/browser/block.d.ts +117 -11
  13. package/browser/block.d.ts.map +1 -0
  14. package/browser/branded.d.ts +20 -0
  15. package/browser/branded.d.ts.map +1 -0
  16. package/browser/crypto/crypto.d.ts +1 -0
  17. package/browser/crypto/crypto.d.ts.map +1 -0
  18. package/browser/crypto.d.ts +46 -7
  19. package/browser/crypto.d.ts.map +1 -0
  20. package/browser/ecc/context.d.ts +129 -0
  21. package/browser/ecc/context.d.ts.map +1 -0
  22. package/browser/ecc/index.d.ts +11 -0
  23. package/browser/ecc/index.d.ts.map +1 -0
  24. package/browser/ecc/types.d.ts +128 -0
  25. package/browser/ecc/types.d.ts.map +1 -0
  26. package/browser/ecpair.d.ts +99 -0
  27. package/browser/errors.d.ts +124 -0
  28. package/browser/errors.d.ts.map +1 -0
  29. package/browser/index.d.ts +32 -5
  30. package/browser/index.d.ts.map +1 -0
  31. package/browser/index.js +12482 -101
  32. package/browser/io/BinaryReader.d.ts +276 -0
  33. package/browser/io/BinaryReader.d.ts.map +1 -0
  34. package/browser/io/BinaryWriter.d.ts +391 -0
  35. package/browser/io/BinaryWriter.d.ts.map +1 -0
  36. package/browser/io/MemoryPool.d.ts +220 -0
  37. package/browser/io/MemoryPool.d.ts.map +1 -0
  38. package/browser/io/base64.d.ts +13 -0
  39. package/browser/io/base64.d.ts.map +1 -0
  40. package/browser/io/hex.d.ts +67 -0
  41. package/browser/io/hex.d.ts.map +1 -0
  42. package/browser/io/index.d.ts +17 -0
  43. package/browser/io/index.d.ts.map +1 -0
  44. package/browser/io/utils.d.ts +199 -0
  45. package/browser/io/utils.d.ts.map +1 -0
  46. package/browser/merkle.d.ts +10 -1
  47. package/browser/merkle.d.ts.map +1 -0
  48. package/browser/networks.d.ts +70 -9
  49. package/browser/networks.d.ts.map +1 -0
  50. package/browser/opcodes.d.ts +1 -0
  51. package/browser/opcodes.d.ts.map +1 -0
  52. package/browser/payments/bip341.d.ts +35 -9
  53. package/browser/payments/bip341.d.ts.map +1 -0
  54. package/browser/payments/embed.d.ts +112 -1
  55. package/browser/payments/embed.d.ts.map +1 -0
  56. package/browser/payments/index.d.ts +17 -10
  57. package/browser/payments/index.d.ts.map +1 -0
  58. package/browser/payments/p2ms.d.ts +150 -0
  59. package/browser/payments/p2ms.d.ts.map +1 -0
  60. package/browser/payments/p2op.d.ts +150 -24
  61. package/browser/payments/p2op.d.ts.map +1 -0
  62. package/browser/payments/p2pk.d.ts +154 -1
  63. package/browser/payments/p2pk.d.ts.map +1 -0
  64. package/browser/payments/p2pkh.d.ts +176 -1
  65. package/browser/payments/p2pkh.d.ts.map +1 -0
  66. package/browser/payments/p2sh.d.ts +150 -1
  67. package/browser/payments/p2sh.d.ts.map +1 -0
  68. package/browser/payments/p2tr.d.ts +185 -1
  69. package/browser/payments/p2tr.d.ts.map +1 -0
  70. package/browser/payments/p2wpkh.d.ts +161 -1
  71. package/browser/payments/p2wpkh.d.ts.map +1 -0
  72. package/browser/payments/p2wsh.d.ts +146 -1
  73. package/browser/payments/p2wsh.d.ts.map +1 -0
  74. package/browser/payments/types.d.ts +94 -64
  75. package/browser/payments/types.d.ts.map +1 -0
  76. package/browser/psbt/bip371.d.ts +34 -8
  77. package/browser/psbt/bip371.d.ts.map +1 -0
  78. package/browser/psbt/psbtutils.d.ts +56 -16
  79. package/browser/psbt/psbtutils.d.ts.map +1 -0
  80. package/browser/psbt/types.d.ts +245 -0
  81. package/browser/psbt/types.d.ts.map +1 -0
  82. package/browser/psbt/utils.d.ts +64 -0
  83. package/browser/psbt/utils.d.ts.map +1 -0
  84. package/browser/psbt/validation.d.ts +84 -0
  85. package/browser/psbt/validation.d.ts.map +1 -0
  86. package/browser/psbt.d.ts +82 -118
  87. package/browser/psbt.d.ts.map +1 -0
  88. package/browser/pubkey.d.ts +27 -6
  89. package/browser/pubkey.d.ts.map +1 -0
  90. package/browser/push_data.d.ts +24 -2
  91. package/browser/push_data.d.ts.map +1 -0
  92. package/browser/script.d.ts +33 -8
  93. package/browser/script.d.ts.map +1 -0
  94. package/browser/script_number.d.ts +17 -0
  95. package/browser/script_number.d.ts.map +1 -0
  96. package/browser/script_signature.d.ts +23 -5
  97. package/browser/script_signature.d.ts.map +1 -0
  98. package/browser/transaction.d.ts +160 -18
  99. package/browser/transaction.d.ts.map +1 -0
  100. package/browser/types.d.ts +36 -38
  101. package/browser/types.d.ts.map +1 -0
  102. package/browser/workers/WorkerSigningPool.d.ts +143 -0
  103. package/browser/workers/WorkerSigningPool.d.ts.map +1 -0
  104. package/browser/workers/WorkerSigningPool.node.d.ts +116 -0
  105. package/browser/workers/WorkerSigningPool.node.d.ts.map +1 -0
  106. package/browser/workers/ecc-bundle.d.ts +25 -0
  107. package/browser/workers/ecc-bundle.d.ts.map +1 -0
  108. package/browser/workers/index.d.ts +91 -0
  109. package/browser/workers/index.d.ts.map +1 -0
  110. package/browser/workers/psbt-parallel.d.ts +88 -0
  111. package/browser/workers/psbt-parallel.d.ts.map +1 -0
  112. package/browser/workers/signing-worker.d.ts +37 -0
  113. package/browser/workers/signing-worker.d.ts.map +1 -0
  114. package/browser/workers/types.d.ts +365 -0
  115. package/browser/workers/types.d.ts.map +1 -0
  116. package/build/address.d.ts +57 -10
  117. package/build/address.d.ts.map +1 -0
  118. package/build/address.js +80 -24
  119. package/build/address.js.map +1 -0
  120. package/build/bech32utils.d.ts +9 -1
  121. package/build/bech32utils.d.ts.map +1 -0
  122. package/build/bech32utils.js +10 -2
  123. package/build/bech32utils.js.map +1 -0
  124. package/build/bip66.d.ts +11 -6
  125. package/build/bip66.d.ts.map +1 -0
  126. package/build/bip66.js +32 -3
  127. package/build/bip66.js.map +1 -0
  128. package/build/block.d.ts +117 -11
  129. package/build/block.d.ts.map +1 -0
  130. package/build/block.js +204 -72
  131. package/build/block.js.map +1 -0
  132. package/build/branded.d.ts +20 -0
  133. package/build/branded.d.ts.map +1 -0
  134. package/build/branded.js +7 -0
  135. package/build/branded.js.map +1 -0
  136. package/build/crypto/crypto.d.ts +1 -0
  137. package/build/crypto/crypto.d.ts.map +1 -0
  138. package/build/crypto/crypto.js +1 -0
  139. package/build/crypto/crypto.js.map +1 -0
  140. package/build/crypto.d.ts +46 -7
  141. package/build/crypto.d.ts.map +1 -0
  142. package/build/crypto.js +65 -20
  143. package/build/crypto.js.map +1 -0
  144. package/build/ecc/context.d.ts +135 -0
  145. package/build/ecc/context.d.ts.map +1 -0
  146. package/build/ecc/context.js +232 -0
  147. package/build/ecc/context.js.map +1 -0
  148. package/build/ecc/index.d.ts +11 -0
  149. package/build/ecc/index.d.ts.map +1 -0
  150. package/build/ecc/index.js +11 -0
  151. package/build/ecc/index.js.map +1 -0
  152. package/build/ecc/types.d.ts +134 -0
  153. package/build/ecc/types.d.ts.map +1 -0
  154. package/build/ecc/types.js +8 -0
  155. package/build/ecc/types.js.map +1 -0
  156. package/build/errors.d.ts +124 -0
  157. package/build/errors.d.ts.map +1 -0
  158. package/build/errors.js +155 -0
  159. package/build/errors.js.map +1 -0
  160. package/build/index.d.ts +32 -5
  161. package/build/index.d.ts.map +1 -0
  162. package/build/index.js +26 -3
  163. package/build/index.js.map +1 -0
  164. package/build/io/BinaryReader.d.ts +276 -0
  165. package/build/io/BinaryReader.d.ts.map +1 -0
  166. package/build/io/BinaryReader.js +425 -0
  167. package/build/io/BinaryReader.js.map +1 -0
  168. package/build/io/BinaryWriter.d.ts +391 -0
  169. package/build/io/BinaryWriter.d.ts.map +1 -0
  170. package/build/io/BinaryWriter.js +611 -0
  171. package/build/io/BinaryWriter.js.map +1 -0
  172. package/build/io/MemoryPool.d.ts +220 -0
  173. package/build/io/MemoryPool.d.ts.map +1 -0
  174. package/build/io/MemoryPool.js +309 -0
  175. package/build/io/MemoryPool.js.map +1 -0
  176. package/build/io/base64.d.ts +13 -0
  177. package/build/io/base64.d.ts.map +1 -0
  178. package/build/io/base64.js +20 -0
  179. package/build/io/base64.js.map +1 -0
  180. package/build/io/hex.d.ts +67 -0
  181. package/build/io/hex.d.ts.map +1 -0
  182. package/build/io/hex.js +138 -0
  183. package/build/io/hex.js.map +1 -0
  184. package/build/io/index.d.ts +17 -0
  185. package/build/io/index.d.ts.map +1 -0
  186. package/build/io/index.js +23 -0
  187. package/build/io/index.js.map +1 -0
  188. package/build/io/utils.d.ts +199 -0
  189. package/build/io/utils.d.ts.map +1 -0
  190. package/build/io/utils.js +271 -0
  191. package/build/io/utils.js.map +1 -0
  192. package/build/merkle.d.ts +10 -1
  193. package/build/merkle.d.ts.map +1 -0
  194. package/build/merkle.js +12 -1
  195. package/build/merkle.js.map +1 -0
  196. package/build/networks.d.ts +70 -9
  197. package/build/networks.d.ts.map +1 -0
  198. package/build/networks.js +90 -4
  199. package/build/networks.js.map +1 -0
  200. package/build/opcodes.d.ts +1 -0
  201. package/build/opcodes.d.ts.map +1 -0
  202. package/build/opcodes.js +1 -0
  203. package/build/opcodes.js.map +1 -0
  204. package/build/payments/bip341.d.ts +36 -9
  205. package/build/payments/bip341.d.ts.map +1 -0
  206. package/build/payments/bip341.js +35 -15
  207. package/build/payments/bip341.js.map +1 -0
  208. package/build/payments/embed.d.ts +120 -1
  209. package/build/payments/embed.d.ts.map +1 -0
  210. package/build/payments/embed.js +215 -34
  211. package/build/payments/embed.js.map +1 -0
  212. package/build/payments/index.d.ts +17 -10
  213. package/build/payments/index.d.ts.map +1 -0
  214. package/build/payments/index.js +20 -10
  215. package/build/payments/index.js.map +1 -0
  216. package/build/payments/p2ms.d.ts +159 -1
  217. package/build/payments/p2ms.d.ts.map +1 -0
  218. package/build/payments/p2ms.js +427 -108
  219. package/build/payments/p2ms.js.map +1 -0
  220. package/build/payments/p2op.d.ts +158 -24
  221. package/build/payments/p2op.d.ts.map +1 -0
  222. package/build/payments/p2op.js +379 -93
  223. package/build/payments/p2op.js.map +1 -0
  224. package/build/payments/p2pk.d.ts +162 -1
  225. package/build/payments/p2pk.d.ts.map +1 -0
  226. package/build/payments/p2pk.js +327 -58
  227. package/build/payments/p2pk.js.map +1 -0
  228. package/build/payments/p2pkh.d.ts +185 -1
  229. package/build/payments/p2pkh.d.ts.map +1 -0
  230. package/build/payments/p2pkh.js +467 -114
  231. package/build/payments/p2pkh.js.map +1 -0
  232. package/build/payments/p2sh.d.ts +159 -1
  233. package/build/payments/p2sh.d.ts.map +1 -0
  234. package/build/payments/p2sh.js +500 -152
  235. package/build/payments/p2sh.js.map +1 -0
  236. package/build/payments/p2tr.d.ts +193 -1
  237. package/build/payments/p2tr.d.ts.map +1 -0
  238. package/build/payments/p2tr.js +592 -174
  239. package/build/payments/p2tr.js.map +1 -0
  240. package/build/payments/p2wpkh.d.ts +170 -1
  241. package/build/payments/p2wpkh.d.ts.map +1 -0
  242. package/build/payments/p2wpkh.js +429 -104
  243. package/build/payments/p2wpkh.js.map +1 -0
  244. package/build/payments/p2wsh.d.ts +155 -1
  245. package/build/payments/p2wsh.d.ts.map +1 -0
  246. package/build/payments/p2wsh.js +466 -144
  247. package/build/payments/p2wsh.js.map +1 -0
  248. package/build/payments/types.d.ts +98 -64
  249. package/build/payments/types.d.ts.map +1 -0
  250. package/build/payments/types.js +17 -13
  251. package/build/payments/types.js.map +1 -0
  252. package/build/psbt/bip371.d.ts +35 -9
  253. package/build/psbt/bip371.d.ts.map +1 -0
  254. package/build/psbt/bip371.js +113 -28
  255. package/build/psbt/bip371.js.map +1 -0
  256. package/build/psbt/psbtutils.d.ts +56 -16
  257. package/build/psbt/psbtutils.d.ts.map +1 -0
  258. package/build/psbt/psbtutils.js +71 -16
  259. package/build/psbt/psbtutils.js.map +1 -0
  260. package/build/psbt/types.d.ts +249 -0
  261. package/build/psbt/types.d.ts.map +1 -0
  262. package/build/psbt/types.js +6 -0
  263. package/build/psbt/types.js.map +1 -0
  264. package/build/psbt/utils.d.ts +68 -0
  265. package/build/psbt/utils.d.ts.map +1 -0
  266. package/build/psbt/utils.js +171 -0
  267. package/build/psbt/utils.js.map +1 -0
  268. package/build/psbt/validation.d.ts +88 -0
  269. package/build/psbt/validation.d.ts.map +1 -0
  270. package/build/psbt/validation.js +149 -0
  271. package/build/psbt/validation.js.map +1 -0
  272. package/build/psbt.d.ts +84 -120
  273. package/build/psbt.d.ts.map +1 -0
  274. package/build/psbt.js +411 -412
  275. package/build/psbt.js.map +1 -0
  276. package/build/pubkey.d.ts +27 -6
  277. package/build/pubkey.d.ts.map +1 -0
  278. package/build/pubkey.js +37 -13
  279. package/build/pubkey.js.map +1 -0
  280. package/build/push_data.d.ts +24 -2
  281. package/build/push_data.d.ts.map +1 -0
  282. package/build/push_data.js +44 -12
  283. package/build/push_data.js.map +1 -0
  284. package/build/script.d.ts +33 -8
  285. package/build/script.d.ts.map +1 -0
  286. package/build/script.js +100 -36
  287. package/build/script.js.map +1 -0
  288. package/build/script_number.d.ts +17 -0
  289. package/build/script_number.d.ts.map +1 -0
  290. package/build/script_number.js +19 -0
  291. package/build/script_number.js.map +1 -0
  292. package/build/script_signature.d.ts +23 -5
  293. package/build/script_signature.d.ts.map +1 -0
  294. package/build/script_signature.js +48 -15
  295. package/build/script_signature.js.map +1 -0
  296. package/build/transaction.d.ts +160 -18
  297. package/build/transaction.d.ts.map +1 -0
  298. package/build/transaction.js +443 -176
  299. package/build/transaction.js.map +1 -0
  300. package/build/tsconfig.build.tsbuildinfo +1 -0
  301. package/build/types.d.ts +36 -38
  302. package/build/types.d.ts.map +1 -0
  303. package/build/types.js +175 -57
  304. package/build/types.js.map +1 -0
  305. package/build/workers/WorkerSigningPool.d.ts +174 -0
  306. package/build/workers/WorkerSigningPool.d.ts.map +1 -0
  307. package/build/workers/WorkerSigningPool.js +553 -0
  308. package/build/workers/WorkerSigningPool.js.map +1 -0
  309. package/build/workers/WorkerSigningPool.node.d.ts +124 -0
  310. package/build/workers/WorkerSigningPool.node.d.ts.map +1 -0
  311. package/build/workers/WorkerSigningPool.node.js +753 -0
  312. package/build/workers/WorkerSigningPool.node.js.map +1 -0
  313. package/build/workers/ecc-bundle.d.ts +25 -0
  314. package/build/workers/ecc-bundle.d.ts.map +1 -0
  315. package/build/workers/ecc-bundle.js +25 -0
  316. package/build/workers/ecc-bundle.js.map +1 -0
  317. package/build/workers/index.d.ts +91 -0
  318. package/build/workers/index.d.ts.map +1 -0
  319. package/build/workers/index.js +114 -0
  320. package/build/workers/index.js.map +1 -0
  321. package/build/workers/psbt-parallel.d.ts +117 -0
  322. package/build/workers/psbt-parallel.d.ts.map +1 -0
  323. package/build/workers/psbt-parallel.js +233 -0
  324. package/build/workers/psbt-parallel.js.map +1 -0
  325. package/build/workers/signing-worker.d.ts +37 -0
  326. package/build/workers/signing-worker.d.ts.map +1 -0
  327. package/build/workers/signing-worker.js +350 -0
  328. package/build/workers/signing-worker.js.map +1 -0
  329. package/build/workers/types.d.ts +365 -0
  330. package/build/workers/types.d.ts.map +1 -0
  331. package/build/workers/types.js +60 -0
  332. package/build/workers/types.js.map +1 -0
  333. package/package.json +83 -25
  334. package/scripts/bundle-ecc.ts +111 -0
  335. package/src/address.ts +81 -44
  336. package/src/bech32utils.ts +3 -3
  337. package/src/bip66.ts +34 -24
  338. package/src/block.ts +196 -84
  339. package/src/branded.ts +18 -0
  340. package/src/crypto.ts +64 -26
  341. package/src/ecc/context.ts +277 -0
  342. package/src/ecc/index.ts +14 -0
  343. package/src/ecc/types.ts +154 -0
  344. package/src/ecpair.d.ts +99 -0
  345. package/src/errors.ts +163 -0
  346. package/src/index.ts +113 -9
  347. package/src/io/BinaryReader.ts +461 -0
  348. package/src/io/BinaryWriter.ts +696 -0
  349. package/src/io/MemoryPool.ts +343 -0
  350. package/src/io/base64.ts +20 -0
  351. package/src/io/hex.ts +155 -0
  352. package/src/io/index.ts +41 -0
  353. package/src/io/utils.ts +283 -0
  354. package/src/merkle.ts +14 -9
  355. package/src/networks.ts +9 -9
  356. package/src/payments/bip341.ts +34 -33
  357. package/src/payments/embed.ts +244 -41
  358. package/src/payments/index.ts +12 -10
  359. package/src/payments/p2ms.ts +490 -118
  360. package/src/payments/p2op.ts +431 -133
  361. package/src/payments/p2pk.ts +370 -72
  362. package/src/payments/p2pkh.ts +524 -130
  363. package/src/payments/p2sh.ts +572 -172
  364. package/src/payments/p2tr.ts +686 -194
  365. package/src/payments/p2wpkh.ts +484 -107
  366. package/src/payments/p2wsh.ts +526 -164
  367. package/src/payments/types.ts +80 -66
  368. package/src/psbt/bip371.ts +68 -51
  369. package/src/psbt/psbtutils.ts +39 -40
  370. package/src/psbt/types.ts +331 -0
  371. package/src/psbt/utils.ts +188 -0
  372. package/src/psbt/validation.ts +192 -0
  373. package/src/psbt.ts +566 -809
  374. package/src/pubkey.ts +24 -25
  375. package/src/push_data.ts +18 -16
  376. package/src/script.ts +82 -64
  377. package/src/script_number.ts +6 -6
  378. package/src/script_signature.ts +33 -36
  379. package/src/transaction.ts +458 -238
  380. package/src/types.ts +231 -100
  381. package/src/workers/WorkerSigningPool.node.ts +887 -0
  382. package/src/workers/WorkerSigningPool.ts +670 -0
  383. package/src/workers/ecc-bundle.ts +26 -0
  384. package/src/workers/index.ts +165 -0
  385. package/src/workers/psbt-parallel.ts +332 -0
  386. package/src/workers/signing-worker.ts +353 -0
  387. package/src/workers/types.ts +413 -0
  388. package/test/address.spec.ts +9 -6
  389. package/test/bitcoin.core.spec.ts +16 -17
  390. package/test/block.spec.ts +8 -7
  391. package/test/bufferutils.spec.ts +228 -214
  392. package/test/crypto.spec.ts +19 -11
  393. package/test/fixtures/p2pk.json +0 -8
  394. package/test/fixtures/p2pkh.json +1 -1
  395. package/test/fixtures/p2sh.json +1 -1
  396. package/test/fixtures/script.json +1 -1
  397. package/test/fixtures/transaction.json +2 -2
  398. package/test/integration/_regtest.ts +25 -0
  399. package/test/integration/addresses.spec.ts +4 -3
  400. package/test/integration/bip32.spec.ts +2 -1
  401. package/test/integration/blocks.spec.ts +1 -1
  402. package/test/integration/cltv.spec.ts +18 -16
  403. package/test/integration/csv.spec.ts +37 -64
  404. package/test/integration/payments.spec.ts +5 -3
  405. package/test/integration/taproot.spec.ts +76 -83
  406. package/test/integration/transactions.spec.ts +38 -35
  407. package/test/payments.spec.ts +35 -13
  408. package/test/payments.utils.ts +17 -16
  409. package/test/psbt.spec.ts +111 -100
  410. package/test/script.spec.ts +11 -10
  411. package/test/script_signature.spec.ts +9 -11
  412. package/test/taproot-cache.spec.ts +694 -0
  413. package/test/transaction.spec.ts +32 -40
  414. package/test/types.spec.ts +74 -29
  415. package/test/workers-pool.spec.ts +963 -0
  416. package/test/workers-signing.spec.ts +635 -0
  417. package/test/workers.spec.ts +1390 -0
  418. package/tsconfig.base.json +34 -18
  419. package/tsconfig.browser.json +15 -0
  420. package/tsconfig.build.json +5 -0
  421. package/tsconfig.json +5 -14
  422. package/vite.config.browser.ts +3 -42
  423. package/vitest.config.integration.ts +11 -0
  424. package/browser/bufferutils.d.ts +0 -34
  425. package/browser/chunks/crypto-BhCpKpek.js +0 -2033
  426. package/browser/chunks/payments-yjA0Evsv.js +0 -1089
  427. package/browser/chunks/psbt-URK2hBFc.js +0 -4039
  428. package/browser/chunks/script-DyPItFEl.js +0 -318
  429. package/browser/chunks/transaction-C_UbhMGn.js +0 -432
  430. package/browser/chunks/utils-DNZi-T5W.js +0 -761
  431. package/browser/ecc_lib.d.ts +0 -3
  432. package/browser/hooks/AdvancedSignatureManager.d.ts +0 -16
  433. package/browser/hooks/HookedSigner.d.ts +0 -4
  434. package/browser/hooks/SignatureManager.d.ts +0 -13
  435. package/browser/payments/lazy.d.ts +0 -2
  436. package/browser/typeforce.d.ts +0 -38
  437. package/build/bufferutils.d.ts +0 -34
  438. package/build/bufferutils.js +0 -141
  439. package/build/ecc_lib.d.ts +0 -3
  440. package/build/ecc_lib.js +0 -61
  441. package/build/hooks/AdvancedSignatureManager.d.ts +0 -16
  442. package/build/hooks/AdvancedSignatureManager.js +0 -52
  443. package/build/hooks/HookedSigner.d.ts +0 -4
  444. package/build/hooks/HookedSigner.js +0 -64
  445. package/build/hooks/SignatureManager.d.ts +0 -13
  446. package/build/hooks/SignatureManager.js +0 -45
  447. package/build/payments/lazy.d.ts +0 -2
  448. package/build/payments/lazy.js +0 -28
  449. package/build/tsconfig.tsbuildinfo +0 -1
  450. package/src/bufferutils.ts +0 -188
  451. package/src/ecc_lib.ts +0 -94
  452. package/src/hooks/AdvancedSignatureManager.ts +0 -104
  453. package/src/hooks/HookedSigner.ts +0 -108
  454. package/src/hooks/SignatureManager.ts +0 -84
  455. package/src/payments/lazy.ts +0 -28
  456. package/src/typeforce.d.ts +0 -38
  457. package/tsconfig.webpack.json +0 -18
@@ -0,0 +1,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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"}