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,545 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSolanaBuilder = createSolanaBuilder;
4
+ exports.createSolanaBroadcaster = createSolanaBroadcaster;
5
+ const error_1 = require("../../core/errors/error");
6
+ const asset_1 = require("../../core/model/asset");
7
+ const fee_1 = require("../../core/model/fee");
8
+ const bytes_1 = require("../../core/util/bytes");
9
+ const errors_1 = require("./errors");
10
+ const fees_1 = require("./fees");
11
+ const keys_1 = require("./keys");
12
+ const programs_1 = require("./programs");
13
+ const reader_1 = require("./reader");
14
+ const rpc_1 = require("./rpc");
15
+ const wire_1 = require("./wire");
16
+ const invalid = (reason) => new error_1.ValidationError('INVALID_INTENT', reason);
17
+ /** A UTF-16 surrogate without its pair: text that has no UTF-8 encoding. */
18
+ const LONE_SURROGATE = /[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/;
19
+ const U64_MAX = 2n ** 64n - 1n;
20
+ const SIGNATURE_BYTES = 64;
21
+ /** The longest text of a packet-sized transaction: 1,644 base64 characters, 2,464 hex. */
22
+ const MAX_BASE64_CHARS = 4 * Math.ceil(programs_1.MAX_TRANSACTION_SIZE / 3);
23
+ const MAX_HEX_CHARS = 2 * programs_1.MAX_TRANSACTION_SIZE;
24
+ const TOO_LARGE = `the transaction exceeds ${programs_1.MAX_TRANSACTION_SIZE} bytes`;
25
+ /** Every node refuses a transaction over the packet limit; it is refused here, unsent. */
26
+ const REFUSED_TOO_LARGE = Object.freeze({
27
+ kind: 'refused',
28
+ code: 'TX_REFUSED',
29
+ reason: 'transaction too large',
30
+ });
31
+ function onlyOutput(intent) {
32
+ const output = intent.outputs[0];
33
+ if (!output || intent.outputs.length !== 1) {
34
+ throw invalid('Solana transfers have exactly one output');
35
+ }
36
+ return output;
37
+ }
38
+ const addressOf = (publicKey) => {
39
+ try {
40
+ return (0, keys_1.addressFromPublicKey)(publicKey);
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ };
46
+ /** The wallet's ed25519 key whose address is the sending address. */
47
+ function keyOf(from, keys) {
48
+ const key = keys.find((k) => k.scheme === 'ed25519' && addressOf(k.publicKey) === from);
49
+ if (!key) {
50
+ throw new error_1.SigningError('SIGNER_UNAVAILABLE', 'no ed25519 key for the sending address');
51
+ }
52
+ return key;
53
+ }
54
+ /** At most 256 UTF-8 bytes of well-formed text (the intent's policy, not `memo()`'s). */
55
+ function memoOf(text) {
56
+ if (text === undefined)
57
+ return undefined;
58
+ if (LONE_SURROGATE.test(text))
59
+ throw invalid('the memo is not well-formed Unicode text');
60
+ if (new TextEncoder().encode(text).length > programs_1.MAX_MEMO_BYTES) {
61
+ throw invalid(`the memo exceeds ${programs_1.MAX_MEMO_BYTES} UTF-8 bytes`);
62
+ }
63
+ return text;
64
+ }
65
+ async function rentExemptMinimum(ctx, bytes, tags) {
66
+ return (0, rpc_1.u64)(await (0, rpc_1.call)(ctx.transport, 'getMinimumBalanceForRentExemption', [bytes, { commitment: 'confirmed' }], tags), 'getMinimumBalanceForRentExemption');
67
+ }
68
+ /**
69
+ * The classic token account of `owner` for `mint` at its associated address, or `null`
70
+ * while that account is not created. An address that only holds lamports is not created
71
+ * yet: the ATA program keeps those lamports when it creates the account, so nobody can
72
+ * block a transfer by funding the address first. Anything else there is not the owner's
73
+ * account for the mint (a reassigned owner included), and is refused.
74
+ */
75
+ async function associatedAccount(ctx, address, owner, mint, whose, tags) {
76
+ const info = await (0, reader_1.accountInfo)(ctx, address, tags);
77
+ if (!info ||
78
+ (info.owner === programs_1.SYSTEM_PROGRAM && !info.executable && info.data.length === 0)) {
79
+ return null;
80
+ }
81
+ const account = info.owner === programs_1.TOKEN_PROGRAM ? (0, programs_1.decodeTokenAccount)(info.data) : null;
82
+ if (!account ||
83
+ (0, keys_1.encodeBase58)(account.owner) !== owner ||
84
+ (0, keys_1.encodeBase58)(account.mint) !== mint) {
85
+ throw invalid(`the ${whose} token account does not match`);
86
+ }
87
+ return { amount: account.amount, frozen: account.frozen };
88
+ }
89
+ /**
90
+ * Where a transfer pays the recipient `to` (the binding the landing guard trusts): SOL to
91
+ * `to` itself; SPL into `to`'s associated token account for the mint, derived with the
92
+ * mint's own program, classic Token (`mintDecimals` refuses every other owner).
93
+ */
94
+ const destinationOf = (ctx, to, mint) => mint === undefined ? to : ctx.codec.associatedTokenAddress(to, mint);
95
+ function tokenPlan(ctx, from, to, mint, decimals) {
96
+ return {
97
+ mint,
98
+ decimals,
99
+ source: ctx.codec.associatedTokenAddress(from, mint),
100
+ destination: destinationOf(ctx, to, mint),
101
+ };
102
+ }
103
+ /** The one output and the recipient's on-chain checks (no key: a fee needs none). */
104
+ async function planTransfer(ctx, intent, tags) {
105
+ const output = onlyOutput(intent);
106
+ const { from } = intent;
107
+ const text = memoOf(intent.memo);
108
+ const base = {
109
+ from,
110
+ to: output.to,
111
+ amount: output.amount,
112
+ ...(text !== undefined ? { memo: text } : {}),
113
+ };
114
+ const recipient = output.to === from ? null : await (0, reader_1.accountInfo)(ctx, output.to, tags);
115
+ if (intent.asset === 'native') {
116
+ if (recipient && (recipient.executable || recipient.owner !== programs_1.SYSTEM_PROGRAM)) {
117
+ throw invalid('the recipient is a program-owned account');
118
+ }
119
+ if (!recipient &&
120
+ output.to !== from &&
121
+ output.amount < (await rentExemptMinimum(ctx, 0, tags))) {
122
+ throw new error_1.ValidationError('INVALID_AMOUNT', 'a new account needs at least the rent-exempt minimum');
123
+ }
124
+ return { ...base, createsRecipientAccount: false };
125
+ }
126
+ const mint = (0, reader_1.mintOf)(intent.asset);
127
+ // Token metadata under the proof quorum, with the caller's signal: the decimals are
128
+ // signed into `transferChecked`, so a lagging endpoint without the mint decides
129
+ // nothing.
130
+ const decimals = await (0, reader_1.mintDecimals)(ctx, mint, (0, rpc_1.withSignal)(reader_1.METADATA, tags.signal));
131
+ // Nobody can sign for a program's associated token account.
132
+ if (recipient?.executable) {
133
+ throw invalid('the recipient is a program; send to a wallet or a PDA owner');
134
+ }
135
+ if (recipient &&
136
+ (recipient.owner === programs_1.TOKEN_PROGRAM || recipient.owner === programs_1.TOKEN_2022_PROGRAM)) {
137
+ throw invalid('the recipient is a token account; send to its owner');
138
+ }
139
+ const token = tokenPlan(ctx, from, output.to, mint, decimals);
140
+ const existing = await associatedAccount(ctx, token.destination, output.to, mint, 'recipient', tags);
141
+ if (existing?.frozen)
142
+ throw invalid('the recipient token account is frozen');
143
+ return { ...base, token, createsRecipientAccount: existing === null };
144
+ }
145
+ /** The transfer's own instructions (no compute budget). */
146
+ function transferInstructions(plan) {
147
+ const list = [];
148
+ const { token } = plan;
149
+ if (token) {
150
+ if (plan.createsRecipientAccount) {
151
+ list.push((0, programs_1.createAssociatedTokenAccountIdempotent)(plan.from, token.destination, plan.to, token.mint));
152
+ }
153
+ list.push((0, programs_1.transferChecked)(token.source, token.mint, token.destination, plan.from, plan.amount, token.decimals));
154
+ }
155
+ else {
156
+ list.push((0, programs_1.systemTransfer)(plan.from, plan.to, plan.amount));
157
+ }
158
+ if (plan.memo !== undefined)
159
+ list.push((0, programs_1.memo)(plan.memo));
160
+ return list;
161
+ }
162
+ const withBudget = (limit, price, list) => [
163
+ (0, programs_1.setComputeUnitLimit)(limit),
164
+ (0, programs_1.setComputeUnitPrice)(price),
165
+ ...list,
166
+ ];
167
+ /**
168
+ * The newest blockhash at `confirmed`, its last valid height, and the slot of its block:
169
+ * agave answers from one bank (`rpc.rs` `get_latest_blockhash`: the bank's last blockhash,
170
+ * that blockhash's last valid height, and `new_response`'s context slot, the bank's own).
171
+ * One endpoint's word: proofs attest the three together before using the height.
172
+ */
173
+ async function latestBlockhash(ctx, tags) {
174
+ const result = await (0, rpc_1.call)(ctx.transport, 'getLatestBlockhash', [{ commitment: 'confirmed' }], tags);
175
+ const value = (0, rpc_1.contextValue)(result, 'getLatestBlockhash');
176
+ if (!value || (0, keys_1.decodeBase58)(value.blockhash, 32) === null) {
177
+ throw (0, rpc_1.malformed)('getLatestBlockhash');
178
+ }
179
+ return {
180
+ blockhash: value.blockhash,
181
+ lastValidBlockHeight: (0, rpc_1.u64)(value.lastValidBlockHeight, 'lastValidBlockHeight'),
182
+ slot: (0, rpc_1.u64)((0, rpc_1.record)((0, rpc_1.record)(result)?.context)?.slot, 'getLatestBlockhash context slot'),
183
+ };
184
+ }
185
+ const base64 = (bytes) => Buffer.from(bytes).toString('base64');
186
+ /** Whether `bytes` (a key read from a message) is the key `address`. */
187
+ function isKey(bytes, address) {
188
+ const expected = (0, keys_1.decodeBase58)(address, 32);
189
+ return bytes !== undefined && expected !== null && (0, bytes_1.equalBytes)(bytes, expected);
190
+ }
191
+ /** The transaction with a zero signature for each required signer. */
192
+ const withPlaceholders = (parts, message) => (0, wire_1.signedTransaction)(Array.from({ length: parts.required }, () => new Uint8Array(SIGNATURE_BYTES)), message);
193
+ /**
194
+ * A compiled message read back from its bytes before it is simulated, quoted or signed: one
195
+ * legacy message (a `null` from the reader is a refusal, never "no signers needed") whose
196
+ * only signer is `from`, the fee payer, and whose transaction fits the packet limit.
197
+ */
198
+ function readBack(message, from) {
199
+ const parts = (0, wire_1.parseMessage)(message);
200
+ if (!parts)
201
+ throw invalid('the compiled message is not one legacy message');
202
+ if (parts.required !== 1 || !isKey(parts.keys[0], from)) {
203
+ throw invalid('the compiled message has unexpected signers');
204
+ }
205
+ if (withPlaceholders(parts, message).length > programs_1.MAX_TRANSACTION_SIZE) {
206
+ throw invalid(TOO_LARGE);
207
+ }
208
+ return parts;
209
+ }
210
+ const isWritable = (parts, index) => index < parts.required
211
+ ? index < parts.required - parts.readonlySigned
212
+ : index < parts.keys.length - parts.readonlyUnsigned;
213
+ /** A little-endian u64 of `data` at `at`, or `null` when the data is too short. */
214
+ const u64At = (data, at) => data.length < at + 8
215
+ ? null
216
+ : new DataView(data.buffer, data.byteOffset + at, 8).getBigUint64(0, true);
217
+ /**
218
+ * The recipient binding the landing guard trusts, read from the bytes and re-derived from
219
+ * the intent alone: exactly one transfer (System `Transfer`, or Token `TransferChecked`)
220
+ * moves the intent's amount into `destinationOf` the intent's recipient. The sender is
221
+ * bound by `readBack`: it is the message's only signer.
222
+ */
223
+ function checkRecipient(ctx, parts, output, mint) {
224
+ const program = mint === undefined ? programs_1.SYSTEM_PROGRAM : programs_1.TOKEN_PROGRAM;
225
+ // The destination's position and the amount's offset: System [from, to], data
226
+ // [u32 2, u64 lamports]; Token [source, mint, destination, authority], data
227
+ // [12, u64 amount, u8 decimals].
228
+ const [destination, amountAt] = mint === undefined ? [1, 4] : [2, 1];
229
+ const transfers = parts.instructions.filter((ix) => isKey(parts.keys[ix.program], program));
230
+ const transfer = transfers[0];
231
+ if (transfers.length !== 1 ||
232
+ !transfer ||
233
+ !isKey(parts.keys[transfer.accounts[destination]], destinationOf(ctx, output.to, mint)) ||
234
+ u64At(transfer.data, amountAt) !== output.amount) {
235
+ throw invalid('the transfer does not pay the recipient');
236
+ }
237
+ }
238
+ /**
239
+ * The bytes carry exactly `list` on `blockhash`: each instruction's program, accounts and
240
+ * data, and no other instruction. An account the list writes must be writable (the message
241
+ * merges flags per key); its signers are `readBack`'s.
242
+ */
243
+ function checkInstructions(parts, blockhash, list) {
244
+ const mismatch = () => invalid('the compiled message does not match the transfer');
245
+ if (!isKey(parts.blockhash, blockhash) || parts.instructions.length !== list.length) {
246
+ throw mismatch();
247
+ }
248
+ list.forEach((expected, i) => {
249
+ const found = parts.instructions[i];
250
+ if (!found ||
251
+ !isKey(parts.keys[found.program], expected.programId) ||
252
+ found.accounts.length !== expected.accounts.length ||
253
+ !(0, bytes_1.equalBytes)(found.data, expected.data)) {
254
+ throw mismatch();
255
+ }
256
+ expected.accounts.forEach((account, j) => {
257
+ const index = found.accounts[j];
258
+ if (!isKey(parts.keys[index], account.address) ||
259
+ (account.writable && !isWritable(parts, index))) {
260
+ throw mismatch();
261
+ }
262
+ });
263
+ });
264
+ }
265
+ /** The simulated compute units of the transfer, or `null` when it cannot be measured. */
266
+ async function simulatedUnits(ctx, from, price, list, blockhash, tags) {
267
+ const message = ctx.codec.compileMessage(from, blockhash, withBudget(programs_1.MAX_COMPUTE_UNIT_LIMIT, price, list));
268
+ const unsignedTx = withPlaceholders(readBack(message, from), message);
269
+ const value = (0, rpc_1.contextValue)(await (0, rpc_1.call)(ctx.transport, 'simulateTransaction', [
270
+ base64(unsignedTx),
271
+ {
272
+ encoding: 'base64',
273
+ sigVerify: false,
274
+ replaceRecentBlockhash: true,
275
+ commitment: 'confirmed',
276
+ },
277
+ ], tags), 'simulateTransaction');
278
+ if (!value)
279
+ throw (0, rpc_1.malformed)('simulateTransaction');
280
+ // A failing simulation (e.g. insufficient funds) still lets `checkFunds` explain itself.
281
+ if (value.err !== null || value.unitsConsumed === undefined)
282
+ return null;
283
+ return (0, rpc_1.u64)(value.unitsConsumed, 'unitsConsumed');
284
+ }
285
+ /**
286
+ * The base64 wire bytes of a signed transaction, or `null` when they exceed the packet
287
+ * limit. The text is capped before it is decoded, and only a canonical text is
288
+ * read: `Buffer` skips what it cannot decode, and a truncated transaction is never sent.
289
+ */
290
+ function wirePayload(raw) {
291
+ const { encoding, data } = raw;
292
+ if (encoding === 'json')
293
+ throw invalid('a Solana transaction is bytes (base64 or hex)');
294
+ if (typeof data !== 'string')
295
+ throw invalid('a Solana transaction is a text of bytes');
296
+ if (data.length > (encoding === 'hex' ? MAX_HEX_CHARS : MAX_BASE64_CHARS))
297
+ return null;
298
+ const bytes = Buffer.from(data, encoding);
299
+ const canonical = encoding === 'hex'
300
+ ? bytes.toString('hex') === data.toLowerCase()
301
+ : bytes.toString('base64') === data;
302
+ if (!canonical)
303
+ throw invalid(`the transaction is not canonical ${encoding}`);
304
+ return bytes.length > programs_1.MAX_TRANSACTION_SIZE ? null : bytes.toString('base64');
305
+ }
306
+ function createSolanaBuilder(ctx) {
307
+ return {
308
+ async estimateFee(intent, build) {
309
+ const tags = (0, rpc_1.withSignal)(rpc_1.READ, build.signal);
310
+ // The handle's bound, which no endpoint can raise. An explicit price above it is
311
+ // refused before any request; a speed's is clamped below it.
312
+ const bound = ctx.config.maxComputeUnitPrice;
313
+ const override = (0, fee_1.isFeeSpeed)(intent.fee) ? undefined : (0, fees_1.parseOverride)(intent.fee);
314
+ if (override && override.computeUnitPrice > bound) {
315
+ throw (0, fees_1.aboveMaxPrice)(override.computeUnitPrice, bound);
316
+ }
317
+ const plan = await planTransfer(ctx, intent, tags);
318
+ const list = transferInstructions(plan);
319
+ const variant = (0, fees_1.variantOffsets)(ctx.nextVariant());
320
+ let price;
321
+ if (override) {
322
+ price = override.computeUnitPrice;
323
+ }
324
+ else {
325
+ const writable = plan.token
326
+ ? [plan.from, plan.token.source, plan.token.destination]
327
+ : [plan.from, plan.to];
328
+ const recent = await (0, rpc_1.call)(ctx.transport, 'getRecentPrioritizationFees', [writable], tags);
329
+ price = (0, fees_1.speedPrice)((0, fees_1.priceForSpeed)(recent, intent.fee), variant.price, bound);
330
+ }
331
+ const { blockhash } = await latestBlockhash(ctx, tags);
332
+ let base = override?.computeUnitLimit;
333
+ if (base === undefined) {
334
+ const units = await simulatedUnits(ctx, plan.from, price, list, blockhash, tags);
335
+ base =
336
+ units === null
337
+ ? (0, fees_1.fallbackComputeUnitLimit)(list.length)
338
+ : (0, fees_1.computeUnitLimitFor)(units);
339
+ }
340
+ // Every build varies the limit, an explicit one included, so identical transfers
341
+ // sign different bytes (the price of an explicit fee is kept exactly). At the
342
+ // protocol maximum no variant fits, and only the core's guard against two
343
+ // Operations sharing one Attempt ref keeps them apart.
344
+ const limit = base + variant.limit > programs_1.MAX_COMPUTE_UNIT_LIMIT
345
+ ? programs_1.MAX_COMPUTE_UNIT_LIMIT
346
+ : base + variant.limit;
347
+ // A fee is a u64 of lamports. An explicit price without one is the
348
+ // caller's; a node's recent prices or quote without one decide nothing (retryable).
349
+ const unpriced = (what) => override
350
+ ? invalid('Solana fee override: the fee does not fit in u64')
351
+ : (0, rpc_1.malformed)(what);
352
+ const priority = (0, fees_1.priorityFee)(price, limit);
353
+ if (priority > U64_MAX)
354
+ throw unpriced('getRecentPrioritizationFees');
355
+ const message = ctx.codec.compileMessage(plan.from, blockhash, withBudget(limit, price, list));
356
+ readBack(message, plan.from);
357
+ const quoted = (0, rpc_1.contextValue)(await (0, rpc_1.call)(ctx.transport, 'getFeeForMessage', [base64(message), { commitment: 'confirmed' }], tags), 'getFeeForMessage');
358
+ // `null`: the endpoint does not know the blockhash yet.
359
+ if (quoted === null)
360
+ throw (0, rpc_1.notYet)('the fee of the message');
361
+ const total = (0, rpc_1.u64)(quoted, 'getFeeForMessage');
362
+ // agave's fee arithmetic saturates: a quote of u64::MAX is no fee.
363
+ if (total === U64_MAX)
364
+ throw unpriced('getFeeForMessage');
365
+ if (total < priority)
366
+ throw (0, rpc_1.malformed)('getFeeForMessage');
367
+ const details = {
368
+ signatures: 1,
369
+ baseFee: total - priority,
370
+ computeUnitLimit: limit,
371
+ computeUnitPrice: price,
372
+ priorityFee: priority,
373
+ rent: plan.createsRecipientAccount
374
+ ? await rentExemptMinimum(ctx, programs_1.TOKEN_ACCOUNT_SIZE, tags)
375
+ : 0n,
376
+ createsRecipientAccount: plan.createsRecipientAccount,
377
+ };
378
+ return (0, fees_1.feeDraft)(override ? 'custom' : intent.fee, details);
379
+ },
380
+ async checkFunds(intent, fee, build) {
381
+ const output = onlyOutput(intent);
382
+ const tags = (0, rpc_1.withSignal)(rpc_1.READ, build.signal);
383
+ const balance = (0, rpc_1.u64)((0, rpc_1.contextValue)(await (0, rpc_1.call)(ctx.transport, 'getBalance', [intent.from, { commitment: 'confirmed' }], tags), 'getBalance'), 'balance');
384
+ if (intent.asset !== 'native') {
385
+ const mint = (0, reader_1.mintOf)(intent.asset);
386
+ const source = await associatedAccount(ctx, ctx.codec.associatedTokenAddress(intent.from, mint), intent.from, mint, 'source', tags);
387
+ if (source?.frozen)
388
+ throw invalid('the source token account is frozen');
389
+ const available = source?.amount ?? 0n;
390
+ if (available < output.amount) {
391
+ return { ok: false, asset: intent.asset, required: output.amount, available };
392
+ }
393
+ }
394
+ // A system account may end at 0 or at the rent-exempt minimum, nothing in between.
395
+ const spent = (0, fees_1.lamportsCharged)(fee) + (intent.asset === 'native' ? output.amount : 0n);
396
+ const minimum = await rentExemptMinimum(ctx, 0, tags);
397
+ if (balance < spent) {
398
+ return { ok: false, asset: 'native', required: spent, available: balance };
399
+ }
400
+ const left = balance - spent;
401
+ if (left !== 0n && left < minimum) {
402
+ return {
403
+ ok: false,
404
+ asset: 'native',
405
+ required: spent + minimum,
406
+ available: balance,
407
+ };
408
+ }
409
+ return { ok: true };
410
+ },
411
+ async build(intent, fee, build) {
412
+ const output = onlyOutput(intent);
413
+ const details = (0, fees_1.signedFee)(fee, ctx.config.maxComputeUnitPrice);
414
+ const key = keyOf(intent.from, build.keys);
415
+ const text = memoOf(intent.memo);
416
+ const tags = (0, rpc_1.withSignal)(rpc_1.READ, build.signal);
417
+ const mint = intent.asset === 'native' ? undefined : (0, reader_1.mintOf)(intent.asset);
418
+ const plan = {
419
+ from: intent.from,
420
+ to: output.to,
421
+ amount: output.amount,
422
+ ...(text !== undefined ? { memo: text } : {}),
423
+ createsRecipientAccount: details.createsRecipientAccount,
424
+ ...(mint === undefined
425
+ ? {}
426
+ : {
427
+ token: tokenPlan(ctx, intent.from, output.to, mint, await (0, reader_1.mintDecimals)(ctx, mint, (0, rpc_1.withSignal)(reader_1.METADATA, build.signal))),
428
+ }),
429
+ };
430
+ const list = withBudget(details.computeUnitLimit, details.computeUnitPrice, transferInstructions(plan));
431
+ const { blockhash, lastValidBlockHeight, slot } = await latestBlockhash(ctx, tags);
432
+ // The payload, the signing request and the ordering all come from this one message,
433
+ // read back before it is offered for signing.
434
+ const message = ctx.codec.compileMessage(plan.from, blockhash, list);
435
+ const parts = readBack(message, plan.from);
436
+ checkRecipient(ctx, parts, output, mint);
437
+ checkInstructions(parts, blockhash, list);
438
+ // The height, with the blockhash and slot that let a proof attest it.
439
+ const ordering = {
440
+ kind: 'expiry',
441
+ lastValidHeight: lastValidBlockHeight,
442
+ blockhash,
443
+ blockhashSlot: slot,
444
+ };
445
+ const unsigned = {
446
+ payload: { encoding: 'base64', data: base64(message) },
447
+ signingRequests: [
448
+ {
449
+ id: 's0',
450
+ scheme: 'ed25519',
451
+ payload: message,
452
+ payloadKind: 'message',
453
+ publicKey: key.publicKey,
454
+ ...(key.keyRef ? { keyRef: key.keyRef } : {}),
455
+ },
456
+ ],
457
+ ordering,
458
+ fee,
459
+ summary: {
460
+ asset: (0, asset_1.assetId)(ctx.chain.id, ctx.network.id, intent.asset),
461
+ outputs: [{ to: output.to, amount: output.amount.toString() }],
462
+ ...(text !== undefined ? { memo: text } : {}),
463
+ },
464
+ };
465
+ return unsigned;
466
+ },
467
+ async assemble(unsigned, signatures) {
468
+ const failed = (reason) => new error_1.SigningError('SIGNING_FAILED', reason);
469
+ const mismatch = () => failed('the message and its signing requests do not match');
470
+ const { encoding, data } = unsigned.payload;
471
+ if (encoding !== 'base64')
472
+ throw failed('not a Solana message');
473
+ const message = new Uint8Array(Buffer.from(data, 'base64'));
474
+ if (base64(message) !== data)
475
+ throw failed('not a Solana message');
476
+ // A `null` is a refusal, never "no signers needed": one request per required signer.
477
+ const parts = (0, wire_1.parseMessage)(message);
478
+ if (!parts || parts.required !== unsigned.signingRequests.length)
479
+ throw mismatch();
480
+ // The core stores this `ordering` as the Attempt's, and the expiry proof reads its
481
+ // blockhash as the message's. A changed one between build and signing would
482
+ // misplace the window.
483
+ const ordering = unsigned.ordering;
484
+ if (ordering.kind !== 'expiry' ||
485
+ typeof ordering.blockhash !== 'string' ||
486
+ !isKey(parts.blockhash, ordering.blockhash) ||
487
+ typeof ordering.lastValidHeight !== 'bigint' ||
488
+ typeof ordering.blockhashSlot !== 'bigint') {
489
+ throw failed("the Attempt's ordering does not match the signed message");
490
+ }
491
+ const bytes = unsigned.signingRequests.map((request, i) => {
492
+ if (request.scheme !== 'ed25519' ||
493
+ request.payloadKind !== 'message' ||
494
+ !(0, bytes_1.equalBytes)(request.publicKey, parts.keys[i]) ||
495
+ !(0, bytes_1.equalBytes)(request.payload, message)) {
496
+ throw mismatch();
497
+ }
498
+ const signature = signatures.find((s) => s.requestId === request.id);
499
+ if (!signature || signature.bytes.length !== SIGNATURE_BYTES) {
500
+ throw failed(`missing signature for request ${request.id}`);
501
+ }
502
+ return signature.bytes;
503
+ });
504
+ const raw = (0, wire_1.signedTransaction)(bytes, message);
505
+ if (raw.length > programs_1.MAX_TRANSACTION_SIZE)
506
+ throw failed(TOO_LARGE);
507
+ return {
508
+ raw: { encoding: 'base64', data: base64(raw) },
509
+ ref: {
510
+ id: (0, keys_1.encodeBase58)(bytes[0]),
511
+ idKind: 'signature',
512
+ canonical: true,
513
+ },
514
+ };
515
+ },
516
+ };
517
+ }
518
+ function createSolanaBroadcaster(ctx) {
519
+ return {
520
+ async broadcast(signed, options = {}) {
521
+ const payload = wirePayload(signed.raw);
522
+ if (payload === null)
523
+ return REFUSED_TOO_LARGE;
524
+ try {
525
+ await (0, rpc_1.call)(ctx.transport, 'sendTransaction', [payload, { encoding: 'base64', preflightCommitment: 'confirmed' }], {
526
+ ...(0, rpc_1.withSignal)(rpc_1.BROADCAST, options.signal),
527
+ ...(options.fanout !== undefined ? { fanout: options.fanout } : {}),
528
+ });
529
+ return { kind: 'accepted' };
530
+ }
531
+ catch (error) {
532
+ // Only a definitive, non-ambiguous node answer is classified: by its code, then
533
+ // its structured data (a preflight failure's simulation result), then its
534
+ // anchored text. Anything else may have been sent: rethrown unchanged. A claimed
535
+ // bad signature stands only when these bytes carry one.
536
+ const code = (0, rpc_1.rpcCode)(error);
537
+ if (code === undefined)
538
+ throw error;
539
+ const failure = error;
540
+ return (0, errors_1.classifyOwnBroadcast)(Buffer.from(payload, 'base64'), code, (0, rpc_1.rpcMessage)(failure), failure.details?.rpcData);
541
+ }
542
+ },
543
+ };
544
+ }
545
+ //# sourceMappingURL=builder.js.map