crypto-aio 0.0.2 → 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 (672) 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/lib-types.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/adapters/ton/types.js +3 -0
  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/core/model/transaction.js +3 -0
  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 -44
  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 -2
  638. package/dist/libs/eth/contract.js +0 -7
  639. package/dist/libs/eth/contract.js.map +0 -1
  640. package/dist/libs/eth/index.d.ts +0 -20
  641. package/dist/libs/eth/index.js +0 -62
  642. package/dist/libs/eth/index.js.map +0 -1
  643. package/dist/libs/eth/transact.d.ts +0 -2
  644. package/dist/libs/eth/transact.js +0 -7
  645. package/dist/libs/eth/transact.js.map +0 -1
  646. package/dist/libs/index.d.ts +0 -1
  647. package/dist/libs/index.js +0 -18
  648. package/dist/libs/index.js.map +0 -1
  649. package/dist/tool/common.d.ts +0 -28
  650. package/dist/tool/common.js +0 -33
  651. package/dist/tool/common.js.map +0 -1
  652. package/dist/tool/eth-tools.d.ts +0 -3
  653. package/dist/tool/eth-tools.js +0 -33
  654. package/dist/tool/eth-tools.js.map +0 -1
  655. package/dist/tool/index.d.ts +0 -4
  656. package/dist/tool/index.js +0 -21
  657. package/dist/tool/index.js.map +0 -1
  658. package/dist/tool/logging.d.ts +0 -3
  659. package/dist/tool/logging.js +0 -11
  660. package/dist/tool/logging.js.map +0 -1
  661. package/dist/tool/options.d.ts +0 -4
  662. package/dist/tool/options.js +0 -28
  663. package/dist/tool/options.js.map +0 -1
  664. package/dist/type/account.d.ts +0 -9
  665. package/dist/type/account.js.map +0 -1
  666. package/dist/type/common.d.ts +0 -18
  667. package/dist/type/common.js.map +0 -1
  668. package/dist/type/index.d.ts +0 -3
  669. package/dist/type/index.js +0 -20
  670. package/dist/type/index.js.map +0 -1
  671. package/dist/type/lib-types.d.ts +0 -7
  672. package/dist/type/lib-types.js.map +0 -1
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Proofs and block scanning. Each fact is attested at its own height with a monotone
3
+ * predicate, never at a height one endpoint proposes. "My finalized height is past H" is
4
+ * a quorum read of `getBlockHeight({ commitment: 'finalized' })` keyed on `height > H`;
5
+ * the block at a height is a quorum read of `getBlock(slot, { commitment: 'finalized' })`
6
+ * keyed on its consensus fields, so an endpoint that has not finalized it answers nothing
7
+ * and decides nothing.
8
+ *
9
+ * The expiry height itself is never taken on trust: the build read it from one endpoint,
10
+ * and a height reported too low would prove an Attempt expired while it can still land,
11
+ * so `rebuild` would pay twice. A verdict rests on the height the quorum attests for the
12
+ * transaction's blockhash: when the finalized block at the slot the build recorded
13
+ * carries it, that block's height plus `BLOCKHASH_VALIDITY` is the last valid height,
14
+ * whatever was recorded; otherwise the finalized block at the recorded height minus
15
+ * `BLOCKHASH_VALIDITY` must carry it, which confirms the recorded height without the
16
+ * slot. Neither decides nothing.
17
+ *
18
+ * A transaction is proven absent only by reading every block of its window
19
+ * under finality: each block certifies its own height and its parent's hash, from the
20
+ * blockhash's own block to the window's last, so a lagging, pruned, snapshot-jumped or
21
+ * long-term-storage-gapped backend behind a load-balanced URL can only answer "not
22
+ * available" (decides nothing), never a short window.
23
+ *
24
+ * Only a definitive negative proof answers "no". Every other RPC error
25
+ * on these paths decides nothing (`undecided`: a retryable `PROVIDER_UNAVAILABLE`).
26
+ *
27
+ * Tags: every read a verdict rests on carries the contract table's proof tags (`ChainDriver`
28
+ * in the core's `driver/types.ts`: purpose `proof`, quorum `'proof'`), with two deliberate
29
+ * exceptions, both single-endpoint `monitor` reads of hints the quorum then re-attests: the
30
+ * finalized height behind `finalizedHead` (the one unanchored head), and the
31
+ * height-to-slot lookups of `HeightIndex` (`attestedBlock`). A wrong hint names a block the
32
+ * quorum does not attest at that height, so it only ever decides nothing.
33
+ */
34
+ import type { BlockSource, ProofSource } from '../../core/driver/types';
35
+ import { type SolanaContext } from './reader';
36
+ /**
37
+ * A blockhash is valid for this many blocks after its own: agave's `MAX_PROCESSING_AGE`
38
+ * (v4.3.0: `runtime/src/bank.rs` sets every bank's `max_processing_age` to it, and
39
+ * `get_blockhash_last_valid_block_height` answers `block_height + max_processing_age −
40
+ * age`, so the newest blockhash's last valid height is its block's height plus 150).
41
+ */
42
+ export declare const BLOCKHASH_VALIDITY = 150n;
43
+ /**
44
+ * The heights that can hold a transaction whose blockhash gives `lastValidBlockHeight`:
45
+ * from the block after the blockhash's own, through `lastValidBlockHeight + 1`. agave checks
46
+ * a blockhash's age against the including block's PARENT, so the block after
47
+ * `lastValidBlockHeight` still accepts it.
48
+ */
49
+ export declare function windowOf(lastValidHeight: bigint): {
50
+ readonly first: bigint;
51
+ readonly end: bigint;
52
+ };
53
+ /** Library policy: an unanchored head trails one endpoint's view by this peer skew. */
54
+ export declare const PEER_SKEW = 2n;
55
+ export declare function createSolanaProofs(ctx: SolanaContext): ProofSource;
56
+ export declare function createSolanaBlocks(ctx: SolanaContext): BlockSource;
@@ -0,0 +1,540 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PEER_SKEW = exports.BLOCKHASH_VALIDITY = void 0;
4
+ exports.windowOf = windowOf;
5
+ exports.createSolanaProofs = createSolanaProofs;
6
+ exports.createSolanaBlocks = createSolanaBlocks;
7
+ const error_1 = require("../../core/errors/error");
8
+ const decode_1 = require("./decode");
9
+ const keys_1 = require("./keys");
10
+ const reader_1 = require("./reader");
11
+ const rpc_1 = require("./rpc");
12
+ /**
13
+ * A blockhash is valid for this many blocks after its own: agave's `MAX_PROCESSING_AGE`
14
+ * (v4.3.0: `runtime/src/bank.rs` sets every bank's `max_processing_age` to it, and
15
+ * `get_blockhash_last_valid_block_height` answers `block_height + max_processing_age −
16
+ * age`, so the newest blockhash's last valid height is its block's height plus 150).
17
+ */
18
+ exports.BLOCKHASH_VALIDITY = 150n;
19
+ /**
20
+ * The heights that can hold a transaction whose blockhash gives `lastValidBlockHeight`:
21
+ * from the block after the blockhash's own, through `lastValidBlockHeight + 1`. agave checks
22
+ * a blockhash's age against the including block's PARENT, so the block after
23
+ * `lastValidBlockHeight` still accepts it.
24
+ */
25
+ function windowOf(lastValidHeight) {
26
+ const first = lastValidHeight >= exports.BLOCKHASH_VALIDITY - 1n
27
+ ? lastValidHeight - exports.BLOCKHASH_VALIDITY + 1n
28
+ : 0n;
29
+ return { first, end: lastValidHeight + 1n };
30
+ }
31
+ /** Signatures proven absent from their finalized windows, kept per driver. */
32
+ const ABSENT_MEMO = 1_024;
33
+ /**
34
+ * Window proofs in progress, kept per driver with the same bound: each window's
35
+ * attested frame, and how far each signature's read of it got.
36
+ */
37
+ const WINDOW_MEMO = 1_024;
38
+ /** Attested last valid heights by blockhash (immutable chain data), kept per driver. */
39
+ const ANCHOR_MEMO = 1_024;
40
+ /** Library policy: an unanchored head trails one endpoint's view by this peer skew. */
41
+ exports.PEER_SKEW = 2n;
42
+ /** Drops a bounded memo's oldest entry once it holds more than `size`. */
43
+ function trim(memo, size) {
44
+ if (memo.size > size)
45
+ memo.delete(memo.keys().next().value);
46
+ }
47
+ async function finalizedHeight(ctx) {
48
+ return (0, rpc_1.u64)(await (0, rpc_1.call)(ctx.transport, 'getBlockHeight', [{ commitment: 'finalized' }], rpc_1.MONITOR), 'getBlockHeight');
49
+ }
50
+ /**
51
+ * Whether every quorum endpoint has finalized a block above `height`: the monotone
52
+ * predicate "my finalized height > height". Endpoints that disagree throw a
53
+ * retryable `PROVIDER_INCONSISTENT` (decides nothing); all saying no is `false`.
54
+ */
55
+ async function finalizedPast(ctx, height) {
56
+ const past = (result) => {
57
+ if (typeof result === 'bigint')
58
+ return result > height;
59
+ if (typeof result === 'number' && Number.isSafeInteger(result))
60
+ return BigInt(result) > height;
61
+ throw (0, rpc_1.malformed)('getBlockHeight');
62
+ };
63
+ const result = await (0, rpc_1.call)(ctx.transport, 'getBlockHeight', [{ commitment: 'finalized' }], { ...rpc_1.PROOF, quorumKey: past });
64
+ return past(result);
65
+ }
66
+ /** Our own expiry ordering's recorded height, or `undefined` for any other ordering. */
67
+ const lastValidOf = (ordering) => ordering.kind === 'expiry' ? ordering.lastValidHeight : undefined;
68
+ /** The blockhash an expiry ordering names, if any (the key of the attested heights). */
69
+ const blockhashOf = (ordering) => {
70
+ const { blockhash } = ordering;
71
+ return typeof blockhash === 'string' ? blockhash : undefined;
72
+ };
73
+ /**
74
+ * The blockhash and slot a build recorded with the height (`SolanaExpiryOrdering`). An
75
+ * ordering without a blockhash can never be attested: it decides nothing. A missing or
76
+ * ill-typed slot only leaves the slot-free check.
77
+ */
78
+ function recordedOf(ordering, lastValidHeight) {
79
+ const { blockhash, blockhashSlot: slot } = ordering;
80
+ if ((0, keys_1.decodeBase58)(blockhash, 32) === null) {
81
+ throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the expiry ordering does not name the blockhash its height belongs to');
82
+ }
83
+ const exact = typeof slot === 'bigint' && slot >= 0n && slot <= BigInt(Number.MAX_SAFE_INTEGER);
84
+ return { lastValidHeight, blockhash: blockhash, ...(exact ? { slot } : {}) };
85
+ }
86
+ const BLOCKHASH_BLOCK = "the block of the transaction's blockhash";
87
+ const LIE = 'the recorded expiry height disagrees with its blockhash; using the attested one';
88
+ /**
89
+ * The height of the finalized block at `slot` when it carries `blockhash`, or
90
+ * `null` when the slot does not anchor it (another block there, a skipped or pruned slot,
91
+ * no finalized block yet). The quorum key is the block's height and whether its hash
92
+ * matches, so the height adopted is every endpoint's, never the first answer's. Only a
93
+ * hash match yields a height; a disagreement or any other error decides nothing.
94
+ */
95
+ async function heightAtSlot(ctx, blockhash, slot) {
96
+ const key = (result) => {
97
+ if (result === null)
98
+ return null;
99
+ const header = (0, rpc_1.blockHeader)(result);
100
+ return {
101
+ height: header.blockHeight.toString(),
102
+ matches: header.blockhash === blockhash,
103
+ };
104
+ };
105
+ let result;
106
+ try {
107
+ result = await (0, rpc_1.call)(ctx.transport, 'getBlock', [Number(slot), (0, rpc_1.headerOptions)('finalized')], { ...rpc_1.PROOF, quorumKey: key });
108
+ }
109
+ catch (error) {
110
+ if ((0, rpc_1.isNotAvailable)(error))
111
+ return null;
112
+ throw (0, rpc_1.undecided)(error, BLOCKHASH_BLOCK);
113
+ }
114
+ if (result === null)
115
+ return null;
116
+ const header = (0, rpc_1.blockHeader)(result);
117
+ return header.blockhash === blockhash ? header.blockHeight : null;
118
+ }
119
+ /**
120
+ * The last valid height the quorum attests for a recorded expiry. agave answers
121
+ * `getLatestBlockhash` from one bank (its slot, its last blockhash, and that blockhash's
122
+ * last valid height: `block_height + MAX_PROCESSING_AGE`), so an honest record anchors at
123
+ * its slot. When it does, the attested block's height plus `BLOCKHASH_VALIDITY` is the
124
+ * answer, and a recorded height that disagrees is a build-time lie: logged (fixed text) and
125
+ * ignored. When the slot does not anchor the blockhash, the block at the recorded height
126
+ * minus `BLOCKHASH_VALIDITY` must carry it, which confirms the recorded height. Only a
127
+ * lie in both the slot and the height is never attested: it decides nothing, for good, so
128
+ * such an Operation stays unresolved but is never paid twice.
129
+ */
130
+ async function attestLastValid(ctx, recorded) {
131
+ const at = recorded.slot === undefined
132
+ ? null
133
+ : await heightAtSlot(ctx, recorded.blockhash, recorded.slot);
134
+ if (at !== null) {
135
+ const last = at + exports.BLOCKHASH_VALIDITY;
136
+ if (last !== recorded.lastValidHeight)
137
+ ctx.log.warn(LIE);
138
+ return last;
139
+ }
140
+ const height = recorded.lastValidHeight - exports.BLOCKHASH_VALIDITY;
141
+ const block = height < 0n ? null : await attestedBlock(ctx, height, 'finalized');
142
+ if (!block)
143
+ throw (0, rpc_1.notYet)(BLOCKHASH_BLOCK);
144
+ if (block.header.blockhash !== recorded.blockhash) {
145
+ throw (0, rpc_1.inconsistent)('neither the recorded slot nor the recorded height holds the blockhash');
146
+ }
147
+ return recorded.lastValidHeight;
148
+ }
149
+ /**
150
+ * The block at `height` as the quorum serves it at `commitment`, or `null` when an endpoint
151
+ * cannot show it there yet. The slot of a height comes from one endpoint's block list; the
152
+ * quorum then attests the block itself and its height, so a wrong slot only ever decides
153
+ * nothing. Callers use it only for heights the quorum already holds as final (deep window
154
+ * starts, heights at or below an attested finalized height) or for `'latest'` checks where
155
+ * `null` decides nothing.
156
+ */
157
+ async function attestedBlock(ctx, height, commitment) {
158
+ const slot = await ctx.heights.slotAt(height, commitment, rpc_1.MONITOR);
159
+ if (slot === null)
160
+ return null;
161
+ let result;
162
+ try {
163
+ result = await (0, rpc_1.call)(ctx.transport, 'getBlock', [Number(slot), (0, rpc_1.headerOptions)(commitment)], rpc_1.PROOF);
164
+ }
165
+ catch (error) {
166
+ if ((0, rpc_1.isSkipped)(error)) {
167
+ // The slot came from a list that named a slot with no block.
168
+ ctx.heights.forget();
169
+ throw (0, rpc_1.inconsistent)(`slot ${slot} holds no block`);
170
+ }
171
+ if ((0, rpc_1.isNotAvailable)(error))
172
+ return null;
173
+ throw (0, rpc_1.undecided)(error, `the block at height ${height}`);
174
+ }
175
+ if (result === null)
176
+ return null;
177
+ const header = (0, rpc_1.blockHeader)(result);
178
+ if (header.blockHeight !== height) {
179
+ ctx.heights.forget();
180
+ throw (0, rpc_1.inconsistent)(`the block at slot ${slot} is not at height ${height}`);
181
+ }
182
+ return { slot, header };
183
+ }
184
+ /** The frame of `anchor`'s window, attested once and then kept. */
185
+ async function windowFrame(ctx, anchor, memo, key) {
186
+ const kept = memo.frames.get(key);
187
+ if (kept)
188
+ return kept;
189
+ const { first, end } = windowOf(anchor.lastValidHeight);
190
+ const top = await attestedBlock(ctx, end, 'finalized');
191
+ const bottom = await attestedBlock(ctx, first, 'finalized');
192
+ if (!top || !bottom)
193
+ throw (0, rpc_1.notYet)('the transaction window');
194
+ const listKey = (result) => {
195
+ if (!Array.isArray(result))
196
+ throw (0, rpc_1.malformed)('getBlocks');
197
+ return result.map(String);
198
+ };
199
+ let listed;
200
+ try {
201
+ listed = await (0, rpc_1.call)(ctx.transport, 'getBlocks', [
202
+ Number(bottom.slot),
203
+ Number(top.slot),
204
+ { commitment: 'finalized', minContextSlot: Number(top.slot) },
205
+ ], { ...rpc_1.PROOF, quorumKey: listKey });
206
+ }
207
+ catch (error) {
208
+ if ((0, rpc_1.isNotAvailable)(error))
209
+ throw (0, rpc_1.notYet)('every block of the window');
210
+ throw (0, rpc_1.undecided)(error, 'every block of the window');
211
+ }
212
+ if (!Array.isArray(listed) || BigInt(listed.length) !== end - first + 1n) {
213
+ throw (0, rpc_1.notYet)('every block of the window');
214
+ }
215
+ const frame = {
216
+ slots: listed.map((value) => (0, rpc_1.u64)(value, 'getBlocks slot')),
217
+ lastHash: top.header.blockhash,
218
+ };
219
+ memo.frames.set(key, frame);
220
+ trim(memo.frames, WINDOW_MEMO);
221
+ return frame;
222
+ }
223
+ /**
224
+ * Whether `signature` is in none of the finalized blocks of its window.
225
+ * The window's first and last blocks are attested by height; `getBlocks` must list exactly
226
+ * one slot per height between them; every block is read whole (its signatures) under the
227
+ * proof quorum and must sit at the next height with the previous block as its parent, the
228
+ * first one on the attested blockhash's own block. A gap, a pruned block or a lagging
229
+ * backend answers "not available" and decides nothing. `false` means a block holds the
230
+ * transaction. Progress is kept between passes (`WindowMemo`): a resumed pass reads on from
231
+ * the last verified block, chained to its hash; a chain that does not hold drops what was
232
+ * kept for the window, so the next pass starts over.
233
+ */
234
+ async function absentFromWindow(ctx, signature, anchor, memo) {
235
+ const { first } = windowOf(anchor.lastValidHeight);
236
+ const window = `${anchor.lastValidHeight}:${anchor.blockhash}`;
237
+ const frame = await windowFrame(ctx, anchor, memo, window);
238
+ const key = `${signature}:${window}`;
239
+ const holds = (result) => {
240
+ const list = result?.signatures;
241
+ return Array.isArray(list) ? list.includes(signature) : null;
242
+ };
243
+ const blockKey = (result) => ({
244
+ ...(0, rpc_1.pick)(result, rpc_1.BLOCK_FIELDS),
245
+ holds: holds(result),
246
+ });
247
+ const brokenChain = (reason) => {
248
+ memo.frames.delete(window);
249
+ memo.cursors.delete(key);
250
+ return (0, rpc_1.inconsistent)(reason);
251
+ };
252
+ // The window hangs off the blockhash's own block, which the anchor attested.
253
+ let { next, parent } = memo.cursors.get(key) ?? { next: 0, parent: anchor.blockhash };
254
+ for (; next < frame.slots.length; next++) {
255
+ let block;
256
+ try {
257
+ block = await (0, rpc_1.call)(ctx.transport, 'getBlock', [
258
+ Number(frame.slots[next]),
259
+ { ...(0, rpc_1.headerOptions)('finalized'), transactionDetails: 'signatures' },
260
+ ], { ...rpc_1.PROOF, quorumKey: blockKey });
261
+ }
262
+ catch (error) {
263
+ if ((0, rpc_1.isNotAvailable)(error))
264
+ throw (0, rpc_1.notYet)('a block of the window');
265
+ throw (0, rpc_1.undecided)(error, 'a block of the window');
266
+ }
267
+ const found = holds(block);
268
+ if (found === null)
269
+ throw (0, rpc_1.notYet)('a block of the window');
270
+ const header = (0, rpc_1.blockHeader)(block);
271
+ if (header.blockHeight !== first + BigInt(next) ||
272
+ header.previousBlockhash !== parent) {
273
+ throw brokenChain('the window is not one chain of blocks');
274
+ }
275
+ if (found) {
276
+ memo.cursors.delete(key);
277
+ return false;
278
+ }
279
+ parent = header.blockhash;
280
+ memo.cursors.set(key, { next: next + 1, parent });
281
+ trim(memo.cursors, WINDOW_MEMO);
282
+ }
283
+ if (parent !== frame.lastHash) {
284
+ throw brokenChain('the window does not end at its attested block');
285
+ }
286
+ memo.cursors.delete(key);
287
+ return true;
288
+ }
289
+ /** The quorum's finalized transaction (`null`: every endpoint agrees it has none). */
290
+ async function finalTransaction(ctx, signature) {
291
+ try {
292
+ return await (0, rpc_1.call)(ctx.transport, 'getTransaction', [signature, (0, rpc_1.parsedOptions)('finalized')], rpc_1.PROOF);
293
+ }
294
+ catch (error) {
295
+ if ((0, rpc_1.isNotAvailable)(error))
296
+ throw (0, rpc_1.notYet)('the transaction history');
297
+ throw (0, rpc_1.undecided)(error, 'the transaction history');
298
+ }
299
+ }
300
+ /** Whatever a proof method meets, no RPC error is ever a verdict. */
301
+ function guarded(method) {
302
+ return async (...args) => {
303
+ try {
304
+ return await method(...args);
305
+ }
306
+ catch (error) {
307
+ throw (0, rpc_1.undecided)(error, 'the proof');
308
+ }
309
+ };
310
+ }
311
+ function createSolanaProofs(ctx) {
312
+ const absent = new Set();
313
+ const windows = { frames: new Map(), cursors: new Map() };
314
+ /** Attested last valid heights by blockhash: a blockhash names one block, for good. */
315
+ const anchors = new Map();
316
+ const known = (ordering) => {
317
+ const blockhash = blockhashOf(ordering);
318
+ return blockhash === undefined ? undefined : anchors.get(blockhash);
319
+ };
320
+ /** The attested last valid height of `ordering`, remembered once attested. */
321
+ const attested = async (ordering, recorded) => {
322
+ const record = recordedOf(ordering, recorded);
323
+ let last = anchors.get(record.blockhash);
324
+ if (last === undefined) {
325
+ last = await attestLastValid(ctx, record);
326
+ anchors.set(record.blockhash, last);
327
+ trim(anchors, ANCHOR_MEMO);
328
+ }
329
+ return { lastValidHeight: last, blockhash: record.blockhash };
330
+ };
331
+ /**
332
+ * While the recorded height has not passed, the last valid height the recorded
333
+ * slot alone attests (no height fallback), remembered as `attested` remembers it. A build
334
+ * that raised the recorded height would otherwise wait for that height, possibly for
335
+ * ever, although the real window has passed. `undefined` (not yet) when no slot was
336
+ * recorded, the slot does not hold the blockhash, or it cannot be read.
337
+ */
338
+ const attestedAtSlot = async (ordering, recorded) => {
339
+ let record;
340
+ let at;
341
+ try {
342
+ record = recordedOf(ordering, recorded);
343
+ if (record.slot === undefined)
344
+ return undefined;
345
+ at = await heightAtSlot(ctx, record.blockhash, record.slot);
346
+ }
347
+ catch {
348
+ return undefined;
349
+ }
350
+ if (at === null)
351
+ return undefined;
352
+ const last = at + exports.BLOCKHASH_VALIDITY;
353
+ if (last !== recorded)
354
+ ctx.log.warn(LIE);
355
+ anchors.set(record.blockhash, last);
356
+ trim(anchors, ANCHOR_MEMO);
357
+ return last;
358
+ };
359
+ /**
360
+ * A finalized `getTransaction` answer, read under that method's quorum key, is the only
361
+ * verdict input (never a block's entry): the transaction asked for, in the finalized
362
+ * block at its slot, with the landing guard applied.
363
+ */
364
+ const included = async (result, signature, from) => {
365
+ const parsed = (0, decode_1.parseTransaction)(result, signature);
366
+ if (parsed.slot === undefined)
367
+ throw (0, rpc_1.malformed)('getTransaction');
368
+ let header;
369
+ try {
370
+ const block = await (0, rpc_1.call)(ctx.transport, 'getBlock', [Number(parsed.slot), (0, rpc_1.headerOptions)('finalized')], rpc_1.PROOF);
371
+ header = block === null ? null : (0, rpc_1.blockHeader)(block);
372
+ }
373
+ catch (error) {
374
+ if (!(0, rpc_1.isNotAvailable)(error))
375
+ throw (0, rpc_1.undecided)(error, 'the block of the transaction');
376
+ header = null;
377
+ }
378
+ if (!header)
379
+ throw (0, rpc_1.notYet)('the block of the transaction');
380
+ // Our own token transfers count only when the balances show them. The reasons are
381
+ // `observe`'s fixed texts, so the proven failure keeps the observed one.
382
+ const reason = parsed.err !== null
383
+ ? 'transaction failed'
384
+ : (0, decode_1.tokenTransfersLanded)(parsed, from)
385
+ ? undefined
386
+ : 'token transfer failed';
387
+ return {
388
+ included: true,
389
+ success: reason === undefined,
390
+ blockHeight: header.blockHeight,
391
+ blockHash: header.blockhash,
392
+ txHash: signature,
393
+ ...(reason !== undefined ? { reason } : {}),
394
+ };
395
+ };
396
+ const proofs = {
397
+ async finalizedHead() {
398
+ // The one unanchored head: one endpoint's view, trailed by a peer skew.
399
+ const seen = await finalizedHeight(ctx);
400
+ const height = seen > exports.PEER_SKEW ? seen - exports.PEER_SKEW : 0n;
401
+ const block = await attestedBlock(ctx, height, 'finalized');
402
+ if (!block)
403
+ throw (0, rpc_1.notYet)('the finalized head');
404
+ return {
405
+ height,
406
+ hash: block.header.blockhash,
407
+ ...(block.header.blockTime !== undefined
408
+ ? { timestamp: block.header.blockTime }
409
+ : {}),
410
+ };
411
+ },
412
+ async includedFinal(ref, ordering, from) {
413
+ // A malformed signature can never be on chain.
414
+ if (!(0, keys_1.isSignature)(ref.id))
415
+ return { included: false };
416
+ const found = await finalTransaction(ctx, ref.id);
417
+ if (found !== null)
418
+ return included(found, ref.id, from);
419
+ // An index that shows nothing proves nothing; only the window can. Behind one URL,
420
+ // `getTransaction` may reach a backend that lags, was pruned or jumped to a
421
+ // snapshot, and agave ignores its `minContextSlot`.
422
+ const recorded = lastValidOf(ordering);
423
+ if (recorded === undefined)
424
+ throw (0, rpc_1.notYet)('proof that the transaction is absent');
425
+ const remembered = known(ordering);
426
+ if (remembered !== undefined && absent.has(`${ref.id}:${remembered}`)) {
427
+ return { included: false };
428
+ }
429
+ // The window's last block (lastValidBlockHeight + 1) is final everywhere, at the
430
+ // attested height. An early "no" at the recorded one only delays, unless the
431
+ // recorded slot attests another height: its predicate is asked below.
432
+ const pastWindow = () => (0, rpc_1.notYet)('finality past the transaction window');
433
+ if (remembered === undefined && !(await finalizedPast(ctx, recorded))) {
434
+ const bySlot = await attestedAtSlot(ordering, recorded);
435
+ if (bySlot === undefined || bySlot === recorded)
436
+ throw pastWindow();
437
+ }
438
+ const anchor = await attested(ordering, recorded);
439
+ const last = anchor.lastValidHeight;
440
+ if (last !== recorded || remembered !== undefined) {
441
+ if (!(await finalizedPast(ctx, last)))
442
+ throw pastWindow();
443
+ }
444
+ const key = `${ref.id}:${last}`;
445
+ if (!absent.has(key)) {
446
+ if (!(await absentFromWindow(ctx, ref.id, anchor, windows))) {
447
+ throw (0, rpc_1.inconsistent)('a block of the window holds a transaction its index does not show');
448
+ }
449
+ absent.add(key);
450
+ trim(absent, ABSENT_MEMO);
451
+ }
452
+ return { included: false };
453
+ },
454
+ // Expiry ordering has no slot that another transaction could consume.
455
+ slotConsumed: async () => false,
456
+ async expired(ordering) {
457
+ const recorded = lastValidOf(ordering);
458
+ // "Not expired" is the safe answer: it never declares a transaction dead.
459
+ if (recorded === undefined)
460
+ return false;
461
+ const remembered = known(ordering);
462
+ if (remembered !== undefined)
463
+ return finalizedPast(ctx, remembered);
464
+ // An early "no" at the recorded height only delays, unless the recorded slot attests
465
+ // another height: then that height's own predicate answers.
466
+ if (!(await finalizedPast(ctx, recorded))) {
467
+ const bySlot = await attestedAtSlot(ordering, recorded);
468
+ return bySlot !== undefined && bySlot !== recorded && finalizedPast(ctx, bySlot);
469
+ }
470
+ // "Expired" rests on the attested height, and its own predicate read.
471
+ const { lastValidHeight } = await attested(ordering, recorded);
472
+ return lastValidHeight === recorded || finalizedPast(ctx, lastValidHeight);
473
+ },
474
+ async blockHash(height, level) {
475
+ // Null above the finalized height decides nothing; so does any endpoint that has
476
+ // not finalized `height` yet (the attested read answers nothing there).
477
+ if (level === 'finalized' && !(await finalizedPast(ctx, height - 1n)))
478
+ return null;
479
+ const block = await attestedBlock(ctx, height, level === 'finalized' ? 'finalized' : 'confirmed');
480
+ return block?.header.blockhash ?? null;
481
+ },
482
+ };
483
+ return {
484
+ finalizedHead: guarded(proofs.finalizedHead),
485
+ includedFinal: guarded(proofs.includedFinal),
486
+ slotConsumed: guarded(proofs.slotConsumed),
487
+ expired: guarded(proofs.expired),
488
+ blockHash: guarded(proofs.blockHash),
489
+ };
490
+ }
491
+ const changed = (height) => (0, rpc_1.inconsistent)(`block ${height} changed while scanning`);
492
+ function createSolanaBlocks(ctx) {
493
+ return {
494
+ header: async (height) => (await (0, reader_1.blockAtHeight)(ctx, height, rpc_1.MONITOR))?.block ?? null,
495
+ async transactions(block, filter) {
496
+ const slot = await ctx.heights.slotAt(block.height, 'confirmed', rpc_1.MONITOR);
497
+ if (slot === null)
498
+ throw changed(block.height);
499
+ let result;
500
+ try {
501
+ result = await (0, rpc_1.call)(ctx.transport, 'getBlock', [
502
+ Number(slot),
503
+ { ...(0, rpc_1.parsedOptions)('confirmed'), transactionDetails: 'full', rewards: false },
504
+ ], rpc_1.MONITOR);
505
+ }
506
+ catch (error) {
507
+ if ((0, rpc_1.isGone)(error))
508
+ throw (0, rpc_1.gone)(`the block at height ${block.height}`);
509
+ // A slot the index named holds no block: drop the cache it came from.
510
+ if ((0, rpc_1.isSkipped)(error))
511
+ ctx.heights.forget();
512
+ if ((0, rpc_1.isNotAvailable)(error))
513
+ throw changed(block.height);
514
+ // Any other node error decides nothing; the scan retries.
515
+ throw (0, rpc_1.undecided)(error, `the block at height ${block.height}`);
516
+ }
517
+ const full = result;
518
+ if (!full || full.blockhash !== block.hash)
519
+ throw changed(block.height);
520
+ if (!Array.isArray(full.transactions))
521
+ throw (0, rpc_1.malformed)('getBlock');
522
+ const wanted = filter?.addresses?.length ? new Set(filter.addresses) : undefined;
523
+ const place = {
524
+ height: block.height,
525
+ hash: block.hash,
526
+ ...(block.timestamp !== undefined ? { blockTime: block.timestamp } : {}),
527
+ };
528
+ // All or nothing: a transaction that does not parse makes the whole block retry
529
+ // (retryable), never a block read short.
530
+ return full.transactions.flatMap((entry) => {
531
+ const parsed = (0, decode_1.parseTransaction)(entry);
532
+ if ((0, decode_1.isVote)(parsed))
533
+ return [];
534
+ const decoded = (0, decode_1.decodeTransaction)(parsed, place);
535
+ return !wanted || (0, decode_1.touches)(decoded, parsed, wanted) ? [decoded] : [];
536
+ });
537
+ },
538
+ };
539
+ }
540
+ //# sourceMappingURL=proofs.js.map