crypto-aio 0.0.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (700) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/README.md +163 -13
  3. package/dist/adapters/avalanche/address.d.ts +15 -0
  4. package/dist/adapters/avalanche/address.js +74 -0
  5. package/dist/adapters/avalanche/address.js.map +1 -0
  6. package/dist/adapters/avalanche/api.d.ts +100 -0
  7. package/dist/adapters/avalanche/api.js +381 -0
  8. package/dist/adapters/avalanche/api.js.map +1 -0
  9. package/dist/adapters/avalanche/builder.d.ts +13 -0
  10. package/dist/adapters/avalanche/builder.js +336 -0
  11. package/dist/adapters/avalanche/builder.js.map +1 -0
  12. package/dist/adapters/avalanche/cb58.d.ts +7 -0
  13. package/dist/adapters/avalanche/cb58.js +49 -0
  14. package/dist/adapters/avalanche/cb58.js.map +1 -0
  15. package/dist/adapters/avalanche/chains.d.ts +21 -0
  16. package/dist/adapters/avalanche/chains.js +79 -0
  17. package/dist/adapters/avalanche/chains.js.map +1 -0
  18. package/dist/adapters/avalanche/codec.d.ts +94 -0
  19. package/dist/adapters/avalanche/codec.js +371 -0
  20. package/dist/adapters/avalanche/codec.js.map +1 -0
  21. package/dist/adapters/avalanche/context.d.ts +59 -0
  22. package/dist/adapters/avalanche/context.js +114 -0
  23. package/dist/adapters/avalanche/context.js.map +1 -0
  24. package/dist/adapters/avalanche/decode.d.ts +16 -0
  25. package/dist/adapters/avalanche/decode.js +101 -0
  26. package/dist/adapters/avalanche/decode.js.map +1 -0
  27. package/dist/adapters/avalanche/driver.d.ts +22 -0
  28. package/dist/adapters/avalanche/driver.js +81 -0
  29. package/dist/adapters/avalanche/driver.js.map +1 -0
  30. package/dist/adapters/avalanche/errors.d.ts +18 -0
  31. package/dist/adapters/avalanche/errors.js +61 -0
  32. package/dist/adapters/avalanche/errors.js.map +1 -0
  33. package/dist/adapters/avalanche/fees.d.ts +23 -0
  34. package/dist/adapters/avalanche/fees.js +105 -0
  35. package/dist/adapters/avalanche/fees.js.map +1 -0
  36. package/dist/adapters/avalanche/index.d.ts +19 -0
  37. package/dist/adapters/avalanche/index.js +8 -0
  38. package/dist/adapters/avalanche/index.js.map +1 -0
  39. package/dist/adapters/avalanche/network.d.ts +37 -0
  40. package/dist/adapters/avalanche/network.js +135 -0
  41. package/dist/adapters/avalanche/network.js.map +1 -0
  42. package/dist/adapters/avalanche/plugin.d.ts +21 -0
  43. package/dist/adapters/avalanche/plugin.js +46 -0
  44. package/dist/adapters/avalanche/plugin.js.map +1 -0
  45. package/dist/adapters/avalanche/presets.d.ts +6 -0
  46. package/dist/adapters/avalanche/presets.js +86 -0
  47. package/dist/adapters/avalanche/presets.js.map +1 -0
  48. package/dist/adapters/avalanche/proofs.d.ts +41 -0
  49. package/dist/adapters/avalanche/proofs.js +270 -0
  50. package/dist/adapters/avalanche/proofs.js.map +1 -0
  51. package/dist/adapters/avalanche/reader.d.ts +40 -0
  52. package/dist/adapters/avalanche/reader.js +231 -0
  53. package/dist/adapters/avalanche/reader.js.map +1 -0
  54. package/dist/adapters/avalanche/sdk.d.ts +182 -0
  55. package/dist/adapters/avalanche/sdk.js +21 -0
  56. package/dist/adapters/avalanche/sdk.js.map +1 -0
  57. package/dist/adapters/avalanche/types.d.ts +86 -0
  58. package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
  59. package/dist/adapters/avalanche/types.js.map +1 -0
  60. package/dist/adapters/evm/builder.d.ts +11 -0
  61. package/dist/adapters/evm/builder.js +386 -0
  62. package/dist/adapters/evm/builder.js.map +1 -0
  63. package/dist/adapters/evm/chains.d.ts +6 -0
  64. package/dist/adapters/evm/chains.js +203 -0
  65. package/dist/adapters/evm/chains.js.map +1 -0
  66. package/dist/adapters/evm/client.d.ts +84 -0
  67. package/dist/adapters/evm/client.js +335 -0
  68. package/dist/adapters/evm/client.js.map +1 -0
  69. package/dist/adapters/evm/decode.d.ts +35 -0
  70. package/dist/adapters/evm/decode.js +175 -0
  71. package/dist/adapters/evm/decode.js.map +1 -0
  72. package/dist/adapters/evm/driver.d.ts +8 -0
  73. package/dist/adapters/evm/driver.js +61 -0
  74. package/dist/adapters/evm/driver.js.map +1 -0
  75. package/dist/adapters/evm/errors.d.ts +20 -0
  76. package/dist/adapters/evm/errors.js +110 -0
  77. package/dist/adapters/evm/errors.js.map +1 -0
  78. package/dist/adapters/evm/ethers-client.d.ts +43 -0
  79. package/dist/adapters/evm/ethers-client.js +139 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +103 -0
  82. package/dist/adapters/evm/fees.js +277 -0
  83. package/dist/adapters/evm/fees.js.map +1 -0
  84. package/dist/adapters/evm/index.d.ts +20 -0
  85. package/dist/adapters/evm/index.js +12 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +65 -0
  88. package/dist/adapters/evm/network.js +150 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +35 -0
  91. package/dist/adapters/evm/plugin.js +150 -0
  92. package/dist/adapters/evm/plugin.js.map +1 -0
  93. package/dist/adapters/evm/presets.d.ts +2 -0
  94. package/dist/adapters/evm/presets.js +105 -0
  95. package/dist/adapters/evm/presets.js.map +1 -0
  96. package/dist/adapters/evm/proofs.d.ts +19 -0
  97. package/dist/adapters/evm/proofs.js +370 -0
  98. package/dist/adapters/evm/proofs.js.map +1 -0
  99. package/dist/adapters/evm/rawtx.d.ts +25 -0
  100. package/dist/adapters/evm/rawtx.js +176 -0
  101. package/dist/adapters/evm/rawtx.js.map +1 -0
  102. package/dist/adapters/evm/reader.d.ts +83 -0
  103. package/dist/adapters/evm/reader.js +326 -0
  104. package/dist/adapters/evm/reader.js.map +1 -0
  105. package/dist/adapters/evm/rpc.d.ts +39 -0
  106. package/dist/adapters/evm/rpc.js +152 -0
  107. package/dist/adapters/evm/rpc.js.map +1 -0
  108. package/dist/adapters/evm/tokens.d.ts +10 -0
  109. package/dist/adapters/evm/tokens.js +23 -0
  110. package/dist/adapters/evm/tokens.js.map +1 -0
  111. package/dist/adapters/evm/types.d.ts +265 -0
  112. package/dist/{type/account.js → adapters/evm/types.js} +1 -1
  113. package/dist/adapters/evm/types.js.map +1 -0
  114. package/dist/adapters/evm/web3-client.d.ts +26 -0
  115. package/dist/adapters/evm/web3-client.js +176 -0
  116. package/dist/adapters/evm/web3-client.js.map +1 -0
  117. package/dist/adapters/solana/builder.d.ts +18 -0
  118. package/dist/adapters/solana/builder.js +556 -0
  119. package/dist/adapters/solana/builder.js.map +1 -0
  120. package/dist/adapters/solana/chains.d.ts +13 -0
  121. package/dist/adapters/solana/chains.js +37 -0
  122. package/dist/adapters/solana/chains.js.map +1 -0
  123. package/dist/adapters/solana/decode.d.ts +111 -0
  124. package/dist/adapters/solana/decode.js +595 -0
  125. package/dist/adapters/solana/decode.js.map +1 -0
  126. package/dist/adapters/solana/driver.d.ts +15 -0
  127. package/dist/adapters/solana/driver.js +72 -0
  128. package/dist/adapters/solana/driver.js.map +1 -0
  129. package/dist/adapters/solana/errors.d.ts +36 -0
  130. package/dist/adapters/solana/errors.js +154 -0
  131. package/dist/adapters/solana/errors.js.map +1 -0
  132. package/dist/adapters/solana/fees.d.ts +77 -0
  133. package/dist/adapters/solana/fees.js +214 -0
  134. package/dist/adapters/solana/fees.js.map +1 -0
  135. package/dist/adapters/solana/heights.d.ts +47 -0
  136. package/dist/adapters/solana/heights.js +185 -0
  137. package/dist/adapters/solana/heights.js.map +1 -0
  138. package/dist/adapters/solana/history.d.ts +10 -0
  139. package/dist/adapters/solana/history.js +71 -0
  140. package/dist/adapters/solana/history.js.map +1 -0
  141. package/dist/adapters/solana/index.d.ts +16 -0
  142. package/dist/adapters/solana/index.js +9 -0
  143. package/dist/adapters/solana/index.js.map +1 -0
  144. package/dist/adapters/solana/keys.d.ts +13 -0
  145. package/dist/adapters/solana/keys.js +69 -0
  146. package/dist/adapters/solana/keys.js.map +1 -0
  147. package/dist/adapters/solana/message.d.ts +15 -0
  148. package/dist/adapters/solana/message.js +120 -0
  149. package/dist/adapters/solana/message.js.map +1 -0
  150. package/dist/adapters/solana/network.d.ts +24 -0
  151. package/dist/adapters/solana/network.js +95 -0
  152. package/dist/adapters/solana/network.js.map +1 -0
  153. package/dist/adapters/solana/plugin.d.ts +18 -0
  154. package/dist/adapters/solana/plugin.js +44 -0
  155. package/dist/adapters/solana/plugin.js.map +1 -0
  156. package/dist/adapters/solana/presets.d.ts +2 -0
  157. package/dist/adapters/solana/presets.js +77 -0
  158. package/dist/adapters/solana/presets.js.map +1 -0
  159. package/dist/adapters/solana/programs.d.ts +44 -0
  160. package/dist/adapters/solana/programs.js +159 -0
  161. package/dist/adapters/solana/programs.js.map +1 -0
  162. package/dist/adapters/solana/proofs.d.ts +56 -0
  163. package/dist/adapters/solana/proofs.js +540 -0
  164. package/dist/adapters/solana/proofs.js.map +1 -0
  165. package/dist/adapters/solana/reader.d.ts +82 -0
  166. package/dist/adapters/solana/reader.js +326 -0
  167. package/dist/adapters/solana/reader.js.map +1 -0
  168. package/dist/adapters/solana/rpc.d.ts +102 -0
  169. package/dist/adapters/solana/rpc.js +301 -0
  170. package/dist/adapters/solana/rpc.js.map +1 -0
  171. package/dist/adapters/solana/tokens.d.ts +7 -0
  172. package/dist/adapters/solana/tokens.js +19 -0
  173. package/dist/adapters/solana/tokens.js.map +1 -0
  174. package/dist/adapters/solana/types.d.ts +124 -0
  175. package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
  176. package/dist/adapters/solana/types.js.map +1 -0
  177. package/dist/adapters/solana/web3.d.ts +5 -0
  178. package/dist/adapters/solana/web3.js +61 -0
  179. package/dist/adapters/solana/web3.js.map +1 -0
  180. package/dist/adapters/solana/wire.d.ts +62 -0
  181. package/dist/adapters/solana/wire.js +168 -0
  182. package/dist/adapters/solana/wire.js.map +1 -0
  183. package/dist/adapters/ton/address.d.ts +43 -0
  184. package/dist/adapters/ton/address.js +168 -0
  185. package/dist/adapters/ton/address.js.map +1 -0
  186. package/dist/adapters/ton/api.d.ts +344 -0
  187. package/dist/adapters/ton/api.js +942 -0
  188. package/dist/adapters/ton/api.js.map +1 -0
  189. package/dist/adapters/ton/builder.d.ts +18 -0
  190. package/dist/adapters/ton/builder.js +701 -0
  191. package/dist/adapters/ton/builder.js.map +1 -0
  192. package/dist/adapters/ton/chains.d.ts +16 -0
  193. package/dist/adapters/ton/chains.js +39 -0
  194. package/dist/adapters/ton/chains.js.map +1 -0
  195. package/dist/adapters/ton/decode.d.ts +43 -0
  196. package/dist/adapters/ton/decode.js +219 -0
  197. package/dist/adapters/ton/decode.js.map +1 -0
  198. package/dist/adapters/ton/driver.d.ts +10 -0
  199. package/dist/adapters/ton/driver.js +117 -0
  200. package/dist/adapters/ton/driver.js.map +1 -0
  201. package/dist/adapters/ton/errors.d.ts +36 -0
  202. package/dist/adapters/ton/errors.js +89 -0
  203. package/dist/adapters/ton/errors.js.map +1 -0
  204. package/dist/adapters/ton/fees.d.ts +28 -0
  205. package/dist/adapters/ton/fees.js +121 -0
  206. package/dist/adapters/ton/fees.js.map +1 -0
  207. package/dist/adapters/ton/index.d.ts +16 -0
  208. package/dist/adapters/ton/index.js +9 -0
  209. package/dist/adapters/ton/index.js.map +1 -0
  210. package/dist/adapters/ton/messages.d.ts +157 -0
  211. package/dist/adapters/ton/messages.js +397 -0
  212. package/dist/adapters/ton/messages.js.map +1 -0
  213. package/dist/adapters/ton/native-client.d.ts +10 -0
  214. package/dist/adapters/ton/native-client.js +47 -0
  215. package/dist/adapters/ton/native-client.js.map +1 -0
  216. package/dist/adapters/ton/network.d.ts +58 -0
  217. package/dist/adapters/ton/network.js +207 -0
  218. package/dist/adapters/ton/network.js.map +1 -0
  219. package/dist/adapters/ton/plugin.d.ts +24 -0
  220. package/dist/adapters/ton/plugin.js +57 -0
  221. package/dist/adapters/ton/plugin.js.map +1 -0
  222. package/dist/adapters/ton/presets.d.ts +6 -0
  223. package/dist/adapters/ton/presets.js +94 -0
  224. package/dist/adapters/ton/presets.js.map +1 -0
  225. package/dist/adapters/ton/proofs.d.ts +66 -0
  226. package/dist/adapters/ton/proofs.js +755 -0
  227. package/dist/adapters/ton/proofs.js.map +1 -0
  228. package/dist/adapters/ton/reader.d.ts +235 -0
  229. package/dist/adapters/ton/reader.js +976 -0
  230. package/dist/adapters/ton/reader.js.map +1 -0
  231. package/dist/adapters/ton/tokens.d.ts +10 -0
  232. package/dist/adapters/ton/tokens.js +27 -0
  233. package/dist/adapters/ton/tokens.js.map +1 -0
  234. package/dist/adapters/ton/trace.d.ts +74 -0
  235. package/dist/adapters/ton/trace.js +303 -0
  236. package/dist/adapters/ton/trace.js.map +1 -0
  237. package/dist/adapters/ton/types.d.ts +105 -0
  238. package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
  239. package/dist/adapters/ton/types.js.map +1 -0
  240. package/dist/adapters/ton/wallets.d.ts +86 -0
  241. package/dist/adapters/ton/wallets.js +373 -0
  242. package/dist/adapters/ton/wallets.js.map +1 -0
  243. package/dist/adapters/tron/abi.d.ts +41 -0
  244. package/dist/adapters/tron/abi.js +112 -0
  245. package/dist/adapters/tron/abi.js.map +1 -0
  246. package/dist/adapters/tron/address.d.ts +20 -0
  247. package/dist/adapters/tron/address.js +110 -0
  248. package/dist/adapters/tron/address.js.map +1 -0
  249. package/dist/adapters/tron/builder.d.ts +12 -0
  250. package/dist/adapters/tron/builder.js +569 -0
  251. package/dist/adapters/tron/builder.js.map +1 -0
  252. package/dist/adapters/tron/chains.d.ts +12 -0
  253. package/dist/adapters/tron/chains.js +35 -0
  254. package/dist/adapters/tron/chains.js.map +1 -0
  255. package/dist/adapters/tron/codec.d.ts +10 -0
  256. package/dist/adapters/tron/codec.js +322 -0
  257. package/dist/adapters/tron/codec.js.map +1 -0
  258. package/dist/adapters/tron/decode.d.ts +52 -0
  259. package/dist/adapters/tron/decode.js +280 -0
  260. package/dist/adapters/tron/decode.js.map +1 -0
  261. package/dist/adapters/tron/driver.d.ts +12 -0
  262. package/dist/adapters/tron/driver.js +106 -0
  263. package/dist/adapters/tron/driver.js.map +1 -0
  264. package/dist/adapters/tron/errors.d.ts +74 -0
  265. package/dist/adapters/tron/errors.js +261 -0
  266. package/dist/adapters/tron/errors.js.map +1 -0
  267. package/dist/adapters/tron/fees.d.ts +49 -0
  268. package/dist/adapters/tron/fees.js +166 -0
  269. package/dist/adapters/tron/fees.js.map +1 -0
  270. package/dist/adapters/tron/http.d.ts +173 -0
  271. package/dist/adapters/tron/http.js +729 -0
  272. package/dist/adapters/tron/http.js.map +1 -0
  273. package/dist/adapters/tron/index.d.ts +16 -0
  274. package/dist/adapters/tron/index.js +15 -0
  275. package/dist/adapters/tron/index.js.map +1 -0
  276. package/dist/adapters/tron/network.d.ts +44 -0
  277. package/dist/adapters/tron/network.js +163 -0
  278. package/dist/adapters/tron/network.js.map +1 -0
  279. package/dist/adapters/tron/plugin.d.ts +17 -0
  280. package/dist/adapters/tron/plugin.js +39 -0
  281. package/dist/adapters/tron/plugin.js.map +1 -0
  282. package/dist/adapters/tron/presets.d.ts +5 -0
  283. package/dist/adapters/tron/presets.js +68 -0
  284. package/dist/adapters/tron/presets.js.map +1 -0
  285. package/dist/adapters/tron/proofs.d.ts +80 -0
  286. package/dist/adapters/tron/proofs.js +371 -0
  287. package/dist/adapters/tron/proofs.js.map +1 -0
  288. package/dist/adapters/tron/protobuf.d.ts +36 -0
  289. package/dist/adapters/tron/protobuf.js +90 -0
  290. package/dist/adapters/tron/protobuf.js.map +1 -0
  291. package/dist/adapters/tron/reader.d.ts +57 -0
  292. package/dist/adapters/tron/reader.js +220 -0
  293. package/dist/adapters/tron/reader.js.map +1 -0
  294. package/dist/adapters/tron/tokens.d.ts +9 -0
  295. package/dist/adapters/tron/tokens.js +14 -0
  296. package/dist/adapters/tron/tokens.js.map +1 -0
  297. package/dist/adapters/tron/types.d.ts +166 -0
  298. package/dist/adapters/tron/types.js +3 -0
  299. package/dist/adapters/tron/types.js.map +1 -0
  300. package/dist/adapters/utxo/address.d.ts +51 -0
  301. package/dist/adapters/utxo/address.js +341 -0
  302. package/dist/adapters/utxo/address.js.map +1 -0
  303. package/dist/adapters/utxo/builder.d.ts +35 -0
  304. package/dist/adapters/utxo/builder.js +380 -0
  305. package/dist/adapters/utxo/builder.js.map +1 -0
  306. package/dist/adapters/utxo/chains.d.ts +17 -0
  307. package/dist/adapters/utxo/chains.js +100 -0
  308. package/dist/adapters/utxo/chains.js.map +1 -0
  309. package/dist/adapters/utxo/codec.d.ts +120 -0
  310. package/dist/adapters/utxo/codec.js +408 -0
  311. package/dist/adapters/utxo/codec.js.map +1 -0
  312. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  313. package/dist/adapters/utxo/coinselect.js +131 -0
  314. package/dist/adapters/utxo/coinselect.js.map +1 -0
  315. package/dist/adapters/utxo/context.d.ts +63 -0
  316. package/dist/adapters/utxo/context.js +125 -0
  317. package/dist/adapters/utxo/context.js.map +1 -0
  318. package/dist/adapters/utxo/decode.d.ts +22 -0
  319. package/dist/adapters/utxo/decode.js +121 -0
  320. package/dist/adapters/utxo/decode.js.map +1 -0
  321. package/dist/adapters/utxo/driver.d.ts +16 -0
  322. package/dist/adapters/utxo/driver.js +79 -0
  323. package/dist/adapters/utxo/driver.js.map +1 -0
  324. package/dist/adapters/utxo/ecc.d.ts +9 -0
  325. package/dist/adapters/utxo/ecc.js +26 -0
  326. package/dist/adapters/utxo/ecc.js.map +1 -0
  327. package/dist/adapters/utxo/errors.d.ts +52 -0
  328. package/dist/adapters/utxo/errors.js +191 -0
  329. package/dist/adapters/utxo/errors.js.map +1 -0
  330. package/dist/adapters/utxo/esplora.d.ts +100 -0
  331. package/dist/adapters/utxo/esplora.js +498 -0
  332. package/dist/adapters/utxo/esplora.js.map +1 -0
  333. package/dist/adapters/utxo/fees.d.ts +41 -0
  334. package/dist/adapters/utxo/fees.js +125 -0
  335. package/dist/adapters/utxo/fees.js.map +1 -0
  336. package/dist/adapters/utxo/index.d.ts +17 -0
  337. package/dist/adapters/utxo/index.js +8 -0
  338. package/dist/adapters/utxo/index.js.map +1 -0
  339. package/dist/adapters/utxo/network.d.ts +50 -0
  340. package/dist/adapters/utxo/network.js +165 -0
  341. package/dist/adapters/utxo/network.js.map +1 -0
  342. package/dist/adapters/utxo/plugin.d.ts +17 -0
  343. package/dist/adapters/utxo/plugin.js +41 -0
  344. package/dist/adapters/utxo/plugin.js.map +1 -0
  345. package/dist/adapters/utxo/presets.d.ts +12 -0
  346. package/dist/adapters/utxo/presets.js +47 -0
  347. package/dist/adapters/utxo/presets.js.map +1 -0
  348. package/dist/adapters/utxo/preview.d.ts +3 -0
  349. package/dist/adapters/utxo/preview.js +65 -0
  350. package/dist/adapters/utxo/preview.js.map +1 -0
  351. package/dist/adapters/utxo/proofs.d.ts +66 -0
  352. package/dist/adapters/utxo/proofs.js +469 -0
  353. package/dist/adapters/utxo/proofs.js.map +1 -0
  354. package/dist/adapters/utxo/rawblock.d.ts +46 -0
  355. package/dist/adapters/utxo/rawblock.js +159 -0
  356. package/dist/adapters/utxo/rawblock.js.map +1 -0
  357. package/dist/adapters/utxo/rawtx.d.ts +73 -0
  358. package/dist/adapters/utxo/rawtx.js +264 -0
  359. package/dist/adapters/utxo/rawtx.js.map +1 -0
  360. package/dist/adapters/utxo/reader.d.ts +36 -0
  361. package/dist/adapters/utxo/reader.js +265 -0
  362. package/dist/adapters/utxo/reader.js.map +1 -0
  363. package/dist/adapters/utxo/sdk.d.ts +18 -0
  364. package/dist/adapters/utxo/sdk.js +17 -0
  365. package/dist/adapters/utxo/sdk.js.map +1 -0
  366. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  367. package/dist/adapters/utxo/signed-psbt.js +428 -0
  368. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  369. package/dist/adapters/utxo/spend.d.ts +59 -0
  370. package/dist/adapters/utxo/spend.js +230 -0
  371. package/dist/adapters/utxo/spend.js.map +1 -0
  372. package/dist/adapters/utxo/types.d.ts +167 -0
  373. package/dist/adapters/utxo/types.js +3 -0
  374. package/dist/adapters/utxo/types.js.map +1 -0
  375. package/dist/core/assets/service.d.ts +18 -0
  376. package/dist/core/assets/service.js +69 -0
  377. package/dist/core/assets/service.js.map +1 -0
  378. package/dist/core/blockchain/default-ref.d.ts +4 -0
  379. package/dist/core/blockchain/default-ref.js +16 -0
  380. package/dist/core/blockchain/default-ref.js.map +1 -0
  381. package/dist/core/blockchain/handle.d.ts +179 -0
  382. package/dist/core/blockchain/handle.js +579 -0
  383. package/dist/core/blockchain/handle.js.map +1 -0
  384. package/dist/core/blockchain/internal.d.ts +19 -0
  385. package/dist/core/blockchain/internal.js +16 -0
  386. package/dist/core/blockchain/internal.js.map +1 -0
  387. package/dist/core/blockchain/mapping.d.ts +22 -0
  388. package/dist/core/blockchain/mapping.js +136 -0
  389. package/dist/core/blockchain/mapping.js.map +1 -0
  390. package/dist/core/config/env.d.ts +8 -0
  391. package/dist/core/config/env.js +60 -0
  392. package/dist/core/config/env.js.map +1 -0
  393. package/dist/core/config/merge.d.ts +26 -0
  394. package/dist/core/config/merge.js +144 -0
  395. package/dist/core/config/merge.js.map +1 -0
  396. package/dist/core/config/resolve.d.ts +12 -0
  397. package/dist/core/config/resolve.js +251 -0
  398. package/dist/core/config/resolve.js.map +1 -0
  399. package/dist/core/config/types.d.ts +180 -0
  400. package/dist/core/config/types.js +3 -0
  401. package/dist/core/config/types.js.map +1 -0
  402. package/dist/core/container/builtins.d.ts +4 -0
  403. package/dist/core/container/builtins.js +13 -0
  404. package/dist/core/container/builtins.js.map +1 -0
  405. package/dist/core/container/container.d.ts +62 -0
  406. package/dist/core/container/container.js +500 -0
  407. package/dist/core/container/container.js.map +1 -0
  408. package/dist/core/container/default.d.ts +15 -0
  409. package/dist/core/container/default.js +70 -0
  410. package/dist/core/container/default.js.map +1 -0
  411. package/dist/core/container/internals.d.ts +54 -0
  412. package/dist/core/container/internals.js +21 -0
  413. package/dist/core/container/internals.js.map +1 -0
  414. package/dist/core/container/pool.d.ts +27 -0
  415. package/dist/core/container/pool.js +77 -0
  416. package/dist/core/container/pool.js.map +1 -0
  417. package/dist/core/driver/types.d.ts +379 -0
  418. package/dist/core/driver/types.js +3 -0
  419. package/dist/core/driver/types.js.map +1 -0
  420. package/dist/core/errors/codes.d.ts +163 -0
  421. package/dist/core/errors/codes.js +53 -0
  422. package/dist/core/errors/codes.js.map +1 -0
  423. package/dist/core/errors/error.d.ts +66 -0
  424. package/dist/core/errors/error.js +129 -0
  425. package/dist/core/errors/error.js.map +1 -0
  426. package/dist/core/events/bus.d.ts +12 -0
  427. package/dist/core/events/bus.js +46 -0
  428. package/dist/core/events/bus.js.map +1 -0
  429. package/dist/core/events/logger.d.ts +13 -0
  430. package/dist/core/events/logger.js +42 -0
  431. package/dist/core/events/logger.js.map +1 -0
  432. package/dist/core/events/types.d.ts +131 -0
  433. package/dist/core/events/types.js +3 -0
  434. package/dist/core/events/types.js.map +1 -0
  435. package/dist/core/lifecycle/engine-rules.d.ts +106 -0
  436. package/dist/core/lifecycle/engine-rules.js +267 -0
  437. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  438. package/dist/core/lifecycle/engine.d.ts +502 -0
  439. package/dist/core/lifecycle/engine.js +1750 -0
  440. package/dist/core/lifecycle/engine.js.map +1 -0
  441. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  442. package/dist/core/lifecycle/evaluate.js +77 -0
  443. package/dist/core/lifecycle/evaluate.js.map +1 -0
  444. package/dist/core/lifecycle/intent.d.ts +11 -0
  445. package/dist/core/lifecycle/intent.js +88 -0
  446. package/dist/core/lifecycle/intent.js.map +1 -0
  447. package/dist/core/lifecycle/monitor.d.ts +138 -0
  448. package/dist/core/lifecycle/monitor.js +616 -0
  449. package/dist/core/lifecycle/monitor.js.map +1 -0
  450. package/dist/core/lifecycle/observations.d.ts +17 -0
  451. package/dist/core/lifecycle/observations.js +59 -0
  452. package/dist/core/lifecycle/observations.js.map +1 -0
  453. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  454. package/dist/core/lifecycle/reconcile.js +112 -0
  455. package/dist/core/lifecycle/reconcile.js.map +1 -0
  456. package/dist/core/lifecycle/views.d.ts +49 -0
  457. package/dist/core/lifecycle/views.js +57 -0
  458. package/dist/core/lifecycle/views.js.map +1 -0
  459. package/dist/core/lifecycle/workers.d.ts +88 -0
  460. package/dist/core/lifecycle/workers.js +347 -0
  461. package/dist/core/lifecycle/workers.js.map +1 -0
  462. package/dist/core/model/address.d.ts +32 -0
  463. package/dist/core/model/address.js +43 -0
  464. package/dist/core/model/address.js.map +1 -0
  465. package/dist/core/model/amount.d.ts +25 -0
  466. package/dist/core/model/amount.js +102 -0
  467. package/dist/core/model/amount.js.map +1 -0
  468. package/dist/core/model/asset.d.ts +28 -0
  469. package/dist/core/model/asset.js +47 -0
  470. package/dist/core/model/asset.js.map +1 -0
  471. package/dist/core/model/capability.d.ts +3 -0
  472. package/dist/core/model/capability.js +18 -0
  473. package/dist/core/model/capability.js.map +1 -0
  474. package/dist/core/model/chain.d.ts +63 -0
  475. package/dist/core/model/chain.js +8 -0
  476. package/dist/core/model/chain.js.map +1 -0
  477. package/dist/core/model/fee.d.ts +36 -0
  478. package/dist/core/model/fee.js +17 -0
  479. package/dist/core/model/fee.js.map +1 -0
  480. package/dist/core/model/ids.d.ts +38 -0
  481. package/dist/core/model/ids.js +14 -0
  482. package/dist/core/model/ids.js.map +1 -0
  483. package/dist/core/model/intent.d.ts +63 -0
  484. package/dist/core/model/intent.js +81 -0
  485. package/dist/core/model/intent.js.map +1 -0
  486. package/dist/core/model/ordering.d.ts +28 -0
  487. package/dist/core/model/ordering.js +29 -0
  488. package/dist/core/model/ordering.js.map +1 -0
  489. package/dist/core/model/transaction.d.ts +123 -0
  490. package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
  491. package/dist/core/model/transaction.js.map +1 -0
  492. package/dist/core/observe/scanner.d.ts +135 -0
  493. package/dist/core/observe/scanner.js +358 -0
  494. package/dist/core/observe/scanner.js.map +1 -0
  495. package/dist/core/ordering/reservations.d.ts +16 -0
  496. package/dist/core/ordering/reservations.js +53 -0
  497. package/dist/core/ordering/reservations.js.map +1 -0
  498. package/dist/core/ordering/sequence.d.ts +61 -0
  499. package/dist/core/ordering/sequence.js +155 -0
  500. package/dist/core/ordering/sequence.js.map +1 -0
  501. package/dist/core/registry/adapters.d.ts +10 -0
  502. package/dist/core/registry/adapters.js +56 -0
  503. package/dist/core/registry/adapters.js.map +1 -0
  504. package/dist/core/registry/assets.d.ts +18 -0
  505. package/dist/core/registry/assets.js +90 -0
  506. package/dist/core/registry/assets.js.map +1 -0
  507. package/dist/core/registry/chains.d.ts +10 -0
  508. package/dist/core/registry/chains.js +80 -0
  509. package/dist/core/registry/chains.js.map +1 -0
  510. package/dist/core/registry/plugin.d.ts +41 -0
  511. package/dist/core/registry/plugin.js +109 -0
  512. package/dist/core/registry/plugin.js.map +1 -0
  513. package/dist/core/registry/providers.d.ts +31 -0
  514. package/dist/core/registry/providers.js +43 -0
  515. package/dist/core/registry/providers.js.map +1 -0
  516. package/dist/core/registry/schemes.d.ts +30 -0
  517. package/dist/core/registry/schemes.js +84 -0
  518. package/dist/core/registry/schemes.js.map +1 -0
  519. package/dist/core/secret/fragments.d.ts +33 -0
  520. package/dist/core/secret/fragments.js +110 -0
  521. package/dist/core/secret/fragments.js.map +1 -0
  522. package/dist/core/secret/redact.d.ts +10 -0
  523. package/dist/core/secret/redact.js +110 -0
  524. package/dist/core/secret/redact.js.map +1 -0
  525. package/dist/core/secret/secret.d.ts +14 -0
  526. package/dist/core/secret/secret.js +42 -0
  527. package/dist/core/secret/secret.js.map +1 -0
  528. package/dist/core/signing/callback.d.ts +10 -0
  529. package/dist/core/signing/callback.js +22 -0
  530. package/dist/core/signing/callback.js.map +1 -0
  531. package/dist/core/signing/guard.d.ts +18 -0
  532. package/dist/core/signing/guard.js +72 -0
  533. package/dist/core/signing/guard.js.map +1 -0
  534. package/dist/core/signing/hd.d.ts +36 -0
  535. package/dist/core/signing/hd.js +167 -0
  536. package/dist/core/signing/hd.js.map +1 -0
  537. package/dist/core/signing/local.d.ts +48 -0
  538. package/dist/core/signing/local.js +190 -0
  539. package/dist/core/signing/local.js.map +1 -0
  540. package/dist/core/signing/orchestrator.d.ts +40 -0
  541. package/dist/core/signing/orchestrator.js +300 -0
  542. package/dist/core/signing/orchestrator.js.map +1 -0
  543. package/dist/core/signing/types.d.ts +64 -0
  544. package/dist/core/signing/types.js +3 -0
  545. package/dist/core/signing/types.js.map +1 -0
  546. package/dist/core/signing/wallet.d.ts +48 -0
  547. package/dist/core/signing/wallet.js +161 -0
  548. package/dist/core/signing/wallet.js.map +1 -0
  549. package/dist/core/store/clone.d.ts +25 -0
  550. package/dist/core/store/clone.js +71 -0
  551. package/dist/core/store/clone.js.map +1 -0
  552. package/dist/core/store/format.d.ts +20 -0
  553. package/dist/core/store/format.js +86 -0
  554. package/dist/core/store/format.js.map +1 -0
  555. package/dist/core/store/memory.d.ts +38 -0
  556. package/dist/core/store/memory.js +325 -0
  557. package/dist/core/store/memory.js.map +1 -0
  558. package/dist/core/store/types.d.ts +258 -0
  559. package/dist/core/store/types.js +119 -0
  560. package/dist/core/store/types.js.map +1 -0
  561. package/dist/core/transport/backoff.d.ts +8 -0
  562. package/dist/core/transport/backoff.js +27 -0
  563. package/dist/core/transport/backoff.js.map +1 -0
  564. package/dist/core/transport/circuit.d.ts +25 -0
  565. package/dist/core/transport/circuit.js +61 -0
  566. package/dist/core/transport/circuit.js.map +1 -0
  567. package/dist/core/transport/http-transport.d.ts +30 -0
  568. package/dist/core/transport/http-transport.js +1703 -0
  569. package/dist/core/transport/http-transport.js.map +1 -0
  570. package/dist/core/transport/rate-limit.d.ts +27 -0
  571. package/dist/core/transport/rate-limit.js +78 -0
  572. package/dist/core/transport/rate-limit.js.map +1 -0
  573. package/dist/core/transport/stale-view.d.ts +11 -0
  574. package/dist/core/transport/stale-view.js +17 -0
  575. package/dist/core/transport/stale-view.js.map +1 -0
  576. package/dist/core/transport/types.d.ts +159 -0
  577. package/dist/core/transport/types.js +6 -0
  578. package/dist/core/transport/types.js.map +1 -0
  579. package/dist/core/util/bytes.d.ts +9 -0
  580. package/dist/core/util/bytes.js +40 -0
  581. package/dist/core/util/bytes.js.map +1 -0
  582. package/dist/core/util/clock.d.ts +6 -0
  583. package/dist/core/util/clock.js +26 -0
  584. package/dist/core/util/clock.js.map +1 -0
  585. package/dist/core/util/freeze.d.ts +8 -0
  586. package/dist/core/util/freeze.js +31 -0
  587. package/dist/core/util/freeze.js.map +1 -0
  588. package/dist/core/util/json.d.ts +35 -0
  589. package/dist/core/util/json.js +174 -0
  590. package/dist/core/util/json.js.map +1 -0
  591. package/dist/core/util/names.d.ts +27 -0
  592. package/dist/core/util/names.js +56 -0
  593. package/dist/core/util/names.js.map +1 -0
  594. package/dist/index.d.ts +65 -14
  595. package/dist/index.js +107 -49
  596. package/dist/index.js.map +1 -1
  597. package/dist/native.d.ts +21 -0
  598. package/dist/native.js +44 -0
  599. package/dist/native.js.map +1 -0
  600. package/dist/testing/contracts/api.d.ts +12 -0
  601. package/dist/testing/contracts/api.js +58 -0
  602. package/dist/testing/contracts/api.js.map +1 -0
  603. package/dist/testing/contracts/cursors.d.ts +6 -0
  604. package/dist/testing/contracts/cursors.js +43 -0
  605. package/dist/testing/contracts/cursors.js.map +1 -0
  606. package/dist/testing/contracts/locks.d.ts +10 -0
  607. package/dist/testing/contracts/locks.js +63 -0
  608. package/dist/testing/contracts/locks.js.map +1 -0
  609. package/dist/testing/contracts/operations.d.ts +21 -0
  610. package/dist/testing/contracts/operations.js +737 -0
  611. package/dist/testing/contracts/operations.js.map +1 -0
  612. package/dist/testing/contracts/sequences.d.ts +6 -0
  613. package/dist/testing/contracts/sequences.js +68 -0
  614. package/dist/testing/contracts/sequences.js.map +1 -0
  615. package/dist/testing/env.d.ts +68 -0
  616. package/dist/testing/env.js +105 -0
  617. package/dist/testing/env.js.map +1 -0
  618. package/dist/testing/fake-chain.d.ts +118 -0
  619. package/dist/testing/fake-chain.js +536 -0
  620. package/dist/testing/fake-chain.js.map +1 -0
  621. package/dist/testing/fake-clock.d.ts +15 -0
  622. package/dist/testing/fake-clock.js +86 -0
  623. package/dist/testing/fake-clock.js.map +1 -0
  624. package/dist/testing/fake-driver.d.ts +15 -0
  625. package/dist/testing/fake-driver.js +458 -0
  626. package/dist/testing/fake-driver.js.map +1 -0
  627. package/dist/testing/fake-fetch.d.ts +32 -0
  628. package/dist/testing/fake-fetch.js +81 -0
  629. package/dist/testing/fake-fetch.js.map +1 -0
  630. package/dist/testing/fake-plugin.d.ts +30 -0
  631. package/dist/testing/fake-plugin.js +66 -0
  632. package/dist/testing/fake-plugin.js.map +1 -0
  633. package/dist/testing/faulty-store.d.ts +38 -0
  634. package/dist/testing/faulty-store.js +71 -0
  635. package/dist/testing/faulty-store.js.map +1 -0
  636. package/dist/testing/generation.d.ts +60 -0
  637. package/dist/testing/generation.js +252 -0
  638. package/dist/testing/generation.js.map +1 -0
  639. package/dist/testing/index.d.ts +28 -0
  640. package/dist/testing/index.js +51 -0
  641. package/dist/testing/index.js.map +1 -0
  642. package/package.json +198 -45
  643. package/dist/libs/eth/account.d.ts +0 -9
  644. package/dist/libs/eth/account.js +0 -58
  645. package/dist/libs/eth/account.js.map +0 -1
  646. package/dist/libs/eth/contract.d.ts +0 -7
  647. package/dist/libs/eth/contract.js +0 -42
  648. package/dist/libs/eth/contract.js.map +0 -1
  649. package/dist/libs/eth/index.d.ts +0 -24
  650. package/dist/libs/eth/index.js +0 -72
  651. package/dist/libs/eth/index.js.map +0 -1
  652. package/dist/libs/eth/transact.d.ts +0 -7
  653. package/dist/libs/eth/transact.js +0 -26
  654. package/dist/libs/eth/transact.js.map +0 -1
  655. package/dist/libs/index.d.ts +0 -2
  656. package/dist/libs/index.js +0 -19
  657. package/dist/libs/index.js.map +0 -1
  658. package/dist/libs/trx/account.d.ts +0 -9
  659. package/dist/libs/trx/account.js +0 -55
  660. package/dist/libs/trx/account.js.map +0 -1
  661. package/dist/libs/trx/contract.d.ts +0 -7
  662. package/dist/libs/trx/contract.js +0 -27
  663. package/dist/libs/trx/contract.js.map +0 -1
  664. package/dist/libs/trx/index.d.ts +0 -22
  665. package/dist/libs/trx/index.js +0 -64
  666. package/dist/libs/trx/index.js.map +0 -1
  667. package/dist/libs/trx/transact.d.ts +0 -7
  668. package/dist/libs/trx/transact.js +0 -26
  669. package/dist/libs/trx/transact.js.map +0 -1
  670. package/dist/tool/common.d.ts +0 -28
  671. package/dist/tool/common.js +0 -33
  672. package/dist/tool/common.js.map +0 -1
  673. package/dist/tool/eth-tools.d.ts +0 -3
  674. package/dist/tool/eth-tools.js +0 -33
  675. package/dist/tool/eth-tools.js.map +0 -1
  676. package/dist/tool/index.d.ts +0 -5
  677. package/dist/tool/index.js +0 -22
  678. package/dist/tool/index.js.map +0 -1
  679. package/dist/tool/logging.d.ts +0 -3
  680. package/dist/tool/logging.js +0 -11
  681. package/dist/tool/logging.js.map +0 -1
  682. package/dist/tool/options.d.ts +0 -6
  683. package/dist/tool/options.js +0 -41
  684. package/dist/tool/options.js.map +0 -1
  685. package/dist/tool/trx-tools.d.ts +0 -3
  686. package/dist/tool/trx-tools.js +0 -20
  687. package/dist/tool/trx-tools.js.map +0 -1
  688. package/dist/type/account.d.ts +0 -9
  689. package/dist/type/account.js.map +0 -1
  690. package/dist/type/common.d.ts +0 -18
  691. package/dist/type/common.js.map +0 -1
  692. package/dist/type/contract.d.ts +0 -10
  693. package/dist/type/contract.js.map +0 -1
  694. package/dist/type/index.d.ts +0 -5
  695. package/dist/type/index.js +0 -22
  696. package/dist/type/index.js.map +0 -1
  697. package/dist/type/lib-types.d.ts +0 -9
  698. package/dist/type/lib-types.js.map +0 -1
  699. package/dist/type/transact.d.ts +0 -7
  700. package/dist/type/transact.js.map +0 -1
@@ -0,0 +1,386 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEvmBuilder = createEvmBuilder;
4
+ exports.createEvmBroadcaster = createEvmBroadcaster;
5
+ exports.createEvmReplacement = createEvmReplacement;
6
+ const error_1 = require("../../core/errors/error");
7
+ const asset_1 = require("../../core/model/asset");
8
+ const bytes_1 = require("../../core/util/bytes");
9
+ const errors_1 = require("./errors");
10
+ const fees_1 = require("./fees");
11
+ const network_1 = require("./network");
12
+ const reader_1 = require("./reader");
13
+ function transferOf(intent) {
14
+ if (intent.memo !== undefined) {
15
+ throw new error_1.UnsupportedCapabilityError('UNSUPPORTED_CAPABILITY', 'EVM transfers carry no memo');
16
+ }
17
+ const [output] = intent.outputs;
18
+ if (!output || intent.outputs.length !== 1) {
19
+ throw new error_1.ValidationError('INVALID_INTENT', 'an EVM transfer has exactly one output');
20
+ }
21
+ if (intent.asset === 'native')
22
+ return { to: output.to, amount: output.amount };
23
+ if (intent.asset.standard !== 'erc20') {
24
+ throw new error_1.ValidationError('ASSET_RESOLUTION', `EVM tokens use the 'erc20' standard`);
25
+ }
26
+ return { to: output.to, amount: output.amount, token: intent.asset.contract };
27
+ }
28
+ /** The call a transfer makes: a value transfer, or `transfer(to, amount)` on the token. */
29
+ function callOf(client, transfer) {
30
+ return transfer.token === undefined
31
+ ? { to: transfer.to, value: transfer.amount, data: '0x' }
32
+ : {
33
+ to: transfer.token,
34
+ value: 0n,
35
+ data: client.abi.encodeTransfer(transfer.to, transfer.amount),
36
+ };
37
+ }
38
+ function fieldsOf(ctx, call, nonce, gasLimit, params) {
39
+ const base = { chainId: ctx.config.chainId, nonce, gasLimit, ...call };
40
+ return params.type === 'eip1559'
41
+ ? {
42
+ ...base,
43
+ type: 'eip1559',
44
+ maxFeePerGas: params.maxFeePerGas,
45
+ maxPriorityFeePerGas: params.maxPriorityFeePerGas,
46
+ }
47
+ : { ...base, type: 'legacy', gasPrice: params.gasPrice };
48
+ }
49
+ function nonceOf(ordering) {
50
+ if (ordering?.kind !== 'nonce') {
51
+ throw new error_1.StateError('INVALID_TRANSITION', 'an EVM transaction needs an allocated nonce');
52
+ }
53
+ return ordering.nonce;
54
+ }
55
+ /**
56
+ * Rebuilds an unsigned transaction's fields from its ordering, summary and fee: a stored
57
+ * record holds plain data only, never an SDK object.
58
+ */
59
+ function unsignedFields(ctx, unsigned) {
60
+ const { ref } = (0, asset_1.parseAssetId)(unsigned.summary.asset);
61
+ const [output] = unsigned.summary.outputs;
62
+ if (!output)
63
+ throw new error_1.ValidationError('INVALID_INTENT', 'the unsigned transaction has no output');
64
+ const transfer = {
65
+ to: output.to,
66
+ amount: BigInt(output.amount),
67
+ ...(ref === 'native' ? {} : { token: ref.contract }),
68
+ };
69
+ const { gasLimit, params } = (0, fees_1.feeOf)(unsigned.fee.details);
70
+ return fieldsOf(ctx, callOf(ctx.client, transfer), nonceOf(unsigned.ordering), gasLimit, params);
71
+ }
72
+ function keyOf(keys) {
73
+ const key = keys.find((k) => k.scheme === 'secp256k1-ecdsa');
74
+ if (!key)
75
+ throw new error_1.SigningError('SIGNER_UNAVAILABLE', 'no secp256k1 key for the sending wallet');
76
+ return key;
77
+ }
78
+ function unsignedTx(ctx, fields, fee, key, summary) {
79
+ const { client } = ctx;
80
+ return {
81
+ payload: { encoding: 'hex', data: client.serializeUnsigned(fields) },
82
+ signingRequests: [
83
+ {
84
+ id: 'r0',
85
+ scheme: 'secp256k1-ecdsa',
86
+ payload: (0, bytes_1.fromHex)(client.unsignedHash(fields)),
87
+ payloadKind: 'digest',
88
+ publicKey: key.publicKey,
89
+ ...(key.keyRef ? { keyRef: key.keyRef } : {}),
90
+ },
91
+ ],
92
+ ordering: { kind: 'nonce', nonce: fields.nonce },
93
+ fee,
94
+ summary,
95
+ };
96
+ }
97
+ async function priceFor(ctx, fee, signal) {
98
+ const { client, config } = ctx;
99
+ if (typeof fee === 'object') {
100
+ const { params, gasLimit } = (0, fees_1.parseFeeOverride)(fee, config.feeModel);
101
+ // An explicit fee above either bound is refused before any request.
102
+ (0, fees_1.assertWithinCeiling)(params, config.maxFeePerGas);
103
+ if (gasLimit !== undefined)
104
+ (0, fees_1.assertWithinGasLimit)(gasLimit, config.maxGasLimit);
105
+ return { speed: 'custom', params, ...(gasLimit !== undefined ? { gasLimit } : {}) };
106
+ }
107
+ // A node's suggestion is clamped to the ceiling, so no endpoint can raise it.
108
+ if (config.feeModel === 'evm-legacy') {
109
+ const gasPrice = await client.gasPrice((0, reader_1.withSignal)(reader_1.READ, signal));
110
+ return {
111
+ speed: fee,
112
+ params: (0, fees_1.capPrice)((0, fees_1.legacyPrice)(gasPrice, fee), config.maxFeePerGas),
113
+ };
114
+ }
115
+ const history = await client.feeHistory(fees_1.FEE_HISTORY_BLOCKS, 'latest', fees_1.FEE_PERCENTILES, (0, reader_1.withSignal)(reader_1.READ, signal));
116
+ const { params, baseFeePerGas } = (0, fees_1.feesFromHistory)(history, fee, config.minPriorityFeePerGas);
117
+ return { speed: fee, params: (0, fees_1.capPrice)(params, config.maxFeePerGas), baseFeePerGas };
118
+ }
119
+ /** OP Stack: the oracle's L1 data fee for these exact unsigned bytes. */
120
+ async function l1FeeFor(ctx, fields, signal) {
121
+ if (!ctx.config.l1DataFee)
122
+ return undefined;
123
+ const { client } = ctx;
124
+ const data = client.abi.encodeGetL1Fee(client.serializeUnsigned(fields));
125
+ const result = await client.call({ to: network_1.GAS_PRICE_ORACLE, data }, 'latest', (0, reader_1.withSignal)(reader_1.READ, signal));
126
+ try {
127
+ return client.abi.decodeUint256(result);
128
+ }
129
+ catch {
130
+ throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the L1 fee oracle gave no fee');
131
+ }
132
+ }
133
+ /**
134
+ * OP Stack since Isthmus: the oracle's operator fee (`getOperatorFee`) for the whole gas
135
+ * limit. The fee grows with the gas used, so the limit gives an upper bound at the chain's
136
+ * current operator settings, as the `network` charge does at the fee cap; the predeploy
137
+ * applies the formula of the chain's fork (Isthmus or Jovian). `undefined` where nothing
138
+ * is charged: a zero fee, or a predeploy that has no such method yet (a revert, or `0x`).
139
+ * A node error is retryable (`callIfPresent`), and a malformed answer is a retryable
140
+ * `PROVIDER_UNAVAILABLE`, never no fee.
141
+ */
142
+ async function operatorFeeFor(ctx, gasLimit, signal) {
143
+ if (!ctx.config.l1DataFee)
144
+ return undefined;
145
+ const { client } = ctx;
146
+ const result = await (0, reader_1.callIfPresent)(client, { to: network_1.GAS_PRICE_ORACLE, data: client.abi.encodeGetOperatorFee(gasLimit) }, (0, reader_1.withSignal)(reader_1.READ, signal));
147
+ if (result === null || result === '0x')
148
+ return undefined;
149
+ let fee;
150
+ try {
151
+ fee = client.abi.decodeUint256(result);
152
+ }
153
+ catch {
154
+ throw new error_1.ProviderError('PROVIDER_UNAVAILABLE', 'the operator fee oracle gave no fee');
155
+ }
156
+ return fee === 0n ? undefined : fee;
157
+ }
158
+ /** The fee draft for `fields`, with the OP Stack charges read side by side. */
159
+ async function draftFor(ctx, fields, price, signal) {
160
+ const [l1Fee, operatorFee] = await Promise.all([
161
+ l1FeeFor(ctx, fields, signal),
162
+ operatorFeeFor(ctx, fields.gasLimit, signal),
163
+ ]);
164
+ return (0, fees_1.feeDraft)(price.speed, fields.gasLimit, price.params, {
165
+ ...(price.baseFeePerGas !== undefined ? { baseFeePerGas: price.baseFeePerGas } : {}),
166
+ ...(l1Fee !== undefined ? { l1Fee } : {}),
167
+ ...(operatorFee !== undefined ? { operatorFee } : {}),
168
+ });
169
+ }
170
+ /**
171
+ * Refuses a transfer of a token whose contract says it is deprecated. Tether's
172
+ * `TetherToken` (USDT on Ethereum) forwards a deprecated contract's `transfer` to its
173
+ * upgraded contract, which moves the value and emits the `Transfer` event, so the transfer
174
+ * estimates and executes, and the verdict, which reads the old contract's event, finds no
175
+ * evidence of it. Read once per estimate, before `eth_estimateGas` (which such a transfer
176
+ * passes); the core estimates before every build. One endpoint's answer, as for the
177
+ * builder's other token reads, not the proof quorum's: a `true` can only refuse before
178
+ * signing, the safe direction (as one endpoint's revert in `eth_estimateGas` already
179
+ * does), and a wrong `false` leaves the transfer where it was without the guard.
180
+ */
181
+ async function refuseDeprecated(ctx, token, signal) {
182
+ if (await (0, reader_1.erc20Deprecated)(ctx.client, token, (0, reader_1.withSignal)(reader_1.READ, signal))) {
183
+ throw new error_1.ValidationError('ASSET_RESOLUTION', 'the token contract is deprecated in favour of an upgraded contract; the asset must be re-registered at the upgraded contract');
184
+ }
185
+ }
186
+ /** geth's estimate reached its gas cap: the call fails at any gas limit. */
187
+ const GAS_ALLOWANCE = /^gas required exceeds allowance/i;
188
+ /**
189
+ * The node's gas estimate; a failing call or a shortfall becomes a clear pre-signing failure.
190
+ * A revert, a VM execution failure or an exhausted gas allowance is the call's own
191
+ * failure, tested first so that a token's revert text naming "insufficient funds" still gets
192
+ * the balance check. Any other error is the provider's and is rethrown unchanged.
193
+ */
194
+ async function estimateGas(ctx, from, transfer, signal) {
195
+ try {
196
+ return await ctx.client.estimateGas({ from, ...callOf(ctx.client, transfer) }, (0, reader_1.withSignal)(reader_1.READ, signal));
197
+ }
198
+ catch (error) {
199
+ const definitive = (0, error_1.isCryptoAioError)(error, 'RPC_ERROR') && !error.ambiguous;
200
+ const message = definitive ? String(error.details?.rpcMessage ?? error.message) : '';
201
+ const fails = (0, reader_1.isRevert)(error) || (0, reader_1.isExecutionFailure)(error) || GAS_ALLOWANCE.test(message);
202
+ if (!fails) {
203
+ if (/insufficient funds/i.test(message)) {
204
+ throw new error_1.ChainError('INSUFFICIENT_FUNDS', 'insufficient funds for this transfer');
205
+ }
206
+ throw error;
207
+ }
208
+ if (transfer.token !== undefined) {
209
+ const available = await (0, reader_1.erc20Balance)(ctx.client, transfer.token, from, (0, reader_1.withSignal)(reader_1.READ, signal));
210
+ if (available < transfer.amount) {
211
+ throw new error_1.ChainError('INSUFFICIENT_FUNDS', 'insufficient token balance for this transfer', {
212
+ details: {
213
+ required: transfer.amount.toString(),
214
+ available: available.toString(),
215
+ },
216
+ });
217
+ }
218
+ }
219
+ throw new error_1.ValidationError('INVALID_INTENT', 'the transfer would fail');
220
+ }
221
+ }
222
+ function createEvmBuilder(ctx) {
223
+ const { client } = ctx;
224
+ return {
225
+ async estimateFee(intent, build) {
226
+ const transfer = transferOf(intent);
227
+ const price = await priceFor(ctx, intent.fee, build.signal);
228
+ if (transfer.token !== undefined) {
229
+ await refuseDeprecated(ctx, transfer.token, build.signal);
230
+ }
231
+ const gasLimit = price.gasLimit ??
232
+ (0, fees_1.gasLimitFrom)(await estimateGas(ctx, intent.from, transfer, build.signal));
233
+ // The estimate with its headroom is what would be signed, so that is what is bounded.
234
+ (0, fees_1.assertWithinGasLimit)(gasLimit, ctx.config.maxGasLimit);
235
+ const nonce = build.ordering?.kind === 'nonce' ? build.ordering.nonce : 0n;
236
+ const fields = fieldsOf(ctx, callOf(client, transfer), nonce, gasLimit, price.params);
237
+ return draftFor(ctx, fields, price, build.signal);
238
+ },
239
+ async checkFunds(intent, fee, build) {
240
+ const transfer = transferOf(intent);
241
+ if (transfer.token !== undefined) {
242
+ const available = await (0, reader_1.erc20Balance)(client, transfer.token, intent.from, (0, reader_1.withSignal)(reader_1.READ, build.signal));
243
+ if (available < transfer.amount) {
244
+ return {
245
+ ok: false,
246
+ asset: { standard: 'erc20', contract: transfer.token },
247
+ required: transfer.amount,
248
+ available,
249
+ };
250
+ }
251
+ }
252
+ const cost = fee.charges.reduce((sum, c) => (c.asset === 'native' ? sum + c.amount : sum), 0n);
253
+ const required = cost + (transfer.token === undefined ? transfer.amount : 0n);
254
+ const available = await client.getBalance(intent.from, 'latest', (0, reader_1.withSignal)(reader_1.READ, build.signal));
255
+ return available >= required
256
+ ? { ok: true }
257
+ : { ok: false, asset: 'native', required, available };
258
+ },
259
+ async build(intent, fee, build) {
260
+ const transfer = transferOf(intent);
261
+ const { gasLimit, params } = (0, fees_1.feeOf)(fee.details);
262
+ const model = params.type === 'eip1559' ? 'evm-1559' : 'evm-legacy';
263
+ if (model !== ctx.config.feeModel) {
264
+ throw new error_1.ValidationError('INVALID_INTENT', `this network takes ${ctx.config.feeModel} fees`);
265
+ }
266
+ // The bounds are checked again, whatever produced the fee object.
267
+ (0, fees_1.assertWithinCeiling)(params, ctx.config.maxFeePerGas);
268
+ (0, fees_1.assertWithinGasLimit)(gasLimit, ctx.config.maxGasLimit);
269
+ const fields = fieldsOf(ctx, callOf(client, transfer), nonceOf(build.ordering), gasLimit, params);
270
+ return unsignedTx(ctx, fields, fee, keyOf(build.keys), {
271
+ asset: (0, asset_1.assetId)(ctx.chain.id, ctx.network.id, intent.asset),
272
+ outputs: [{ to: transfer.to, amount: transfer.amount.toString() }],
273
+ });
274
+ },
275
+ async assemble(unsigned, signatures) {
276
+ const request = unsigned.signingRequests[0];
277
+ const signature = signatures.find((s) => s.requestId === request?.id);
278
+ if (!request ||
279
+ !signature ||
280
+ signature.bytes.length !== 64 ||
281
+ (signature.recovery !== 0 && signature.recovery !== 1)) {
282
+ throw new error_1.SigningError('SIGNING_FAILED', 'missing signature for request r0');
283
+ }
284
+ const mismatch = () => new error_1.SigningError('SIGNING_FAILED', 'the unsigned payload or its digest does not match its fee and summary');
285
+ let fields;
286
+ try {
287
+ fields = unsignedFields(ctx, unsigned);
288
+ }
289
+ catch {
290
+ throw mismatch();
291
+ }
292
+ // The signature must be over these fields' digest, or it signs other bytes.
293
+ if (client.serializeUnsigned(fields) !== unsigned.payload.data ||
294
+ !(0, bytes_1.equalBytes)(request.payload, (0, bytes_1.fromHex)(client.unsignedHash(fields)))) {
295
+ throw mismatch();
296
+ }
297
+ const { raw, hash } = client.serializeSigned(fields, {
298
+ r: (0, bytes_1.toHex)(signature.bytes.slice(0, 32), true),
299
+ s: (0, bytes_1.toHex)(signature.bytes.slice(32), true),
300
+ yParity: signature.recovery,
301
+ });
302
+ return {
303
+ raw: { encoding: 'hex', data: raw },
304
+ ref: { id: hash, idKind: 'tx-hash', canonical: true },
305
+ };
306
+ },
307
+ };
308
+ }
309
+ function createEvmBroadcaster(client, chainId) {
310
+ return {
311
+ async broadcast(signed, options = {}) {
312
+ try {
313
+ await client.sendRawTransaction(signed.raw.data, {
314
+ purpose: 'broadcast',
315
+ retry: 'ambiguous-on-failure',
316
+ ...(options.fanout !== undefined ? { fanout: options.fanout } : {}),
317
+ ...(options.signal ? { signal: options.signal } : {}),
318
+ });
319
+ return { kind: 'accepted' };
320
+ }
321
+ catch (error) {
322
+ // An ambiguous error may hide a delivered transaction; it is never classified.
323
+ // A rejection stands only when its reason holds for the bytes we sent.
324
+ if ((0, error_1.isCryptoAioError)(error, 'RPC_ERROR') && !error.ambiguous) {
325
+ return (0, errors_1.classifyOwnBroadcast)(String(error.details?.rpcMessage ?? error.message), signed.raw.data, chainId);
326
+ }
327
+ throw error;
328
+ }
329
+ },
330
+ };
331
+ }
332
+ /** Same-nonce replace and cancel under the network's bump; absent without a mempool. */
333
+ function createEvmReplacement(ctx) {
334
+ const { config } = ctx;
335
+ const bump = config.minBumpPercent;
336
+ if (bump === undefined)
337
+ return undefined;
338
+ const prices = config.feeModel === 'evm-legacy' ? 'the gas price' : 'the fee cap and the tip';
339
+ const tooLow = (what) => new error_1.ChainError('FEE_TOO_LOW', `${what} must raise ${prices} by at least ${bump}%`);
340
+ const keyFrom = (previous) => {
341
+ const request = previous.signingRequests[0];
342
+ if (!request)
343
+ throw new error_1.SigningError('SIGNER_UNAVAILABLE', 'the previous attempt has no key');
344
+ return {
345
+ scheme: request.scheme,
346
+ publicKey: request.publicKey,
347
+ ...(request.keyRef ? { keyRef: request.keyRef } : {}),
348
+ };
349
+ };
350
+ return {
351
+ replace: config.capabilities.has('replace-fee'),
352
+ cancel: config.capabilities.has('cancel'),
353
+ comparePrice: (a, b) => (0, fees_1.comparePrices)((0, fees_1.feeOf)(a.fee.details).params, (0, fees_1.feeOf)(b.fee.details).params),
354
+ async buildReplacement(previous, fee, build) {
355
+ const before = (0, fees_1.feeOf)(previous.fee.details);
356
+ const price = await priceFor(ctx, fee, build.signal);
357
+ if (!(0, fees_1.meetsBump)(before.params, price.params, bump))
358
+ throw tooLow('a replacement');
359
+ const old = unsignedFields(ctx, previous);
360
+ // The original's gas limit too: no replacement signs one above the bound.
361
+ const gasLimit = price.gasLimit ?? before.gasLimit;
362
+ (0, fees_1.assertWithinGasLimit)(gasLimit, config.maxGasLimit);
363
+ const fields = fieldsOf(ctx, { to: old.to, value: old.value, data: old.data }, old.nonce, gasLimit, price.params);
364
+ return unsignedTx(ctx, fields, await draftFor(ctx, fields, price, build.signal), keyFrom(previous), previous.summary);
365
+ },
366
+ async buildCancel(previous, build, fee) {
367
+ const before = (0, fees_1.feeOf)(previous.fee.details);
368
+ const price = fee === undefined
369
+ ? { speed: 'custom', params: (0, fees_1.minimumBump)(before.params, bump) }
370
+ : await priceFor(ctx, fee, build.signal);
371
+ if (!(0, fees_1.meetsBump)(before.params, price.params, bump))
372
+ throw tooLow('a cancel');
373
+ // A cancel whose least bump would pay above the ceiling is refused.
374
+ (0, fees_1.assertWithinCeiling)(price.params, config.maxFeePerGas);
375
+ const nonce = nonceOf(previous.ordering);
376
+ // A self-transfer needs 21,000 gas, which every bound allows; an explicit fee's
377
+ // `gasLimit` was bounded when it was parsed.
378
+ const fields = fieldsOf(ctx, { to: build.from, value: 0n, data: '0x' }, nonce, price.gasLimit ?? fees_1.TRANSFER_GAS, price.params);
379
+ return unsignedTx(ctx, fields, await draftFor(ctx, fields, price, build.signal), keyFrom(previous), {
380
+ asset: (0, asset_1.assetId)(ctx.chain.id, ctx.network.id, 'native'),
381
+ outputs: [{ to: build.from, amount: '0' }],
382
+ });
383
+ },
384
+ };
385
+ }
386
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/adapters/evm/builder.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Fees, funds, building, assembling, broadcasting, and same-nonce replace and cancel.\n * One output per transfer, native or ERC-20 `transfer`.\n */\nimport type {\n BroadcastResult,\n Broadcaster,\n BuildContext,\n ReplacementPolicy,\n TxBuilder,\n WalletKey,\n} from '../../core/driver/types';\nimport {\n ChainError,\n ProviderError,\n SigningError,\n StateError,\n UnsupportedCapabilityError,\n ValidationError,\n isCryptoAioError,\n} from '../../core/errors/error';\nimport { assetId, parseAssetId } from '../../core/model/asset';\nimport type { FeeEstimateDraft, FeeOverride, FeeSpeed } from '../../core/model/fee';\nimport type { DriverIntent, IntentSummary } from '../../core/model/intent';\nimport type { OrderingData } from '../../core/model/ordering';\nimport type { UnsignedTx } from '../../core/model/transaction';\nimport { equalBytes, fromHex, toHex } from '../../core/util/bytes';\nimport { classifyOwnBroadcast } from './errors';\nimport {\n FEE_HISTORY_BLOCKS,\n FEE_PERCENTILES,\n TRANSFER_GAS,\n assertWithinCeiling,\n assertWithinGasLimit,\n capPrice,\n comparePrices,\n feeDraft,\n feeOf,\n feesFromHistory,\n gasLimitFrom,\n legacyPrice,\n meetsBump,\n minimumBump,\n parseFeeOverride,\n type EvmFeeParams,\n} from './fees';\nimport { GAS_PRICE_ORACLE } from './network';\nimport {\n READ,\n callIfPresent,\n erc20Balance,\n erc20Deprecated,\n isExecutionFailure,\n isRevert,\n withSignal,\n type EvmContext,\n} from './reader';\nimport type { EvmClient, EvmTxFields } from './types';\n\n/** One transfer: `token` is the ERC-20 contract, absent for the native asset. */\ninterface Transfer {\n readonly to: string;\n readonly amount: bigint;\n readonly token?: string;\n}\n\ninterface Price {\n readonly speed: FeeSpeed | 'custom';\n readonly params: EvmFeeParams;\n readonly baseFeePerGas?: bigint;\n readonly gasLimit?: bigint;\n}\n\nfunction transferOf(intent: DriverIntent): Transfer {\n if (intent.memo !== undefined) {\n throw new UnsupportedCapabilityError(\n 'UNSUPPORTED_CAPABILITY',\n 'EVM transfers carry no memo',\n );\n }\n const [output] = intent.outputs;\n if (!output || intent.outputs.length !== 1) {\n throw new ValidationError('INVALID_INTENT', 'an EVM transfer has exactly one output');\n }\n if (intent.asset === 'native') return { to: output.to, amount: output.amount };\n if (intent.asset.standard !== 'erc20') {\n throw new ValidationError('ASSET_RESOLUTION', `EVM tokens use the 'erc20' standard`);\n }\n return { to: output.to, amount: output.amount, token: intent.asset.contract };\n}\n\n/** The call a transfer makes: a value transfer, or `transfer(to, amount)` on the token. */\nfunction callOf(\n client: EvmClient,\n transfer: Transfer,\n): { to: string; value: bigint; data: string } {\n return transfer.token === undefined\n ? { to: transfer.to, value: transfer.amount, data: '0x' }\n : {\n to: transfer.token,\n value: 0n,\n data: client.abi.encodeTransfer(transfer.to, transfer.amount),\n };\n}\n\nfunction fieldsOf(\n ctx: EvmContext,\n call: { to: string; value: bigint; data: string },\n nonce: bigint,\n gasLimit: bigint,\n params: EvmFeeParams,\n): EvmTxFields {\n const base = { chainId: ctx.config.chainId, nonce, gasLimit, ...call };\n return params.type === 'eip1559'\n ? {\n ...base,\n type: 'eip1559',\n maxFeePerGas: params.maxFeePerGas,\n maxPriorityFeePerGas: params.maxPriorityFeePerGas,\n }\n : { ...base, type: 'legacy', gasPrice: params.gasPrice };\n}\n\nfunction nonceOf(ordering: OrderingData | undefined): bigint {\n if (ordering?.kind !== 'nonce') {\n throw new StateError(\n 'INVALID_TRANSITION',\n 'an EVM transaction needs an allocated nonce',\n );\n }\n return ordering.nonce;\n}\n\n/**\n * Rebuilds an unsigned transaction's fields from its ordering, summary and fee: a stored\n * record holds plain data only, never an SDK object.\n */\nfunction unsignedFields(ctx: EvmContext, unsigned: UnsignedTx): EvmTxFields {\n const { ref } = parseAssetId(unsigned.summary.asset);\n const [output] = unsigned.summary.outputs;\n if (!output)\n throw new ValidationError('INVALID_INTENT', 'the unsigned transaction has no output');\n const transfer: Transfer = {\n to: output.to,\n amount: BigInt(output.amount),\n ...(ref === 'native' ? {} : { token: ref.contract }),\n };\n const { gasLimit, params } = feeOf(unsigned.fee.details);\n return fieldsOf(\n ctx,\n callOf(ctx.client, transfer),\n nonceOf(unsigned.ordering),\n gasLimit,\n params,\n );\n}\n\nfunction keyOf(keys: readonly WalletKey[]): WalletKey {\n const key = keys.find((k) => k.scheme === 'secp256k1-ecdsa');\n if (!key)\n throw new SigningError(\n 'SIGNER_UNAVAILABLE',\n 'no secp256k1 key for the sending wallet',\n );\n return key;\n}\n\nfunction unsignedTx(\n ctx: EvmContext,\n fields: EvmTxFields,\n fee: FeeEstimateDraft,\n key: WalletKey,\n summary: IntentSummary,\n): UnsignedTx {\n const { client } = ctx;\n return {\n payload: { encoding: 'hex', data: client.serializeUnsigned(fields) },\n signingRequests: [\n {\n id: 'r0',\n scheme: 'secp256k1-ecdsa',\n payload: fromHex(client.unsignedHash(fields)),\n payloadKind: 'digest',\n publicKey: key.publicKey,\n ...(key.keyRef ? { keyRef: key.keyRef } : {}),\n },\n ],\n ordering: { kind: 'nonce', nonce: fields.nonce },\n fee,\n summary,\n };\n}\n\nasync function priceFor(\n ctx: EvmContext,\n fee: FeeSpeed | FeeOverride,\n signal?: AbortSignal,\n): Promise<Price> {\n const { client, config } = ctx;\n if (typeof fee === 'object') {\n const { params, gasLimit } = parseFeeOverride(fee, config.feeModel);\n // An explicit fee above either bound is refused before any request.\n assertWithinCeiling(params, config.maxFeePerGas);\n if (gasLimit !== undefined) assertWithinGasLimit(gasLimit, config.maxGasLimit);\n return { speed: 'custom', params, ...(gasLimit !== undefined ? { gasLimit } : {}) };\n }\n // A node's suggestion is clamped to the ceiling, so no endpoint can raise it.\n if (config.feeModel === 'evm-legacy') {\n const gasPrice = await client.gasPrice(withSignal(READ, signal));\n return {\n speed: fee,\n params: capPrice(legacyPrice(gasPrice, fee), config.maxFeePerGas),\n };\n }\n const history = await client.feeHistory(\n FEE_HISTORY_BLOCKS,\n 'latest',\n FEE_PERCENTILES,\n withSignal(READ, signal),\n );\n const { params, baseFeePerGas } = feesFromHistory(\n history,\n fee,\n config.minPriorityFeePerGas,\n );\n return { speed: fee, params: capPrice(params, config.maxFeePerGas), baseFeePerGas };\n}\n\n/** OP Stack: the oracle's L1 data fee for these exact unsigned bytes. */\nasync function l1FeeFor(\n ctx: EvmContext,\n fields: EvmTxFields,\n signal?: AbortSignal,\n): Promise<bigint | undefined> {\n if (!ctx.config.l1DataFee) return undefined;\n const { client } = ctx;\n const data = client.abi.encodeGetL1Fee(client.serializeUnsigned(fields));\n const result = await client.call(\n { to: GAS_PRICE_ORACLE, data },\n 'latest',\n withSignal(READ, signal),\n );\n try {\n return client.abi.decodeUint256(result);\n } catch {\n throw new ProviderError('PROVIDER_UNAVAILABLE', 'the L1 fee oracle gave no fee');\n }\n}\n\n/**\n * OP Stack since Isthmus: the oracle's operator fee (`getOperatorFee`) for the whole gas\n * limit. The fee grows with the gas used, so the limit gives an upper bound at the chain's\n * current operator settings, as the `network` charge does at the fee cap; the predeploy\n * applies the formula of the chain's fork (Isthmus or Jovian). `undefined` where nothing\n * is charged: a zero fee, or a predeploy that has no such method yet (a revert, or `0x`).\n * A node error is retryable (`callIfPresent`), and a malformed answer is a retryable\n * `PROVIDER_UNAVAILABLE`, never no fee.\n */\nasync function operatorFeeFor(\n ctx: EvmContext,\n gasLimit: bigint,\n signal?: AbortSignal,\n): Promise<bigint | undefined> {\n if (!ctx.config.l1DataFee) return undefined;\n const { client } = ctx;\n const result = await callIfPresent(\n client,\n { to: GAS_PRICE_ORACLE, data: client.abi.encodeGetOperatorFee(gasLimit) },\n withSignal(READ, signal),\n );\n if (result === null || result === '0x') return undefined;\n let fee: bigint;\n try {\n fee = client.abi.decodeUint256(result);\n } catch {\n throw new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n 'the operator fee oracle gave no fee',\n );\n }\n return fee === 0n ? undefined : fee;\n}\n\n/** The fee draft for `fields`, with the OP Stack charges read side by side. */\nasync function draftFor(\n ctx: EvmContext,\n fields: EvmTxFields,\n price: Price,\n signal?: AbortSignal,\n): Promise<FeeEstimateDraft> {\n const [l1Fee, operatorFee] = await Promise.all([\n l1FeeFor(ctx, fields, signal),\n operatorFeeFor(ctx, fields.gasLimit, signal),\n ]);\n return feeDraft(price.speed, fields.gasLimit, price.params, {\n ...(price.baseFeePerGas !== undefined ? { baseFeePerGas: price.baseFeePerGas } : {}),\n ...(l1Fee !== undefined ? { l1Fee } : {}),\n ...(operatorFee !== undefined ? { operatorFee } : {}),\n });\n}\n\n/**\n * Refuses a transfer of a token whose contract says it is deprecated. Tether's\n * `TetherToken` (USDT on Ethereum) forwards a deprecated contract's `transfer` to its\n * upgraded contract, which moves the value and emits the `Transfer` event, so the transfer\n * estimates and executes, and the verdict, which reads the old contract's event, finds no\n * evidence of it. Read once per estimate, before `eth_estimateGas` (which such a transfer\n * passes); the core estimates before every build. One endpoint's answer, as for the\n * builder's other token reads, not the proof quorum's: a `true` can only refuse before\n * signing, the safe direction (as one endpoint's revert in `eth_estimateGas` already\n * does), and a wrong `false` leaves the transfer where it was without the guard.\n */\nasync function refuseDeprecated(\n ctx: EvmContext,\n token: string,\n signal?: AbortSignal,\n): Promise<void> {\n if (await erc20Deprecated(ctx.client, token, withSignal(READ, signal))) {\n throw new ValidationError(\n 'ASSET_RESOLUTION',\n 'the token contract is deprecated in favour of an upgraded contract; the asset must be re-registered at the upgraded contract',\n );\n }\n}\n\n/** geth's estimate reached its gas cap: the call fails at any gas limit. */\nconst GAS_ALLOWANCE = /^gas required exceeds allowance/i;\n\n/**\n * The node's gas estimate; a failing call or a shortfall becomes a clear pre-signing failure.\n * A revert, a VM execution failure or an exhausted gas allowance is the call's own\n * failure, tested first so that a token's revert text naming \"insufficient funds\" still gets\n * the balance check. Any other error is the provider's and is rethrown unchanged.\n */\nasync function estimateGas(\n ctx: EvmContext,\n from: string,\n transfer: Transfer,\n signal?: AbortSignal,\n): Promise<bigint> {\n try {\n return await ctx.client.estimateGas(\n { from, ...callOf(ctx.client, transfer) },\n withSignal(READ, signal),\n );\n } catch (error) {\n const definitive = isCryptoAioError(error, 'RPC_ERROR') && !error.ambiguous;\n const message = definitive ? String(error.details?.rpcMessage ?? error.message) : '';\n const fails =\n isRevert(error) || isExecutionFailure(error) || GAS_ALLOWANCE.test(message);\n if (!fails) {\n if (/insufficient funds/i.test(message)) {\n throw new ChainError(\n 'INSUFFICIENT_FUNDS',\n 'insufficient funds for this transfer',\n );\n }\n throw error;\n }\n if (transfer.token !== undefined) {\n const available = await erc20Balance(\n ctx.client,\n transfer.token,\n from,\n withSignal(READ, signal),\n );\n if (available < transfer.amount) {\n throw new ChainError(\n 'INSUFFICIENT_FUNDS',\n 'insufficient token balance for this transfer',\n {\n details: {\n required: transfer.amount.toString(),\n available: available.toString(),\n },\n },\n );\n }\n }\n throw new ValidationError('INVALID_INTENT', 'the transfer would fail');\n }\n}\n\nexport function createEvmBuilder(ctx: EvmContext): TxBuilder {\n const { client } = ctx;\n return {\n async estimateFee(intent, build: BuildContext) {\n const transfer = transferOf(intent);\n const price = await priceFor(ctx, intent.fee, build.signal);\n if (transfer.token !== undefined) {\n await refuseDeprecated(ctx, transfer.token, build.signal);\n }\n const gasLimit =\n price.gasLimit ??\n gasLimitFrom(await estimateGas(ctx, intent.from, transfer, build.signal));\n // The estimate with its headroom is what would be signed, so that is what is bounded.\n assertWithinGasLimit(gasLimit, ctx.config.maxGasLimit);\n const nonce = build.ordering?.kind === 'nonce' ? build.ordering.nonce : 0n;\n const fields = fieldsOf(\n ctx,\n callOf(client, transfer),\n nonce,\n gasLimit,\n price.params,\n );\n return draftFor(ctx, fields, price, build.signal);\n },\n\n async checkFunds(intent, fee, build) {\n const transfer = transferOf(intent);\n if (transfer.token !== undefined) {\n const available = await erc20Balance(\n client,\n transfer.token,\n intent.from,\n withSignal(READ, build.signal),\n );\n if (available < transfer.amount) {\n return {\n ok: false,\n asset: { standard: 'erc20', contract: transfer.token },\n required: transfer.amount,\n available,\n };\n }\n }\n const cost = fee.charges.reduce(\n (sum, c) => (c.asset === 'native' ? sum + c.amount : sum),\n 0n,\n );\n const required = cost + (transfer.token === undefined ? transfer.amount : 0n);\n const available = await client.getBalance(\n intent.from,\n 'latest',\n withSignal(READ, build.signal),\n );\n return available >= required\n ? { ok: true }\n : { ok: false, asset: 'native', required, available };\n },\n\n async build(intent, fee, build) {\n const transfer = transferOf(intent);\n const { gasLimit, params } = feeOf(fee.details);\n const model = params.type === 'eip1559' ? 'evm-1559' : 'evm-legacy';\n if (model !== ctx.config.feeModel) {\n throw new ValidationError(\n 'INVALID_INTENT',\n `this network takes ${ctx.config.feeModel} fees`,\n );\n }\n // The bounds are checked again, whatever produced the fee object.\n assertWithinCeiling(params, ctx.config.maxFeePerGas);\n assertWithinGasLimit(gasLimit, ctx.config.maxGasLimit);\n const fields = fieldsOf(\n ctx,\n callOf(client, transfer),\n nonceOf(build.ordering),\n gasLimit,\n params,\n );\n return unsignedTx(ctx, fields, fee, keyOf(build.keys), {\n asset: assetId(ctx.chain.id, ctx.network.id, intent.asset),\n outputs: [{ to: transfer.to, amount: transfer.amount.toString() }],\n });\n },\n\n async assemble(unsigned, signatures) {\n const request = unsigned.signingRequests[0];\n const signature = signatures.find((s) => s.requestId === request?.id);\n if (\n !request ||\n !signature ||\n signature.bytes.length !== 64 ||\n (signature.recovery !== 0 && signature.recovery !== 1)\n ) {\n throw new SigningError('SIGNING_FAILED', 'missing signature for request r0');\n }\n const mismatch = () =>\n new SigningError(\n 'SIGNING_FAILED',\n 'the unsigned payload or its digest does not match its fee and summary',\n );\n let fields: EvmTxFields;\n try {\n fields = unsignedFields(ctx, unsigned);\n } catch {\n throw mismatch();\n }\n // The signature must be over these fields' digest, or it signs other bytes.\n if (\n client.serializeUnsigned(fields) !== unsigned.payload.data ||\n !equalBytes(request.payload, fromHex(client.unsignedHash(fields)))\n ) {\n throw mismatch();\n }\n const { raw, hash } = client.serializeSigned(fields, {\n r: toHex(signature.bytes.slice(0, 32), true),\n s: toHex(signature.bytes.slice(32), true),\n yParity: signature.recovery,\n });\n return {\n raw: { encoding: 'hex', data: raw },\n ref: { id: hash, idKind: 'tx-hash', canonical: true },\n };\n },\n };\n}\n\nexport function createEvmBroadcaster(client: EvmClient, chainId: bigint): Broadcaster {\n return {\n async broadcast(signed, options = {}): Promise<BroadcastResult> {\n try {\n await client.sendRawTransaction(signed.raw.data, {\n purpose: 'broadcast',\n retry: 'ambiguous-on-failure',\n ...(options.fanout !== undefined ? { fanout: options.fanout } : {}),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n return { kind: 'accepted' };\n } catch (error) {\n // An ambiguous error may hide a delivered transaction; it is never classified.\n // A rejection stands only when its reason holds for the bytes we sent.\n if (isCryptoAioError(error, 'RPC_ERROR') && !error.ambiguous) {\n return classifyOwnBroadcast(\n String(error.details?.rpcMessage ?? error.message),\n signed.raw.data,\n chainId,\n );\n }\n throw error;\n }\n },\n };\n}\n\n/** Same-nonce replace and cancel under the network's bump; absent without a mempool. */\nexport function createEvmReplacement(ctx: EvmContext): ReplacementPolicy | undefined {\n const { config } = ctx;\n const bump = config.minBumpPercent;\n if (bump === undefined) return undefined;\n const prices =\n config.feeModel === 'evm-legacy' ? 'the gas price' : 'the fee cap and the tip';\n const tooLow = (what: string) =>\n new ChainError('FEE_TOO_LOW', `${what} must raise ${prices} by at least ${bump}%`);\n const keyFrom = (previous: UnsignedTx): WalletKey => {\n const request = previous.signingRequests[0];\n if (!request)\n throw new SigningError('SIGNER_UNAVAILABLE', 'the previous attempt has no key');\n return {\n scheme: request.scheme,\n publicKey: request.publicKey,\n ...(request.keyRef ? { keyRef: request.keyRef } : {}),\n };\n };\n return {\n replace: config.capabilities.has('replace-fee'),\n cancel: config.capabilities.has('cancel'),\n\n comparePrice: (a, b) =>\n comparePrices(feeOf(a.fee.details).params, feeOf(b.fee.details).params),\n\n async buildReplacement(previous, fee, build) {\n const before = feeOf(previous.fee.details);\n const price = await priceFor(ctx, fee, build.signal);\n if (!meetsBump(before.params, price.params, bump)) throw tooLow('a replacement');\n const old = unsignedFields(ctx, previous);\n // The original's gas limit too: no replacement signs one above the bound.\n const gasLimit = price.gasLimit ?? before.gasLimit;\n assertWithinGasLimit(gasLimit, config.maxGasLimit);\n const fields = fieldsOf(\n ctx,\n { to: old.to, value: old.value, data: old.data },\n old.nonce,\n gasLimit,\n price.params,\n );\n return unsignedTx(\n ctx,\n fields,\n await draftFor(ctx, fields, price, build.signal),\n keyFrom(previous),\n previous.summary,\n );\n },\n\n async buildCancel(previous, build, fee) {\n const before = feeOf(previous.fee.details);\n const price: Price =\n fee === undefined\n ? { speed: 'custom', params: minimumBump(before.params, bump) }\n : await priceFor(ctx, fee, build.signal);\n if (!meetsBump(before.params, price.params, bump)) throw tooLow('a cancel');\n // A cancel whose least bump would pay above the ceiling is refused.\n assertWithinCeiling(price.params, config.maxFeePerGas);\n const nonce = nonceOf(previous.ordering);\n // A self-transfer needs 21,000 gas, which every bound allows; an explicit fee's\n // `gasLimit` was bounded when it was parsed.\n const fields = fieldsOf(\n ctx,\n { to: build.from, value: 0n, data: '0x' },\n nonce,\n price.gasLimit ?? TRANSFER_GAS,\n price.params,\n );\n return unsignedTx(\n ctx,\n fields,\n await draftFor(ctx, fields, price, build.signal),\n keyFrom(previous),\n {\n asset: assetId(ctx.chain.id, ctx.network.id, 'native'),\n outputs: [{ to: build.from, amount: '0' }],\n },\n );\n },\n };\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { ChainInfo } from '../../core/model/chain';
2
+ /**
3
+ * Frozen all the way down, as `BUILTIN_SCHEMES` is: networks share `FINALIZED_TAG`, and a
4
+ * chain's networks share its `remove` list, so no caller may change them.
5
+ */
6
+ export declare const EVM_CHAINS: readonly ChainInfo[];