crypto-aio 0.0.3 → 0.1.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 (691) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +144 -14
  3. package/dist/adapters/avalanche/address.d.ts +15 -0
  4. package/dist/adapters/avalanche/address.js +74 -0
  5. package/dist/adapters/avalanche/address.js.map +1 -0
  6. package/dist/adapters/avalanche/api.d.ts +100 -0
  7. package/dist/adapters/avalanche/api.js +381 -0
  8. package/dist/adapters/avalanche/api.js.map +1 -0
  9. package/dist/adapters/avalanche/builder.d.ts +13 -0
  10. package/dist/adapters/avalanche/builder.js +336 -0
  11. package/dist/adapters/avalanche/builder.js.map +1 -0
  12. package/dist/adapters/avalanche/cb58.d.ts +7 -0
  13. package/dist/adapters/avalanche/cb58.js +49 -0
  14. package/dist/adapters/avalanche/cb58.js.map +1 -0
  15. package/dist/adapters/avalanche/chains.d.ts +21 -0
  16. package/dist/adapters/avalanche/chains.js +79 -0
  17. package/dist/adapters/avalanche/chains.js.map +1 -0
  18. package/dist/adapters/avalanche/codec.d.ts +94 -0
  19. package/dist/adapters/avalanche/codec.js +371 -0
  20. package/dist/adapters/avalanche/codec.js.map +1 -0
  21. package/dist/adapters/avalanche/context.d.ts +59 -0
  22. package/dist/adapters/avalanche/context.js +114 -0
  23. package/dist/adapters/avalanche/context.js.map +1 -0
  24. package/dist/adapters/avalanche/decode.d.ts +16 -0
  25. package/dist/adapters/avalanche/decode.js +101 -0
  26. package/dist/adapters/avalanche/decode.js.map +1 -0
  27. package/dist/adapters/avalanche/driver.d.ts +22 -0
  28. package/dist/adapters/avalanche/driver.js +81 -0
  29. package/dist/adapters/avalanche/driver.js.map +1 -0
  30. package/dist/adapters/avalanche/errors.d.ts +18 -0
  31. package/dist/adapters/avalanche/errors.js +61 -0
  32. package/dist/adapters/avalanche/errors.js.map +1 -0
  33. package/dist/adapters/avalanche/fees.d.ts +23 -0
  34. package/dist/adapters/avalanche/fees.js +105 -0
  35. package/dist/adapters/avalanche/fees.js.map +1 -0
  36. package/dist/adapters/avalanche/index.d.ts +19 -0
  37. package/dist/adapters/avalanche/index.js +8 -0
  38. package/dist/adapters/avalanche/index.js.map +1 -0
  39. package/dist/adapters/avalanche/network.d.ts +37 -0
  40. package/dist/adapters/avalanche/network.js +135 -0
  41. package/dist/adapters/avalanche/network.js.map +1 -0
  42. package/dist/adapters/avalanche/plugin.d.ts +21 -0
  43. package/dist/adapters/avalanche/plugin.js +46 -0
  44. package/dist/adapters/avalanche/plugin.js.map +1 -0
  45. package/dist/adapters/avalanche/presets.d.ts +6 -0
  46. package/dist/adapters/avalanche/presets.js +86 -0
  47. package/dist/adapters/avalanche/presets.js.map +1 -0
  48. package/dist/adapters/avalanche/proofs.d.ts +41 -0
  49. package/dist/adapters/avalanche/proofs.js +270 -0
  50. package/dist/adapters/avalanche/proofs.js.map +1 -0
  51. package/dist/adapters/avalanche/reader.d.ts +40 -0
  52. package/dist/adapters/avalanche/reader.js +231 -0
  53. package/dist/adapters/avalanche/reader.js.map +1 -0
  54. package/dist/adapters/avalanche/sdk.d.ts +182 -0
  55. package/dist/adapters/avalanche/sdk.js +21 -0
  56. package/dist/adapters/avalanche/sdk.js.map +1 -0
  57. package/dist/adapters/avalanche/types.d.ts +86 -0
  58. package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
  59. package/dist/adapters/avalanche/types.js.map +1 -0
  60. package/dist/adapters/evm/builder.d.ts +11 -0
  61. package/dist/adapters/evm/builder.js +326 -0
  62. package/dist/adapters/evm/builder.js.map +1 -0
  63. package/dist/adapters/evm/chains.d.ts +6 -0
  64. package/dist/adapters/evm/chains.js +203 -0
  65. package/dist/adapters/evm/chains.js.map +1 -0
  66. package/dist/adapters/evm/client.d.ts +84 -0
  67. package/dist/adapters/evm/client.js +335 -0
  68. package/dist/adapters/evm/client.js.map +1 -0
  69. package/dist/adapters/evm/decode.d.ts +35 -0
  70. package/dist/adapters/evm/decode.js +170 -0
  71. package/dist/adapters/evm/decode.js.map +1 -0
  72. package/dist/adapters/evm/driver.d.ts +8 -0
  73. package/dist/adapters/evm/driver.js +61 -0
  74. package/dist/adapters/evm/driver.js.map +1 -0
  75. package/dist/adapters/evm/errors.d.ts +20 -0
  76. package/dist/adapters/evm/errors.js +110 -0
  77. package/dist/adapters/evm/errors.js.map +1 -0
  78. package/dist/adapters/evm/ethers-client.d.ts +43 -0
  79. package/dist/adapters/evm/ethers-client.js +135 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +79 -0
  82. package/dist/adapters/evm/fees.js +234 -0
  83. package/dist/adapters/evm/fees.js.map +1 -0
  84. package/dist/adapters/evm/index.d.ts +20 -0
  85. package/dist/adapters/evm/index.js +11 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +60 -0
  88. package/dist/adapters/evm/network.js +131 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +36 -0
  91. package/dist/adapters/evm/plugin.js +102 -0
  92. package/dist/adapters/evm/plugin.js.map +1 -0
  93. package/dist/adapters/evm/presets.d.ts +2 -0
  94. package/dist/adapters/evm/presets.js +105 -0
  95. package/dist/adapters/evm/presets.js.map +1 -0
  96. package/dist/adapters/evm/proofs.d.ts +19 -0
  97. package/dist/adapters/evm/proofs.js +358 -0
  98. package/dist/adapters/evm/proofs.js.map +1 -0
  99. package/dist/adapters/evm/rawtx.d.ts +25 -0
  100. package/dist/adapters/evm/rawtx.js +176 -0
  101. package/dist/adapters/evm/rawtx.js.map +1 -0
  102. package/dist/adapters/evm/reader.d.ts +65 -0
  103. package/dist/adapters/evm/reader.js +292 -0
  104. package/dist/adapters/evm/reader.js.map +1 -0
  105. package/dist/adapters/evm/rpc.d.ts +39 -0
  106. package/dist/adapters/evm/rpc.js +152 -0
  107. package/dist/adapters/evm/rpc.js.map +1 -0
  108. package/dist/adapters/evm/tokens.d.ts +7 -0
  109. package/dist/adapters/evm/tokens.js +23 -0
  110. package/dist/adapters/evm/tokens.js.map +1 -0
  111. package/dist/adapters/evm/types.d.ts +255 -0
  112. package/dist/{type/account.js → adapters/evm/types.js} +1 -1
  113. package/dist/adapters/evm/types.js.map +1 -0
  114. package/dist/adapters/evm/web3-client.d.ts +23 -0
  115. package/dist/adapters/evm/web3-client.js +159 -0
  116. package/dist/adapters/evm/web3-client.js.map +1 -0
  117. package/dist/adapters/solana/builder.d.ts +18 -0
  118. package/dist/adapters/solana/builder.js +545 -0
  119. package/dist/adapters/solana/builder.js.map +1 -0
  120. package/dist/adapters/solana/chains.d.ts +13 -0
  121. package/dist/adapters/solana/chains.js +37 -0
  122. package/dist/adapters/solana/chains.js.map +1 -0
  123. package/dist/adapters/solana/decode.d.ts +111 -0
  124. package/dist/adapters/solana/decode.js +595 -0
  125. package/dist/adapters/solana/decode.js.map +1 -0
  126. package/dist/adapters/solana/driver.d.ts +15 -0
  127. package/dist/adapters/solana/driver.js +72 -0
  128. package/dist/adapters/solana/driver.js.map +1 -0
  129. package/dist/adapters/solana/errors.d.ts +36 -0
  130. package/dist/adapters/solana/errors.js +154 -0
  131. package/dist/adapters/solana/errors.js.map +1 -0
  132. package/dist/adapters/solana/fees.d.ts +68 -0
  133. package/dist/adapters/solana/fees.js +205 -0
  134. package/dist/adapters/solana/fees.js.map +1 -0
  135. package/dist/adapters/solana/heights.d.ts +47 -0
  136. package/dist/adapters/solana/heights.js +185 -0
  137. package/dist/adapters/solana/heights.js.map +1 -0
  138. package/dist/adapters/solana/history.d.ts +10 -0
  139. package/dist/adapters/solana/history.js +71 -0
  140. package/dist/adapters/solana/history.js.map +1 -0
  141. package/dist/adapters/solana/index.d.ts +16 -0
  142. package/dist/adapters/solana/index.js +9 -0
  143. package/dist/adapters/solana/index.js.map +1 -0
  144. package/dist/adapters/solana/keys.d.ts +13 -0
  145. package/dist/adapters/solana/keys.js +69 -0
  146. package/dist/adapters/solana/keys.js.map +1 -0
  147. package/dist/adapters/solana/network.d.ts +24 -0
  148. package/dist/adapters/solana/network.js +95 -0
  149. package/dist/adapters/solana/network.js.map +1 -0
  150. package/dist/adapters/solana/plugin.d.ts +18 -0
  151. package/dist/adapters/solana/plugin.js +41 -0
  152. package/dist/adapters/solana/plugin.js.map +1 -0
  153. package/dist/adapters/solana/presets.d.ts +2 -0
  154. package/dist/adapters/solana/presets.js +77 -0
  155. package/dist/adapters/solana/presets.js.map +1 -0
  156. package/dist/adapters/solana/programs.d.ts +44 -0
  157. package/dist/adapters/solana/programs.js +159 -0
  158. package/dist/adapters/solana/programs.js.map +1 -0
  159. package/dist/adapters/solana/proofs.d.ts +56 -0
  160. package/dist/adapters/solana/proofs.js +540 -0
  161. package/dist/adapters/solana/proofs.js.map +1 -0
  162. package/dist/adapters/solana/reader.d.ts +82 -0
  163. package/dist/adapters/solana/reader.js +326 -0
  164. package/dist/adapters/solana/reader.js.map +1 -0
  165. package/dist/adapters/solana/rpc.d.ts +102 -0
  166. package/dist/adapters/solana/rpc.js +301 -0
  167. package/dist/adapters/solana/rpc.js.map +1 -0
  168. package/dist/adapters/solana/tokens.d.ts +7 -0
  169. package/dist/adapters/solana/tokens.js +19 -0
  170. package/dist/adapters/solana/tokens.js.map +1 -0
  171. package/dist/adapters/solana/types.d.ts +121 -0
  172. package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
  173. package/dist/adapters/solana/types.js.map +1 -0
  174. package/dist/adapters/solana/web3.d.ts +5 -0
  175. package/dist/adapters/solana/web3.js +83 -0
  176. package/dist/adapters/solana/web3.js.map +1 -0
  177. package/dist/adapters/solana/wire.d.ts +62 -0
  178. package/dist/adapters/solana/wire.js +168 -0
  179. package/dist/adapters/solana/wire.js.map +1 -0
  180. package/dist/adapters/ton/address.d.ts +43 -0
  181. package/dist/adapters/ton/address.js +168 -0
  182. package/dist/adapters/ton/address.js.map +1 -0
  183. package/dist/adapters/ton/api.d.ts +344 -0
  184. package/dist/adapters/ton/api.js +942 -0
  185. package/dist/adapters/ton/api.js.map +1 -0
  186. package/dist/adapters/ton/builder.d.ts +18 -0
  187. package/dist/adapters/ton/builder.js +701 -0
  188. package/dist/adapters/ton/builder.js.map +1 -0
  189. package/dist/adapters/ton/chains.d.ts +16 -0
  190. package/dist/adapters/ton/chains.js +39 -0
  191. package/dist/adapters/ton/chains.js.map +1 -0
  192. package/dist/adapters/ton/decode.d.ts +43 -0
  193. package/dist/adapters/ton/decode.js +219 -0
  194. package/dist/adapters/ton/decode.js.map +1 -0
  195. package/dist/adapters/ton/driver.d.ts +10 -0
  196. package/dist/adapters/ton/driver.js +117 -0
  197. package/dist/adapters/ton/driver.js.map +1 -0
  198. package/dist/adapters/ton/errors.d.ts +36 -0
  199. package/dist/adapters/ton/errors.js +89 -0
  200. package/dist/adapters/ton/errors.js.map +1 -0
  201. package/dist/adapters/ton/fees.d.ts +28 -0
  202. package/dist/adapters/ton/fees.js +121 -0
  203. package/dist/adapters/ton/fees.js.map +1 -0
  204. package/dist/adapters/ton/index.d.ts +16 -0
  205. package/dist/adapters/ton/index.js +9 -0
  206. package/dist/adapters/ton/index.js.map +1 -0
  207. package/dist/adapters/ton/messages.d.ts +157 -0
  208. package/dist/adapters/ton/messages.js +397 -0
  209. package/dist/adapters/ton/messages.js.map +1 -0
  210. package/dist/adapters/ton/native-client.d.ts +10 -0
  211. package/dist/adapters/ton/native-client.js +47 -0
  212. package/dist/adapters/ton/native-client.js.map +1 -0
  213. package/dist/adapters/ton/network.d.ts +58 -0
  214. package/dist/adapters/ton/network.js +207 -0
  215. package/dist/adapters/ton/network.js.map +1 -0
  216. package/dist/adapters/ton/plugin.d.ts +24 -0
  217. package/dist/adapters/ton/plugin.js +57 -0
  218. package/dist/adapters/ton/plugin.js.map +1 -0
  219. package/dist/adapters/ton/presets.d.ts +6 -0
  220. package/dist/adapters/ton/presets.js +94 -0
  221. package/dist/adapters/ton/presets.js.map +1 -0
  222. package/dist/adapters/ton/proofs.d.ts +66 -0
  223. package/dist/adapters/ton/proofs.js +813 -0
  224. package/dist/adapters/ton/proofs.js.map +1 -0
  225. package/dist/adapters/ton/reader.d.ts +194 -0
  226. package/dist/adapters/ton/reader.js +781 -0
  227. package/dist/adapters/ton/reader.js.map +1 -0
  228. package/dist/adapters/ton/tokens.d.ts +10 -0
  229. package/dist/adapters/ton/tokens.js +27 -0
  230. package/dist/adapters/ton/tokens.js.map +1 -0
  231. package/dist/adapters/ton/trace.d.ts +48 -0
  232. package/dist/adapters/ton/trace.js +277 -0
  233. package/dist/adapters/ton/trace.js.map +1 -0
  234. package/dist/adapters/ton/types.d.ts +105 -0
  235. package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
  236. package/dist/adapters/ton/types.js.map +1 -0
  237. package/dist/adapters/ton/wallets.d.ts +86 -0
  238. package/dist/adapters/ton/wallets.js +373 -0
  239. package/dist/adapters/ton/wallets.js.map +1 -0
  240. package/dist/adapters/tron/abi.d.ts +39 -0
  241. package/dist/adapters/tron/abi.js +110 -0
  242. package/dist/adapters/tron/abi.js.map +1 -0
  243. package/dist/adapters/tron/address.d.ts +20 -0
  244. package/dist/adapters/tron/address.js +110 -0
  245. package/dist/adapters/tron/address.js.map +1 -0
  246. package/dist/adapters/tron/builder.d.ts +12 -0
  247. package/dist/adapters/tron/builder.js +553 -0
  248. package/dist/adapters/tron/builder.js.map +1 -0
  249. package/dist/adapters/tron/chains.d.ts +12 -0
  250. package/dist/adapters/tron/chains.js +35 -0
  251. package/dist/adapters/tron/chains.js.map +1 -0
  252. package/dist/adapters/tron/codec.d.ts +10 -0
  253. package/dist/adapters/tron/codec.js +322 -0
  254. package/dist/adapters/tron/codec.js.map +1 -0
  255. package/dist/adapters/tron/decode.d.ts +50 -0
  256. package/dist/adapters/tron/decode.js +280 -0
  257. package/dist/adapters/tron/decode.js.map +1 -0
  258. package/dist/adapters/tron/driver.d.ts +12 -0
  259. package/dist/adapters/tron/driver.js +106 -0
  260. package/dist/adapters/tron/driver.js.map +1 -0
  261. package/dist/adapters/tron/errors.d.ts +74 -0
  262. package/dist/adapters/tron/errors.js +261 -0
  263. package/dist/adapters/tron/errors.js.map +1 -0
  264. package/dist/adapters/tron/fees.d.ts +49 -0
  265. package/dist/adapters/tron/fees.js +166 -0
  266. package/dist/adapters/tron/fees.js.map +1 -0
  267. package/dist/adapters/tron/http.d.ts +173 -0
  268. package/dist/adapters/tron/http.js +729 -0
  269. package/dist/adapters/tron/http.js.map +1 -0
  270. package/dist/adapters/tron/index.d.ts +16 -0
  271. package/dist/adapters/tron/index.js +15 -0
  272. package/dist/adapters/tron/index.js.map +1 -0
  273. package/dist/adapters/tron/network.d.ts +44 -0
  274. package/dist/adapters/tron/network.js +163 -0
  275. package/dist/adapters/tron/network.js.map +1 -0
  276. package/dist/adapters/tron/plugin.d.ts +17 -0
  277. package/dist/adapters/tron/plugin.js +39 -0
  278. package/dist/adapters/tron/plugin.js.map +1 -0
  279. package/dist/adapters/tron/presets.d.ts +5 -0
  280. package/dist/adapters/tron/presets.js +68 -0
  281. package/dist/adapters/tron/presets.js.map +1 -0
  282. package/dist/adapters/tron/proofs.d.ts +80 -0
  283. package/dist/adapters/tron/proofs.js +370 -0
  284. package/dist/adapters/tron/proofs.js.map +1 -0
  285. package/dist/adapters/tron/protobuf.d.ts +36 -0
  286. package/dist/adapters/tron/protobuf.js +90 -0
  287. package/dist/adapters/tron/protobuf.js.map +1 -0
  288. package/dist/adapters/tron/reader.d.ts +47 -0
  289. package/dist/adapters/tron/reader.js +203 -0
  290. package/dist/adapters/tron/reader.js.map +1 -0
  291. package/dist/adapters/tron/tokens.d.ts +7 -0
  292. package/dist/adapters/tron/tokens.js +14 -0
  293. package/dist/adapters/tron/tokens.js.map +1 -0
  294. package/dist/adapters/tron/types.d.ts +166 -0
  295. package/dist/adapters/tron/types.js +3 -0
  296. package/dist/adapters/tron/types.js.map +1 -0
  297. package/dist/adapters/utxo/address.d.ts +51 -0
  298. package/dist/adapters/utxo/address.js +341 -0
  299. package/dist/adapters/utxo/address.js.map +1 -0
  300. package/dist/adapters/utxo/builder.d.ts +35 -0
  301. package/dist/adapters/utxo/builder.js +380 -0
  302. package/dist/adapters/utxo/builder.js.map +1 -0
  303. package/dist/adapters/utxo/chains.d.ts +17 -0
  304. package/dist/adapters/utxo/chains.js +99 -0
  305. package/dist/adapters/utxo/chains.js.map +1 -0
  306. package/dist/adapters/utxo/codec.d.ts +120 -0
  307. package/dist/adapters/utxo/codec.js +408 -0
  308. package/dist/adapters/utxo/codec.js.map +1 -0
  309. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  310. package/dist/adapters/utxo/coinselect.js +131 -0
  311. package/dist/adapters/utxo/coinselect.js.map +1 -0
  312. package/dist/adapters/utxo/context.d.ts +57 -0
  313. package/dist/adapters/utxo/context.js +118 -0
  314. package/dist/adapters/utxo/context.js.map +1 -0
  315. package/dist/adapters/utxo/decode.d.ts +14 -0
  316. package/dist/adapters/utxo/decode.js +85 -0
  317. package/dist/adapters/utxo/decode.js.map +1 -0
  318. package/dist/adapters/utxo/driver.d.ts +16 -0
  319. package/dist/adapters/utxo/driver.js +74 -0
  320. package/dist/adapters/utxo/driver.js.map +1 -0
  321. package/dist/adapters/utxo/ecc.d.ts +9 -0
  322. package/dist/adapters/utxo/ecc.js +26 -0
  323. package/dist/adapters/utxo/ecc.js.map +1 -0
  324. package/dist/adapters/utxo/errors.d.ts +52 -0
  325. package/dist/adapters/utxo/errors.js +191 -0
  326. package/dist/adapters/utxo/errors.js.map +1 -0
  327. package/dist/adapters/utxo/esplora.d.ts +79 -0
  328. package/dist/adapters/utxo/esplora.js +451 -0
  329. package/dist/adapters/utxo/esplora.js.map +1 -0
  330. package/dist/adapters/utxo/fees.d.ts +41 -0
  331. package/dist/adapters/utxo/fees.js +125 -0
  332. package/dist/adapters/utxo/fees.js.map +1 -0
  333. package/dist/adapters/utxo/index.d.ts +17 -0
  334. package/dist/adapters/utxo/index.js +8 -0
  335. package/dist/adapters/utxo/index.js.map +1 -0
  336. package/dist/adapters/utxo/network.d.ts +50 -0
  337. package/dist/adapters/utxo/network.js +165 -0
  338. package/dist/adapters/utxo/network.js.map +1 -0
  339. package/dist/adapters/utxo/plugin.d.ts +17 -0
  340. package/dist/adapters/utxo/plugin.js +41 -0
  341. package/dist/adapters/utxo/plugin.js.map +1 -0
  342. package/dist/adapters/utxo/presets.d.ts +12 -0
  343. package/dist/adapters/utxo/presets.js +47 -0
  344. package/dist/adapters/utxo/presets.js.map +1 -0
  345. package/dist/adapters/utxo/preview.d.ts +3 -0
  346. package/dist/adapters/utxo/preview.js +65 -0
  347. package/dist/adapters/utxo/preview.js.map +1 -0
  348. package/dist/adapters/utxo/proofs.d.ts +57 -0
  349. package/dist/adapters/utxo/proofs.js +331 -0
  350. package/dist/adapters/utxo/proofs.js.map +1 -0
  351. package/dist/adapters/utxo/rawtx.d.ts +59 -0
  352. package/dist/adapters/utxo/rawtx.js +234 -0
  353. package/dist/adapters/utxo/rawtx.js.map +1 -0
  354. package/dist/adapters/utxo/reader.d.ts +36 -0
  355. package/dist/adapters/utxo/reader.js +265 -0
  356. package/dist/adapters/utxo/reader.js.map +1 -0
  357. package/dist/adapters/utxo/sdk.d.ts +18 -0
  358. package/dist/adapters/utxo/sdk.js +17 -0
  359. package/dist/adapters/utxo/sdk.js.map +1 -0
  360. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  361. package/dist/adapters/utxo/signed-psbt.js +428 -0
  362. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  363. package/dist/adapters/utxo/spend.d.ts +59 -0
  364. package/dist/adapters/utxo/spend.js +230 -0
  365. package/dist/adapters/utxo/spend.js.map +1 -0
  366. package/dist/adapters/utxo/types.d.ts +167 -0
  367. package/dist/adapters/utxo/types.js +3 -0
  368. package/dist/adapters/utxo/types.js.map +1 -0
  369. package/dist/core/assets/service.d.ts +18 -0
  370. package/dist/core/assets/service.js +69 -0
  371. package/dist/core/assets/service.js.map +1 -0
  372. package/dist/core/blockchain/default-ref.d.ts +4 -0
  373. package/dist/core/blockchain/default-ref.js +16 -0
  374. package/dist/core/blockchain/default-ref.js.map +1 -0
  375. package/dist/core/blockchain/handle.d.ts +200 -0
  376. package/dist/core/blockchain/handle.js +579 -0
  377. package/dist/core/blockchain/handle.js.map +1 -0
  378. package/dist/core/blockchain/internal.d.ts +19 -0
  379. package/dist/core/blockchain/internal.js +16 -0
  380. package/dist/core/blockchain/internal.js.map +1 -0
  381. package/dist/core/blockchain/mapping.d.ts +22 -0
  382. package/dist/core/blockchain/mapping.js +136 -0
  383. package/dist/core/blockchain/mapping.js.map +1 -0
  384. package/dist/core/config/env.d.ts +8 -0
  385. package/dist/core/config/env.js +60 -0
  386. package/dist/core/config/env.js.map +1 -0
  387. package/dist/core/config/merge.d.ts +26 -0
  388. package/dist/core/config/merge.js +144 -0
  389. package/dist/core/config/merge.js.map +1 -0
  390. package/dist/core/config/resolve.d.ts +12 -0
  391. package/dist/core/config/resolve.js +251 -0
  392. package/dist/core/config/resolve.js.map +1 -0
  393. package/dist/core/config/types.d.ts +165 -0
  394. package/dist/core/config/types.js +3 -0
  395. package/dist/core/config/types.js.map +1 -0
  396. package/dist/core/container/builtins.d.ts +4 -0
  397. package/dist/core/container/builtins.js +13 -0
  398. package/dist/core/container/builtins.js.map +1 -0
  399. package/dist/core/container/container.d.ts +69 -0
  400. package/dist/core/container/container.js +466 -0
  401. package/dist/core/container/container.js.map +1 -0
  402. package/dist/core/container/default.d.ts +15 -0
  403. package/dist/core/container/default.js +70 -0
  404. package/dist/core/container/default.js.map +1 -0
  405. package/dist/core/container/internals.d.ts +54 -0
  406. package/dist/core/container/internals.js +21 -0
  407. package/dist/core/container/internals.js.map +1 -0
  408. package/dist/core/container/pool.d.ts +27 -0
  409. package/dist/core/container/pool.js +77 -0
  410. package/dist/core/container/pool.js.map +1 -0
  411. package/dist/core/driver/types.d.ts +346 -0
  412. package/dist/core/driver/types.js +3 -0
  413. package/dist/core/driver/types.js.map +1 -0
  414. package/dist/core/errors/codes.d.ts +153 -0
  415. package/dist/core/errors/codes.js +49 -0
  416. package/dist/core/errors/codes.js.map +1 -0
  417. package/dist/core/errors/error.d.ts +66 -0
  418. package/dist/core/errors/error.js +129 -0
  419. package/dist/core/errors/error.js.map +1 -0
  420. package/dist/core/events/bus.d.ts +12 -0
  421. package/dist/core/events/bus.js +46 -0
  422. package/dist/core/events/bus.js.map +1 -0
  423. package/dist/core/events/logger.d.ts +13 -0
  424. package/dist/core/events/logger.js +42 -0
  425. package/dist/core/events/logger.js.map +1 -0
  426. package/dist/core/events/types.d.ts +131 -0
  427. package/dist/core/events/types.js +3 -0
  428. package/dist/core/events/types.js.map +1 -0
  429. package/dist/core/lifecycle/engine-rules.d.ts +107 -0
  430. package/dist/core/lifecycle/engine-rules.js +257 -0
  431. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  432. package/dist/core/lifecycle/engine.d.ts +500 -0
  433. package/dist/core/lifecycle/engine.js +1732 -0
  434. package/dist/core/lifecycle/engine.js.map +1 -0
  435. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  436. package/dist/core/lifecycle/evaluate.js +72 -0
  437. package/dist/core/lifecycle/evaluate.js.map +1 -0
  438. package/dist/core/lifecycle/intent.d.ts +11 -0
  439. package/dist/core/lifecycle/intent.js +88 -0
  440. package/dist/core/lifecycle/intent.js.map +1 -0
  441. package/dist/core/lifecycle/monitor.d.ts +138 -0
  442. package/dist/core/lifecycle/monitor.js +606 -0
  443. package/dist/core/lifecycle/monitor.js.map +1 -0
  444. package/dist/core/lifecycle/observations.d.ts +17 -0
  445. package/dist/core/lifecycle/observations.js +59 -0
  446. package/dist/core/lifecycle/observations.js.map +1 -0
  447. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  448. package/dist/core/lifecycle/reconcile.js +112 -0
  449. package/dist/core/lifecycle/reconcile.js.map +1 -0
  450. package/dist/core/lifecycle/views.d.ts +49 -0
  451. package/dist/core/lifecycle/views.js +57 -0
  452. package/dist/core/lifecycle/views.js.map +1 -0
  453. package/dist/core/lifecycle/workers.d.ts +82 -0
  454. package/dist/core/lifecycle/workers.js +329 -0
  455. package/dist/core/lifecycle/workers.js.map +1 -0
  456. package/dist/core/model/address.d.ts +32 -0
  457. package/dist/core/model/address.js +43 -0
  458. package/dist/core/model/address.js.map +1 -0
  459. package/dist/core/model/amount.d.ts +25 -0
  460. package/dist/core/model/amount.js +102 -0
  461. package/dist/core/model/amount.js.map +1 -0
  462. package/dist/core/model/asset.d.ts +28 -0
  463. package/dist/core/model/asset.js +47 -0
  464. package/dist/core/model/asset.js.map +1 -0
  465. package/dist/core/model/capability.d.ts +3 -0
  466. package/dist/core/model/capability.js +18 -0
  467. package/dist/core/model/capability.js.map +1 -0
  468. package/dist/core/model/chain.d.ts +63 -0
  469. package/dist/core/model/chain.js +8 -0
  470. package/dist/core/model/chain.js.map +1 -0
  471. package/dist/core/model/fee.d.ts +36 -0
  472. package/dist/core/model/fee.js +17 -0
  473. package/dist/core/model/fee.js.map +1 -0
  474. package/dist/core/model/ids.d.ts +37 -0
  475. package/dist/core/model/ids.js +13 -0
  476. package/dist/core/model/ids.js.map +1 -0
  477. package/dist/core/model/intent.d.ts +63 -0
  478. package/dist/core/model/intent.js +81 -0
  479. package/dist/core/model/intent.js.map +1 -0
  480. package/dist/core/model/ordering.d.ts +20 -0
  481. package/dist/core/model/ordering.js +29 -0
  482. package/dist/core/model/ordering.js.map +1 -0
  483. package/dist/core/model/transaction.d.ts +116 -0
  484. package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
  485. package/dist/core/model/transaction.js.map +1 -0
  486. package/dist/core/observe/scanner.d.ts +135 -0
  487. package/dist/core/observe/scanner.js +355 -0
  488. package/dist/core/observe/scanner.js.map +1 -0
  489. package/dist/core/ordering/reservations.d.ts +16 -0
  490. package/dist/core/ordering/reservations.js +53 -0
  491. package/dist/core/ordering/reservations.js.map +1 -0
  492. package/dist/core/ordering/sequence.d.ts +61 -0
  493. package/dist/core/ordering/sequence.js +155 -0
  494. package/dist/core/ordering/sequence.js.map +1 -0
  495. package/dist/core/registry/adapters.d.ts +10 -0
  496. package/dist/core/registry/adapters.js +56 -0
  497. package/dist/core/registry/adapters.js.map +1 -0
  498. package/dist/core/registry/assets.d.ts +18 -0
  499. package/dist/core/registry/assets.js +90 -0
  500. package/dist/core/registry/assets.js.map +1 -0
  501. package/dist/core/registry/chains.d.ts +10 -0
  502. package/dist/core/registry/chains.js +80 -0
  503. package/dist/core/registry/chains.js.map +1 -0
  504. package/dist/core/registry/plugin.d.ts +41 -0
  505. package/dist/core/registry/plugin.js +109 -0
  506. package/dist/core/registry/plugin.js.map +1 -0
  507. package/dist/core/registry/providers.d.ts +31 -0
  508. package/dist/core/registry/providers.js +43 -0
  509. package/dist/core/registry/providers.js.map +1 -0
  510. package/dist/core/registry/schemes.d.ts +30 -0
  511. package/dist/core/registry/schemes.js +84 -0
  512. package/dist/core/registry/schemes.js.map +1 -0
  513. package/dist/core/secret/fragments.d.ts +33 -0
  514. package/dist/core/secret/fragments.js +110 -0
  515. package/dist/core/secret/fragments.js.map +1 -0
  516. package/dist/core/secret/redact.d.ts +10 -0
  517. package/dist/core/secret/redact.js +110 -0
  518. package/dist/core/secret/redact.js.map +1 -0
  519. package/dist/core/secret/secret.d.ts +14 -0
  520. package/dist/core/secret/secret.js +42 -0
  521. package/dist/core/secret/secret.js.map +1 -0
  522. package/dist/core/signing/callback.d.ts +10 -0
  523. package/dist/core/signing/callback.js +22 -0
  524. package/dist/core/signing/callback.js.map +1 -0
  525. package/dist/core/signing/guard.d.ts +18 -0
  526. package/dist/core/signing/guard.js +72 -0
  527. package/dist/core/signing/guard.js.map +1 -0
  528. package/dist/core/signing/hd.d.ts +36 -0
  529. package/dist/core/signing/hd.js +167 -0
  530. package/dist/core/signing/hd.js.map +1 -0
  531. package/dist/core/signing/local.d.ts +48 -0
  532. package/dist/core/signing/local.js +190 -0
  533. package/dist/core/signing/local.js.map +1 -0
  534. package/dist/core/signing/orchestrator.d.ts +40 -0
  535. package/dist/core/signing/orchestrator.js +300 -0
  536. package/dist/core/signing/orchestrator.js.map +1 -0
  537. package/dist/core/signing/types.d.ts +64 -0
  538. package/dist/core/signing/types.js +3 -0
  539. package/dist/core/signing/types.js.map +1 -0
  540. package/dist/core/signing/wallet.d.ts +48 -0
  541. package/dist/core/signing/wallet.js +153 -0
  542. package/dist/core/signing/wallet.js.map +1 -0
  543. package/dist/core/store/clone.d.ts +25 -0
  544. package/dist/core/store/clone.js +71 -0
  545. package/dist/core/store/clone.js.map +1 -0
  546. package/dist/core/store/memory.d.ts +38 -0
  547. package/dist/core/store/memory.js +325 -0
  548. package/dist/core/store/memory.js.map +1 -0
  549. package/dist/core/store/types.d.ts +246 -0
  550. package/dist/core/store/types.js +117 -0
  551. package/dist/core/store/types.js.map +1 -0
  552. package/dist/core/transport/backoff.d.ts +8 -0
  553. package/dist/core/transport/backoff.js +27 -0
  554. package/dist/core/transport/backoff.js.map +1 -0
  555. package/dist/core/transport/circuit.d.ts +25 -0
  556. package/dist/core/transport/circuit.js +61 -0
  557. package/dist/core/transport/circuit.js.map +1 -0
  558. package/dist/core/transport/http-transport.d.ts +30 -0
  559. package/dist/core/transport/http-transport.js +1695 -0
  560. package/dist/core/transport/http-transport.js.map +1 -0
  561. package/dist/core/transport/rate-limit.d.ts +27 -0
  562. package/dist/core/transport/rate-limit.js +78 -0
  563. package/dist/core/transport/rate-limit.js.map +1 -0
  564. package/dist/core/transport/stale-view.d.ts +11 -0
  565. package/dist/core/transport/stale-view.js +17 -0
  566. package/dist/core/transport/stale-view.js.map +1 -0
  567. package/dist/core/transport/types.d.ts +144 -0
  568. package/dist/core/transport/types.js +6 -0
  569. package/dist/core/transport/types.js.map +1 -0
  570. package/dist/core/util/bytes.d.ts +9 -0
  571. package/dist/core/util/bytes.js +40 -0
  572. package/dist/core/util/bytes.js.map +1 -0
  573. package/dist/core/util/clock.d.ts +6 -0
  574. package/dist/core/util/clock.js +26 -0
  575. package/dist/core/util/clock.js.map +1 -0
  576. package/dist/core/util/freeze.d.ts +8 -0
  577. package/dist/core/util/freeze.js +31 -0
  578. package/dist/core/util/freeze.js.map +1 -0
  579. package/dist/core/util/json.d.ts +29 -0
  580. package/dist/core/util/json.js +165 -0
  581. package/dist/core/util/json.js.map +1 -0
  582. package/dist/core/util/names.d.ts +21 -0
  583. package/dist/core/util/names.js +46 -0
  584. package/dist/core/util/names.js.map +1 -0
  585. package/dist/index.d.ts +64 -14
  586. package/dist/index.js +105 -49
  587. package/dist/index.js.map +1 -1
  588. package/dist/native.d.ts +21 -0
  589. package/dist/native.js +44 -0
  590. package/dist/native.js.map +1 -0
  591. package/dist/testing/contracts/api.d.ts +12 -0
  592. package/dist/testing/contracts/api.js +58 -0
  593. package/dist/testing/contracts/api.js.map +1 -0
  594. package/dist/testing/contracts/cursors.d.ts +6 -0
  595. package/dist/testing/contracts/cursors.js +43 -0
  596. package/dist/testing/contracts/cursors.js.map +1 -0
  597. package/dist/testing/contracts/locks.d.ts +10 -0
  598. package/dist/testing/contracts/locks.js +63 -0
  599. package/dist/testing/contracts/locks.js.map +1 -0
  600. package/dist/testing/contracts/operations.d.ts +21 -0
  601. package/dist/testing/contracts/operations.js +718 -0
  602. package/dist/testing/contracts/operations.js.map +1 -0
  603. package/dist/testing/contracts/sequences.d.ts +6 -0
  604. package/dist/testing/contracts/sequences.js +68 -0
  605. package/dist/testing/contracts/sequences.js.map +1 -0
  606. package/dist/testing/env.d.ts +63 -0
  607. package/dist/testing/env.js +105 -0
  608. package/dist/testing/env.js.map +1 -0
  609. package/dist/testing/fake-chain.d.ts +118 -0
  610. package/dist/testing/fake-chain.js +536 -0
  611. package/dist/testing/fake-chain.js.map +1 -0
  612. package/dist/testing/fake-clock.d.ts +15 -0
  613. package/dist/testing/fake-clock.js +86 -0
  614. package/dist/testing/fake-clock.js.map +1 -0
  615. package/dist/testing/fake-driver.d.ts +15 -0
  616. package/dist/testing/fake-driver.js +458 -0
  617. package/dist/testing/fake-driver.js.map +1 -0
  618. package/dist/testing/fake-fetch.d.ts +32 -0
  619. package/dist/testing/fake-fetch.js +81 -0
  620. package/dist/testing/fake-fetch.js.map +1 -0
  621. package/dist/testing/fake-plugin.d.ts +30 -0
  622. package/dist/testing/fake-plugin.js +66 -0
  623. package/dist/testing/fake-plugin.js.map +1 -0
  624. package/dist/testing/faulty-store.d.ts +36 -0
  625. package/dist/testing/faulty-store.js +66 -0
  626. package/dist/testing/faulty-store.js.map +1 -0
  627. package/dist/testing/generation.d.ts +60 -0
  628. package/dist/testing/generation.js +252 -0
  629. package/dist/testing/generation.js.map +1 -0
  630. package/dist/testing/index.d.ts +28 -0
  631. package/dist/testing/index.js +51 -0
  632. package/dist/testing/index.js.map +1 -0
  633. package/package.json +188 -45
  634. package/dist/libs/eth/account.d.ts +0 -9
  635. package/dist/libs/eth/account.js +0 -58
  636. package/dist/libs/eth/account.js.map +0 -1
  637. package/dist/libs/eth/contract.d.ts +0 -7
  638. package/dist/libs/eth/contract.js +0 -42
  639. package/dist/libs/eth/contract.js.map +0 -1
  640. package/dist/libs/eth/index.d.ts +0 -24
  641. package/dist/libs/eth/index.js +0 -72
  642. package/dist/libs/eth/index.js.map +0 -1
  643. package/dist/libs/eth/transact.d.ts +0 -7
  644. package/dist/libs/eth/transact.js +0 -26
  645. package/dist/libs/eth/transact.js.map +0 -1
  646. package/dist/libs/index.d.ts +0 -2
  647. package/dist/libs/index.js +0 -19
  648. package/dist/libs/index.js.map +0 -1
  649. package/dist/libs/trx/account.d.ts +0 -9
  650. package/dist/libs/trx/account.js +0 -55
  651. package/dist/libs/trx/account.js.map +0 -1
  652. package/dist/libs/trx/contract.d.ts +0 -7
  653. package/dist/libs/trx/contract.js +0 -27
  654. package/dist/libs/trx/contract.js.map +0 -1
  655. package/dist/libs/trx/index.d.ts +0 -22
  656. package/dist/libs/trx/index.js +0 -64
  657. package/dist/libs/trx/index.js.map +0 -1
  658. package/dist/libs/trx/transact.d.ts +0 -7
  659. package/dist/libs/trx/transact.js +0 -26
  660. package/dist/libs/trx/transact.js.map +0 -1
  661. package/dist/tool/common.d.ts +0 -28
  662. package/dist/tool/common.js +0 -33
  663. package/dist/tool/common.js.map +0 -1
  664. package/dist/tool/eth-tools.d.ts +0 -3
  665. package/dist/tool/eth-tools.js +0 -33
  666. package/dist/tool/eth-tools.js.map +0 -1
  667. package/dist/tool/index.d.ts +0 -5
  668. package/dist/tool/index.js +0 -22
  669. package/dist/tool/index.js.map +0 -1
  670. package/dist/tool/logging.d.ts +0 -3
  671. package/dist/tool/logging.js +0 -11
  672. package/dist/tool/logging.js.map +0 -1
  673. package/dist/tool/options.d.ts +0 -6
  674. package/dist/tool/options.js +0 -41
  675. package/dist/tool/options.js.map +0 -1
  676. package/dist/tool/trx-tools.d.ts +0 -3
  677. package/dist/tool/trx-tools.js +0 -20
  678. package/dist/tool/trx-tools.js.map +0 -1
  679. package/dist/type/account.d.ts +0 -9
  680. package/dist/type/account.js.map +0 -1
  681. package/dist/type/common.d.ts +0 -18
  682. package/dist/type/common.js.map +0 -1
  683. package/dist/type/contract.d.ts +0 -10
  684. package/dist/type/contract.js.map +0 -1
  685. package/dist/type/index.d.ts +0 -5
  686. package/dist/type/index.js +0 -22
  687. package/dist/type/index.js.map +0 -1
  688. package/dist/type/lib-types.d.ts +0 -9
  689. package/dist/type/lib-types.js.map +0 -1
  690. package/dist/type/transact.d.ts +0 -7
  691. package/dist/type/transact.js.map +0 -1
@@ -0,0 +1,120 @@
1
+ import type { SignatureBundle, SigningRequest } from '../../core/signing/types';
2
+ import { type WalletAddress } from './address';
3
+ import type { PlannedOutput, Spendable } from './coinselect';
4
+ import { type Network, type Psbt } from './sdk';
5
+ /** The sighash types each input signs with (ALL; DEFAULT for p2tr), defined with the reader. */
6
+ export { SIGHASH_ALL, SIGHASH_DEFAULT } from './signed-psbt';
7
+ /** BIP125 opt-in (and relative lock time disabled); `0xfffffffe` when RBF is off. */
8
+ export declare const SEQUENCE_RBF = 4294967293;
9
+ export declare const SEQUENCE_FINAL_LOCKTIME = 4294967294;
10
+ /**
11
+ * A previous transaction, decoded strictly once: its txid, its outputs, and
12
+ * its bytes without the witness (Bitcoin Core's `TX_NO_WITNESS` form, which BIP174
13
+ * `non_witness_utxo` carries). Only `previousTxOf` makes one, so its txid is the hash of its
14
+ * bytes: they authenticate themselves.
15
+ */
16
+ export interface PreviousTx {
17
+ readonly txid: string;
18
+ readonly outputs: readonly {
19
+ readonly value: bigint;
20
+ readonly script: Uint8Array;
21
+ }[];
22
+ readonly bytes: Uint8Array;
23
+ }
24
+ export interface PlannedInput extends Spendable {
25
+ /**
26
+ * The previous transaction to carry in the PSBT (BIP174 `non_witness_utxo`), checked
27
+ * against the input's outpoint, value and script: required for p2pkh, and added for segwit
28
+ * v0 so hardware wallets can check the input amounts. Never on p2tr.
29
+ */
30
+ readonly prevTx?: PreviousTx;
31
+ }
32
+ export interface BuiltTx {
33
+ /** The PSBT, base64 (the signing payload a cold signer receives). */
34
+ readonly psbt: string;
35
+ /** One signature hash per input, in input order. */
36
+ readonly digests: readonly Uint8Array[];
37
+ /** The txid, when every input is witness-type (it is then fixed before signing). */
38
+ readonly txid?: string;
39
+ }
40
+ /**
41
+ * Untrusted transaction hex (a node's answer) as a previous transaction, read in one linear
42
+ * pass by `rawtx.ts` (bitcoinjs' decoder is quadratic), capped before decoding
43
+ * and at the million bytes without witness a chain can hold; `undefined` when it
44
+ * does not decode.
45
+ */
46
+ export declare function previousTxOf(hex: string): PreviousTx | undefined;
47
+ /**
48
+ * Whether `error` is `assertPrevious`'s refusal: a previous transaction whose output
49
+ * disagrees with the input's txid, value or script, or that has no such output. A caller
50
+ * that read those from a provider maps it to the provider.
51
+ */
52
+ export declare function isPreviousTxRefusal(error: unknown): boolean;
53
+ /**
54
+ * An input is what its previous transaction says: `prev` is the outpoint's
55
+ * transaction (its txid, which the bytes hash to), and it has the output, with the input's
56
+ * value and the wallet's script. Otherwise `INVALID_INTENT` (`isPreviousTxRefusal`).
57
+ */
58
+ export declare function assertPrevious(prev: PreviousTx, input: Spendable, script: Uint8Array): void;
59
+ /**
60
+ * The unsigned transaction (version 2, lock time 0) and its PSBT, spending `inputs` of the
61
+ * wallet to `outputs` in the given order.
62
+ */
63
+ export declare function buildTx(network: Network, wallet: WalletAddress, inputs: readonly PlannedInput[], outputs: readonly PlannedOutput[], sequence: number): BuiltTx;
64
+ /** The unsigned transaction a PSBT carries (BIP174 `PSBT_GLOBAL_UNSIGNED_TX`). */
65
+ export declare function unsignedTxOf(psbt: Psbt): Uint8Array;
66
+ export declare function parsePsbt(base64: string, network: Network): Psbt;
67
+ export interface PsbtTxView {
68
+ readonly inputs: readonly {
69
+ readonly outpoint: string;
70
+ readonly txid: string;
71
+ readonly vout: number;
72
+ readonly value: bigint;
73
+ readonly sequence: number;
74
+ }[];
75
+ readonly outputs: readonly {
76
+ readonly script: Uint8Array;
77
+ readonly value: bigint;
78
+ }[];
79
+ }
80
+ /** Inputs (with the values the PSBT commits to) and outputs of our own stored PSBT. */
81
+ export declare function viewPsbt(base64: string, network: Network): PsbtTxView;
82
+ /**
83
+ * The signed transaction from our stored PSBT and one signature per request (`in:<i>`):
84
+ * ECDSA as a DER signature with SIGHASH_ALL (partial signature), Schnorr as a 64-byte
85
+ * key-path signature. Nothing but the signature bytes comes from outside.
86
+ */
87
+ export declare function assembleTx(base64: string, network: Network, requests: readonly SigningRequest[], signatures: readonly SignatureBundle[]): {
88
+ readonly hex: string;
89
+ readonly txid: string;
90
+ };
91
+ /**
92
+ * The signatures of a PSBT signed elsewhere, synchronous and I/O-free. The
93
+ * signed PSBT is untrusted (`signed-psbt.ts`): parsed strictly, it must carry exactly our
94
+ * unsigned transaction (anti-tamper) and nothing that could change the spend. From each
95
+ * input only the signature for the request's key is taken (partial or final), and the core
96
+ * then verifies it against the stored digest and key. An input without one is left out (a
97
+ * partial set). Every refusal is `INVALID_INTENT` with a fixed text.
98
+ */
99
+ export declare function signaturesFromPsbt(storedBase64: string, signedBase64: string, network: Network, requests: readonly SigningRequest[]): SignatureBundle[];
100
+ /** bitcoinjs network parameters for a network's address parameters. */
101
+ export declare function networkOf(params: {
102
+ bech32: string;
103
+ pubKeyHash: number;
104
+ scriptHash: number;
105
+ }): Network;
106
+ /**
107
+ * The txid of untrusted transaction hex, read linearly (`rawtx.ts`);
108
+ * `INVALID_INTENT` when it does not decode or holds more than a chain can.
109
+ */
110
+ export declare function txidOfHex(hex: string): string;
111
+ /**
112
+ * The txid `hex` would have with canonical p2pkh scriptSigs: per input, the last push
113
+ * that is a strict-DER SIGHASH_ALL signature (normalized to low-s) and the last push that
114
+ * is a 33-byte key hashing to `pubkeyHash`, re-pushed minimally as `<sig> <key>`. A third
115
+ * party without the key can change only that encoding (BIP66 strict DER is consensus; the
116
+ * sighash byte is signed), so this equals our Attempt's txid exactly when `hex` is a
117
+ * malleated copy of it: same version, lock time, outpoints, sequences and outputs.
118
+ * `undefined` when an input has a witness or no such pushes.
119
+ */
120
+ export declare function canonicalTwinTxid(hex: string, pubkeyHash: Uint8Array): string | undefined;
@@ -0,0 +1,408 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SEQUENCE_FINAL_LOCKTIME = exports.SEQUENCE_RBF = exports.SIGHASH_DEFAULT = exports.SIGHASH_ALL = void 0;
4
+ exports.previousTxOf = previousTxOf;
5
+ exports.isPreviousTxRefusal = isPreviousTxRefusal;
6
+ exports.assertPrevious = assertPrevious;
7
+ exports.buildTx = buildTx;
8
+ exports.unsignedTxOf = unsignedTxOf;
9
+ exports.parsePsbt = parsePsbt;
10
+ exports.viewPsbt = viewPsbt;
11
+ exports.assembleTx = assembleTx;
12
+ exports.signaturesFromPsbt = signaturesFromPsbt;
13
+ exports.networkOf = networkOf;
14
+ exports.txidOfHex = txidOfHex;
15
+ exports.canonicalTwinTxid = canonicalTwinTxid;
16
+ /**
17
+ * The bitcoinjs-lib codec: the unsigned transaction and its PSBT (BIP174), the
18
+ * per-input signature hashes (legacy, BIP143 for segwit v0, BIP341 key path for taproot),
19
+ * assembly of the signed transaction, and the signatures of a PSBT signed elsewhere. The
20
+ * driver persists only the PSBT (base64) and plain data, never an SDK object, and
21
+ * re-parses it here.
22
+ */
23
+ const utils_1 = require("@noble/curves/abstract/utils");
24
+ const secp256k1_1 = require("@noble/curves/secp256k1");
25
+ const error_1 = require("../../core/errors/error");
26
+ const bytes_1 = require("../../core/util/bytes");
27
+ const address_1 = require("./address");
28
+ const rawtx_1 = require("./rawtx");
29
+ const sdk_1 = require("./sdk");
30
+ const signed_psbt_1 = require("./signed-psbt");
31
+ /** The sighash types each input signs with (ALL; DEFAULT for p2tr), defined with the reader. */
32
+ var signed_psbt_2 = require("./signed-psbt");
33
+ Object.defineProperty(exports, "SIGHASH_ALL", { enumerable: true, get: function () { return signed_psbt_2.SIGHASH_ALL; } });
34
+ Object.defineProperty(exports, "SIGHASH_DEFAULT", { enumerable: true, get: function () { return signed_psbt_2.SIGHASH_DEFAULT; } });
35
+ /** BIP125 opt-in (and relative lock time disabled); `0xfffffffe` when RBF is off. */
36
+ exports.SEQUENCE_RBF = 0xfffffffd;
37
+ exports.SEQUENCE_FINAL_LOCKTIME = 0xfffffffe;
38
+ /** Bitcoin Core's `MAX_MONEY` (21 million bitcoin): no amount is larger. */
39
+ const MAX_MONEY = 2100000000000000n;
40
+ const TXID = /^[0-9a-f]{64}$/;
41
+ const isU32 = (n) => Number.isInteger(n) && n >= 0 && n <= 0xffffffff;
42
+ const isMoney = (value) => typeof value === 'bigint' && value >= 0n && value <= MAX_MONEY;
43
+ /** Internal byte order of a txid (bitcoinjs `addInput` takes the reversed display hex). */
44
+ const txidBytes = (txid) => (0, bytes_1.fromHex)(txid).reverse();
45
+ /**
46
+ * Untrusted transaction hex (a node's answer) as a previous transaction, read in one linear
47
+ * pass by `rawtx.ts` (bitcoinjs' decoder is quadratic), capped before decoding
48
+ * and at the million bytes without witness a chain can hold; `undefined` when it
49
+ * does not decode.
50
+ */
51
+ function previousTxOf(hex) {
52
+ const tx = (0, rawtx_1.readTxHex)(hex);
53
+ if (!tx)
54
+ return undefined;
55
+ return {
56
+ txid: tx.txid,
57
+ // Copies: a cached previous transaction keeps no view of the bytes with the witness.
58
+ outputs: tx.outputs.map((output) => ({
59
+ value: output.value,
60
+ script: Uint8Array.from(output.script),
61
+ })),
62
+ bytes: tx.hasWitness ? tx.stripped() : Uint8Array.from(tx.stripped()),
63
+ };
64
+ }
65
+ /**
66
+ * Every integer `buildTx` encodes fits its field, never wrapped; anything else is refused
67
+ * with a fixed text that names no value (bitcoinjs' own check quotes it).
68
+ */
69
+ function assertEncodable(inputs, outputs, sequence) {
70
+ if (!isU32(sequence)) {
71
+ throw new error_1.ValidationError('INVALID_INTENT', 'the input sequence is out of range');
72
+ }
73
+ const outpoints = new Set();
74
+ for (const input of inputs) {
75
+ if (!TXID.test(input.txid) || !isU32(input.vout)) {
76
+ throw new error_1.ValidationError('INVALID_INTENT', 'an input outpoint is out of range');
77
+ }
78
+ const outpoint = `${input.txid}:${input.vout}`;
79
+ if (outpoints.has(outpoint)) {
80
+ throw new error_1.ValidationError('INVALID_INTENT', 'an input outpoint is listed twice');
81
+ }
82
+ outpoints.add(outpoint);
83
+ if (!isMoney(input.value)) {
84
+ throw new error_1.ValidationError('INVALID_AMOUNT', 'an input value is out of range');
85
+ }
86
+ }
87
+ for (const output of outputs) {
88
+ if (!isMoney(output.value)) {
89
+ throw new error_1.ValidationError('INVALID_AMOUNT', 'an output value is out of range');
90
+ }
91
+ }
92
+ }
93
+ const PREVIOUS_MISMATCH = 'a previous transaction does not match its outpoint';
94
+ /**
95
+ * Whether `error` is `assertPrevious`'s refusal: a previous transaction whose output
96
+ * disagrees with the input's txid, value or script, or that has no such output. A caller
97
+ * that read those from a provider maps it to the provider.
98
+ */
99
+ function isPreviousTxRefusal(error) {
100
+ return (0, error_1.isCryptoAioError)(error, 'INVALID_INTENT') && error.message === PREVIOUS_MISMATCH;
101
+ }
102
+ /**
103
+ * An input is what its previous transaction says: `prev` is the outpoint's
104
+ * transaction (its txid, which the bytes hash to), and it has the output, with the input's
105
+ * value and the wallet's script. Otherwise `INVALID_INTENT` (`isPreviousTxRefusal`).
106
+ */
107
+ function assertPrevious(prev, input, script) {
108
+ const output = prev.outputs[input.vout];
109
+ if (prev.txid !== input.txid ||
110
+ !output ||
111
+ output.value !== input.value ||
112
+ !(0, bytes_1.equalBytes)(output.script, script)) {
113
+ throw new error_1.ValidationError('INVALID_INTENT', PREVIOUS_MISMATCH);
114
+ }
115
+ }
116
+ /**
117
+ * The unsigned transaction (version 2, lock time 0) and its PSBT, spending `inputs` of the
118
+ * wallet to `outputs` in the given order.
119
+ */
120
+ function buildTx(network, wallet, inputs, outputs, sequence) {
121
+ assertEncodable(inputs, outputs, sequence);
122
+ (0, sdk_1.useNobleEcc)();
123
+ const tx = new sdk_1.bitcoin.Transaction();
124
+ tx.version = 2;
125
+ tx.locktime = 0;
126
+ for (const input of inputs)
127
+ tx.addInput(txidBytes(input.txid), input.vout, sequence);
128
+ for (const output of outputs)
129
+ tx.addOutput(output.script, output.value);
130
+ const psbt = new sdk_1.bitcoin.Psbt({ network });
131
+ psbt.setVersion(2);
132
+ psbt.setLocktime(0);
133
+ for (const input of inputs) {
134
+ if (wallet.type === 'p2pkh' && input.prevTx === undefined) {
135
+ throw new error_1.ValidationError('INVALID_INTENT', 'a p2pkh input needs its verified previous transaction');
136
+ }
137
+ if (input.prevTx !== undefined)
138
+ assertPrevious(input.prevTx, input, wallet.script);
139
+ const prevTx = input.prevTx?.bytes;
140
+ psbt.addInput({
141
+ hash: input.txid,
142
+ index: input.vout,
143
+ sequence,
144
+ ...(wallet.type === 'p2pkh'
145
+ ? {}
146
+ : { witnessUtxo: { script: wallet.script, value: input.value } }),
147
+ ...(prevTx !== undefined && wallet.type !== 'p2tr'
148
+ ? { nonWitnessUtxo: prevTx }
149
+ : {}),
150
+ ...(wallet.redeemScript ? { redeemScript: wallet.redeemScript } : {}),
151
+ ...(wallet.type === 'p2tr' ? { tapInternalKey: wallet.publicKey } : {}),
152
+ });
153
+ }
154
+ for (const output of outputs)
155
+ psbt.addOutput({ script: output.script, value: output.value });
156
+ if (!(0, bytes_1.equalBytes)(unsignedTxOf(psbt), tx.toBuffer())) {
157
+ throw new error_1.SigningError('SIGNING_FAILED', 'the PSBT does not encode the built transaction');
158
+ }
159
+ const digests = inputs.map((input, index) => {
160
+ switch (wallet.type) {
161
+ case 'p2pkh':
162
+ return tx.hashForSignature(index, wallet.script, signed_psbt_1.SIGHASH_ALL);
163
+ case 'p2wpkh':
164
+ case 'p2sh-p2wpkh':
165
+ // BIP143: the script code of a p2wpkh program is the p2pkh script of its key hash.
166
+ return tx.hashForWitnessV0(index, (0, address_1.outputScript)('p2pkh', (0, address_1.hash160)(wallet.publicKey)), input.value, signed_psbt_1.SIGHASH_ALL);
167
+ case 'p2tr':
168
+ return tx.hashForWitnessV1(index, inputs.map(() => wallet.script), inputs.map((i) => i.value), signed_psbt_1.SIGHASH_DEFAULT);
169
+ }
170
+ });
171
+ let txid;
172
+ if (wallet.type !== 'p2pkh') {
173
+ const final = tx.clone();
174
+ if (wallet.redeemScript) {
175
+ const scriptSig = sdk_1.bitcoin.script.compile([wallet.redeemScript]);
176
+ for (let i = 0; i < inputs.length; i++)
177
+ final.setInputScript(i, scriptSig);
178
+ }
179
+ txid = final.getId();
180
+ }
181
+ return { psbt: psbt.toBase64(), digests, ...(txid !== undefined ? { txid } : {}) };
182
+ }
183
+ /** The unsigned transaction a PSBT carries (BIP174 `PSBT_GLOBAL_UNSIGNED_TX`). */
184
+ function unsignedTxOf(psbt) {
185
+ return psbt.data.globalMap.unsignedTx.toBuffer();
186
+ }
187
+ function parsePsbt(base64, network) {
188
+ // Parsing reads taproot fields and output addresses, which need the ECC backend.
189
+ (0, sdk_1.useNobleEcc)();
190
+ try {
191
+ return sdk_1.bitcoin.Psbt.fromBase64(base64, { network });
192
+ }
193
+ catch {
194
+ throw new error_1.ValidationError('INVALID_INTENT', 'the payload is not a valid PSBT');
195
+ }
196
+ }
197
+ /** Inputs (with the values the PSBT commits to) and outputs of our own stored PSBT. */
198
+ function viewPsbt(base64, network) {
199
+ const psbt = parsePsbt(base64, network);
200
+ const inputs = psbt.txInputs.map((input, index) => {
201
+ const data = psbt.data.inputs[index];
202
+ const txid = (0, bytes_1.toHex)(Uint8Array.from(input.hash).reverse());
203
+ let value;
204
+ if (data?.witnessUtxo)
205
+ value = data.witnessUtxo.value;
206
+ else if (data?.nonWitnessUtxo) {
207
+ // Read linearly, though `buildTx` checked it: a real one can be large, and
208
+ // bitcoinjs' decoder is quadratic.
209
+ const prev = (0, rawtx_1.readTx)(data.nonWitnessUtxo);
210
+ const output = prev?.txid === txid ? prev.outputs[input.index] : undefined;
211
+ if (!output) {
212
+ throw new error_1.ValidationError('INVALID_INTENT', 'a PSBT input does not match its previous transaction');
213
+ }
214
+ value = output.value;
215
+ }
216
+ else
217
+ throw new error_1.ValidationError('INVALID_INTENT', 'a PSBT input has no UTXO');
218
+ return {
219
+ outpoint: `${txid}:${input.index}`,
220
+ txid,
221
+ vout: input.index,
222
+ value,
223
+ sequence: input.sequence ?? 0xffffffff,
224
+ };
225
+ });
226
+ const outputs = psbt.txOutputs.map((output) => ({
227
+ script: output.script,
228
+ value: output.value,
229
+ }));
230
+ return { inputs, outputs };
231
+ }
232
+ /**
233
+ * The signed transaction from our stored PSBT and one signature per request (`in:<i>`):
234
+ * ECDSA as a DER signature with SIGHASH_ALL (partial signature), Schnorr as a 64-byte
235
+ * key-path signature. Nothing but the signature bytes comes from outside.
236
+ */
237
+ function assembleTx(base64, network, requests, signatures) {
238
+ const psbt = parsePsbt(base64, network);
239
+ if (requests.length !== psbt.inputCount) {
240
+ throw new error_1.SigningError('SIGNING_FAILED', 'one signing request per input is required');
241
+ }
242
+ requests.forEach((request, index) => {
243
+ const signature = signatures.find((s) => s.requestId === request.id);
244
+ if (!signature || signature.bytes.length !== 64) {
245
+ throw new error_1.SigningError('SIGNING_FAILED', `missing signature for request ${request.id}`);
246
+ }
247
+ if (request.scheme === 'secp256k1-schnorr') {
248
+ psbt.updateInput(index, { tapKeySig: signature.bytes });
249
+ }
250
+ else {
251
+ psbt.updateInput(index, {
252
+ partialSig: [
253
+ {
254
+ pubkey: request.publicKey,
255
+ signature: sdk_1.bitcoin.script.signature.encode(signature.bytes, signed_psbt_1.SIGHASH_ALL),
256
+ },
257
+ ],
258
+ });
259
+ }
260
+ });
261
+ try {
262
+ psbt.finalizeAllInputs();
263
+ }
264
+ catch {
265
+ throw new error_1.SigningError('SIGNING_FAILED', 'the PSBT could not be finalized');
266
+ }
267
+ // The absurd-fee guard ran when the transaction was built; bitcoinjs' own check is off.
268
+ const tx = psbt.extractTransaction(true);
269
+ return { hex: tx.toHex(), txid: tx.getId() };
270
+ }
271
+ /**
272
+ * The signatures of a PSBT signed elsewhere, synchronous and I/O-free. The
273
+ * signed PSBT is untrusted (`signed-psbt.ts`): parsed strictly, it must carry exactly our
274
+ * unsigned transaction (anti-tamper) and nothing that could change the spend. From each
275
+ * input only the signature for the request's key is taken (partial or final), and the core
276
+ * then verifies it against the stored digest and key. An input without one is left out (a
277
+ * partial set). Every refusal is `INVALID_INTENT` with a fixed text.
278
+ */
279
+ function signaturesFromPsbt(storedBase64, signedBase64, network, requests) {
280
+ const stored = parsePsbt(storedBase64, network);
281
+ if (requests.length !== stored.inputCount) {
282
+ throw new error_1.SigningError('SIGNING_FAILED', 'one signing request per input is required');
283
+ }
284
+ const signed = (0, signed_psbt_1.parseSigned)(signedBase64, stored, storedBase64, network);
285
+ if (!(0, bytes_1.equalBytes)(unsignedTxOf(signed), unsignedTxOf(stored))) {
286
+ throw (0, signed_psbt_1.signedPsbtError)('is not the prepared transaction');
287
+ }
288
+ (0, signed_psbt_1.assertSignedFields)(signed, stored);
289
+ const bundles = [];
290
+ requests.forEach((request, index) => {
291
+ const input = signed.data.inputs[index];
292
+ if (request.scheme === 'secp256k1-schnorr') {
293
+ const signature = (0, signed_psbt_1.schnorrSignatureOf)(input);
294
+ if (signature)
295
+ bundles.push({ requestId: request.id, bytes: Uint8Array.from(signature) });
296
+ return;
297
+ }
298
+ const ours = stored.data.inputs[index];
299
+ const signature = (0, signed_psbt_1.ecdsaSignatureOf)(request.publicKey, input, ours);
300
+ if (signature) {
301
+ bundles.push({
302
+ requestId: request.id,
303
+ bytes: Uint8Array.from(signature),
304
+ recovery: recoveryOf(signature, request),
305
+ });
306
+ }
307
+ });
308
+ return bundles;
309
+ }
310
+ /** The recovery bit that recovers the request's key (0 when neither does: it then fails verification). */
311
+ function recoveryOf(signature, request) {
312
+ for (const bit of [0, 1]) {
313
+ try {
314
+ const key = secp256k1_1.secp256k1.Signature.fromCompact(signature)
315
+ .addRecoveryBit(bit)
316
+ .recoverPublicKey(request.payload)
317
+ .toRawBytes(true);
318
+ if ((0, bytes_1.equalBytes)(key, request.publicKey))
319
+ return bit;
320
+ }
321
+ catch {
322
+ // Try the other bit.
323
+ }
324
+ }
325
+ return 0;
326
+ }
327
+ /** bitcoinjs network parameters for a network's address parameters. */
328
+ function networkOf(params) {
329
+ const base = params.bech32 === 'bc'
330
+ ? sdk_1.bitcoin.networks.bitcoin
331
+ : params.bech32 === 'bcrt'
332
+ ? sdk_1.bitcoin.networks.regtest
333
+ : sdk_1.bitcoin.networks.testnet;
334
+ return {
335
+ ...base,
336
+ bech32: params.bech32,
337
+ pubKeyHash: params.pubKeyHash,
338
+ scriptHash: params.scriptHash,
339
+ };
340
+ }
341
+ /**
342
+ * The txid of untrusted transaction hex, read linearly (`rawtx.ts`);
343
+ * `INVALID_INTENT` when it does not decode or holds more than a chain can.
344
+ */
345
+ function txidOfHex(hex) {
346
+ const tx = (0, rawtx_1.readTxHex)(hex);
347
+ if (!tx) {
348
+ throw new error_1.ValidationError('INVALID_INTENT', 'a transaction does not decode');
349
+ }
350
+ return tx.txid;
351
+ }
352
+ /**
353
+ * The txid `hex` would have with canonical p2pkh scriptSigs: per input, the last push
354
+ * that is a strict-DER SIGHASH_ALL signature (normalized to low-s) and the last push that
355
+ * is a 33-byte key hashing to `pubkeyHash`, re-pushed minimally as `<sig> <key>`. A third
356
+ * party without the key can change only that encoding (BIP66 strict DER is consensus; the
357
+ * sighash byte is signed), so this equals our Attempt's txid exactly when `hex` is a
358
+ * malleated copy of it: same version, lock time, outpoints, sequences and outputs.
359
+ * `undefined` when an input has a witness or no such pushes.
360
+ */
361
+ function canonicalTwinTxid(hex, pubkeyHash) {
362
+ // Read linearly; only each input's short script goes through bitcoinjs.
363
+ const tx = (0, rawtx_1.readTxHex)(hex);
364
+ if (!tx || tx.hasWitness)
365
+ return undefined;
366
+ if (tx.inputs.length === 0)
367
+ return tx.txid;
368
+ const half = secp256k1_1.secp256k1.CURVE.n >> 1n;
369
+ const scripts = [];
370
+ for (const input of tx.inputs) {
371
+ const chunks = sdk_1.bitcoin.script.decompile(input.script);
372
+ if (!chunks)
373
+ return undefined;
374
+ let signature;
375
+ let key;
376
+ for (const chunk of chunks) {
377
+ if (typeof chunk === 'number')
378
+ continue;
379
+ if (chunk.length === 33 && (0, bytes_1.equalBytes)((0, address_1.hash160)(chunk), pubkeyHash))
380
+ key = chunk;
381
+ try {
382
+ const decoded = sdk_1.bitcoin.script.signature.decode(chunk);
383
+ if (decoded.hashType === signed_psbt_1.SIGHASH_ALL)
384
+ signature = decoded.signature;
385
+ }
386
+ catch {
387
+ // Not a signature push.
388
+ }
389
+ }
390
+ if (!signature || !key)
391
+ return undefined;
392
+ const r = signature.slice(0, 32);
393
+ let s = (0, utils_1.bytesToNumberBE)(signature.slice(32));
394
+ if (s > half)
395
+ s = secp256k1_1.secp256k1.CURVE.n - s;
396
+ const low = (0, bytes_1.concatBytes)(r, (0, utils_1.numberToBytesBE)(s, 32));
397
+ scripts.push(sdk_1.bitcoin.script.compile([sdk_1.bitcoin.script.signature.encode(low, signed_psbt_1.SIGHASH_ALL), key]));
398
+ }
399
+ // The serialization without witness data, with the canonical scripts in place.
400
+ const parts = [(0, rawtx_1.writeU32)(tx.version), (0, rawtx_1.writeSize)(tx.inputs.length)];
401
+ tx.inputs.forEach((input, index) => {
402
+ const script = scripts[index];
403
+ parts.push(input.hash, (0, rawtx_1.writeU32)(input.vout), (0, rawtx_1.writeSize)(script.length), script, (0, rawtx_1.writeU32)(input.sequence));
404
+ });
405
+ parts.push(tx.outputBytes, (0, rawtx_1.writeU32)(tx.locktime));
406
+ return (0, rawtx_1.txidOfParts)(parts);
407
+ }
408
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../src/adapters/utxo/codec.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The bitcoinjs-lib codec: the unsigned transaction and its PSBT (BIP174), the\n * per-input signature hashes (legacy, BIP143 for segwit v0, BIP341 key path for taproot),\n * assembly of the signed transaction, and the signatures of a PSBT signed elsewhere. The\n * driver persists only the PSBT (base64) and plain data, never an SDK object, and\n * re-parses it here.\n */\nimport { bytesToNumberBE, numberToBytesBE } from '@noble/curves/abstract/utils';\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport { SigningError, ValidationError, isCryptoAioError } from '../../core/errors/error';\nimport type { SignatureBundle, SigningRequest } from '../../core/signing/types';\nimport { concatBytes, equalBytes, fromHex, toHex } from '../../core/util/bytes';\nimport { hash160, outputScript, type WalletAddress } from './address';\nimport type { PlannedOutput, Spendable } from './coinselect';\nimport { readTx, readTxHex, txidOfParts, writeSize, writeU32 } from './rawtx';\nimport { bitcoin, useNobleEcc, type Network, type Psbt } from './sdk';\nimport {\n SIGHASH_ALL,\n SIGHASH_DEFAULT,\n assertSignedFields,\n ecdsaSignatureOf,\n parseSigned,\n schnorrSignatureOf,\n signedPsbtError,\n type PsbtInput,\n} from './signed-psbt';\n\n/** The sighash types each input signs with (ALL; DEFAULT for p2tr), defined with the reader. */\nexport { SIGHASH_ALL, SIGHASH_DEFAULT } from './signed-psbt';\n\n/** BIP125 opt-in (and relative lock time disabled); `0xfffffffe` when RBF is off. */\nexport const SEQUENCE_RBF = 0xfffffffd;\nexport const SEQUENCE_FINAL_LOCKTIME = 0xfffffffe;\n\n/**\n * A previous transaction, decoded strictly once: its txid, its outputs, and\n * its bytes without the witness (Bitcoin Core's `TX_NO_WITNESS` form, which BIP174\n * `non_witness_utxo` carries). Only `previousTxOf` makes one, so its txid is the hash of its\n * bytes: they authenticate themselves.\n */\nexport interface PreviousTx {\n readonly txid: string;\n readonly outputs: readonly { readonly value: bigint; readonly script: Uint8Array }[];\n readonly bytes: Uint8Array;\n}\n\nexport interface PlannedInput extends Spendable {\n /**\n * The previous transaction to carry in the PSBT (BIP174 `non_witness_utxo`), checked\n * against the input's outpoint, value and script: required for p2pkh, and added for segwit\n * v0 so hardware wallets can check the input amounts. Never on p2tr.\n */\n readonly prevTx?: PreviousTx;\n}\n\nexport interface BuiltTx {\n /** The PSBT, base64 (the signing payload a cold signer receives). */\n readonly psbt: string;\n /** One signature hash per input, in input order. */\n readonly digests: readonly Uint8Array[];\n /** The txid, when every input is witness-type (it is then fixed before signing). */\n readonly txid?: string;\n}\n\n/** Bitcoin Core's `MAX_MONEY` (21 million bitcoin): no amount is larger. */\nconst MAX_MONEY = 2_100_000_000_000_000n;\nconst TXID = /^[0-9a-f]{64}$/;\n\nconst isU32 = (n: number): boolean => Number.isInteger(n) && n >= 0 && n <= 0xffffffff;\nconst isMoney = (value: bigint): boolean =>\n typeof value === 'bigint' && value >= 0n && value <= MAX_MONEY;\n\n/** Internal byte order of a txid (bitcoinjs `addInput` takes the reversed display hex). */\nconst txidBytes = (txid: string): Uint8Array => fromHex(txid).reverse();\n\n/**\n * Untrusted transaction hex (a node's answer) as a previous transaction, read in one linear\n * pass by `rawtx.ts` (bitcoinjs' decoder is quadratic), capped before decoding\n * and at the million bytes without witness a chain can hold; `undefined` when it\n * does not decode.\n */\nexport function previousTxOf(hex: string): PreviousTx | undefined {\n const tx = readTxHex(hex);\n if (!tx) return undefined;\n return {\n txid: tx.txid,\n // Copies: a cached previous transaction keeps no view of the bytes with the witness.\n outputs: tx.outputs.map((output) => ({\n value: output.value,\n script: Uint8Array.from(output.script),\n })),\n bytes: tx.hasWitness ? tx.stripped() : Uint8Array.from(tx.stripped()),\n };\n}\n\n/**\n * Every integer `buildTx` encodes fits its field, never wrapped; anything else is refused\n * with a fixed text that names no value (bitcoinjs' own check quotes it).\n */\nfunction assertEncodable(\n inputs: readonly PlannedInput[],\n outputs: readonly PlannedOutput[],\n sequence: number,\n): void {\n if (!isU32(sequence)) {\n throw new ValidationError('INVALID_INTENT', 'the input sequence is out of range');\n }\n const outpoints = new Set<string>();\n for (const input of inputs) {\n if (!TXID.test(input.txid) || !isU32(input.vout)) {\n throw new ValidationError('INVALID_INTENT', 'an input outpoint is out of range');\n }\n const outpoint = `${input.txid}:${input.vout}`;\n if (outpoints.has(outpoint)) {\n throw new ValidationError('INVALID_INTENT', 'an input outpoint is listed twice');\n }\n outpoints.add(outpoint);\n if (!isMoney(input.value)) {\n throw new ValidationError('INVALID_AMOUNT', 'an input value is out of range');\n }\n }\n for (const output of outputs) {\n if (!isMoney(output.value)) {\n throw new ValidationError('INVALID_AMOUNT', 'an output value is out of range');\n }\n }\n}\n\nconst PREVIOUS_MISMATCH = 'a previous transaction does not match its outpoint';\n\n/**\n * Whether `error` is `assertPrevious`'s refusal: a previous transaction whose output\n * disagrees with the input's txid, value or script, or that has no such output. A caller\n * that read those from a provider maps it to the provider.\n */\nexport function isPreviousTxRefusal(error: unknown): boolean {\n return isCryptoAioError(error, 'INVALID_INTENT') && error.message === PREVIOUS_MISMATCH;\n}\n\n/**\n * An input is what its previous transaction says: `prev` is the outpoint's\n * transaction (its txid, which the bytes hash to), and it has the output, with the input's\n * value and the wallet's script. Otherwise `INVALID_INTENT` (`isPreviousTxRefusal`).\n */\nexport function assertPrevious(\n prev: PreviousTx,\n input: Spendable,\n script: Uint8Array,\n): void {\n const output = prev.outputs[input.vout];\n if (\n prev.txid !== input.txid ||\n !output ||\n output.value !== input.value ||\n !equalBytes(output.script, script)\n ) {\n throw new ValidationError('INVALID_INTENT', PREVIOUS_MISMATCH);\n }\n}\n\n/**\n * The unsigned transaction (version 2, lock time 0) and its PSBT, spending `inputs` of the\n * wallet to `outputs` in the given order.\n */\nexport function buildTx(\n network: Network,\n wallet: WalletAddress,\n inputs: readonly PlannedInput[],\n outputs: readonly PlannedOutput[],\n sequence: number,\n): BuiltTx {\n assertEncodable(inputs, outputs, sequence);\n useNobleEcc();\n const tx = new bitcoin.Transaction();\n tx.version = 2;\n tx.locktime = 0;\n for (const input of inputs) tx.addInput(txidBytes(input.txid), input.vout, sequence);\n for (const output of outputs) tx.addOutput(output.script, output.value);\n\n const psbt = new bitcoin.Psbt({ network });\n psbt.setVersion(2);\n psbt.setLocktime(0);\n for (const input of inputs) {\n if (wallet.type === 'p2pkh' && input.prevTx === undefined) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'a p2pkh input needs its verified previous transaction',\n );\n }\n if (input.prevTx !== undefined) assertPrevious(input.prevTx, input, wallet.script);\n const prevTx = input.prevTx?.bytes;\n psbt.addInput({\n hash: input.txid,\n index: input.vout,\n sequence,\n ...(wallet.type === 'p2pkh'\n ? {}\n : { witnessUtxo: { script: wallet.script, value: input.value } }),\n ...(prevTx !== undefined && wallet.type !== 'p2tr'\n ? { nonWitnessUtxo: prevTx }\n : {}),\n ...(wallet.redeemScript ? { redeemScript: wallet.redeemScript } : {}),\n ...(wallet.type === 'p2tr' ? { tapInternalKey: wallet.publicKey } : {}),\n });\n }\n for (const output of outputs)\n psbt.addOutput({ script: output.script, value: output.value });\n if (!equalBytes(unsignedTxOf(psbt), tx.toBuffer())) {\n throw new SigningError(\n 'SIGNING_FAILED',\n 'the PSBT does not encode the built transaction',\n );\n }\n\n const digests = inputs.map((input, index) => {\n switch (wallet.type) {\n case 'p2pkh':\n return tx.hashForSignature(index, wallet.script, SIGHASH_ALL);\n case 'p2wpkh':\n case 'p2sh-p2wpkh':\n // BIP143: the script code of a p2wpkh program is the p2pkh script of its key hash.\n return tx.hashForWitnessV0(\n index,\n outputScript('p2pkh', hash160(wallet.publicKey)),\n input.value,\n SIGHASH_ALL,\n );\n case 'p2tr':\n return tx.hashForWitnessV1(\n index,\n inputs.map(() => wallet.script),\n inputs.map((i) => i.value),\n SIGHASH_DEFAULT,\n );\n }\n });\n\n let txid: string | undefined;\n if (wallet.type !== 'p2pkh') {\n const final = tx.clone();\n if (wallet.redeemScript) {\n const scriptSig = bitcoin.script.compile([wallet.redeemScript]);\n for (let i = 0; i < inputs.length; i++) final.setInputScript(i, scriptSig);\n }\n txid = final.getId();\n }\n return { psbt: psbt.toBase64(), digests, ...(txid !== undefined ? { txid } : {}) };\n}\n\n/** The unsigned transaction a PSBT carries (BIP174 `PSBT_GLOBAL_UNSIGNED_TX`). */\nexport function unsignedTxOf(psbt: Psbt): Uint8Array {\n return psbt.data.globalMap.unsignedTx.toBuffer();\n}\n\nexport function parsePsbt(base64: string, network: Network): Psbt {\n // Parsing reads taproot fields and output addresses, which need the ECC backend.\n useNobleEcc();\n try {\n return bitcoin.Psbt.fromBase64(base64, { network });\n } catch {\n throw new ValidationError('INVALID_INTENT', 'the payload is not a valid PSBT');\n }\n}\n\nexport interface PsbtTxView {\n readonly inputs: readonly {\n readonly outpoint: string;\n readonly txid: string;\n readonly vout: number;\n readonly value: bigint;\n readonly sequence: number;\n }[];\n readonly outputs: readonly { readonly script: Uint8Array; readonly value: bigint }[];\n}\n\n/** Inputs (with the values the PSBT commits to) and outputs of our own stored PSBT. */\nexport function viewPsbt(base64: string, network: Network): PsbtTxView {\n const psbt = parsePsbt(base64, network);\n const inputs = psbt.txInputs.map((input, index) => {\n const data = psbt.data.inputs[index];\n const txid = toHex(Uint8Array.from(input.hash).reverse());\n let value: bigint;\n if (data?.witnessUtxo) value = data.witnessUtxo.value;\n else if (data?.nonWitnessUtxo) {\n // Read linearly, though `buildTx` checked it: a real one can be large, and\n // bitcoinjs' decoder is quadratic.\n const prev = readTx(data.nonWitnessUtxo);\n const output = prev?.txid === txid ? prev.outputs[input.index] : undefined;\n if (!output) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'a PSBT input does not match its previous transaction',\n );\n }\n value = output.value;\n } else throw new ValidationError('INVALID_INTENT', 'a PSBT input has no UTXO');\n return {\n outpoint: `${txid}:${input.index}`,\n txid,\n vout: input.index,\n value,\n sequence: input.sequence ?? 0xffffffff,\n };\n });\n const outputs = psbt.txOutputs.map((output) => ({\n script: output.script,\n value: output.value,\n }));\n return { inputs, outputs };\n}\n\n/**\n * The signed transaction from our stored PSBT and one signature per request (`in:<i>`):\n * ECDSA as a DER signature with SIGHASH_ALL (partial signature), Schnorr as a 64-byte\n * key-path signature. Nothing but the signature bytes comes from outside.\n */\nexport function assembleTx(\n base64: string,\n network: Network,\n requests: readonly SigningRequest[],\n signatures: readonly SignatureBundle[],\n): { readonly hex: string; readonly txid: string } {\n const psbt = parsePsbt(base64, network);\n if (requests.length !== psbt.inputCount) {\n throw new SigningError('SIGNING_FAILED', 'one signing request per input is required');\n }\n requests.forEach((request, index) => {\n const signature = signatures.find((s) => s.requestId === request.id);\n if (!signature || signature.bytes.length !== 64) {\n throw new SigningError(\n 'SIGNING_FAILED',\n `missing signature for request ${request.id}`,\n );\n }\n if (request.scheme === 'secp256k1-schnorr') {\n psbt.updateInput(index, { tapKeySig: signature.bytes });\n } else {\n psbt.updateInput(index, {\n partialSig: [\n {\n pubkey: request.publicKey,\n signature: bitcoin.script.signature.encode(signature.bytes, SIGHASH_ALL),\n },\n ],\n });\n }\n });\n try {\n psbt.finalizeAllInputs();\n } catch {\n throw new SigningError('SIGNING_FAILED', 'the PSBT could not be finalized');\n }\n // The absurd-fee guard ran when the transaction was built; bitcoinjs' own check is off.\n const tx = psbt.extractTransaction(true);\n return { hex: tx.toHex(), txid: tx.getId() };\n}\n\n/**\n * The signatures of a PSBT signed elsewhere, synchronous and I/O-free. The\n * signed PSBT is untrusted (`signed-psbt.ts`): parsed strictly, it must carry exactly our\n * unsigned transaction (anti-tamper) and nothing that could change the spend. From each\n * input only the signature for the request's key is taken (partial or final), and the core\n * then verifies it against the stored digest and key. An input without one is left out (a\n * partial set). Every refusal is `INVALID_INTENT` with a fixed text.\n */\nexport function signaturesFromPsbt(\n storedBase64: string,\n signedBase64: string,\n network: Network,\n requests: readonly SigningRequest[],\n): SignatureBundle[] {\n const stored = parsePsbt(storedBase64, network);\n if (requests.length !== stored.inputCount) {\n throw new SigningError('SIGNING_FAILED', 'one signing request per input is required');\n }\n const signed = parseSigned(signedBase64, stored, storedBase64, network);\n if (!equalBytes(unsignedTxOf(signed), unsignedTxOf(stored))) {\n throw signedPsbtError('is not the prepared transaction');\n }\n assertSignedFields(signed, stored);\n const bundles: SignatureBundle[] = [];\n requests.forEach((request, index) => {\n const input = signed.data.inputs[index] as PsbtInput;\n if (request.scheme === 'secp256k1-schnorr') {\n const signature = schnorrSignatureOf(input);\n if (signature)\n bundles.push({ requestId: request.id, bytes: Uint8Array.from(signature) });\n return;\n }\n const ours = stored.data.inputs[index] as PsbtInput;\n const signature = ecdsaSignatureOf(request.publicKey, input, ours);\n if (signature) {\n bundles.push({\n requestId: request.id,\n bytes: Uint8Array.from(signature),\n recovery: recoveryOf(signature, request),\n });\n }\n });\n return bundles;\n}\n\n/** The recovery bit that recovers the request's key (0 when neither does: it then fails verification). */\nfunction recoveryOf(signature: Uint8Array, request: SigningRequest): number {\n for (const bit of [0, 1]) {\n try {\n const key = secp256k1.Signature.fromCompact(signature)\n .addRecoveryBit(bit)\n .recoverPublicKey(request.payload)\n .toRawBytes(true);\n if (equalBytes(key, request.publicKey)) return bit;\n } catch {\n // Try the other bit.\n }\n }\n return 0;\n}\n\n/** bitcoinjs network parameters for a network's address parameters. */\nexport function networkOf(params: {\n bech32: string;\n pubKeyHash: number;\n scriptHash: number;\n}): Network {\n const base =\n params.bech32 === 'bc'\n ? bitcoin.networks.bitcoin\n : params.bech32 === 'bcrt'\n ? bitcoin.networks.regtest\n : bitcoin.networks.testnet;\n return {\n ...base,\n bech32: params.bech32,\n pubKeyHash: params.pubKeyHash,\n scriptHash: params.scriptHash,\n };\n}\n\n/**\n * The txid of untrusted transaction hex, read linearly (`rawtx.ts`);\n * `INVALID_INTENT` when it does not decode or holds more than a chain can.\n */\nexport function txidOfHex(hex: string): string {\n const tx = readTxHex(hex);\n if (!tx) {\n throw new ValidationError('INVALID_INTENT', 'a transaction does not decode');\n }\n return tx.txid;\n}\n\n/**\n * The txid `hex` would have with canonical p2pkh scriptSigs: per input, the last push\n * that is a strict-DER SIGHASH_ALL signature (normalized to low-s) and the last push that\n * is a 33-byte key hashing to `pubkeyHash`, re-pushed minimally as `<sig> <key>`. A third\n * party without the key can change only that encoding (BIP66 strict DER is consensus; the\n * sighash byte is signed), so this equals our Attempt's txid exactly when `hex` is a\n * malleated copy of it: same version, lock time, outpoints, sequences and outputs.\n * `undefined` when an input has a witness or no such pushes.\n */\nexport function canonicalTwinTxid(\n hex: string,\n pubkeyHash: Uint8Array,\n): string | undefined {\n // Read linearly; only each input's short script goes through bitcoinjs.\n const tx = readTxHex(hex);\n if (!tx || tx.hasWitness) return undefined;\n if (tx.inputs.length === 0) return tx.txid;\n const half = secp256k1.CURVE.n >> 1n;\n const scripts: Uint8Array[] = [];\n for (const input of tx.inputs) {\n const chunks = bitcoin.script.decompile(input.script);\n if (!chunks) return undefined;\n let signature: Uint8Array | undefined;\n let key: Uint8Array | undefined;\n for (const chunk of chunks) {\n if (typeof chunk === 'number') continue;\n if (chunk.length === 33 && equalBytes(hash160(chunk), pubkeyHash)) key = chunk;\n try {\n const decoded = bitcoin.script.signature.decode(chunk);\n if (decoded.hashType === SIGHASH_ALL) signature = decoded.signature;\n } catch {\n // Not a signature push.\n }\n }\n if (!signature || !key) return undefined;\n const r = signature.slice(0, 32);\n let s = bytesToNumberBE(signature.slice(32));\n if (s > half) s = secp256k1.CURVE.n - s;\n const low = concatBytes(r, numberToBytesBE(s, 32));\n scripts.push(\n bitcoin.script.compile([bitcoin.script.signature.encode(low, SIGHASH_ALL), key]),\n );\n }\n // The serialization without witness data, with the canonical scripts in place.\n const parts: Uint8Array[] = [writeU32(tx.version), writeSize(tx.inputs.length)];\n tx.inputs.forEach((input, index) => {\n const script = scripts[index] as Uint8Array;\n parts.push(\n input.hash,\n writeU32(input.vout),\n writeSize(script.length),\n script,\n writeU32(input.sequence),\n );\n });\n parts.push(tx.outputBytes, writeU32(tx.locktime));\n return txidOfParts(parts);\n}\n"]}
@@ -0,0 +1,48 @@
1
+ import type { CoinSelectionStrategy } from './network';
2
+ import type { UtxoAddressType } from './types';
3
+ /** Bitcoin Core's `MAX_STANDARD_TX_WEIGHT` (policy.h). */
4
+ export declare const MAX_STANDARD_WEIGHT = 400000;
5
+ /** The weight of a transaction spending `inputs` inputs of one type to these outputs. */
6
+ export declare function txWeight(inputType: UtxoAddressType, inputs: number, outputScriptLengths: readonly number[]): number;
7
+ export declare const vsizeOf: (weight: number) => number;
8
+ export interface Spendable {
9
+ /** `txid:vout`. */
10
+ readonly outpoint: string;
11
+ readonly txid: string;
12
+ readonly vout: number;
13
+ readonly value: bigint;
14
+ }
15
+ export interface PlannedOutput {
16
+ readonly script: Uint8Array;
17
+ readonly value: bigint;
18
+ }
19
+ export interface SelectionRequest {
20
+ /** Eligible outputs of the wallet (already filtered for reservations and confirmations). */
21
+ readonly candidates: readonly Spendable[];
22
+ /** Inputs that must be spent (an RBF replacement keeps every earlier input). */
23
+ readonly required?: readonly Spendable[];
24
+ readonly outputs: readonly PlannedOutput[];
25
+ readonly changeScript: Uint8Array;
26
+ readonly inputType: UtxoAddressType;
27
+ /** sat/kvB. */
28
+ readonly rate: bigint;
29
+ readonly dustRelayFee: bigint;
30
+ readonly strategy: CoinSelectionStrategy;
31
+ }
32
+ export interface Selection {
33
+ readonly ok: true;
34
+ readonly inputs: readonly Spendable[];
35
+ readonly change: bigint;
36
+ readonly fee: bigint;
37
+ readonly vsize: number;
38
+ }
39
+ export interface Shortfall {
40
+ readonly ok: false;
41
+ readonly required: bigint;
42
+ readonly available: bigint;
43
+ /** The fee of spending every eligible output (for an estimate that cannot be met). */
44
+ readonly fee: bigint;
45
+ readonly vsize: number;
46
+ }
47
+ /** Picks inputs for the outputs at `rate`; deterministic for the same candidates. */
48
+ export declare function selectCoins(request: SelectionRequest): Selection | Shortfall;