crypto-aio 0.0.3 → 0.2.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 (700) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/README.md +163 -13
  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 +386 -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 +175 -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 +139 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +103 -0
  82. package/dist/adapters/evm/fees.js +277 -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 +12 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +65 -0
  88. package/dist/adapters/evm/network.js +150 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +35 -0
  91. package/dist/adapters/evm/plugin.js +150 -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 +370 -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 +83 -0
  103. package/dist/adapters/evm/reader.js +326 -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 +10 -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 +265 -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 +26 -0
  115. package/dist/adapters/evm/web3-client.js +176 -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 +556 -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 +77 -0
  133. package/dist/adapters/solana/fees.js +214 -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/message.d.ts +15 -0
  148. package/dist/adapters/solana/message.js +120 -0
  149. package/dist/adapters/solana/message.js.map +1 -0
  150. package/dist/adapters/solana/network.d.ts +24 -0
  151. package/dist/adapters/solana/network.js +95 -0
  152. package/dist/adapters/solana/network.js.map +1 -0
  153. package/dist/adapters/solana/plugin.d.ts +18 -0
  154. package/dist/adapters/solana/plugin.js +44 -0
  155. package/dist/adapters/solana/plugin.js.map +1 -0
  156. package/dist/adapters/solana/presets.d.ts +2 -0
  157. package/dist/adapters/solana/presets.js +77 -0
  158. package/dist/adapters/solana/presets.js.map +1 -0
  159. package/dist/adapters/solana/programs.d.ts +44 -0
  160. package/dist/adapters/solana/programs.js +159 -0
  161. package/dist/adapters/solana/programs.js.map +1 -0
  162. package/dist/adapters/solana/proofs.d.ts +56 -0
  163. package/dist/adapters/solana/proofs.js +540 -0
  164. package/dist/adapters/solana/proofs.js.map +1 -0
  165. package/dist/adapters/solana/reader.d.ts +82 -0
  166. package/dist/adapters/solana/reader.js +326 -0
  167. package/dist/adapters/solana/reader.js.map +1 -0
  168. package/dist/adapters/solana/rpc.d.ts +102 -0
  169. package/dist/adapters/solana/rpc.js +301 -0
  170. package/dist/adapters/solana/rpc.js.map +1 -0
  171. package/dist/adapters/solana/tokens.d.ts +7 -0
  172. package/dist/adapters/solana/tokens.js +19 -0
  173. package/dist/adapters/solana/tokens.js.map +1 -0
  174. package/dist/adapters/solana/types.d.ts +124 -0
  175. package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
  176. package/dist/adapters/solana/types.js.map +1 -0
  177. package/dist/adapters/solana/web3.d.ts +5 -0
  178. package/dist/adapters/solana/web3.js +61 -0
  179. package/dist/adapters/solana/web3.js.map +1 -0
  180. package/dist/adapters/solana/wire.d.ts +62 -0
  181. package/dist/adapters/solana/wire.js +168 -0
  182. package/dist/adapters/solana/wire.js.map +1 -0
  183. package/dist/adapters/ton/address.d.ts +43 -0
  184. package/dist/adapters/ton/address.js +168 -0
  185. package/dist/adapters/ton/address.js.map +1 -0
  186. package/dist/adapters/ton/api.d.ts +344 -0
  187. package/dist/adapters/ton/api.js +942 -0
  188. package/dist/adapters/ton/api.js.map +1 -0
  189. package/dist/adapters/ton/builder.d.ts +18 -0
  190. package/dist/adapters/ton/builder.js +701 -0
  191. package/dist/adapters/ton/builder.js.map +1 -0
  192. package/dist/adapters/ton/chains.d.ts +16 -0
  193. package/dist/adapters/ton/chains.js +39 -0
  194. package/dist/adapters/ton/chains.js.map +1 -0
  195. package/dist/adapters/ton/decode.d.ts +43 -0
  196. package/dist/adapters/ton/decode.js +219 -0
  197. package/dist/adapters/ton/decode.js.map +1 -0
  198. package/dist/adapters/ton/driver.d.ts +10 -0
  199. package/dist/adapters/ton/driver.js +117 -0
  200. package/dist/adapters/ton/driver.js.map +1 -0
  201. package/dist/adapters/ton/errors.d.ts +36 -0
  202. package/dist/adapters/ton/errors.js +89 -0
  203. package/dist/adapters/ton/errors.js.map +1 -0
  204. package/dist/adapters/ton/fees.d.ts +28 -0
  205. package/dist/adapters/ton/fees.js +121 -0
  206. package/dist/adapters/ton/fees.js.map +1 -0
  207. package/dist/adapters/ton/index.d.ts +16 -0
  208. package/dist/adapters/ton/index.js +9 -0
  209. package/dist/adapters/ton/index.js.map +1 -0
  210. package/dist/adapters/ton/messages.d.ts +157 -0
  211. package/dist/adapters/ton/messages.js +397 -0
  212. package/dist/adapters/ton/messages.js.map +1 -0
  213. package/dist/adapters/ton/native-client.d.ts +10 -0
  214. package/dist/adapters/ton/native-client.js +47 -0
  215. package/dist/adapters/ton/native-client.js.map +1 -0
  216. package/dist/adapters/ton/network.d.ts +58 -0
  217. package/dist/adapters/ton/network.js +207 -0
  218. package/dist/adapters/ton/network.js.map +1 -0
  219. package/dist/adapters/ton/plugin.d.ts +24 -0
  220. package/dist/adapters/ton/plugin.js +57 -0
  221. package/dist/adapters/ton/plugin.js.map +1 -0
  222. package/dist/adapters/ton/presets.d.ts +6 -0
  223. package/dist/adapters/ton/presets.js +94 -0
  224. package/dist/adapters/ton/presets.js.map +1 -0
  225. package/dist/adapters/ton/proofs.d.ts +66 -0
  226. package/dist/adapters/ton/proofs.js +755 -0
  227. package/dist/adapters/ton/proofs.js.map +1 -0
  228. package/dist/adapters/ton/reader.d.ts +235 -0
  229. package/dist/adapters/ton/reader.js +976 -0
  230. package/dist/adapters/ton/reader.js.map +1 -0
  231. package/dist/adapters/ton/tokens.d.ts +10 -0
  232. package/dist/adapters/ton/tokens.js +27 -0
  233. package/dist/adapters/ton/tokens.js.map +1 -0
  234. package/dist/adapters/ton/trace.d.ts +74 -0
  235. package/dist/adapters/ton/trace.js +303 -0
  236. package/dist/adapters/ton/trace.js.map +1 -0
  237. package/dist/adapters/ton/types.d.ts +105 -0
  238. package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
  239. package/dist/adapters/ton/types.js.map +1 -0
  240. package/dist/adapters/ton/wallets.d.ts +86 -0
  241. package/dist/adapters/ton/wallets.js +373 -0
  242. package/dist/adapters/ton/wallets.js.map +1 -0
  243. package/dist/adapters/tron/abi.d.ts +41 -0
  244. package/dist/adapters/tron/abi.js +112 -0
  245. package/dist/adapters/tron/abi.js.map +1 -0
  246. package/dist/adapters/tron/address.d.ts +20 -0
  247. package/dist/adapters/tron/address.js +110 -0
  248. package/dist/adapters/tron/address.js.map +1 -0
  249. package/dist/adapters/tron/builder.d.ts +12 -0
  250. package/dist/adapters/tron/builder.js +569 -0
  251. package/dist/adapters/tron/builder.js.map +1 -0
  252. package/dist/adapters/tron/chains.d.ts +12 -0
  253. package/dist/adapters/tron/chains.js +35 -0
  254. package/dist/adapters/tron/chains.js.map +1 -0
  255. package/dist/adapters/tron/codec.d.ts +10 -0
  256. package/dist/adapters/tron/codec.js +322 -0
  257. package/dist/adapters/tron/codec.js.map +1 -0
  258. package/dist/adapters/tron/decode.d.ts +52 -0
  259. package/dist/adapters/tron/decode.js +280 -0
  260. package/dist/adapters/tron/decode.js.map +1 -0
  261. package/dist/adapters/tron/driver.d.ts +12 -0
  262. package/dist/adapters/tron/driver.js +106 -0
  263. package/dist/adapters/tron/driver.js.map +1 -0
  264. package/dist/adapters/tron/errors.d.ts +74 -0
  265. package/dist/adapters/tron/errors.js +261 -0
  266. package/dist/adapters/tron/errors.js.map +1 -0
  267. package/dist/adapters/tron/fees.d.ts +49 -0
  268. package/dist/adapters/tron/fees.js +166 -0
  269. package/dist/adapters/tron/fees.js.map +1 -0
  270. package/dist/adapters/tron/http.d.ts +173 -0
  271. package/dist/adapters/tron/http.js +729 -0
  272. package/dist/adapters/tron/http.js.map +1 -0
  273. package/dist/adapters/tron/index.d.ts +16 -0
  274. package/dist/adapters/tron/index.js +15 -0
  275. package/dist/adapters/tron/index.js.map +1 -0
  276. package/dist/adapters/tron/network.d.ts +44 -0
  277. package/dist/adapters/tron/network.js +163 -0
  278. package/dist/adapters/tron/network.js.map +1 -0
  279. package/dist/adapters/tron/plugin.d.ts +17 -0
  280. package/dist/adapters/tron/plugin.js +39 -0
  281. package/dist/adapters/tron/plugin.js.map +1 -0
  282. package/dist/adapters/tron/presets.d.ts +5 -0
  283. package/dist/adapters/tron/presets.js +68 -0
  284. package/dist/adapters/tron/presets.js.map +1 -0
  285. package/dist/adapters/tron/proofs.d.ts +80 -0
  286. package/dist/adapters/tron/proofs.js +371 -0
  287. package/dist/adapters/tron/proofs.js.map +1 -0
  288. package/dist/adapters/tron/protobuf.d.ts +36 -0
  289. package/dist/adapters/tron/protobuf.js +90 -0
  290. package/dist/adapters/tron/protobuf.js.map +1 -0
  291. package/dist/adapters/tron/reader.d.ts +57 -0
  292. package/dist/adapters/tron/reader.js +220 -0
  293. package/dist/adapters/tron/reader.js.map +1 -0
  294. package/dist/adapters/tron/tokens.d.ts +9 -0
  295. package/dist/adapters/tron/tokens.js +14 -0
  296. package/dist/adapters/tron/tokens.js.map +1 -0
  297. package/dist/adapters/tron/types.d.ts +166 -0
  298. package/dist/adapters/tron/types.js +3 -0
  299. package/dist/adapters/tron/types.js.map +1 -0
  300. package/dist/adapters/utxo/address.d.ts +51 -0
  301. package/dist/adapters/utxo/address.js +341 -0
  302. package/dist/adapters/utxo/address.js.map +1 -0
  303. package/dist/adapters/utxo/builder.d.ts +35 -0
  304. package/dist/adapters/utxo/builder.js +380 -0
  305. package/dist/adapters/utxo/builder.js.map +1 -0
  306. package/dist/adapters/utxo/chains.d.ts +17 -0
  307. package/dist/adapters/utxo/chains.js +100 -0
  308. package/dist/adapters/utxo/chains.js.map +1 -0
  309. package/dist/adapters/utxo/codec.d.ts +120 -0
  310. package/dist/adapters/utxo/codec.js +408 -0
  311. package/dist/adapters/utxo/codec.js.map +1 -0
  312. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  313. package/dist/adapters/utxo/coinselect.js +131 -0
  314. package/dist/adapters/utxo/coinselect.js.map +1 -0
  315. package/dist/adapters/utxo/context.d.ts +63 -0
  316. package/dist/adapters/utxo/context.js +125 -0
  317. package/dist/adapters/utxo/context.js.map +1 -0
  318. package/dist/adapters/utxo/decode.d.ts +22 -0
  319. package/dist/adapters/utxo/decode.js +121 -0
  320. package/dist/adapters/utxo/decode.js.map +1 -0
  321. package/dist/adapters/utxo/driver.d.ts +16 -0
  322. package/dist/adapters/utxo/driver.js +79 -0
  323. package/dist/adapters/utxo/driver.js.map +1 -0
  324. package/dist/adapters/utxo/ecc.d.ts +9 -0
  325. package/dist/adapters/utxo/ecc.js +26 -0
  326. package/dist/adapters/utxo/ecc.js.map +1 -0
  327. package/dist/adapters/utxo/errors.d.ts +52 -0
  328. package/dist/adapters/utxo/errors.js +191 -0
  329. package/dist/adapters/utxo/errors.js.map +1 -0
  330. package/dist/adapters/utxo/esplora.d.ts +100 -0
  331. package/dist/adapters/utxo/esplora.js +498 -0
  332. package/dist/adapters/utxo/esplora.js.map +1 -0
  333. package/dist/adapters/utxo/fees.d.ts +41 -0
  334. package/dist/adapters/utxo/fees.js +125 -0
  335. package/dist/adapters/utxo/fees.js.map +1 -0
  336. package/dist/adapters/utxo/index.d.ts +17 -0
  337. package/dist/adapters/utxo/index.js +8 -0
  338. package/dist/adapters/utxo/index.js.map +1 -0
  339. package/dist/adapters/utxo/network.d.ts +50 -0
  340. package/dist/adapters/utxo/network.js +165 -0
  341. package/dist/adapters/utxo/network.js.map +1 -0
  342. package/dist/adapters/utxo/plugin.d.ts +17 -0
  343. package/dist/adapters/utxo/plugin.js +41 -0
  344. package/dist/adapters/utxo/plugin.js.map +1 -0
  345. package/dist/adapters/utxo/presets.d.ts +12 -0
  346. package/dist/adapters/utxo/presets.js +47 -0
  347. package/dist/adapters/utxo/presets.js.map +1 -0
  348. package/dist/adapters/utxo/preview.d.ts +3 -0
  349. package/dist/adapters/utxo/preview.js +65 -0
  350. package/dist/adapters/utxo/preview.js.map +1 -0
  351. package/dist/adapters/utxo/proofs.d.ts +66 -0
  352. package/dist/adapters/utxo/proofs.js +469 -0
  353. package/dist/adapters/utxo/proofs.js.map +1 -0
  354. package/dist/adapters/utxo/rawblock.d.ts +46 -0
  355. package/dist/adapters/utxo/rawblock.js +159 -0
  356. package/dist/adapters/utxo/rawblock.js.map +1 -0
  357. package/dist/adapters/utxo/rawtx.d.ts +73 -0
  358. package/dist/adapters/utxo/rawtx.js +264 -0
  359. package/dist/adapters/utxo/rawtx.js.map +1 -0
  360. package/dist/adapters/utxo/reader.d.ts +36 -0
  361. package/dist/adapters/utxo/reader.js +265 -0
  362. package/dist/adapters/utxo/reader.js.map +1 -0
  363. package/dist/adapters/utxo/sdk.d.ts +18 -0
  364. package/dist/adapters/utxo/sdk.js +17 -0
  365. package/dist/adapters/utxo/sdk.js.map +1 -0
  366. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  367. package/dist/adapters/utxo/signed-psbt.js +428 -0
  368. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  369. package/dist/adapters/utxo/spend.d.ts +59 -0
  370. package/dist/adapters/utxo/spend.js +230 -0
  371. package/dist/adapters/utxo/spend.js.map +1 -0
  372. package/dist/adapters/utxo/types.d.ts +167 -0
  373. package/dist/adapters/utxo/types.js +3 -0
  374. package/dist/adapters/utxo/types.js.map +1 -0
  375. package/dist/core/assets/service.d.ts +18 -0
  376. package/dist/core/assets/service.js +69 -0
  377. package/dist/core/assets/service.js.map +1 -0
  378. package/dist/core/blockchain/default-ref.d.ts +4 -0
  379. package/dist/core/blockchain/default-ref.js +16 -0
  380. package/dist/core/blockchain/default-ref.js.map +1 -0
  381. package/dist/core/blockchain/handle.d.ts +179 -0
  382. package/dist/core/blockchain/handle.js +579 -0
  383. package/dist/core/blockchain/handle.js.map +1 -0
  384. package/dist/core/blockchain/internal.d.ts +19 -0
  385. package/dist/core/blockchain/internal.js +16 -0
  386. package/dist/core/blockchain/internal.js.map +1 -0
  387. package/dist/core/blockchain/mapping.d.ts +22 -0
  388. package/dist/core/blockchain/mapping.js +136 -0
  389. package/dist/core/blockchain/mapping.js.map +1 -0
  390. package/dist/core/config/env.d.ts +8 -0
  391. package/dist/core/config/env.js +60 -0
  392. package/dist/core/config/env.js.map +1 -0
  393. package/dist/core/config/merge.d.ts +26 -0
  394. package/dist/core/config/merge.js +144 -0
  395. package/dist/core/config/merge.js.map +1 -0
  396. package/dist/core/config/resolve.d.ts +12 -0
  397. package/dist/core/config/resolve.js +251 -0
  398. package/dist/core/config/resolve.js.map +1 -0
  399. package/dist/core/config/types.d.ts +180 -0
  400. package/dist/core/config/types.js +3 -0
  401. package/dist/core/config/types.js.map +1 -0
  402. package/dist/core/container/builtins.d.ts +4 -0
  403. package/dist/core/container/builtins.js +13 -0
  404. package/dist/core/container/builtins.js.map +1 -0
  405. package/dist/core/container/container.d.ts +62 -0
  406. package/dist/core/container/container.js +500 -0
  407. package/dist/core/container/container.js.map +1 -0
  408. package/dist/core/container/default.d.ts +15 -0
  409. package/dist/core/container/default.js +70 -0
  410. package/dist/core/container/default.js.map +1 -0
  411. package/dist/core/container/internals.d.ts +54 -0
  412. package/dist/core/container/internals.js +21 -0
  413. package/dist/core/container/internals.js.map +1 -0
  414. package/dist/core/container/pool.d.ts +27 -0
  415. package/dist/core/container/pool.js +77 -0
  416. package/dist/core/container/pool.js.map +1 -0
  417. package/dist/core/driver/types.d.ts +379 -0
  418. package/dist/core/driver/types.js +3 -0
  419. package/dist/core/driver/types.js.map +1 -0
  420. package/dist/core/errors/codes.d.ts +163 -0
  421. package/dist/core/errors/codes.js +53 -0
  422. package/dist/core/errors/codes.js.map +1 -0
  423. package/dist/core/errors/error.d.ts +66 -0
  424. package/dist/core/errors/error.js +129 -0
  425. package/dist/core/errors/error.js.map +1 -0
  426. package/dist/core/events/bus.d.ts +12 -0
  427. package/dist/core/events/bus.js +46 -0
  428. package/dist/core/events/bus.js.map +1 -0
  429. package/dist/core/events/logger.d.ts +13 -0
  430. package/dist/core/events/logger.js +42 -0
  431. package/dist/core/events/logger.js.map +1 -0
  432. package/dist/core/events/types.d.ts +131 -0
  433. package/dist/core/events/types.js +3 -0
  434. package/dist/core/events/types.js.map +1 -0
  435. package/dist/core/lifecycle/engine-rules.d.ts +106 -0
  436. package/dist/core/lifecycle/engine-rules.js +267 -0
  437. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  438. package/dist/core/lifecycle/engine.d.ts +502 -0
  439. package/dist/core/lifecycle/engine.js +1750 -0
  440. package/dist/core/lifecycle/engine.js.map +1 -0
  441. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  442. package/dist/core/lifecycle/evaluate.js +77 -0
  443. package/dist/core/lifecycle/evaluate.js.map +1 -0
  444. package/dist/core/lifecycle/intent.d.ts +11 -0
  445. package/dist/core/lifecycle/intent.js +88 -0
  446. package/dist/core/lifecycle/intent.js.map +1 -0
  447. package/dist/core/lifecycle/monitor.d.ts +138 -0
  448. package/dist/core/lifecycle/monitor.js +616 -0
  449. package/dist/core/lifecycle/monitor.js.map +1 -0
  450. package/dist/core/lifecycle/observations.d.ts +17 -0
  451. package/dist/core/lifecycle/observations.js +59 -0
  452. package/dist/core/lifecycle/observations.js.map +1 -0
  453. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  454. package/dist/core/lifecycle/reconcile.js +112 -0
  455. package/dist/core/lifecycle/reconcile.js.map +1 -0
  456. package/dist/core/lifecycle/views.d.ts +49 -0
  457. package/dist/core/lifecycle/views.js +57 -0
  458. package/dist/core/lifecycle/views.js.map +1 -0
  459. package/dist/core/lifecycle/workers.d.ts +88 -0
  460. package/dist/core/lifecycle/workers.js +347 -0
  461. package/dist/core/lifecycle/workers.js.map +1 -0
  462. package/dist/core/model/address.d.ts +32 -0
  463. package/dist/core/model/address.js +43 -0
  464. package/dist/core/model/address.js.map +1 -0
  465. package/dist/core/model/amount.d.ts +25 -0
  466. package/dist/core/model/amount.js +102 -0
  467. package/dist/core/model/amount.js.map +1 -0
  468. package/dist/core/model/asset.d.ts +28 -0
  469. package/dist/core/model/asset.js +47 -0
  470. package/dist/core/model/asset.js.map +1 -0
  471. package/dist/core/model/capability.d.ts +3 -0
  472. package/dist/core/model/capability.js +18 -0
  473. package/dist/core/model/capability.js.map +1 -0
  474. package/dist/core/model/chain.d.ts +63 -0
  475. package/dist/core/model/chain.js +8 -0
  476. package/dist/core/model/chain.js.map +1 -0
  477. package/dist/core/model/fee.d.ts +36 -0
  478. package/dist/core/model/fee.js +17 -0
  479. package/dist/core/model/fee.js.map +1 -0
  480. package/dist/core/model/ids.d.ts +38 -0
  481. package/dist/core/model/ids.js +14 -0
  482. package/dist/core/model/ids.js.map +1 -0
  483. package/dist/core/model/intent.d.ts +63 -0
  484. package/dist/core/model/intent.js +81 -0
  485. package/dist/core/model/intent.js.map +1 -0
  486. package/dist/core/model/ordering.d.ts +28 -0
  487. package/dist/core/model/ordering.js +29 -0
  488. package/dist/core/model/ordering.js.map +1 -0
  489. package/dist/core/model/transaction.d.ts +123 -0
  490. package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
  491. package/dist/core/model/transaction.js.map +1 -0
  492. package/dist/core/observe/scanner.d.ts +135 -0
  493. package/dist/core/observe/scanner.js +358 -0
  494. package/dist/core/observe/scanner.js.map +1 -0
  495. package/dist/core/ordering/reservations.d.ts +16 -0
  496. package/dist/core/ordering/reservations.js +53 -0
  497. package/dist/core/ordering/reservations.js.map +1 -0
  498. package/dist/core/ordering/sequence.d.ts +61 -0
  499. package/dist/core/ordering/sequence.js +155 -0
  500. package/dist/core/ordering/sequence.js.map +1 -0
  501. package/dist/core/registry/adapters.d.ts +10 -0
  502. package/dist/core/registry/adapters.js +56 -0
  503. package/dist/core/registry/adapters.js.map +1 -0
  504. package/dist/core/registry/assets.d.ts +18 -0
  505. package/dist/core/registry/assets.js +90 -0
  506. package/dist/core/registry/assets.js.map +1 -0
  507. package/dist/core/registry/chains.d.ts +10 -0
  508. package/dist/core/registry/chains.js +80 -0
  509. package/dist/core/registry/chains.js.map +1 -0
  510. package/dist/core/registry/plugin.d.ts +41 -0
  511. package/dist/core/registry/plugin.js +109 -0
  512. package/dist/core/registry/plugin.js.map +1 -0
  513. package/dist/core/registry/providers.d.ts +31 -0
  514. package/dist/core/registry/providers.js +43 -0
  515. package/dist/core/registry/providers.js.map +1 -0
  516. package/dist/core/registry/schemes.d.ts +30 -0
  517. package/dist/core/registry/schemes.js +84 -0
  518. package/dist/core/registry/schemes.js.map +1 -0
  519. package/dist/core/secret/fragments.d.ts +33 -0
  520. package/dist/core/secret/fragments.js +110 -0
  521. package/dist/core/secret/fragments.js.map +1 -0
  522. package/dist/core/secret/redact.d.ts +10 -0
  523. package/dist/core/secret/redact.js +110 -0
  524. package/dist/core/secret/redact.js.map +1 -0
  525. package/dist/core/secret/secret.d.ts +14 -0
  526. package/dist/core/secret/secret.js +42 -0
  527. package/dist/core/secret/secret.js.map +1 -0
  528. package/dist/core/signing/callback.d.ts +10 -0
  529. package/dist/core/signing/callback.js +22 -0
  530. package/dist/core/signing/callback.js.map +1 -0
  531. package/dist/core/signing/guard.d.ts +18 -0
  532. package/dist/core/signing/guard.js +72 -0
  533. package/dist/core/signing/guard.js.map +1 -0
  534. package/dist/core/signing/hd.d.ts +36 -0
  535. package/dist/core/signing/hd.js +167 -0
  536. package/dist/core/signing/hd.js.map +1 -0
  537. package/dist/core/signing/local.d.ts +48 -0
  538. package/dist/core/signing/local.js +190 -0
  539. package/dist/core/signing/local.js.map +1 -0
  540. package/dist/core/signing/orchestrator.d.ts +40 -0
  541. package/dist/core/signing/orchestrator.js +300 -0
  542. package/dist/core/signing/orchestrator.js.map +1 -0
  543. package/dist/core/signing/types.d.ts +64 -0
  544. package/dist/core/signing/types.js +3 -0
  545. package/dist/core/signing/types.js.map +1 -0
  546. package/dist/core/signing/wallet.d.ts +48 -0
  547. package/dist/core/signing/wallet.js +161 -0
  548. package/dist/core/signing/wallet.js.map +1 -0
  549. package/dist/core/store/clone.d.ts +25 -0
  550. package/dist/core/store/clone.js +71 -0
  551. package/dist/core/store/clone.js.map +1 -0
  552. package/dist/core/store/format.d.ts +20 -0
  553. package/dist/core/store/format.js +86 -0
  554. package/dist/core/store/format.js.map +1 -0
  555. package/dist/core/store/memory.d.ts +38 -0
  556. package/dist/core/store/memory.js +325 -0
  557. package/dist/core/store/memory.js.map +1 -0
  558. package/dist/core/store/types.d.ts +258 -0
  559. package/dist/core/store/types.js +119 -0
  560. package/dist/core/store/types.js.map +1 -0
  561. package/dist/core/transport/backoff.d.ts +8 -0
  562. package/dist/core/transport/backoff.js +27 -0
  563. package/dist/core/transport/backoff.js.map +1 -0
  564. package/dist/core/transport/circuit.d.ts +25 -0
  565. package/dist/core/transport/circuit.js +61 -0
  566. package/dist/core/transport/circuit.js.map +1 -0
  567. package/dist/core/transport/http-transport.d.ts +30 -0
  568. package/dist/core/transport/http-transport.js +1703 -0
  569. package/dist/core/transport/http-transport.js.map +1 -0
  570. package/dist/core/transport/rate-limit.d.ts +27 -0
  571. package/dist/core/transport/rate-limit.js +78 -0
  572. package/dist/core/transport/rate-limit.js.map +1 -0
  573. package/dist/core/transport/stale-view.d.ts +11 -0
  574. package/dist/core/transport/stale-view.js +17 -0
  575. package/dist/core/transport/stale-view.js.map +1 -0
  576. package/dist/core/transport/types.d.ts +159 -0
  577. package/dist/core/transport/types.js +6 -0
  578. package/dist/core/transport/types.js.map +1 -0
  579. package/dist/core/util/bytes.d.ts +9 -0
  580. package/dist/core/util/bytes.js +40 -0
  581. package/dist/core/util/bytes.js.map +1 -0
  582. package/dist/core/util/clock.d.ts +6 -0
  583. package/dist/core/util/clock.js +26 -0
  584. package/dist/core/util/clock.js.map +1 -0
  585. package/dist/core/util/freeze.d.ts +8 -0
  586. package/dist/core/util/freeze.js +31 -0
  587. package/dist/core/util/freeze.js.map +1 -0
  588. package/dist/core/util/json.d.ts +35 -0
  589. package/dist/core/util/json.js +174 -0
  590. package/dist/core/util/json.js.map +1 -0
  591. package/dist/core/util/names.d.ts +27 -0
  592. package/dist/core/util/names.js +56 -0
  593. package/dist/core/util/names.js.map +1 -0
  594. package/dist/index.d.ts +65 -14
  595. package/dist/index.js +107 -49
  596. package/dist/index.js.map +1 -1
  597. package/dist/native.d.ts +21 -0
  598. package/dist/native.js +44 -0
  599. package/dist/native.js.map +1 -0
  600. package/dist/testing/contracts/api.d.ts +12 -0
  601. package/dist/testing/contracts/api.js +58 -0
  602. package/dist/testing/contracts/api.js.map +1 -0
  603. package/dist/testing/contracts/cursors.d.ts +6 -0
  604. package/dist/testing/contracts/cursors.js +43 -0
  605. package/dist/testing/contracts/cursors.js.map +1 -0
  606. package/dist/testing/contracts/locks.d.ts +10 -0
  607. package/dist/testing/contracts/locks.js +63 -0
  608. package/dist/testing/contracts/locks.js.map +1 -0
  609. package/dist/testing/contracts/operations.d.ts +21 -0
  610. package/dist/testing/contracts/operations.js +737 -0
  611. package/dist/testing/contracts/operations.js.map +1 -0
  612. package/dist/testing/contracts/sequences.d.ts +6 -0
  613. package/dist/testing/contracts/sequences.js +68 -0
  614. package/dist/testing/contracts/sequences.js.map +1 -0
  615. package/dist/testing/env.d.ts +68 -0
  616. package/dist/testing/env.js +105 -0
  617. package/dist/testing/env.js.map +1 -0
  618. package/dist/testing/fake-chain.d.ts +118 -0
  619. package/dist/testing/fake-chain.js +536 -0
  620. package/dist/testing/fake-chain.js.map +1 -0
  621. package/dist/testing/fake-clock.d.ts +15 -0
  622. package/dist/testing/fake-clock.js +86 -0
  623. package/dist/testing/fake-clock.js.map +1 -0
  624. package/dist/testing/fake-driver.d.ts +15 -0
  625. package/dist/testing/fake-driver.js +458 -0
  626. package/dist/testing/fake-driver.js.map +1 -0
  627. package/dist/testing/fake-fetch.d.ts +32 -0
  628. package/dist/testing/fake-fetch.js +81 -0
  629. package/dist/testing/fake-fetch.js.map +1 -0
  630. package/dist/testing/fake-plugin.d.ts +30 -0
  631. package/dist/testing/fake-plugin.js +66 -0
  632. package/dist/testing/fake-plugin.js.map +1 -0
  633. package/dist/testing/faulty-store.d.ts +38 -0
  634. package/dist/testing/faulty-store.js +71 -0
  635. package/dist/testing/faulty-store.js.map +1 -0
  636. package/dist/testing/generation.d.ts +60 -0
  637. package/dist/testing/generation.js +252 -0
  638. package/dist/testing/generation.js.map +1 -0
  639. package/dist/testing/index.d.ts +28 -0
  640. package/dist/testing/index.js +51 -0
  641. package/dist/testing/index.js.map +1 -0
  642. package/package.json +198 -45
  643. package/dist/libs/eth/account.d.ts +0 -9
  644. package/dist/libs/eth/account.js +0 -58
  645. package/dist/libs/eth/account.js.map +0 -1
  646. package/dist/libs/eth/contract.d.ts +0 -7
  647. package/dist/libs/eth/contract.js +0 -42
  648. package/dist/libs/eth/contract.js.map +0 -1
  649. package/dist/libs/eth/index.d.ts +0 -24
  650. package/dist/libs/eth/index.js +0 -72
  651. package/dist/libs/eth/index.js.map +0 -1
  652. package/dist/libs/eth/transact.d.ts +0 -7
  653. package/dist/libs/eth/transact.js +0 -26
  654. package/dist/libs/eth/transact.js.map +0 -1
  655. package/dist/libs/index.d.ts +0 -2
  656. package/dist/libs/index.js +0 -19
  657. package/dist/libs/index.js.map +0 -1
  658. package/dist/libs/trx/account.d.ts +0 -9
  659. package/dist/libs/trx/account.js +0 -55
  660. package/dist/libs/trx/account.js.map +0 -1
  661. package/dist/libs/trx/contract.d.ts +0 -7
  662. package/dist/libs/trx/contract.js +0 -27
  663. package/dist/libs/trx/contract.js.map +0 -1
  664. package/dist/libs/trx/index.d.ts +0 -22
  665. package/dist/libs/trx/index.js +0 -64
  666. package/dist/libs/trx/index.js.map +0 -1
  667. package/dist/libs/trx/transact.d.ts +0 -7
  668. package/dist/libs/trx/transact.js +0 -26
  669. package/dist/libs/trx/transact.js.map +0 -1
  670. package/dist/tool/common.d.ts +0 -28
  671. package/dist/tool/common.js +0 -33
  672. package/dist/tool/common.js.map +0 -1
  673. package/dist/tool/eth-tools.d.ts +0 -3
  674. package/dist/tool/eth-tools.js +0 -33
  675. package/dist/tool/eth-tools.js.map +0 -1
  676. package/dist/tool/index.d.ts +0 -5
  677. package/dist/tool/index.js +0 -22
  678. package/dist/tool/index.js.map +0 -1
  679. package/dist/tool/logging.d.ts +0 -3
  680. package/dist/tool/logging.js +0 -11
  681. package/dist/tool/logging.js.map +0 -1
  682. package/dist/tool/options.d.ts +0 -6
  683. package/dist/tool/options.js +0 -41
  684. package/dist/tool/options.js.map +0 -1
  685. package/dist/tool/trx-tools.d.ts +0 -3
  686. package/dist/tool/trx-tools.js +0 -20
  687. package/dist/tool/trx-tools.js.map +0 -1
  688. package/dist/type/account.d.ts +0 -9
  689. package/dist/type/account.js.map +0 -1
  690. package/dist/type/common.d.ts +0 -18
  691. package/dist/type/common.js.map +0 -1
  692. package/dist/type/contract.d.ts +0 -10
  693. package/dist/type/contract.js.map +0 -1
  694. package/dist/type/index.d.ts +0 -5
  695. package/dist/type/index.js +0 -22
  696. package/dist/type/index.js.map +0 -1
  697. package/dist/type/lib-types.d.ts +0 -9
  698. package/dist/type/lib-types.js.map +0 -1
  699. package/dist/type/transact.d.ts +0 -7
  700. package/dist/type/transact.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/adapters/utxo/driver.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The UTXO driver factory: validated network config, endpoint probes on both transports,\n * and the ports. Loaded only by the manifest's `load()`, with bitcoinjs-lib.\n */\nimport type { ChainDriver, DriverContext, DriverFactory } from '../../core/driver/types';\nimport { ConfigError } from '../../core/errors/error';\nimport type { EndpointCall, HealthProbes } from '../../core/transport/types';\nimport { utxoBroadcaster, utxoBuilder, utxoReplacement } from './builder';\nimport { networkOf } from './codec';\nimport { READ, parseWalletOptions, signingScheme, type UtxoContext } from './context';\nimport { EsploraClient, parseHash, parseHeight } from './esplora';\nimport { utxoNetworkConfig } from './network';\nimport { blockSource, proofSource } from './proofs';\nimport { addressCodec, addressHistory, chainReader, listUnspent } from './reader';\nimport { bitcoin, useNobleEcc } from './sdk';\nimport { coinSelectionPreview } from './preview';\nimport { MAX_OUTPUTS } from './spend';\nimport type { UtxoExt } from './types';\n\nexport interface UtxoNativeClient {\n /** The bitcoinjs-lib module, with this library's `@noble/curves` ECC backend installed. */\n readonly bitcoin: typeof bitcoin;\n /** A fresh copy of this network's bitcoinjs parameters. */\n readonly network: ReturnType<typeof networkOf>;\n /** A GET to the handle's Esplora (`rpc`) endpoints, through the policy-wrapped transport. */\n esplora<T = unknown>(path: string, responseType?: 'json' | 'text'): Promise<T>;\n}\n\nfunction probes(expectedIdentity: string): HealthProbes {\n const text = (call: EndpointCall, path: string, route: string) =>\n call.http<string>({ method: 'GET', path, route, responseType: 'text' });\n return {\n identity: async (call) =>\n parseHash(await text(call, '/block-height/0', '/block-height/:height')),\n expectedIdentity,\n height: async (call) =>\n parseHeight(await text(call, '/blocks/tip/height', '/blocks/tip/height')),\n };\n}\n\nexport const utxoDriverFactory: DriverFactory = {\n async create(ctx: DriverContext): Promise<ChainDriver> {\n const config = utxoNetworkConfig(ctx.chain, ctx.network, ctx.options);\n if (!ctx.indexer) {\n throw new ConfigError(\n 'CONFIG_INVALID',\n 'the UTXO driver requires an indexer provider',\n );\n }\n // Both transports, before any traffic: the genesis-hash probe keeps an endpoint of\n // another network out of the `rpc` reads and the `indexer` reads alike.\n ctx.transport.setProbes(probes(config.genesisHash));\n ctx.indexer.setProbes(probes(config.genesisHash));\n const esplora = new EsploraClient(ctx.transport, ctx.indexer);\n const utxo: UtxoContext = {\n esplora,\n chain: ctx.chain,\n network: ctx.network,\n config,\n log: ctx.log,\n };\n const network = networkOf(config.address);\n const builder = utxoBuilder(utxo, network);\n return {\n ordering: 'inputs',\n capabilities: config.capabilities,\n address: addressCodec(utxo),\n reader: chainReader(utxo),\n builder,\n broadcaster: utxoBroadcaster(utxo),\n proofs: proofSource(utxo),\n replacement: utxoReplacement(utxo, network),\n blocks: blockSource(utxo),\n history: addressHistory(utxo),\n ext: {\n utxo: {\n listUnspent: (address: string) => listUnspent(utxo, address),\n coinSelection: (request: Parameters<UtxoExt['utxo']['coinSelection']>[0]) =>\n coinSelectionPreview(utxo, request),\n },\n } satisfies UtxoExt,\n limits: () => ({ maxOutputs: MAX_OUTPUTS }),\n // One scheme per address type, so a p2tr wallet's ECDSA-only signer (a KMS key) is\n // refused when the wallet resolves, not at signing.\n signingSchemes: (wallet) => [\n signingScheme(parseWalletOptions(wallet, config).addressType),\n ],\n createNativeClient: () => {\n // The doc's promise: taproot works on this module (and a swapped backend is undone).\n useNobleEcc();\n const client: UtxoNativeClient = {\n bitcoin,\n network: { ...network, bip32: { ...network.bip32 } },\n esplora: <T>(path: string, responseType: 'json' | 'text' = 'json') =>\n ctx.transport.http<T>(\n { method: 'GET', path, route: '/native', responseType },\n READ,\n ),\n };\n return { client };\n },\n };\n },\n};\n"]}
@@ -0,0 +1,9 @@
1
+ import { isXOnlyPoint } from './address';
2
+ export interface XOnlyTweakResult {
3
+ readonly parity: 0 | 1;
4
+ readonly xOnlyPubkey: Uint8Array;
5
+ }
6
+ export declare const nobleEcc: Readonly<{
7
+ isXOnlyPoint: typeof isXOnlyPoint;
8
+ xOnlyPointAddTweak(point: Uint8Array, tweak: Uint8Array): XOnlyTweakResult | null;
9
+ }>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nobleEcc = void 0;
4
+ /**
5
+ * bitcoinjs-lib's ECC interface (`isXOnlyPoint`, `xOnlyPointAddTweak`) over
6
+ * `@noble/curves`. SDK-free: bitcoinjs checks it against its own vectors when
7
+ * `initEccLib` installs it.
8
+ */
9
+ const secp256k1_1 = require("@noble/curves/secp256k1");
10
+ const address_1 = require("./address");
11
+ exports.nobleEcc = Object.freeze({
12
+ isXOnlyPoint: address_1.isXOnlyPoint,
13
+ xOnlyPointAddTweak(point, tweak) {
14
+ if (!(0, address_1.isXOnlyPoint)(point) || tweak.length !== 32)
15
+ return null;
16
+ const t = secp256k1_1.schnorr.utils.bytesToNumberBE(tweak);
17
+ if (t >= secp256k1_1.secp256k1.CURVE.n)
18
+ return null;
19
+ const P = secp256k1_1.schnorr.utils.lift_x(secp256k1_1.schnorr.utils.bytesToNumberBE(point));
20
+ const Q = t === 0n ? P : P.add(secp256k1_1.secp256k1.ProjectivePoint.BASE.multiply(t));
21
+ if (Q.equals(secp256k1_1.secp256k1.ProjectivePoint.ZERO))
22
+ return null;
23
+ return { parity: Q.hasEvenY() ? 0 : 1, xOnlyPubkey: Q.toRawBytes(true).slice(1) };
24
+ },
25
+ });
26
+ //# sourceMappingURL=ecc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecc.js","sourceRoot":"","sources":["../../../src/adapters/utxo/ecc.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH,uDAA6D;AAC7D,uCAAyC;AAO5B,QAAA,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IACpC,YAAY,EAAZ,sBAAY;IACZ,kBAAkB,CAAC,KAAiB,EAAE,KAAiB;QACrD,IAAI,CAAC,IAAA,sBAAY,EAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QAC7D,MAAM,CAAC,GAAG,mBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,qBAAS,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,CAAC,GAAG,mBAAO,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,qBAAS,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,CAAC,MAAM,CAAC,qBAAS,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1D,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,CAAC;CACF,CAAC,CAAC","sourcesContent":["/**\n * bitcoinjs-lib's ECC interface (`isXOnlyPoint`, `xOnlyPointAddTweak`) over\n * `@noble/curves`. SDK-free: bitcoinjs checks it against its own vectors when\n * `initEccLib` installs it.\n */\nimport { schnorr, secp256k1 } from '@noble/curves/secp256k1';\nimport { isXOnlyPoint } from './address';\n\nexport interface XOnlyTweakResult {\n readonly parity: 0 | 1;\n readonly xOnlyPubkey: Uint8Array;\n}\n\nexport const nobleEcc = Object.freeze({\n isXOnlyPoint,\n xOnlyPointAddTweak(point: Uint8Array, tweak: Uint8Array): XOnlyTweakResult | null {\n if (!isXOnlyPoint(point) || tweak.length !== 32) return null;\n const t = schnorr.utils.bytesToNumberBE(tweak);\n if (t >= secp256k1.CURVE.n) return null;\n const P = schnorr.utils.lift_x(schnorr.utils.bytesToNumberBE(point));\n const Q = t === 0n ? P : P.add(secp256k1.ProjectivePoint.BASE.multiply(t));\n if (Q.equals(secp256k1.ProjectivePoint.ZERO)) return null;\n return { parity: Q.hasEvenY() ? 0 : 1, xOnlyPubkey: Q.toRawBytes(true).slice(1) };\n },\n});\n"]}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Broadcast classification (pure). Esplora forwards bitcoind's `sendrawtransaction` error as
3
+ * an HTTP 400 body, in one of two formats:
4
+ * - Blockstream electrs: `sendrawtransaction RPC error -26: min relay fee not met, 100 < 141`
5
+ * - mempool/electrs: `sendrawtransaction RPC error: {"code":-26,"message":"min relay fee …"}`
6
+ *
7
+ * `rejected` only for exact, anchored reject reasons that make these
8
+ * bytes invalid by consensus on every node (bitcoind's `CheckTransaction` and consensus
9
+ * script checks, and an undecodable transaction); everything that depends on state, policy
10
+ * or node configuration is `refused`, which is also the default for unknown texts. A
11
+ * `rejected` reason counts only under the code bitcoind answers it with, so a text outside
12
+ * bitcoind's structured answer never ends an Attempt. Reasons are fixed literals: bitcoind's
13
+ * texts carry txids, amounts and fee rates, which a stored reason must never hold.
14
+ *
15
+ * A node's rejection is a claim. `nodeClaim` only parses what the node
16
+ * claims, and a claimed consensus failure is `invalid`, a kind no `Broadcaster` may return.
17
+ * `classifyOwnBroadcast`, the only classifier, keeps a `rejected` only when the claimed reason
18
+ * holds for the bytes that were sent, checked here, and makes every other one `refused`
19
+ * (non-terminal). No export takes the node at its word.
20
+ */
21
+ import type { BroadcastResult } from '../../core/driver/types';
22
+ export interface NodeError {
23
+ readonly code?: number;
24
+ readonly message: string;
25
+ }
26
+ /**
27
+ * The bitcoind error inside an Esplora 400 body, or the body's head when it is neither
28
+ * format.
29
+ */
30
+ export declare function parseNodeError(body: string): NodeError;
31
+ /**
32
+ * What bitcoind's answer claims, parsed: it decides nothing. A claimed consensus failure is
33
+ * `invalid`, which is no `BroadcastResult`: only `classifyOwnBroadcast` turns it into a
34
+ * `rejected` verdict, and only for bytes its reason holds for.
35
+ */
36
+ export type NodeClaim = Extract<BroadcastResult, {
37
+ readonly kind: 'already-known' | 'refused';
38
+ }> | {
39
+ readonly kind: 'invalid';
40
+ readonly reason: string;
41
+ };
42
+ export declare function nodeClaim(error: NodeError): NodeClaim;
43
+ /**
44
+ * The node's answer to the hex this driver sent. A terminal `rejected` frees the
45
+ * Attempt's inputs for a caller's retry, and if a lying or buggy endpoint relayed the bytes
46
+ * before it claimed them invalid, the retry and the original can both confirm: a double
47
+ * payment. So a rejection stands only when its claimed reason holds for those bytes, decoded
48
+ * here (whether they decode is always this module's own finding): an undecodable
49
+ * hex for `TX decode failed`, a byte rule for a `CheckTransaction` reason. Anything else is
50
+ * `refused`.
51
+ */
52
+ export declare function classifyOwnBroadcast(error: NodeError, sentHex: string): BroadcastResult;
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseNodeError = parseNodeError;
4
+ exports.nodeClaim = nodeClaim;
5
+ exports.classifyOwnBroadcast = classifyOwnBroadcast;
6
+ const rawtx_1 = require("./rawtx");
7
+ /**
8
+ * Only a body's head is read. bitcoind's code and reject reason come first and its
9
+ * texts are far shorter; unbounded, the mempool/electrs pattern is quadratic in the length.
10
+ */
11
+ const MAX_BODY = 1_024;
12
+ /**
13
+ * The bitcoind error inside an Esplora 400 body, or the body's head when it is neither
14
+ * format.
15
+ */
16
+ function parseNodeError(body) {
17
+ const text = body.slice(0, MAX_BODY).trim();
18
+ const json = /RPC error: (\{.*\})$/s.exec(text);
19
+ if (json) {
20
+ try {
21
+ const parsed = JSON.parse(json[1]);
22
+ if (typeof parsed.message === 'string') {
23
+ return {
24
+ ...(typeof parsed.code === 'number' ? { code: parsed.code } : {}),
25
+ message: parsed.message,
26
+ };
27
+ }
28
+ }
29
+ catch {
30
+ // Fall through: not the mempool/electrs format after all.
31
+ }
32
+ }
33
+ // The transport keeps only the first 300 characters of a 400 body (`details.body`), which
34
+ // leaves the JSON of a long message unterminated: its code and the head of its message
35
+ // classify it as the Blockstream format of the same answer does.
36
+ const cut = /RPC error: \{"code":(-?\d+),"message":"(.*)$/s.exec(text);
37
+ if (cut)
38
+ return { code: Number(cut[1]), message: cut[2] };
39
+ const plain = /RPC error (-?\d+): (.*)$/s.exec(text);
40
+ if (plain)
41
+ return { code: Number(plain[1]), message: plain[2] };
42
+ return { message: text };
43
+ }
44
+ /** A reject reason at the start of the message, followed by nothing, `,`, `.` or a space. */
45
+ const reason = (...names) => new RegExp(`^(?:${names.map((n) => n.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|')})(?:$|,| \\(|\\.| )`);
46
+ const ALREADY_KNOWN = reason('txn-already-in-mempool', 'txn-already-known', 'txn-same-nonwitness-data-in-mempool', 'Transaction outputs already in utxo set', 'Transaction already in block chain');
47
+ /** bitcoind's -22 (`RPC_DESERIALIZATION_ERROR`) reason: the hex does not decode. */
48
+ const DECODE_FAILED = 'TX decode failed';
49
+ /**
50
+ * Consensus failures of these exact bytes (bitcoind `CheckTransaction`, consensus scripts),
51
+ * each under the code bitcoind answers it with: -26 (`RPC_VERIFY_REJECTED`, a mempool
52
+ * rejection) or -22 (`RPC_DESERIALIZATION_ERROR`, undecodable hex).
53
+ */
54
+ const REJECTED = [
55
+ [
56
+ -26,
57
+ [
58
+ 'bad-txns-vin-empty',
59
+ 'bad-txns-vout-empty',
60
+ 'bad-txns-oversize',
61
+ 'bad-txns-vout-negative',
62
+ 'bad-txns-vout-toolarge',
63
+ 'bad-txns-txouttotal-toolarge',
64
+ 'bad-txns-inputs-duplicate',
65
+ 'bad-txns-prevout-null',
66
+ 'bad-txns-in-belowout',
67
+ 'bad-txns-inputvalues-outofrange',
68
+ 'bad-txns-fee-outofrange',
69
+ 'coinbase',
70
+ ],
71
+ 'invalid by consensus rules',
72
+ ],
73
+ [
74
+ -26,
75
+ ['mandatory-script-verify-flag-failed', 'block-script-verify-flag-failed'],
76
+ 'script verification failed',
77
+ ],
78
+ [-22, [DECODE_FAILED], 'the transaction does not decode'],
79
+ ];
80
+ /** Each rejected reason's own anchored pattern, with the code and the verdict text. */
81
+ const CLAIMS = REJECTED.flatMap(([code, names, text]) => names.map((name) => [code, name, reason(name), text]));
82
+ /** The rejected reason bitcoind's answer claims, or `undefined` when it claims none. */
83
+ function claimedReason(error, message) {
84
+ return CLAIMS.find(([code, , pattern]) => error.code === code && pattern.test(message));
85
+ }
86
+ const FEE_TOO_LOW = reason('min relay fee not met', 'mempool min fee not met', 'insufficient fee');
87
+ const SPENT = reason('bad-txns-inputs-missingorspent', 'Missing inputs', 'Inputs missing or spent', 'txn-mempool-conflict', 'bad-txns-spends-conflicting-tx');
88
+ function nodeClaim(error) {
89
+ const message = error.message.trim();
90
+ if (ALREADY_KNOWN.test(message) || error.code === -27)
91
+ return { kind: 'already-known' };
92
+ const claim = claimedReason(error, message);
93
+ if (claim)
94
+ return { kind: 'invalid', reason: claim[3] };
95
+ if (FEE_TOO_LOW.test(message)) {
96
+ return { kind: 'refused', code: 'FEE_TOO_LOW', reason: 'fee too low for the node' };
97
+ }
98
+ if (SPENT.test(message)) {
99
+ return {
100
+ kind: 'refused',
101
+ code: 'TX_REFUSED',
102
+ reason: 'inputs missing or already spent',
103
+ };
104
+ }
105
+ return {
106
+ kind: 'refused',
107
+ code: 'TX_REFUSED',
108
+ reason: 'the node refused the transaction',
109
+ };
110
+ }
111
+ /** Bitcoin Core's `MAX_MONEY` and `MAX_BLOCK_WEIGHT`. */
112
+ const MAX_MONEY = 2100000000000000n;
113
+ const MAX_BLOCK_WEIGHT = 4_000_000;
114
+ const NULL_TXID = '0'.repeat(64);
115
+ const isNull = (input) => input.txid === NULL_TXID && input.vout === 0xffffffff;
116
+ const isCoinbase = (tx) => tx.inputs.length === 1 && isNull(tx.inputs[0]);
117
+ /**
118
+ * bitcoind's reasons the bytes alone decide (`CheckTransaction`, and ATMP's `coinbase`), each
119
+ * as bitcoind tests it. The others (`bad-txns-in-belowout`, `-inputvalues-outofrange`,
120
+ * `-fee-outofrange` and every script check) depend on the spent outputs, and have no rule: the
121
+ * builder spends only outputs whose value and script their previous transaction authenticates
122
+ * (every input, every wallet type, whatever `nonWitnessUtxo` says), and the core
123
+ * verifies every signature, so they cannot hold for our own bytes, and a node that claims one
124
+ * is not believed.
125
+ */
126
+ const BYTE_RULES = {
127
+ 'bad-txns-vin-empty': (tx) => tx.inputs.length === 0,
128
+ 'bad-txns-vout-empty': (tx) => tx.values.length === 0,
129
+ 'bad-txns-oversize': (tx) => tx.strippedSize * 4 > MAX_BLOCK_WEIGHT,
130
+ 'bad-txns-vout-negative': (tx) => tx.values.some((value) => value < 0n),
131
+ 'bad-txns-vout-toolarge': (tx) => tx.values.some((value) => value > MAX_MONEY),
132
+ // bitcoind's loop: each output in order, stopping at the first that fails.
133
+ 'bad-txns-txouttotal-toolarge': (tx) => {
134
+ let total = 0n;
135
+ for (const value of tx.values) {
136
+ if (value < 0n || value > MAX_MONEY)
137
+ return false; // `vout-negative`, `-toolarge`
138
+ total += value;
139
+ if (total > MAX_MONEY)
140
+ return true;
141
+ }
142
+ return false;
143
+ },
144
+ 'bad-txns-inputs-duplicate': (tx) => new Set(tx.inputs.map((input) => `${input.txid}:${input.vout}`)).size <
145
+ tx.inputs.length,
146
+ 'bad-txns-prevout-null': (tx) => !isCoinbase(tx) && tx.inputs.some(isNull),
147
+ coinbase: isCoinbase,
148
+ };
149
+ /** A rejection this driver cannot confirm for the bytes it sent: observed, never terminal. */
150
+ const UNCONFIRMED = {
151
+ kind: 'refused',
152
+ code: 'TX_REFUSED',
153
+ reason: 'the node claimed the transaction is invalid',
154
+ };
155
+ /**
156
+ * The hex that was sent, decoded as `sendrawtransaction` decodes it (`rawtx.ts` follows
157
+ * bitcoind's format, with no cap below the broadcaster's own), or `undefined` when bitcoind
158
+ * cannot decode it either.
159
+ */
160
+ function bytesOf(sentHex) {
161
+ const tx = (0, rawtx_1.readTxHex)(sentHex, { maxStripped: rawtx_1.MAX_TX_BYTES });
162
+ if (!tx)
163
+ return undefined;
164
+ return {
165
+ inputs: tx.inputs.map((input) => ({ txid: input.txid, vout: input.vout })),
166
+ values: tx.outputs.map((output) => output.value),
167
+ strippedSize: tx.strippedSize,
168
+ };
169
+ }
170
+ /**
171
+ * The node's answer to the hex this driver sent. A terminal `rejected` frees the
172
+ * Attempt's inputs for a caller's retry, and if a lying or buggy endpoint relayed the bytes
173
+ * before it claimed them invalid, the retry and the original can both confirm: a double
174
+ * payment. So a rejection stands only when its claimed reason holds for those bytes, decoded
175
+ * here (whether they decode is always this module's own finding): an undecodable
176
+ * hex for `TX decode failed`, a byte rule for a `CheckTransaction` reason. Anything else is
177
+ * `refused`.
178
+ */
179
+ function classifyOwnBroadcast(error, sentHex) {
180
+ const claim = nodeClaim(error);
181
+ if (claim.kind !== 'invalid')
182
+ return claim;
183
+ const bytes = bytesOf(sentHex);
184
+ const rejected = { kind: 'rejected', reason: claim.reason };
185
+ const name = claimedReason(error, error.message.trim())?.[1];
186
+ if (name === DECODE_FAILED)
187
+ return bytes === undefined ? rejected : UNCONFIRMED;
188
+ const rule = name !== undefined && Object.hasOwn(BYTE_RULES, name) ? BYTE_RULES[name] : undefined;
189
+ return bytes !== undefined && rule?.(bytes) ? rejected : UNCONFIRMED;
190
+ }
191
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/adapters/utxo/errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Broadcast classification (pure). Esplora forwards bitcoind's `sendrawtransaction` error as\n * an HTTP 400 body, in one of two formats:\n * - Blockstream electrs: `sendrawtransaction RPC error -26: min relay fee not met, 100 < 141`\n * - mempool/electrs: `sendrawtransaction RPC error: {\"code\":-26,\"message\":\"min relay fee …\"}`\n *\n * `rejected` only for exact, anchored reject reasons that make these\n * bytes invalid by consensus on every node (bitcoind's `CheckTransaction` and consensus\n * script checks, and an undecodable transaction); everything that depends on state, policy\n * or node configuration is `refused`, which is also the default for unknown texts. A\n * `rejected` reason counts only under the code bitcoind answers it with, so a text outside\n * bitcoind's structured answer never ends an Attempt. Reasons are fixed literals: bitcoind's\n * texts carry txids, amounts and fee rates, which a stored reason must never hold.\n *\n * A node's rejection is a claim. `nodeClaim` only parses what the node\n * claims, and a claimed consensus failure is `invalid`, a kind no `Broadcaster` may return.\n * `classifyOwnBroadcast`, the only classifier, keeps a `rejected` only when the claimed reason\n * holds for the bytes that were sent, checked here, and makes every other one `refused`\n * (non-terminal). No export takes the node at its word.\n */\nimport type { BroadcastResult } from '../../core/driver/types';\nimport { MAX_TX_BYTES, readTxHex } from './rawtx';\n\nexport interface NodeError {\n readonly code?: number;\n readonly message: string;\n}\n\n/**\n * Only a body's head is read. bitcoind's code and reject reason come first and its\n * texts are far shorter; unbounded, the mempool/electrs pattern is quadratic in the length.\n */\nconst MAX_BODY = 1_024;\n\n/**\n * The bitcoind error inside an Esplora 400 body, or the body's head when it is neither\n * format.\n */\nexport function parseNodeError(body: string): NodeError {\n const text = body.slice(0, MAX_BODY).trim();\n const json = /RPC error: (\\{.*\\})$/s.exec(text);\n if (json) {\n try {\n const parsed = JSON.parse(json[1] as string) as {\n code?: unknown;\n message?: unknown;\n };\n if (typeof parsed.message === 'string') {\n return {\n ...(typeof parsed.code === 'number' ? { code: parsed.code } : {}),\n message: parsed.message,\n };\n }\n } catch {\n // Fall through: not the mempool/electrs format after all.\n }\n }\n // The transport keeps only the first 300 characters of a 400 body (`details.body`), which\n // leaves the JSON of a long message unterminated: its code and the head of its message\n // classify it as the Blockstream format of the same answer does.\n const cut = /RPC error: \\{\"code\":(-?\\d+),\"message\":\"(.*)$/s.exec(text);\n if (cut) return { code: Number(cut[1]), message: cut[2] as string };\n const plain = /RPC error (-?\\d+): (.*)$/s.exec(text);\n if (plain) return { code: Number(plain[1]), message: plain[2] as string };\n return { message: text };\n}\n\n/** A reject reason at the start of the message, followed by nothing, `,`, `.` or a space. */\nconst reason = (...names: readonly string[]): RegExp =>\n new RegExp(\n `^(?:${names.map((n) => n.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')).join('|')})(?:$|,| \\\\(|\\\\.| )`,\n );\n\nconst ALREADY_KNOWN = reason(\n 'txn-already-in-mempool',\n 'txn-already-known',\n 'txn-same-nonwitness-data-in-mempool',\n 'Transaction outputs already in utxo set',\n 'Transaction already in block chain',\n);\n\n/** bitcoind's -22 (`RPC_DESERIALIZATION_ERROR`) reason: the hex does not decode. */\nconst DECODE_FAILED = 'TX decode failed';\n\n/**\n * Consensus failures of these exact bytes (bitcoind `CheckTransaction`, consensus scripts),\n * each under the code bitcoind answers it with: -26 (`RPC_VERIFY_REJECTED`, a mempool\n * rejection) or -22 (`RPC_DESERIALIZATION_ERROR`, undecodable hex).\n */\nconst REJECTED: readonly (readonly [number, readonly string[], string])[] = [\n [\n -26,\n [\n 'bad-txns-vin-empty',\n 'bad-txns-vout-empty',\n 'bad-txns-oversize',\n 'bad-txns-vout-negative',\n 'bad-txns-vout-toolarge',\n 'bad-txns-txouttotal-toolarge',\n 'bad-txns-inputs-duplicate',\n 'bad-txns-prevout-null',\n 'bad-txns-in-belowout',\n 'bad-txns-inputvalues-outofrange',\n 'bad-txns-fee-outofrange',\n 'coinbase',\n ],\n 'invalid by consensus rules',\n ],\n [\n -26,\n ['mandatory-script-verify-flag-failed', 'block-script-verify-flag-failed'],\n 'script verification failed',\n ],\n [-22, [DECODE_FAILED], 'the transaction does not decode'],\n];\n\n/** Each rejected reason's own anchored pattern, with the code and the verdict text. */\nconst CLAIMS: readonly (readonly [number, string, RegExp, string])[] = REJECTED.flatMap(\n ([code, names, text]) => names.map((name) => [code, name, reason(name), text] as const),\n);\n\n/** The rejected reason bitcoind's answer claims, or `undefined` when it claims none. */\nfunction claimedReason(error: NodeError, message: string) {\n return CLAIMS.find(([code, , pattern]) => error.code === code && pattern.test(message));\n}\n\nconst FEE_TOO_LOW = reason(\n 'min relay fee not met',\n 'mempool min fee not met',\n 'insufficient fee',\n);\nconst SPENT = reason(\n 'bad-txns-inputs-missingorspent',\n 'Missing inputs',\n 'Inputs missing or spent',\n 'txn-mempool-conflict',\n 'bad-txns-spends-conflicting-tx',\n);\n\n/**\n * What bitcoind's answer claims, parsed: it decides nothing. A claimed consensus failure is\n * `invalid`, which is no `BroadcastResult`: only `classifyOwnBroadcast` turns it into a\n * `rejected` verdict, and only for bytes its reason holds for.\n */\nexport type NodeClaim =\n | Extract<BroadcastResult, { readonly kind: 'already-known' | 'refused' }>\n | { readonly kind: 'invalid'; readonly reason: string };\n\nexport function nodeClaim(error: NodeError): NodeClaim {\n const message = error.message.trim();\n if (ALREADY_KNOWN.test(message) || error.code === -27) return { kind: 'already-known' };\n const claim = claimedReason(error, message);\n if (claim) return { kind: 'invalid', reason: claim[3] };\n if (FEE_TOO_LOW.test(message)) {\n return { kind: 'refused', code: 'FEE_TOO_LOW', reason: 'fee too low for the node' };\n }\n if (SPENT.test(message)) {\n return {\n kind: 'refused',\n code: 'TX_REFUSED',\n reason: 'inputs missing or already spent',\n };\n }\n return {\n kind: 'refused',\n code: 'TX_REFUSED',\n reason: 'the node refused the transaction',\n };\n}\n\n/**\n * A transaction's bytes as bitcoind's byte-only checks read them, decoded here\n * from the hex that was sent: its outpoints, its output values as signed 64-bit integers, and\n * its size without witness data.\n */\ninterface TxBytes {\n readonly inputs: readonly { readonly txid: string; readonly vout: number }[];\n readonly values: readonly bigint[];\n readonly strippedSize: number;\n}\n\n/** Bitcoin Core's `MAX_MONEY` and `MAX_BLOCK_WEIGHT`. */\nconst MAX_MONEY = 2_100_000_000_000_000n;\nconst MAX_BLOCK_WEIGHT = 4_000_000;\nconst NULL_TXID = '0'.repeat(64);\n\nconst isNull = (input: TxBytes['inputs'][number]): boolean =>\n input.txid === NULL_TXID && input.vout === 0xffffffff;\nconst isCoinbase = (tx: TxBytes): boolean =>\n tx.inputs.length === 1 && isNull(tx.inputs[0] as TxBytes['inputs'][number]);\n\n/**\n * bitcoind's reasons the bytes alone decide (`CheckTransaction`, and ATMP's `coinbase`), each\n * as bitcoind tests it. The others (`bad-txns-in-belowout`, `-inputvalues-outofrange`,\n * `-fee-outofrange` and every script check) depend on the spent outputs, and have no rule: the\n * builder spends only outputs whose value and script their previous transaction authenticates\n * (every input, every wallet type, whatever `nonWitnessUtxo` says), and the core\n * verifies every signature, so they cannot hold for our own bytes, and a node that claims one\n * is not believed.\n */\nconst BYTE_RULES: Readonly<Record<string, (tx: TxBytes) => boolean>> = {\n 'bad-txns-vin-empty': (tx) => tx.inputs.length === 0,\n 'bad-txns-vout-empty': (tx) => tx.values.length === 0,\n 'bad-txns-oversize': (tx) => tx.strippedSize * 4 > MAX_BLOCK_WEIGHT,\n 'bad-txns-vout-negative': (tx) => tx.values.some((value) => value < 0n),\n 'bad-txns-vout-toolarge': (tx) => tx.values.some((value) => value > MAX_MONEY),\n // bitcoind's loop: each output in order, stopping at the first that fails.\n 'bad-txns-txouttotal-toolarge': (tx) => {\n let total = 0n;\n for (const value of tx.values) {\n if (value < 0n || value > MAX_MONEY) return false; // `vout-negative`, `-toolarge`\n total += value;\n if (total > MAX_MONEY) return true;\n }\n return false;\n },\n 'bad-txns-inputs-duplicate': (tx) =>\n new Set(tx.inputs.map((input) => `${input.txid}:${input.vout}`)).size <\n tx.inputs.length,\n 'bad-txns-prevout-null': (tx) => !isCoinbase(tx) && tx.inputs.some(isNull),\n coinbase: isCoinbase,\n};\n\n/** A rejection this driver cannot confirm for the bytes it sent: observed, never terminal. */\nconst UNCONFIRMED: BroadcastResult = {\n kind: 'refused',\n code: 'TX_REFUSED',\n reason: 'the node claimed the transaction is invalid',\n};\n\n/**\n * The hex that was sent, decoded as `sendrawtransaction` decodes it (`rawtx.ts` follows\n * bitcoind's format, with no cap below the broadcaster's own), or `undefined` when bitcoind\n * cannot decode it either.\n */\nfunction bytesOf(sentHex: string): TxBytes | undefined {\n const tx = readTxHex(sentHex, { maxStripped: MAX_TX_BYTES });\n if (!tx) return undefined;\n return {\n inputs: tx.inputs.map((input) => ({ txid: input.txid, vout: input.vout })),\n values: tx.outputs.map((output) => output.value),\n strippedSize: tx.strippedSize,\n };\n}\n\n/**\n * The node's answer to the hex this driver sent. A terminal `rejected` frees the\n * Attempt's inputs for a caller's retry, and if a lying or buggy endpoint relayed the bytes\n * before it claimed them invalid, the retry and the original can both confirm: a double\n * payment. So a rejection stands only when its claimed reason holds for those bytes, decoded\n * here (whether they decode is always this module's own finding): an undecodable\n * hex for `TX decode failed`, a byte rule for a `CheckTransaction` reason. Anything else is\n * `refused`.\n */\nexport function classifyOwnBroadcast(error: NodeError, sentHex: string): BroadcastResult {\n const claim = nodeClaim(error);\n if (claim.kind !== 'invalid') return claim;\n const bytes = bytesOf(sentHex);\n const rejected: BroadcastResult = { kind: 'rejected', reason: claim.reason };\n const name = claimedReason(error, error.message.trim())?.[1];\n if (name === DECODE_FAILED) return bytes === undefined ? rejected : UNCONFIRMED;\n const rule =\n name !== undefined && Object.hasOwn(BYTE_RULES, name) ? BYTE_RULES[name] : undefined;\n return bytes !== undefined && rule?.(bytes) ? rejected : UNCONFIRMED;\n}\n"]}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * The Esplora REST API, sent directly over the core transport. Every call carries the
3
+ * calling driver method's tags and a `route` template with no identifiers in it, which
4
+ * events and logs show instead of the path. Answers are validated strictly: a malformed
5
+ * one is a retryable `ProviderError('PROVIDER_UNAVAILABLE')`, a missing or ill-typed
6
+ * field is malformed and never a default, an answer for another id than the one asked for is
7
+ * refused, and a 404 is `null`. Chain data is read as the chain allows it, never bounded by
8
+ * what this library builds (lenient readers). Chain reads use the `rpc` transport; address
9
+ * reads use the `indexer`. Only raw transactions and blocks are decoded, by the strict
10
+ * linear readers (`rawtx.ts`, `rawblock.ts`), to bind them to their txid or block hash.
11
+ */
12
+ import { ProviderError } from '../../core/errors/error';
13
+ import type { Transport } from '../../core/transport/types';
14
+ import { type PreviousTx } from './codec';
15
+ import { type RawBlock } from './rawblock';
16
+ import type { EsploraAddressStats, EsploraBlock, EsploraOutspend, EsploraStatus, EsploraTx, EsploraUtxo, UtxoCallTags } from './types';
17
+ /**
18
+ * The previous transactions one client keeps, by count and by bytes without the
19
+ * witness (a larger one is not kept). A typical one is a few hundred bytes.
20
+ */
21
+ export declare const PREVIOUS_TX_CACHE: Readonly<{
22
+ entries: 1000;
23
+ bytes: 8000000;
24
+ }>;
25
+ /** Bitcoin Core's `MAX_MONEY`: no output, and no balance, is larger. */
26
+ export declare const MAX_MONEY = 2100000000000000n;
27
+ export declare function malformed(what: string): ProviderError;
28
+ /** A definitive 404 (not an ambiguous or retried failure): the resource is not there. */
29
+ export declare function isNotFound(error: unknown): boolean;
30
+ export declare function parseHeight(text: unknown): bigint;
31
+ export declare function parseHash(text: unknown): string;
32
+ export declare function parseStatus(value: unknown): EsploraStatus;
33
+ export declare function parseTx(value: unknown): EsploraTx;
34
+ export declare function parseOutspend(value: unknown): EsploraOutspend;
35
+ /** Esplora's `/fee-estimates`: confirmation target (blocks) → sat/vB (a float). */
36
+ export declare function parseFeeEstimates(value: unknown): ReadonlyMap<number, number>;
37
+ /** Whether a caller's id is a txid or block hash (64 lowercase hex characters). */
38
+ export declare const isHash: (value: unknown) => value is string;
39
+ /** An output as a transaction's bytes hold it: its value, signed as bitcoind reads it. */
40
+ export interface TxOutput {
41
+ readonly value: bigint;
42
+ readonly script: Uint8Array;
43
+ }
44
+ /** One Esplora endpoint family (the `rpc` transport) and its address index (`indexer`). */
45
+ export declare class EsploraClient {
46
+ #private;
47
+ private readonly chain;
48
+ private readonly indexer;
49
+ private readonly cache;
50
+ constructor(chain: Transport, indexer: Transport, cache?: {
51
+ readonly entries: number;
52
+ readonly bytes: number;
53
+ });
54
+ tipHeight(tags: UtxoCallTags): Promise<bigint>;
55
+ /** The hash of the block at `height` on this endpoint's best chain, or `null` above its tip. */
56
+ blockHashAt(height: bigint, tags: UtxoCallTags): Promise<string | null>;
57
+ block(blockHash: string, tags: UtxoCallTags): Promise<EsploraBlock | null>;
58
+ /**
59
+ * `/block/:hash/raw`, the block's own bytes, read strictly once (`rawblock.ts`) and bound to
60
+ * `blockHash`: bytes that do not decode are malformed, and bytes whose header hashes to
61
+ * another block, or whose transactions are not the ones that header commits to, are a
62
+ * retryable `PROVIDER_INCONSISTENT`. So no endpoint can add, drop or alter a transaction of
63
+ * a block whose hash is right. A 404 (a backend that does not have the block) is `null`.
64
+ */
65
+ rawBlock(blockHash: string, tags: UtxoCallTags): Promise<RawBlock | null>;
66
+ blockTxids(blockHash: string, tags: UtxoCallTags): Promise<string[]>;
67
+ /** Up to 25 transactions of a block from `start` (a multiple of 25). */
68
+ blockTxs(blockHash: string, start: number, tags: UtxoCallTags): Promise<EsploraTx[]>;
69
+ tx(txid: string, tags: UtxoCallTags): Promise<EsploraTx | null>;
70
+ /** The raw transaction, as hex, bound to `txid` (see `#rawTx`). */
71
+ txHex(txid: string, tags: UtxoCallTags): Promise<string | null>;
72
+ /**
73
+ * An input's previous transaction, decoded once and bound to `txid` (see
74
+ * `#rawTx`). Its bytes authenticate themselves, so it is kept per txid, whatever endpoint
75
+ * served it, in a bounded cache: a replacement's inputs are read once per client.
76
+ */
77
+ previousTx(txid: string, tags: UtxoCallTags): Promise<PreviousTx | null>;
78
+ /**
79
+ * The outputs of transaction `txid`, from its bytes, bound to `txid` (see `#rawTx`), or
80
+ * `null` when the endpoint does not have it: what an input naming `txid:vout` spends. A
81
+ * previous transaction this client keeps answers without a read; one read here is not kept,
82
+ * since a block scan reads thousands, which would evict a build's.
83
+ */
84
+ outputsOf(txid: string, tags: UtxoCallTags): Promise<readonly TxOutput[] | null>;
85
+ /**
86
+ * A transaction this client sent for an Attempt and a node took. Its bytes are
87
+ * known here, so its outputs are not an indexer's word even before a block holds it, and
88
+ * under `minInputConfirmations: 0` they may be spent unconfirmed. Kept like the cache.
89
+ */
90
+ rememberOwn(tx: PreviousTx): void;
91
+ isOwn(txid: string): boolean;
92
+ outspend(txid: string, vout: number, tags: UtxoCallTags): Promise<EsploraOutspend>;
93
+ feeEstimates(tags: UtxoCallTags): Promise<ReadonlyMap<number, number>>;
94
+ /** `POST /tx`: the node's txid on success; a node refusal is the transport's `RPC_ERROR`. */
95
+ broadcast(hex: string, tags: UtxoCallTags): Promise<string>;
96
+ addressUtxos(address: string, tags: UtxoCallTags): Promise<EsploraUtxo[]>;
97
+ addressStats(address: string, tags: UtxoCallTags): Promise<EsploraAddressStats>;
98
+ /** Confirmed history, newest first, 25 per page, after `lastSeen` when given. */
99
+ addressTxs(address: string, lastSeen: string | undefined, tags: UtxoCallTags): Promise<EsploraTx[]>;
100
+ }