@prb/effect-evm 1.0.0-beta.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 (804) hide show
  1. package/CONTRIBUTING.md +42 -0
  2. package/DOCS.md +798 -0
  3. package/README.md +74 -0
  4. package/dist/abi/erc165.d.ts +21 -0
  5. package/dist/abi/erc165.d.ts.map +1 -0
  6. package/dist/abi/erc165.js +36 -0
  7. package/dist/abi/erc165.js.map +1 -0
  8. package/dist/abi/erc20-no-output.d.ts +14 -0
  9. package/dist/abi/erc20-no-output.d.ts.map +1 -0
  10. package/dist/abi/erc20-no-output.js +13 -0
  11. package/dist/abi/erc20-no-output.js.map +1 -0
  12. package/dist/abi/erc20.d.ts +2 -0
  13. package/dist/abi/erc20.d.ts.map +1 -0
  14. package/dist/abi/erc20.js +2 -0
  15. package/dist/abi/erc20.js.map +1 -0
  16. package/dist/abi/erc721.d.ts +3 -0
  17. package/dist/abi/erc721.d.ts.map +1 -0
  18. package/dist/abi/erc721.js +3 -0
  19. package/dist/abi/erc721.js.map +1 -0
  20. package/dist/abi/index.d.ts +5 -0
  21. package/dist/abi/index.d.ts.map +1 -0
  22. package/dist/abi/index.js +5 -0
  23. package/dist/abi/index.js.map +1 -0
  24. package/dist/balance/index.d.ts +3 -0
  25. package/dist/balance/index.d.ts.map +1 -0
  26. package/dist/balance/index.js +3 -0
  27. package/dist/balance/index.js.map +1 -0
  28. package/dist/balance/service.d.ts +57 -0
  29. package/dist/balance/service.d.ts.map +1 -0
  30. package/dist/balance/service.js +244 -0
  31. package/dist/balance/service.js.map +1 -0
  32. package/dist/balance/utils.d.ts +3 -0
  33. package/dist/balance/utils.d.ts.map +1 -0
  34. package/dist/balance/utils.js +23 -0
  35. package/dist/balance/utils.js.map +1 -0
  36. package/dist/block/errors.d.ts +22 -0
  37. package/dist/block/errors.d.ts.map +1 -0
  38. package/dist/block/errors.js +15 -0
  39. package/dist/block/errors.js.map +1 -0
  40. package/dist/block/index.d.ts +3 -0
  41. package/dist/block/index.d.ts.map +1 -0
  42. package/dist/block/index.js +3 -0
  43. package/dist/block/index.js.map +1 -0
  44. package/dist/block/service.d.ts +48 -0
  45. package/dist/block/service.d.ts.map +1 -0
  46. package/dist/block/service.js +194 -0
  47. package/dist/block/service.js.map +1 -0
  48. package/dist/constants/index.d.ts +16 -0
  49. package/dist/constants/index.d.ts.map +1 -0
  50. package/dist/constants/index.js +17 -0
  51. package/dist/constants/index.js.map +1 -0
  52. package/dist/contract/cross-chain-reader.d.ts +33 -0
  53. package/dist/contract/cross-chain-reader.d.ts.map +1 -0
  54. package/dist/contract/cross-chain-reader.js +86 -0
  55. package/dist/contract/cross-chain-reader.js.map +1 -0
  56. package/dist/contract/index.d.ts +6 -0
  57. package/dist/contract/index.d.ts.map +1 -0
  58. package/dist/contract/index.js +6 -0
  59. package/dist/contract/index.js.map +1 -0
  60. package/dist/contract/pipeline/index.d.ts +4 -0
  61. package/dist/contract/pipeline/index.d.ts.map +1 -0
  62. package/dist/contract/pipeline/index.js +4 -0
  63. package/dist/contract/pipeline/index.js.map +1 -0
  64. package/dist/contract/pipeline/internal/core.d.ts +22 -0
  65. package/dist/contract/pipeline/internal/core.d.ts.map +1 -0
  66. package/dist/contract/pipeline/internal/core.js +64 -0
  67. package/dist/contract/pipeline/internal/core.js.map +1 -0
  68. package/dist/contract/pipeline/internal/helpers.d.ts +3 -0
  69. package/dist/contract/pipeline/internal/helpers.d.ts.map +1 -0
  70. package/dist/contract/pipeline/internal/helpers.js +9 -0
  71. package/dist/contract/pipeline/internal/helpers.js.map +1 -0
  72. package/dist/contract/pipeline/internal/nonce.d.ts +22 -0
  73. package/dist/contract/pipeline/internal/nonce.d.ts.map +1 -0
  74. package/dist/contract/pipeline/internal/nonce.js +44 -0
  75. package/dist/contract/pipeline/internal/nonce.js.map +1 -0
  76. package/dist/contract/pipeline/internal/prepare.d.ts +20 -0
  77. package/dist/contract/pipeline/internal/prepare.d.ts.map +1 -0
  78. package/dist/contract/pipeline/internal/prepare.js +41 -0
  79. package/dist/contract/pipeline/internal/prepare.js.map +1 -0
  80. package/dist/contract/pipeline/internal/receipt.d.ts +12 -0
  81. package/dist/contract/pipeline/internal/receipt.d.ts.map +1 -0
  82. package/dist/contract/pipeline/internal/receipt.js +24 -0
  83. package/dist/contract/pipeline/internal/receipt.js.map +1 -0
  84. package/dist/contract/pipeline/live.d.ts +10 -0
  85. package/dist/contract/pipeline/live.d.ts.map +1 -0
  86. package/dist/contract/pipeline/live.js +40 -0
  87. package/dist/contract/pipeline/live.js.map +1 -0
  88. package/dist/contract/pipeline/service.d.ts +24 -0
  89. package/dist/contract/pipeline/service.d.ts.map +1 -0
  90. package/dist/contract/pipeline/service.js +4 -0
  91. package/dist/contract/pipeline/service.js.map +1 -0
  92. package/dist/contract/pipeline/types.d.ts +47 -0
  93. package/dist/contract/pipeline/types.d.ts.map +1 -0
  94. package/dist/contract/pipeline/types.js +2 -0
  95. package/dist/contract/pipeline/types.js.map +1 -0
  96. package/dist/contract/pipeline/write-and-track.d.ts +28 -0
  97. package/dist/contract/pipeline/write-and-track.d.ts.map +1 -0
  98. package/dist/contract/pipeline/write-and-track.js +264 -0
  99. package/dist/contract/pipeline/write-and-track.js.map +1 -0
  100. package/dist/contract/pipeline/write-and-wait.d.ts +7 -0
  101. package/dist/contract/pipeline/write-and-wait.d.ts.map +1 -0
  102. package/dist/contract/pipeline/write-and-wait.js +7 -0
  103. package/dist/contract/pipeline/write-and-wait.js.map +1 -0
  104. package/dist/contract/pipeline.d.ts +2 -0
  105. package/dist/contract/pipeline.d.ts.map +1 -0
  106. package/dist/contract/pipeline.js +2 -0
  107. package/dist/contract/pipeline.js.map +1 -0
  108. package/dist/contract/reader.d.ts +20 -0
  109. package/dist/contract/reader.d.ts.map +1 -0
  110. package/dist/contract/reader.js +64 -0
  111. package/dist/contract/reader.js.map +1 -0
  112. package/dist/contract/typed-contract.d.ts +33 -0
  113. package/dist/contract/typed-contract.d.ts.map +1 -0
  114. package/dist/contract/typed-contract.js +53 -0
  115. package/dist/contract/typed-contract.js.map +1 -0
  116. package/dist/contract/writer.d.ts +16 -0
  117. package/dist/contract/writer.d.ts.map +1 -0
  118. package/dist/contract/writer.js +84 -0
  119. package/dist/contract/writer.js.map +1 -0
  120. package/dist/core/clients/index.d.ts +3 -0
  121. package/dist/core/clients/index.d.ts.map +1 -0
  122. package/dist/core/clients/index.js +3 -0
  123. package/dist/core/clients/index.js.map +1 -0
  124. package/dist/core/clients/public-client.d.ts +12 -0
  125. package/dist/core/clients/public-client.d.ts.map +1 -0
  126. package/dist/core/clients/public-client.js +4 -0
  127. package/dist/core/clients/public-client.js.map +1 -0
  128. package/dist/core/clients/wallet-client.d.ts +12 -0
  129. package/dist/core/clients/wallet-client.d.ts.map +1 -0
  130. package/dist/core/clients/wallet-client.js +4 -0
  131. package/dist/core/clients/wallet-client.js.map +1 -0
  132. package/dist/core/errors/client.d.ts +37 -0
  133. package/dist/core/errors/client.d.ts.map +1 -0
  134. package/dist/core/errors/client.js +24 -0
  135. package/dist/core/errors/client.js.map +1 -0
  136. package/dist/core/errors/contract.d.ts +58 -0
  137. package/dist/core/errors/contract.d.ts.map +1 -0
  138. package/dist/core/errors/contract.js +42 -0
  139. package/dist/core/errors/contract.js.map +1 -0
  140. package/dist/core/errors/erc20.d.ts +24 -0
  141. package/dist/core/errors/erc20.d.ts.map +1 -0
  142. package/dist/core/errors/erc20.js +17 -0
  143. package/dist/core/errors/erc20.js.map +1 -0
  144. package/dist/core/errors/event.d.ts +21 -0
  145. package/dist/core/errors/event.d.ts.map +1 -0
  146. package/dist/core/errors/event.js +14 -0
  147. package/dist/core/errors/event.js.map +1 -0
  148. package/dist/core/errors/index.d.ts +8 -0
  149. package/dist/core/errors/index.d.ts.map +1 -0
  150. package/dist/core/errors/index.js +8 -0
  151. package/dist/core/errors/index.js.map +1 -0
  152. package/dist/core/errors/predicates.d.ts +12 -0
  153. package/dist/core/errors/predicates.d.ts.map +1 -0
  154. package/dist/core/errors/predicates.js +3 -0
  155. package/dist/core/errors/predicates.js.map +1 -0
  156. package/dist/core/errors/transaction.d.ts +57 -0
  157. package/dist/core/errors/transaction.d.ts.map +1 -0
  158. package/dist/core/errors/transaction.js +36 -0
  159. package/dist/core/errors/transaction.js.map +1 -0
  160. package/dist/core/errors/viem-mapper.d.ts +45 -0
  161. package/dist/core/errors/viem-mapper.d.ts.map +1 -0
  162. package/dist/core/errors/viem-mapper.js +251 -0
  163. package/dist/core/errors/viem-mapper.js.map +1 -0
  164. package/dist/core/index.d.ts +3 -0
  165. package/dist/core/index.d.ts.map +1 -0
  166. package/dist/core/index.js +3 -0
  167. package/dist/core/index.js.map +1 -0
  168. package/dist/deploy/errors.d.ts +30 -0
  169. package/dist/deploy/errors.d.ts.map +1 -0
  170. package/dist/deploy/errors.js +20 -0
  171. package/dist/deploy/errors.js.map +1 -0
  172. package/dist/deploy/index.d.ts +3 -0
  173. package/dist/deploy/index.d.ts.map +1 -0
  174. package/dist/deploy/index.js +3 -0
  175. package/dist/deploy/index.js.map +1 -0
  176. package/dist/deploy/service.d.ts +62 -0
  177. package/dist/deploy/service.d.ts.map +1 -0
  178. package/dist/deploy/service.js +233 -0
  179. package/dist/deploy/service.js.map +1 -0
  180. package/dist/eip7702/erc7579.d.ts +36 -0
  181. package/dist/eip7702/erc7579.d.ts.map +1 -0
  182. package/dist/eip7702/erc7579.js +52 -0
  183. package/dist/eip7702/erc7579.js.map +1 -0
  184. package/dist/eip7702/errors.d.ts +30 -0
  185. package/dist/eip7702/errors.d.ts.map +1 -0
  186. package/dist/eip7702/errors.js +20 -0
  187. package/dist/eip7702/errors.js.map +1 -0
  188. package/dist/eip7702/index.d.ts +4 -0
  189. package/dist/eip7702/index.d.ts.map +1 -0
  190. package/dist/eip7702/index.js +4 -0
  191. package/dist/eip7702/index.js.map +1 -0
  192. package/dist/eip7702/service.d.ts +64 -0
  193. package/dist/eip7702/service.d.ts.map +1 -0
  194. package/dist/eip7702/service.js +166 -0
  195. package/dist/eip7702/service.js.map +1 -0
  196. package/dist/ens/ens.d.ts +26 -0
  197. package/dist/ens/ens.d.ts.map +1 -0
  198. package/dist/ens/ens.js +144 -0
  199. package/dist/ens/ens.js.map +1 -0
  200. package/dist/ens/errors.d.ts +53 -0
  201. package/dist/ens/errors.d.ts.map +1 -0
  202. package/dist/ens/errors.js +34 -0
  203. package/dist/ens/errors.js.map +1 -0
  204. package/dist/ens/index.d.ts +3 -0
  205. package/dist/ens/index.d.ts.map +1 -0
  206. package/dist/ens/index.js +3 -0
  207. package/dist/ens/index.js.map +1 -0
  208. package/dist/erc20/allowance/core.d.ts +9 -0
  209. package/dist/erc20/allowance/core.d.ts.map +1 -0
  210. package/dist/erc20/allowance/core.js +121 -0
  211. package/dist/erc20/allowance/core.js.map +1 -0
  212. package/dist/erc20/allowance/index.d.ts +4 -0
  213. package/dist/erc20/allowance/index.d.ts.map +1 -0
  214. package/dist/erc20/allowance/index.js +4 -0
  215. package/dist/erc20/allowance/index.js.map +1 -0
  216. package/dist/erc20/allowance/no-output.d.ts +9 -0
  217. package/dist/erc20/allowance/no-output.d.ts.map +1 -0
  218. package/dist/erc20/allowance/no-output.js +122 -0
  219. package/dist/erc20/allowance/no-output.js.map +1 -0
  220. package/dist/erc20/allowance/types.d.ts +42 -0
  221. package/dist/erc20/allowance/types.d.ts.map +1 -0
  222. package/dist/erc20/allowance/types.js +2 -0
  223. package/dist/erc20/allowance/types.js.map +1 -0
  224. package/dist/erc20/index.d.ts +2 -0
  225. package/dist/erc20/index.d.ts.map +1 -0
  226. package/dist/erc20/index.js +2 -0
  227. package/dist/erc20/index.js.map +1 -0
  228. package/dist/erc721/errors.d.ts +47 -0
  229. package/dist/erc721/errors.d.ts.map +1 -0
  230. package/dist/erc721/errors.js +34 -0
  231. package/dist/erc721/errors.js.map +1 -0
  232. package/dist/erc721/helpers.d.ts +24 -0
  233. package/dist/erc721/helpers.d.ts.map +1 -0
  234. package/dist/erc721/helpers.js +28 -0
  235. package/dist/erc721/helpers.js.map +1 -0
  236. package/dist/erc721/index.d.ts +4 -0
  237. package/dist/erc721/index.d.ts.map +1 -0
  238. package/dist/erc721/index.js +4 -0
  239. package/dist/erc721/index.js.map +1 -0
  240. package/dist/erc721/metadata.d.ts +28 -0
  241. package/dist/erc721/metadata.d.ts.map +1 -0
  242. package/dist/erc721/metadata.js +67 -0
  243. package/dist/erc721/metadata.js.map +1 -0
  244. package/dist/erc721/service.d.ts +93 -0
  245. package/dist/erc721/service.d.ts.map +1 -0
  246. package/dist/erc721/service.js +277 -0
  247. package/dist/erc721/service.js.map +1 -0
  248. package/dist/events/backfill.d.ts +25 -0
  249. package/dist/events/backfill.d.ts.map +1 -0
  250. package/dist/events/backfill.js +36 -0
  251. package/dist/events/backfill.js.map +1 -0
  252. package/dist/events/cursor.d.ts +40 -0
  253. package/dist/events/cursor.d.ts.map +1 -0
  254. package/dist/events/cursor.js +85 -0
  255. package/dist/events/cursor.js.map +1 -0
  256. package/dist/events/decoder.d.ts +18 -0
  257. package/dist/events/decoder.d.ts.map +1 -0
  258. package/dist/events/decoder.js +33 -0
  259. package/dist/events/decoder.js.map +1 -0
  260. package/dist/events/index.d.ts +6 -0
  261. package/dist/events/index.d.ts.map +1 -0
  262. package/dist/events/index.js +6 -0
  263. package/dist/events/index.js.map +1 -0
  264. package/dist/events/reliable-stream.d.ts +25 -0
  265. package/dist/events/reliable-stream.d.ts.map +1 -0
  266. package/dist/events/reliable-stream.js +121 -0
  267. package/dist/events/reliable-stream.js.map +1 -0
  268. package/dist/events/stream.d.ts +25 -0
  269. package/dist/events/stream.d.ts.map +1 -0
  270. package/dist/events/stream.js +39 -0
  271. package/dist/events/stream.js.map +1 -0
  272. package/dist/gas/errors.d.ts +12 -0
  273. package/dist/gas/errors.d.ts.map +1 -0
  274. package/dist/gas/errors.js +8 -0
  275. package/dist/gas/errors.js.map +1 -0
  276. package/dist/gas/estimator.d.ts +15 -0
  277. package/dist/gas/estimator.d.ts.map +1 -0
  278. package/dist/gas/estimator.js +113 -0
  279. package/dist/gas/estimator.js.map +1 -0
  280. package/dist/gas/index.d.ts +4 -0
  281. package/dist/gas/index.d.ts.map +1 -0
  282. package/dist/gas/index.js +4 -0
  283. package/dist/gas/index.js.map +1 -0
  284. package/dist/gas/service.d.ts +37 -0
  285. package/dist/gas/service.d.ts.map +1 -0
  286. package/dist/gas/service.js +95 -0
  287. package/dist/gas/service.js.map +1 -0
  288. package/dist/index.d.ts +26 -0
  289. package/dist/index.d.ts.map +1 -0
  290. package/dist/index.js +26 -0
  291. package/dist/index.js.map +1 -0
  292. package/dist/integrations/react-hooks/convenience/index.d.ts +28 -0
  293. package/dist/integrations/react-hooks/convenience/index.d.ts.map +1 -0
  294. package/dist/integrations/react-hooks/convenience/index.js +126 -0
  295. package/dist/integrations/react-hooks/convenience/index.js.map +1 -0
  296. package/dist/integrations/react-hooks/internal/error.d.ts +5 -0
  297. package/dist/integrations/react-hooks/internal/error.d.ts.map +1 -0
  298. package/dist/integrations/react-hooks/internal/error.js +8 -0
  299. package/dist/integrations/react-hooks/internal/error.js.map +1 -0
  300. package/dist/integrations/react-hooks/internal/is-dev.d.ts +2 -0
  301. package/dist/integrations/react-hooks/internal/is-dev.d.ts.map +1 -0
  302. package/dist/integrations/react-hooks/internal/is-dev.js +4 -0
  303. package/dist/integrations/react-hooks/internal/is-dev.js.map +1 -0
  304. package/dist/integrations/react-hooks/internal/runtime.d.ts +21 -0
  305. package/dist/integrations/react-hooks/internal/runtime.d.ts.map +1 -0
  306. package/dist/integrations/react-hooks/internal/runtime.js +37 -0
  307. package/dist/integrations/react-hooks/internal/runtime.js.map +1 -0
  308. package/dist/integrations/react-hooks/internal/scoped-run.d.ts +11 -0
  309. package/dist/integrations/react-hooks/internal/scoped-run.d.ts.map +1 -0
  310. package/dist/integrations/react-hooks/internal/scoped-run.js +20 -0
  311. package/dist/integrations/react-hooks/internal/scoped-run.js.map +1 -0
  312. package/dist/integrations/react-hooks/internal/stable.d.ts +2 -0
  313. package/dist/integrations/react-hooks/internal/stable.d.ts.map +1 -0
  314. package/dist/integrations/react-hooks/internal/stable.js +2 -0
  315. package/dist/integrations/react-hooks/internal/stable.js.map +1 -0
  316. package/dist/integrations/react-hooks/primitives/use-effect-memo-factory.d.ts +11 -0
  317. package/dist/integrations/react-hooks/primitives/use-effect-memo-factory.d.ts.map +1 -0
  318. package/dist/integrations/react-hooks/primitives/use-effect-memo-factory.js +92 -0
  319. package/dist/integrations/react-hooks/primitives/use-effect-memo-factory.js.map +1 -0
  320. package/dist/integrations/react-hooks/primitives/use-effect.d.ts +23 -0
  321. package/dist/integrations/react-hooks/primitives/use-effect.d.ts.map +1 -0
  322. package/dist/integrations/react-hooks/primitives/use-effect.js +93 -0
  323. package/dist/integrations/react-hooks/primitives/use-effect.js.map +1 -0
  324. package/dist/integrations/react-hooks/primitives/use-fork-effect.d.ts +4 -0
  325. package/dist/integrations/react-hooks/primitives/use-fork-effect.d.ts.map +1 -0
  326. package/dist/integrations/react-hooks/primitives/use-fork-effect.js +20 -0
  327. package/dist/integrations/react-hooks/primitives/use-fork-effect.js.map +1 -0
  328. package/dist/integrations/react-hooks/primitives/use-stream.d.ts +26 -0
  329. package/dist/integrations/react-hooks/primitives/use-stream.d.ts.map +1 -0
  330. package/dist/integrations/react-hooks/primitives/use-stream.js +161 -0
  331. package/dist/integrations/react-hooks/primitives/use-stream.js.map +1 -0
  332. package/dist/integrations/react-hooks/primitives.d.ts +8 -0
  333. package/dist/integrations/react-hooks/primitives.d.ts.map +1 -0
  334. package/dist/integrations/react-hooks/primitives.js +6 -0
  335. package/dist/integrations/react-hooks/primitives.js.map +1 -0
  336. package/dist/integrations/react-hooks/provider.d.ts +19 -0
  337. package/dist/integrations/react-hooks/provider.d.ts.map +1 -0
  338. package/dist/integrations/react-hooks/provider.js +71 -0
  339. package/dist/integrations/react-hooks/provider.js.map +1 -0
  340. package/dist/integrations/react-hooks/wagmi/index.d.ts +13 -0
  341. package/dist/integrations/react-hooks/wagmi/index.d.ts.map +1 -0
  342. package/dist/integrations/react-hooks/wagmi/index.js +81 -0
  343. package/dist/integrations/react-hooks/wagmi/index.js.map +1 -0
  344. package/dist/integrations/react-hooks/wallet-provider-ref.d.ts +7 -0
  345. package/dist/integrations/react-hooks/wallet-provider-ref.d.ts.map +1 -0
  346. package/dist/integrations/react-hooks/wallet-provider-ref.js +27 -0
  347. package/dist/integrations/react-hooks/wallet-provider-ref.js.map +1 -0
  348. package/dist/integrations/wagmi/index.d.ts +2 -0
  349. package/dist/integrations/wagmi/index.d.ts.map +1 -0
  350. package/dist/integrations/wagmi/index.js +2 -0
  351. package/dist/integrations/wagmi/index.js.map +1 -0
  352. package/dist/integrations/wagmi/layers.d.ts +12 -0
  353. package/dist/integrations/wagmi/layers.d.ts.map +1 -0
  354. package/dist/integrations/wagmi/layers.js +72 -0
  355. package/dist/integrations/wagmi/layers.js.map +1 -0
  356. package/dist/internal/index.d.ts +5 -0
  357. package/dist/internal/index.d.ts.map +1 -0
  358. package/dist/internal/index.js +5 -0
  359. package/dist/internal/index.js.map +1 -0
  360. package/dist/internal/numbers.d.ts +28 -0
  361. package/dist/internal/numbers.d.ts.map +1 -0
  362. package/dist/internal/numbers.js +139 -0
  363. package/dist/internal/numbers.js.map +1 -0
  364. package/dist/internal/schedule.d.ts +9 -0
  365. package/dist/internal/schedule.d.ts.map +1 -0
  366. package/dist/internal/schedule.js +10 -0
  367. package/dist/internal/schedule.js.map +1 -0
  368. package/dist/internal/stream-adapters.d.ts +10 -0
  369. package/dist/internal/stream-adapters.d.ts.map +1 -0
  370. package/dist/internal/stream-adapters.js +9 -0
  371. package/dist/internal/stream-adapters.js.map +1 -0
  372. package/dist/internal/viem-effect.d.ts +8 -0
  373. package/dist/internal/viem-effect.d.ts.map +1 -0
  374. package/dist/internal/viem-effect.js +14 -0
  375. package/dist/internal/viem-effect.js.map +1 -0
  376. package/dist/nonce/index.d.ts +3 -0
  377. package/dist/nonce/index.d.ts.map +1 -0
  378. package/dist/nonce/index.js +3 -0
  379. package/dist/nonce/index.js.map +1 -0
  380. package/dist/nonce/manager.d.ts +13 -0
  381. package/dist/nonce/manager.d.ts.map +1 -0
  382. package/dist/nonce/manager.js +100 -0
  383. package/dist/nonce/manager.js.map +1 -0
  384. package/dist/nonce/service.d.ts +46 -0
  385. package/dist/nonce/service.d.ts.map +1 -0
  386. package/dist/nonce/service.js +139 -0
  387. package/dist/nonce/service.js.map +1 -0
  388. package/dist/platform/browser/cursor-store/index.d.ts +2 -0
  389. package/dist/platform/browser/cursor-store/index.d.ts.map +1 -0
  390. package/dist/platform/browser/cursor-store/index.js +2 -0
  391. package/dist/platform/browser/cursor-store/index.js.map +1 -0
  392. package/dist/platform/browser/cursor-store/local-storage.d.ts +5 -0
  393. package/dist/platform/browser/cursor-store/local-storage.d.ts.map +1 -0
  394. package/dist/platform/browser/cursor-store/local-storage.js +99 -0
  395. package/dist/platform/browser/cursor-store/local-storage.js.map +1 -0
  396. package/dist/platform/browser/index.d.ts +6 -0
  397. package/dist/platform/browser/index.d.ts.map +1 -0
  398. package/dist/platform/browser/index.js +6 -0
  399. package/dist/platform/browser/index.js.map +1 -0
  400. package/dist/platform/browser/layers.d.ts +13 -0
  401. package/dist/platform/browser/layers.d.ts.map +1 -0
  402. package/dist/platform/browser/layers.js +8 -0
  403. package/dist/platform/browser/layers.js.map +1 -0
  404. package/dist/platform/browser/storage/errors.d.ts +28 -0
  405. package/dist/platform/browser/storage/errors.d.ts.map +1 -0
  406. package/dist/platform/browser/storage/errors.js +17 -0
  407. package/dist/platform/browser/storage/errors.js.map +1 -0
  408. package/dist/platform/browser/storage/index.d.ts +3 -0
  409. package/dist/platform/browser/storage/index.d.ts.map +1 -0
  410. package/dist/platform/browser/storage/index.js +3 -0
  411. package/dist/platform/browser/storage/index.js.map +1 -0
  412. package/dist/platform/browser/storage/local-storage.d.ts +10 -0
  413. package/dist/platform/browser/storage/local-storage.d.ts.map +1 -0
  414. package/dist/platform/browser/storage/local-storage.js +89 -0
  415. package/dist/platform/browser/storage/local-storage.js.map +1 -0
  416. package/dist/platform/browser/tx-persistence/index.d.ts +2 -0
  417. package/dist/platform/browser/tx-persistence/index.d.ts.map +1 -0
  418. package/dist/platform/browser/tx-persistence/index.js +2 -0
  419. package/dist/platform/browser/tx-persistence/index.js.map +1 -0
  420. package/dist/platform/browser/tx-persistence/persistence.d.ts +22 -0
  421. package/dist/platform/browser/tx-persistence/persistence.d.ts.map +1 -0
  422. package/dist/platform/browser/tx-persistence/persistence.js +170 -0
  423. package/dist/platform/browser/tx-persistence/persistence.js.map +1 -0
  424. package/dist/platform/browser/tx-store/errors.d.ts +3 -0
  425. package/dist/platform/browser/tx-store/errors.d.ts.map +1 -0
  426. package/dist/platform/browser/tx-store/errors.js +2 -0
  427. package/dist/platform/browser/tx-store/errors.js.map +1 -0
  428. package/dist/platform/browser/tx-store/index.d.ts +5 -0
  429. package/dist/platform/browser/tx-store/index.d.ts.map +1 -0
  430. package/dist/platform/browser/tx-store/index.js +4 -0
  431. package/dist/platform/browser/tx-store/index.js.map +1 -0
  432. package/dist/platform/browser/tx-store/local-storage.d.ts +9 -0
  433. package/dist/platform/browser/tx-store/local-storage.d.ts.map +1 -0
  434. package/dist/platform/browser/tx-store/local-storage.js +163 -0
  435. package/dist/platform/browser/tx-store/local-storage.js.map +1 -0
  436. package/dist/platform/browser/tx-store/store.d.ts +16 -0
  437. package/dist/platform/browser/tx-store/store.d.ts.map +1 -0
  438. package/dist/platform/browser/tx-store/store.js +35 -0
  439. package/dist/platform/browser/tx-store/store.js.map +1 -0
  440. package/dist/platform/browser/tx-store/types.d.ts +34 -0
  441. package/dist/platform/browser/tx-store/types.d.ts.map +1 -0
  442. package/dist/platform/browser/tx-store/types.js +4 -0
  443. package/dist/platform/browser/tx-store/types.js.map +1 -0
  444. package/dist/presets/index.d.ts +3 -0
  445. package/dist/presets/index.d.ts.map +1 -0
  446. package/dist/presets/index.js +3 -0
  447. package/dist/presets/index.js.map +1 -0
  448. package/dist/presets/layers.d.ts +59 -0
  449. package/dist/presets/layers.d.ts.map +1 -0
  450. package/dist/presets/layers.js +317 -0
  451. package/dist/presets/layers.js.map +1 -0
  452. package/dist/presets/transports.d.ts +16 -0
  453. package/dist/presets/transports.d.ts.map +1 -0
  454. package/dist/presets/transports.js +19 -0
  455. package/dist/presets/transports.js.map +1 -0
  456. package/dist/query/chain-head.d.ts +14 -0
  457. package/dist/query/chain-head.d.ts.map +1 -0
  458. package/dist/query/chain-head.js +34 -0
  459. package/dist/query/chain-head.js.map +1 -0
  460. package/dist/query/client.d.ts +21 -0
  461. package/dist/query/client.d.ts.map +1 -0
  462. package/dist/query/client.js +64 -0
  463. package/dist/query/client.js.map +1 -0
  464. package/dist/query/contract-query.d.ts +25 -0
  465. package/dist/query/contract-query.d.ts.map +1 -0
  466. package/dist/query/contract-query.js +76 -0
  467. package/dist/query/contract-query.js.map +1 -0
  468. package/dist/query/index.d.ts +5 -0
  469. package/dist/query/index.d.ts.map +1 -0
  470. package/dist/query/index.js +5 -0
  471. package/dist/query/index.js.map +1 -0
  472. package/dist/query/multicall-batcher.d.ts +16 -0
  473. package/dist/query/multicall-batcher.d.ts.map +1 -0
  474. package/dist/query/multicall-batcher.js +62 -0
  475. package/dist/query/multicall-batcher.js.map +1 -0
  476. package/dist/react-hooks/index.d.ts +9 -0
  477. package/dist/react-hooks/index.d.ts.map +1 -0
  478. package/dist/react-hooks/index.js +7 -0
  479. package/dist/react-hooks/index.js.map +1 -0
  480. package/dist/react-hooks/use-is-safe-multisig.d.ts +2 -0
  481. package/dist/react-hooks/use-is-safe-multisig.d.ts.map +1 -0
  482. package/dist/react-hooks/use-is-safe-multisig.js +44 -0
  483. package/dist/react-hooks/use-is-safe-multisig.js.map +1 -0
  484. package/dist/react-hooks/use-safe-context.d.ts +2 -0
  485. package/dist/react-hooks/use-safe-context.d.ts.map +1 -0
  486. package/dist/react-hooks/use-safe-context.js +41 -0
  487. package/dist/react-hooks/use-safe-context.js.map +1 -0
  488. package/dist/react-hooks/wagmi/index.d.ts +2 -0
  489. package/dist/react-hooks/wagmi/index.d.ts.map +1 -0
  490. package/dist/react-hooks/wagmi/index.js +3 -0
  491. package/dist/react-hooks/wagmi/index.js.map +1 -0
  492. package/dist/rpc/cache.d.ts +25 -0
  493. package/dist/rpc/cache.d.ts.map +1 -0
  494. package/dist/rpc/cache.js +127 -0
  495. package/dist/rpc/cache.js.map +1 -0
  496. package/dist/rpc/circuit-breaker.d.ts +28 -0
  497. package/dist/rpc/circuit-breaker.d.ts.map +1 -0
  498. package/dist/rpc/circuit-breaker.js +108 -0
  499. package/dist/rpc/circuit-breaker.js.map +1 -0
  500. package/dist/rpc/dedup.d.ts +10 -0
  501. package/dist/rpc/dedup.d.ts.map +1 -0
  502. package/dist/rpc/dedup.js +39 -0
  503. package/dist/rpc/dedup.js.map +1 -0
  504. package/dist/rpc/index.d.ts +6 -0
  505. package/dist/rpc/index.d.ts.map +1 -0
  506. package/dist/rpc/index.js +6 -0
  507. package/dist/rpc/index.js.map +1 -0
  508. package/dist/rpc/retry.d.ts +15 -0
  509. package/dist/rpc/retry.d.ts.map +1 -0
  510. package/dist/rpc/retry.js +34 -0
  511. package/dist/rpc/retry.js.map +1 -0
  512. package/dist/rpc/routemesh.d.ts +29 -0
  513. package/dist/rpc/routemesh.d.ts.map +1 -0
  514. package/dist/rpc/routemesh.js +21 -0
  515. package/dist/rpc/routemesh.js.map +1 -0
  516. package/dist/safe/adapter.d.ts +9 -0
  517. package/dist/safe/adapter.d.ts.map +1 -0
  518. package/dist/safe/adapter.js +13 -0
  519. package/dist/safe/adapter.js.map +1 -0
  520. package/dist/safe/detection.d.ts +26 -0
  521. package/dist/safe/detection.d.ts.map +1 -0
  522. package/dist/safe/detection.js +102 -0
  523. package/dist/safe/detection.js.map +1 -0
  524. package/dist/safe/errors.d.ts +79 -0
  525. package/dist/safe/errors.d.ts.map +1 -0
  526. package/dist/safe/errors.js +34 -0
  527. package/dist/safe/errors.js.map +1 -0
  528. package/dist/safe/index.d.ts +8 -0
  529. package/dist/safe/index.d.ts.map +1 -0
  530. package/dist/safe/index.js +6 -0
  531. package/dist/safe/index.js.map +1 -0
  532. package/dist/safe/live.d.ts +8 -0
  533. package/dist/safe/live.d.ts.map +1 -0
  534. package/dist/safe/live.js +250 -0
  535. package/dist/safe/live.js.map +1 -0
  536. package/dist/safe/service.d.ts +26 -0
  537. package/dist/safe/service.d.ts.map +1 -0
  538. package/dist/safe/service.js +4 -0
  539. package/dist/safe/service.js.map +1 -0
  540. package/dist/safe/simulation/abis.d.ts +73 -0
  541. package/dist/safe/simulation/abis.d.ts.map +1 -0
  542. package/dist/safe/simulation/abis.js +61 -0
  543. package/dist/safe/simulation/abis.js.map +1 -0
  544. package/dist/safe/simulation/addresses.d.ts +4 -0
  545. package/dist/safe/simulation/addresses.d.ts.map +1 -0
  546. package/dist/safe/simulation/addresses.js +40 -0
  547. package/dist/safe/simulation/addresses.js.map +1 -0
  548. package/dist/safe/simulation/encoding.d.ts +16 -0
  549. package/dist/safe/simulation/encoding.d.ts.map +1 -0
  550. package/dist/safe/simulation/encoding.js +36 -0
  551. package/dist/safe/simulation/encoding.js.map +1 -0
  552. package/dist/safe/simulation/errors.d.ts +56 -0
  553. package/dist/safe/simulation/errors.d.ts.map +1 -0
  554. package/dist/safe/simulation/errors.js +37 -0
  555. package/dist/safe/simulation/errors.js.map +1 -0
  556. package/dist/safe/simulation/index.d.ts +7 -0
  557. package/dist/safe/simulation/index.d.ts.map +1 -0
  558. package/dist/safe/simulation/index.js +6 -0
  559. package/dist/safe/simulation/index.js.map +1 -0
  560. package/dist/safe/simulation/service.d.ts +14 -0
  561. package/dist/safe/simulation/service.d.ts.map +1 -0
  562. package/dist/safe/simulation/service.js +140 -0
  563. package/dist/safe/simulation/service.js.map +1 -0
  564. package/dist/safe/simulation/types.d.ts +20 -0
  565. package/dist/safe/simulation/types.d.ts.map +1 -0
  566. package/dist/safe/simulation/types.js +2 -0
  567. package/dist/safe/simulation/types.js.map +1 -0
  568. package/dist/safe/types.d.ts +61 -0
  569. package/dist/safe/types.d.ts.map +1 -0
  570. package/dist/safe/types.js +2 -0
  571. package/dist/safe/types.js.map +1 -0
  572. package/dist/signature/errors.d.ts +29 -0
  573. package/dist/signature/errors.d.ts.map +1 -0
  574. package/dist/signature/errors.js +19 -0
  575. package/dist/signature/errors.js.map +1 -0
  576. package/dist/signature/index.d.ts +4 -0
  577. package/dist/signature/index.d.ts.map +1 -0
  578. package/dist/signature/index.js +4 -0
  579. package/dist/signature/index.js.map +1 -0
  580. package/dist/signature/service.d.ts +34 -0
  581. package/dist/signature/service.d.ts.map +1 -0
  582. package/dist/signature/service.js +97 -0
  583. package/dist/signature/service.js.map +1 -0
  584. package/dist/signature/utils.d.ts +13 -0
  585. package/dist/signature/utils.d.ts.map +1 -0
  586. package/dist/signature/utils.js +17 -0
  587. package/dist/signature/utils.js.map +1 -0
  588. package/dist/simulation/errors.d.ts +36 -0
  589. package/dist/simulation/errors.d.ts.map +1 -0
  590. package/dist/simulation/errors.js +23 -0
  591. package/dist/simulation/errors.js.map +1 -0
  592. package/dist/simulation/index.d.ts +5 -0
  593. package/dist/simulation/index.d.ts.map +1 -0
  594. package/dist/simulation/index.js +5 -0
  595. package/dist/simulation/index.js.map +1 -0
  596. package/dist/simulation/service.d.ts +34 -0
  597. package/dist/simulation/service.d.ts.map +1 -0
  598. package/dist/simulation/service.js +149 -0
  599. package/dist/simulation/service.js.map +1 -0
  600. package/dist/simulation/tenderly.d.ts +26 -0
  601. package/dist/simulation/tenderly.d.ts.map +1 -0
  602. package/dist/simulation/tenderly.js +200 -0
  603. package/dist/simulation/tenderly.js.map +1 -0
  604. package/dist/simulation/types.d.ts +47 -0
  605. package/dist/simulation/types.d.ts.map +1 -0
  606. package/dist/simulation/types.js +2 -0
  607. package/dist/simulation/types.js.map +1 -0
  608. package/dist/subscriptions/block-subscription.d.ts +10 -0
  609. package/dist/subscriptions/block-subscription.d.ts.map +1 -0
  610. package/dist/subscriptions/block-subscription.js +31 -0
  611. package/dist/subscriptions/block-subscription.js.map +1 -0
  612. package/dist/subscriptions/errors.d.ts +21 -0
  613. package/dist/subscriptions/errors.d.ts.map +1 -0
  614. package/dist/subscriptions/errors.js +14 -0
  615. package/dist/subscriptions/errors.js.map +1 -0
  616. package/dist/subscriptions/index.d.ts +6 -0
  617. package/dist/subscriptions/index.d.ts.map +1 -0
  618. package/dist/subscriptions/index.js +6 -0
  619. package/dist/subscriptions/index.js.map +1 -0
  620. package/dist/subscriptions/log-subscription.d.ts +11 -0
  621. package/dist/subscriptions/log-subscription.d.ts.map +1 -0
  622. package/dist/subscriptions/log-subscription.js +35 -0
  623. package/dist/subscriptions/log-subscription.js.map +1 -0
  624. package/dist/subscriptions/pending-tx.d.ts +8 -0
  625. package/dist/subscriptions/pending-tx.d.ts.map +1 -0
  626. package/dist/subscriptions/pending-tx.js +39 -0
  627. package/dist/subscriptions/pending-tx.js.map +1 -0
  628. package/dist/subscriptions/service.d.ts +64 -0
  629. package/dist/subscriptions/service.d.ts.map +1 -0
  630. package/dist/subscriptions/service.js +56 -0
  631. package/dist/subscriptions/service.js.map +1 -0
  632. package/dist/telemetry/index.d.ts +3 -0
  633. package/dist/telemetry/index.d.ts.map +1 -0
  634. package/dist/telemetry/index.js +3 -0
  635. package/dist/telemetry/index.js.map +1 -0
  636. package/dist/telemetry/logger.d.ts +27 -0
  637. package/dist/telemetry/logger.d.ts.map +1 -0
  638. package/dist/telemetry/logger.js +7 -0
  639. package/dist/telemetry/logger.js.map +1 -0
  640. package/dist/telemetry/tracer.d.ts +94 -0
  641. package/dist/telemetry/tracer.d.ts.map +1 -0
  642. package/dist/telemetry/tracer.js +94 -0
  643. package/dist/telemetry/tracer.js.map +1 -0
  644. package/dist/testing-kit/_fixtures/addresses.d.ts +6 -0
  645. package/dist/testing-kit/_fixtures/addresses.d.ts.map +1 -0
  646. package/dist/testing-kit/_fixtures/addresses.js +7 -0
  647. package/dist/testing-kit/_fixtures/addresses.js.map +1 -0
  648. package/dist/testing-kit/_fixtures/receipts.d.ts +19 -0
  649. package/dist/testing-kit/_fixtures/receipts.d.ts.map +1 -0
  650. package/dist/testing-kit/_fixtures/receipts.js +22 -0
  651. package/dist/testing-kit/_fixtures/receipts.js.map +1 -0
  652. package/dist/testing-kit/helpers.d.ts +21 -0
  653. package/dist/testing-kit/helpers.d.ts.map +1 -0
  654. package/dist/testing-kit/helpers.js +56 -0
  655. package/dist/testing-kit/helpers.js.map +1 -0
  656. package/dist/testing-kit/index.d.ts +34 -0
  657. package/dist/testing-kit/index.d.ts.map +1 -0
  658. package/dist/testing-kit/index.js +19 -0
  659. package/dist/testing-kit/index.js.map +1 -0
  660. package/dist/testing-kit/mock-balance-service.d.ts +47 -0
  661. package/dist/testing-kit/mock-balance-service.d.ts.map +1 -0
  662. package/dist/testing-kit/mock-balance-service.js +28 -0
  663. package/dist/testing-kit/mock-balance-service.js.map +1 -0
  664. package/dist/testing-kit/mock-block-service.d.ts +44 -0
  665. package/dist/testing-kit/mock-block-service.d.ts.map +1 -0
  666. package/dist/testing-kit/mock-block-service.js +55 -0
  667. package/dist/testing-kit/mock-block-service.js.map +1 -0
  668. package/dist/testing-kit/mock-cross-chain-reader.d.ts +18 -0
  669. package/dist/testing-kit/mock-cross-chain-reader.d.ts.map +1 -0
  670. package/dist/testing-kit/mock-cross-chain-reader.js +65 -0
  671. package/dist/testing-kit/mock-cross-chain-reader.js.map +1 -0
  672. package/dist/testing-kit/mock-deploy-service.d.ts +47 -0
  673. package/dist/testing-kit/mock-deploy-service.d.ts.map +1 -0
  674. package/dist/testing-kit/mock-deploy-service.js +52 -0
  675. package/dist/testing-kit/mock-deploy-service.js.map +1 -0
  676. package/dist/testing-kit/mock-erc721-service.d.ts +87 -0
  677. package/dist/testing-kit/mock-erc721-service.d.ts.map +1 -0
  678. package/dist/testing-kit/mock-erc721-service.js +41 -0
  679. package/dist/testing-kit/mock-erc721-service.js.map +1 -0
  680. package/dist/testing-kit/mock-gas-service.d.ts +33 -0
  681. package/dist/testing-kit/mock-gas-service.d.ts.map +1 -0
  682. package/dist/testing-kit/mock-gas-service.js +58 -0
  683. package/dist/testing-kit/mock-gas-service.js.map +1 -0
  684. package/dist/testing-kit/mock-nonce-service.d.ts +43 -0
  685. package/dist/testing-kit/mock-nonce-service.d.ts.map +1 -0
  686. package/dist/testing-kit/mock-nonce-service.js +24 -0
  687. package/dist/testing-kit/mock-nonce-service.js.map +1 -0
  688. package/dist/testing-kit/mock-public-client.d.ts +56 -0
  689. package/dist/testing-kit/mock-public-client.d.ts.map +1 -0
  690. package/dist/testing-kit/mock-public-client.js +91 -0
  691. package/dist/testing-kit/mock-public-client.js.map +1 -0
  692. package/dist/testing-kit/mock-signature-service.d.ts +50 -0
  693. package/dist/testing-kit/mock-signature-service.d.ts.map +1 -0
  694. package/dist/testing-kit/mock-signature-service.js +30 -0
  695. package/dist/testing-kit/mock-signature-service.js.map +1 -0
  696. package/dist/testing-kit/mock-simulation-service.d.ts +29 -0
  697. package/dist/testing-kit/mock-simulation-service.d.ts.map +1 -0
  698. package/dist/testing-kit/mock-simulation-service.js +28 -0
  699. package/dist/testing-kit/mock-simulation-service.js.map +1 -0
  700. package/dist/testing-kit/mock-subscription-service.d.ts +52 -0
  701. package/dist/testing-kit/mock-subscription-service.d.ts.map +1 -0
  702. package/dist/testing-kit/mock-subscription-service.js +49 -0
  703. package/dist/testing-kit/mock-subscription-service.js.map +1 -0
  704. package/dist/testing-kit/mock-transfer-service.d.ts +28 -0
  705. package/dist/testing-kit/mock-transfer-service.d.ts.map +1 -0
  706. package/dist/testing-kit/mock-transfer-service.js +17 -0
  707. package/dist/testing-kit/mock-transfer-service.js.map +1 -0
  708. package/dist/testing-kit/mock-wallet-client.d.ts +17 -0
  709. package/dist/testing-kit/mock-wallet-client.d.ts.map +1 -0
  710. package/dist/testing-kit/mock-wallet-client.js +30 -0
  711. package/dist/testing-kit/mock-wallet-client.js.map +1 -0
  712. package/dist/testing-kit/mock-wallet-provider.d.ts +11 -0
  713. package/dist/testing-kit/mock-wallet-provider.d.ts.map +1 -0
  714. package/dist/testing-kit/mock-wallet-provider.js +6 -0
  715. package/dist/testing-kit/mock-wallet-provider.js.map +1 -0
  716. package/dist/testing-kit/test-layer.d.ts +42 -0
  717. package/dist/testing-kit/test-layer.d.ts.map +1 -0
  718. package/dist/testing-kit/test-layer.js +65 -0
  719. package/dist/testing-kit/test-layer.js.map +1 -0
  720. package/dist/transfer/index.d.ts +2 -0
  721. package/dist/transfer/index.d.ts.map +1 -0
  722. package/dist/transfer/index.js +2 -0
  723. package/dist/transfer/index.js.map +1 -0
  724. package/dist/transfer/service.d.ts +37 -0
  725. package/dist/transfer/service.d.ts.map +1 -0
  726. package/dist/transfer/service.js +146 -0
  727. package/dist/transfer/service.js.map +1 -0
  728. package/dist/tx/fees.d.ts +17 -0
  729. package/dist/tx/fees.d.ts.map +1 -0
  730. package/dist/tx/fees.js +49 -0
  731. package/dist/tx/fees.js.map +1 -0
  732. package/dist/tx/index.d.ts +6 -0
  733. package/dist/tx/index.d.ts.map +1 -0
  734. package/dist/tx/index.js +6 -0
  735. package/dist/tx/index.js.map +1 -0
  736. package/dist/tx/manager.d.ts +23 -0
  737. package/dist/tx/manager.d.ts.map +1 -0
  738. package/dist/tx/manager.js +240 -0
  739. package/dist/tx/manager.js.map +1 -0
  740. package/dist/tx/policy.d.ts +18 -0
  741. package/dist/tx/policy.d.ts.map +1 -0
  742. package/dist/tx/policy.js +9 -0
  743. package/dist/tx/policy.js.map +1 -0
  744. package/dist/tx/replacement.d.ts +17 -0
  745. package/dist/tx/replacement.d.ts.map +1 -0
  746. package/dist/tx/replacement.js +116 -0
  747. package/dist/tx/replacement.js.map +1 -0
  748. package/dist/tx/tracker.d.ts +72 -0
  749. package/dist/tx/tracker.d.ts.map +1 -0
  750. package/dist/tx/tracker.js +95 -0
  751. package/dist/tx/tracker.js.map +1 -0
  752. package/dist/types/abi.d.ts +13 -0
  753. package/dist/types/abi.d.ts.map +1 -0
  754. package/dist/types/abi.js +2 -0
  755. package/dist/types/abi.js.map +1 -0
  756. package/dist/types/index.d.ts +4 -0
  757. package/dist/types/index.d.ts.map +1 -0
  758. package/dist/types/index.js +4 -0
  759. package/dist/types/index.js.map +1 -0
  760. package/dist/types/params.d.ts +56 -0
  761. package/dist/types/params.d.ts.map +1 -0
  762. package/dist/types/params.js +2 -0
  763. package/dist/types/params.js.map +1 -0
  764. package/dist/types/tx-overrides.d.ts +20 -0
  765. package/dist/types/tx-overrides.d.ts.map +1 -0
  766. package/dist/types/tx-overrides.js +2 -0
  767. package/dist/types/tx-overrides.js.map +1 -0
  768. package/dist/wagmi/index.d.ts +2 -0
  769. package/dist/wagmi/index.d.ts.map +1 -0
  770. package/dist/wagmi/index.js +2 -0
  771. package/dist/wagmi/index.js.map +1 -0
  772. package/dist/wagmi/layers.d.ts +2 -0
  773. package/dist/wagmi/layers.d.ts.map +1 -0
  774. package/dist/wagmi/layers.js +2 -0
  775. package/dist/wagmi/layers.js.map +1 -0
  776. package/dist/wallet/errors.d.ts +68 -0
  777. package/dist/wallet/errors.d.ts.map +1 -0
  778. package/dist/wallet/errors.js +43 -0
  779. package/dist/wallet/errors.js.map +1 -0
  780. package/dist/wallet/index.d.ts +7 -0
  781. package/dist/wallet/index.d.ts.map +1 -0
  782. package/dist/wallet/index.js +7 -0
  783. package/dist/wallet/index.js.map +1 -0
  784. package/dist/wallet/lifecycle.d.ts +22 -0
  785. package/dist/wallet/lifecycle.d.ts.map +1 -0
  786. package/dist/wallet/lifecycle.js +242 -0
  787. package/dist/wallet/lifecycle.js.map +1 -0
  788. package/dist/wallet/operations.d.ts +8 -0
  789. package/dist/wallet/operations.d.ts.map +1 -0
  790. package/dist/wallet/operations.js +211 -0
  791. package/dist/wallet/operations.js.map +1 -0
  792. package/dist/wallet/provider-ref.d.ts +14 -0
  793. package/dist/wallet/provider-ref.d.ts.map +1 -0
  794. package/dist/wallet/provider-ref.js +13 -0
  795. package/dist/wallet/provider-ref.js.map +1 -0
  796. package/dist/wallet/service.d.ts +22 -0
  797. package/dist/wallet/service.d.ts.map +1 -0
  798. package/dist/wallet/service.js +156 -0
  799. package/dist/wallet/service.js.map +1 -0
  800. package/dist/wallet/types.d.ts +37 -0
  801. package/dist/wallet/types.d.ts.map +1 -0
  802. package/dist/wallet/types.js +2 -0
  803. package/dist/wallet/types.js.map +1 -0
  804. package/package.json +87 -0
package/DOCS.md ADDED
@@ -0,0 +1,798 @@
1
+ # effect-evm usage
2
+
3
+ Type-safe, composable EVM services for [Effect](https://effect.website), built on [viem](https://viem.sh).
4
+
5
+ ## High-level flow
6
+
7
+ 1. Configure chain RPCs (`ChainConfig[]`)
8
+ 2. Provide a Layer (`makeEffectEvmLayer` for dapps, or `makePublicClientLayer` for read-only) + any optional service
9
+ layers
10
+ 3. Read via `ContractReader` (or `typedContract`) and higher-level helpers like `BalanceService`
11
+ 4. Write via `ContractPipeline` (simulate -> estimate -> send -> wait -> decode), or dedicated services like
12
+ `DeployService`
13
+ 5. Stream/decode events via `EventStream` (or `ReliableEventStream` for confirmations), or raw watchers via
14
+ `SubscriptionService`
15
+ 6. In tests, use `effect-evm/testing-kit`
16
+
17
+ ```mermaid
18
+ flowchart LR
19
+ Config["ChainConfig[]"] --> Layers["Layer factories"]
20
+ Layers --> Public["makePublicClientLayer (read-only)"]
21
+ Layers --> Dapp["makeEffectEvmLayer (dapp + wallet)"]
22
+
23
+ Public --> PC["PublicClientService"]
24
+ Dapp --> PC
25
+ Dapp --> WC["WalletClientService"]
26
+
27
+ PC --> Reader["ContractReader"]
28
+ PC --> Balance["BalanceService"]
29
+ PC --> Block["BlockService"]
30
+ PC --> Events["EventStream"]
31
+ PC --> Gas["GasService"]
32
+ PC --> Nonce["NonceService"]
33
+ PC --> Subs["SubscriptionService"]
34
+ Events --> Reliable["ReliableEventStream (confirmations, reorg filtering)"]
35
+
36
+ WC --> Writer["ContractWriter"]
37
+ WC --> Deploy["DeployService"]
38
+ WC --> Pipeline["ContractPipeline"]
39
+ WC --> ERC721["Erc721Service"]
40
+ Pipeline --> Tx["TxManager"]
41
+ Deploy --> Tx
42
+
43
+ Reader --> Typed["typedContract (ABI-baked helper)"]
44
+ Pipeline --> Typed
45
+ ```
46
+
47
+ ## Optional service layers
48
+
49
+ `makeEffectEvmLayer` wires the core contract / tx / event services. Add the newer service modules by merging their
50
+ `*Live` layers.
51
+
52
+ ```typescript
53
+ import { Layer } from "effect";
54
+ import {
55
+ BalanceServiceLive,
56
+ BlockServiceLive,
57
+ DeployServiceLive,
58
+ Erc721ServiceLive,
59
+ GasServiceLive,
60
+ NonceServiceLive,
61
+ SignatureServiceLive,
62
+ SimulationServiceLive,
63
+ SubscriptionServiceLive,
64
+ makeEffectEvmLayer,
65
+ } from "effect-evm";
66
+
67
+ // configs: ChainConfig[] (see Quick Start)
68
+ // provider: EIP-1193 (e.g. window.ethereum)
69
+ const provider = window.ethereum;
70
+ const BaseLayer = makeEffectEvmLayer(configs, provider);
71
+
72
+ export const EvmLayer = Layer.provideMerge(
73
+ Layer.mergeAll(
74
+ BalanceServiceLive,
75
+ BlockServiceLive,
76
+ GasServiceLive,
77
+ NonceServiceLive,
78
+ SignatureServiceLive,
79
+ SubscriptionServiceLive,
80
+ DeployServiceLive,
81
+ Erc721ServiceLive,
82
+ SimulationServiceLive,
83
+ ),
84
+ BaseLayer,
85
+ );
86
+ ```
87
+
88
+ Notes:
89
+
90
+ - Public-client only: `BalanceService`, `BlockService`, `GasService`, `NonceService`, `SubscriptionService`
91
+ - Wallet required: `ContractWriter`, `ContractPipeline`, `DeployService`, `Erc721Service`
92
+ - No chain clients: `SignatureService`
93
+ - Tenderly: `SimulationService` (requires env vars below)
94
+
95
+ ## Installation
96
+
97
+ ```bash
98
+ bun add effect-evm
99
+ ```
100
+
101
+ **Peer dependencies**
102
+
103
+ - `effect@^3.19.11`
104
+ - `@effect/platform@^0.93.7`
105
+ - `viem@^2.0.0`
106
+ - Optional: `@wagmi/core@^2.0.0` (for `effect-evm/wagmi`)
107
+ - Optional: `react@>=18.2.0`, `react-dom@>=18.2.0` (for `effect-evm/react-hooks`)
108
+
109
+ ## Quick Start
110
+
111
+ ```typescript
112
+ import { Effect } from "effect";
113
+ import { mainnet } from "viem/chains";
114
+ import { ContractReader, erc20Abi, makeEffectEvmLayer, type ChainConfig } from "effect-evm";
115
+
116
+ // 1. Configure chains
117
+ const configs: ChainConfig[] = [{ chainId: 1, chain: mainnet, rpcUrls: ["https://rpc.example"] }];
118
+
119
+ // 2. Create the layer (provider is your EIP-1193 wallet)
120
+ const EvmLayer = makeEffectEvmLayer(configs, window.ethereum);
121
+
122
+ // 3. Use services
123
+ const program = Effect.gen(function* () {
124
+ const reader = yield* ContractReader;
125
+
126
+ const balance = yield* reader.read({
127
+ chainId: 1,
128
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
129
+ abi: erc20Abi,
130
+ functionName: "balanceOf",
131
+ args: ["0x..."],
132
+ });
133
+
134
+ return balance;
135
+ });
136
+
137
+ // 4. Run
138
+ Effect.runPromise(program.pipe(Effect.provide(EvmLayer)));
139
+ ```
140
+
141
+ ## ChainConfig
142
+
143
+ `makePublicClientLayer` / `makeEffectEvmLayer` take `ChainConfig[]`.
144
+
145
+ ```ts
146
+ export type ChainConfig = {
147
+ chainId: number;
148
+ chain: Chain;
149
+ rpcUrls: string[]; // HTTP fallback order
150
+ wsUrls?: string[]; // optional; used for subscriptions when present
151
+ http?: { retryCount?: number; retryDelay?: number; timeout?: number };
152
+ ws?: { retryCount?: number; retryDelay?: number; timeout?: number; keepAlive?: boolean; reconnect?: boolean };
153
+ rpcMiddleware?: {
154
+ retry?: { retryCount?: number; retryDelay?: number; timeout?: number };
155
+ circuitBreaker?: { failureThreshold?: number; resetTimeoutMs?: number };
156
+ dedup?: boolean;
157
+ };
158
+ transport?: Transport; // escape hatch; takes precedence
159
+ };
160
+ ```
161
+
162
+ **Migration note**: old `{ rpcUrl: "..." }` becomes `{ rpcUrls: ["..."] }`.
163
+
164
+ **Recommended production config (example)**
165
+
166
+ ```ts
167
+ const configs: ChainConfig[] = [
168
+ {
169
+ chainId: 1,
170
+ chain: mainnet,
171
+ rpcUrls: ["https://rpc1.example", "https://rpc2.example"],
172
+ wsUrls: ["wss://ws1.example"],
173
+ rpcMiddleware: {
174
+ retry: { retryCount: 3, retryDelay: 150, timeout: 10_000 },
175
+ circuitBreaker: { failureThreshold: 5, resetTimeoutMs: 15_000 },
176
+ dedup: true,
177
+ },
178
+ },
179
+ ];
180
+ ```
181
+
182
+ ## Using wagmi v2
183
+
184
+ If your app already uses wagmi v2 for wallet connections and chain config, you can build effect-evm layers directly from
185
+ your wagmi `config`.
186
+
187
+ ```typescript
188
+ import { Effect } from "effect";
189
+ import { createConfig, http } from "wagmi";
190
+ import { mainnet, sepolia } from "wagmi/chains";
191
+ import { injected } from "wagmi/connectors";
192
+ import { makeEffectEvmLayerFromWagmi } from "effect-evm/wagmi";
193
+
194
+ export const wagmiConfig = createConfig({
195
+ chains: [mainnet, sepolia],
196
+ connectors: [injected()],
197
+ transports: {
198
+ [mainnet.id]: http("https://mainnet.example.com"),
199
+ [sepolia.id]: http("https://sepolia.example.com"),
200
+ },
201
+ });
202
+
203
+ const EvmLayer = makeEffectEvmLayerFromWagmi(wagmiConfig);
204
+
205
+ // Use services as usual
206
+ Effect.runPromise(program.pipe(Effect.provide(EvmLayer)));
207
+ ```
208
+
209
+ ## React Hooks
210
+
211
+ The `effect-evm/react-hooks` module provides React integration for Effect-EVM services.
212
+
213
+ ### Provider setup
214
+
215
+ Wrap your app with `EffectEvmProvider` to provide the Effect runtime:
216
+
217
+ ```typescript
218
+ import { EffectEvmProvider } from "effect-evm/react-hooks";
219
+ import { makeEffectEvmLayer } from "effect-evm";
220
+
221
+ const EvmLayer = makeEffectEvmLayer(configs, window.ethereum);
222
+
223
+ function App() {
224
+ return (
225
+ <EffectEvmProvider layer={EvmLayer}>
226
+ <YourApp />
227
+ </EffectEvmProvider>
228
+ );
229
+ }
230
+ ```
231
+
232
+ ### Primitive hooks
233
+
234
+ Low-level hooks for running Effects and Streams in React:
235
+
236
+ ```typescript
237
+ import { useEffectOnce, useEffectMemo, useStream, useSubscriptionRef } from "effect-evm/react-hooks";
238
+
239
+ // Run an Effect once on mount
240
+ const { data, error, status } = useEffectOnce(() => someEffect);
241
+
242
+ // Run an Effect when dependencies change (memoized)
243
+ const { data, error, status } = useEffectMemo(() => someEffect, [dep1, dep2]);
244
+
245
+ // Subscribe to an Effect Stream
246
+ const { status, value, error } = useStream(someStream);
247
+
248
+ // Subscribe to an Effect SubscriptionRef
249
+ const value = useSubscriptionRef(subscriptionRef);
250
+ ```
251
+
252
+ ### Convenience hooks
253
+
254
+ Higher-level hooks for common contract operations:
255
+
256
+ ```typescript
257
+ import { useContractRead, useWatchContractRead, useWriteAndTrack } from "effect-evm/react-hooks/convenience";
258
+
259
+ // Read a contract value (cached via ContractQuery)
260
+ const { data, error, status } = useContractRead({
261
+ chainId: 1,
262
+ address: tokenAddress,
263
+ abi: erc20Abi,
264
+ functionName: "balanceOf",
265
+ args: [userAddress],
266
+ });
267
+
268
+ // Watch a contract value (re-fetches on new blocks)
269
+ const { status, value, error } = useWatchContractRead({
270
+ chainId: 1,
271
+ address: tokenAddress,
272
+ abi: erc20Abi,
273
+ functionName: "totalSupply",
274
+ });
275
+
276
+ // Write with reactive transaction state
277
+ const { send, state, result, actions } = useWriteAndTrack({
278
+ chainId: 1,
279
+ address: tokenAddress,
280
+ abi: erc20Abi,
281
+ functionName: "transfer",
282
+ args: [recipient, amount],
283
+ account: userAddress,
284
+ });
285
+
286
+ // state contains: { status, hash, receipt, ... }
287
+ // actions contains: { cancel, speedup }
288
+ ```
289
+
290
+ ### Wagmi + React integration
291
+
292
+ For apps using wagmi, use `WagmiEffectEvmProvider` which syncs wallet state automatically:
293
+
294
+ ```typescript
295
+ import { WagmiEffectEvmProvider } from "effect-evm/react-hooks/wagmi";
296
+ import { wagmiConfig } from "./wagmi";
297
+
298
+ function App() {
299
+ return (
300
+ <WagmiEffectEvmProvider wagmiConfig={wagmiConfig}>
301
+ <YourApp />
302
+ </WagmiEffectEvmProvider>
303
+ );
304
+ }
305
+ ```
306
+
307
+ ## Read-only (no wallet)
308
+
309
+ If you only need reads (e.g. backend jobs), provide `PublicClientService` + `ContractReaderLive` without a wallet
310
+ provider.
311
+
312
+ ```typescript
313
+ import { Effect, Layer } from "effect";
314
+ import { ContractReader, ContractReaderLive, erc20Abi, makePublicClientLayer, type ChainConfig } from "effect-evm";
315
+ import { mainnet } from "viem/chains";
316
+
317
+ const configs: ChainConfig[] = [{ chainId: 1, chain: mainnet, rpcUrls: ["https://rpc.example"] }];
318
+ const ReadLayer = Layer.provide(ContractReaderLive, makePublicClientLayer(configs));
319
+
320
+ const program = Effect.gen(function* () {
321
+ const reader = yield* ContractReader;
322
+ return yield* reader.read({
323
+ chainId: 1,
324
+ address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
325
+ abi: erc20Abi,
326
+ functionName: "symbol",
327
+ });
328
+ });
329
+
330
+ Effect.runPromise(program.pipe(Effect.provide(ReadLayer)));
331
+ ```
332
+
333
+ ## Reads
334
+
335
+ Use `ContractReader.read` for single calls and `ContractReader.multicall` to batch.
336
+
337
+ ```typescript
338
+ import { Effect } from "effect";
339
+ import { ContractReader, erc20Abi, typedContract } from "effect-evm";
340
+
341
+ const usdc = typedContract(erc20Abi, "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48");
342
+
343
+ const program = Effect.gen(function* () {
344
+ const reader = yield* ContractReader;
345
+
346
+ const [symbol, decimals] = yield* reader.multicall(1, [
347
+ { address: usdc.address, abi: usdc.abi, functionName: "symbol" },
348
+ { address: usdc.address, abi: usdc.abi, functionName: "decimals" },
349
+ ]);
350
+
351
+ const balance = yield* usdc.read(1, "balanceOf", ["0x..."]);
352
+
353
+ return { balance, decimals, symbol };
354
+ });
355
+ ```
356
+
357
+ ## Balances
358
+
359
+ Use `BalanceService` for native and ERC-20 balances (single + batch/multicall) and simple balance streams.
360
+
361
+ ```typescript
362
+ import { Effect } from "effect";
363
+ import { BalanceService } from "effect-evm";
364
+
365
+ const program = Effect.gen(function* () {
366
+ const balances = yield* BalanceService;
367
+
368
+ const eth = yield* balances.getBalance({ chainId: 1, address: "0x..." });
369
+ const tokens = yield* balances.getTokenBalances({
370
+ chainId: 1,
371
+ address: "0x...",
372
+ tokenAddresses: ["0x...", "0x..."],
373
+ });
374
+
375
+ return { eth, tokens };
376
+ });
377
+ ```
378
+
379
+ ## Blocks
380
+
381
+ Use `BlockService` for block lookups, range fetches, and block streams.
382
+
383
+ ```typescript
384
+ import { Effect } from "effect";
385
+ import { BlockService } from "effect-evm";
386
+
387
+ const program = Effect.gen(function* () {
388
+ const blocks = yield* BlockService;
389
+
390
+ const blockNumber = yield* blocks.getBlockNumber({ chainId: 1 });
391
+ const timestamp = yield* blocks.getBlockTimestamp({ chainId: 1, blockNumber });
392
+
393
+ return { blockNumber, timestamp };
394
+ });
395
+ ```
396
+
397
+ ## Gas
398
+
399
+ Use `GasService` for EIP-1559 fee estimation and gas limits.
400
+
401
+ ```typescript
402
+ import { Effect } from "effect";
403
+ import { GasService } from "effect-evm";
404
+
405
+ const program = Effect.gen(function* () {
406
+ const gas = yield* GasService;
407
+ return yield* gas.estimateFees({ chainId: 1, speed: "fast" });
408
+ });
409
+ ```
410
+
411
+ ## Nonces
412
+
413
+ Use `NonceService` for local nonce reservation / gap detection when sending multiple transactions.
414
+
415
+ ```typescript
416
+ import { Effect } from "effect";
417
+ import { NonceService } from "effect-evm";
418
+
419
+ const program = Effect.gen(function* () {
420
+ const nonces = yield* NonceService;
421
+
422
+ const address = "0x..." as const;
423
+ const nonce = yield* nonces.reserve({ chainId: 1, address });
424
+
425
+ // ...send tx with `nonce`...
426
+
427
+ yield* nonces.confirm({ chainId: 1, address, nonce });
428
+ });
429
+ ```
430
+
431
+ ## Writes
432
+
433
+ Prefer `ContractPipeline` unless you need low-level control.
434
+
435
+ ```typescript
436
+ import { Effect } from "effect";
437
+ import { ContractPipeline, erc20Abi } from "effect-evm";
438
+
439
+ const program = Effect.gen(function* () {
440
+ const pipeline = yield* ContractPipeline;
441
+
442
+ return yield* pipeline.writeAndWait({
443
+ chainId: 1,
444
+ address: tokenAddress,
445
+ abi: erc20Abi,
446
+ functionName: "transfer",
447
+ args: [recipient, amount],
448
+ account: accountAddress,
449
+ });
450
+ });
451
+ ```
452
+
453
+ If you need reactive UI state, use `writeAndTrack` (scoped): it returns a `SubscriptionRef<TxState>` plus an Effect for
454
+ the final `{ hash, receipt, events }`.
455
+
456
+ ## EIP-7702 (EOA delegation + atomic batching)
457
+
458
+ [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) adds a new transaction type that lets an EOA "set code" for itself
459
+ by including an `authorizationList`. In practice, this enables:
460
+
461
+ - Atomic batching for EOAs (e.g. `approve` + `swap` in one tx)
462
+ - Delegating EOA execution to an implementation contract (smart-account-like UX without deploying a new account)
463
+
464
+ effect-evm exposes `Eip7702Service` for the common dapp flow "delegate my EOA to a delegator contract and execute an
465
+ ERC-7579 batch".
466
+
467
+ Requirements / caveats:
468
+
469
+ - Your chain + wallet must support EIP-7702 (type `0x04`).
470
+ - Dapp wallets are usually JSON-RPC accounts, so the wallet is expected to construct/sign the authorization. If you pass
471
+ a local viem account (e.g. `privateKeyToAccount`) it can be signed client-side, but that's not the typical
472
+ browser-wallet path.
473
+ - Delegation is persistent until cleared (see EIP-7702); treat the `delegation` address as a security boundary.
474
+
475
+ ### Delegate and execute an ERC-7579 batch
476
+
477
+ The `delegation` address is the implementation contract you are delegating to. One real-world option is MetaMask's
478
+ Delegation Framework `EIP7702StatelessDeleGator` implementation, which exposes an ERC-7579 `execute(bytes32,bytes)`
479
+ entry point for batched calls.
480
+
481
+ ```typescript
482
+ import { Effect } from "effect";
483
+ import { encodeFunctionData, parseAbi } from "viem";
484
+ import { Eip7702Service, ERC7579_MODE_SIMPLE_BATCH } from "effect-evm";
485
+
486
+ const program = Effect.gen(function* () {
487
+ const eip7702 = yield* Eip7702Service;
488
+
489
+ const data = encodeFunctionData({
490
+ abi: parseAbi(["function doThing(uint256 x)"]),
491
+ functionName: "doThing",
492
+ args: [123n],
493
+ });
494
+
495
+ return yield* eip7702.delegateAndExecuteErc7579BatchAndWait({
496
+ chainId: 1,
497
+ delegation: "0xdelegatorImplementation...",
498
+ mode: ERC7579_MODE_SIMPLE_BATCH, // optional (default is simple batch)
499
+ calls: [{ to: "0xtargetContract...", data }],
500
+ });
501
+ });
502
+ ```
503
+
504
+ ### ERC-20 approve + execute arbitrary call (single tx)
505
+
506
+ `approveAndExecute*` builds a 2-call batch:
507
+
508
+ 1. `token.approve(spender, amount)`
509
+ 2. Your arbitrary `call` (typically into the `spender` contract)
510
+
511
+ ```typescript
512
+ import { Effect } from "effect";
513
+ import { encodeFunctionData, parseAbi } from "viem";
514
+ import { Eip7702Service } from "effect-evm";
515
+
516
+ const program = Effect.gen(function* () {
517
+ const eip7702 = yield* Eip7702Service;
518
+
519
+ const swapData = encodeFunctionData({
520
+ abi: parseAbi(["function swap(uint256 amountIn,address recipient)"]),
521
+ functionName: "swap",
522
+ args: [1_000_000n, "0xrecipient..."],
523
+ });
524
+
525
+ return yield* eip7702.approveAndExecuteAndWait({
526
+ chainId: 1,
527
+ delegation: "0xdelegatorImplementation...",
528
+ token: "0xtoken...",
529
+ spender: "0xspenderOrRouter...",
530
+ amount: 1_000_000n,
531
+ call: { to: "0xspenderOrRouter...", data: swapData },
532
+ });
533
+ });
534
+ ```
535
+
536
+ ## Deployments
537
+
538
+ Use `DeployService` to deploy contracts and wait for receipts (or `deployAndTrack` for reactive UI state).
539
+
540
+ ```typescript
541
+ import { Effect } from "effect";
542
+ import { DeployService } from "effect-evm";
543
+
544
+ const program = Effect.gen(function* () {
545
+ const deploy = yield* DeployService;
546
+ const result = yield* deploy.deploy({
547
+ chainId: 1,
548
+ abi: abi,
549
+ bytecode: bytecode,
550
+ args: [],
551
+ account: accountAddress,
552
+ });
553
+
554
+ return result.address;
555
+ });
556
+ ```
557
+
558
+ ## ERC-721
559
+
560
+ Use `Erc721Service` for standard ERC-721 reads/writes plus metadata fetching (`tokenURI` -> HTTP/IPFS/Arweave).
561
+
562
+ ```typescript
563
+ import { Effect } from "effect";
564
+ import { Erc721Service } from "effect-evm";
565
+
566
+ const program = Effect.gen(function* () {
567
+ const erc721 = yield* Erc721Service;
568
+ const owner = yield* erc721.ownerOf({ chainId: 1, address: nftAddress, tokenId: 1n });
569
+ const metadata = yield* erc721.fetchMetadata({ chainId: 1, address: nftAddress, tokenId: 1n });
570
+ return { metadata, owner };
571
+ });
572
+ ```
573
+
574
+ ## Events
575
+
576
+ ```typescript
577
+ import { Effect, Stream } from "effect";
578
+ import { EventStream, erc20Abi } from "effect-evm";
579
+
580
+ const program = Effect.gen(function* () {
581
+ const events = yield* EventStream;
582
+
583
+ const stream = yield* events.watch({
584
+ chainId: 1,
585
+ address: tokenAddress,
586
+ abi: erc20Abi,
587
+ eventName: "Transfer",
588
+ fromBlock: 19_000_000n,
589
+ });
590
+
591
+ return yield* stream.pipe(Stream.take(10), Stream.runCollect);
592
+ });
593
+ ```
594
+
595
+ Use `ReliableEventStream` when you want confirmation-gated / reorg-filtered emissions.
596
+
597
+ ## Subscriptions
598
+
599
+ Use `SubscriptionService` when you want raw block/log/pending-tx streams (no ABI decoding).
600
+
601
+ `watchPendingTransactions` requires a WebSocket transport; it fails with `SubscriptionNotSupportedError` on HTTP-only
602
+ clients.
603
+
604
+ `watchBlocks` / `watchLogs` / `watchPendingTransactions` **fail the Stream** with `SubscriptionDroppedError` when the
605
+ underlying watcher errors. For UI usage (React), prefer the `*Retrying` variants, which retry indefinitely and expose a
606
+ `stateRef` you can use to render a "disconnected / retrying" banner.
607
+
608
+ ```typescript
609
+ import { Effect, Stream } from "effect";
610
+ import { SubscriptionService } from "effect-evm";
611
+
612
+ const program = Effect.gen(function* () {
613
+ const subs = yield* SubscriptionService;
614
+ const blocks = yield* subs.watchBlocks({ chainId: 1 });
615
+ return yield* blocks.pipe(Stream.take(3), Stream.runCollect);
616
+ });
617
+ ```
618
+
619
+ Retrying variant (recommended for React):
620
+
621
+ ```typescript
622
+ import { Effect, Stream, SubscriptionRef } from "effect";
623
+ import { SubscriptionService } from "effect-evm";
624
+
625
+ const program = Effect.gen(function* () {
626
+ const subs = yield* SubscriptionService;
627
+ const { stateRef, stream } = yield* subs.watchBlocksRetrying({ chainId: 1 });
628
+
629
+ // Read connection status for UI
630
+ const state = yield* SubscriptionRef.get(stateRef);
631
+ console.log(state.status);
632
+
633
+ return yield* stream.pipe(Stream.take(3), Stream.runCollect);
634
+ });
635
+ ```
636
+
637
+ ## Browser Persistence
638
+
639
+ The `browser` namespace provides localStorage-backed persistence for dapp state.
640
+
641
+ ```typescript
642
+ import { Effect, Layer } from "effect";
643
+ import { browser } from "effect-evm";
644
+
645
+ // Create layers for browser persistence
646
+ const BrowserLayers = browser.makeBrowserPersistenceLayer({
647
+ cursorStoreKey: "my-app-cursors",
648
+ txStoreKey: "my-app-txs",
649
+ });
650
+
651
+ // Use with your EVM layer
652
+ const AppLayer = Layer.provideMerge(BrowserLayers, EvmLayer);
653
+ ```
654
+
655
+ ### Cursor Store
656
+
657
+ Persist event stream cursors to resume from the last processed block:
658
+
659
+ ```typescript
660
+ import { browser } from "effect-evm";
661
+
662
+ const CursorLayer = browser.makeLocalStorageCursorStoreLayer({ key: "my-cursors" });
663
+ ```
664
+
665
+ ### Transaction Store
666
+
667
+ Persist pending transactions across page reloads:
668
+
669
+ ```typescript
670
+ import { browser } from "effect-evm";
671
+
672
+ const TxLayer = browser.makeLocalStorageTxStoreLayer({ key: "my-txs" });
673
+ ```
674
+
675
+ ## Signatures
676
+
677
+ Use `SignatureService` for hashing/verifying/recovering message and EIP-712 typed-data signatures.
678
+
679
+ ```typescript
680
+ import { Effect } from "effect";
681
+ import { SignatureService } from "effect-evm";
682
+
683
+ const program = Effect.gen(function* () {
684
+ const sig = yield* SignatureService;
685
+ return yield* sig.verifyMessage({
686
+ address: "0x..." as const,
687
+ message: "hello",
688
+ signature: "0x..." as const,
689
+ });
690
+ });
691
+ ```
692
+
693
+ ## Simulation (Tenderly)
694
+
695
+ `SimulationService` integrates with Tenderly for transaction and bundle simulation.
696
+
697
+ Required env vars:
698
+
699
+ - `TENDERLY_ACCESS_KEY`
700
+ - `TENDERLY_ACCOUNT`
701
+ - `TENDERLY_PROJECT`
702
+
703
+ ```typescript
704
+ import { Effect } from "effect";
705
+ import { SimulationService } from "effect-evm";
706
+
707
+ const program = Effect.gen(function* () {
708
+ const sim = yield* SimulationService;
709
+ const result = yield* sim.simulate({
710
+ chainId: 1,
711
+ from: "0x..." as const,
712
+ to: "0x..." as const,
713
+ data: "0x..." as const,
714
+ });
715
+
716
+ return yield* sim.getReadableSummary(result);
717
+ });
718
+ ```
719
+
720
+ ## Testing
721
+
722
+ ```typescript
723
+ import { Effect, Layer } from "effect";
724
+ import { makeMockBalanceServiceLayer } from "effect-evm/testing-kit";
725
+ import { ContractReader, erc20Abi } from "effect-evm";
726
+ import { makeEffectEvmTestLayer } from "effect-evm/testing-kit";
727
+
728
+ const testLayer = makeEffectEvmTestLayer({
729
+ publicClient: { readContract: async () => 1_000n },
730
+ });
731
+
732
+ const balanceLayer = makeMockBalanceServiceLayer({
733
+ getBalance: () => Effect.succeed(5_000_000_000_000_000_000n),
734
+ });
735
+
736
+ const program = Effect.gen(function* () {
737
+ const reader = yield* ContractReader;
738
+ return yield* reader.read({
739
+ chainId: 1,
740
+ address: "0x...",
741
+ abi: erc20Abi,
742
+ functionName: "totalSupply",
743
+ });
744
+ }).pipe(Effect.provide(Layer.mergeAll(testLayer, balanceLayer)));
745
+ ```
746
+
747
+ ### Available mock layers
748
+
749
+ `effect-evm/testing-kit` exports per-service mock layers:
750
+
751
+ - `makeMockBalanceServiceLayer`
752
+ - `makeMockBlockServiceLayer`
753
+ - `makeMockDeployServiceLayer`
754
+ - `makeMockErc721ServiceLayer`
755
+ - `makeMockGasServiceLayer`
756
+ - `makeMockNonceServiceLayer`
757
+ - `makeMockPublicClientLayer`
758
+ - `makeMockSignatureServiceLayer`
759
+ - `makeMockSimulationServiceLayer`
760
+ - `makeMockSubscriptionServiceLayer`
761
+ - `makeMockWalletClientLayer`
762
+ - `makeMockWalletProvider`
763
+
764
+ ### Test fixtures
765
+
766
+ ```typescript
767
+ import { TEST_ADDRESS, TEST_ADDRESS_2, TEST_CHAIN_ID, TEST_TX_HASH, UNKNOWN_CHAIN_ID } from "effect-evm/testing-kit";
768
+ ```
769
+
770
+ ## Errors
771
+
772
+ Errors are `Schema.TaggedError`s; prefer `Effect.catchTag`.
773
+
774
+ ```typescript
775
+ import { Effect } from "effect";
776
+ import { ContractReader } from "effect-evm";
777
+
778
+ const program = Effect.gen(function* () {
779
+ const reader = yield* ContractReader;
780
+ return yield* reader.read(params);
781
+ }).pipe(
782
+ Effect.catchTag("ContractReadError", (error) => Effect.logError(error.message)),
783
+ Effect.catchTag("ClientNotFoundError", (error) => Effect.logError(error.message)),
784
+ );
785
+ ```
786
+
787
+ ## Further reading
788
+
789
+ - Advanced streams: `CursorStream` + `EventBackfill` (resume + backfill)
790
+ - Wallet UX: `WalletService` / `WalletLifecycle`
791
+ - ENS: `EnsResolver`
792
+ - Chain utilities: `BalanceService`, `BlockService`, `GasService`, `NonceService`
793
+ - Contract deploy + NFTs: `DeployService`, `Erc721Service`
794
+ - Signatures + simulations: `SignatureService`, `SimulationService`
795
+ - Raw watchers: `SubscriptionService`
796
+ - React hooks: `effect-evm/react-hooks`
797
+ - Browser persistence: `browser` namespace
798
+ - Full surface area: `src/index.ts`