@miradexio/client 0.1.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/LICENSE +21 -0
- package/README.md +405 -0
- package/dist/address/base58.d.ts +9 -0
- package/dist/address/base58.d.ts.map +1 -0
- package/dist/address/base58.js +33 -0
- package/dist/address/base58.js.map +1 -0
- package/dist/address/bech32.d.ts +13 -0
- package/dist/address/bech32.d.ts.map +1 -0
- package/dist/address/bech32.js +41 -0
- package/dist/address/bech32.js.map +1 -0
- package/dist/address/evm.d.ts +5 -0
- package/dist/address/evm.d.ts.map +1 -0
- package/dist/address/evm.js +27 -0
- package/dist/address/evm.js.map +1 -0
- package/dist/address/index.d.ts +15 -0
- package/dist/address/index.d.ts.map +1 -0
- package/dist/address/index.js +134 -0
- package/dist/address/index.js.map +1 -0
- package/dist/address/monero.d.ts +15 -0
- package/dist/address/monero.d.ts.map +1 -0
- package/dist/address/monero.js +30 -0
- package/dist/address/monero.js.map +1 -0
- package/dist/address/polkadot.d.ts +10 -0
- package/dist/address/polkadot.d.ts.map +1 -0
- package/dist/address/polkadot.js +36 -0
- package/dist/address/polkadot.js.map +1 -0
- package/dist/address/solana.d.ts +5 -0
- package/dist/address/solana.d.ts.map +1 -0
- package/dist/address/solana.js +17 -0
- package/dist/address/solana.js.map +1 -0
- package/dist/address/ton.d.ts +11 -0
- package/dist/address/ton.d.ts.map +1 -0
- package/dist/address/ton.js +28 -0
- package/dist/address/ton.js.map +1 -0
- package/dist/api/index.d.ts +80 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +213 -0
- package/dist/api/index.js.map +1 -0
- package/dist/atomic-swap/drive.d.ts +22 -0
- package/dist/atomic-swap/drive.d.ts.map +1 -0
- package/dist/atomic-swap/drive.js +713 -0
- package/dist/atomic-swap/drive.js.map +1 -0
- package/dist/atomic-swap/extract.d.ts +46 -0
- package/dist/atomic-swap/extract.d.ts.map +1 -0
- package/dist/atomic-swap/extract.js +55 -0
- package/dist/atomic-swap/extract.js.map +1 -0
- package/dist/atomic-swap/index.d.ts +15 -0
- package/dist/atomic-swap/index.d.ts.map +1 -0
- package/dist/atomic-swap/index.js +13 -0
- package/dist/atomic-swap/index.js.map +1 -0
- package/dist/atomic-swap/monero-sweep/errors.d.ts +2 -0
- package/dist/atomic-swap/monero-sweep/errors.d.ts.map +1 -0
- package/dist/atomic-swap/monero-sweep/errors.js +43 -0
- package/dist/atomic-swap/monero-sweep/errors.js.map +1 -0
- package/dist/atomic-swap/monero-sweep/index.d.ts +33 -0
- package/dist/atomic-swap/monero-sweep/index.d.ts.map +1 -0
- package/dist/atomic-swap/monero-sweep/index.js +415 -0
- package/dist/atomic-swap/monero-sweep/index.js.map +1 -0
- package/dist/atomic-swap/monero-sweep/ring-select.d.ts +12 -0
- package/dist/atomic-swap/monero-sweep/ring-select.d.ts.map +1 -0
- package/dist/atomic-swap/monero-sweep/ring-select.js +61 -0
- package/dist/atomic-swap/monero-sweep/ring-select.js.map +1 -0
- package/dist/atomic-swap/presign.d.ts +101 -0
- package/dist/atomic-swap/presign.d.ts.map +1 -0
- package/dist/atomic-swap/presign.js +460 -0
- package/dist/atomic-swap/presign.js.map +1 -0
- package/dist/atomic-swap/refund.d.ts +72 -0
- package/dist/atomic-swap/refund.d.ts.map +1 -0
- package/dist/atomic-swap/refund.js +224 -0
- package/dist/atomic-swap/refund.js.map +1 -0
- package/dist/atomic-swap/run.d.ts +27 -0
- package/dist/atomic-swap/run.d.ts.map +1 -0
- package/dist/atomic-swap/run.js +282 -0
- package/dist/atomic-swap/run.js.map +1 -0
- package/dist/atomic-swap/snapshot.d.ts +111 -0
- package/dist/atomic-swap/snapshot.d.ts.map +1 -0
- package/dist/atomic-swap/snapshot.js +69 -0
- package/dist/atomic-swap/snapshot.js.map +1 -0
- package/dist/atomic-swap/submit-encsig.d.ts +10 -0
- package/dist/atomic-swap/submit-encsig.d.ts.map +1 -0
- package/dist/atomic-swap/submit-encsig.js +56 -0
- package/dist/atomic-swap/submit-encsig.js.map +1 -0
- package/dist/atomic-swap/types.d.ts +168 -0
- package/dist/atomic-swap/types.d.ts.map +1 -0
- package/dist/atomic-swap/types.js +5 -0
- package/dist/atomic-swap/types.js.map +1 -0
- package/dist/blockchain/quorum-provider.d.ts +25 -0
- package/dist/blockchain/quorum-provider.d.ts.map +1 -0
- package/dist/blockchain/quorum-provider.js +144 -0
- package/dist/blockchain/quorum-provider.js.map +1 -0
- package/dist/cooperative-redeem.d.ts +23 -0
- package/dist/cooperative-redeem.d.ts.map +1 -0
- package/dist/cooperative-redeem.js +40 -0
- package/dist/cooperative-redeem.js.map +1 -0
- package/dist/engine/blockchain-querier.d.ts +34 -0
- package/dist/engine/blockchain-querier.d.ts.map +1 -0
- package/dist/engine/blockchain-querier.js +2 -0
- package/dist/engine/blockchain-querier.js.map +1 -0
- package/dist/engine/engine-state.d.ts +20 -0
- package/dist/engine/engine-state.d.ts.map +1 -0
- package/dist/engine/engine-state.js +9 -0
- package/dist/engine/engine-state.js.map +1 -0
- package/dist/engine/flow-context.d.ts +494 -0
- package/dist/engine/flow-context.d.ts.map +1 -0
- package/dist/engine/flow-context.js +147 -0
- package/dist/engine/flow-context.js.map +1 -0
- package/dist/engine/flows/atomic-flow-state.d.ts +124 -0
- package/dist/engine/flows/atomic-flow-state.d.ts.map +1 -0
- package/dist/engine/flows/atomic-flow-state.js +2 -0
- package/dist/engine/flows/atomic-flow-state.js.map +1 -0
- package/dist/engine/flows/atomic-flow.d.ts +88 -0
- package/dist/engine/flows/atomic-flow.d.ts.map +1 -0
- package/dist/engine/flows/atomic-flow.js +1192 -0
- package/dist/engine/flows/atomic-flow.js.map +1 -0
- package/dist/engine/flows/history-flow-state.d.ts +19 -0
- package/dist/engine/flows/history-flow-state.d.ts.map +1 -0
- package/dist/engine/flows/history-flow-state.js +2 -0
- package/dist/engine/flows/history-flow-state.js.map +1 -0
- package/dist/engine/flows/providers-flow-state.d.ts +14 -0
- package/dist/engine/flows/providers-flow-state.d.ts.map +1 -0
- package/dist/engine/flows/providers-flow-state.js +2 -0
- package/dist/engine/flows/providers-flow-state.js.map +1 -0
- package/dist/engine/flows/quote-flow-state.d.ts +20 -0
- package/dist/engine/flows/quote-flow-state.d.ts.map +1 -0
- package/dist/engine/flows/quote-flow-state.js +2 -0
- package/dist/engine/flows/quote-flow-state.js.map +1 -0
- package/dist/engine/flows/swap-flow-state.d.ts +155 -0
- package/dist/engine/flows/swap-flow-state.d.ts.map +1 -0
- package/dist/engine/flows/swap-flow-state.js +2 -0
- package/dist/engine/flows/swap-flow-state.js.map +1 -0
- package/dist/engine/flows/swap-flow.d.ts +81 -0
- package/dist/engine/flows/swap-flow.d.ts.map +1 -0
- package/dist/engine/flows/swap-flow.js +720 -0
- package/dist/engine/flows/swap-flow.js.map +1 -0
- package/dist/engine/flows/tokens-flow-state.d.ts +16 -0
- package/dist/engine/flows/tokens-flow-state.d.ts.map +1 -0
- package/dist/engine/flows/tokens-flow-state.js +2 -0
- package/dist/engine/flows/tokens-flow-state.js.map +1 -0
- package/dist/engine/miradex-engine.d.ts +152 -0
- package/dist/engine/miradex-engine.d.ts.map +1 -0
- package/dist/engine/miradex-engine.js +278 -0
- package/dist/engine/miradex-engine.js.map +1 -0
- package/dist/engine/pipeline.d.ts +27 -0
- package/dist/engine/pipeline.d.ts.map +1 -0
- package/dist/engine/pipeline.js +166 -0
- package/dist/engine/pipeline.js.map +1 -0
- package/dist/engine/platform.d.ts +220 -0
- package/dist/engine/platform.d.ts.map +1 -0
- package/dist/engine/platform.js +2 -0
- package/dist/engine/platform.js.map +1 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/blockchain.d.ts +33 -0
- package/dist/interfaces/blockchain.d.ts.map +1 -0
- package/dist/interfaces/blockchain.js +2 -0
- package/dist/interfaces/blockchain.js.map +1 -0
- package/dist/interfaces/logger.d.ts +14 -0
- package/dist/interfaces/logger.d.ts.map +1 -0
- package/dist/interfaces/logger.js +7 -0
- package/dist/interfaces/logger.js.map +1 -0
- package/dist/lib/bitcoin/deposit-watcher.d.ts +66 -0
- package/dist/lib/bitcoin/deposit-watcher.d.ts.map +1 -0
- package/dist/lib/bitcoin/deposit-watcher.js +218 -0
- package/dist/lib/bitcoin/deposit-watcher.js.map +1 -0
- package/dist/lib/bitcoin/script-hash.d.ts +8 -0
- package/dist/lib/bitcoin/script-hash.d.ts.map +1 -0
- package/dist/lib/bitcoin/script-hash.js +29 -0
- package/dist/lib/bitcoin/script-hash.js.map +1 -0
- package/dist/lib/bitcoin/sweep.d.ts +56 -0
- package/dist/lib/bitcoin/sweep.d.ts.map +1 -0
- package/dist/lib/bitcoin/sweep.js +185 -0
- package/dist/lib/bitcoin/sweep.js.map +1 -0
- package/dist/lib/bitcoin/tx-verify.d.ts +43 -0
- package/dist/lib/bitcoin/tx-verify.d.ts.map +1 -0
- package/dist/lib/bitcoin/tx-verify.js +202 -0
- package/dist/lib/bitcoin/tx-verify.js.map +1 -0
- package/dist/lib/bitcoin/wallet.d.ts +71 -0
- package/dist/lib/bitcoin/wallet.d.ts.map +1 -0
- package/dist/lib/bitcoin/wallet.js +141 -0
- package/dist/lib/bitcoin/wallet.js.map +1 -0
- package/dist/lib/crypto/bytes.d.ts +21 -0
- package/dist/lib/crypto/bytes.d.ts.map +1 -0
- package/dist/lib/crypto/bytes.js +39 -0
- package/dist/lib/crypto/bytes.js.map +1 -0
- package/dist/lib/crypto/errors.d.ts +12 -0
- package/dist/lib/crypto/errors.d.ts.map +1 -0
- package/dist/lib/crypto/errors.js +16 -0
- package/dist/lib/crypto/errors.js.map +1 -0
- package/dist/lib/crypto/keygen.d.ts +19 -0
- package/dist/lib/crypto/keygen.d.ts.map +1 -0
- package/dist/lib/crypto/keygen.js +24 -0
- package/dist/lib/crypto/keygen.js.map +1 -0
- package/dist/lib/crypto/libp2p-identity.d.ts +25 -0
- package/dist/lib/crypto/libp2p-identity.d.ts.map +1 -0
- package/dist/lib/crypto/libp2p-identity.js +80 -0
- package/dist/lib/crypto/libp2p-identity.js.map +1 -0
- package/dist/lib/crypto/mnemonic.d.ts +28 -0
- package/dist/lib/crypto/mnemonic.d.ts.map +1 -0
- package/dist/lib/crypto/mnemonic.js +97 -0
- package/dist/lib/crypto/mnemonic.js.map +1 -0
- package/dist/lib/crypto/platform.d.ts +10 -0
- package/dist/lib/crypto/platform.d.ts.map +1 -0
- package/dist/lib/crypto/platform.js +38 -0
- package/dist/lib/crypto/platform.js.map +1 -0
- package/dist/lib/crypto/scalars.d.ts +33 -0
- package/dist/lib/crypto/scalars.d.ts.map +1 -0
- package/dist/lib/crypto/scalars.js +81 -0
- package/dist/lib/crypto/scalars.js.map +1 -0
- package/dist/lib/crypto/types.d.ts +24 -0
- package/dist/lib/crypto/types.d.ts.map +1 -0
- package/dist/lib/crypto/types.js +2 -0
- package/dist/lib/crypto/types.js.map +1 -0
- package/dist/lib/crypto/wasm.d.ts +51 -0
- package/dist/lib/crypto/wasm.d.ts.map +1 -0
- package/dist/lib/crypto/wasm.js +192 -0
- package/dist/lib/crypto/wasm.js.map +1 -0
- package/dist/lib/default-config.d.ts +140 -0
- package/dist/lib/default-config.d.ts.map +1 -0
- package/dist/lib/default-config.js +239 -0
- package/dist/lib/default-config.js.map +1 -0
- package/dist/lib/delay.d.ts +6 -0
- package/dist/lib/delay.d.ts.map +1 -0
- package/dist/lib/delay.js +20 -0
- package/dist/lib/delay.js.map +1 -0
- package/dist/lib/errors.d.ts +90 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +129 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/format.d.ts +7 -0
- package/dist/lib/format.d.ts.map +1 -0
- package/dist/lib/format.js +43 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/keystore.d.ts +85 -0
- package/dist/lib/keystore.d.ts.map +1 -0
- package/dist/lib/keystore.js +105 -0
- package/dist/lib/keystore.js.map +1 -0
- package/dist/lib/monero/output-scanner.d.ts +53 -0
- package/dist/lib/monero/output-scanner.d.ts.map +1 -0
- package/dist/lib/monero/output-scanner.js +180 -0
- package/dist/lib/monero/output-scanner.js.map +1 -0
- package/dist/lib/monero/rpc.d.ts +131 -0
- package/dist/lib/monero/rpc.d.ts.map +1 -0
- package/dist/lib/monero/rpc.js +267 -0
- package/dist/lib/monero/rpc.js.map +1 -0
- package/dist/lib/monero/verify-lock.d.ts +50 -0
- package/dist/lib/monero/verify-lock.d.ts.map +1 -0
- package/dist/lib/monero/verify-lock.js +161 -0
- package/dist/lib/monero/verify-lock.js.map +1 -0
- package/dist/lib/monero/verify-sweep.d.ts +59 -0
- package/dist/lib/monero/verify-sweep.d.ts.map +1 -0
- package/dist/lib/monero/verify-sweep.js +82 -0
- package/dist/lib/monero/verify-sweep.js.map +1 -0
- package/dist/lib/monero/wasm.d.ts +19 -0
- package/dist/lib/monero/wasm.d.ts.map +1 -0
- package/dist/lib/monero/wasm.js +24 -0
- package/dist/lib/monero/wasm.js.map +1 -0
- package/dist/lib/pow-solver.d.ts +4 -0
- package/dist/lib/pow-solver.d.ts.map +1 -0
- package/dist/lib/pow-solver.js +37 -0
- package/dist/lib/pow-solver.js.map +1 -0
- package/dist/lib/retry.d.ts +86 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/lib/retry.js +104 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/portable.d.ts +23 -0
- package/dist/portable.d.ts.map +1 -0
- package/dist/portable.js +13 -0
- package/dist/portable.js.map +1 -0
- package/dist/quote-binding.d.ts +31 -0
- package/dist/quote-binding.d.ts.map +1 -0
- package/dist/quote-binding.js +40 -0
- package/dist/quote-binding.js.map +1 -0
- package/dist/swap-executor.d.ts +51 -0
- package/dist/swap-executor.d.ts.map +1 -0
- package/dist/swap-executor.js +138 -0
- package/dist/swap-executor.js.map +1 -0
- package/dist/types/api.d.ts +34 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +18 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/errors.d.ts +94 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +93 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/keys.d.ts +33 -0
- package/dist/types/keys.d.ts.map +1 -0
- package/dist/types/keys.js +2 -0
- package/dist/types/keys.js.map +1 -0
- package/dist/types/protocol.d.ts +93 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +18 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/types/status.d.ts +3 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +23 -0
- package/dist/types/status.js.map +1 -0
- package/dist/types/verification.d.ts +49 -0
- package/dist/types/verification.d.ts.map +1 -0
- package/dist/types/verification.js +34 -0
- package/dist/types/verification.js.map +1 -0
- package/dist/verification/atomic-swap.d.ts +9 -0
- package/dist/verification/atomic-swap.d.ts.map +1 -0
- package/dist/verification/atomic-swap.js +22 -0
- package/dist/verification/atomic-swap.js.map +1 -0
- package/dist/verification/chainflip-networks.d.ts +46 -0
- package/dist/verification/chainflip-networks.d.ts.map +1 -0
- package/dist/verification/chainflip-networks.js +24 -0
- package/dist/verification/chainflip-networks.js.map +1 -0
- package/dist/verification/chainflip.d.ts +61 -0
- package/dist/verification/chainflip.d.ts.map +1 -0
- package/dist/verification/chainflip.js +377 -0
- package/dist/verification/chainflip.js.map +1 -0
- package/dist/verification/constants.d.ts +52 -0
- package/dist/verification/constants.d.ts.map +1 -0
- package/dist/verification/constants.js +54 -0
- package/dist/verification/constants.js.map +1 -0
- package/dist/verification/index.d.ts +71 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/verification/index.js +91 -0
- package/dist/verification/index.js.map +1 -0
- package/dist/verification/memo.d.ts +27 -0
- package/dist/verification/memo.d.ts.map +1 -0
- package/dist/verification/memo.js +52 -0
- package/dist/verification/memo.js.map +1 -0
- package/dist/verification/near-intents.d.ts +91 -0
- package/dist/verification/near-intents.d.ts.map +1 -0
- package/dist/verification/near-intents.js +213 -0
- package/dist/verification/near-intents.js.map +1 -0
- package/dist/verification/rate-oracle.d.ts +32 -0
- package/dist/verification/rate-oracle.d.ts.map +1 -0
- package/dist/verification/rate-oracle.js +43 -0
- package/dist/verification/rate-oracle.js.map +1 -0
- package/dist/verification/shared.d.ts +20 -0
- package/dist/verification/shared.d.ts.map +1 -0
- package/dist/verification/shared.js +25 -0
- package/dist/verification/shared.js.map +1 -0
- package/dist/verification/thorchain-networks.d.ts +35 -0
- package/dist/verification/thorchain-networks.d.ts.map +1 -0
- package/dist/verification/thorchain-networks.js +35 -0
- package/dist/verification/thorchain-networks.js.map +1 -0
- package/dist/verification/thorchain.d.ts +55 -0
- package/dist/verification/thorchain.d.ts.map +1 -0
- package/dist/verification/thorchain.js +232 -0
- package/dist/verification/thorchain.js.map +1 -0
- package/dist/wasm-pins.d.ts +4 -0
- package/dist/wasm-pins.d.ts.map +1 -0
- package/dist/wasm-pins.js +6 -0
- package/dist/wasm-pins.js.map +1 -0
- package/dist/wire/chainflip.zod.d.ts +144 -0
- package/dist/wire/chainflip.zod.d.ts.map +1 -0
- package/dist/wire/chainflip.zod.js +33 -0
- package/dist/wire/chainflip.zod.js.map +1 -0
- package/dist/wire/near-intents.zod.d.ts +376 -0
- package/dist/wire/near-intents.zod.d.ts.map +1 -0
- package/dist/wire/near-intents.zod.js +101 -0
- package/dist/wire/near-intents.zod.js.map +1 -0
- package/dist/wire/server/action.zod.d.ts +1119 -0
- package/dist/wire/server/action.zod.d.ts.map +1 -0
- package/dist/wire/server/action.zod.js +173 -0
- package/dist/wire/server/action.zod.js.map +1 -0
- package/dist/wire/server/common.zod.d.ts +62 -0
- package/dist/wire/server/common.zod.d.ts.map +1 -0
- package/dist/wire/server/common.zod.js +43 -0
- package/dist/wire/server/common.zod.js.map +1 -0
- package/dist/wire/server/index.d.ts +8 -0
- package/dist/wire/server/index.d.ts.map +1 -0
- package/dist/wire/server/index.js +8 -0
- package/dist/wire/server/index.js.map +1 -0
- package/dist/wire/server/pow.zod.d.ts +45 -0
- package/dist/wire/server/pow.zod.d.ts.map +1 -0
- package/dist/wire/server/pow.zod.js +18 -0
- package/dist/wire/server/pow.zod.js.map +1 -0
- package/dist/wire/server/quotes.zod.d.ts +694 -0
- package/dist/wire/server/quotes.zod.d.ts.map +1 -0
- package/dist/wire/server/quotes.zod.js +103 -0
- package/dist/wire/server/quotes.zod.js.map +1 -0
- package/dist/wire/server/swap.zod.d.ts +1981 -0
- package/dist/wire/server/swap.zod.d.ts.map +1 -0
- package/dist/wire/server/swap.zod.js +270 -0
- package/dist/wire/server/swap.zod.js.map +1 -0
- package/dist/wire/server/tokens.zod.d.ts +93 -0
- package/dist/wire/server/tokens.zod.d.ts.map +1 -0
- package/dist/wire/server/tokens.zod.js +28 -0
- package/dist/wire/server/tokens.zod.js.map +1 -0
- package/dist/wire/server/verify.zod.d.ts +30 -0
- package/dist/wire/server/verify.zod.d.ts.map +1 -0
- package/dist/wire/server/verify.zod.js +12 -0
- package/dist/wire/server/verify.zod.js.map +1 -0
- package/dist/wire/thorchain.zod.d.ts +224 -0
- package/dist/wire/thorchain.zod.d.ts.map +1 -0
- package/dist/wire/thorchain.zod.js +51 -0
- package/dist/wire/thorchain.zod.js.map +1 -0
- package/package.json +128 -0
- package/wasm/miradex-rust/README.md +74 -0
- package/wasm/miradex-rust/miradex_rust.d.ts +149 -0
- package/wasm/miradex-rust/miradex_rust.js +943 -0
- package/wasm/miradex-rust/miradex_rust_bg.wasm +0 -0
- package/wasm/miradex-rust/miradex_rust_bg.wasm.d.ts +31 -0
- package/wasm/miradex-rust/package.json +24 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function check(name, passed, detail) {
|
|
2
|
+
return { name, passed, detail };
|
|
3
|
+
}
|
|
4
|
+
export function resultOf(provider, checks) {
|
|
5
|
+
return {
|
|
6
|
+
verified: checks.length > 0 && checks.every((c) => c.passed),
|
|
7
|
+
provider,
|
|
8
|
+
checks,
|
|
9
|
+
timestamp: Date.now(),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function failOf(provider, checks) {
|
|
13
|
+
return { verified: false, provider, checks, timestamp: Date.now() };
|
|
14
|
+
}
|
|
15
|
+
export function errMsg(err) {
|
|
16
|
+
if (!(err instanceof Error))
|
|
17
|
+
return String(err);
|
|
18
|
+
const cause = err.cause;
|
|
19
|
+
if (cause instanceof Error && cause.message)
|
|
20
|
+
return `${err.message} (${cause.message})`;
|
|
21
|
+
if (cause !== undefined && cause !== null)
|
|
22
|
+
return `${err.message} (${String(cause)})`;
|
|
23
|
+
return err.message;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/verification/shared.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,MAAe,EAAE,MAAc;IACjE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,QAAgB,EAChB,MAAoC;IAEpC,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5D,QAAQ;QACR,MAAM;QACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,QAAgB,EAChB,MAAoC;IAEpC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAY;IACjC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,KAAK,GAAI,GAA2B,CAAC,KAAK,CAAC;IACjD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC;IACxF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IACtF,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK-owned THORChain verification endpoints. Same shape as the chainflip
|
|
3
|
+
* registry: hardcoded per network so the SDK never trusts the server-supplied
|
|
4
|
+
* `verification.inbound_addresses_url`.
|
|
5
|
+
*
|
|
6
|
+
* On regtest the URL points at the system-tests fake-verifier
|
|
7
|
+
* (`system-tests/verifier/`), which serves a `ThornodeInboundAddressesSchema`-
|
|
8
|
+
* shaped response built from the swap row in Postgres.
|
|
9
|
+
*
|
|
10
|
+
* Returns `undefined` for any network without configured endpoints — the SDK
|
|
11
|
+
* fails closed rather than falling back to server-supplied URLs.
|
|
12
|
+
*/
|
|
13
|
+
export type ThorchainNetwork = 'mainnet' | 'testnet' | 'regtest';
|
|
14
|
+
export interface ThorchainVerificationEndpoints {
|
|
15
|
+
/**
|
|
16
|
+
* `GET ${inboundAddressesUrl}` returns an array of
|
|
17
|
+
* `ThornodeInboundAddress` objects (chain, address, halted, ...). This
|
|
18
|
+
* is THORNode's *primary* inbound per chain — exactly one entry per
|
|
19
|
+
* chain. On regtest the verifier echoes the swap row back as a
|
|
20
|
+
* single-vault array.
|
|
21
|
+
*/
|
|
22
|
+
readonly inboundAddressesUrl: string;
|
|
23
|
+
/**
|
|
24
|
+
* `GET ${asgardVaultsUrl}` returns every Asgard vault (not just the
|
|
25
|
+
* primary), used as a fallback when the primary check misses. During
|
|
26
|
+
* THORChain churn the primary inbound rotates ahead of the retiring
|
|
27
|
+
* vault, but the retiring vault still legitimately accepts in-flight
|
|
28
|
+
* deposits — the wider asgard list catches that case. Optional: if
|
|
29
|
+
* unset (e.g. regtest), the verifier skips the fallback.
|
|
30
|
+
*/
|
|
31
|
+
readonly asgardVaultsUrl?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare const THORCHAIN_VERIFICATION_NETWORKS: Readonly<Partial<Record<ThorchainNetwork, ThorchainVerificationEndpoints>>>;
|
|
34
|
+
export declare function thorchainEndpointsForNetwork(network: ThorchainNetwork): ThorchainVerificationEndpoints | undefined;
|
|
35
|
+
//# sourceMappingURL=thorchain-networks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thorchain-networks.d.ts","sourceRoot":"","sources":["../../src/verification/thorchain-networks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjE,MAAM,WAAW,8BAA8B;IAC7C;;;;;;OAMG;IACH,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAwBD,eAAO,MAAM,+BAA+B,EAAE,QAAQ,CACpD,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAC,CAalE,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,gBAAgB,GACxB,8BAA8B,GAAG,SAAS,CAE5C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Distinct from chainflip's verifier port (9099) so the two regtest stacks
|
|
2
|
+
// (system-tests-chainflip / system-tests-thorchain) can run side-by-side
|
|
3
|
+
// without contending on the same TCP port.
|
|
4
|
+
const DEFAULT_REGTEST_VERIFIER_URL = 'http://127.0.0.1:9098/thorchain/inbound_addresses';
|
|
5
|
+
// THORNode public endpoints. Liquify is the primary because
|
|
6
|
+
// `*.thorchain.network` gates aggressively with HTTP 403 for some IPs.
|
|
7
|
+
// (Nine Realms `*.ninerealms.com` endpoints were retired April 2025.)
|
|
8
|
+
const THORCHAIN_MAINNET_INBOUND_ADDRESSES = 'https://gateway.liquify.com/chain/thorchain_api/thorchain/inbound_addresses';
|
|
9
|
+
const THORCHAIN_MAINNET_ASGARD_VAULTS = 'https://gateway.liquify.com/chain/thorchain_api/thorchain/vaults/asgard';
|
|
10
|
+
// Note on the missing stagenet entry: THORChain has no usable public
|
|
11
|
+
// stagenet today (the legacy `stagenet-thornode.ninerealms.com` was
|
|
12
|
+
// retired April 2025 and no replacement was published). The
|
|
13
|
+
// product-level decision is that the `testnet` network flag governs
|
|
14
|
+
// **atomic swaps only** — every other provider (thorchain, chainflip,
|
|
15
|
+
// near-intents) executes on mainnet regardless of the flag, because
|
|
16
|
+
// no usable testnet exists for them. So testnet here mirrors mainnet
|
|
17
|
+
// — verification still hits real THORNode, swaps are real-money. The
|
|
18
|
+
// UI surfaces this with the testnet banner so users aren't surprised.
|
|
19
|
+
export const THORCHAIN_VERIFICATION_NETWORKS = {
|
|
20
|
+
mainnet: {
|
|
21
|
+
inboundAddressesUrl: THORCHAIN_MAINNET_INBOUND_ADDRESSES,
|
|
22
|
+
asgardVaultsUrl: THORCHAIN_MAINNET_ASGARD_VAULTS,
|
|
23
|
+
},
|
|
24
|
+
testnet: {
|
|
25
|
+
inboundAddressesUrl: THORCHAIN_MAINNET_INBOUND_ADDRESSES,
|
|
26
|
+
asgardVaultsUrl: THORCHAIN_MAINNET_ASGARD_VAULTS,
|
|
27
|
+
},
|
|
28
|
+
regtest: {
|
|
29
|
+
inboundAddressesUrl: DEFAULT_REGTEST_VERIFIER_URL,
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export function thorchainEndpointsForNetwork(network) {
|
|
33
|
+
return THORCHAIN_VERIFICATION_NETWORKS[network];
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=thorchain-networks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thorchain-networks.js","sourceRoot":"","sources":["../../src/verification/thorchain-networks.ts"],"names":[],"mappings":"AAkCA,2EAA2E;AAC3E,yEAAyE;AACzE,2CAA2C;AAC3C,MAAM,4BAA4B,GAAG,mDAAmD,CAAC;AAEzF,4DAA4D;AAC5D,uEAAuE;AACvE,sEAAsE;AACtE,MAAM,mCAAmC,GACvC,6EAA6E,CAAC;AAChF,MAAM,+BAA+B,GACnC,yEAAyE,CAAC;AAE5E,qEAAqE;AACrE,oEAAoE;AACpE,4DAA4D;AAC5D,oEAAoE;AACpE,sEAAsE;AACtE,oEAAoE;AACpE,qEAAqE;AACrE,qEAAqE;AACrE,sEAAsE;AACtE,MAAM,CAAC,MAAM,+BAA+B,GAExC;IACF,OAAO,EAAE;QACP,mBAAmB,EAAE,mCAAmC;QACxD,eAAe,EAAE,+BAA+B;KACjD;IACD,OAAO,EAAE;QACP,mBAAmB,EAAE,mCAAmC;QACxD,eAAe,EAAE,+BAA+B;KACjD;IACD,OAAO,EAAE;QACP,mBAAmB,EAAE,4BAA4B;KAClD;CACF,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAC1C,OAAyB;IAEzB,OAAO,+BAA+B,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ThorchainVerification, VerificationResult } from '../types/index.js';
|
|
2
|
+
import type { Logger } from '../interfaces/logger.js';
|
|
3
|
+
import { type VerifyParams } from './shared.js';
|
|
4
|
+
import { type ThornodeInboundAddress } from '../wire/thorchain.zod.js';
|
|
5
|
+
import { type ThorchainNetwork } from './thorchain-networks.js';
|
|
6
|
+
/**
|
|
7
|
+
* Verify a THORChain deposit address against the SDK-owned inbound-addresses
|
|
8
|
+
* endpoint. The endpoint is hardcoded per network in `thorchain-networks.ts`
|
|
9
|
+
* — `v.inbound_addresses_url` from the server is intentionally ignored so a
|
|
10
|
+
* compromised server cannot redirect verification to its own infrastructure.
|
|
11
|
+
*
|
|
12
|
+
* Memo is parsed strictly (no substring matching) per AV-A.14 / AV-K.6.
|
|
13
|
+
* Vault quorum and quote cross-check live in separate helpers used by the
|
|
14
|
+
* swap-executor layer.
|
|
15
|
+
*
|
|
16
|
+
* Fails closed when the network has no configured verifier endpoints.
|
|
17
|
+
*/
|
|
18
|
+
export declare function verifyThorchain(depositAddress: string, v: ThorchainVerification, params: VerifyParams, fetchFn: typeof globalThis.fetch, network: ThorchainNetwork, resume?: boolean, externalSignal?: AbortSignal): Promise<VerificationResult>;
|
|
19
|
+
export interface FetchThorchainVaultsInput {
|
|
20
|
+
readonly fetchFn: typeof globalThis.fetch;
|
|
21
|
+
readonly timeoutMs?: number;
|
|
22
|
+
readonly logger?: Logger;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Fetch THORChain inbound addresses from THORNode and Midgard in parallel.
|
|
26
|
+
* Returns the list of vaults that appear in at least two independent sources
|
|
27
|
+
* agreeing on `(chain, address)` and are not halted / paused.
|
|
28
|
+
*
|
|
29
|
+
* @throws {VerificationError} `E_THORCHAIN_QUORUM` when fewer than 2 sources
|
|
30
|
+
* respond successfully.
|
|
31
|
+
* @throws {VerificationError} `E_THORCHAIN_VAULT_DISAGREE` when no vault is
|
|
32
|
+
* reported by at least 2 sources for the requested chain.
|
|
33
|
+
*/
|
|
34
|
+
export declare function fetchThorchainVaults(input: FetchThorchainVaultsInput): Promise<readonly ThornodeInboundAddress[]>;
|
|
35
|
+
export interface VerifyThorchainQuoteInput {
|
|
36
|
+
readonly fromAsset: string;
|
|
37
|
+
readonly toAsset: string;
|
|
38
|
+
readonly amountSats: string;
|
|
39
|
+
readonly destAddress: string;
|
|
40
|
+
readonly engineExpectedOut: string;
|
|
41
|
+
readonly slippageBps: number;
|
|
42
|
+
readonly fetchFn: typeof globalThis.fetch;
|
|
43
|
+
readonly timeoutMs?: number;
|
|
44
|
+
readonly thornodeUrls?: readonly string[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Cross-check the engine's `expectedOutput` against a live THORNode quote
|
|
48
|
+
* fetched from ≥ 2 independent sources. Rejects when the engine value falls
|
|
49
|
+
* outside the slippage band from the median of the node quotes.
|
|
50
|
+
*
|
|
51
|
+
* @throws {VerificationError} `E_THORNODE_QUOTE_UNAVAILABLE` when no source responds.
|
|
52
|
+
* @throws {VerificationError} `E_RATE_DRIFT` when the engine value is out of band.
|
|
53
|
+
*/
|
|
54
|
+
export declare function verifyThorchainQuote(input: VerifyThorchainQuoteInput): Promise<void>;
|
|
55
|
+
//# sourceMappingURL=thorchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thorchain.d.ts","sourceRoot":"","sources":["../../src/verification/thorchain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAqB,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAmC,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,EAEL,KAAK,sBAAsB,EAI5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAmB9F;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,CAAC,EAAE,qBAAqB,EACxB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,EAChC,OAAO,EAAE,gBAAgB,EACzB,MAAM,CAAC,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,WAAW,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAqH7B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,yBAAyB,GAC/B,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAe5C;AA0CD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC1F"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { check, errMsg, failOf, resultOf } from './shared.js';
|
|
2
|
+
import { requireMemoBindsDestination } from './memo.js';
|
|
3
|
+
import { VerificationError } from '../types/index.js';
|
|
4
|
+
import { ThornodeInboundAddressesSchema, ThornodeQuoteSchema, AsgardVaultsResponseSchema, } from '../wire/thorchain.zod.js';
|
|
5
|
+
import { VERIFY_FETCH_TIMEOUT_MS } from './constants.js';
|
|
6
|
+
import { thorchainEndpointsForNetwork } from './thorchain-networks.js';
|
|
7
|
+
// Nine Realms (*.ninerealms.com) endpoints retired April 2025. The two
|
|
8
|
+
// public providers post-migration are Liquify (`gateway.liquify.com/...`)
|
|
9
|
+
// and the canonical `*.thorchain.network` hosts. Liquify is listed first
|
|
10
|
+
// because `*.thorchain.network` gates aggressively with HTTP 403 ("the
|
|
11
|
+
// gates of Asgard are closed to you") for some IPs/UAs; failing over to
|
|
12
|
+
// `thorchain.network` after a Liquify success is fine and preserves the
|
|
13
|
+
// two-source quorum in `fetchThorchainVaults`.
|
|
14
|
+
const THORNODE_URLS = [
|
|
15
|
+
'https://gateway.liquify.com/chain/thorchain_api/thorchain/inbound_addresses',
|
|
16
|
+
'https://thornode.thorchain.network/thorchain/inbound_addresses',
|
|
17
|
+
];
|
|
18
|
+
const MIDGARD_URLS = [
|
|
19
|
+
'https://gateway.liquify.com/chain/thorchain_midgard/v2/thorchain/inbound_addresses',
|
|
20
|
+
'https://midgard.thorchain.network/v2/thorchain/inbound_addresses',
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Verify a THORChain deposit address against the SDK-owned inbound-addresses
|
|
24
|
+
* endpoint. The endpoint is hardcoded per network in `thorchain-networks.ts`
|
|
25
|
+
* — `v.inbound_addresses_url` from the server is intentionally ignored so a
|
|
26
|
+
* compromised server cannot redirect verification to its own infrastructure.
|
|
27
|
+
*
|
|
28
|
+
* Memo is parsed strictly (no substring matching) per AV-A.14 / AV-K.6.
|
|
29
|
+
* Vault quorum and quote cross-check live in separate helpers used by the
|
|
30
|
+
* swap-executor layer.
|
|
31
|
+
*
|
|
32
|
+
* Fails closed when the network has no configured verifier endpoints.
|
|
33
|
+
*/
|
|
34
|
+
export async function verifyThorchain(depositAddress, v, params, fetchFn, network, resume, externalSignal) {
|
|
35
|
+
const endpoints = thorchainEndpointsForNetwork(network);
|
|
36
|
+
if (!endpoints) {
|
|
37
|
+
return failOf('thorchain', [
|
|
38
|
+
check('THORChain verifier configured', false, `No verification endpoints registered for network "${network}"`),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
const checks = [];
|
|
42
|
+
try {
|
|
43
|
+
const res = await fetchFn(endpoints.inboundAddressesUrl, {
|
|
44
|
+
signal: externalSignal !== undefined
|
|
45
|
+
? AbortSignal.any([AbortSignal.timeout(VERIFY_FETCH_TIMEOUT_MS), externalSignal])
|
|
46
|
+
: AbortSignal.timeout(VERIFY_FETCH_TIMEOUT_MS),
|
|
47
|
+
});
|
|
48
|
+
if (!res.ok) {
|
|
49
|
+
return failOf('thorchain', [check('THORNode reachable', false, `HTTP ${res.status}`)]);
|
|
50
|
+
}
|
|
51
|
+
const raw = await res.json();
|
|
52
|
+
const parsed = ThornodeInboundAddressesSchema.safeParse(raw);
|
|
53
|
+
if (!parsed.success) {
|
|
54
|
+
return failOf('thorchain', [check('THORNode response', false, 'Expected array of vaults')]);
|
|
55
|
+
}
|
|
56
|
+
const vaults = parsed.data;
|
|
57
|
+
checks.push(check('THORNode reachable', true, `${vaults.length} inbound addresses`));
|
|
58
|
+
if (!resume) {
|
|
59
|
+
const primaryMatch = vaults.find((vault) => vault.address === depositAddress);
|
|
60
|
+
let matchedVia = primaryMatch ? 'primary' : null;
|
|
61
|
+
let matchedAsgardStatus = null;
|
|
62
|
+
// Primary `inbound_addresses` returns only the *current* primary per
|
|
63
|
+
// chain. During THORChain churn the primary rotates ahead of the
|
|
64
|
+
// previous vault, but the retiring vault is still a legitimate
|
|
65
|
+
// destination for in-flight deposits. Cross-check against the wider
|
|
66
|
+
// `/thorchain/vaults/asgard` list before failing closed.
|
|
67
|
+
if (!primaryMatch && endpoints.asgardVaultsUrl) {
|
|
68
|
+
try {
|
|
69
|
+
const asgardRes = await fetchFn(endpoints.asgardVaultsUrl, {
|
|
70
|
+
signal: externalSignal !== undefined
|
|
71
|
+
? AbortSignal.any([AbortSignal.timeout(VERIFY_FETCH_TIMEOUT_MS), externalSignal])
|
|
72
|
+
: AbortSignal.timeout(VERIFY_FETCH_TIMEOUT_MS),
|
|
73
|
+
});
|
|
74
|
+
if (asgardRes.ok) {
|
|
75
|
+
const asgardRaw = await asgardRes.json();
|
|
76
|
+
const asgardParsed = AsgardVaultsResponseSchema.safeParse(asgardRaw);
|
|
77
|
+
if (asgardParsed.success) {
|
|
78
|
+
for (const vault of asgardParsed.data) {
|
|
79
|
+
const hit = vault.addresses.find((a) => a.address === depositAddress);
|
|
80
|
+
if (hit) {
|
|
81
|
+
matchedVia = 'asgard-fallback';
|
|
82
|
+
matchedAsgardStatus = vault.status;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Fallback failure is non-fatal: we still report the primary miss
|
|
91
|
+
// below. Don't escalate a network glitch on the fallback URL into
|
|
92
|
+
// a verification failure when the swap might actually be fine.
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (matchedVia === 'primary' && primaryMatch) {
|
|
96
|
+
checks.push(check('Asgard vault match', true, `Matched primary vault for ${primaryMatch.chain}`));
|
|
97
|
+
checks.push(check('Vault active', !primaryMatch.halted, primaryMatch.halted ? 'Vault is halted' : 'Vault is active'));
|
|
98
|
+
}
|
|
99
|
+
else if (matchedVia === 'asgard-fallback') {
|
|
100
|
+
// Found in the wider asgard list — legitimate during churn.
|
|
101
|
+
// Tag the detail so the UI can show "Matched (rotating)" or similar
|
|
102
|
+
// and the user understands why the primary missed.
|
|
103
|
+
checks.push(check('Asgard vault match', true, `Matched asgard (${matchedAsgardStatus ?? 'active'} during rotation)`));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
checks.push(check('Asgard vault match', false, 'Address not in active vaults'));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (v.registered_memo) {
|
|
110
|
+
let memoOk = false;
|
|
111
|
+
let memoDetail = 'Memo mismatch';
|
|
112
|
+
try {
|
|
113
|
+
requireMemoBindsDestination(v.registered_memo, params.destAddress);
|
|
114
|
+
memoOk = true;
|
|
115
|
+
memoDetail = 'Memo binds correct destination';
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
if (err instanceof VerificationError) {
|
|
119
|
+
memoDetail = `${err.code}: ${err.message}`;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
memoDetail = errMsg(err);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
checks.push(check('Memo destination', memoOk, memoDetail));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
checks.push(check('THORNode verification', false, errMsg(err)));
|
|
130
|
+
}
|
|
131
|
+
return resultOf('thorchain', checks);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Fetch THORChain inbound addresses from THORNode and Midgard in parallel.
|
|
135
|
+
* Returns the list of vaults that appear in at least two independent sources
|
|
136
|
+
* agreeing on `(chain, address)` and are not halted / paused.
|
|
137
|
+
*
|
|
138
|
+
* @throws {VerificationError} `E_THORCHAIN_QUORUM` when fewer than 2 sources
|
|
139
|
+
* respond successfully.
|
|
140
|
+
* @throws {VerificationError} `E_THORCHAIN_VAULT_DISAGREE` when no vault is
|
|
141
|
+
* reported by at least 2 sources for the requested chain.
|
|
142
|
+
*/
|
|
143
|
+
export async function fetchThorchainVaults(input) {
|
|
144
|
+
const timeoutMs = input.timeoutMs ?? VERIFY_FETCH_TIMEOUT_MS;
|
|
145
|
+
const urls = [...THORNODE_URLS, ...MIDGARD_URLS];
|
|
146
|
+
const attempts = urls.map((url) => fetchValidatedList(url, input.fetchFn, timeoutMs));
|
|
147
|
+
const settled = await Promise.allSettled(attempts);
|
|
148
|
+
const successes = settled
|
|
149
|
+
.filter((s) => s.status === 'fulfilled')
|
|
150
|
+
.map((s) => s.value);
|
|
151
|
+
if (successes.length < 2) {
|
|
152
|
+
throw new VerificationError('E_THORCHAIN_QUORUM', `only ${String(successes.length)} of ${String(urls.length)} vault sources responded`);
|
|
153
|
+
}
|
|
154
|
+
return reconcileVaults(successes);
|
|
155
|
+
}
|
|
156
|
+
async function fetchValidatedList(url, fetchFn, timeoutMs) {
|
|
157
|
+
const res = await fetchFn(url, { signal: AbortSignal.timeout(timeoutMs) });
|
|
158
|
+
if (!res.ok)
|
|
159
|
+
throw new Error(`HTTP ${String(res.status)}`);
|
|
160
|
+
const raw = await res.json();
|
|
161
|
+
return ThornodeInboundAddressesSchema.parse(raw);
|
|
162
|
+
}
|
|
163
|
+
function vaultKey(v) {
|
|
164
|
+
return `${v.chain}:${v.address}`;
|
|
165
|
+
}
|
|
166
|
+
function reconcileVaults(lists) {
|
|
167
|
+
const counts = new Map();
|
|
168
|
+
for (const list of lists) {
|
|
169
|
+
const seen = new Set();
|
|
170
|
+
for (const v of list) {
|
|
171
|
+
const key = vaultKey(v);
|
|
172
|
+
if (seen.has(key))
|
|
173
|
+
continue;
|
|
174
|
+
seen.add(key);
|
|
175
|
+
const slot = counts.get(key);
|
|
176
|
+
if (slot)
|
|
177
|
+
slot.count += 1;
|
|
178
|
+
else
|
|
179
|
+
counts.set(key, { vault: v, count: 1 });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
const accepted = [];
|
|
183
|
+
for (const [, slot] of counts) {
|
|
184
|
+
if (slot.count < 2)
|
|
185
|
+
continue;
|
|
186
|
+
if (slot.vault.halted)
|
|
187
|
+
continue;
|
|
188
|
+
if (slot.vault.chain_trading_paused === true)
|
|
189
|
+
continue;
|
|
190
|
+
accepted.push(slot.vault);
|
|
191
|
+
}
|
|
192
|
+
return accepted;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Cross-check the engine's `expectedOutput` against a live THORNode quote
|
|
196
|
+
* fetched from ≥ 2 independent sources. Rejects when the engine value falls
|
|
197
|
+
* outside the slippage band from the median of the node quotes.
|
|
198
|
+
*
|
|
199
|
+
* @throws {VerificationError} `E_THORNODE_QUOTE_UNAVAILABLE` when no source responds.
|
|
200
|
+
* @throws {VerificationError} `E_RATE_DRIFT` when the engine value is out of band.
|
|
201
|
+
*/
|
|
202
|
+
export async function verifyThorchainQuote(input) {
|
|
203
|
+
const timeoutMs = input.timeoutMs ?? VERIFY_FETCH_TIMEOUT_MS;
|
|
204
|
+
const base = input.thornodeUrls ?? [
|
|
205
|
+
'https://gateway.liquify.com/chain/thorchain_api',
|
|
206
|
+
'https://thornode.thorchain.network',
|
|
207
|
+
];
|
|
208
|
+
const attempts = base.map((root) => fetchThornodeQuote(`${root}/thorchain/quote/swap?from_asset=${encodeURIComponent(input.fromAsset)}&to_asset=${encodeURIComponent(input.toAsset)}&amount=${encodeURIComponent(input.amountSats)}&destination=${encodeURIComponent(input.destAddress)}`, input.fetchFn, timeoutMs));
|
|
209
|
+
const settled = await Promise.allSettled(attempts);
|
|
210
|
+
const quotes = settled
|
|
211
|
+
.filter((s) => s.status === 'fulfilled')
|
|
212
|
+
.map((s) => s.value);
|
|
213
|
+
if (quotes.length < 1) {
|
|
214
|
+
throw new VerificationError('E_THORNODE_QUOTE_UNAVAILABLE', 'could not fetch a THORNode quote from any source');
|
|
215
|
+
}
|
|
216
|
+
const values = quotes.map((q) => BigInt(q.expected_amount_out));
|
|
217
|
+
const sorted = [...values].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
218
|
+
const mid = sorted[Math.floor(sorted.length / 2)] ?? values[0] ?? 0n;
|
|
219
|
+
const engine = BigInt(input.engineExpectedOut);
|
|
220
|
+
const tolerance = (mid * BigInt(input.slippageBps)) / 10000n;
|
|
221
|
+
if (engine < mid - tolerance || engine > mid + tolerance) {
|
|
222
|
+
throw new VerificationError('E_RATE_DRIFT', `engine expectedOut ${engine.toString()} outside slippage band ${(mid - tolerance).toString()}..${(mid + tolerance).toString()}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function fetchThornodeQuote(url, fetchFn, timeoutMs) {
|
|
226
|
+
const res = await fetchFn(url, { signal: AbortSignal.timeout(timeoutMs) });
|
|
227
|
+
if (!res.ok)
|
|
228
|
+
throw new Error(`HTTP ${String(res.status)}`);
|
|
229
|
+
const raw = await res.json();
|
|
230
|
+
return ThornodeQuoteSchema.parse(raw);
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=thorchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thorchain.js","sourceRoot":"","sources":["../../src/verification/thorchain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare const SWAP_WASM_SHA256 = "2450ea115d826df77f6c021e9b120004fcb6fe7f7e1aa922cd1caab6e76817a3";
|
|
2
|
+
export declare const KEYGEN_WASM_SHA256 = "2450ea115d826df77f6c021e9b120004fcb6fe7f7e1aa922cd1caab6e76817a3";
|
|
3
|
+
export declare const MONERO_SWEEP_WASM_SHA256 = "2450ea115d826df77f6c021e9b120004fcb6fe7f7e1aa922cd1caab6e76817a3";
|
|
4
|
+
//# sourceMappingURL=wasm-pins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-pins.d.ts","sourceRoot":"","sources":["../src/wasm-pins.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,qEAAqE,CAAC;AAEnG,eAAO,MAAM,kBAAkB,qEAAmB,CAAC;AACnD,eAAO,MAAM,wBAAwB,qEAAmB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/* AUTO-GENERATED by scripts/pin-wasm.mjs — do not edit by hand. */
|
|
2
|
+
export const SWAP_WASM_SHA256 = "2450ea115d826df77f6c021e9b120004fcb6fe7f7e1aa922cd1caab6e76817a3";
|
|
3
|
+
/* Legacy aliases (removed in 0.4.0): */
|
|
4
|
+
export const KEYGEN_WASM_SHA256 = SWAP_WASM_SHA256;
|
|
5
|
+
export const MONERO_SWEEP_WASM_SHA256 = SWAP_WASM_SHA256;
|
|
6
|
+
//# sourceMappingURL=wasm-pins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-pins.js","sourceRoot":"","sources":["../src/wasm-pins.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,kEAAkE,CAAC;AACnG,wCAAwC;AACxC,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AACnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ChainflipDepositChannelSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
depositAddress: z.ZodString;
|
|
5
|
+
brokerCommissionBps: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
expiryTime: z.ZodOptional<z.ZodString>;
|
|
7
|
+
srcChain: z.ZodOptional<z.ZodString>;
|
|
8
|
+
srcAsset: z.ZodOptional<z.ZodString>;
|
|
9
|
+
destChain: z.ZodOptional<z.ZodString>;
|
|
10
|
+
destAsset: z.ZodOptional<z.ZodString>;
|
|
11
|
+
destAddress: z.ZodOptional<z.ZodString>;
|
|
12
|
+
refundAddress: z.ZodOptional<z.ZodString>;
|
|
13
|
+
minBtcAmount: z.ZodOptional<z.ZodString>;
|
|
14
|
+
maxBtcAmount: z.ZodOptional<z.ZodString>;
|
|
15
|
+
channelId: z.ZodOptional<z.ZodString>;
|
|
16
|
+
issuedBlock: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
depositAddress: string;
|
|
19
|
+
id?: string | undefined;
|
|
20
|
+
destAddress?: string | undefined;
|
|
21
|
+
refundAddress?: string | undefined;
|
|
22
|
+
brokerCommissionBps?: number | undefined;
|
|
23
|
+
expiryTime?: string | undefined;
|
|
24
|
+
srcChain?: string | undefined;
|
|
25
|
+
srcAsset?: string | undefined;
|
|
26
|
+
destChain?: string | undefined;
|
|
27
|
+
destAsset?: string | undefined;
|
|
28
|
+
minBtcAmount?: string | undefined;
|
|
29
|
+
maxBtcAmount?: string | undefined;
|
|
30
|
+
channelId?: string | undefined;
|
|
31
|
+
issuedBlock?: number | undefined;
|
|
32
|
+
}, {
|
|
33
|
+
depositAddress: string;
|
|
34
|
+
id?: string | undefined;
|
|
35
|
+
destAddress?: string | undefined;
|
|
36
|
+
refundAddress?: string | undefined;
|
|
37
|
+
brokerCommissionBps?: number | undefined;
|
|
38
|
+
expiryTime?: string | undefined;
|
|
39
|
+
srcChain?: string | undefined;
|
|
40
|
+
srcAsset?: string | undefined;
|
|
41
|
+
destChain?: string | undefined;
|
|
42
|
+
destAsset?: string | undefined;
|
|
43
|
+
minBtcAmount?: string | undefined;
|
|
44
|
+
maxBtcAmount?: string | undefined;
|
|
45
|
+
channelId?: string | undefined;
|
|
46
|
+
issuedBlock?: number | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
export type ChainflipDepositChannel = z.infer<typeof ChainflipDepositChannelSchema>;
|
|
49
|
+
export declare const ChainflipStatusSchema: z.ZodObject<{
|
|
50
|
+
state: z.ZodEnum<["WAITING", "RECEIVING", "SWAPPING", "SENDING", "SENT", "COMPLETED", "FAILED"]>;
|
|
51
|
+
depositChannel: z.ZodOptional<z.ZodObject<{
|
|
52
|
+
id: z.ZodOptional<z.ZodString>;
|
|
53
|
+
depositAddress: z.ZodString;
|
|
54
|
+
brokerCommissionBps: z.ZodOptional<z.ZodNumber>;
|
|
55
|
+
expiryTime: z.ZodOptional<z.ZodString>;
|
|
56
|
+
srcChain: z.ZodOptional<z.ZodString>;
|
|
57
|
+
srcAsset: z.ZodOptional<z.ZodString>;
|
|
58
|
+
destChain: z.ZodOptional<z.ZodString>;
|
|
59
|
+
destAsset: z.ZodOptional<z.ZodString>;
|
|
60
|
+
destAddress: z.ZodOptional<z.ZodString>;
|
|
61
|
+
refundAddress: z.ZodOptional<z.ZodString>;
|
|
62
|
+
minBtcAmount: z.ZodOptional<z.ZodString>;
|
|
63
|
+
maxBtcAmount: z.ZodOptional<z.ZodString>;
|
|
64
|
+
channelId: z.ZodOptional<z.ZodString>;
|
|
65
|
+
issuedBlock: z.ZodOptional<z.ZodNumber>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
depositAddress: string;
|
|
68
|
+
id?: string | undefined;
|
|
69
|
+
destAddress?: string | undefined;
|
|
70
|
+
refundAddress?: string | undefined;
|
|
71
|
+
brokerCommissionBps?: number | undefined;
|
|
72
|
+
expiryTime?: string | undefined;
|
|
73
|
+
srcChain?: string | undefined;
|
|
74
|
+
srcAsset?: string | undefined;
|
|
75
|
+
destChain?: string | undefined;
|
|
76
|
+
destAsset?: string | undefined;
|
|
77
|
+
minBtcAmount?: string | undefined;
|
|
78
|
+
maxBtcAmount?: string | undefined;
|
|
79
|
+
channelId?: string | undefined;
|
|
80
|
+
issuedBlock?: number | undefined;
|
|
81
|
+
}, {
|
|
82
|
+
depositAddress: string;
|
|
83
|
+
id?: string | undefined;
|
|
84
|
+
destAddress?: string | undefined;
|
|
85
|
+
refundAddress?: string | undefined;
|
|
86
|
+
brokerCommissionBps?: number | undefined;
|
|
87
|
+
expiryTime?: string | undefined;
|
|
88
|
+
srcChain?: string | undefined;
|
|
89
|
+
srcAsset?: string | undefined;
|
|
90
|
+
destChain?: string | undefined;
|
|
91
|
+
destAsset?: string | undefined;
|
|
92
|
+
minBtcAmount?: string | undefined;
|
|
93
|
+
maxBtcAmount?: string | undefined;
|
|
94
|
+
channelId?: string | undefined;
|
|
95
|
+
issuedBlock?: number | undefined;
|
|
96
|
+
}>>;
|
|
97
|
+
destAddress: z.ZodOptional<z.ZodString>;
|
|
98
|
+
egressAmount: z.ZodOptional<z.ZodString>;
|
|
99
|
+
refundAddress: z.ZodOptional<z.ZodString>;
|
|
100
|
+
}, "strip", z.ZodTypeAny, {
|
|
101
|
+
state: "WAITING" | "RECEIVING" | "SWAPPING" | "SENDING" | "SENT" | "COMPLETED" | "FAILED";
|
|
102
|
+
destAddress?: string | undefined;
|
|
103
|
+
refundAddress?: string | undefined;
|
|
104
|
+
depositChannel?: {
|
|
105
|
+
depositAddress: string;
|
|
106
|
+
id?: string | undefined;
|
|
107
|
+
destAddress?: string | undefined;
|
|
108
|
+
refundAddress?: string | undefined;
|
|
109
|
+
brokerCommissionBps?: number | undefined;
|
|
110
|
+
expiryTime?: string | undefined;
|
|
111
|
+
srcChain?: string | undefined;
|
|
112
|
+
srcAsset?: string | undefined;
|
|
113
|
+
destChain?: string | undefined;
|
|
114
|
+
destAsset?: string | undefined;
|
|
115
|
+
minBtcAmount?: string | undefined;
|
|
116
|
+
maxBtcAmount?: string | undefined;
|
|
117
|
+
channelId?: string | undefined;
|
|
118
|
+
issuedBlock?: number | undefined;
|
|
119
|
+
} | undefined;
|
|
120
|
+
egressAmount?: string | undefined;
|
|
121
|
+
}, {
|
|
122
|
+
state: "WAITING" | "RECEIVING" | "SWAPPING" | "SENDING" | "SENT" | "COMPLETED" | "FAILED";
|
|
123
|
+
destAddress?: string | undefined;
|
|
124
|
+
refundAddress?: string | undefined;
|
|
125
|
+
depositChannel?: {
|
|
126
|
+
depositAddress: string;
|
|
127
|
+
id?: string | undefined;
|
|
128
|
+
destAddress?: string | undefined;
|
|
129
|
+
refundAddress?: string | undefined;
|
|
130
|
+
brokerCommissionBps?: number | undefined;
|
|
131
|
+
expiryTime?: string | undefined;
|
|
132
|
+
srcChain?: string | undefined;
|
|
133
|
+
srcAsset?: string | undefined;
|
|
134
|
+
destChain?: string | undefined;
|
|
135
|
+
destAsset?: string | undefined;
|
|
136
|
+
minBtcAmount?: string | undefined;
|
|
137
|
+
maxBtcAmount?: string | undefined;
|
|
138
|
+
channelId?: string | undefined;
|
|
139
|
+
issuedBlock?: number | undefined;
|
|
140
|
+
} | undefined;
|
|
141
|
+
egressAmount?: string | undefined;
|
|
142
|
+
}>;
|
|
143
|
+
export type ChainflipStatus = z.infer<typeof ChainflipStatusSchema>;
|
|
144
|
+
//# sourceMappingURL=chainflip.zod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainflip.zod.d.ts","sourceRoot":"","sources":["../../src/wire/chainflip.zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAexC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAchC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const ChainflipDepositChannelSchema = z.object({
|
|
3
|
+
id: z.string().optional(),
|
|
4
|
+
depositAddress: z.string(),
|
|
5
|
+
brokerCommissionBps: z.number().int().nonnegative().optional(),
|
|
6
|
+
expiryTime: z.string().datetime().optional(),
|
|
7
|
+
srcChain: z.string().optional(),
|
|
8
|
+
srcAsset: z.string().optional(),
|
|
9
|
+
destChain: z.string().optional(),
|
|
10
|
+
destAsset: z.string().optional(),
|
|
11
|
+
destAddress: z.string().optional(),
|
|
12
|
+
refundAddress: z.string().optional(),
|
|
13
|
+
minBtcAmount: z.string().optional(),
|
|
14
|
+
maxBtcAmount: z.string().optional(),
|
|
15
|
+
channelId: z.string().optional(),
|
|
16
|
+
issuedBlock: z.number().int().nonnegative().optional(),
|
|
17
|
+
});
|
|
18
|
+
export const ChainflipStatusSchema = z.object({
|
|
19
|
+
state: z.enum([
|
|
20
|
+
'WAITING',
|
|
21
|
+
'RECEIVING',
|
|
22
|
+
'SWAPPING',
|
|
23
|
+
'SENDING',
|
|
24
|
+
'SENT',
|
|
25
|
+
'COMPLETED',
|
|
26
|
+
'FAILED',
|
|
27
|
+
]),
|
|
28
|
+
depositChannel: ChainflipDepositChannelSchema.optional(),
|
|
29
|
+
destAddress: z.string().optional(),
|
|
30
|
+
egressAmount: z.string().optional(),
|
|
31
|
+
refundAddress: z.string().optional(),
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=chainflip.zod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chainflip.zod.js","sourceRoot":"","sources":["../../src/wire/chainflip.zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC9D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;QACZ,SAAS;QACT,WAAW;QACX,UAAU;QACV,SAAS;QACT,MAAM;QACN,WAAW;QACX,QAAQ;KACT,CAAC;IACF,cAAc,EAAE,6BAA6B,CAAC,QAAQ,EAAE;IACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC"}
|