crypto-aio 0.0.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (700) hide show
  1. package/CHANGELOG.md +167 -0
  2. package/README.md +163 -13
  3. package/dist/adapters/avalanche/address.d.ts +15 -0
  4. package/dist/adapters/avalanche/address.js +74 -0
  5. package/dist/adapters/avalanche/address.js.map +1 -0
  6. package/dist/adapters/avalanche/api.d.ts +100 -0
  7. package/dist/adapters/avalanche/api.js +381 -0
  8. package/dist/adapters/avalanche/api.js.map +1 -0
  9. package/dist/adapters/avalanche/builder.d.ts +13 -0
  10. package/dist/adapters/avalanche/builder.js +336 -0
  11. package/dist/adapters/avalanche/builder.js.map +1 -0
  12. package/dist/adapters/avalanche/cb58.d.ts +7 -0
  13. package/dist/adapters/avalanche/cb58.js +49 -0
  14. package/dist/adapters/avalanche/cb58.js.map +1 -0
  15. package/dist/adapters/avalanche/chains.d.ts +21 -0
  16. package/dist/adapters/avalanche/chains.js +79 -0
  17. package/dist/adapters/avalanche/chains.js.map +1 -0
  18. package/dist/adapters/avalanche/codec.d.ts +94 -0
  19. package/dist/adapters/avalanche/codec.js +371 -0
  20. package/dist/adapters/avalanche/codec.js.map +1 -0
  21. package/dist/adapters/avalanche/context.d.ts +59 -0
  22. package/dist/adapters/avalanche/context.js +114 -0
  23. package/dist/adapters/avalanche/context.js.map +1 -0
  24. package/dist/adapters/avalanche/decode.d.ts +16 -0
  25. package/dist/adapters/avalanche/decode.js +101 -0
  26. package/dist/adapters/avalanche/decode.js.map +1 -0
  27. package/dist/adapters/avalanche/driver.d.ts +22 -0
  28. package/dist/adapters/avalanche/driver.js +81 -0
  29. package/dist/adapters/avalanche/driver.js.map +1 -0
  30. package/dist/adapters/avalanche/errors.d.ts +18 -0
  31. package/dist/adapters/avalanche/errors.js +61 -0
  32. package/dist/adapters/avalanche/errors.js.map +1 -0
  33. package/dist/adapters/avalanche/fees.d.ts +23 -0
  34. package/dist/adapters/avalanche/fees.js +105 -0
  35. package/dist/adapters/avalanche/fees.js.map +1 -0
  36. package/dist/adapters/avalanche/index.d.ts +19 -0
  37. package/dist/adapters/avalanche/index.js +8 -0
  38. package/dist/adapters/avalanche/index.js.map +1 -0
  39. package/dist/adapters/avalanche/network.d.ts +37 -0
  40. package/dist/adapters/avalanche/network.js +135 -0
  41. package/dist/adapters/avalanche/network.js.map +1 -0
  42. package/dist/adapters/avalanche/plugin.d.ts +21 -0
  43. package/dist/adapters/avalanche/plugin.js +46 -0
  44. package/dist/adapters/avalanche/plugin.js.map +1 -0
  45. package/dist/adapters/avalanche/presets.d.ts +6 -0
  46. package/dist/adapters/avalanche/presets.js +86 -0
  47. package/dist/adapters/avalanche/presets.js.map +1 -0
  48. package/dist/adapters/avalanche/proofs.d.ts +41 -0
  49. package/dist/adapters/avalanche/proofs.js +270 -0
  50. package/dist/adapters/avalanche/proofs.js.map +1 -0
  51. package/dist/adapters/avalanche/reader.d.ts +40 -0
  52. package/dist/adapters/avalanche/reader.js +231 -0
  53. package/dist/adapters/avalanche/reader.js.map +1 -0
  54. package/dist/adapters/avalanche/sdk.d.ts +182 -0
  55. package/dist/adapters/avalanche/sdk.js +21 -0
  56. package/dist/adapters/avalanche/sdk.js.map +1 -0
  57. package/dist/adapters/avalanche/types.d.ts +86 -0
  58. package/dist/{type/common.js → adapters/avalanche/types.js} +1 -1
  59. package/dist/adapters/avalanche/types.js.map +1 -0
  60. package/dist/adapters/evm/builder.d.ts +11 -0
  61. package/dist/adapters/evm/builder.js +386 -0
  62. package/dist/adapters/evm/builder.js.map +1 -0
  63. package/dist/adapters/evm/chains.d.ts +6 -0
  64. package/dist/adapters/evm/chains.js +203 -0
  65. package/dist/adapters/evm/chains.js.map +1 -0
  66. package/dist/adapters/evm/client.d.ts +84 -0
  67. package/dist/adapters/evm/client.js +335 -0
  68. package/dist/adapters/evm/client.js.map +1 -0
  69. package/dist/adapters/evm/decode.d.ts +35 -0
  70. package/dist/adapters/evm/decode.js +175 -0
  71. package/dist/adapters/evm/decode.js.map +1 -0
  72. package/dist/adapters/evm/driver.d.ts +8 -0
  73. package/dist/adapters/evm/driver.js +61 -0
  74. package/dist/adapters/evm/driver.js.map +1 -0
  75. package/dist/adapters/evm/errors.d.ts +20 -0
  76. package/dist/adapters/evm/errors.js +110 -0
  77. package/dist/adapters/evm/errors.js.map +1 -0
  78. package/dist/adapters/evm/ethers-client.d.ts +43 -0
  79. package/dist/adapters/evm/ethers-client.js +139 -0
  80. package/dist/adapters/evm/ethers-client.js.map +1 -0
  81. package/dist/adapters/evm/fees.d.ts +103 -0
  82. package/dist/adapters/evm/fees.js +277 -0
  83. package/dist/adapters/evm/fees.js.map +1 -0
  84. package/dist/adapters/evm/index.d.ts +20 -0
  85. package/dist/adapters/evm/index.js +12 -0
  86. package/dist/adapters/evm/index.js.map +1 -0
  87. package/dist/adapters/evm/network.d.ts +65 -0
  88. package/dist/adapters/evm/network.js +150 -0
  89. package/dist/adapters/evm/network.js.map +1 -0
  90. package/dist/adapters/evm/plugin.d.ts +35 -0
  91. package/dist/adapters/evm/plugin.js +150 -0
  92. package/dist/adapters/evm/plugin.js.map +1 -0
  93. package/dist/adapters/evm/presets.d.ts +2 -0
  94. package/dist/adapters/evm/presets.js +105 -0
  95. package/dist/adapters/evm/presets.js.map +1 -0
  96. package/dist/adapters/evm/proofs.d.ts +19 -0
  97. package/dist/adapters/evm/proofs.js +370 -0
  98. package/dist/adapters/evm/proofs.js.map +1 -0
  99. package/dist/adapters/evm/rawtx.d.ts +25 -0
  100. package/dist/adapters/evm/rawtx.js +176 -0
  101. package/dist/adapters/evm/rawtx.js.map +1 -0
  102. package/dist/adapters/evm/reader.d.ts +83 -0
  103. package/dist/adapters/evm/reader.js +326 -0
  104. package/dist/adapters/evm/reader.js.map +1 -0
  105. package/dist/adapters/evm/rpc.d.ts +39 -0
  106. package/dist/adapters/evm/rpc.js +152 -0
  107. package/dist/adapters/evm/rpc.js.map +1 -0
  108. package/dist/adapters/evm/tokens.d.ts +10 -0
  109. package/dist/adapters/evm/tokens.js +23 -0
  110. package/dist/adapters/evm/tokens.js.map +1 -0
  111. package/dist/adapters/evm/types.d.ts +265 -0
  112. package/dist/{type/account.js → adapters/evm/types.js} +1 -1
  113. package/dist/adapters/evm/types.js.map +1 -0
  114. package/dist/adapters/evm/web3-client.d.ts +26 -0
  115. package/dist/adapters/evm/web3-client.js +176 -0
  116. package/dist/adapters/evm/web3-client.js.map +1 -0
  117. package/dist/adapters/solana/builder.d.ts +18 -0
  118. package/dist/adapters/solana/builder.js +556 -0
  119. package/dist/adapters/solana/builder.js.map +1 -0
  120. package/dist/adapters/solana/chains.d.ts +13 -0
  121. package/dist/adapters/solana/chains.js +37 -0
  122. package/dist/adapters/solana/chains.js.map +1 -0
  123. package/dist/adapters/solana/decode.d.ts +111 -0
  124. package/dist/adapters/solana/decode.js +595 -0
  125. package/dist/adapters/solana/decode.js.map +1 -0
  126. package/dist/adapters/solana/driver.d.ts +15 -0
  127. package/dist/adapters/solana/driver.js +72 -0
  128. package/dist/adapters/solana/driver.js.map +1 -0
  129. package/dist/adapters/solana/errors.d.ts +36 -0
  130. package/dist/adapters/solana/errors.js +154 -0
  131. package/dist/adapters/solana/errors.js.map +1 -0
  132. package/dist/adapters/solana/fees.d.ts +77 -0
  133. package/dist/adapters/solana/fees.js +214 -0
  134. package/dist/adapters/solana/fees.js.map +1 -0
  135. package/dist/adapters/solana/heights.d.ts +47 -0
  136. package/dist/adapters/solana/heights.js +185 -0
  137. package/dist/adapters/solana/heights.js.map +1 -0
  138. package/dist/adapters/solana/history.d.ts +10 -0
  139. package/dist/adapters/solana/history.js +71 -0
  140. package/dist/adapters/solana/history.js.map +1 -0
  141. package/dist/adapters/solana/index.d.ts +16 -0
  142. package/dist/adapters/solana/index.js +9 -0
  143. package/dist/adapters/solana/index.js.map +1 -0
  144. package/dist/adapters/solana/keys.d.ts +13 -0
  145. package/dist/adapters/solana/keys.js +69 -0
  146. package/dist/adapters/solana/keys.js.map +1 -0
  147. package/dist/adapters/solana/message.d.ts +15 -0
  148. package/dist/adapters/solana/message.js +120 -0
  149. package/dist/adapters/solana/message.js.map +1 -0
  150. package/dist/adapters/solana/network.d.ts +24 -0
  151. package/dist/adapters/solana/network.js +95 -0
  152. package/dist/adapters/solana/network.js.map +1 -0
  153. package/dist/adapters/solana/plugin.d.ts +18 -0
  154. package/dist/adapters/solana/plugin.js +44 -0
  155. package/dist/adapters/solana/plugin.js.map +1 -0
  156. package/dist/adapters/solana/presets.d.ts +2 -0
  157. package/dist/adapters/solana/presets.js +77 -0
  158. package/dist/adapters/solana/presets.js.map +1 -0
  159. package/dist/adapters/solana/programs.d.ts +44 -0
  160. package/dist/adapters/solana/programs.js +159 -0
  161. package/dist/adapters/solana/programs.js.map +1 -0
  162. package/dist/adapters/solana/proofs.d.ts +56 -0
  163. package/dist/adapters/solana/proofs.js +540 -0
  164. package/dist/adapters/solana/proofs.js.map +1 -0
  165. package/dist/adapters/solana/reader.d.ts +82 -0
  166. package/dist/adapters/solana/reader.js +326 -0
  167. package/dist/adapters/solana/reader.js.map +1 -0
  168. package/dist/adapters/solana/rpc.d.ts +102 -0
  169. package/dist/adapters/solana/rpc.js +301 -0
  170. package/dist/adapters/solana/rpc.js.map +1 -0
  171. package/dist/adapters/solana/tokens.d.ts +7 -0
  172. package/dist/adapters/solana/tokens.js +19 -0
  173. package/dist/adapters/solana/tokens.js.map +1 -0
  174. package/dist/adapters/solana/types.d.ts +124 -0
  175. package/dist/{type/contract.js → adapters/solana/types.js} +1 -1
  176. package/dist/adapters/solana/types.js.map +1 -0
  177. package/dist/adapters/solana/web3.d.ts +5 -0
  178. package/dist/adapters/solana/web3.js +61 -0
  179. package/dist/adapters/solana/web3.js.map +1 -0
  180. package/dist/adapters/solana/wire.d.ts +62 -0
  181. package/dist/adapters/solana/wire.js +168 -0
  182. package/dist/adapters/solana/wire.js.map +1 -0
  183. package/dist/adapters/ton/address.d.ts +43 -0
  184. package/dist/adapters/ton/address.js +168 -0
  185. package/dist/adapters/ton/address.js.map +1 -0
  186. package/dist/adapters/ton/api.d.ts +344 -0
  187. package/dist/adapters/ton/api.js +942 -0
  188. package/dist/adapters/ton/api.js.map +1 -0
  189. package/dist/adapters/ton/builder.d.ts +18 -0
  190. package/dist/adapters/ton/builder.js +701 -0
  191. package/dist/adapters/ton/builder.js.map +1 -0
  192. package/dist/adapters/ton/chains.d.ts +16 -0
  193. package/dist/adapters/ton/chains.js +39 -0
  194. package/dist/adapters/ton/chains.js.map +1 -0
  195. package/dist/adapters/ton/decode.d.ts +43 -0
  196. package/dist/adapters/ton/decode.js +219 -0
  197. package/dist/adapters/ton/decode.js.map +1 -0
  198. package/dist/adapters/ton/driver.d.ts +10 -0
  199. package/dist/adapters/ton/driver.js +117 -0
  200. package/dist/adapters/ton/driver.js.map +1 -0
  201. package/dist/adapters/ton/errors.d.ts +36 -0
  202. package/dist/adapters/ton/errors.js +89 -0
  203. package/dist/adapters/ton/errors.js.map +1 -0
  204. package/dist/adapters/ton/fees.d.ts +28 -0
  205. package/dist/adapters/ton/fees.js +121 -0
  206. package/dist/adapters/ton/fees.js.map +1 -0
  207. package/dist/adapters/ton/index.d.ts +16 -0
  208. package/dist/adapters/ton/index.js +9 -0
  209. package/dist/adapters/ton/index.js.map +1 -0
  210. package/dist/adapters/ton/messages.d.ts +157 -0
  211. package/dist/adapters/ton/messages.js +397 -0
  212. package/dist/adapters/ton/messages.js.map +1 -0
  213. package/dist/adapters/ton/native-client.d.ts +10 -0
  214. package/dist/adapters/ton/native-client.js +47 -0
  215. package/dist/adapters/ton/native-client.js.map +1 -0
  216. package/dist/adapters/ton/network.d.ts +58 -0
  217. package/dist/adapters/ton/network.js +207 -0
  218. package/dist/adapters/ton/network.js.map +1 -0
  219. package/dist/adapters/ton/plugin.d.ts +24 -0
  220. package/dist/adapters/ton/plugin.js +57 -0
  221. package/dist/adapters/ton/plugin.js.map +1 -0
  222. package/dist/adapters/ton/presets.d.ts +6 -0
  223. package/dist/adapters/ton/presets.js +94 -0
  224. package/dist/adapters/ton/presets.js.map +1 -0
  225. package/dist/adapters/ton/proofs.d.ts +66 -0
  226. package/dist/adapters/ton/proofs.js +755 -0
  227. package/dist/adapters/ton/proofs.js.map +1 -0
  228. package/dist/adapters/ton/reader.d.ts +235 -0
  229. package/dist/adapters/ton/reader.js +976 -0
  230. package/dist/adapters/ton/reader.js.map +1 -0
  231. package/dist/adapters/ton/tokens.d.ts +10 -0
  232. package/dist/adapters/ton/tokens.js +27 -0
  233. package/dist/adapters/ton/tokens.js.map +1 -0
  234. package/dist/adapters/ton/trace.d.ts +74 -0
  235. package/dist/adapters/ton/trace.js +303 -0
  236. package/dist/adapters/ton/trace.js.map +1 -0
  237. package/dist/adapters/ton/types.d.ts +105 -0
  238. package/dist/{type/transact.js → adapters/ton/types.js} +1 -1
  239. package/dist/adapters/ton/types.js.map +1 -0
  240. package/dist/adapters/ton/wallets.d.ts +86 -0
  241. package/dist/adapters/ton/wallets.js +373 -0
  242. package/dist/adapters/ton/wallets.js.map +1 -0
  243. package/dist/adapters/tron/abi.d.ts +41 -0
  244. package/dist/adapters/tron/abi.js +112 -0
  245. package/dist/adapters/tron/abi.js.map +1 -0
  246. package/dist/adapters/tron/address.d.ts +20 -0
  247. package/dist/adapters/tron/address.js +110 -0
  248. package/dist/adapters/tron/address.js.map +1 -0
  249. package/dist/adapters/tron/builder.d.ts +12 -0
  250. package/dist/adapters/tron/builder.js +569 -0
  251. package/dist/adapters/tron/builder.js.map +1 -0
  252. package/dist/adapters/tron/chains.d.ts +12 -0
  253. package/dist/adapters/tron/chains.js +35 -0
  254. package/dist/adapters/tron/chains.js.map +1 -0
  255. package/dist/adapters/tron/codec.d.ts +10 -0
  256. package/dist/adapters/tron/codec.js +322 -0
  257. package/dist/adapters/tron/codec.js.map +1 -0
  258. package/dist/adapters/tron/decode.d.ts +52 -0
  259. package/dist/adapters/tron/decode.js +280 -0
  260. package/dist/adapters/tron/decode.js.map +1 -0
  261. package/dist/adapters/tron/driver.d.ts +12 -0
  262. package/dist/adapters/tron/driver.js +106 -0
  263. package/dist/adapters/tron/driver.js.map +1 -0
  264. package/dist/adapters/tron/errors.d.ts +74 -0
  265. package/dist/adapters/tron/errors.js +261 -0
  266. package/dist/adapters/tron/errors.js.map +1 -0
  267. package/dist/adapters/tron/fees.d.ts +49 -0
  268. package/dist/adapters/tron/fees.js +166 -0
  269. package/dist/adapters/tron/fees.js.map +1 -0
  270. package/dist/adapters/tron/http.d.ts +173 -0
  271. package/dist/adapters/tron/http.js +729 -0
  272. package/dist/adapters/tron/http.js.map +1 -0
  273. package/dist/adapters/tron/index.d.ts +16 -0
  274. package/dist/adapters/tron/index.js +15 -0
  275. package/dist/adapters/tron/index.js.map +1 -0
  276. package/dist/adapters/tron/network.d.ts +44 -0
  277. package/dist/adapters/tron/network.js +163 -0
  278. package/dist/adapters/tron/network.js.map +1 -0
  279. package/dist/adapters/tron/plugin.d.ts +17 -0
  280. package/dist/adapters/tron/plugin.js +39 -0
  281. package/dist/adapters/tron/plugin.js.map +1 -0
  282. package/dist/adapters/tron/presets.d.ts +5 -0
  283. package/dist/adapters/tron/presets.js +68 -0
  284. package/dist/adapters/tron/presets.js.map +1 -0
  285. package/dist/adapters/tron/proofs.d.ts +80 -0
  286. package/dist/adapters/tron/proofs.js +371 -0
  287. package/dist/adapters/tron/proofs.js.map +1 -0
  288. package/dist/adapters/tron/protobuf.d.ts +36 -0
  289. package/dist/adapters/tron/protobuf.js +90 -0
  290. package/dist/adapters/tron/protobuf.js.map +1 -0
  291. package/dist/adapters/tron/reader.d.ts +57 -0
  292. package/dist/adapters/tron/reader.js +220 -0
  293. package/dist/adapters/tron/reader.js.map +1 -0
  294. package/dist/adapters/tron/tokens.d.ts +9 -0
  295. package/dist/adapters/tron/tokens.js +14 -0
  296. package/dist/adapters/tron/tokens.js.map +1 -0
  297. package/dist/adapters/tron/types.d.ts +166 -0
  298. package/dist/adapters/tron/types.js +3 -0
  299. package/dist/adapters/tron/types.js.map +1 -0
  300. package/dist/adapters/utxo/address.d.ts +51 -0
  301. package/dist/adapters/utxo/address.js +341 -0
  302. package/dist/adapters/utxo/address.js.map +1 -0
  303. package/dist/adapters/utxo/builder.d.ts +35 -0
  304. package/dist/adapters/utxo/builder.js +380 -0
  305. package/dist/adapters/utxo/builder.js.map +1 -0
  306. package/dist/adapters/utxo/chains.d.ts +17 -0
  307. package/dist/adapters/utxo/chains.js +100 -0
  308. package/dist/adapters/utxo/chains.js.map +1 -0
  309. package/dist/adapters/utxo/codec.d.ts +120 -0
  310. package/dist/adapters/utxo/codec.js +408 -0
  311. package/dist/adapters/utxo/codec.js.map +1 -0
  312. package/dist/adapters/utxo/coinselect.d.ts +48 -0
  313. package/dist/adapters/utxo/coinselect.js +131 -0
  314. package/dist/adapters/utxo/coinselect.js.map +1 -0
  315. package/dist/adapters/utxo/context.d.ts +63 -0
  316. package/dist/adapters/utxo/context.js +125 -0
  317. package/dist/adapters/utxo/context.js.map +1 -0
  318. package/dist/adapters/utxo/decode.d.ts +22 -0
  319. package/dist/adapters/utxo/decode.js +121 -0
  320. package/dist/adapters/utxo/decode.js.map +1 -0
  321. package/dist/adapters/utxo/driver.d.ts +16 -0
  322. package/dist/adapters/utxo/driver.js +79 -0
  323. package/dist/adapters/utxo/driver.js.map +1 -0
  324. package/dist/adapters/utxo/ecc.d.ts +9 -0
  325. package/dist/adapters/utxo/ecc.js +26 -0
  326. package/dist/adapters/utxo/ecc.js.map +1 -0
  327. package/dist/adapters/utxo/errors.d.ts +52 -0
  328. package/dist/adapters/utxo/errors.js +191 -0
  329. package/dist/adapters/utxo/errors.js.map +1 -0
  330. package/dist/adapters/utxo/esplora.d.ts +100 -0
  331. package/dist/adapters/utxo/esplora.js +498 -0
  332. package/dist/adapters/utxo/esplora.js.map +1 -0
  333. package/dist/adapters/utxo/fees.d.ts +41 -0
  334. package/dist/adapters/utxo/fees.js +125 -0
  335. package/dist/adapters/utxo/fees.js.map +1 -0
  336. package/dist/adapters/utxo/index.d.ts +17 -0
  337. package/dist/adapters/utxo/index.js +8 -0
  338. package/dist/adapters/utxo/index.js.map +1 -0
  339. package/dist/adapters/utxo/network.d.ts +50 -0
  340. package/dist/adapters/utxo/network.js +165 -0
  341. package/dist/adapters/utxo/network.js.map +1 -0
  342. package/dist/adapters/utxo/plugin.d.ts +17 -0
  343. package/dist/adapters/utxo/plugin.js +41 -0
  344. package/dist/adapters/utxo/plugin.js.map +1 -0
  345. package/dist/adapters/utxo/presets.d.ts +12 -0
  346. package/dist/adapters/utxo/presets.js +47 -0
  347. package/dist/adapters/utxo/presets.js.map +1 -0
  348. package/dist/adapters/utxo/preview.d.ts +3 -0
  349. package/dist/adapters/utxo/preview.js +65 -0
  350. package/dist/adapters/utxo/preview.js.map +1 -0
  351. package/dist/adapters/utxo/proofs.d.ts +66 -0
  352. package/dist/adapters/utxo/proofs.js +469 -0
  353. package/dist/adapters/utxo/proofs.js.map +1 -0
  354. package/dist/adapters/utxo/rawblock.d.ts +46 -0
  355. package/dist/adapters/utxo/rawblock.js +159 -0
  356. package/dist/adapters/utxo/rawblock.js.map +1 -0
  357. package/dist/adapters/utxo/rawtx.d.ts +73 -0
  358. package/dist/adapters/utxo/rawtx.js +264 -0
  359. package/dist/adapters/utxo/rawtx.js.map +1 -0
  360. package/dist/adapters/utxo/reader.d.ts +36 -0
  361. package/dist/adapters/utxo/reader.js +265 -0
  362. package/dist/adapters/utxo/reader.js.map +1 -0
  363. package/dist/adapters/utxo/sdk.d.ts +18 -0
  364. package/dist/adapters/utxo/sdk.js +17 -0
  365. package/dist/adapters/utxo/sdk.js.map +1 -0
  366. package/dist/adapters/utxo/signed-psbt.d.ts +36 -0
  367. package/dist/adapters/utxo/signed-psbt.js +428 -0
  368. package/dist/adapters/utxo/signed-psbt.js.map +1 -0
  369. package/dist/adapters/utxo/spend.d.ts +59 -0
  370. package/dist/adapters/utxo/spend.js +230 -0
  371. package/dist/adapters/utxo/spend.js.map +1 -0
  372. package/dist/adapters/utxo/types.d.ts +167 -0
  373. package/dist/adapters/utxo/types.js +3 -0
  374. package/dist/adapters/utxo/types.js.map +1 -0
  375. package/dist/core/assets/service.d.ts +18 -0
  376. package/dist/core/assets/service.js +69 -0
  377. package/dist/core/assets/service.js.map +1 -0
  378. package/dist/core/blockchain/default-ref.d.ts +4 -0
  379. package/dist/core/blockchain/default-ref.js +16 -0
  380. package/dist/core/blockchain/default-ref.js.map +1 -0
  381. package/dist/core/blockchain/handle.d.ts +179 -0
  382. package/dist/core/blockchain/handle.js +579 -0
  383. package/dist/core/blockchain/handle.js.map +1 -0
  384. package/dist/core/blockchain/internal.d.ts +19 -0
  385. package/dist/core/blockchain/internal.js +16 -0
  386. package/dist/core/blockchain/internal.js.map +1 -0
  387. package/dist/core/blockchain/mapping.d.ts +22 -0
  388. package/dist/core/blockchain/mapping.js +136 -0
  389. package/dist/core/blockchain/mapping.js.map +1 -0
  390. package/dist/core/config/env.d.ts +8 -0
  391. package/dist/core/config/env.js +60 -0
  392. package/dist/core/config/env.js.map +1 -0
  393. package/dist/core/config/merge.d.ts +26 -0
  394. package/dist/core/config/merge.js +144 -0
  395. package/dist/core/config/merge.js.map +1 -0
  396. package/dist/core/config/resolve.d.ts +12 -0
  397. package/dist/core/config/resolve.js +251 -0
  398. package/dist/core/config/resolve.js.map +1 -0
  399. package/dist/core/config/types.d.ts +180 -0
  400. package/dist/core/config/types.js +3 -0
  401. package/dist/core/config/types.js.map +1 -0
  402. package/dist/core/container/builtins.d.ts +4 -0
  403. package/dist/core/container/builtins.js +13 -0
  404. package/dist/core/container/builtins.js.map +1 -0
  405. package/dist/core/container/container.d.ts +62 -0
  406. package/dist/core/container/container.js +500 -0
  407. package/dist/core/container/container.js.map +1 -0
  408. package/dist/core/container/default.d.ts +15 -0
  409. package/dist/core/container/default.js +70 -0
  410. package/dist/core/container/default.js.map +1 -0
  411. package/dist/core/container/internals.d.ts +54 -0
  412. package/dist/core/container/internals.js +21 -0
  413. package/dist/core/container/internals.js.map +1 -0
  414. package/dist/core/container/pool.d.ts +27 -0
  415. package/dist/core/container/pool.js +77 -0
  416. package/dist/core/container/pool.js.map +1 -0
  417. package/dist/core/driver/types.d.ts +379 -0
  418. package/dist/core/driver/types.js +3 -0
  419. package/dist/core/driver/types.js.map +1 -0
  420. package/dist/core/errors/codes.d.ts +163 -0
  421. package/dist/core/errors/codes.js +53 -0
  422. package/dist/core/errors/codes.js.map +1 -0
  423. package/dist/core/errors/error.d.ts +66 -0
  424. package/dist/core/errors/error.js +129 -0
  425. package/dist/core/errors/error.js.map +1 -0
  426. package/dist/core/events/bus.d.ts +12 -0
  427. package/dist/core/events/bus.js +46 -0
  428. package/dist/core/events/bus.js.map +1 -0
  429. package/dist/core/events/logger.d.ts +13 -0
  430. package/dist/core/events/logger.js +42 -0
  431. package/dist/core/events/logger.js.map +1 -0
  432. package/dist/core/events/types.d.ts +131 -0
  433. package/dist/core/events/types.js +3 -0
  434. package/dist/core/events/types.js.map +1 -0
  435. package/dist/core/lifecycle/engine-rules.d.ts +106 -0
  436. package/dist/core/lifecycle/engine-rules.js +267 -0
  437. package/dist/core/lifecycle/engine-rules.js.map +1 -0
  438. package/dist/core/lifecycle/engine.d.ts +502 -0
  439. package/dist/core/lifecycle/engine.js +1750 -0
  440. package/dist/core/lifecycle/engine.js.map +1 -0
  441. package/dist/core/lifecycle/evaluate.d.ts +19 -0
  442. package/dist/core/lifecycle/evaluate.js +77 -0
  443. package/dist/core/lifecycle/evaluate.js.map +1 -0
  444. package/dist/core/lifecycle/intent.d.ts +11 -0
  445. package/dist/core/lifecycle/intent.js +88 -0
  446. package/dist/core/lifecycle/intent.js.map +1 -0
  447. package/dist/core/lifecycle/monitor.d.ts +138 -0
  448. package/dist/core/lifecycle/monitor.js +616 -0
  449. package/dist/core/lifecycle/monitor.js.map +1 -0
  450. package/dist/core/lifecycle/observations.d.ts +17 -0
  451. package/dist/core/lifecycle/observations.js +59 -0
  452. package/dist/core/lifecycle/observations.js.map +1 -0
  453. package/dist/core/lifecycle/reconcile.d.ts +58 -0
  454. package/dist/core/lifecycle/reconcile.js +112 -0
  455. package/dist/core/lifecycle/reconcile.js.map +1 -0
  456. package/dist/core/lifecycle/views.d.ts +49 -0
  457. package/dist/core/lifecycle/views.js +57 -0
  458. package/dist/core/lifecycle/views.js.map +1 -0
  459. package/dist/core/lifecycle/workers.d.ts +88 -0
  460. package/dist/core/lifecycle/workers.js +347 -0
  461. package/dist/core/lifecycle/workers.js.map +1 -0
  462. package/dist/core/model/address.d.ts +32 -0
  463. package/dist/core/model/address.js +43 -0
  464. package/dist/core/model/address.js.map +1 -0
  465. package/dist/core/model/amount.d.ts +25 -0
  466. package/dist/core/model/amount.js +102 -0
  467. package/dist/core/model/amount.js.map +1 -0
  468. package/dist/core/model/asset.d.ts +28 -0
  469. package/dist/core/model/asset.js +47 -0
  470. package/dist/core/model/asset.js.map +1 -0
  471. package/dist/core/model/capability.d.ts +3 -0
  472. package/dist/core/model/capability.js +18 -0
  473. package/dist/core/model/capability.js.map +1 -0
  474. package/dist/core/model/chain.d.ts +63 -0
  475. package/dist/core/model/chain.js +8 -0
  476. package/dist/core/model/chain.js.map +1 -0
  477. package/dist/core/model/fee.d.ts +36 -0
  478. package/dist/core/model/fee.js +17 -0
  479. package/dist/core/model/fee.js.map +1 -0
  480. package/dist/core/model/ids.d.ts +38 -0
  481. package/dist/core/model/ids.js +14 -0
  482. package/dist/core/model/ids.js.map +1 -0
  483. package/dist/core/model/intent.d.ts +63 -0
  484. package/dist/core/model/intent.js +81 -0
  485. package/dist/core/model/intent.js.map +1 -0
  486. package/dist/core/model/ordering.d.ts +28 -0
  487. package/dist/core/model/ordering.js +29 -0
  488. package/dist/core/model/ordering.js.map +1 -0
  489. package/dist/core/model/transaction.d.ts +123 -0
  490. package/dist/{type/lib-types.js → core/model/transaction.js} +1 -1
  491. package/dist/core/model/transaction.js.map +1 -0
  492. package/dist/core/observe/scanner.d.ts +135 -0
  493. package/dist/core/observe/scanner.js +358 -0
  494. package/dist/core/observe/scanner.js.map +1 -0
  495. package/dist/core/ordering/reservations.d.ts +16 -0
  496. package/dist/core/ordering/reservations.js +53 -0
  497. package/dist/core/ordering/reservations.js.map +1 -0
  498. package/dist/core/ordering/sequence.d.ts +61 -0
  499. package/dist/core/ordering/sequence.js +155 -0
  500. package/dist/core/ordering/sequence.js.map +1 -0
  501. package/dist/core/registry/adapters.d.ts +10 -0
  502. package/dist/core/registry/adapters.js +56 -0
  503. package/dist/core/registry/adapters.js.map +1 -0
  504. package/dist/core/registry/assets.d.ts +18 -0
  505. package/dist/core/registry/assets.js +90 -0
  506. package/dist/core/registry/assets.js.map +1 -0
  507. package/dist/core/registry/chains.d.ts +10 -0
  508. package/dist/core/registry/chains.js +80 -0
  509. package/dist/core/registry/chains.js.map +1 -0
  510. package/dist/core/registry/plugin.d.ts +41 -0
  511. package/dist/core/registry/plugin.js +109 -0
  512. package/dist/core/registry/plugin.js.map +1 -0
  513. package/dist/core/registry/providers.d.ts +31 -0
  514. package/dist/core/registry/providers.js +43 -0
  515. package/dist/core/registry/providers.js.map +1 -0
  516. package/dist/core/registry/schemes.d.ts +30 -0
  517. package/dist/core/registry/schemes.js +84 -0
  518. package/dist/core/registry/schemes.js.map +1 -0
  519. package/dist/core/secret/fragments.d.ts +33 -0
  520. package/dist/core/secret/fragments.js +110 -0
  521. package/dist/core/secret/fragments.js.map +1 -0
  522. package/dist/core/secret/redact.d.ts +10 -0
  523. package/dist/core/secret/redact.js +110 -0
  524. package/dist/core/secret/redact.js.map +1 -0
  525. package/dist/core/secret/secret.d.ts +14 -0
  526. package/dist/core/secret/secret.js +42 -0
  527. package/dist/core/secret/secret.js.map +1 -0
  528. package/dist/core/signing/callback.d.ts +10 -0
  529. package/dist/core/signing/callback.js +22 -0
  530. package/dist/core/signing/callback.js.map +1 -0
  531. package/dist/core/signing/guard.d.ts +18 -0
  532. package/dist/core/signing/guard.js +72 -0
  533. package/dist/core/signing/guard.js.map +1 -0
  534. package/dist/core/signing/hd.d.ts +36 -0
  535. package/dist/core/signing/hd.js +167 -0
  536. package/dist/core/signing/hd.js.map +1 -0
  537. package/dist/core/signing/local.d.ts +48 -0
  538. package/dist/core/signing/local.js +190 -0
  539. package/dist/core/signing/local.js.map +1 -0
  540. package/dist/core/signing/orchestrator.d.ts +40 -0
  541. package/dist/core/signing/orchestrator.js +300 -0
  542. package/dist/core/signing/orchestrator.js.map +1 -0
  543. package/dist/core/signing/types.d.ts +64 -0
  544. package/dist/core/signing/types.js +3 -0
  545. package/dist/core/signing/types.js.map +1 -0
  546. package/dist/core/signing/wallet.d.ts +48 -0
  547. package/dist/core/signing/wallet.js +161 -0
  548. package/dist/core/signing/wallet.js.map +1 -0
  549. package/dist/core/store/clone.d.ts +25 -0
  550. package/dist/core/store/clone.js +71 -0
  551. package/dist/core/store/clone.js.map +1 -0
  552. package/dist/core/store/format.d.ts +20 -0
  553. package/dist/core/store/format.js +86 -0
  554. package/dist/core/store/format.js.map +1 -0
  555. package/dist/core/store/memory.d.ts +38 -0
  556. package/dist/core/store/memory.js +325 -0
  557. package/dist/core/store/memory.js.map +1 -0
  558. package/dist/core/store/types.d.ts +258 -0
  559. package/dist/core/store/types.js +119 -0
  560. package/dist/core/store/types.js.map +1 -0
  561. package/dist/core/transport/backoff.d.ts +8 -0
  562. package/dist/core/transport/backoff.js +27 -0
  563. package/dist/core/transport/backoff.js.map +1 -0
  564. package/dist/core/transport/circuit.d.ts +25 -0
  565. package/dist/core/transport/circuit.js +61 -0
  566. package/dist/core/transport/circuit.js.map +1 -0
  567. package/dist/core/transport/http-transport.d.ts +30 -0
  568. package/dist/core/transport/http-transport.js +1703 -0
  569. package/dist/core/transport/http-transport.js.map +1 -0
  570. package/dist/core/transport/rate-limit.d.ts +27 -0
  571. package/dist/core/transport/rate-limit.js +78 -0
  572. package/dist/core/transport/rate-limit.js.map +1 -0
  573. package/dist/core/transport/stale-view.d.ts +11 -0
  574. package/dist/core/transport/stale-view.js +17 -0
  575. package/dist/core/transport/stale-view.js.map +1 -0
  576. package/dist/core/transport/types.d.ts +159 -0
  577. package/dist/core/transport/types.js +6 -0
  578. package/dist/core/transport/types.js.map +1 -0
  579. package/dist/core/util/bytes.d.ts +9 -0
  580. package/dist/core/util/bytes.js +40 -0
  581. package/dist/core/util/bytes.js.map +1 -0
  582. package/dist/core/util/clock.d.ts +6 -0
  583. package/dist/core/util/clock.js +26 -0
  584. package/dist/core/util/clock.js.map +1 -0
  585. package/dist/core/util/freeze.d.ts +8 -0
  586. package/dist/core/util/freeze.js +31 -0
  587. package/dist/core/util/freeze.js.map +1 -0
  588. package/dist/core/util/json.d.ts +35 -0
  589. package/dist/core/util/json.js +174 -0
  590. package/dist/core/util/json.js.map +1 -0
  591. package/dist/core/util/names.d.ts +27 -0
  592. package/dist/core/util/names.js +56 -0
  593. package/dist/core/util/names.js.map +1 -0
  594. package/dist/index.d.ts +65 -14
  595. package/dist/index.js +107 -49
  596. package/dist/index.js.map +1 -1
  597. package/dist/native.d.ts +21 -0
  598. package/dist/native.js +44 -0
  599. package/dist/native.js.map +1 -0
  600. package/dist/testing/contracts/api.d.ts +12 -0
  601. package/dist/testing/contracts/api.js +58 -0
  602. package/dist/testing/contracts/api.js.map +1 -0
  603. package/dist/testing/contracts/cursors.d.ts +6 -0
  604. package/dist/testing/contracts/cursors.js +43 -0
  605. package/dist/testing/contracts/cursors.js.map +1 -0
  606. package/dist/testing/contracts/locks.d.ts +10 -0
  607. package/dist/testing/contracts/locks.js +63 -0
  608. package/dist/testing/contracts/locks.js.map +1 -0
  609. package/dist/testing/contracts/operations.d.ts +21 -0
  610. package/dist/testing/contracts/operations.js +737 -0
  611. package/dist/testing/contracts/operations.js.map +1 -0
  612. package/dist/testing/contracts/sequences.d.ts +6 -0
  613. package/dist/testing/contracts/sequences.js +68 -0
  614. package/dist/testing/contracts/sequences.js.map +1 -0
  615. package/dist/testing/env.d.ts +68 -0
  616. package/dist/testing/env.js +105 -0
  617. package/dist/testing/env.js.map +1 -0
  618. package/dist/testing/fake-chain.d.ts +118 -0
  619. package/dist/testing/fake-chain.js +536 -0
  620. package/dist/testing/fake-chain.js.map +1 -0
  621. package/dist/testing/fake-clock.d.ts +15 -0
  622. package/dist/testing/fake-clock.js +86 -0
  623. package/dist/testing/fake-clock.js.map +1 -0
  624. package/dist/testing/fake-driver.d.ts +15 -0
  625. package/dist/testing/fake-driver.js +458 -0
  626. package/dist/testing/fake-driver.js.map +1 -0
  627. package/dist/testing/fake-fetch.d.ts +32 -0
  628. package/dist/testing/fake-fetch.js +81 -0
  629. package/dist/testing/fake-fetch.js.map +1 -0
  630. package/dist/testing/fake-plugin.d.ts +30 -0
  631. package/dist/testing/fake-plugin.js +66 -0
  632. package/dist/testing/fake-plugin.js.map +1 -0
  633. package/dist/testing/faulty-store.d.ts +38 -0
  634. package/dist/testing/faulty-store.js +71 -0
  635. package/dist/testing/faulty-store.js.map +1 -0
  636. package/dist/testing/generation.d.ts +60 -0
  637. package/dist/testing/generation.js +252 -0
  638. package/dist/testing/generation.js.map +1 -0
  639. package/dist/testing/index.d.ts +28 -0
  640. package/dist/testing/index.js +51 -0
  641. package/dist/testing/index.js.map +1 -0
  642. package/package.json +198 -45
  643. package/dist/libs/eth/account.d.ts +0 -9
  644. package/dist/libs/eth/account.js +0 -58
  645. package/dist/libs/eth/account.js.map +0 -1
  646. package/dist/libs/eth/contract.d.ts +0 -7
  647. package/dist/libs/eth/contract.js +0 -42
  648. package/dist/libs/eth/contract.js.map +0 -1
  649. package/dist/libs/eth/index.d.ts +0 -24
  650. package/dist/libs/eth/index.js +0 -72
  651. package/dist/libs/eth/index.js.map +0 -1
  652. package/dist/libs/eth/transact.d.ts +0 -7
  653. package/dist/libs/eth/transact.js +0 -26
  654. package/dist/libs/eth/transact.js.map +0 -1
  655. package/dist/libs/index.d.ts +0 -2
  656. package/dist/libs/index.js +0 -19
  657. package/dist/libs/index.js.map +0 -1
  658. package/dist/libs/trx/account.d.ts +0 -9
  659. package/dist/libs/trx/account.js +0 -55
  660. package/dist/libs/trx/account.js.map +0 -1
  661. package/dist/libs/trx/contract.d.ts +0 -7
  662. package/dist/libs/trx/contract.js +0 -27
  663. package/dist/libs/trx/contract.js.map +0 -1
  664. package/dist/libs/trx/index.d.ts +0 -22
  665. package/dist/libs/trx/index.js +0 -64
  666. package/dist/libs/trx/index.js.map +0 -1
  667. package/dist/libs/trx/transact.d.ts +0 -7
  668. package/dist/libs/trx/transact.js +0 -26
  669. package/dist/libs/trx/transact.js.map +0 -1
  670. package/dist/tool/common.d.ts +0 -28
  671. package/dist/tool/common.js +0 -33
  672. package/dist/tool/common.js.map +0 -1
  673. package/dist/tool/eth-tools.d.ts +0 -3
  674. package/dist/tool/eth-tools.js +0 -33
  675. package/dist/tool/eth-tools.js.map +0 -1
  676. package/dist/tool/index.d.ts +0 -5
  677. package/dist/tool/index.js +0 -22
  678. package/dist/tool/index.js.map +0 -1
  679. package/dist/tool/logging.d.ts +0 -3
  680. package/dist/tool/logging.js +0 -11
  681. package/dist/tool/logging.js.map +0 -1
  682. package/dist/tool/options.d.ts +0 -6
  683. package/dist/tool/options.js +0 -41
  684. package/dist/tool/options.js.map +0 -1
  685. package/dist/tool/trx-tools.d.ts +0 -3
  686. package/dist/tool/trx-tools.js +0 -20
  687. package/dist/tool/trx-tools.js.map +0 -1
  688. package/dist/type/account.d.ts +0 -9
  689. package/dist/type/account.js.map +0 -1
  690. package/dist/type/common.d.ts +0 -18
  691. package/dist/type/common.js.map +0 -1
  692. package/dist/type/contract.d.ts +0 -10
  693. package/dist/type/contract.js.map +0 -1
  694. package/dist/type/index.d.ts +0 -5
  695. package/dist/type/index.js +0 -22
  696. package/dist/type/index.js.map +0 -1
  697. package/dist/type/lib-types.d.ts +0 -9
  698. package/dist/type/lib-types.js.map +0 -1
  699. package/dist/type/transact.d.ts +0 -7
  700. package/dist/type/transact.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/adapters/evm/client.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The SDK-free half of every `EvmClient`: the JSON-RPC methods the driver calls and the\n * normalization of their answers into plain data. A subclass supplies the SDK half: the\n * `send` bridge (the SDK's own JSON-RPC primitive, wired to the transport) and the codec.\n *\n * I/O never uses an SDK's high-level helpers: those\n * issue extra calls under the wrong tags (ethers `broadcastTransaction` also reads the block\n * number; `getTransactionReceipt` may fetch the transaction), throw on not-found (web3\n * `TransactionNotFound`) or drop chain fields the fees need (OP `l1Fee`, Arbitrum\n * `gasUsedForL1`). So one driver call is exactly one tagged JSON-RPC request.\n */\nimport { secp256k1 } from '@noble/curves/secp256k1';\nimport type { DisposableNativeClient } from '../../core/driver/types';\nimport { ProviderError, ValidationError } from '../../core/errors/error';\nimport type {\n EvmAbi,\n EvmBlock,\n EvmBlockTag,\n EvmCallRequest,\n EvmCallTags,\n EvmClient,\n EvmFeeHistory,\n EvmFullBlock,\n EvmLog,\n EvmReceipt,\n EvmSignature,\n EvmTx,\n EvmTxFields,\n} from './types';\n\n/** `0x` and 40 hex digits; the checksum is the SDK's to check. */\nexport const ADDRESS = /^0x[0-9a-fA-F]{40}$/;\n\n/**\n * The 65-byte uncompressed form of a secp256k1 public key, accepted only as a 33-byte\n * compressed key (`0x02`/`0x03`) or a 65-byte `0x04` key that decodes to a point on the\n * curve. Both clients derive addresses from its result, never from the caller's bytes: an\n * SDK may read 32 bytes as a *private* key or 64 bytes as an unprefixed public key, and\n * either would yield an address nobody holds the key to. The error never echoes the input.\n */\nexport function uncompressedPublicKey(publicKey: Uint8Array): Uint8Array {\n const prefix = publicKey instanceof Uint8Array ? publicKey[0] : undefined;\n const shaped =\n ((prefix === 0x02 || prefix === 0x03) && publicKey.length === 33) ||\n (prefix === 0x04 && publicKey.length === 65);\n try {\n if (shaped) return secp256k1.ProjectivePoint.fromHex(publicKey).toRawBytes(false);\n } catch {\n // Not a point on the curve.\n }\n throw new ValidationError(\n 'INVALID_ADDRESS',\n 'public key must be a 33- or 65-byte secp256k1 point',\n );\n}\nconst HASH = /^0x[0-9a-fA-F]{64}$/;\nconst QUANTITY = /^0x[0-9a-fA-F]+$/;\nconst DATA = /^0x(?:[0-9a-fA-F]{2})*$/;\nconst BLOOM = /^0x[0-9a-fA-F]{512}$/;\n\ntype Json = Record<string, unknown>;\n\nfunction malformed(field: string): ProviderError {\n return new ProviderError(\n 'PROVIDER_UNAVAILABLE',\n `malformed ${field} in a JSON-RPC answer`,\n );\n}\n\n/**\n * A JSON-RPC quantity (`0x` and hex digits) as a bigint. Anything else throws a retryable\n * `PROVIDER_UNAVAILABLE` naming `field`: the one check of every hex quantity the driver\n * reads, quorum keys and health probes included (a key that throws is a disagreement).\n */\nexport function quantity(value: unknown, field: string): bigint {\n if (typeof value !== 'string' || !QUANTITY.test(value)) throw malformed(field);\n return BigInt(value);\n}\n\nfunction optionalQuantity(value: unknown, field: string): bigint | undefined {\n return value === undefined || value === null ? undefined : quantity(value, field);\n}\n\nfunction hash(value: unknown, field: string): string {\n if (typeof value !== 'string' || !HASH.test(value)) throw malformed(field);\n return value.toLowerCase();\n}\n\nfunction data(value: unknown, field: string): string {\n if (typeof value !== 'string' || !DATA.test(value)) throw malformed(field);\n return value.toLowerCase();\n}\n\nfunction object(value: unknown, field: string): Json {\n if (value === null || typeof value !== 'object' || Array.isArray(value))\n throw malformed(field);\n return value as Json;\n}\n\n/** One ABI word: 32 bytes. */\nexport const ABI_WORD = /^0x[0-9a-fA-F]{64}$/;\n/** An ABI-encoded address: 12 zero bytes, then 20 address bytes. */\nexport const ADDRESS_WORD = /^0x0{24}[0-9a-fA-F]{40}$/;\n\n/**\n * The three ABI words of an ERC-20 `Transfer` log (`from`, `to`, amount), or `null`. Anyone\n * can emit a look-alike event: anything but the topic and three well-formed words is not a\n * transfer, and never an error that would fail a whole block scan.\n */\nexport function transferLogWords(\n log: { readonly topics: readonly string[]; readonly data: string },\n topic: string,\n): { readonly from: string; readonly to: string; readonly data: string } | null {\n const [first, from, to] = log.topics;\n if (\n log.topics.length !== 3 ||\n first !== topic ||\n !ADDRESS_WORD.test(from as string) ||\n !ADDRESS_WORD.test(to as string) ||\n !ABI_WORD.test(log.data)\n ) {\n return null;\n }\n return { from: from as string, to: to as string, data: log.data };\n}\n\nexport function blockParam(block: EvmBlockTag): string {\n return typeof block === 'bigint' ? `0x${block.toString(16)}` : block;\n}\n\nconst hexOf = (value: bigint): string => `0x${value.toString(16)}`;\n\nexport abstract class EvmClientBase implements EvmClient {\n abstract readonly library: string;\n abstract readonly abi: EvmAbi;\n /** The chain id of the network this client serves. */\n protected readonly chainId: bigint;\n\n constructor(chainId: bigint) {\n this.chainId = chainId;\n }\n\n /** One JSON-RPC request through the SDK's bridge, under `tags`; resolves with `result`. */\n protected abstract send(\n method: string,\n params: readonly unknown[],\n tags: EvmCallTags,\n ): Promise<unknown>;\n\n abstract isAddress(value: string): boolean;\n abstract checksum(address: string): string;\n abstract addressFromPublicKey(publicKey: Uint8Array): string;\n abstract createNative(): DisposableNativeClient;\n\n /** The SDK codec, reached only through the chain-id guard below. */\n protected abstract encodeUnsigned(tx: EvmTxFields): string;\n protected abstract hashUnsigned(tx: EvmTxFields): string;\n protected abstract encodeSigned(\n tx: EvmTxFields,\n signature: EvmSignature,\n ): { readonly raw: string; readonly hash: string };\n\n serializeUnsigned(tx: EvmTxFields): string {\n return this.encodeUnsigned(this.#onNetwork(tx));\n }\n\n unsignedHash(tx: EvmTxFields): string {\n return this.hashUnsigned(this.#onNetwork(tx));\n }\n\n serializeSigned(\n tx: EvmTxFields,\n signature: EvmSignature,\n ): { readonly raw: string; readonly hash: string } {\n return this.encodeSigned(this.#onNetwork(tx), signature);\n }\n\n /**\n * A transaction for another chain is refused before any codec work. The SDKs\n * disagree about it: ethers commits to `tx.chainId`, web3 to the client's chain id (and\n * throws a plain `Error` for a type-2 mismatch), so without this guard the two clients\n * would produce different signing bytes for the same fields.\n */\n #onNetwork(tx: EvmTxFields): EvmTxFields {\n if (tx.chainId !== this.chainId) {\n throw new ValidationError(\n 'INVALID_INTENT',\n 'transaction chain id does not match the network',\n );\n }\n return tx;\n }\n\n /** Runs the SDK's checksum; `INVALID_ADDRESS` for anything but a valid hex address. */\n protected checked(address: string, checksum: (value: string) => string): string {\n try {\n if (ADDRESS.test(address)) return checksum(address);\n } catch {\n // A mixed-case address with a wrong checksum.\n }\n throw new ValidationError('INVALID_ADDRESS', 'not an EVM address');\n }\n\n async blockNumber(tags: EvmCallTags): Promise<bigint> {\n return quantity(await this.send('eth_blockNumber', [], tags), 'block number');\n }\n\n async getBalance(\n address: string,\n block: EvmBlockTag,\n tags: EvmCallTags,\n ): Promise<bigint> {\n const result = await this.send('eth_getBalance', [address, blockParam(block)], tags);\n return quantity(result, 'balance');\n }\n\n async getTransactionCount(\n address: string,\n block: EvmBlockTag,\n tags: EvmCallTags,\n ): Promise<bigint> {\n const params = [address, blockParam(block)];\n return quantity(await this.send('eth_getTransactionCount', params, tags), 'nonce');\n }\n\n async call(\n request: EvmCallRequest,\n block: EvmBlockTag,\n tags: EvmCallTags,\n ): Promise<string> {\n const result = await this.send(\n 'eth_call',\n [this.#request(request), blockParam(block)],\n tags,\n );\n return data(result, 'call result');\n }\n\n async estimateGas(request: EvmCallRequest, tags: EvmCallTags): Promise<bigint> {\n return quantity(\n await this.send('eth_estimateGas', [this.#request(request)], tags),\n 'gas',\n );\n }\n\n async gasPrice(tags: EvmCallTags): Promise<bigint> {\n return quantity(await this.send('eth_gasPrice', [], tags), 'gas price');\n }\n\n async feeHistory(\n blockCount: number,\n newest: EvmBlockTag,\n percentiles: readonly number[],\n tags: EvmCallTags,\n ): Promise<EvmFeeHistory> {\n const params = [hexOf(BigInt(blockCount)), blockParam(newest), [...percentiles]];\n const json = object(await this.send('eth_feeHistory', params, tags), 'fee history');\n const list = (value: unknown, field: string): unknown[] => {\n if (!Array.isArray(value)) throw malformed(field);\n return value;\n };\n return {\n oldestBlock: quantity(json.oldestBlock, 'oldest block'),\n baseFeePerGas: list(json.baseFeePerGas, 'base fees').map((v) =>\n quantity(v, 'base fee'),\n ),\n reward: list(json.reward ?? [], 'rewards').map((row) =>\n list(row, 'rewards').map((v) => quantity(v, 'reward')),\n ),\n gasUsedRatio: list(json.gasUsedRatio ?? [], 'gas used ratios').map((v) => {\n if (typeof v !== 'number') throw malformed('gas used ratio');\n return v;\n }),\n };\n }\n\n async getBlock(\n block: EvmBlockTag | string,\n tags: EvmCallTags,\n ): Promise<EvmBlock | null> {\n const byHash = typeof block === 'string' && HASH.test(block);\n const result = byHash\n ? await this.send('eth_getBlockByHash', [block, false], tags)\n : await this.send(\n 'eth_getBlockByNumber',\n [blockParam(block as EvmBlockTag), false],\n tags,\n );\n if (result === null) return null;\n const json = object(result, 'block');\n return {\n ...this.#header(json),\n transactions: this.#list(json.transactions, 'block transactions').map((t) =>\n hash(typeof t === 'string' ? t : (t as Json | null)?.hash, 'transaction hash'),\n ),\n };\n }\n\n async getBlockWithTransactions(\n block: bigint,\n tags: EvmCallTags,\n ): Promise<EvmFullBlock | null> {\n const result = await this.send(\n 'eth_getBlockByNumber',\n [blockParam(block), true],\n tags,\n );\n if (result === null) return null;\n const json = object(result, 'block');\n const { logsBloom } = json;\n return {\n ...this.#header(json),\n transactions: this.#list(json.transactions, 'block transactions').map((t) =>\n this.#tx(object(t, 'transaction')),\n ),\n // Only a hint for scans: a missing or malformed bloom may hold anything.\n ...(typeof logsBloom === 'string' && BLOOM.test(logsBloom)\n ? { logsBloom: logsBloom.toLowerCase() }\n : {}),\n };\n }\n\n /** An answer about another transaction is malformed, never another's facts. */\n async getTransaction(txHash: string, tags: EvmCallTags): Promise<EvmTx | null> {\n const result = await this.send('eth_getTransactionByHash', [txHash], tags);\n if (result === null) return null;\n const tx = this.#tx(object(result, 'transaction'));\n if (tx.hash !== txHash.toLowerCase()) throw malformed('transaction hash');\n return tx;\n }\n\n /** An answer about another transaction is malformed, never another's receipt. */\n async getReceipt(txHash: string, tags: EvmCallTags): Promise<EvmReceipt | null> {\n const result = await this.send('eth_getTransactionReceipt', [txHash], tags);\n if (result === null) return null;\n const receipt = this.#receipt(object(result, 'receipt'));\n if (receipt.transactionHash !== txHash.toLowerCase()) {\n throw malformed('transaction hash');\n }\n return receipt;\n }\n\n async getBlockReceipts(\n blockHash: string,\n tags: EvmCallTags,\n ): Promise<readonly EvmReceipt[] | null> {\n const result = await this.send('eth_getBlockReceipts', [blockHash], tags);\n if (result === null) return null;\n return this.#list(result, 'block receipts').map((receipt) =>\n this.#receipt(object(receipt, 'receipt')),\n );\n }\n\n #receipt(json: Json): EvmReceipt {\n const status = quantity(json.status, 'receipt status');\n if (status !== 0n && status !== 1n) throw malformed('receipt status');\n const l1Fee = optionalQuantity(json.l1Fee, 'L1 fee');\n const gasUsedForL1 = optionalQuantity(json.gasUsedForL1, 'L1 gas');\n return {\n transactionHash: hash(json.transactionHash, 'transaction hash'),\n blockHash: hash(json.blockHash, 'block hash'),\n blockNumber: quantity(json.blockNumber, 'block number'),\n status: status === 1n ? 1 : 0,\n from: this.#address(json.from, 'sender'),\n to:\n json.to === null || json.to === undefined\n ? null\n : this.#address(json.to, 'recipient'),\n contractAddress:\n json.contractAddress === null || json.contractAddress === undefined\n ? null\n : this.#address(json.contractAddress, 'contract address'),\n gasUsed: quantity(json.gasUsed, 'gas used'),\n effectiveGasPrice: quantity(json.effectiveGasPrice, 'effective gas price'),\n ...(l1Fee !== undefined ? { l1Fee } : {}),\n ...(gasUsedForL1 !== undefined ? { gasUsedForL1 } : {}),\n logs: this.#list(json.logs, 'receipt logs').map((log) =>\n this.#log(object(log, 'log')),\n ),\n };\n }\n\n async getLogs(\n filter: { readonly blockHash: string; readonly topics: readonly (string | null)[] },\n tags: EvmCallTags,\n ): Promise<readonly EvmLog[]> {\n const params = [{ blockHash: filter.blockHash, topics: [...filter.topics] }];\n const result = await this.send('eth_getLogs', params, tags);\n return this.#list(result, 'logs').map((log) => this.#log(object(log, 'log')));\n }\n\n async sendRawTransaction(raw: string, tags: EvmCallTags): Promise<string> {\n return hash(\n await this.send('eth_sendRawTransaction', [raw], tags),\n 'transaction hash',\n );\n }\n\n #request(request: EvmCallRequest): Json {\n return {\n ...(request.from !== undefined ? { from: request.from } : {}),\n to: request.to,\n ...(request.value !== undefined ? { value: hexOf(request.value) } : {}),\n ...(request.data !== undefined ? { data: request.data } : {}),\n };\n }\n\n #list(value: unknown, field: string): unknown[] {\n if (!Array.isArray(value)) throw malformed(field);\n return value;\n }\n\n #address(value: unknown, field: string): string {\n if (typeof value !== 'string' || !ADDRESS.test(value)) throw malformed(field);\n return this.checksum(value.toLowerCase());\n }\n\n #header(json: Json): Omit<EvmBlock, 'transactions'> {\n const baseFeePerGas = optionalQuantity(json.baseFeePerGas, 'base fee');\n return {\n number: quantity(json.number, 'block number'),\n hash: hash(json.hash, 'block hash'),\n parentHash: hash(json.parentHash, 'parent hash'),\n timestamp: Number(quantity(json.timestamp, 'timestamp')),\n ...(baseFeePerGas !== undefined ? { baseFeePerGas } : {}),\n };\n }\n\n #tx(json: Json): EvmTx {\n const gasPrice = optionalQuantity(json.gasPrice, 'gas price');\n const maxFeePerGas = optionalQuantity(json.maxFeePerGas, 'max fee');\n const maxPriorityFeePerGas = optionalQuantity(\n json.maxPriorityFeePerGas,\n 'priority fee',\n );\n const blockHash = json.blockHash ?? null;\n const blockNumber = json.blockNumber ?? null;\n return {\n hash: hash(json.hash, 'transaction hash'),\n from: this.#address(json.from, 'sender'),\n to:\n json.to === null || json.to === undefined\n ? null\n : this.#address(json.to, 'recipient'),\n nonce: quantity(json.nonce, 'nonce'),\n value: quantity(json.value, 'value'),\n // No calldata field is malformed, never an empty call (older nodes say `data`).\n input: data(json.input ?? json.data, 'input'),\n type: Number(optionalQuantity(json.type, 'type') ?? 0n),\n gasLimit: quantity(json.gas, 'gas limit'),\n ...(gasPrice !== undefined ? { gasPrice } : {}),\n ...(maxFeePerGas !== undefined ? { maxFeePerGas } : {}),\n ...(maxPriorityFeePerGas !== undefined ? { maxPriorityFeePerGas } : {}),\n blockHash: blockHash === null ? null : hash(blockHash, 'block hash'),\n blockNumber: blockNumber === null ? null : quantity(blockNumber, 'block number'),\n };\n }\n\n #log(json: Json): EvmLog {\n return {\n address: this.#address(json.address, 'log address'),\n topics: this.#list(json.topics, 'log topics').map((t) => hash(t, 'log topic')),\n data: data(json.data, 'log data'),\n logIndex: Number(quantity(json.logIndex, 'log index')),\n blockHash: hash(json.blockHash, 'block hash'),\n blockNumber: quantity(json.blockNumber, 'block number'),\n transactionHash: hash(json.transactionHash, 'transaction hash'),\n removed: json.removed === true,\n };\n }\n}\n"]}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Transactions and receipts into the driver model: native value and ERC-20 `Transfer`
3
+ * logs as transfers, fees in the native asset, and `decoding: 'partial'` whenever
4
+ * contract code ran, since internal transfers need traces, which the driver does not
5
+ * read.
6
+ */
7
+ import type { DriverTransaction, DriverTxObservation } from '../../core/driver/types';
8
+ import { type EvmNetworkConfig } from './network';
9
+ import type { EvmAbi, EvmReceipt, EvmTx } from './types';
10
+ /**
11
+ * No phantom success: a token `transfer` call worked only if the token logged a
12
+ * `Transfer` from the sender to the call's recipient, of a positive amount whenever the
13
+ * call asked for one. ERC-20 requires the event, and some tokens return `false` instead
14
+ * of reverting, so a successful receipt alone would report a transfer that moved nothing;
15
+ * a log to anyone else, or of nothing, pays the recipient nothing either. A
16
+ * fee-on-transfer token logs less than asked, and still counts; a non-compliant token
17
+ * that moves value without the event is reported failed. The call's arguments come from
18
+ * its signed calldata. Only verdicts on our own transactions apply it (`evmObservation`,
19
+ * `includedFinal`), never the decoder.
20
+ */
21
+ export declare function tokenTransferLanded(abi: EvmAbi, tx: EvmTx, receipt: EvmReceipt): boolean;
22
+ /** What the chain reports: where the transaction is, and its receipt's status. */
23
+ export declare function chainObservation(tx: EvmTx, receipt: EvmReceipt | null): DriverTxObservation;
24
+ /**
25
+ * The verdict on one of our own transactions: the chain's status, and a successful token
26
+ * `transfer` that logged no transfer to its recipient is `success: false`.
27
+ */
28
+ export declare function evmObservation(abi: EvmAbi, tx: EvmTx, receipt: EvmReceipt | null): DriverTxObservation;
29
+ /**
30
+ * Any transaction as the chain reports it: the receipt's status, never the token
31
+ * verdict, so a third party's call that shares the `transfer` selector is not misreported.
32
+ * Pass the network's config so bor's system logs do not make a plain Polygon transfer
33
+ * `partial`.
34
+ */
35
+ export declare function decodeTransaction(abi: EvmAbi, tx: EvmTx, receipt: EvmReceipt | null, timestamp?: number, network?: Pick<EvmNetworkConfig, 'polygonSystemLogs'>): DriverTransaction;
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tokenTransferLanded = tokenTransferLanded;
4
+ exports.chainObservation = chainObservation;
5
+ exports.evmObservation = evmObservation;
6
+ exports.decodeTransaction = decodeTransaction;
7
+ const client_1 = require("./client");
8
+ const fees_1 = require("./fees");
9
+ const network_1 = require("./network");
10
+ const TRANSFER_SELECTOR = '0xa9059cbb';
11
+ /**
12
+ * The recipient (lower-cased) and amount of an ERC-20 `transfer(address,uint256)`
13
+ * call: the selector, then two ABI words. `null` for any other calldata.
14
+ */
15
+ function transferCall(input) {
16
+ const to = `0x${input.slice(10, 74)}`;
17
+ const amount = `0x${input.slice(74)}`;
18
+ if (!input.startsWith(TRANSFER_SELECTOR) ||
19
+ !client_1.ADDRESS_WORD.test(to) ||
20
+ !client_1.ABI_WORD.test(amount)) {
21
+ return null;
22
+ }
23
+ return { to: `0x${to.slice(26)}`.toLowerCase(), amount: BigInt(amount) };
24
+ }
25
+ /**
26
+ * No phantom success: a token `transfer` call worked only if the token logged a
27
+ * `Transfer` from the sender to the call's recipient, of a positive amount whenever the
28
+ * call asked for one. ERC-20 requires the event, and some tokens return `false` instead
29
+ * of reverting, so a successful receipt alone would report a transfer that moved nothing;
30
+ * a log to anyone else, or of nothing, pays the recipient nothing either. A
31
+ * fee-on-transfer token logs less than asked, and still counts; a non-compliant token
32
+ * that moves value without the event is reported failed. The call's arguments come from
33
+ * its signed calldata. Only verdicts on our own transactions apply it (`evmObservation`,
34
+ * `includedFinal`), never the decoder.
35
+ */
36
+ function tokenTransferLanded(abi, tx, receipt) {
37
+ if (tx.to === null || !tx.input.startsWith(TRANSFER_SELECTOR))
38
+ return true;
39
+ const call = transferCall(tx.input);
40
+ if (!call)
41
+ return false;
42
+ return receipt.logs.some((log) => {
43
+ const transfer = log.address === tx.to ? abi.decodeTransfer(log) : null;
44
+ return (transfer !== null &&
45
+ transfer.from === tx.from &&
46
+ transfer.to.toLowerCase() === call.to &&
47
+ (call.amount === 0n || transfer.amount > 0n));
48
+ });
49
+ }
50
+ /** What the chain reports: where the transaction is, and its receipt's status. */
51
+ function chainObservation(tx, receipt) {
52
+ if (receipt) {
53
+ return {
54
+ seen: 'block',
55
+ txHash: tx.hash,
56
+ blockHeight: receipt.blockNumber,
57
+ blockHash: receipt.blockHash,
58
+ success: receipt.status === 1,
59
+ ...(receipt.status === 0 ? { reason: 'reverted' } : {}),
60
+ };
61
+ }
62
+ if (tx.blockHash !== null && tx.blockNumber !== null) {
63
+ return {
64
+ seen: 'block',
65
+ txHash: tx.hash,
66
+ blockHeight: tx.blockNumber,
67
+ blockHash: tx.blockHash,
68
+ };
69
+ }
70
+ return { seen: 'mempool', txHash: tx.hash };
71
+ }
72
+ /**
73
+ * The verdict on one of our own transactions: the chain's status, and a successful token
74
+ * `transfer` that logged no transfer to its recipient is `success: false`.
75
+ */
76
+ function evmObservation(abi, tx, receipt) {
77
+ const observation = chainObservation(tx, receipt);
78
+ if (!receipt || receipt.status === 0 || tokenTransferLanded(abi, tx, receipt)) {
79
+ return observation;
80
+ }
81
+ return {
82
+ ...observation,
83
+ success: false,
84
+ reason: 'token transfer failed',
85
+ failure: 'unevidenced',
86
+ };
87
+ }
88
+ /** bor's fee log or native transfer log, from the MRC20 predeploy. */
89
+ const isPolygonSystemLog = (log) => log.address.toLowerCase() === network_1.POLYGON_FEE_LOG.address &&
90
+ (log.topics[0] === network_1.POLYGON_FEE_LOG.topic ||
91
+ log.topics[0] === network_1.POLYGON_TRANSFER_LOG.topic);
92
+ /**
93
+ * Whether contract code ran: calldata, logs, or more execution gas than a plain transfer.
94
+ * On Polygon PoS, a plain transfer (no calldata, exactly 21,000 execution gas) also
95
+ * carries bor's system logs, which are no sign of code: its value is `tx.value`.
96
+ */
97
+ function ranCode(tx, receipt, polygonSystemLogs) {
98
+ const executionGas = receipt.gasUsed - (receipt.gasUsedForL1 ?? 0n);
99
+ if (tx.input !== '0x' || executionGas !== fees_1.TRANSFER_GAS)
100
+ return true;
101
+ const logs = polygonSystemLogs
102
+ ? receipt.logs.filter((log) => !isPolygonSystemLog(log))
103
+ : receipt.logs;
104
+ return logs.length > 0;
105
+ }
106
+ /**
107
+ * Any transaction as the chain reports it: the receipt's status, never the token
108
+ * verdict, so a third party's call that shares the `transfer` selector is not misreported.
109
+ * Pass the network's config so bor's system logs do not make a plain Polygon transfer
110
+ * `partial`.
111
+ */
112
+ function decodeTransaction(abi, tx, receipt, timestamp, network = { polygonSystemLogs: false }) {
113
+ const transfers = [];
114
+ const executed = receipt === null || receipt.status === 1;
115
+ const to = tx.to ?? receipt?.contractAddress ?? null;
116
+ if (executed && tx.value > 0n && to !== null) {
117
+ transfers.push({
118
+ locator: 'native',
119
+ from: [tx.from],
120
+ to,
121
+ asset: 'native',
122
+ amount: tx.value,
123
+ source: 'native',
124
+ });
125
+ }
126
+ for (const log of receipt?.status === 1 ? receipt.logs : []) {
127
+ const decoded = abi.decodeTransfer(log);
128
+ if (!decoded)
129
+ continue;
130
+ transfers.push({
131
+ locator: `log:${log.logIndex}`,
132
+ from: [decoded.from],
133
+ to: decoded.to,
134
+ asset: { standard: 'erc20', contract: log.address },
135
+ amount: decoded.amount,
136
+ source: 'token-event',
137
+ });
138
+ }
139
+ const decoding = receipt === null
140
+ ? 'partial'
141
+ : receipt.status === 0 || !ranCode(tx, receipt, network.polygonSystemLogs)
142
+ ? 'complete'
143
+ : 'partial';
144
+ return {
145
+ id: tx.hash,
146
+ observation: chainObservation(tx, receipt),
147
+ ...(receipt
148
+ ? {
149
+ fee: [
150
+ {
151
+ asset: 'native',
152
+ amount: receipt.gasUsed * receipt.effectiveGasPrice + (receipt.l1Fee ?? 0n),
153
+ },
154
+ ],
155
+ }
156
+ : {}),
157
+ transfers,
158
+ decoding,
159
+ ...(timestamp !== undefined ? { timestamp } : {}),
160
+ details: {
161
+ nonce: tx.nonce,
162
+ type: tx.type,
163
+ gasLimit: tx.gasLimit,
164
+ ...(receipt
165
+ ? {
166
+ gasUsed: receipt.gasUsed,
167
+ effectiveGasPrice: receipt.effectiveGasPrice,
168
+ status: receipt.status,
169
+ }
170
+ : {}),
171
+ ...(receipt?.l1Fee !== undefined ? { l1Fee: receipt.l1Fee } : {}),
172
+ },
173
+ };
174
+ }
175
+ //# sourceMappingURL=decode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/adapters/evm/decode.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Transactions and receipts into the driver model: native value and ERC-20 `Transfer`\n * logs as transfers, fees in the native asset, and `decoding: 'partial'` whenever\n * contract code ran, since internal transfers need traces, which the driver does not\n * read.\n */\nimport type {\n DriverTransaction,\n DriverTransfer,\n DriverTxObservation,\n} from '../../core/driver/types';\nimport { ABI_WORD, ADDRESS_WORD } from './client';\nimport { TRANSFER_GAS } from './fees';\nimport { POLYGON_FEE_LOG, POLYGON_TRANSFER_LOG, type EvmNetworkConfig } from './network';\nimport type { EvmAbi, EvmLog, EvmReceipt, EvmTx } from './types';\n\nconst TRANSFER_SELECTOR = '0xa9059cbb';\n\n/**\n * The recipient (lower-cased) and amount of an ERC-20 `transfer(address,uint256)`\n * call: the selector, then two ABI words. `null` for any other calldata.\n */\nfunction transferCall(\n input: string,\n): { readonly to: string; readonly amount: bigint } | null {\n const to = `0x${input.slice(10, 74)}`;\n const amount = `0x${input.slice(74)}`;\n if (\n !input.startsWith(TRANSFER_SELECTOR) ||\n !ADDRESS_WORD.test(to) ||\n !ABI_WORD.test(amount)\n ) {\n return null;\n }\n return { to: `0x${to.slice(26)}`.toLowerCase(), amount: BigInt(amount) };\n}\n\n/**\n * No phantom success: a token `transfer` call worked only if the token logged a\n * `Transfer` from the sender to the call's recipient, of a positive amount whenever the\n * call asked for one. ERC-20 requires the event, and some tokens return `false` instead\n * of reverting, so a successful receipt alone would report a transfer that moved nothing;\n * a log to anyone else, or of nothing, pays the recipient nothing either. A\n * fee-on-transfer token logs less than asked, and still counts; a non-compliant token\n * that moves value without the event is reported failed. The call's arguments come from\n * its signed calldata. Only verdicts on our own transactions apply it (`evmObservation`,\n * `includedFinal`), never the decoder.\n */\nexport function tokenTransferLanded(\n abi: EvmAbi,\n tx: EvmTx,\n receipt: EvmReceipt,\n): boolean {\n if (tx.to === null || !tx.input.startsWith(TRANSFER_SELECTOR)) return true;\n const call = transferCall(tx.input);\n if (!call) return false;\n return receipt.logs.some((log) => {\n const transfer = log.address === tx.to ? abi.decodeTransfer(log) : null;\n return (\n transfer !== null &&\n transfer.from === tx.from &&\n transfer.to.toLowerCase() === call.to &&\n (call.amount === 0n || transfer.amount > 0n)\n );\n });\n}\n\n/** What the chain reports: where the transaction is, and its receipt's status. */\nexport function chainObservation(\n tx: EvmTx,\n receipt: EvmReceipt | null,\n): DriverTxObservation {\n if (receipt) {\n return {\n seen: 'block',\n txHash: tx.hash,\n blockHeight: receipt.blockNumber,\n blockHash: receipt.blockHash,\n success: receipt.status === 1,\n ...(receipt.status === 0 ? { reason: 'reverted' } : {}),\n };\n }\n if (tx.blockHash !== null && tx.blockNumber !== null) {\n return {\n seen: 'block',\n txHash: tx.hash,\n blockHeight: tx.blockNumber,\n blockHash: tx.blockHash,\n };\n }\n return { seen: 'mempool', txHash: tx.hash };\n}\n\n/**\n * The verdict on one of our own transactions: the chain's status, and a successful token\n * `transfer` that logged no transfer to its recipient is `success: false`.\n */\nexport function evmObservation(\n abi: EvmAbi,\n tx: EvmTx,\n receipt: EvmReceipt | null,\n): DriverTxObservation {\n const observation = chainObservation(tx, receipt);\n if (!receipt || receipt.status === 0 || tokenTransferLanded(abi, tx, receipt)) {\n return observation;\n }\n return {\n ...observation,\n success: false,\n reason: 'token transfer failed',\n failure: 'unevidenced',\n };\n}\n\n/** bor's fee log or native transfer log, from the MRC20 predeploy. */\nconst isPolygonSystemLog = (log: EvmLog): boolean =>\n log.address.toLowerCase() === POLYGON_FEE_LOG.address &&\n (log.topics[0] === POLYGON_FEE_LOG.topic ||\n log.topics[0] === POLYGON_TRANSFER_LOG.topic);\n\n/**\n * Whether contract code ran: calldata, logs, or more execution gas than a plain transfer.\n * On Polygon PoS, a plain transfer (no calldata, exactly 21,000 execution gas) also\n * carries bor's system logs, which are no sign of code: its value is `tx.value`.\n */\nfunction ranCode(tx: EvmTx, receipt: EvmReceipt, polygonSystemLogs: boolean): boolean {\n const executionGas = receipt.gasUsed - (receipt.gasUsedForL1 ?? 0n);\n if (tx.input !== '0x' || executionGas !== TRANSFER_GAS) return true;\n const logs = polygonSystemLogs\n ? receipt.logs.filter((log) => !isPolygonSystemLog(log))\n : receipt.logs;\n return logs.length > 0;\n}\n\n/**\n * Any transaction as the chain reports it: the receipt's status, never the token\n * verdict, so a third party's call that shares the `transfer` selector is not misreported.\n * Pass the network's config so bor's system logs do not make a plain Polygon transfer\n * `partial`.\n */\nexport function decodeTransaction(\n abi: EvmAbi,\n tx: EvmTx,\n receipt: EvmReceipt | null,\n timestamp?: number,\n network: Pick<EvmNetworkConfig, 'polygonSystemLogs'> = { polygonSystemLogs: false },\n): DriverTransaction {\n const transfers: DriverTransfer[] = [];\n const executed = receipt === null || receipt.status === 1;\n const to = tx.to ?? receipt?.contractAddress ?? null;\n if (executed && tx.value > 0n && to !== null) {\n transfers.push({\n locator: 'native',\n from: [tx.from],\n to,\n asset: 'native',\n amount: tx.value,\n source: 'native',\n });\n }\n for (const log of receipt?.status === 1 ? receipt.logs : []) {\n const decoded = abi.decodeTransfer(log);\n if (!decoded) continue;\n transfers.push({\n locator: `log:${log.logIndex}`,\n from: [decoded.from],\n to: decoded.to,\n asset: { standard: 'erc20', contract: log.address },\n amount: decoded.amount,\n source: 'token-event',\n });\n }\n const decoding =\n receipt === null\n ? 'partial'\n : receipt.status === 0 || !ranCode(tx, receipt, network.polygonSystemLogs)\n ? 'complete'\n : 'partial';\n return {\n id: tx.hash,\n observation: chainObservation(tx, receipt),\n ...(receipt\n ? {\n fee: [\n {\n asset: 'native' as const,\n amount: receipt.gasUsed * receipt.effectiveGasPrice + (receipt.l1Fee ?? 0n),\n },\n ],\n }\n : {}),\n transfers,\n decoding,\n ...(timestamp !== undefined ? { timestamp } : {}),\n details: {\n nonce: tx.nonce,\n type: tx.type,\n gasLimit: tx.gasLimit,\n ...(receipt\n ? {\n gasUsed: receipt.gasUsed,\n effectiveGasPrice: receipt.effectiveGasPrice,\n status: receipt.status,\n }\n : {}),\n ...(receipt?.l1Fee !== undefined ? { l1Fee: receipt.l1Fee } : {}),\n },\n };\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `EvmDriver`: all EVM logic, over the `EvmClient` strategy. One factory serves
3
+ * every EVM chain and network; each network's registry data configures it.
4
+ */
5
+ import type { DriverFactory } from '../../core/driver/types';
6
+ import type { Transport } from '../../core/transport/types';
7
+ import type { EvmClient } from './types';
8
+ export declare function evmDriverFactory(makeClient: (transport: Transport, chainId: bigint) => EvmClient): DriverFactory;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evmDriverFactory = evmDriverFactory;
4
+ const builder_1 = require("./builder");
5
+ const client_1 = require("./client");
6
+ const network_1 = require("./network");
7
+ const proofs_1 = require("./proofs");
8
+ const reader_1 = require("./reader");
9
+ const probe = async (call, method) => (0, client_1.quantity)(await call.rpc(method), method);
10
+ /**
11
+ * Identity is the decimal `eth_chainId`, the form of the network's registry identity; the
12
+ * height is `eth_blockNumber`. Only endpoints whose identity matches feed health heights.
13
+ */
14
+ function probes(expectedIdentity) {
15
+ return {
16
+ identity: async (call) => (await probe(call, 'eth_chainId')).toString(),
17
+ ...(expectedIdentity !== undefined ? { expectedIdentity } : {}),
18
+ height: (call) => probe(call, 'eth_blockNumber'),
19
+ };
20
+ }
21
+ function evmDriverFactory(makeClient) {
22
+ return {
23
+ async create(ctx) {
24
+ // The handle's options too (`maxFeePerGas`); an unknown one is refused, so a
25
+ // misspelt key never passes silently.
26
+ const config = (0, network_1.evmNetworkConfig)(ctx.chain, ctx.network, ctx.options);
27
+ // Probes go on every transport this driver receives, before any traffic: an
28
+ // endpoint without them stays unverified.
29
+ ctx.transport.setProbes(probes(ctx.network.identity));
30
+ ctx.indexer?.setProbes(probes(ctx.network.identity));
31
+ const client = makeClient(ctx.transport, config.chainId);
32
+ const evm = {
33
+ client,
34
+ chain: ctx.chain,
35
+ network: ctx.network,
36
+ config,
37
+ log: ctx.log,
38
+ };
39
+ const replacement = (0, builder_1.createEvmReplacement)(evm);
40
+ const ext = (0, reader_1.createEvmExt)(client);
41
+ return {
42
+ ordering: 'nonce',
43
+ capabilities: config.capabilities,
44
+ address: (0, reader_1.createEvmAddressCodec)(client),
45
+ reader: (0, reader_1.createEvmReader)(evm),
46
+ builder: (0, builder_1.createEvmBuilder)(evm),
47
+ broadcaster: (0, builder_1.createEvmBroadcaster)(client, config.chainId),
48
+ proofs: (0, proofs_1.createEvmProofs)(evm),
49
+ sequence: (0, reader_1.createEvmSequence)(client),
50
+ ...(replacement ? { replacement } : {}),
51
+ blocks: (0, proofs_1.createEvmBlocks)(evm),
52
+ ext: { evm: { getNonce: ext.evm.getNonce } },
53
+ limits: () => ({ maxOutputs: 1 }),
54
+ // A fresh SDK client on every call, never the driver's own: a caller may mutate
55
+ // it (listeners, polling) without touching other handles.
56
+ createNativeClient: () => client.createNative(),
57
+ };
58
+ },
59
+ };
60
+ }
61
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/adapters/evm/driver.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * `EvmDriver`: all EVM logic, over the `EvmClient` strategy. One factory serves\n * every EVM chain and network; each network's registry data configures it.\n */\nimport type { ChainDriver, DriverFactory } from '../../core/driver/types';\nimport type { EndpointCall, HealthProbes, Transport } from '../../core/transport/types';\nimport { createEvmBroadcaster, createEvmBuilder, createEvmReplacement } from './builder';\nimport { quantity } from './client';\nimport { evmNetworkConfig } from './network';\nimport { createEvmBlocks, createEvmProofs } from './proofs';\nimport {\n createEvmAddressCodec,\n createEvmExt,\n createEvmReader,\n createEvmSequence,\n type EvmContext,\n} from './reader';\nimport type { EvmClient } from './types';\n\nconst probe = async (call: EndpointCall, method: string): Promise<bigint> =>\n quantity(await call.rpc<unknown>(method), method);\n\n/**\n * Identity is the decimal `eth_chainId`, the form of the network's registry identity; the\n * height is `eth_blockNumber`. Only endpoints whose identity matches feed health heights.\n */\nfunction probes(expectedIdentity: string | undefined): HealthProbes {\n return {\n identity: async (call) => (await probe(call, 'eth_chainId')).toString(),\n ...(expectedIdentity !== undefined ? { expectedIdentity } : {}),\n height: (call) => probe(call, 'eth_blockNumber'),\n };\n}\n\nexport function evmDriverFactory(\n makeClient: (transport: Transport, chainId: bigint) => EvmClient,\n): DriverFactory {\n return {\n async create(ctx): Promise<ChainDriver> {\n // The handle's options too (`maxFeePerGas`); an unknown one is refused, so a\n // misspelt key never passes silently.\n const config = evmNetworkConfig(ctx.chain, ctx.network, ctx.options);\n // Probes go on every transport this driver receives, before any traffic: an\n // endpoint without them stays unverified.\n ctx.transport.setProbes(probes(ctx.network.identity));\n ctx.indexer?.setProbes(probes(ctx.network.identity));\n const client = makeClient(ctx.transport, config.chainId);\n const evm: EvmContext = {\n client,\n chain: ctx.chain,\n network: ctx.network,\n config,\n log: ctx.log,\n };\n const replacement = createEvmReplacement(evm);\n const ext = createEvmExt(client);\n return {\n ordering: 'nonce',\n capabilities: config.capabilities,\n address: createEvmAddressCodec(client),\n reader: createEvmReader(evm),\n builder: createEvmBuilder(evm),\n broadcaster: createEvmBroadcaster(client, config.chainId),\n proofs: createEvmProofs(evm),\n sequence: createEvmSequence(client),\n ...(replacement ? { replacement } : {}),\n blocks: createEvmBlocks(evm),\n ext: { evm: { getNonce: ext.evm.getNonce } },\n limits: () => ({ maxOutputs: 1 }),\n // A fresh SDK client on every call, never the driver's own: a caller may mutate\n // it (listeners, polling) without touching other handles.\n createNativeClient: () => client.createNative(),\n };\n },\n };\n}\n"]}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Classifies a node's answer to `eth_sendRawTransaction`. The patterns are
3
+ * geth's texts (txpool and RPC), which the geth-derived clients of most built-in chains
4
+ * share; an Ethereum endpoint may run any client, so a text not listed here falls to the
5
+ * safe default, a generic refusal. The returned reasons are short, fixed texts: a
6
+ * node's own text can carry addresses and amounts ("insufficient funds …: address 0x… have
7
+ * … want …") and is never passed on. Every result is frozen, so no caller can alter a later
8
+ * one.
9
+ */
10
+ import type { BroadcastResult } from '../../core/driver/types';
11
+ /** The node's answer at its word (see `classifyOwnBroadcast` for the bytes we sent). */
12
+ export declare function classifyBroadcastError(message: string): BroadcastResult;
13
+ /**
14
+ * A node's rejection is a claim. The answer to `sentHex`, the
15
+ * bytes this driver sent on the network whose chain id is `chainId`: a `rejected` stands
16
+ * only when its reason holds for those bytes, read SDK-free (`readSentTx`); otherwise it is a
17
+ * refusal, so a lying endpoint that relays our bytes can never end the Operation and invite
18
+ * a second payment. Every other answer is the node's, as `classifyBroadcastError` reads it.
19
+ */
20
+ export declare function classifyOwnBroadcast(message: string, sentHex: string, chainId: bigint): BroadcastResult;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classifyBroadcastError = classifyBroadcastError;
4
+ exports.classifyOwnBroadcast = classifyOwnBroadcast;
5
+ const rawtx_1 = require("./rawtx");
6
+ const refused = (code, reason) => Object.freeze({ kind: 'refused', code, reason });
7
+ const rejected = (reason) => Object.freeze({ kind: 'rejected', reason });
8
+ /** Success: the node already holds these bytes, or they are already mined. */
9
+ const ALREADY_KNOWN = /already known|known transaction|already imported|alreadyknown|already exists|already in chain/i;
10
+ const ALREADY_KNOWN_RESULT = Object.freeze({ kind: 'already-known' });
11
+ /**
12
+ * State-dependent or node policy: the same bytes may become valid later or on another node,
13
+ * or may already be included (observed only).
14
+ */
15
+ const REFUSED = [
16
+ [/nonce too low/i, refused('NONCE_CONFLICT', 'nonce too low')],
17
+ [/nonce too high|nonce gap/i, refused('NONCE_TOO_HIGH', 'nonce too high')],
18
+ [/insufficient funds/i, refused('INSUFFICIENT_FUNDS', 'insufficient funds')],
19
+ [
20
+ /replacement transaction underpriced/i,
21
+ refused('FEE_TOO_LOW', 'replacement underpriced'),
22
+ ],
23
+ [
24
+ /underpriced|fee too low|less than block base fee|gas price too low|below minimum/i,
25
+ refused('FEE_TOO_LOW', 'fee too low'),
26
+ ],
27
+ // The block gas limit can rise.
28
+ [
29
+ /exceeds block gas limit/i,
30
+ refused('TX_REFUSED', 'gas limit above the block gas limit'),
31
+ ],
32
+ // A pool gates types on the forks active at its head (a syncing node) and on its config.
33
+ [
34
+ /transaction type not supported|tx type not supported/i,
35
+ refused('TX_REFUSED', 'unsupported transaction type'),
36
+ ],
37
+ // Arbitrum's intrinsic gas includes the L1 poster cost, which moves.
38
+ [/intrinsic gas too low/i, refused('TX_REFUSED', 'gas limit below intrinsic gas')],
39
+ // Node policy: another node may accept the same bytes.
40
+ [/only replay-protected/i, refused('TX_REFUSED', 'replay protection required')],
41
+ [/oversized data/i, refused('TX_REFUSED', 'transaction too large')],
42
+ ];
43
+ /**
44
+ * Invalid by construction: these bytes can never be included on any node. Exact texts only,
45
+ * so a state-dependent cause that merely shares a word is never taken for one of these.
46
+ * `invalid chain id` comes first: geth wraps it as "invalid sender: invalid chain id …".
47
+ */
48
+ const REJECTED = [
49
+ {
50
+ pattern: /invalid chain id/i,
51
+ result: rejected('wrong chain id'),
52
+ holds: (sent, chainId) => sent !== 'malformed' && sent.chainId !== undefined && sent.chainId !== chainId,
53
+ },
54
+ {
55
+ pattern: /invalid sender|invalid signature|invalid transaction v, r, s values/i,
56
+ result: rejected('invalid signature'),
57
+ holds: (sent) => sent !== 'malformed' && !(0, rawtx_1.signatureValuesValid)(sent),
58
+ },
59
+ {
60
+ pattern: /\brlp:|typed transaction too short/i,
61
+ result: rejected('malformed transaction'),
62
+ holds: (sent) => sent === 'malformed',
63
+ },
64
+ {
65
+ pattern: /max priority fee per gas higher than max fee per gas|tip above fee cap/i,
66
+ result: rejected('priority fee above the fee cap'),
67
+ holds: (sent) => sent !== 'malformed' &&
68
+ sent.type === 2 &&
69
+ sent.maxPriorityFeePerGas > sent.maxFeePerGas,
70
+ },
71
+ ];
72
+ const REFUSED_BY_NODE = refused('TX_REFUSED', 'refused by the node');
73
+ /**
74
+ * `rejected` ends an Attempt without proof, so any doubt falls toward `refused`: the
75
+ * refusal patterns are checked first ("invalid sender: transaction type not supported" is a
76
+ * refusal), and an unlisted text is a refusal.
77
+ */
78
+ function classified(message) {
79
+ if (ALREADY_KNOWN.test(message))
80
+ return { result: ALREADY_KNOWN_RESULT };
81
+ for (const [pattern, result] of REFUSED) {
82
+ if (pattern.test(message))
83
+ return { result };
84
+ }
85
+ const rejection = REJECTED.find((entry) => entry.pattern.test(message));
86
+ return rejection
87
+ ? { result: rejection.result, rejection }
88
+ : { result: REFUSED_BY_NODE };
89
+ }
90
+ /** The node's answer at its word (see `classifyOwnBroadcast` for the bytes we sent). */
91
+ function classifyBroadcastError(message) {
92
+ return classified(message).result;
93
+ }
94
+ /** A rejection this driver cannot confirm for the bytes it sent: observed, never terminal. */
95
+ const UNCONFIRMED = refused('TX_REFUSED', 'the node claimed the transaction is invalid');
96
+ /**
97
+ * A node's rejection is a claim. The answer to `sentHex`, the
98
+ * bytes this driver sent on the network whose chain id is `chainId`: a `rejected` stands
99
+ * only when its reason holds for those bytes, read SDK-free (`readSentTx`); otherwise it is a
100
+ * refusal, so a lying endpoint that relays our bytes can never end the Operation and invite
101
+ * a second payment. Every other answer is the node's, as `classifyBroadcastError` reads it.
102
+ */
103
+ function classifyOwnBroadcast(message, sentHex, chainId) {
104
+ const { result, rejection } = classified(message);
105
+ if (!rejection)
106
+ return result;
107
+ const sent = (0, rawtx_1.readSentTx)(sentHex);
108
+ return sent !== undefined && rejection.holds(sent, chainId) ? result : UNCONFIRMED;
109
+ }
110
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/adapters/evm/errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Classifies a node's answer to `eth_sendRawTransaction`. The patterns are\n * geth's texts (txpool and RPC), which the geth-derived clients of most built-in chains\n * share; an Ethereum endpoint may run any client, so a text not listed here falls to the\n * safe default, a generic refusal. The returned reasons are short, fixed texts: a\n * node's own text can carry addresses and amounts (\"insufficient funds …: address 0x… have\n * … want …\") and is never passed on. Every result is frozen, so no caller can alter a later\n * one.\n */\nimport type { BroadcastResult } from '../../core/driver/types';\nimport { readSentTx, signatureValuesValid, type EvmSentTx } from './rawtx';\n\ntype RefusalCode = Extract<BroadcastResult, { kind: 'refused' }>['code'];\n\nconst refused = (code: RefusalCode, reason: string): BroadcastResult =>\n Object.freeze({ kind: 'refused', code, reason });\nconst rejected = (reason: string): BroadcastResult =>\n Object.freeze({ kind: 'rejected', reason });\n\n/** Success: the node already holds these bytes, or they are already mined. */\nconst ALREADY_KNOWN =\n /already known|known transaction|already imported|alreadyknown|already exists|already in chain/i;\nconst ALREADY_KNOWN_RESULT: BroadcastResult = Object.freeze({ kind: 'already-known' });\n\n/**\n * State-dependent or node policy: the same bytes may become valid later or on another node,\n * or may already be included (observed only).\n */\nconst REFUSED: readonly (readonly [RegExp, BroadcastResult])[] = [\n [/nonce too low/i, refused('NONCE_CONFLICT', 'nonce too low')],\n [/nonce too high|nonce gap/i, refused('NONCE_TOO_HIGH', 'nonce too high')],\n [/insufficient funds/i, refused('INSUFFICIENT_FUNDS', 'insufficient funds')],\n [\n /replacement transaction underpriced/i,\n refused('FEE_TOO_LOW', 'replacement underpriced'),\n ],\n [\n /underpriced|fee too low|less than block base fee|gas price too low|below minimum/i,\n refused('FEE_TOO_LOW', 'fee too low'),\n ],\n // The block gas limit can rise.\n [\n /exceeds block gas limit/i,\n refused('TX_REFUSED', 'gas limit above the block gas limit'),\n ],\n // A pool gates types on the forks active at its head (a syncing node) and on its config.\n [\n /transaction type not supported|tx type not supported/i,\n refused('TX_REFUSED', 'unsupported transaction type'),\n ],\n // Arbitrum's intrinsic gas includes the L1 poster cost, which moves.\n [/intrinsic gas too low/i, refused('TX_REFUSED', 'gas limit below intrinsic gas')],\n // Node policy: another node may accept the same bytes.\n [/only replay-protected/i, refused('TX_REFUSED', 'replay protection required')],\n [/oversized data/i, refused('TX_REFUSED', 'transaction too large')],\n];\n\n/** A rejection and the check that confirms it for the bytes we sent. */\ninterface Rejection {\n readonly pattern: RegExp;\n readonly result: BroadcastResult;\n readonly holds: (sent: EvmSentTx | 'malformed', chainId: bigint) => boolean;\n}\n\n/**\n * Invalid by construction: these bytes can never be included on any node. Exact texts only,\n * so a state-dependent cause that merely shares a word is never taken for one of these.\n * `invalid chain id` comes first: geth wraps it as \"invalid sender: invalid chain id …\".\n */\nconst REJECTED: readonly Rejection[] = [\n {\n pattern: /invalid chain id/i,\n result: rejected('wrong chain id'),\n holds: (sent, chainId) =>\n sent !== 'malformed' && sent.chainId !== undefined && sent.chainId !== chainId,\n },\n {\n pattern: /invalid sender|invalid signature|invalid transaction v, r, s values/i,\n result: rejected('invalid signature'),\n holds: (sent) => sent !== 'malformed' && !signatureValuesValid(sent),\n },\n {\n pattern: /\\brlp:|typed transaction too short/i,\n result: rejected('malformed transaction'),\n holds: (sent) => sent === 'malformed',\n },\n {\n pattern: /max priority fee per gas higher than max fee per gas|tip above fee cap/i,\n result: rejected('priority fee above the fee cap'),\n holds: (sent) =>\n sent !== 'malformed' &&\n sent.type === 2 &&\n (sent.maxPriorityFeePerGas as bigint) > (sent.maxFeePerGas as bigint),\n },\n];\n\nconst REFUSED_BY_NODE = refused('TX_REFUSED', 'refused by the node');\n\n/**\n * `rejected` ends an Attempt without proof, so any doubt falls toward `refused`: the\n * refusal patterns are checked first (\"invalid sender: transaction type not supported\" is a\n * refusal), and an unlisted text is a refusal.\n */\nfunction classified(message: string): {\n readonly result: BroadcastResult;\n readonly rejection?: Rejection;\n} {\n if (ALREADY_KNOWN.test(message)) return { result: ALREADY_KNOWN_RESULT };\n for (const [pattern, result] of REFUSED) {\n if (pattern.test(message)) return { result };\n }\n const rejection = REJECTED.find((entry) => entry.pattern.test(message));\n return rejection\n ? { result: rejection.result, rejection }\n : { result: REFUSED_BY_NODE };\n}\n\n/** The node's answer at its word (see `classifyOwnBroadcast` for the bytes we sent). */\nexport function classifyBroadcastError(message: string): BroadcastResult {\n return classified(message).result;\n}\n\n/** A rejection this driver cannot confirm for the bytes it sent: observed, never terminal. */\nconst UNCONFIRMED: BroadcastResult = refused(\n 'TX_REFUSED',\n 'the node claimed the transaction is invalid',\n);\n\n/**\n * A node's rejection is a claim. The answer to `sentHex`, the\n * bytes this driver sent on the network whose chain id is `chainId`: a `rejected` stands\n * only when its reason holds for those bytes, read SDK-free (`readSentTx`); otherwise it is a\n * refusal, so a lying endpoint that relays our bytes can never end the Operation and invite\n * a second payment. Every other answer is the node's, as `classifyBroadcastError` reads it.\n */\nexport function classifyOwnBroadcast(\n message: string,\n sentHex: string,\n chainId: bigint,\n): BroadcastResult {\n const { result, rejection } = classified(message);\n if (!rejection) return result;\n const sent = readSentTx(sentHex);\n return sent !== undefined && rejection.holds(sent, chainId) ? result : UNCONFIRMED;\n}\n"]}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `EthersClient`: the ethers v6 strategy (the EVM default). Driver I/O goes straight to the
3
+ * core transport under each call's tags, never through ethers' provider: ethers' request
4
+ * queue drains on a real 0 ms timer that fake-clock tests cannot step deterministically,
5
+ * and the driver needs none of it (one request per call). ethers does the codec work, and
6
+ * `TransportJsonRpcProvider` (static network, no batching, no cache, no polling, `_send` →
7
+ * transport) is the `crypto-aio/native` client.
8
+ */
9
+ import { JsonRpcApiProvider, Network, type JsonRpcPayload, type JsonRpcResult } from 'ethers';
10
+ import type { DisposableNativeClient } from '../../core/driver/types';
11
+ import type { Transport } from '../../core/transport/types';
12
+ import { EvmClientBase } from './client';
13
+ import type { EvmAbi, EvmCallTags, EvmSignature, EvmTxFields } from './types';
14
+ type Call = (method: string, params: unknown) => Promise<unknown>;
15
+ /**
16
+ * The ethers provider bridged onto the core transport through `call`: the native client
17
+ * only.
18
+ */
19
+ export declare class TransportJsonRpcProvider extends JsonRpcApiProvider {
20
+ #private;
21
+ constructor(network: Network, call: Call);
22
+ _send(payload: JsonRpcPayload | JsonRpcPayload[]): Promise<JsonRpcResult[]>;
23
+ }
24
+ export declare class EthersClient extends EvmClientBase {
25
+ #private;
26
+ readonly library = "ethers";
27
+ readonly abi: EvmAbi;
28
+ constructor(transport: Transport, chainId: bigint);
29
+ protected send(method: string, params: readonly unknown[], tags: EvmCallTags): Promise<unknown>;
30
+ isAddress(value: string): boolean;
31
+ checksum(address: string): string;
32
+ addressFromPublicKey(publicKey: Uint8Array): string;
33
+ protected encodeUnsigned(tx: EvmTxFields): string;
34
+ protected hashUnsigned(tx: EvmTxFields): string;
35
+ protected encodeSigned(tx: EvmTxFields, signature: EvmSignature): {
36
+ raw: string;
37
+ hash: string;
38
+ };
39
+ createNative(): DisposableNativeClient;
40
+ }
41
+ /** The `ethers` adapter's driver factory; the manifest's `load()` returns it. */
42
+ export declare const ethersDriverFactory: import("../../core/driver/types").DriverFactory;
43
+ export {};