@unionlabs/payments 0.1.0 → 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 (393) hide show
  1. package/Abi/package.json +6 -0
  2. package/Attestor/package.json +6 -0
  3. package/Constants/package.json +6 -0
  4. package/Domain/package.json +6 -0
  5. package/Error/package.json +6 -0
  6. package/EvmPublicClient/package.json +6 -0
  7. package/EvmWalletClient/package.json +6 -0
  8. package/Payment/package.json +6 -0
  9. package/PaymentError/package.json +6 -0
  10. package/Prover/package.json +6 -0
  11. package/PublicClient/package.json +6 -0
  12. package/README.md +1 -0
  13. package/Schema/package.json +6 -0
  14. package/Utils/package.json +6 -0
  15. package/WalletClient/package.json +6 -0
  16. package/attestation/package.json +6 -0
  17. package/cli/commands/balance/package.json +6 -0
  18. package/cli/commands/deposit/package.json +6 -0
  19. package/cli/commands/export-verifier/package.json +6 -0
  20. package/cli/commands/generate/package.json +6 -0
  21. package/cli/commands/history/package.json +6 -0
  22. package/cli/commands/prove/package.json +6 -0
  23. package/cli/commands/redeem/package.json +6 -0
  24. package/cli/commands/update-client/package.json +6 -0
  25. package/cli/config/package.json +6 -0
  26. package/cli/package.json +6 -0
  27. package/cli/utils/package.json +6 -0
  28. package/constants/ibc-core-registry/package.json +6 -0
  29. package/constants/services/package.json +6 -0
  30. package/constants/z-asset-registry/package.json +6 -0
  31. package/dist/cjs/Abi.js +270 -0
  32. package/dist/cjs/Abi.js.map +1 -0
  33. package/dist/cjs/Attestor.js +76 -0
  34. package/dist/cjs/Attestor.js.map +1 -0
  35. package/dist/cjs/Constants.js +8 -0
  36. package/dist/cjs/Constants.js.map +1 -0
  37. package/dist/cjs/Domain.js +24 -0
  38. package/dist/cjs/Domain.js.map +1 -0
  39. package/dist/cjs/Error.js +100 -0
  40. package/dist/cjs/Error.js.map +1 -0
  41. package/dist/cjs/EvmPublicClient.js +301 -0
  42. package/dist/cjs/EvmPublicClient.js.map +1 -0
  43. package/dist/cjs/EvmWalletClient.js +670 -0
  44. package/dist/cjs/EvmWalletClient.js.map +1 -0
  45. package/dist/cjs/Payment.js +333 -0
  46. package/dist/cjs/Payment.js.map +1 -0
  47. package/dist/cjs/PaymentError.js +32 -0
  48. package/dist/cjs/PaymentError.js.map +1 -0
  49. package/dist/cjs/Prover.js +153 -0
  50. package/dist/cjs/Prover.js.map +1 -0
  51. package/dist/cjs/PublicClient.js +39 -0
  52. package/dist/cjs/PublicClient.js.map +1 -0
  53. package/dist/cjs/Schema.js +38 -0
  54. package/dist/cjs/Schema.js.map +1 -0
  55. package/dist/cjs/Utils.js +33 -0
  56. package/dist/cjs/Utils.js.map +1 -0
  57. package/dist/cjs/WalletClient.js +39 -0
  58. package/dist/cjs/WalletClient.js.map +1 -0
  59. package/dist/cjs/attestation.js +49 -0
  60. package/dist/cjs/attestation.js.map +1 -0
  61. package/dist/cjs/cli/commands/balance.js +60 -0
  62. package/dist/cjs/cli/commands/balance.js.map +1 -0
  63. package/dist/cjs/cli/commands/deposit.js +58 -0
  64. package/dist/cjs/cli/commands/deposit.js.map +1 -0
  65. package/dist/cjs/cli/commands/export-verifier.js +27 -0
  66. package/dist/cjs/cli/commands/export-verifier.js.map +1 -0
  67. package/dist/cjs/cli/commands/generate.js +41 -0
  68. package/dist/cjs/cli/commands/generate.js.map +1 -0
  69. package/dist/cjs/cli/commands/history.js +59 -0
  70. package/dist/cjs/cli/commands/history.js.map +1 -0
  71. package/dist/cjs/cli/commands/prove.js +82 -0
  72. package/dist/cjs/cli/commands/prove.js.map +1 -0
  73. package/dist/cjs/cli/commands/redeem.js +152 -0
  74. package/dist/cjs/cli/commands/redeem.js.map +1 -0
  75. package/dist/cjs/cli/commands/update-client.js +62 -0
  76. package/dist/cjs/cli/commands/update-client.js.map +1 -0
  77. package/dist/cjs/cli/config.js +32 -0
  78. package/dist/cjs/cli/config.js.map +1 -0
  79. package/dist/cjs/cli/utils.js +108 -0
  80. package/dist/cjs/cli/utils.js.map +1 -0
  81. package/dist/cjs/cli.js +24 -0
  82. package/dist/cjs/cli.js.map +1 -0
  83. package/dist/cjs/constants/ibc-core-registry.js +30 -0
  84. package/dist/cjs/constants/ibc-core-registry.js.map +1 -0
  85. package/dist/cjs/constants/services.js +9 -0
  86. package/dist/cjs/constants/services.js.map +1 -0
  87. package/dist/cjs/constants/z-asset-registry.js +32 -0
  88. package/dist/cjs/constants/z-asset-registry.js.map +1 -0
  89. package/dist/cjs/gen/prover_pb.js +81 -0
  90. package/dist/cjs/gen/prover_pb.js.map +1 -0
  91. package/dist/cjs/index.js +32 -0
  92. package/dist/cjs/index.js.map +1 -0
  93. package/dist/cjs/internal/evm.js +191 -0
  94. package/dist/cjs/internal/evm.js.map +1 -0
  95. package/dist/cjs/internal/evmWalletClient.js +6 -0
  96. package/dist/cjs/internal/evmWalletClient.js.map +1 -0
  97. package/dist/cjs/internal/publicClient.js +49 -0
  98. package/dist/cjs/internal/publicClient.js.map +1 -0
  99. package/dist/cjs/internal/walletClient.js +43 -0
  100. package/dist/cjs/internal/walletClient.js.map +1 -0
  101. package/dist/cjs/legacy/client.js +1222 -0
  102. package/dist/cjs/legacy/client.js.map +1 -0
  103. package/dist/cjs/legacy/prover.js +112 -0
  104. package/dist/cjs/legacy/prover.js.map +1 -0
  105. package/dist/cjs/poseidon2.js +226 -0
  106. package/dist/cjs/poseidon2.js.map +1 -0
  107. package/dist/cjs/promises/Attestor.js +23 -0
  108. package/dist/cjs/promises/Attestor.js.map +1 -0
  109. package/dist/cjs/promises/EvmPublicClient.js +34 -0
  110. package/dist/cjs/promises/EvmPublicClient.js.map +1 -0
  111. package/dist/cjs/promises/EvmWalletClient.js +51 -0
  112. package/dist/cjs/promises/EvmWalletClient.js.map +1 -0
  113. package/dist/cjs/promises/Payment.js +22 -0
  114. package/dist/cjs/promises/Payment.js.map +1 -0
  115. package/dist/cjs/promises/Prover.js +26 -0
  116. package/dist/cjs/promises/Prover.js.map +1 -0
  117. package/dist/cjs/promises/PublicClient.js +53 -0
  118. package/dist/cjs/promises/PublicClient.js.map +1 -0
  119. package/dist/cjs/promises/WalletClient.js +44 -0
  120. package/dist/cjs/promises/WalletClient.js.map +1 -0
  121. package/dist/cjs/promises/index.js +22 -0
  122. package/dist/cjs/promises/index.js.map +1 -0
  123. package/dist/cjs/rpc.js +867 -0
  124. package/dist/cjs/rpc.js.map +1 -0
  125. package/dist/cjs/types.js +6 -0
  126. package/dist/cjs/types.js.map +1 -0
  127. package/dist/dts/Abi.d.ts +220 -0
  128. package/dist/dts/Abi.d.ts.map +1 -0
  129. package/dist/dts/Attestor.d.ts +42 -0
  130. package/dist/dts/Attestor.d.ts.map +1 -0
  131. package/dist/dts/Constants.d.ts +3 -0
  132. package/dist/dts/Constants.d.ts.map +1 -0
  133. package/dist/dts/Domain.d.ts +141 -0
  134. package/dist/dts/Domain.d.ts.map +1 -0
  135. package/dist/dts/Error.d.ts +102 -0
  136. package/dist/dts/Error.d.ts.map +1 -0
  137. package/dist/dts/EvmPublicClient.d.ts +61 -0
  138. package/dist/dts/EvmPublicClient.d.ts.map +1 -0
  139. package/dist/dts/EvmWalletClient.d.ts +67 -0
  140. package/dist/dts/EvmWalletClient.d.ts.map +1 -0
  141. package/dist/dts/Payment.d.ts +128 -0
  142. package/dist/dts/Payment.d.ts.map +1 -0
  143. package/dist/dts/PaymentError.d.ts +21 -0
  144. package/dist/dts/PaymentError.d.ts.map +1 -0
  145. package/dist/dts/Prover.d.ts +87 -0
  146. package/dist/dts/Prover.d.ts.map +1 -0
  147. package/dist/dts/PublicClient.d.ts +146 -0
  148. package/dist/dts/PublicClient.d.ts.map +1 -0
  149. package/dist/dts/Schema.d.ts +16 -0
  150. package/dist/dts/Schema.d.ts.map +1 -0
  151. package/dist/dts/Utils.d.ts +11 -0
  152. package/dist/dts/Utils.d.ts.map +1 -0
  153. package/dist/dts/WalletClient.d.ts +123 -0
  154. package/dist/dts/WalletClient.d.ts.map +1 -0
  155. package/dist/dts/attestation.d.ts +13 -0
  156. package/dist/dts/attestation.d.ts.map +1 -0
  157. package/dist/dts/cli/commands/balance.d.ts +3 -0
  158. package/dist/dts/cli/commands/balance.d.ts.map +1 -0
  159. package/dist/dts/cli/commands/deposit.d.ts +3 -0
  160. package/dist/dts/cli/commands/deposit.d.ts.map +1 -0
  161. package/dist/dts/cli/commands/export-verifier.d.ts +3 -0
  162. package/dist/dts/cli/commands/export-verifier.d.ts.map +1 -0
  163. package/dist/dts/cli/commands/generate.d.ts +3 -0
  164. package/dist/dts/cli/commands/generate.d.ts.map +1 -0
  165. package/dist/dts/cli/commands/history.d.ts +3 -0
  166. package/dist/dts/cli/commands/history.d.ts.map +1 -0
  167. package/dist/dts/cli/commands/prove.d.ts +3 -0
  168. package/dist/dts/cli/commands/prove.d.ts.map +1 -0
  169. package/dist/dts/cli/commands/redeem.d.ts +3 -0
  170. package/dist/dts/cli/commands/redeem.d.ts.map +1 -0
  171. package/dist/dts/cli/commands/update-client.d.ts +3 -0
  172. package/dist/dts/cli/commands/update-client.d.ts.map +1 -0
  173. package/dist/dts/cli/config.d.ts +14 -0
  174. package/dist/dts/cli/config.d.ts.map +1 -0
  175. package/dist/dts/cli/utils.d.ts +11 -0
  176. package/dist/dts/cli/utils.d.ts.map +1 -0
  177. package/dist/dts/cli.d.ts +3 -0
  178. package/dist/dts/cli.d.ts.map +1 -0
  179. package/dist/dts/constants/ibc-core-registry.d.ts +11 -0
  180. package/dist/dts/constants/ibc-core-registry.d.ts.map +1 -0
  181. package/dist/dts/constants/services.d.ts +3 -0
  182. package/dist/dts/constants/services.d.ts.map +1 -0
  183. package/dist/dts/constants/z-asset-registry.d.ts +13 -0
  184. package/dist/dts/constants/z-asset-registry.d.ts.map +1 -0
  185. package/dist/dts/gen/prover_pb.d.ts +300 -0
  186. package/dist/dts/gen/prover_pb.d.ts.map +1 -0
  187. package/dist/dts/index.d.ts +21 -0
  188. package/dist/dts/index.d.ts.map +1 -0
  189. package/dist/dts/internal/evm.d.ts +250 -0
  190. package/dist/dts/internal/evm.d.ts.map +1 -0
  191. package/dist/dts/internal/evmWalletClient.d.ts +2 -0
  192. package/dist/dts/internal/evmWalletClient.d.ts.map +1 -0
  193. package/dist/dts/internal/publicClient.d.ts +2 -0
  194. package/dist/dts/internal/publicClient.d.ts.map +1 -0
  195. package/dist/dts/internal/walletClient.d.ts +2 -0
  196. package/dist/dts/internal/walletClient.d.ts.map +1 -0
  197. package/dist/dts/legacy/client.d.ts +313 -0
  198. package/dist/dts/legacy/client.d.ts.map +1 -0
  199. package/dist/dts/legacy/prover.d.ts +30 -0
  200. package/dist/dts/legacy/prover.d.ts.map +1 -0
  201. package/dist/dts/poseidon2.d.ts +18 -0
  202. package/dist/dts/poseidon2.d.ts.map +1 -0
  203. package/dist/dts/promises/Attestor.d.ts +17 -0
  204. package/dist/dts/promises/Attestor.d.ts.map +1 -0
  205. package/dist/dts/promises/EvmPublicClient.d.ts +3709 -0
  206. package/dist/dts/promises/EvmPublicClient.d.ts.map +1 -0
  207. package/dist/dts/promises/EvmWalletClient.d.ts +4502 -0
  208. package/dist/dts/promises/EvmWalletClient.d.ts.map +1 -0
  209. package/dist/dts/promises/Payment.d.ts +33 -0
  210. package/dist/dts/promises/Payment.d.ts.map +1 -0
  211. package/dist/dts/promises/Prover.d.ts +14 -0
  212. package/dist/dts/promises/Prover.d.ts.map +1 -0
  213. package/dist/dts/promises/PublicClient.d.ts +23 -0
  214. package/dist/dts/promises/PublicClient.d.ts.map +1 -0
  215. package/dist/dts/promises/WalletClient.d.ts +57 -0
  216. package/dist/dts/promises/WalletClient.d.ts.map +1 -0
  217. package/dist/dts/promises/index.d.ts +8 -0
  218. package/dist/dts/promises/index.d.ts.map +1 -0
  219. package/dist/dts/rpc.d.ts +148 -0
  220. package/dist/dts/rpc.d.ts.map +1 -0
  221. package/dist/dts/types.d.ts +263 -0
  222. package/dist/dts/types.d.ts.map +1 -0
  223. package/dist/esm/Abi.js +264 -0
  224. package/dist/esm/Abi.js.map +1 -0
  225. package/dist/esm/Attestor.js +68 -0
  226. package/dist/esm/Attestor.js.map +1 -0
  227. package/dist/esm/Constants.js +2 -0
  228. package/dist/esm/Constants.js.map +1 -0
  229. package/dist/esm/Domain.js +17 -0
  230. package/dist/esm/Domain.js.map +1 -0
  231. package/dist/esm/Error.js +89 -0
  232. package/dist/esm/Error.js.map +1 -0
  233. package/dist/esm/EvmPublicClient.js +292 -0
  234. package/dist/esm/EvmPublicClient.js.map +1 -0
  235. package/dist/esm/EvmWalletClient.js +659 -0
  236. package/dist/esm/EvmWalletClient.js.map +1 -0
  237. package/dist/esm/Payment.js +323 -0
  238. package/dist/esm/Payment.js.map +1 -0
  239. package/dist/esm/PaymentError.js +24 -0
  240. package/dist/esm/PaymentError.js.map +1 -0
  241. package/dist/esm/Prover.js +142 -0
  242. package/dist/esm/Prover.js.map +1 -0
  243. package/dist/esm/PublicClient.js +30 -0
  244. package/dist/esm/PublicClient.js.map +1 -0
  245. package/dist/esm/Schema.js +31 -0
  246. package/dist/esm/Schema.js.map +1 -0
  247. package/dist/esm/Utils.js +27 -0
  248. package/dist/esm/Utils.js.map +1 -0
  249. package/dist/esm/WalletClient.js +30 -0
  250. package/dist/esm/WalletClient.js.map +1 -0
  251. package/dist/esm/attestation.js +42 -0
  252. package/dist/esm/attestation.js.map +1 -0
  253. package/dist/esm/cli/commands/balance.js +54 -0
  254. package/dist/esm/cli/commands/balance.js.map +1 -0
  255. package/dist/esm/cli/commands/deposit.js +52 -0
  256. package/dist/esm/cli/commands/deposit.js.map +1 -0
  257. package/dist/esm/cli/commands/export-verifier.js +21 -0
  258. package/dist/esm/cli/commands/export-verifier.js.map +1 -0
  259. package/dist/esm/cli/commands/generate.js +35 -0
  260. package/dist/esm/cli/commands/generate.js.map +1 -0
  261. package/dist/esm/cli/commands/history.js +53 -0
  262. package/dist/esm/cli/commands/history.js.map +1 -0
  263. package/dist/esm/cli/commands/prove.js +76 -0
  264. package/dist/esm/cli/commands/prove.js.map +1 -0
  265. package/dist/esm/cli/commands/redeem.js +146 -0
  266. package/dist/esm/cli/commands/redeem.js.map +1 -0
  267. package/dist/esm/cli/commands/update-client.js +56 -0
  268. package/dist/esm/cli/commands/update-client.js.map +1 -0
  269. package/dist/esm/cli/config.js +26 -0
  270. package/dist/esm/cli/config.js.map +1 -0
  271. package/dist/esm/cli/utils.js +94 -0
  272. package/dist/esm/cli/utils.js.map +1 -0
  273. package/dist/esm/cli.js +22 -0
  274. package/dist/esm/cli.js.map +1 -0
  275. package/dist/esm/constants/ibc-core-registry.js +21 -0
  276. package/dist/esm/constants/ibc-core-registry.js.map +1 -0
  277. package/dist/esm/constants/services.js +3 -0
  278. package/dist/esm/constants/services.js.map +1 -0
  279. package/dist/esm/constants/z-asset-registry.js +23 -0
  280. package/dist/esm/constants/z-asset-registry.js.map +1 -0
  281. package/dist/esm/gen/prover_pb.js +74 -0
  282. package/dist/esm/gen/prover_pb.js.map +1 -0
  283. package/dist/esm/index.js +22 -0
  284. package/dist/esm/index.js.map +1 -0
  285. package/dist/esm/internal/evm.js +169 -0
  286. package/dist/esm/internal/evm.js.map +1 -0
  287. package/dist/esm/internal/evmWalletClient.js +2 -0
  288. package/dist/esm/internal/evmWalletClient.js.map +1 -0
  289. package/dist/esm/internal/publicClient.js +41 -0
  290. package/dist/esm/internal/publicClient.js.map +1 -0
  291. package/dist/esm/internal/walletClient.js +35 -0
  292. package/dist/esm/internal/walletClient.js.map +1 -0
  293. package/dist/esm/legacy/client.js +1212 -0
  294. package/dist/esm/legacy/client.js.map +1 -0
  295. package/dist/esm/legacy/prover.js +105 -0
  296. package/dist/esm/legacy/prover.js.map +1 -0
  297. package/dist/esm/package.json +4 -0
  298. package/dist/esm/poseidon2.js +218 -0
  299. package/dist/esm/poseidon2.js.map +1 -0
  300. package/dist/esm/promises/Attestor.js +14 -0
  301. package/dist/esm/promises/Attestor.js.map +1 -0
  302. package/dist/esm/promises/EvmPublicClient.js +26 -0
  303. package/dist/esm/promises/EvmPublicClient.js.map +1 -0
  304. package/dist/esm/promises/EvmWalletClient.js +43 -0
  305. package/dist/esm/promises/EvmWalletClient.js.map +1 -0
  306. package/dist/esm/promises/Payment.js +13 -0
  307. package/dist/esm/promises/Payment.js.map +1 -0
  308. package/dist/esm/promises/Prover.js +17 -0
  309. package/dist/esm/promises/Prover.js.map +1 -0
  310. package/dist/esm/promises/PublicClient.js +45 -0
  311. package/dist/esm/promises/PublicClient.js.map +1 -0
  312. package/dist/esm/promises/WalletClient.js +36 -0
  313. package/dist/esm/promises/WalletClient.js.map +1 -0
  314. package/dist/esm/promises/index.js +8 -0
  315. package/dist/esm/promises/index.js.map +1 -0
  316. package/dist/esm/rpc.js +850 -0
  317. package/dist/esm/rpc.js.map +1 -0
  318. package/dist/esm/types.js +2 -0
  319. package/dist/esm/types.js.map +1 -0
  320. package/gen/prover_pb/package.json +6 -0
  321. package/index/package.json +6 -0
  322. package/legacy/client/package.json +6 -0
  323. package/legacy/prover/package.json +6 -0
  324. package/package.json +397 -44
  325. package/poseidon2/package.json +6 -0
  326. package/promises/Attestor/package.json +6 -0
  327. package/promises/EvmPublicClient/package.json +6 -0
  328. package/promises/EvmWalletClient/package.json +6 -0
  329. package/promises/Payment/package.json +6 -0
  330. package/promises/Prover/package.json +6 -0
  331. package/promises/PublicClient/package.json +6 -0
  332. package/promises/WalletClient/package.json +6 -0
  333. package/promises/index/package.json +6 -0
  334. package/promises/package.json +6 -0
  335. package/rpc/package.json +6 -0
  336. package/src/Abi.ts +195 -0
  337. package/src/Attestor.ts +113 -0
  338. package/src/Constants.ts +4 -0
  339. package/src/Domain.ts +52 -0
  340. package/src/Error.ts +163 -0
  341. package/src/EvmPublicClient.ts +549 -0
  342. package/src/EvmWalletClient.ts +1034 -0
  343. package/src/Payment.ts +523 -0
  344. package/src/PaymentError.ts +39 -0
  345. package/src/Prover.ts +240 -0
  346. package/src/PublicClient.ts +196 -0
  347. package/src/Schema.ts +36 -0
  348. package/src/Utils.ts +43 -0
  349. package/src/WalletClient.ts +172 -0
  350. package/src/attestation.ts +69 -0
  351. package/src/cli/commands/balance.ts +88 -0
  352. package/src/cli/commands/deposit.ts +104 -0
  353. package/src/cli/commands/export-verifier.ts +28 -0
  354. package/src/cli/commands/generate.ts +86 -0
  355. package/src/cli/commands/history.ts +91 -0
  356. package/src/cli/commands/prove.ts +133 -0
  357. package/src/cli/commands/redeem.ts +277 -0
  358. package/src/cli/commands/update-client.ts +96 -0
  359. package/src/cli/config.ts +55 -0
  360. package/src/cli/utils.ts +136 -0
  361. package/src/cli.ts +31 -0
  362. package/src/constants/ibc-core-registry.ts +44 -0
  363. package/src/constants/services.ts +4 -0
  364. package/src/constants/z-asset-registry.ts +47 -0
  365. package/src/gen/prover_pb.ts +375 -0
  366. package/src/index.ts +23 -0
  367. package/src/internal/evm.ts +361 -0
  368. package/src/internal/evmWalletClient.ts +0 -0
  369. package/src/internal/publicClient.ts +57 -0
  370. package/src/internal/walletClient.ts +50 -0
  371. package/src/legacy/client.ts +1652 -0
  372. package/src/legacy/prover.ts +135 -0
  373. package/src/poseidon2.ts +246 -0
  374. package/src/promises/Attestor.ts +25 -0
  375. package/src/promises/EvmPublicClient.ts +39 -0
  376. package/src/promises/EvmWalletClient.ts +63 -0
  377. package/src/promises/Payment.ts +86 -0
  378. package/src/promises/Prover.ts +26 -0
  379. package/src/promises/PublicClient.ts +47 -0
  380. package/src/promises/WalletClient.ts +38 -0
  381. package/src/promises/index.ts +7 -0
  382. package/src/rpc.ts +994 -0
  383. package/src/types.ts +281 -0
  384. package/types/package.json +6 -0
  385. package/dist/LICENSE +0 -1
  386. package/dist/chunk-37PNLRA6.js +0 -2418
  387. package/dist/cli.cjs +0 -3031
  388. package/dist/cli.js +0 -675
  389. package/dist/index.cjs +0 -2451
  390. package/dist/index.js +0 -1
  391. package/dist/package.json +0 -18
  392. package/dist/payments.d.ts +0 -835
  393. /package/{dist → src}/tsdoc-metadata.json +0 -0
@@ -0,0 +1,659 @@
1
+ import * as A from "effect/Array";
2
+ import * as Brand from "effect/Brand";
3
+ import * as Context from "effect/Context";
4
+ import * as Effect from "effect/Effect";
5
+ // import type * as ThirdwebAdaptersViem from "thirdweb/adapters/viem"
6
+ import { pipe } from "effect/Function";
7
+ import * as Layer from "effect/Layer";
8
+ import * as Number from "effect/Number";
9
+ import * as Ref from "effect/Ref";
10
+ import * as Abi from "./Abi.js";
11
+ import * as ZAssetRegistry from "./constants/z-asset-registry.js";
12
+ import * as Domain from "./Domain.js";
13
+ import * as Error from "./Error.js";
14
+ import * as EvmPublicClient from "./EvmPublicClient.js";
15
+ import * as Client from "./WalletClient.js";
16
+ /**
17
+ * @category type ids
18
+ * @since 1.0.0
19
+ */
20
+ export const TypeId = "@unionlabs/payments/EvmWalletClient";
21
+ /**
22
+ * @category tags
23
+ * @since 1.0.0
24
+ */
25
+ export const EvmWalletClient = /*#__PURE__*/Context.GenericTag("@unionlabs/payments/EvmWalletClient");
26
+ /**
27
+ * A type-safe wrapper around viem's writeContract that handles error cases
28
+ * and returns an Effect with proper type inference. Extracts all error info
29
+ *
30
+ * @param client - The viem WalletClient to use for the contract transaction
31
+ * @param params - The parameters for the contract transaction
32
+ * @returns An Effect that resolves to the transaction hash
33
+ *
34
+ * @category utils
35
+ * @since 0.0.0
36
+ */
37
+ export const makeViem = wallet => Effect.gen(function* () {
38
+ const Viem = yield* Effect.tryPromise({
39
+ try: () => import("viem").then(x => x),
40
+ catch: cause => new Error.SystemError({
41
+ reason: "DynamicImport",
42
+ method: "makeViem",
43
+ module: "EvmWalletClient",
44
+ cause,
45
+ description: "could not import viem"
46
+ })
47
+ });
48
+ const ViemActions = yield* Effect.tryPromise({
49
+ try: () => import("viem/actions").then(x => x),
50
+ catch: cause => new Error.SystemError({
51
+ reason: "DynamicImport",
52
+ method: "makeViemActions",
53
+ module: "EvmWalletClient",
54
+ cause,
55
+ description: "could not import viem/actions"
56
+ })
57
+ });
58
+ const publicClient = yield* pipe(Effect.try({
59
+ try: () => Viem.createPublicClient({
60
+ chain: wallet.chain,
61
+ transport: Viem.custom(wallet)
62
+ }),
63
+ catch: cause => new Error.SystemError({
64
+ reason: "DynamicImport",
65
+ method: "make",
66
+ module: "EvmWalletClient",
67
+ cause,
68
+ description: "could derive public client from wallet client"
69
+ })
70
+ }), Effect.flatMap(x => EvmPublicClient.makeViem(x)));
71
+ // Use "latest" to avoid stale pending txs in mempool
72
+ const transactionCount = yield* pipe(Effect.tryPromise({
73
+ try: () => ViemActions.getTransactionCount(wallet, {
74
+ address: wallet.account?.address,
75
+ blockTag: "latest"
76
+ }),
77
+ catch: cause => new Error.SystemError({
78
+ reason: "InvalidData",
79
+ method: "encodeFunctionData",
80
+ module: "EvmWalletClient",
81
+ cause
82
+ })
83
+ }), Effect.flatMap(Ref.make));
84
+ const encodeFunctionData = Effect.fn("encodeFunctionData")(
85
+ //<
86
+ // const abi extends Viem.Abi | readonly unknown[],
87
+ // functionName extends Viem.ContractFunctionName<abi> | undefined = undefined,
88
+ //>(
89
+ parameters => Effect.try({
90
+ try: () => Viem.encodeFunctionData(parameters),
91
+ catch: cause => new Error.SystemError({
92
+ reason: "InvalidData",
93
+ method: "encodeFunctionData",
94
+ module: "EvmWalletClient",
95
+ cause
96
+ })
97
+ }));
98
+ const writeContract = Effect.fn("writeContract")(params => pipe(Effect.tryPromise({
99
+ try: () => wallet.writeContract(params),
100
+ catch: cause => new Error.SystemError({
101
+ method: "writeContract",
102
+ module: "EvmWalletClient",
103
+ reason: "InvalidData",
104
+ cause
105
+ })
106
+ }), Effect.map(hash => Domain.SubmissionResult.viemWriteContract({
107
+ hash: Brand.nominal()(hash)
108
+ }))));
109
+ const prepareTransactionRequest = Effect.fn("prepareTransactionRequest")(params => pipe(Ref.get(transactionCount), Effect.flatMap(nonce => Effect.tryPromise({
110
+ try: () => wallet.prepareTransactionRequest({
111
+ ...params,
112
+ nonce
113
+ }),
114
+ catch: cause => new Error.SystemError({
115
+ method: "prepareTransactionRequest",
116
+ module: "EvmWalletClient",
117
+ reason: "InvalidData",
118
+ cause
119
+ })
120
+ })), Effect.tap(() => Ref.update(transactionCount, Number.increment))));
121
+ const prepareBatchTransactionRequest = Effect.fn("prepareBatchTransactionRequest")(calls => Effect.gen(function* () {
122
+ // Refresh nonce from chain before batch to ensure we're in sync
123
+ const chainNonce = yield* Effect.tryPromise({
124
+ try: () => ViemActions.getTransactionCount(wallet, {
125
+ address: wallet.account?.address,
126
+ blockTag: "latest"
127
+ }),
128
+ catch: cause => new Error.SystemError({
129
+ reason: "InvalidData",
130
+ method: "prepareBatchTransactionRequest",
131
+ module: "EvmWalletClient",
132
+ cause
133
+ })
134
+ });
135
+ yield* Ref.set(transactionCount, chainNonce);
136
+ yield* Effect.log("[prepareBatchTransactionRequest] Synced nonce", {
137
+ chainNonce
138
+ });
139
+ const simulationResult = yield* publicClient.simulateCalls({
140
+ calls: calls.map(call => ({
141
+ to: call.to,
142
+ data: call.data,
143
+ value: call.value
144
+ })),
145
+ account: wallet.account?.address
146
+ });
147
+ yield* Effect.log("[prepareBatchTransactionRequest] Simulation results", {
148
+ results: simulationResult.results
149
+ });
150
+ // Extract gas estimates with 20% buffer for safety
151
+ const gasEstimates = simulationResult.results?.map(r => r?.gasUsed ? BigInt(r.gasUsed) * 120n / 100n : undefined) ?? [];
152
+ yield* Effect.log("[prepareBatchTransactionRequest] Gas estimates", {
153
+ gasEstimates
154
+ });
155
+ // Prepare each transaction with gas
156
+ const prepared = [];
157
+ for (let i = 0; i < calls.length; i++) {
158
+ const call = calls[i];
159
+ const gas = gasEstimates[i];
160
+ const nonce = yield* Ref.get(transactionCount);
161
+ const request = yield* Effect.tryPromise({
162
+ try: () => wallet.prepareTransactionRequest({
163
+ to: call.to,
164
+ data: call.data,
165
+ ...(call.value !== undefined && {
166
+ value: call.value
167
+ }),
168
+ ...(gas !== undefined && {
169
+ gas
170
+ }),
171
+ nonce,
172
+ chain: wallet.chain
173
+ }),
174
+ catch: cause => new Error.SystemError({
175
+ method: "prepareBatchTransactionRequest",
176
+ module: "EvmWalletClient",
177
+ reason: "InvalidData",
178
+ cause
179
+ })
180
+ });
181
+ yield* Ref.update(transactionCount, Number.increment);
182
+ prepared.push(request);
183
+ }
184
+ return prepared;
185
+ }));
186
+ const signTransaction = Effect.fn("signTransaction")(params => Effect.tryPromise({
187
+ try: () => wallet.signTransaction(params),
188
+ catch: cause => new Error.SystemError({
189
+ method: "signTransaction",
190
+ module: "EvmWalletClient",
191
+ reason: "InvalidData",
192
+ cause
193
+ })
194
+ }));
195
+ const sendRawTransaction = Effect.fn("sendRawTransaction")(params => Effect.tryPromise({
196
+ try: () => wallet.sendRawTransaction(params),
197
+ catch: cause => new Error.SystemError({
198
+ method: "sendRawTransaction",
199
+ module: "EvmWalletClient",
200
+ reason: "InvalidData",
201
+ cause
202
+ })
203
+ }));
204
+ const sign = Effect.fn("sign")(request => pipe(request, Effect.liftPredicate(Domain.PreparedRequest.$is("viem"), cause => new Error.SystemError({
205
+ method: "sign",
206
+ module: "EvmWalletClient",
207
+ reason: "InvalidData",
208
+ cause
209
+ })), Effect.map(x => x.request), Effect.flatMap(value => signTransaction({
210
+ ...value,
211
+ account: wallet.account,
212
+ chain: wallet.chain
213
+ })), Effect.map(value => Domain.SignedRequest.viem({
214
+ value: value
215
+ }))));
216
+ const submit = Effect.fn("submit")(request => pipe(request, Effect.liftPredicate(Domain.SignedRequest.$is("viem"), cause => new Error.SystemError({
217
+ method: "submit",
218
+ module: "EvmWalletClient",
219
+ reason: "InvalidData",
220
+ cause
221
+ })), Effect.map(x => x.value), Effect.flatMap(serializedTransaction => sendRawTransaction({
222
+ serializedTransaction
223
+ })), Effect.map(hash => Domain.SubmissionResult.viemWriteContract({
224
+ hash: Brand.nominal()(hash)
225
+ }))));
226
+ const signAndSubmit = Effect.fn("signAndSubmit")(request => pipe(request, Effect.liftPredicate(Domain.PreparedRequest.$is("viem"), cause => new Error.SystemError({
227
+ method: "signAndSubmit",
228
+ module: "EvmWalletClient",
229
+ reason: "InvalidData",
230
+ cause
231
+ })), Effect.flatMap(prepared => Effect.tryPromise({
232
+ try: () => ViemActions.sendTransaction(wallet, {
233
+ to: prepared.request.to,
234
+ data: prepared.request.data,
235
+ value: prepared.request.value,
236
+ gas: prepared.request.gas,
237
+ nonce: prepared.request.nonce,
238
+ account: wallet.account,
239
+ chain: wallet.chain
240
+ }),
241
+ catch: cause => new Error.SystemError({
242
+ method: "signAndSubmit",
243
+ module: "EvmWalletClient",
244
+ reason: "InvalidData",
245
+ cause
246
+ })
247
+ })), Effect.map(hash => Domain.SubmissionResult.viemWriteContract({
248
+ hash: Brand.nominal()(hash)
249
+ }))));
250
+ // TODO: check if required
251
+ const approveZAssetToSpendErc20 = Effect.fn("approveZAssetToSpendErc20")(function* (args) {
252
+ return yield* pipe(
253
+ // XXX: fix hardcoded chainid
254
+ ZAssetRegistry.getZAsset(8453n, args.srcErc20Address), Effect.mapError(cause => new Error.SystemError({
255
+ method: "approveZAssetToSpendErc20",
256
+ module: "EvmWalletClient",
257
+ reason: "InvalidData",
258
+ cause
259
+ })), Effect.flatMap(zAsset => encodeFunctionData({
260
+ abi: Abi.ERC20_ABI,
261
+ functionName: "approve",
262
+ args: [zAsset, args.amount]
263
+ })), Effect.flatMap(data => prepareTransactionRequest({
264
+ to: args.srcErc20Address,
265
+ data,
266
+ chain: wallet.chain
267
+ })), Effect.map(request => Domain.PreparedRequest.viem({
268
+ request: request,
269
+ kind: "approval"
270
+ })));
271
+ });
272
+ // TODO: check if required
273
+ const updateLoopbackClient = Effect.fn("updateLoopbackClient")(function* ({
274
+ clientId,
275
+ height,
276
+ ibcHandlerAddress
277
+ }) {
278
+ // const publicClient = Viem.createPublicClient({
279
+ // transport: Viem.http(wallet.transport.rpcUrl),
280
+ // });
281
+ const publicClient = wallet.extend(Viem.publicActions);
282
+ const blockNumber = height;
283
+ const block = yield* Effect.tryPromise({
284
+ try: () => publicClient.getBlock({
285
+ blockNumber
286
+ }),
287
+ catch: cause => new Error.SystemError({
288
+ module: "EvmWalletClient",
289
+ method: "updateLoopbackClient",
290
+ reason: "InvalidData",
291
+ description: "Cannot getBlockNumber",
292
+ cause
293
+ })
294
+ });
295
+ // if (!block.number) {
296
+ // throw new Error("Block number is null");
297
+ // }
298
+ // Helper to convert bigint/number to minimal RLP hex encoding
299
+ const toRlpHex = value => {
300
+ if (value === undefined || value === null || value === 0n || value === 0) {
301
+ return "0x";
302
+ }
303
+ let hex = typeof value === "bigint" ? value.toString(16) : value.toString(16);
304
+ if (hex.length % 2 !== 0) {
305
+ hex = "0" + hex;
306
+ }
307
+ return `0x${hex}`;
308
+ };
309
+ // Build header fields in order (pre-merge + post-merge fields)
310
+ const headerFields = [block.parentHash, block.sha3Uncles, block.miner, block.stateRoot, block.transactionsRoot, block.receiptsRoot, block.logsBloom ?? "0x" + "00".repeat(256), toRlpHex(block.difficulty), toRlpHex(block.number), toRlpHex(block.gasLimit), toRlpHex(block.gasUsed), toRlpHex(block.timestamp), block.extraData, block.mixHash ?? "0x0000000000000000000000000000000000000000000000000000000000000000", block.nonce ?? "0x0000000000000000"];
311
+ // Post-merge fields
312
+ if (block.baseFeePerGas !== undefined && block.baseFeePerGas !== null) {
313
+ headerFields.push(toRlpHex(block.baseFeePerGas));
314
+ }
315
+ if (block.withdrawalsRoot) {
316
+ headerFields.push(block.withdrawalsRoot);
317
+ }
318
+ if (block.blobGasUsed !== undefined && block.blobGasUsed !== null) {
319
+ headerFields.push(toRlpHex(block.blobGasUsed));
320
+ }
321
+ if (block.excessBlobGas !== undefined && block.excessBlobGas !== null) {
322
+ headerFields.push(toRlpHex(block.excessBlobGas));
323
+ }
324
+ if (block.parentBeaconBlockRoot) {
325
+ headerFields.push(block.parentBeaconBlockRoot);
326
+ }
327
+ const blockAny = block;
328
+ if (blockAny.requestsHash) {
329
+ headerFields.push(blockAny.requestsHash);
330
+ }
331
+ const rlpEncoded = Viem.toRlp(headerFields);
332
+ // Verify the encoding produces the correct block hash
333
+ const computedHash = Viem.keccak256(rlpEncoded);
334
+ if (computedHash !== block.hash) {
335
+ return yield* new Error.SystemError({
336
+ module: "EvmWalletClient",
337
+ method: "updateLooopbackClient",
338
+ reason: "InvalidData",
339
+ description: `RLP encoding mismatch: computed hash ${computedHash} does not match block hash ${block.hash}`
340
+ });
341
+ }
342
+ // Encode the Header struct: (uint64 height, bytes encodedHeader)
343
+ const clientMessage = Viem.encodeAbiParameters([{
344
+ type: "uint64",
345
+ name: "height"
346
+ }, {
347
+ type: "bytes",
348
+ name: "encodedHeader"
349
+ }], [block.number, rlpEncoded]);
350
+ const LIGHTCLIENT_ABI = [{
351
+ inputs: [{
352
+ name: "caller",
353
+ type: "address"
354
+ }, {
355
+ name: "clientId",
356
+ type: "uint32"
357
+ }, {
358
+ name: "clientMessage",
359
+ type: "bytes"
360
+ }, {
361
+ name: "relayer",
362
+ type: "address"
363
+ }],
364
+ name: "updateClient",
365
+ outputs: [],
366
+ stateMutability: "nonpayable",
367
+ type: "function"
368
+ }];
369
+ // Wait for the next block so the fetched block's hash is verifiable on-chain
370
+ let currentBlock = yield* Effect.tryPromise({
371
+ try: () => publicClient.getBlockNumber(),
372
+ catch: cause => new Error.SystemError({
373
+ module: "EvmWalletClient",
374
+ method: "updateLoopbackClient",
375
+ reason: "InvalidData",
376
+ description: "Cannot getBlockNumber",
377
+ cause
378
+ })
379
+ });
380
+ while (currentBlock <= blockNumber) {
381
+ yield* Effect.sleep("1 second");
382
+ currentBlock = yield* Effect.tryPromise({
383
+ try: () => publicClient.getBlockNumber(),
384
+ catch: cause => new Error.SystemError({
385
+ module: "EvmWalletClient",
386
+ method: "updateLoopbackClient",
387
+ reason: "InvalidData",
388
+ description: "Cannot getBlockNumber",
389
+ cause
390
+ })
391
+ });
392
+ }
393
+ const loopbackClient = yield* Effect.tryPromise({
394
+ try: () => publicClient.readContract({
395
+ address: ibcHandlerAddress,
396
+ abi: Abi.IBC_STORE_ABI,
397
+ functionName: "getClient",
398
+ args: [clientId]
399
+ }),
400
+ catch: cause => new Error.SystemError({
401
+ module: "EvmWalletClient",
402
+ method: "updateLoopbackClient",
403
+ reason: "InvalidData",
404
+ description: "cannot get client given ibc handler address",
405
+ cause
406
+ })
407
+ });
408
+ return yield* pipe(encodeFunctionData({
409
+ abi: LIGHTCLIENT_ABI,
410
+ functionName: "updateClient",
411
+ args: [wallet.account.address, clientId, clientMessage, wallet.account.address]
412
+ }), Effect.flatMap(data => prepareTransactionRequest({
413
+ to: loopbackClient,
414
+ data,
415
+ chain: wallet.chain
416
+ })), Effect.map(request => Domain.PreparedRequest.viem({
417
+ request: request,
418
+ kind: "transfer"
419
+ })));
420
+ });
421
+ const depositUnderlyingZAsset = Effect.fn("depositUnderlyingZAsset")(function* (args) {
422
+ const zAssetAddr = yield* ZAssetRegistry.getZAsset(8453n, args.srcErc20Address).pipe(Effect.mapError(cause => new Error.SystemError({
423
+ method: "depositUnderlyingZAsset",
424
+ module: "EvmWalletClient",
425
+ reason: "InvalidData",
426
+ cause
427
+ })));
428
+ return yield* pipe(encodeFunctionData({
429
+ abi: Abi.ZASSET_ABI,
430
+ functionName: "deposit",
431
+ args: [args.amount]
432
+ }), Effect.flatMap(data => prepareTransactionRequest({
433
+ to: zAssetAddr,
434
+ data,
435
+ chain: wallet.chain
436
+ })), Effect.map(request => Domain.PreparedRequest.viem({
437
+ request: request,
438
+ kind: "deposit"
439
+ })));
440
+ });
441
+ const transferZAsset = Effect.fn("transferZAsset")(function* (args) {
442
+ const zAssetAddr = yield* ZAssetRegistry.getZAsset(8453n, args.srcErc20Address).pipe(Effect.mapError(cause => new Error.SystemError({
443
+ method: "transferZAsset",
444
+ module: "EvmWalletClient",
445
+ reason: "InvalidData",
446
+ cause
447
+ })));
448
+ return yield* pipe(encodeFunctionData({
449
+ abi: Abi.ZASSET_ABI,
450
+ functionName: "transfer",
451
+ args: [args.depositAddress, args.amount]
452
+ }), Effect.flatMap(data => prepareTransactionRequest({
453
+ to: zAssetAddr,
454
+ data,
455
+ chain: wallet.chain
456
+ })), Effect.map(request => Domain.PreparedRequest.viem({
457
+ request: request,
458
+ kind: "transfer"
459
+ })));
460
+ });
461
+ const prepareDeposit = Effect.fn("prepareDeposit")(function* (args) {
462
+ const zAssetAddress = ZAssetRegistry.Z_ASSET_REGISTRY[`${args.sourceChainId}`][args.srcErc20Address];
463
+ if (!zAssetAddress) {
464
+ return yield* new Error.SystemError({
465
+ method: "deposit",
466
+ module: "PaymentClient",
467
+ reason: "InvalidData",
468
+ description: `No zAsset found for ${args.srcErc20Address} on chain ${args.sourceChainId}`
469
+ });
470
+ }
471
+ const [approvalData, depositData, transferData] = yield* Effect.all([encodeFunctionData({
472
+ abi: Abi.ERC20_ABI,
473
+ functionName: "approve",
474
+ args: [zAssetAddress, args.amount]
475
+ }), encodeFunctionData({
476
+ abi: Abi.ZASSET_ABI,
477
+ functionName: "deposit",
478
+ args: [args.amount]
479
+ }), encodeFunctionData({
480
+ abi: Abi.ZASSET_ABI,
481
+ functionName: "transfer",
482
+ args: [args.depositAddress, args.amount]
483
+ })], {
484
+ concurrency: "unbounded"
485
+ });
486
+ const preparedTxs = yield* prepareBatchTransactionRequest([{
487
+ to: args.srcErc20Address,
488
+ data: approvalData
489
+ }, {
490
+ to: zAssetAddress,
491
+ data: depositData
492
+ }, {
493
+ to: zAssetAddress,
494
+ data: transferData
495
+ }]);
496
+ const approval = Domain.PreparedRequest.viem({
497
+ request: preparedTxs[0],
498
+ kind: "approval"
499
+ });
500
+ const deposit = Domain.PreparedRequest.viem({
501
+ request: preparedTxs[1],
502
+ kind: "deposit"
503
+ });
504
+ const transfer = Domain.PreparedRequest.viem({
505
+ request: preparedTxs[2],
506
+ kind: "transfer"
507
+ });
508
+ yield* Effect.log("[deposit]", {
509
+ approval,
510
+ deposit,
511
+ transfer
512
+ });
513
+ return [approval, deposit, transfer];
514
+ });
515
+ const prepareRedemption = Effect.fn("prepareRedemption")(function* (args) {
516
+ const zAssetAddr = yield* ZAssetRegistry.getZAsset(8453n, args.dstErc20Address).pipe(Effect.mapError(cause => new Error.SystemError({
517
+ method: "transferZAsset",
518
+ module: "EvmWalletClient",
519
+ reason: "InvalidData",
520
+ cause
521
+ })));
522
+ return yield* pipe(encodeFunctionData({
523
+ abi: Abi.ZASSET_ABI,
524
+ functionName: "redeem",
525
+ args: [args.proof, args.commitments, args.commitmentPok, args.lightClients, args.nullifier, args.value, args.beneficiary, args.attestedMessage, args.signature, args.unwrap ?? true]
526
+ }), Effect.flatMap(data => prepareTransactionRequest({
527
+ to: zAssetAddr,
528
+ data,
529
+ chain: wallet.chain
530
+ })), Effect.map(request => Domain.PreparedRequest.viem({
531
+ request: request,
532
+ kind: "approval"
533
+ })));
534
+ });
535
+ return Object.assign(yield* Client.make({
536
+ sign,
537
+ submit,
538
+ approveZAssetToSpendErc20,
539
+ updateLoopbackClient,
540
+ depositUnderlyingZAsset,
541
+ transferZAsset,
542
+ prepareDeposit,
543
+ prepareRedemption,
544
+ signAndSubmit
545
+ }), {
546
+ [TypeId]: TypeId,
547
+ signTransaction,
548
+ sendRawTransaction,
549
+ writeContract,
550
+ prepareBatchTransactionRequest
551
+ });
552
+ });
553
+ /**
554
+ * @category layers
555
+ * @since 1.0.0
556
+ */
557
+ export const layerFromViem = config => Layer.scopedContext(Effect.map(makeViem(config), client => Context.make(EvmWalletClient, client).pipe(Context.add(Client.WalletClient, client))));
558
+ const makeBrowser = /*#__PURE__*/Effect.fn(function* (options) {
559
+ const Mipd = yield* Effect.tryPromise({
560
+ try: () => import("mipd").then(x => x),
561
+ catch: cause => new Error.SystemError({
562
+ reason: "DynamicImport",
563
+ method: "makeBrowser",
564
+ module: "EvmWalletClient",
565
+ cause,
566
+ description: "could not import mipd"
567
+ })
568
+ });
569
+ const store = Mipd.createStore();
570
+ yield* Effect.log({
571
+ store
572
+ });
573
+ const providers = store.getProviders();
574
+ yield* Effect.log({
575
+ providers
576
+ });
577
+ const selected = yield* pipe(A.findFirst(providers, options.providerPredicate), Effect.mapError(cause => new Error.SystemError({
578
+ reason: "DynamicImport",
579
+ method: "makeBrowser",
580
+ module: "EvmWalletClient",
581
+ cause,
582
+ description: "could not find provider"
583
+ })));
584
+ yield* Effect.log({
585
+ selected
586
+ });
587
+ const account = yield* pipe(Effect.tryPromise({
588
+ try: () => selected.provider.request({
589
+ method: "eth_requestAccounts"
590
+ }),
591
+ catch: cause => new Error.SystemError({
592
+ reason: "DynamicImport",
593
+ method: "makeBrowser",
594
+ module: "EvmWalletClient",
595
+ cause,
596
+ description: "could not request accounts"
597
+ })
598
+ }), Effect.flatMap(A.findFirst(options.accountPredicate)), Effect.catchTag("NoSuchElementException", cause => new Error.SystemError({
599
+ reason: "DynamicImport",
600
+ method: "makeBrowser",
601
+ module: "EvmWalletClient",
602
+ cause,
603
+ description: "could not match account by predicate"
604
+ })));
605
+ const Viem = yield* Effect.tryPromise({
606
+ try: () => import("viem").then(x => x),
607
+ catch: cause => new Error.SystemError({
608
+ reason: "DynamicImport",
609
+ method: "makeViem",
610
+ module: "EvmWalletClient",
611
+ cause,
612
+ description: "could not import viem"
613
+ })
614
+ });
615
+ const ViemChains = yield* Effect.tryPromise({
616
+ try: () => import("viem/chains").then(x => x),
617
+ catch: cause => new Error.SystemError({
618
+ reason: "DynamicImport",
619
+ method: "makeViem",
620
+ module: "EvmWalletClient",
621
+ cause,
622
+ description: "could not import viem/chains"
623
+ })
624
+ });
625
+ const wallet = yield* Effect.try({
626
+ try: () => Viem.createWalletClient({
627
+ account: account,
628
+ chain: ViemChains.base,
629
+ transport: Viem.custom(selected.provider)
630
+ }),
631
+ catch: cause => new Error.SystemError({
632
+ reason: "DynamicImport",
633
+ method: "makeViem",
634
+ module: "EvmWalletClient",
635
+ cause,
636
+ description: "could not import viem/chains"
637
+ })
638
+ });
639
+ return layerFromViem(wallet);
640
+ });
641
+ // export const makeThirdweb = Effect.fn(function* (...options: Parameters<typeof ThirdwebAdaptersViem['viemAdapter']['wallet']['toViem']>) {
642
+ // const { viemAdapter } = yield* Effect.tryPromise({
643
+ // try: () => import("thirdweb/adapters/viem"),
644
+ // catch: (cause) => new Error.SystemError({
645
+ // method: "makeThirdweb",
646
+ // module: "EvmWalletClient",
647
+ // reason: "DynamicImport",
648
+ // cause,
649
+ // })
650
+ // })
651
+ // const wallet = viemAdapter.wallet.toViem(...options)
652
+ // return layerFromViem(wallet as Viem.WalletClient)
653
+ // })
654
+ /**
655
+ * @category layers
656
+ * @since 1.0.0
657
+ */
658
+ export const layerFromBrowser = options => Layer.unwrapScoped(makeBrowser(options));
659
+ //# sourceMappingURL=EvmWalletClient.js.map