@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.
- package/Abi/package.json +6 -0
- package/Attestor/package.json +6 -0
- package/Constants/package.json +6 -0
- package/Domain/package.json +6 -0
- package/Error/package.json +6 -0
- package/EvmPublicClient/package.json +6 -0
- package/EvmWalletClient/package.json +6 -0
- package/Payment/package.json +6 -0
- package/PaymentError/package.json +6 -0
- package/Prover/package.json +6 -0
- package/PublicClient/package.json +6 -0
- package/README.md +1 -0
- package/Schema/package.json +6 -0
- package/Utils/package.json +6 -0
- package/WalletClient/package.json +6 -0
- package/attestation/package.json +6 -0
- package/cli/commands/balance/package.json +6 -0
- package/cli/commands/deposit/package.json +6 -0
- package/cli/commands/export-verifier/package.json +6 -0
- package/cli/commands/generate/package.json +6 -0
- package/cli/commands/history/package.json +6 -0
- package/cli/commands/prove/package.json +6 -0
- package/cli/commands/redeem/package.json +6 -0
- package/cli/commands/update-client/package.json +6 -0
- package/cli/config/package.json +6 -0
- package/cli/package.json +6 -0
- package/cli/utils/package.json +6 -0
- package/constants/ibc-core-registry/package.json +6 -0
- package/constants/services/package.json +6 -0
- package/constants/z-asset-registry/package.json +6 -0
- package/dist/cjs/Abi.js +270 -0
- package/dist/cjs/Abi.js.map +1 -0
- package/dist/cjs/Attestor.js +76 -0
- package/dist/cjs/Attestor.js.map +1 -0
- package/dist/cjs/Constants.js +8 -0
- package/dist/cjs/Constants.js.map +1 -0
- package/dist/cjs/Domain.js +24 -0
- package/dist/cjs/Domain.js.map +1 -0
- package/dist/cjs/Error.js +100 -0
- package/dist/cjs/Error.js.map +1 -0
- package/dist/cjs/EvmPublicClient.js +301 -0
- package/dist/cjs/EvmPublicClient.js.map +1 -0
- package/dist/cjs/EvmWalletClient.js +670 -0
- package/dist/cjs/EvmWalletClient.js.map +1 -0
- package/dist/cjs/Payment.js +333 -0
- package/dist/cjs/Payment.js.map +1 -0
- package/dist/cjs/PaymentError.js +32 -0
- package/dist/cjs/PaymentError.js.map +1 -0
- package/dist/cjs/Prover.js +153 -0
- package/dist/cjs/Prover.js.map +1 -0
- package/dist/cjs/PublicClient.js +39 -0
- package/dist/cjs/PublicClient.js.map +1 -0
- package/dist/cjs/Schema.js +38 -0
- package/dist/cjs/Schema.js.map +1 -0
- package/dist/cjs/Utils.js +33 -0
- package/dist/cjs/Utils.js.map +1 -0
- package/dist/cjs/WalletClient.js +39 -0
- package/dist/cjs/WalletClient.js.map +1 -0
- package/dist/cjs/attestation.js +49 -0
- package/dist/cjs/attestation.js.map +1 -0
- package/dist/cjs/cli/commands/balance.js +60 -0
- package/dist/cjs/cli/commands/balance.js.map +1 -0
- package/dist/cjs/cli/commands/deposit.js +58 -0
- package/dist/cjs/cli/commands/deposit.js.map +1 -0
- package/dist/cjs/cli/commands/export-verifier.js +27 -0
- package/dist/cjs/cli/commands/export-verifier.js.map +1 -0
- package/dist/cjs/cli/commands/generate.js +41 -0
- package/dist/cjs/cli/commands/generate.js.map +1 -0
- package/dist/cjs/cli/commands/history.js +59 -0
- package/dist/cjs/cli/commands/history.js.map +1 -0
- package/dist/cjs/cli/commands/prove.js +82 -0
- package/dist/cjs/cli/commands/prove.js.map +1 -0
- package/dist/cjs/cli/commands/redeem.js +152 -0
- package/dist/cjs/cli/commands/redeem.js.map +1 -0
- package/dist/cjs/cli/commands/update-client.js +62 -0
- package/dist/cjs/cli/commands/update-client.js.map +1 -0
- package/dist/cjs/cli/config.js +32 -0
- package/dist/cjs/cli/config.js.map +1 -0
- package/dist/cjs/cli/utils.js +108 -0
- package/dist/cjs/cli/utils.js.map +1 -0
- package/dist/cjs/cli.js +24 -0
- package/dist/cjs/cli.js.map +1 -0
- package/dist/cjs/constants/ibc-core-registry.js +30 -0
- package/dist/cjs/constants/ibc-core-registry.js.map +1 -0
- package/dist/cjs/constants/services.js +9 -0
- package/dist/cjs/constants/services.js.map +1 -0
- package/dist/cjs/constants/z-asset-registry.js +32 -0
- package/dist/cjs/constants/z-asset-registry.js.map +1 -0
- package/dist/cjs/gen/prover_pb.js +81 -0
- package/dist/cjs/gen/prover_pb.js.map +1 -0
- package/dist/cjs/index.js +32 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/evm.js +191 -0
- package/dist/cjs/internal/evm.js.map +1 -0
- package/dist/cjs/internal/evmWalletClient.js +6 -0
- package/dist/cjs/internal/evmWalletClient.js.map +1 -0
- package/dist/cjs/internal/publicClient.js +49 -0
- package/dist/cjs/internal/publicClient.js.map +1 -0
- package/dist/cjs/internal/walletClient.js +43 -0
- package/dist/cjs/internal/walletClient.js.map +1 -0
- package/dist/cjs/legacy/client.js +1222 -0
- package/dist/cjs/legacy/client.js.map +1 -0
- package/dist/cjs/legacy/prover.js +112 -0
- package/dist/cjs/legacy/prover.js.map +1 -0
- package/dist/cjs/poseidon2.js +226 -0
- package/dist/cjs/poseidon2.js.map +1 -0
- package/dist/cjs/promises/Attestor.js +23 -0
- package/dist/cjs/promises/Attestor.js.map +1 -0
- package/dist/cjs/promises/EvmPublicClient.js +34 -0
- package/dist/cjs/promises/EvmPublicClient.js.map +1 -0
- package/dist/cjs/promises/EvmWalletClient.js +51 -0
- package/dist/cjs/promises/EvmWalletClient.js.map +1 -0
- package/dist/cjs/promises/Payment.js +22 -0
- package/dist/cjs/promises/Payment.js.map +1 -0
- package/dist/cjs/promises/Prover.js +26 -0
- package/dist/cjs/promises/Prover.js.map +1 -0
- package/dist/cjs/promises/PublicClient.js +53 -0
- package/dist/cjs/promises/PublicClient.js.map +1 -0
- package/dist/cjs/promises/WalletClient.js +44 -0
- package/dist/cjs/promises/WalletClient.js.map +1 -0
- package/dist/cjs/promises/index.js +22 -0
- package/dist/cjs/promises/index.js.map +1 -0
- package/dist/cjs/rpc.js +867 -0
- package/dist/cjs/rpc.js.map +1 -0
- package/dist/cjs/types.js +6 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/dts/Abi.d.ts +220 -0
- package/dist/dts/Abi.d.ts.map +1 -0
- package/dist/dts/Attestor.d.ts +42 -0
- package/dist/dts/Attestor.d.ts.map +1 -0
- package/dist/dts/Constants.d.ts +3 -0
- package/dist/dts/Constants.d.ts.map +1 -0
- package/dist/dts/Domain.d.ts +141 -0
- package/dist/dts/Domain.d.ts.map +1 -0
- package/dist/dts/Error.d.ts +102 -0
- package/dist/dts/Error.d.ts.map +1 -0
- package/dist/dts/EvmPublicClient.d.ts +61 -0
- package/dist/dts/EvmPublicClient.d.ts.map +1 -0
- package/dist/dts/EvmWalletClient.d.ts +67 -0
- package/dist/dts/EvmWalletClient.d.ts.map +1 -0
- package/dist/dts/Payment.d.ts +128 -0
- package/dist/dts/Payment.d.ts.map +1 -0
- package/dist/dts/PaymentError.d.ts +21 -0
- package/dist/dts/PaymentError.d.ts.map +1 -0
- package/dist/dts/Prover.d.ts +87 -0
- package/dist/dts/Prover.d.ts.map +1 -0
- package/dist/dts/PublicClient.d.ts +146 -0
- package/dist/dts/PublicClient.d.ts.map +1 -0
- package/dist/dts/Schema.d.ts +16 -0
- package/dist/dts/Schema.d.ts.map +1 -0
- package/dist/dts/Utils.d.ts +11 -0
- package/dist/dts/Utils.d.ts.map +1 -0
- package/dist/dts/WalletClient.d.ts +123 -0
- package/dist/dts/WalletClient.d.ts.map +1 -0
- package/dist/dts/attestation.d.ts +13 -0
- package/dist/dts/attestation.d.ts.map +1 -0
- package/dist/dts/cli/commands/balance.d.ts +3 -0
- package/dist/dts/cli/commands/balance.d.ts.map +1 -0
- package/dist/dts/cli/commands/deposit.d.ts +3 -0
- package/dist/dts/cli/commands/deposit.d.ts.map +1 -0
- package/dist/dts/cli/commands/export-verifier.d.ts +3 -0
- package/dist/dts/cli/commands/export-verifier.d.ts.map +1 -0
- package/dist/dts/cli/commands/generate.d.ts +3 -0
- package/dist/dts/cli/commands/generate.d.ts.map +1 -0
- package/dist/dts/cli/commands/history.d.ts +3 -0
- package/dist/dts/cli/commands/history.d.ts.map +1 -0
- package/dist/dts/cli/commands/prove.d.ts +3 -0
- package/dist/dts/cli/commands/prove.d.ts.map +1 -0
- package/dist/dts/cli/commands/redeem.d.ts +3 -0
- package/dist/dts/cli/commands/redeem.d.ts.map +1 -0
- package/dist/dts/cli/commands/update-client.d.ts +3 -0
- package/dist/dts/cli/commands/update-client.d.ts.map +1 -0
- package/dist/dts/cli/config.d.ts +14 -0
- package/dist/dts/cli/config.d.ts.map +1 -0
- package/dist/dts/cli/utils.d.ts +11 -0
- package/dist/dts/cli/utils.d.ts.map +1 -0
- package/dist/dts/cli.d.ts +3 -0
- package/dist/dts/cli.d.ts.map +1 -0
- package/dist/dts/constants/ibc-core-registry.d.ts +11 -0
- package/dist/dts/constants/ibc-core-registry.d.ts.map +1 -0
- package/dist/dts/constants/services.d.ts +3 -0
- package/dist/dts/constants/services.d.ts.map +1 -0
- package/dist/dts/constants/z-asset-registry.d.ts +13 -0
- package/dist/dts/constants/z-asset-registry.d.ts.map +1 -0
- package/dist/dts/gen/prover_pb.d.ts +300 -0
- package/dist/dts/gen/prover_pb.d.ts.map +1 -0
- package/dist/dts/index.d.ts +21 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/internal/evm.d.ts +250 -0
- package/dist/dts/internal/evm.d.ts.map +1 -0
- package/dist/dts/internal/evmWalletClient.d.ts +2 -0
- package/dist/dts/internal/evmWalletClient.d.ts.map +1 -0
- package/dist/dts/internal/publicClient.d.ts +2 -0
- package/dist/dts/internal/publicClient.d.ts.map +1 -0
- package/dist/dts/internal/walletClient.d.ts +2 -0
- package/dist/dts/internal/walletClient.d.ts.map +1 -0
- package/dist/dts/legacy/client.d.ts +313 -0
- package/dist/dts/legacy/client.d.ts.map +1 -0
- package/dist/dts/legacy/prover.d.ts +30 -0
- package/dist/dts/legacy/prover.d.ts.map +1 -0
- package/dist/dts/poseidon2.d.ts +18 -0
- package/dist/dts/poseidon2.d.ts.map +1 -0
- package/dist/dts/promises/Attestor.d.ts +17 -0
- package/dist/dts/promises/Attestor.d.ts.map +1 -0
- package/dist/dts/promises/EvmPublicClient.d.ts +3709 -0
- package/dist/dts/promises/EvmPublicClient.d.ts.map +1 -0
- package/dist/dts/promises/EvmWalletClient.d.ts +4502 -0
- package/dist/dts/promises/EvmWalletClient.d.ts.map +1 -0
- package/dist/dts/promises/Payment.d.ts +33 -0
- package/dist/dts/promises/Payment.d.ts.map +1 -0
- package/dist/dts/promises/Prover.d.ts +14 -0
- package/dist/dts/promises/Prover.d.ts.map +1 -0
- package/dist/dts/promises/PublicClient.d.ts +23 -0
- package/dist/dts/promises/PublicClient.d.ts.map +1 -0
- package/dist/dts/promises/WalletClient.d.ts +57 -0
- package/dist/dts/promises/WalletClient.d.ts.map +1 -0
- package/dist/dts/promises/index.d.ts +8 -0
- package/dist/dts/promises/index.d.ts.map +1 -0
- package/dist/dts/rpc.d.ts +148 -0
- package/dist/dts/rpc.d.ts.map +1 -0
- package/dist/dts/types.d.ts +263 -0
- package/dist/dts/types.d.ts.map +1 -0
- package/dist/esm/Abi.js +264 -0
- package/dist/esm/Abi.js.map +1 -0
- package/dist/esm/Attestor.js +68 -0
- package/dist/esm/Attestor.js.map +1 -0
- package/dist/esm/Constants.js +2 -0
- package/dist/esm/Constants.js.map +1 -0
- package/dist/esm/Domain.js +17 -0
- package/dist/esm/Domain.js.map +1 -0
- package/dist/esm/Error.js +89 -0
- package/dist/esm/Error.js.map +1 -0
- package/dist/esm/EvmPublicClient.js +292 -0
- package/dist/esm/EvmPublicClient.js.map +1 -0
- package/dist/esm/EvmWalletClient.js +659 -0
- package/dist/esm/EvmWalletClient.js.map +1 -0
- package/dist/esm/Payment.js +323 -0
- package/dist/esm/Payment.js.map +1 -0
- package/dist/esm/PaymentError.js +24 -0
- package/dist/esm/PaymentError.js.map +1 -0
- package/dist/esm/Prover.js +142 -0
- package/dist/esm/Prover.js.map +1 -0
- package/dist/esm/PublicClient.js +30 -0
- package/dist/esm/PublicClient.js.map +1 -0
- package/dist/esm/Schema.js +31 -0
- package/dist/esm/Schema.js.map +1 -0
- package/dist/esm/Utils.js +27 -0
- package/dist/esm/Utils.js.map +1 -0
- package/dist/esm/WalletClient.js +30 -0
- package/dist/esm/WalletClient.js.map +1 -0
- package/dist/esm/attestation.js +42 -0
- package/dist/esm/attestation.js.map +1 -0
- package/dist/esm/cli/commands/balance.js +54 -0
- package/dist/esm/cli/commands/balance.js.map +1 -0
- package/dist/esm/cli/commands/deposit.js +52 -0
- package/dist/esm/cli/commands/deposit.js.map +1 -0
- package/dist/esm/cli/commands/export-verifier.js +21 -0
- package/dist/esm/cli/commands/export-verifier.js.map +1 -0
- package/dist/esm/cli/commands/generate.js +35 -0
- package/dist/esm/cli/commands/generate.js.map +1 -0
- package/dist/esm/cli/commands/history.js +53 -0
- package/dist/esm/cli/commands/history.js.map +1 -0
- package/dist/esm/cli/commands/prove.js +76 -0
- package/dist/esm/cli/commands/prove.js.map +1 -0
- package/dist/esm/cli/commands/redeem.js +146 -0
- package/dist/esm/cli/commands/redeem.js.map +1 -0
- package/dist/esm/cli/commands/update-client.js +56 -0
- package/dist/esm/cli/commands/update-client.js.map +1 -0
- package/dist/esm/cli/config.js +26 -0
- package/dist/esm/cli/config.js.map +1 -0
- package/dist/esm/cli/utils.js +94 -0
- package/dist/esm/cli/utils.js.map +1 -0
- package/dist/esm/cli.js +22 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/constants/ibc-core-registry.js +21 -0
- package/dist/esm/constants/ibc-core-registry.js.map +1 -0
- package/dist/esm/constants/services.js +3 -0
- package/dist/esm/constants/services.js.map +1 -0
- package/dist/esm/constants/z-asset-registry.js +23 -0
- package/dist/esm/constants/z-asset-registry.js.map +1 -0
- package/dist/esm/gen/prover_pb.js +74 -0
- package/dist/esm/gen/prover_pb.js.map +1 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/evm.js +169 -0
- package/dist/esm/internal/evm.js.map +1 -0
- package/dist/esm/internal/evmWalletClient.js +2 -0
- package/dist/esm/internal/evmWalletClient.js.map +1 -0
- package/dist/esm/internal/publicClient.js +41 -0
- package/dist/esm/internal/publicClient.js.map +1 -0
- package/dist/esm/internal/walletClient.js +35 -0
- package/dist/esm/internal/walletClient.js.map +1 -0
- package/dist/esm/legacy/client.js +1212 -0
- package/dist/esm/legacy/client.js.map +1 -0
- package/dist/esm/legacy/prover.js +105 -0
- package/dist/esm/legacy/prover.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/dist/esm/poseidon2.js +218 -0
- package/dist/esm/poseidon2.js.map +1 -0
- package/dist/esm/promises/Attestor.js +14 -0
- package/dist/esm/promises/Attestor.js.map +1 -0
- package/dist/esm/promises/EvmPublicClient.js +26 -0
- package/dist/esm/promises/EvmPublicClient.js.map +1 -0
- package/dist/esm/promises/EvmWalletClient.js +43 -0
- package/dist/esm/promises/EvmWalletClient.js.map +1 -0
- package/dist/esm/promises/Payment.js +13 -0
- package/dist/esm/promises/Payment.js.map +1 -0
- package/dist/esm/promises/Prover.js +17 -0
- package/dist/esm/promises/Prover.js.map +1 -0
- package/dist/esm/promises/PublicClient.js +45 -0
- package/dist/esm/promises/PublicClient.js.map +1 -0
- package/dist/esm/promises/WalletClient.js +36 -0
- package/dist/esm/promises/WalletClient.js.map +1 -0
- package/dist/esm/promises/index.js +8 -0
- package/dist/esm/promises/index.js.map +1 -0
- package/dist/esm/rpc.js +850 -0
- package/dist/esm/rpc.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/gen/prover_pb/package.json +6 -0
- package/index/package.json +6 -0
- package/legacy/client/package.json +6 -0
- package/legacy/prover/package.json +6 -0
- package/package.json +397 -44
- package/poseidon2/package.json +6 -0
- package/promises/Attestor/package.json +6 -0
- package/promises/EvmPublicClient/package.json +6 -0
- package/promises/EvmWalletClient/package.json +6 -0
- package/promises/Payment/package.json +6 -0
- package/promises/Prover/package.json +6 -0
- package/promises/PublicClient/package.json +6 -0
- package/promises/WalletClient/package.json +6 -0
- package/promises/index/package.json +6 -0
- package/promises/package.json +6 -0
- package/rpc/package.json +6 -0
- package/src/Abi.ts +195 -0
- package/src/Attestor.ts +113 -0
- package/src/Constants.ts +4 -0
- package/src/Domain.ts +52 -0
- package/src/Error.ts +163 -0
- package/src/EvmPublicClient.ts +549 -0
- package/src/EvmWalletClient.ts +1034 -0
- package/src/Payment.ts +523 -0
- package/src/PaymentError.ts +39 -0
- package/src/Prover.ts +240 -0
- package/src/PublicClient.ts +196 -0
- package/src/Schema.ts +36 -0
- package/src/Utils.ts +43 -0
- package/src/WalletClient.ts +172 -0
- package/src/attestation.ts +69 -0
- package/src/cli/commands/balance.ts +88 -0
- package/src/cli/commands/deposit.ts +104 -0
- package/src/cli/commands/export-verifier.ts +28 -0
- package/src/cli/commands/generate.ts +86 -0
- package/src/cli/commands/history.ts +91 -0
- package/src/cli/commands/prove.ts +133 -0
- package/src/cli/commands/redeem.ts +277 -0
- package/src/cli/commands/update-client.ts +96 -0
- package/src/cli/config.ts +55 -0
- package/src/cli/utils.ts +136 -0
- package/src/cli.ts +31 -0
- package/src/constants/ibc-core-registry.ts +44 -0
- package/src/constants/services.ts +4 -0
- package/src/constants/z-asset-registry.ts +47 -0
- package/src/gen/prover_pb.ts +375 -0
- package/src/index.ts +23 -0
- package/src/internal/evm.ts +361 -0
- package/src/internal/evmWalletClient.ts +0 -0
- package/src/internal/publicClient.ts +57 -0
- package/src/internal/walletClient.ts +50 -0
- package/src/legacy/client.ts +1652 -0
- package/src/legacy/prover.ts +135 -0
- package/src/poseidon2.ts +246 -0
- package/src/promises/Attestor.ts +25 -0
- package/src/promises/EvmPublicClient.ts +39 -0
- package/src/promises/EvmWalletClient.ts +63 -0
- package/src/promises/Payment.ts +86 -0
- package/src/promises/Prover.ts +26 -0
- package/src/promises/PublicClient.ts +47 -0
- package/src/promises/WalletClient.ts +38 -0
- package/src/promises/index.ts +7 -0
- package/src/rpc.ts +994 -0
- package/src/types.ts +281 -0
- package/types/package.json +6 -0
- package/dist/LICENSE +0 -1
- package/dist/chunk-37PNLRA6.js +0 -2418
- package/dist/cli.cjs +0 -3031
- package/dist/cli.js +0 -675
- package/dist/index.cjs +0 -2451
- package/dist/index.js +0 -1
- package/dist/package.json +0 -18
- package/dist/payments.d.ts +0 -835
- /package/{dist → src}/tsdoc-metadata.json +0 -0
package/src/Prover.ts
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { create } from "@bufbuild/protobuf";
|
|
2
|
+
import { createClient } from "@connectrpc/connect";
|
|
3
|
+
import { createGrpcWebTransport } from "@connectrpc/connect-web";
|
|
4
|
+
import { Data, Effect, Match, pipe, Schedule } from "effect";
|
|
5
|
+
import type * as P from "effect/Predicate";
|
|
6
|
+
import * as S from "effect/Schema";
|
|
7
|
+
import type { Address, Hex } from "viem";
|
|
8
|
+
import { DEFAULT_PROVER_URL } from "./constants/services.js";
|
|
9
|
+
import type * as Domain from "./Domain.js";
|
|
10
|
+
import * as Error from "./Error.js";
|
|
11
|
+
import * as GenProver from "./gen/prover_pb.js";
|
|
12
|
+
import type { LightClientData, MptProofData } from "./types.js";
|
|
13
|
+
|
|
14
|
+
const Options = S.Struct({
|
|
15
|
+
proverUrl: S.optionalWith(S.Union(S.URLFromSelf, S.URL), {
|
|
16
|
+
default: () => new globalThis.URL(DEFAULT_PROVER_URL),
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
type Options = typeof Options.Type;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Result from the prover server after proof generation.
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
export interface ProofResult {
|
|
26
|
+
/** Whether proof generation succeeded */
|
|
27
|
+
success: boolean;
|
|
28
|
+
/** Serialized proof data (only present on success) */
|
|
29
|
+
proofJson?: Uint8Array;
|
|
30
|
+
/** Error message (only present on failure) */
|
|
31
|
+
error?: string;
|
|
32
|
+
/** Timestamp when the proof was created */
|
|
33
|
+
createdAt?: Date;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @public
|
|
38
|
+
*/
|
|
39
|
+
export interface WitnessData {
|
|
40
|
+
secret: Hex;
|
|
41
|
+
dstChainId: bigint;
|
|
42
|
+
beneficiaries: [Address, Address, Address, Address];
|
|
43
|
+
beneficiary: Address;
|
|
44
|
+
redeemAmount: bigint;
|
|
45
|
+
alreadyRedeemed: bigint;
|
|
46
|
+
lightClients: LightClientData[];
|
|
47
|
+
selectedClientIndex: number;
|
|
48
|
+
mptProof: MptProofData;
|
|
49
|
+
srcZAssetAddress: Domain.ZAssetAddress;
|
|
50
|
+
mappingSlot: Hex;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
type PollResult = GenProver.PollResponse["result"];
|
|
54
|
+
type PendingResult = Extract<PollResult, { case: "pending" }>;
|
|
55
|
+
type DoneResult = Extract<PollResult, { case: "done" }>;
|
|
56
|
+
type FailedResult = Extract<PollResult, { case: "failed" }>;
|
|
57
|
+
|
|
58
|
+
export const isPending: P.Refinement<PollResult, PendingResult> = (
|
|
59
|
+
result,
|
|
60
|
+
): result is PendingResult => result.case === "pending";
|
|
61
|
+
|
|
62
|
+
export const isDone: P.Refinement<PollResult, DoneResult> = (
|
|
63
|
+
result,
|
|
64
|
+
): result is DoneResult => result.case === "done";
|
|
65
|
+
|
|
66
|
+
export const isFailed: P.Refinement<PollResult, FailedResult> = (
|
|
67
|
+
result,
|
|
68
|
+
): result is FailedResult => result.case === "failed";
|
|
69
|
+
|
|
70
|
+
class PollPending extends Data.TaggedError("PollPending")<{}> {}
|
|
71
|
+
class PollFailed extends Data.TaggedError("PollFailed")<{ message: string }> {}
|
|
72
|
+
|
|
73
|
+
export const Proof = S.Struct({
|
|
74
|
+
proof: S.Tuple(
|
|
75
|
+
S.String,
|
|
76
|
+
S.String,
|
|
77
|
+
S.String,
|
|
78
|
+
S.String,
|
|
79
|
+
S.String,
|
|
80
|
+
S.String,
|
|
81
|
+
S.String,
|
|
82
|
+
S.String,
|
|
83
|
+
),
|
|
84
|
+
commitments: S.Tuple(S.String, S.String),
|
|
85
|
+
commitmentPok: S.Tuple(S.String, S.String),
|
|
86
|
+
publicInputs: S.Array(S.String),
|
|
87
|
+
// TODO: createdAt
|
|
88
|
+
});
|
|
89
|
+
export type Proof = typeof Proof.Type;
|
|
90
|
+
|
|
91
|
+
export const ProofFromBytes = S.compose(
|
|
92
|
+
S.transform(S.Uint8ArrayFromSelf, S.String, {
|
|
93
|
+
decode: (bytes) => new globalThis.TextDecoder().decode(bytes),
|
|
94
|
+
encode: (text) => new globalThis.TextEncoder().encode(text),
|
|
95
|
+
}),
|
|
96
|
+
S.parseJson(Proof),
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Prover client for communicating with the prover gRPC-web server
|
|
101
|
+
*
|
|
102
|
+
* Uses `@connectrpc/connect-web` to communicate with the gRPC-web server.
|
|
103
|
+
* @public
|
|
104
|
+
*/
|
|
105
|
+
export class Prover extends Effect.Service<Prover>()("Prover", {
|
|
106
|
+
scoped: Effect.fn(function* (options: S.Schema.Encoded<typeof Options>) {
|
|
107
|
+
const { proverUrl } = yield* pipe(
|
|
108
|
+
options,
|
|
109
|
+
S.decode(Options),
|
|
110
|
+
Effect.mapError(
|
|
111
|
+
(cause) =>
|
|
112
|
+
new Error.SystemError({
|
|
113
|
+
method: "Prover",
|
|
114
|
+
module: "Prover",
|
|
115
|
+
reason: "InvalidData",
|
|
116
|
+
cause,
|
|
117
|
+
}),
|
|
118
|
+
),
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const transport = createGrpcWebTransport({
|
|
122
|
+
baseUrl: proverUrl.toString(),
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
const client = createClient(GenProver.ProverService, transport);
|
|
126
|
+
|
|
127
|
+
const matchPollResult = Match.type<GenProver.PollResponse["result"]>().pipe(
|
|
128
|
+
Match.when({ case: "done" }, ({ value }) => Effect.succeed(value)),
|
|
129
|
+
Match.when({ case: "pending" }, () => Effect.fail(new PollPending())),
|
|
130
|
+
Match.when({ case: "failed" }, ({ value }) =>
|
|
131
|
+
Effect.fail(new PollFailed({ message: value.errorMessage })),
|
|
132
|
+
),
|
|
133
|
+
Match.when({ case: undefined }, () =>
|
|
134
|
+
Effect.fail(new PollFailed({ message: "Unset result" })),
|
|
135
|
+
),
|
|
136
|
+
Match.exhaustive,
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
const poll = Effect.fn("poll")(
|
|
140
|
+
(...[request, options]: Parameters<(typeof client)["poll"]>) =>
|
|
141
|
+
pipe(
|
|
142
|
+
Effect.tryPromise({
|
|
143
|
+
try: () => client.poll(request, options),
|
|
144
|
+
catch: (cause) =>
|
|
145
|
+
new Error.SystemError({
|
|
146
|
+
module: "Prover",
|
|
147
|
+
method: "poll",
|
|
148
|
+
reason: "InvalidData",
|
|
149
|
+
cause,
|
|
150
|
+
}),
|
|
151
|
+
}),
|
|
152
|
+
Effect.map((response) => response.result),
|
|
153
|
+
Effect.flatMap(matchPollResult),
|
|
154
|
+
Effect.retry({
|
|
155
|
+
while: (error) => error._tag === "PollPending",
|
|
156
|
+
schedule: Schedule.spaced("1 second"),
|
|
157
|
+
}),
|
|
158
|
+
Effect.flatMap((x) => S.decode(ProofFromBytes)(x.proofJson)),
|
|
159
|
+
Effect.catchTags({
|
|
160
|
+
ParseError: (cause) =>
|
|
161
|
+
new Error.SystemError({
|
|
162
|
+
method: "poll",
|
|
163
|
+
module: "Prover",
|
|
164
|
+
reason: "InvalidData",
|
|
165
|
+
cause,
|
|
166
|
+
}),
|
|
167
|
+
PollFailed: (cause) =>
|
|
168
|
+
new Error.SystemError({
|
|
169
|
+
method: "poll",
|
|
170
|
+
module: "Prover",
|
|
171
|
+
reason: "InvalidData",
|
|
172
|
+
cause,
|
|
173
|
+
}),
|
|
174
|
+
PollPending: (cause) =>
|
|
175
|
+
new Error.SystemError({
|
|
176
|
+
method: "poll",
|
|
177
|
+
module: "Prover",
|
|
178
|
+
reason: "InvalidData",
|
|
179
|
+
cause,
|
|
180
|
+
}),
|
|
181
|
+
}),
|
|
182
|
+
),
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
const witnessToProto = (witness: WitnessData): GenProver.WitnessData =>
|
|
186
|
+
create(GenProver.WitnessDataSchema, {
|
|
187
|
+
secret: witness.secret,
|
|
188
|
+
dstChainId: witness.dstChainId,
|
|
189
|
+
beneficiaries: [...witness.beneficiaries],
|
|
190
|
+
beneficiary: witness.beneficiary,
|
|
191
|
+
redeemAmount: witness.redeemAmount.toString(),
|
|
192
|
+
alreadyRedeemed: witness.alreadyRedeemed.toString(),
|
|
193
|
+
lightClients: witness.lightClients.map((lc) =>
|
|
194
|
+
create(GenProver.LightClientDataSchema, {
|
|
195
|
+
clientId: lc.clientId,
|
|
196
|
+
height: lc.height,
|
|
197
|
+
stateRoot: lc.stateRoot,
|
|
198
|
+
}),
|
|
199
|
+
),
|
|
200
|
+
selectedClientIndex: witness.selectedClientIndex,
|
|
201
|
+
mptProof: create(GenProver.MPTProofDataSchema, {
|
|
202
|
+
accountProof: [...witness.mptProof.accountProof],
|
|
203
|
+
storageProof: [...witness.mptProof.storageProof],
|
|
204
|
+
storageValue: witness.mptProof.storageValue,
|
|
205
|
+
storageRoot: witness.mptProof.storageRoot,
|
|
206
|
+
}),
|
|
207
|
+
tokenAddress: witness.srcZAssetAddress,
|
|
208
|
+
mappingSlot: witness.mappingSlot,
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
const generateProof = Effect.fn("generateProof")(function* (
|
|
212
|
+
witness: WitnessData,
|
|
213
|
+
) {
|
|
214
|
+
const protoWitness = witnessToProto(witness);
|
|
215
|
+
const request = create(GenProver.ProofRequestSchema, {
|
|
216
|
+
witness: protoWitness,
|
|
217
|
+
});
|
|
218
|
+
return yield* poll(request);
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
const exportVerifier = pipe(
|
|
222
|
+
Effect.tryPromise({
|
|
223
|
+
try: () => client.exportVerifier({}),
|
|
224
|
+
catch: (cause) =>
|
|
225
|
+
new Error.SystemError({
|
|
226
|
+
module: "Prover",
|
|
227
|
+
method: "exportVerifier",
|
|
228
|
+
reason: "InvalidData",
|
|
229
|
+
cause,
|
|
230
|
+
}),
|
|
231
|
+
}),
|
|
232
|
+
Effect.map((response) => response.verifierContract),
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
return {
|
|
236
|
+
generateProof,
|
|
237
|
+
exportVerifier,
|
|
238
|
+
} as const;
|
|
239
|
+
}),
|
|
240
|
+
}) {}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { Layer } from "effect";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
|
+
import type * as Effect from "effect/Effect";
|
|
4
|
+
import { identity } from "effect/Function";
|
|
5
|
+
import type { GetProofReturnType } from "viem";
|
|
6
|
+
import type * as Domain from "./Domain.js";
|
|
7
|
+
import type { SdkError } from "./Error.js";
|
|
8
|
+
import * as internal from "./internal/publicClient.js";
|
|
9
|
+
import type { ConsensusState, CounterpartyInfo } from "./types.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @category type ids
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
export const TypeId: unique symbol = internal.TypeId;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @category type ids
|
|
19
|
+
* @since 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
export type TypeId = typeof TypeId;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @category models
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
export interface PublicClient {
|
|
28
|
+
readonly [TypeId]: TypeId;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Copy of the client for safeql etc.
|
|
32
|
+
*/
|
|
33
|
+
readonly safe: this;
|
|
34
|
+
|
|
35
|
+
readonly getLatestHeight: (
|
|
36
|
+
lightClientAddress: Domain.LightClientAddress,
|
|
37
|
+
clientId: number,
|
|
38
|
+
) => Effect.Effect<bigint, SdkError, never>;
|
|
39
|
+
readonly getLatestBlockNumber: () => Effect.Effect<bigint, SdkError>;
|
|
40
|
+
|
|
41
|
+
readonly readBalance: (
|
|
42
|
+
options: PublicClient.ReadBalanceOptions,
|
|
43
|
+
) => Effect.Effect<PublicClient.BalanceInfo, SdkError>;
|
|
44
|
+
readonly readBalanceAtHeight: (
|
|
45
|
+
options: PublicClient.ReadBalanceAtHeightOptions,
|
|
46
|
+
) => Effect.Effect<PublicClient.BalanceAtHeightInfo, SdkError>;
|
|
47
|
+
readonly getLightClientAddress: (
|
|
48
|
+
ibcStoreAddress: Domain.IbcHandlerAddress,
|
|
49
|
+
clientId: number,
|
|
50
|
+
) => Effect.Effect<Domain.LightClientAddress, SdkError, never>;
|
|
51
|
+
readonly getStateRootIndex: (
|
|
52
|
+
zAssetAddress: Domain.ZAssetAddress,
|
|
53
|
+
clientId: number,
|
|
54
|
+
) => Effect.Effect<bigint, SdkError, never>;
|
|
55
|
+
readonly getConsensusState: (
|
|
56
|
+
lightClientAddress: Domain.LightClientAddress,
|
|
57
|
+
clientId: number,
|
|
58
|
+
height: bigint,
|
|
59
|
+
satteRootIndex: bigint,
|
|
60
|
+
) => Effect.Effect<ConsensusState, SdkError, never>;
|
|
61
|
+
readonly getIbcHandlerAddress: (
|
|
62
|
+
zAssetAddress: Domain.ZAssetAddress,
|
|
63
|
+
) => Effect.Effect<Domain.IbcHandlerAddress, SdkError, never>;
|
|
64
|
+
readonly getCounterparty: (
|
|
65
|
+
zAssetAddress: Domain.ZAssetAddress,
|
|
66
|
+
clientId: number,
|
|
67
|
+
) => Effect.Effect<CounterpartyInfo, SdkError, never>;
|
|
68
|
+
readonly getProof: (options: {
|
|
69
|
+
address: `0x${string}`;
|
|
70
|
+
storageKeys: `0x${string}`[];
|
|
71
|
+
blockNumber: bigint;
|
|
72
|
+
}) => Effect.Effect<GetProofReturnType, SdkError, never>;
|
|
73
|
+
|
|
74
|
+
readonly waitForBlock: (
|
|
75
|
+
targetHeight: bigint,
|
|
76
|
+
) => Effect.Effect<bigint, SdkError, never>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @category models
|
|
81
|
+
* @since 1.0.0
|
|
82
|
+
*/
|
|
83
|
+
export const PublicClient: Context.Tag<PublicClient, PublicClient> =
|
|
84
|
+
internal.clientTag;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @category models
|
|
88
|
+
* @since 1.0.0
|
|
89
|
+
*/
|
|
90
|
+
export class SourcePublicClient extends Context.Tag("SourcePublicClient")<
|
|
91
|
+
SourcePublicClient,
|
|
92
|
+
PublicClient
|
|
93
|
+
>() {
|
|
94
|
+
static layer = <E, R>(layer: Layer.Layer<PublicClient, E, R>) =>
|
|
95
|
+
Layer.project(layer, PublicClient, SourcePublicClient, identity);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @category models
|
|
100
|
+
* @since 1.0.0
|
|
101
|
+
*/
|
|
102
|
+
export class DestinationPublicClient extends Context.Tag(
|
|
103
|
+
"DestinationPublicClient",
|
|
104
|
+
)<DestinationPublicClient, PublicClient>() {
|
|
105
|
+
static layer = <E, R>(layer: Layer.Layer<PublicClient, E, R>) =>
|
|
106
|
+
Layer.project(layer, PublicClient, DestinationPublicClient, identity);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @category models
|
|
111
|
+
* @since 1.0.0
|
|
112
|
+
*/
|
|
113
|
+
export namespace PublicClient {
|
|
114
|
+
/**
|
|
115
|
+
* Consensus state from a light client
|
|
116
|
+
* @category models
|
|
117
|
+
* @since 1.0.0
|
|
118
|
+
*/
|
|
119
|
+
export interface ConsensusState {
|
|
120
|
+
readonly stateRoot: `0x${string}`;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Options for readBalance
|
|
125
|
+
* @category models
|
|
126
|
+
* @since 1.0.0
|
|
127
|
+
*/
|
|
128
|
+
export interface ReadBalanceOptions {
|
|
129
|
+
readonly srcErc20Address: Domain.Erc20Address;
|
|
130
|
+
readonly srcChainId: bigint;
|
|
131
|
+
readonly dstErc20Address: Domain.Erc20Address;
|
|
132
|
+
readonly dstChainId: bigint;
|
|
133
|
+
readonly depositAddress: `0x${string}`;
|
|
134
|
+
readonly nullifier: bigint;
|
|
135
|
+
readonly clientId: number;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Options for readBalanceAtHeight
|
|
140
|
+
* @category models
|
|
141
|
+
* @since 1.0.0
|
|
142
|
+
*/
|
|
143
|
+
export interface ReadBalanceAtHeightOptions {
|
|
144
|
+
readonly srcErc20Address: Domain.Erc20Address;
|
|
145
|
+
readonly dstErc20Address: Domain.Erc20Address;
|
|
146
|
+
readonly srcChainId: bigint;
|
|
147
|
+
readonly dstChainId: bigint;
|
|
148
|
+
readonly depositAddress: `0x${string}`;
|
|
149
|
+
readonly nullifier: bigint;
|
|
150
|
+
readonly height: bigint;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Balance information at a specific height
|
|
155
|
+
* @category models
|
|
156
|
+
* @since 1.0.0
|
|
157
|
+
*/
|
|
158
|
+
export interface BalanceAtHeightInfo {
|
|
159
|
+
readonly confirmed: bigint;
|
|
160
|
+
readonly redeemed: bigint;
|
|
161
|
+
readonly available: bigint;
|
|
162
|
+
readonly pending: bigint;
|
|
163
|
+
readonly latestHeight: bigint;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Full balance information including light client height
|
|
168
|
+
* @category models
|
|
169
|
+
* @since 1.0.0
|
|
170
|
+
*/
|
|
171
|
+
export interface BalanceInfo extends BalanceAtHeightInfo {
|
|
172
|
+
readonly lightClientHeight: bigint;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* @category models
|
|
177
|
+
* @since 1.0.0
|
|
178
|
+
*/
|
|
179
|
+
export interface MakeOptions {
|
|
180
|
+
readonly getLatestHeight: PublicClient["getLatestHeight"];
|
|
181
|
+
readonly getLatestBlockNumber: PublicClient["getLatestBlockNumber"];
|
|
182
|
+
readonly readBalance: PublicClient["readBalance"];
|
|
183
|
+
readonly readBalanceAtHeight: PublicClient["readBalanceAtHeight"];
|
|
184
|
+
readonly getProof: PublicClient["getProof"];
|
|
185
|
+
readonly waitForBlock: PublicClient["waitForBlock"];
|
|
186
|
+
readonly getLightClientAddress: PublicClient["getLightClientAddress"];
|
|
187
|
+
readonly getStateRootIndex: PublicClient["getStateRootIndex"];
|
|
188
|
+
readonly getConsensusState: PublicClient["getConsensusState"];
|
|
189
|
+
readonly getIbcHandlerAddress: PublicClient["getIbcHandlerAddress"];
|
|
190
|
+
readonly getCounterparty: PublicClient["getCounterparty"];
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export const make: (
|
|
195
|
+
options: PublicClient.MakeOptions,
|
|
196
|
+
) => Effect.Effect<PublicClient, never> = internal.make;
|
package/src/Schema.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as S from "effect/Schema";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Describes `0x${string}` from non-empty string.
|
|
5
|
+
*
|
|
6
|
+
* Note: To be used ineroperably with `viem`.
|
|
7
|
+
*/
|
|
8
|
+
export const Hex = S.NonEmptyString.pipe(
|
|
9
|
+
// TODO: add `Bytes` brand separately
|
|
10
|
+
S.pattern(/^0x[0-9a-fA-F]+$/), // TODO: remove uppercase
|
|
11
|
+
S.minLength(3),
|
|
12
|
+
S.annotations({
|
|
13
|
+
title: "hex",
|
|
14
|
+
description: "hex string",
|
|
15
|
+
}),
|
|
16
|
+
) as unknown as S.TemplateLiteral<`0x${string}`>;
|
|
17
|
+
export type Hex = typeof Hex.Type;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Describes `0x${string}` address from non-empty string.
|
|
21
|
+
*
|
|
22
|
+
* Note: To be used ineroperably with `viem`.
|
|
23
|
+
*/
|
|
24
|
+
export const Address = S.NonEmptyString.pipe(
|
|
25
|
+
// TODO: add `Bytes` brand separately
|
|
26
|
+
S.pattern(/^0x[0-9a-fA-F]+$/), // TODO: remove uppercase
|
|
27
|
+
S.minLength(3),
|
|
28
|
+
S.annotations({
|
|
29
|
+
title: "address",
|
|
30
|
+
description: "address string",
|
|
31
|
+
// }),
|
|
32
|
+
// S.brand("Address")
|
|
33
|
+
// ) as unknown as S.brand<S.refine<S.TemplateLiteral<`0x${string}`>, S.filter<typeof S.NonEmptyString>>, "Address">
|
|
34
|
+
}),
|
|
35
|
+
) as unknown as S.TemplateLiteral<`0x${string}`>;
|
|
36
|
+
export type Address = typeof Address.Type;
|
package/src/Utils.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type Hex, hexToBigInt } from "viem";
|
|
2
|
+
import type { RedeemMetadata } from "./rpc.js";
|
|
3
|
+
import type { ProofJSON, RedeemParams } from "./types.js";
|
|
4
|
+
|
|
5
|
+
type DeepReadonly<T> = T extends (infer U)[]
|
|
6
|
+
? readonly DeepReadonly<U>[]
|
|
7
|
+
: T extends object
|
|
8
|
+
? { readonly [K in keyof T]: DeepReadonly<T[K]> }
|
|
9
|
+
: T;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
export function proofJsonToRedeemParams(
|
|
15
|
+
proofJson: DeepReadonly<ProofJSON>,
|
|
16
|
+
metadata: Readonly<RedeemMetadata>,
|
|
17
|
+
): RedeemParams {
|
|
18
|
+
const parseBigInt = (s: string): bigint => {
|
|
19
|
+
if (s.startsWith("0x")) {
|
|
20
|
+
return hexToBigInt(s as Hex);
|
|
21
|
+
}
|
|
22
|
+
return BigInt(s);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
proof: proofJson.proof.map(parseBigInt) as RedeemParams["proof"],
|
|
27
|
+
commitments: proofJson.commitments.map(
|
|
28
|
+
parseBigInt,
|
|
29
|
+
) as RedeemParams["commitments"],
|
|
30
|
+
commitmentPok: proofJson.commitmentPok.map(
|
|
31
|
+
parseBigInt,
|
|
32
|
+
) as RedeemParams["commitmentPok"],
|
|
33
|
+
lightClients: metadata.lightClients.map((lc) => ({
|
|
34
|
+
clientId: lc.clientId,
|
|
35
|
+
height: lc.height,
|
|
36
|
+
})),
|
|
37
|
+
nullifier: metadata.nullifier,
|
|
38
|
+
value: metadata.value,
|
|
39
|
+
beneficiary: metadata.beneficiary,
|
|
40
|
+
attestedMessage: metadata.attestedMessage,
|
|
41
|
+
signature: metadata.signature,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { Layer } from "effect";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
3
|
+
import type * as Effect from "effect/Effect";
|
|
4
|
+
import { identity } from "effect/Function";
|
|
5
|
+
import type { Address } from "viem";
|
|
6
|
+
import type * as Domain from "./Domain.js";
|
|
7
|
+
import type { SdkError } from "./Error.js";
|
|
8
|
+
import * as internal from "./internal/walletClient.js";
|
|
9
|
+
import type { RedeemParams } from "./types.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @category type ids
|
|
13
|
+
* @since 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
export const TypeId: unique symbol = internal.TypeId;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @category type ids
|
|
19
|
+
* @since 1.0.0
|
|
20
|
+
*/
|
|
21
|
+
export type TypeId = typeof TypeId;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @category models
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
export interface WalletClient {
|
|
28
|
+
readonly [TypeId]: TypeId;
|
|
29
|
+
/**
|
|
30
|
+
* Approve the ZAsset for the provided ERC20 token to spend the ERC20.
|
|
31
|
+
*
|
|
32
|
+
* The ZAsset address is derived from Z_ASSET_REGISTRY.
|
|
33
|
+
*/
|
|
34
|
+
readonly approveZAssetToSpendErc20: (
|
|
35
|
+
args: WalletClient.ApproveZAssetToSpendErc20,
|
|
36
|
+
) => Effect.Effect<Domain.PreparedRequest, SdkError, never>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Deposit ("wrap") the ERC20 into it's ZAsset.
|
|
40
|
+
*
|
|
41
|
+
* The ZAsset address is derived from Z_ASSET_REGISTRY.
|
|
42
|
+
*/
|
|
43
|
+
readonly depositUnderlyingZAsset: (
|
|
44
|
+
args: WalletClient.DepositUnderlyingZAsset,
|
|
45
|
+
) => Effect.Effect<Domain.PreparedRequest, SdkError, never>;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Transfer the deposited ZAssset to the provided deposit address.
|
|
49
|
+
*
|
|
50
|
+
* The ZAsset address is derived from Z_ASSET_REGISTRY.
|
|
51
|
+
*/
|
|
52
|
+
readonly transferZAsset: (
|
|
53
|
+
args: WalletClient.TransferZAsset,
|
|
54
|
+
) => Effect.Effect<Domain.PreparedRequest, SdkError, never>;
|
|
55
|
+
|
|
56
|
+
readonly updateLoopbackClient: (
|
|
57
|
+
args: WalletClient.UpdateLoopbackClient,
|
|
58
|
+
) => Effect.Effect<Domain.PreparedRequest, SdkError, never>;
|
|
59
|
+
|
|
60
|
+
readonly prepareDeposit: (
|
|
61
|
+
args: WalletClient.Deposit,
|
|
62
|
+
) => Effect.Effect<Domain.PreparedRequests, SdkError, never>;
|
|
63
|
+
|
|
64
|
+
readonly prepareRedemption: (
|
|
65
|
+
args: WalletClient.Redeem,
|
|
66
|
+
) => Effect.Effect<Domain.PreparedRequest, SdkError, never>;
|
|
67
|
+
|
|
68
|
+
readonly sign: (
|
|
69
|
+
request: Domain.PreparedRequest,
|
|
70
|
+
) => Effect.Effect<Domain.SignedRequest, SdkError, never>;
|
|
71
|
+
|
|
72
|
+
// TODO: can be done by public client (?)
|
|
73
|
+
readonly submit: (
|
|
74
|
+
request: Domain.SignedRequest,
|
|
75
|
+
) => Effect.Effect<Domain.SubmissionResult, SdkError, never>;
|
|
76
|
+
|
|
77
|
+
readonly signAndSubmit: (
|
|
78
|
+
request: Domain.PreparedRequest,
|
|
79
|
+
) => Effect.Effect<Domain.SubmissionResult, SdkError, never>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @category models
|
|
84
|
+
* @since 1.0.0
|
|
85
|
+
*/
|
|
86
|
+
export const WalletClient: Context.Tag<WalletClient, WalletClient> =
|
|
87
|
+
internal.clientTag;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @category models
|
|
91
|
+
* @since 1.0.0
|
|
92
|
+
*/
|
|
93
|
+
export class SourceWalletClient extends Context.Tag("SourceWalletClient")<
|
|
94
|
+
SourceWalletClient,
|
|
95
|
+
WalletClient
|
|
96
|
+
>() {
|
|
97
|
+
static layer = <E, R>(layer: Layer.Layer<WalletClient, E, R>) =>
|
|
98
|
+
Layer.project(layer, WalletClient, SourceWalletClient, identity);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @category models
|
|
103
|
+
* @since 1.0.0
|
|
104
|
+
*/
|
|
105
|
+
export class DestinationWalletClient extends Context.Tag(
|
|
106
|
+
"DestinationWalletClient",
|
|
107
|
+
)<DestinationWalletClient, WalletClient>() {
|
|
108
|
+
static layer = <E, R>(layer: Layer.Layer<WalletClient, E, R>) =>
|
|
109
|
+
Layer.project(layer, WalletClient, DestinationWalletClient, identity);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @category models
|
|
114
|
+
* @since 1.0.0
|
|
115
|
+
*/
|
|
116
|
+
export namespace WalletClient {
|
|
117
|
+
/**
|
|
118
|
+
* @category models
|
|
119
|
+
* @since 1.0.0
|
|
120
|
+
*/
|
|
121
|
+
export interface MakeOptions {
|
|
122
|
+
readonly sign: WalletClient["sign"];
|
|
123
|
+
readonly submit: WalletClient["submit"];
|
|
124
|
+
readonly signAndSubmit: WalletClient["signAndSubmit"];
|
|
125
|
+
readonly approveZAssetToSpendErc20: WalletClient["approveZAssetToSpendErc20"];
|
|
126
|
+
readonly depositUnderlyingZAsset: WalletClient["depositUnderlyingZAsset"];
|
|
127
|
+
readonly transferZAsset: WalletClient["transferZAsset"];
|
|
128
|
+
readonly updateLoopbackClient: WalletClient["updateLoopbackClient"];
|
|
129
|
+
readonly prepareDeposit: WalletClient["prepareDeposit"];
|
|
130
|
+
readonly prepareRedemption: WalletClient["prepareRedemption"];
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export interface ApproveZAssetToSpendErc20 {
|
|
134
|
+
srcErc20Address: Domain.Erc20Address;
|
|
135
|
+
amount: bigint;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface UpdateLoopbackClient {
|
|
139
|
+
clientId: number;
|
|
140
|
+
height: bigint;
|
|
141
|
+
ibcHandlerAddress: Domain.IbcHandlerAddress;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export interface DepositUnderlyingZAsset {
|
|
145
|
+
srcErc20Address: Domain.Erc20Address;
|
|
146
|
+
amount: bigint;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export interface TransferZAsset {
|
|
150
|
+
srcErc20Address: Domain.Erc20Address;
|
|
151
|
+
depositAddress: `0x${string}`;
|
|
152
|
+
amount: bigint;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export type Deposit = {
|
|
156
|
+
srcErc20Address: Domain.Erc20Address;
|
|
157
|
+
sourceChainId: bigint;
|
|
158
|
+
readonly beneficiaries: ReadonlyArray<Address>;
|
|
159
|
+
depositAddress: Domain.ZAssetAddress;
|
|
160
|
+
destinationChainId: bigint;
|
|
161
|
+
amount: bigint;
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export type Redeem = {
|
|
165
|
+
dstErc20Address: Domain.Erc20Address;
|
|
166
|
+
unwrap?: boolean | undefined;
|
|
167
|
+
} & RedeemParams;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
export const make: (
|
|
171
|
+
options: WalletClient.MakeOptions,
|
|
172
|
+
) => Effect.Effect<WalletClient, never, never> = internal.make;
|