@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,867 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.RpcClient = exports.IBC_STORE_ABI = void 0;
7
+ exports.computeStorageSlot = computeStorageSlot;
8
+ exports.depositToZAsset = depositToZAsset;
9
+ exports.deterministicShuffleClients = deterministicShuffleClients;
10
+ exports.fetchLightClients = fetchLightClients;
11
+ exports.fetchMptProof = fetchMptProof;
12
+ exports.parseProofJson = parseProofJson;
13
+ exports.proofJsonToRedeemParams = proofJsonToRedeemParams;
14
+ exports.signAttestedMessage = signAttestedMessage;
15
+ exports.submitRedeem = submitRedeem;
16
+ exports.updateLoopbackClient = updateLoopbackClient;
17
+ var _viem = require("viem");
18
+ var _accounts = require("viem/accounts");
19
+ const ERC20_ABI = [{
20
+ inputs: [{
21
+ name: "account",
22
+ type: "address"
23
+ }],
24
+ name: "balanceOf",
25
+ outputs: [{
26
+ name: "",
27
+ type: "uint256"
28
+ }],
29
+ stateMutability: "view",
30
+ type: "function"
31
+ }, {
32
+ inputs: [],
33
+ name: "decimals",
34
+ outputs: [{
35
+ name: "",
36
+ type: "uint8"
37
+ }],
38
+ stateMutability: "view",
39
+ type: "function"
40
+ }, {
41
+ inputs: [],
42
+ name: "symbol",
43
+ outputs: [{
44
+ name: "",
45
+ type: "string"
46
+ }],
47
+ stateMutability: "view",
48
+ type: "function"
49
+ }, {
50
+ inputs: [{
51
+ name: "spender",
52
+ type: "address"
53
+ }, {
54
+ name: "amount",
55
+ type: "uint256"
56
+ }],
57
+ name: "approve",
58
+ outputs: [{
59
+ name: "",
60
+ type: "bool"
61
+ }],
62
+ stateMutability: "nonpayable",
63
+ type: "function"
64
+ }, {
65
+ inputs: [{
66
+ name: "to",
67
+ type: "address"
68
+ }, {
69
+ name: "amount",
70
+ type: "uint256"
71
+ }],
72
+ name: "transfer",
73
+ outputs: [{
74
+ name: "",
75
+ type: "bool"
76
+ }],
77
+ stateMutability: "nonpayable",
78
+ type: "function"
79
+ }, {
80
+ inputs: [{
81
+ name: "from",
82
+ type: "address"
83
+ }, {
84
+ name: "to",
85
+ type: "address"
86
+ }, {
87
+ name: "amount",
88
+ type: "uint256"
89
+ }],
90
+ name: "transferFrom",
91
+ outputs: [{
92
+ name: "",
93
+ type: "bool"
94
+ }],
95
+ stateMutability: "nonpayable",
96
+ type: "function"
97
+ }];
98
+ const IBC_STORE_ABI = exports.IBC_STORE_ABI = [{
99
+ inputs: [{
100
+ name: "clientId",
101
+ type: "uint32"
102
+ }],
103
+ name: "getClient",
104
+ outputs: [{
105
+ name: "",
106
+ type: "address"
107
+ }],
108
+ stateMutability: "view",
109
+ type: "function"
110
+ }];
111
+ const LIGHT_CLIENT_ABI = [{
112
+ inputs: [{
113
+ name: "clientId",
114
+ type: "uint32"
115
+ }],
116
+ name: "getLatestHeight",
117
+ outputs: [{
118
+ name: "",
119
+ type: "uint64"
120
+ }],
121
+ stateMutability: "view",
122
+ type: "function"
123
+ }, {
124
+ inputs: [{
125
+ name: "clientId",
126
+ type: "uint32"
127
+ }, {
128
+ name: "height",
129
+ type: "uint64"
130
+ }],
131
+ name: "getConsensusState",
132
+ outputs: [{
133
+ name: "",
134
+ type: "bytes"
135
+ }],
136
+ stateMutability: "view",
137
+ type: "function"
138
+ }];
139
+ const ZASSET_ABI = [{
140
+ inputs: [{
141
+ name: "nullifier",
142
+ type: "uint256"
143
+ }],
144
+ name: "nullifierBalance",
145
+ outputs: [{
146
+ name: "",
147
+ type: "uint256"
148
+ }],
149
+ stateMutability: "view",
150
+ type: "function"
151
+ }, {
152
+ inputs: [{
153
+ name: "clientId",
154
+ type: "uint32"
155
+ }],
156
+ name: "counterparty",
157
+ outputs: [{
158
+ components: [{
159
+ name: "tokenAddressKey",
160
+ type: "bytes32"
161
+ }, {
162
+ name: "balanceSlot",
163
+ type: "bytes32"
164
+ }],
165
+ type: "tuple"
166
+ }],
167
+ stateMutability: "view",
168
+ type: "function"
169
+ }, {
170
+ inputs: [],
171
+ name: "ibcHandler",
172
+ outputs: [{
173
+ name: "",
174
+ type: "address"
175
+ }],
176
+ stateMutability: "view",
177
+ type: "function"
178
+ }, {
179
+ inputs: [{
180
+ name: "clientId",
181
+ type: "uint32"
182
+ }],
183
+ name: "stateRootIndex",
184
+ outputs: [{
185
+ name: "",
186
+ type: "uint256"
187
+ }],
188
+ stateMutability: "view",
189
+ type: "function"
190
+ }, {
191
+ inputs: [],
192
+ name: "underlying",
193
+ outputs: [{
194
+ name: "",
195
+ type: "address"
196
+ }],
197
+ stateMutability: "view",
198
+ type: "function"
199
+ }, {
200
+ inputs: [{
201
+ name: "amount",
202
+ type: "uint256"
203
+ }],
204
+ name: "deposit",
205
+ outputs: [],
206
+ stateMutability: "nonpayable",
207
+ type: "function"
208
+ }, {
209
+ inputs: [{
210
+ name: "to",
211
+ type: "address"
212
+ }, {
213
+ name: "amount",
214
+ type: "uint256"
215
+ }],
216
+ name: "transfer",
217
+ outputs: [{
218
+ name: "",
219
+ type: "bool"
220
+ }],
221
+ stateMutability: "nonpayable",
222
+ type: "function"
223
+ }, {
224
+ inputs: [{
225
+ name: "proof",
226
+ type: "uint256[8]"
227
+ }, {
228
+ name: "commitments",
229
+ type: "uint256[2]"
230
+ }, {
231
+ name: "commitmentPok",
232
+ type: "uint256[2]"
233
+ }, {
234
+ name: "lightClients",
235
+ type: "tuple[]",
236
+ components: [{
237
+ name: "clientId",
238
+ type: "uint32"
239
+ }, {
240
+ name: "height",
241
+ type: "uint64"
242
+ }]
243
+ }, {
244
+ name: "nullifier",
245
+ type: "uint256"
246
+ }, {
247
+ name: "value",
248
+ type: "uint256"
249
+ }, {
250
+ name: "beneficiary",
251
+ type: "address"
252
+ }, {
253
+ name: "attestedMessage",
254
+ type: "bytes32"
255
+ }, {
256
+ name: "signature",
257
+ type: "bytes"
258
+ }],
259
+ name: "redeem",
260
+ outputs: [],
261
+ stateMutability: "nonpayable",
262
+ type: "function"
263
+ }, {
264
+ anonymous: false,
265
+ inputs: [{
266
+ indexed: true,
267
+ name: "from",
268
+ type: "address"
269
+ }, {
270
+ indexed: true,
271
+ name: "to",
272
+ type: "address"
273
+ }, {
274
+ indexed: false,
275
+ name: "value",
276
+ type: "uint256"
277
+ }],
278
+ name: "Transfer",
279
+ type: "event"
280
+ }, {
281
+ anonymous: false,
282
+ inputs: [{
283
+ indexed: true,
284
+ name: "nullifier",
285
+ type: "uint256"
286
+ }, {
287
+ indexed: true,
288
+ name: "redeemAmount",
289
+ type: "uint256"
290
+ }, {
291
+ indexed: true,
292
+ name: "beneficiary",
293
+ type: "address"
294
+ }],
295
+ name: "Redeemed",
296
+ type: "event"
297
+ }];
298
+ const IBC_HANDLER_ABI = [{
299
+ inputs: [{
300
+ components: [{
301
+ name: "clientId",
302
+ type: "uint32"
303
+ }, {
304
+ name: "clientMessage",
305
+ type: "bytes"
306
+ }, {
307
+ name: "relayer",
308
+ type: "address"
309
+ }],
310
+ name: "msg_",
311
+ type: "tuple"
312
+ }],
313
+ name: "updateClient",
314
+ outputs: [],
315
+ stateMutability: "nonpayable",
316
+ type: "function"
317
+ }];
318
+ // @ts-expect-error
319
+ const MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
320
+ // @ts-expect-error
321
+ const MULTICALL3_ABI = [{
322
+ inputs: [{
323
+ name: "calls",
324
+ type: "tuple[]",
325
+ components: [{
326
+ name: "target",
327
+ type: "address"
328
+ }, {
329
+ name: "allowFailure",
330
+ type: "bool"
331
+ }, {
332
+ name: "callData",
333
+ type: "bytes"
334
+ }]
335
+ }],
336
+ name: "aggregate3",
337
+ outputs: [{
338
+ name: "returnData",
339
+ type: "tuple[]",
340
+ components: [{
341
+ name: "success",
342
+ type: "bool"
343
+ }, {
344
+ name: "returnData",
345
+ type: "bytes"
346
+ }]
347
+ }],
348
+ stateMutability: "payable",
349
+ type: "function"
350
+ }];
351
+ /**
352
+ * @public
353
+ */
354
+ class RpcClient {
355
+ client;
356
+ constructor(rpcUrl) {
357
+ this.client = (0, _viem.createPublicClient)({
358
+ transport: (0, _viem.http)(rpcUrl)
359
+ });
360
+ }
361
+ getClient() {
362
+ return this.client;
363
+ }
364
+ async getChainId() {
365
+ return BigInt(await this.client.getChainId());
366
+ }
367
+ async getLatestBlockNumber() {
368
+ return this.client.getBlockNumber();
369
+ }
370
+ async getBalance(tokenAddress, accountAddress, blockNumber) {
371
+ return this.client.readContract({
372
+ address: tokenAddress,
373
+ abi: ERC20_ABI,
374
+ functionName: "balanceOf",
375
+ args: [accountAddress],
376
+ blockNumber
377
+ });
378
+ }
379
+ async getDecimals(tokenAddress) {
380
+ return this.client.readContract({
381
+ address: tokenAddress,
382
+ abi: ERC20_ABI,
383
+ functionName: "decimals"
384
+ });
385
+ }
386
+ async getSymbol(tokenAddress) {
387
+ return this.client.readContract({
388
+ address: tokenAddress,
389
+ abi: ERC20_ABI,
390
+ functionName: "symbol"
391
+ });
392
+ }
393
+ async getLightClientAddress(ibcStoreAddress, clientId) {
394
+ return this.client.readContract({
395
+ address: ibcStoreAddress,
396
+ abi: IBC_STORE_ABI,
397
+ functionName: "getClient",
398
+ args: [clientId]
399
+ });
400
+ }
401
+ async getLatestHeight(lightClientAddress, clientId) {
402
+ return this.client.readContract({
403
+ address: lightClientAddress,
404
+ abi: LIGHT_CLIENT_ABI,
405
+ functionName: "getLatestHeight",
406
+ args: [clientId]
407
+ });
408
+ }
409
+ /**
410
+ * Get consensus state, extracting the state root at the given byte index
411
+ */
412
+ async getConsensusState(lightClientAddress, clientId, height, stateRootIndex) {
413
+ const consensusBytes = await this.client.readContract({
414
+ address: lightClientAddress,
415
+ abi: LIGHT_CLIENT_ABI,
416
+ functionName: "getConsensusState",
417
+ args: [clientId, height]
418
+ });
419
+ const bytes = (0, _viem.hexToBytes)(consensusBytes);
420
+ const idx = Number(stateRootIndex);
421
+ const stateRoot = (0, _viem.bytesToHex)(bytes.slice(idx, idx + 32));
422
+ return {
423
+ stateRoot
424
+ };
425
+ }
426
+ async getNullifierBalance(zassetAddress, nullifier) {
427
+ return this.client.readContract({
428
+ address: zassetAddress,
429
+ abi: ZASSET_ABI,
430
+ functionName: "nullifierBalance",
431
+ args: [nullifier]
432
+ });
433
+ }
434
+ async getCounterparty(zassetAddress, clientId) {
435
+ const result = await this.client.readContract({
436
+ address: zassetAddress,
437
+ abi: ZASSET_ABI,
438
+ functionName: "counterparty",
439
+ args: [clientId]
440
+ });
441
+ return {
442
+ tokenAddressKey: result.tokenAddressKey,
443
+ balanceSlot: result.balanceSlot
444
+ };
445
+ }
446
+ async getIbcHandlerAddress(zassetAddress) {
447
+ return this.client.readContract({
448
+ address: zassetAddress,
449
+ abi: ZASSET_ABI,
450
+ functionName: "ibcHandler"
451
+ });
452
+ }
453
+ async getStateRootIndex(zassetAddress, clientId) {
454
+ return this.client.readContract({
455
+ address: zassetAddress,
456
+ abi: ZASSET_ABI,
457
+ functionName: "stateRootIndex",
458
+ args: [clientId]
459
+ });
460
+ }
461
+ async getProof(address, storageKeys, blockNumber) {
462
+ return this.client.getProof({
463
+ address,
464
+ storageKeys,
465
+ blockNumber
466
+ });
467
+ }
468
+ async getBlock(blockNumber) {
469
+ return this.client.getBlock({
470
+ blockNumber
471
+ });
472
+ }
473
+ /**
474
+ * Get redemption history for a nullifier by querying Redeemed events
475
+ */
476
+ async getRedemptionHistory(zassetAddress, nullifier, fromBlock, toBlock) {
477
+ const logs = await this.client.getLogs({
478
+ address: zassetAddress,
479
+ event: {
480
+ type: "event",
481
+ name: "Redeemed",
482
+ inputs: [{
483
+ indexed: true,
484
+ name: "nullifier",
485
+ type: "uint256"
486
+ }, {
487
+ indexed: true,
488
+ name: "redeemAmount",
489
+ type: "uint256"
490
+ }, {
491
+ indexed: true,
492
+ name: "beneficiary",
493
+ type: "address"
494
+ }]
495
+ },
496
+ args: {
497
+ nullifier
498
+ },
499
+ fromBlock: fromBlock ?? "earliest",
500
+ toBlock: toBlock ?? "latest"
501
+ });
502
+ return logs.map(log => ({
503
+ txHash: log.transactionHash,
504
+ blockNumber: log.blockNumber,
505
+ redeemAmount: log.args.redeemAmount,
506
+ beneficiary: log.args.beneficiary
507
+ }));
508
+ }
509
+ }
510
+ /**
511
+ * Compute the storage slot for an ERC20 balance mapping: keccak256(abi.encode(address, slot))
512
+ * @public
513
+ */
514
+ exports.RpcClient = RpcClient;
515
+ function computeStorageSlot(address, mappingSlot) {
516
+ const paddedAddress = (0, _viem.padHex)(address, {
517
+ size: 32
518
+ });
519
+ const paddedSlot = (0, _viem.padHex)((0, _viem.toHex)(mappingSlot), {
520
+ size: 32
521
+ });
522
+ return (0, _viem.keccak256)((0, _viem.encodePacked)(["bytes32", "bytes32"], [paddedAddress, paddedSlot]));
523
+ }
524
+ /**
525
+ * @public
526
+ */
527
+ async function fetchLightClients(dstClient, zassetAddress, clientIds) {
528
+ const ibcHandlerAddress = await dstClient.getIbcHandlerAddress(zassetAddress);
529
+ const results = [];
530
+ for (const clientId of clientIds) {
531
+ try {
532
+ const lightClientAddress = await dstClient.getLightClientAddress(ibcHandlerAddress, clientId);
533
+ const height = await dstClient.getLatestHeight(lightClientAddress, clientId);
534
+ const stateRootIndex = await dstClient.getStateRootIndex(zassetAddress, clientId);
535
+ const {
536
+ stateRoot
537
+ } = await dstClient.getConsensusState(lightClientAddress, clientId, height, stateRootIndex);
538
+ results.push({
539
+ clientId,
540
+ height,
541
+ stateRoot
542
+ });
543
+ } catch {}
544
+ }
545
+ return results;
546
+ }
547
+ /**
548
+ * @public
549
+ */
550
+ async function fetchMptProof(srcClient, tokenAddress, storageSlot, blockNumber) {
551
+ const proof = await srcClient.getProof(tokenAddress, [storageSlot], blockNumber);
552
+ let storageProof = [];
553
+ let storageValue = "0x0";
554
+ if (proof.storageProof.length > 0 && proof.storageProof[0]) {
555
+ storageProof = proof.storageProof[0].proof;
556
+ storageValue = (0, _viem.toHex)(proof.storageProof[0].value);
557
+ }
558
+ return {
559
+ accountProof: proof.accountProof,
560
+ storageProof,
561
+ storageValue,
562
+ storageRoot: proof.storageHash
563
+ };
564
+ }
565
+ /**
566
+ * Deterministically shuffle light clients using the secret as seed.
567
+ * Same secret always produces the same ordering for privacy.
568
+ * @public
569
+ */
570
+ function deterministicShuffleClients(clients, secret) {
571
+ if (clients.length <= 1) {
572
+ return [...clients];
573
+ }
574
+ // Seed = SHA256(secret || clientHeights as big-endian uint64s)
575
+ const secretBytes = (0, _viem.hexToBytes)(secret);
576
+ const heightsBytes = new Uint8Array(clients.length * 8);
577
+ for (let i = 0; i < clients.length; i++) {
578
+ const view = new DataView(heightsBytes.buffer, i * 8, 8);
579
+ view.setBigUint64(0, clients[i].height, false);
580
+ }
581
+ const combined = new Uint8Array(secretBytes.length + heightsBytes.length);
582
+ combined.set(secretBytes, 0);
583
+ combined.set(heightsBytes, secretBytes.length);
584
+ const seedHex = (0, _viem.sha256)(combined);
585
+ const seed = (0, _viem.hexToBytes)(seedHex);
586
+ // Fisher-Yates shuffle with deterministic PRNG
587
+ const shuffled = [...clients];
588
+ let seedIndex = 0;
589
+ for (let i = shuffled.length - 1; i > 0; i--) {
590
+ const randomByte = seed[seedIndex % seed.length];
591
+ seedIndex++;
592
+ const j = randomByte % (i + 1);
593
+ [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
594
+ }
595
+ return shuffled;
596
+ }
597
+ /**
598
+ * Sign an attested message with raw ECDSA (no EIP-191 prefix).
599
+ * Matches Go CLI's crypto.Sign behavior for SignatureCheckerLib verification.
600
+ * @public
601
+ */
602
+ async function signAttestedMessage(message, privateKey) {
603
+ const messageBytes = (0, _viem.hexToBytes)(message);
604
+ if (messageBytes.length !== 32) {
605
+ throw new Error(`Invalid message length: expected 32 bytes, got ${messageBytes.length}`);
606
+ }
607
+ const signature = await (0, _accounts.sign)({
608
+ hash: message,
609
+ privateKey,
610
+ to: "hex"
611
+ });
612
+ return signature;
613
+ }
614
+ /**
615
+ * @public
616
+ */
617
+ function parseProofJson(proofJsonBytes) {
618
+ const jsonStr = new TextDecoder().decode(proofJsonBytes);
619
+ const raw = JSON.parse(jsonStr);
620
+ const commitments = raw.commitments ?? ["0x0", "0x0"];
621
+ return {
622
+ proof: raw.proof,
623
+ commitments: commitments,
624
+ commitmentPok: raw.commitmentPok,
625
+ publicInputs: raw.publicInputs ?? []
626
+ };
627
+ }
628
+ /**
629
+ * @public
630
+ */
631
+ function proofJsonToRedeemParams(proofJson, metadata) {
632
+ const parseBigInt = s => {
633
+ if (s.startsWith("0x")) {
634
+ return (0, _viem.hexToBigInt)(s);
635
+ }
636
+ return BigInt(s);
637
+ };
638
+ return {
639
+ proof: proofJson.proof.map(parseBigInt),
640
+ commitments: proofJson.commitments.map(parseBigInt),
641
+ commitmentPok: proofJson.commitmentPok.map(parseBigInt),
642
+ lightClients: metadata.lightClients.map(lc => ({
643
+ clientId: lc.clientId,
644
+ height: lc.height
645
+ })),
646
+ nullifier: metadata.nullifier,
647
+ value: metadata.value,
648
+ beneficiary: metadata.beneficiary,
649
+ attestedMessage: metadata.attestedMessage,
650
+ signature: metadata.signature
651
+ };
652
+ }
653
+ /**
654
+ * @public
655
+ */
656
+ async function submitRedeem(zassetAddress, params, walletClient) {
657
+ if (!walletClient.account) {
658
+ throw new Error("WalletClient must have an account");
659
+ }
660
+ if (!walletClient.chain) {
661
+ throw new Error("WalletClient must have a chain configured");
662
+ }
663
+ const hash = await walletClient.writeContractSync({
664
+ address: zassetAddress,
665
+ abi: ZASSET_ABI,
666
+ functionName: "redeem",
667
+ args: [params.proof, params.commitments, params.commitmentPok, params.lightClients, params.nullifier, params.value, params.beneficiary, params.attestedMessage, params.signature],
668
+ chain: walletClient.chain,
669
+ account: walletClient.account
670
+ }).then(x => x.transactionHash);
671
+ return hash;
672
+ }
673
+ /**
674
+ * RLP encode an EVM block header for the loopback light client.
675
+ * The header fields must be in the exact order expected by the EVM.
676
+ * Verifies the encoding by checking that keccak256(rlp) == block.hash
677
+ */
678
+ function rlpEncodeBlockHeader(block) {
679
+ // Helper to convert bigint/number to minimal RLP hex encoding
680
+ // RLP requires no leading zeros, and 0 is encoded as empty string (0x80)
681
+ const toRlpHex = value => {
682
+ if (value === undefined || value === null || value === 0n || value === 0) {
683
+ return "0x";
684
+ }
685
+ let hex = typeof value === "bigint" ? value.toString(16) : value.toString(16);
686
+ // Ensure even length for proper byte encoding
687
+ if (hex.length % 2 !== 0) {
688
+ hex = "0" + hex;
689
+ }
690
+ return `0x${hex}`;
691
+ };
692
+ // Build header fields in order (pre-merge + post-merge fields)
693
+ 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"];
694
+ // Post-merge fields (EIP-1559, EIP-4895, EIP-4844, EIP-4788, EIP-7685)
695
+ if (block.baseFeePerGas !== undefined && block.baseFeePerGas !== null) {
696
+ headerFields.push(toRlpHex(block.baseFeePerGas));
697
+ }
698
+ if (block.withdrawalsRoot) {
699
+ headerFields.push(block.withdrawalsRoot);
700
+ }
701
+ if (block.blobGasUsed !== undefined && block.blobGasUsed !== null) {
702
+ headerFields.push(toRlpHex(block.blobGasUsed));
703
+ }
704
+ if (block.excessBlobGas !== undefined && block.excessBlobGas !== null) {
705
+ headerFields.push(toRlpHex(block.excessBlobGas));
706
+ }
707
+ if (block.parentBeaconBlockRoot) {
708
+ headerFields.push(block.parentBeaconBlockRoot);
709
+ }
710
+ // EIP-7685 requestsHash (Pectra upgrade) - not yet in viem types
711
+ const blockAny = block;
712
+ if (blockAny.requestsHash) {
713
+ headerFields.push(blockAny.requestsHash);
714
+ }
715
+ const rlpEncoded = (0, _viem.toRlp)(headerFields);
716
+ // Verify the encoding produces the correct block hash
717
+ const computedHash = (0, _viem.keccak256)(rlpEncoded);
718
+ if (computedHash !== block.hash) {
719
+ throw new Error(`RLP encoding mismatch: computed hash ${computedHash} does not match block hash ${block.hash}. ` + `Block number: ${block.number}, fields count: ${headerFields.length}`);
720
+ }
721
+ return rlpEncoded;
722
+ }
723
+ /**
724
+ * Update a loopback light client to a specific block height.
725
+ * The loopback client operates on the same chain, so only one RPC URL is needed.
726
+ *
727
+ * @param rpcUrl - RPC URL for the chain (same chain for fetching block and submitting tx)
728
+ * @param ibcHandlerAddress - Address of the IBCHandler contract
729
+ * @param clientId - The light client ID to update
730
+ * @param height - Block height to update to (bigint or 'latest')
731
+ * @param walletClient - viem WalletClient with account and chain configured
732
+ * @returns Transaction hash, block number, state root, and chain ID
733
+ * @public
734
+ */
735
+ async function updateLoopbackClient(rpcUrl, ibcHandlerAddress, clientId, height, walletClient) {
736
+ if (!walletClient.account) {
737
+ throw new Error("WalletClient must have an account");
738
+ }
739
+ if (!walletClient.chain) {
740
+ throw new Error("WalletClient must have a chain configured");
741
+ }
742
+ // Create public client
743
+ const publicClient = (0, _viem.createPublicClient)({
744
+ transport: (0, _viem.http)(rpcUrl)
745
+ });
746
+ // Get chain ID from RPC
747
+ const chainId = await publicClient.getChainId();
748
+ // Get the block number
749
+ const blockNumber = height === "latest" ? await publicClient.getBlockNumber() : height;
750
+ // Get the block for metadata
751
+ const block = await publicClient.getBlock({
752
+ blockNumber
753
+ });
754
+ if (!block.number) {
755
+ throw new Error("Block number is null");
756
+ }
757
+ // RLP encode the block header and verify the hash matches
758
+ const rlpEncodedHeader = rlpEncodeBlockHeader(block);
759
+ // Encode the Header struct: (uint64 height, bytes encodedHeader)
760
+ const clientMessage = (0, _viem.encodeAbiParameters)([{
761
+ type: "uint64",
762
+ name: "height"
763
+ }, {
764
+ type: "bytes",
765
+ name: "encodedHeader"
766
+ }], [block.number, rlpEncodedHeader]);
767
+ // Wait for the next block so the fetched block's hash is verifiable on-chain
768
+ let currentBlock = await publicClient.getBlockNumber();
769
+ while (currentBlock <= blockNumber) {
770
+ await new Promise(resolve => setTimeout(resolve, 1000));
771
+ currentBlock = await publicClient.getBlockNumber();
772
+ }
773
+ // Submit the transaction
774
+ const txHash = await walletClient.writeContractSync({
775
+ address: ibcHandlerAddress,
776
+ abi: IBC_HANDLER_ABI,
777
+ functionName: "updateClient",
778
+ args: [{
779
+ clientId,
780
+ clientMessage,
781
+ relayer: walletClient.account.address
782
+ }],
783
+ chain: walletClient.chain,
784
+ account: walletClient.account
785
+ }).then(x => x.transactionHash);
786
+ return {
787
+ txHash,
788
+ blockNumber: block.number,
789
+ stateRoot: block.stateRoot,
790
+ chainId: BigInt(chainId)
791
+ };
792
+ }
793
+ /**
794
+ * Deposit underlying tokens to ZAsset and transfer to a deposit address.
795
+ * Executes 3 transactions: approve → deposit → transfer.
796
+ *
797
+ * @param rpcUrl - RPC URL for the chain
798
+ * @param zAssetAddress - Address of the ZAsset contract
799
+ * @param depositAddress - Address to receive the ZAsset tokens (derived from secret)
800
+ * @param amount - Amount to deposit (in underlying token's smallest unit)
801
+ * @param walletClient - viem WalletClient with account and chain configured
802
+ * @returns Transaction hash of the final transfer, underlying token address, and chain ID
803
+ * @public
804
+ */
805
+ async function depositToZAsset(rpcUrl, zAssetAddress, depositAddress, amount, walletClient) {
806
+ if (!walletClient.account) {
807
+ throw new Error("WalletClient must have an account");
808
+ }
809
+ if (!walletClient.chain) {
810
+ throw new Error("WalletClient must have a chain configured");
811
+ }
812
+ const publicClient = (0, _viem.createPublicClient)({
813
+ transport: (0, _viem.http)(rpcUrl)
814
+ });
815
+ const chainId = await publicClient.getChainId();
816
+ // Get underlying token address
817
+ const underlyingToken = await publicClient.readContract({
818
+ address: zAssetAddress,
819
+ abi: ZASSET_ABI,
820
+ functionName: "underlying"
821
+ });
822
+ if (underlyingToken === "0x0000000000000000000000000000000000000000") {
823
+ throw new Error("ZAsset is not a wrapped token (underlying is zero address)");
824
+ }
825
+ // 1. Approve ZAsset to spend underlying tokens
826
+ const approveReceipt = await walletClient.writeContractSync({
827
+ address: underlyingToken,
828
+ abi: ERC20_ABI,
829
+ functionName: "approve",
830
+ args: [zAssetAddress, amount],
831
+ chain: walletClient.chain,
832
+ account: walletClient.account
833
+ });
834
+ if (approveReceipt.status === "reverted") {
835
+ throw new Error(`Approve transaction reverted: ${approveReceipt.transactionHash}`);
836
+ }
837
+ // 2. Deposit underlying to get ZAsset
838
+ const depositReceipt = await walletClient.writeContractSync({
839
+ address: zAssetAddress,
840
+ abi: ZASSET_ABI,
841
+ functionName: "deposit",
842
+ args: [amount],
843
+ chain: walletClient.chain,
844
+ account: walletClient.account
845
+ });
846
+ if (depositReceipt.status === "reverted") {
847
+ throw new Error(`Deposit transaction reverted: ${depositReceipt.transactionHash}`);
848
+ }
849
+ // 3. Transfer ZAsset to deposit address
850
+ const transferReceipt = await walletClient.writeContractSync({
851
+ address: zAssetAddress,
852
+ abi: ZASSET_ABI,
853
+ functionName: "transfer",
854
+ args: [depositAddress, amount],
855
+ chain: walletClient.chain,
856
+ account: walletClient.account
857
+ });
858
+ if (transferReceipt.status === "reverted") {
859
+ throw new Error(`Transfer transaction reverted: ${transferReceipt.transactionHash}`);
860
+ }
861
+ return {
862
+ txHash: transferReceipt.transactionHash,
863
+ underlyingToken,
864
+ chainId: BigInt(chainId)
865
+ };
866
+ }
867
+ //# sourceMappingURL=rpc.js.map