@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
|
+
/**
|
|
2
|
+
* Derive a libp2p Ed25519 identity from a 32-byte master seed, matching
|
|
3
|
+
* eigenwallet's swap/src/seed.rs::derive_libp2p_identity byte-for-byte:
|
|
4
|
+
*
|
|
5
|
+
* network_seed = SHA256(master_seed || "NETWORK")
|
|
6
|
+
* libp2p_seed = SHA256(network_seed || "LIBP2P_IDENTITY")
|
|
7
|
+
* keypair = Ed25519::from_bytes(libp2p_seed)
|
|
8
|
+
* peer_id = base58btc(identity_multihash(protobuf(pubkey)))
|
|
9
|
+
*
|
|
10
|
+
* Note: this is plain concatenated SHA-256, NOT HMAC-SHA256. Matches the
|
|
11
|
+
* Rust `derive` helper that does `sha256(seed.bytes() || scope)`.
|
|
12
|
+
*
|
|
13
|
+
* Producing the same peer-id eigenwallet would derive from the same seed is
|
|
14
|
+
* what makes cross-binary recovery work without patching eigenwallet.
|
|
15
|
+
*/
|
|
16
|
+
export interface DerivedLibp2pIdentity {
|
|
17
|
+
/** 32-byte Ed25519 secret seed (hex). What eigenwallet writes to seed.pem. */
|
|
18
|
+
readonly libp2pSeedHex: string;
|
|
19
|
+
/** base58btc PeerId string (e.g. "12D3KooW..."). */
|
|
20
|
+
readonly libp2pPeerId: string;
|
|
21
|
+
/** libp2p PublicKey protobuf bytes (hex), useful for diagnostics. */
|
|
22
|
+
readonly libp2pPublicKeyProtoHex: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function deriveLibp2pIdentity(masterSeedHex: string): Promise<DerivedLibp2pIdentity>;
|
|
25
|
+
//# sourceMappingURL=libp2p-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libp2p-identity.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/libp2p-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAgCH,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,oDAAoD;IACpD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C;AASD,wBAAsB,oBAAoB,CACxC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,qBAAqB,CAAC,CAwChC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive a libp2p Ed25519 identity from a 32-byte master seed, matching
|
|
3
|
+
* eigenwallet's swap/src/seed.rs::derive_libp2p_identity byte-for-byte:
|
|
4
|
+
*
|
|
5
|
+
* network_seed = SHA256(master_seed || "NETWORK")
|
|
6
|
+
* libp2p_seed = SHA256(network_seed || "LIBP2P_IDENTITY")
|
|
7
|
+
* keypair = Ed25519::from_bytes(libp2p_seed)
|
|
8
|
+
* peer_id = base58btc(identity_multihash(protobuf(pubkey)))
|
|
9
|
+
*
|
|
10
|
+
* Note: this is plain concatenated SHA-256, NOT HMAC-SHA256. Matches the
|
|
11
|
+
* Rust `derive` helper that does `sha256(seed.bytes() || scope)`.
|
|
12
|
+
*
|
|
13
|
+
* Producing the same peer-id eigenwallet would derive from the same seed is
|
|
14
|
+
* what makes cross-binary recovery work without patching eigenwallet.
|
|
15
|
+
*/
|
|
16
|
+
import { sha256, sha512 } from '@noble/hashes/sha2.js';
|
|
17
|
+
import { getPublicKey, hashes as edHashes } from '@noble/ed25519';
|
|
18
|
+
import { base58 } from '@scure/base';
|
|
19
|
+
import { hexToBytes, bytesToHex } from '@noble/hashes/utils.js';
|
|
20
|
+
// `@noble/ed25519`'s default async API hits WebCrypto for SHA-512, which
|
|
21
|
+
// browsers gate to secure contexts (HTTPS / localhost / 127.0.0.1). Self-
|
|
22
|
+
// hosted miradex-web runs over plain HTTP from a LAN IP, .local hostname,
|
|
23
|
+
// or onion address — none of which qualify — and any call to
|
|
24
|
+
// `getPublicKeyAsync` throws "crypto.subtle must be defined, consider
|
|
25
|
+
// polyfill". Wire the pure-JS sha512 from `@noble/hashes` (sibling of the
|
|
26
|
+
// sha256 we already use) into ed25519's sync hash slot once at module load
|
|
27
|
+
// so we can use the sync `getPublicKey` everywhere instead. Same crypto
|
|
28
|
+
// guarantees, zero new deps, no secure-context requirement.
|
|
29
|
+
edHashes.sha512 = sha512;
|
|
30
|
+
const NETWORK_DOMAIN = new TextEncoder().encode('NETWORK');
|
|
31
|
+
const LIBP2P_IDENTITY_DOMAIN = new TextEncoder().encode('LIBP2P_IDENTITY');
|
|
32
|
+
function concatBytes(a, b) {
|
|
33
|
+
const out = new Uint8Array(a.length + b.length);
|
|
34
|
+
out.set(a, 0);
|
|
35
|
+
out.set(b, a.length);
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
function deriveScope(seed, scope) {
|
|
39
|
+
return sha256(concatBytes(seed, scope));
|
|
40
|
+
}
|
|
41
|
+
const ED25519_PUBKEY_BYTES = 32;
|
|
42
|
+
const PROTOBUF_PUBKEY_LEN = 36;
|
|
43
|
+
const IDENTITY_MULTIHASH_CODE = 0x00;
|
|
44
|
+
const PROTOBUF_KEYTYPE_TAG = 0x08;
|
|
45
|
+
const PROTOBUF_KEYTYPE_ED25519 = 0x01;
|
|
46
|
+
const PROTOBUF_DATA_TAG = 0x12;
|
|
47
|
+
export async function deriveLibp2pIdentity(masterSeedHex) {
|
|
48
|
+
const masterSeed = hexToBytes(masterSeedHex);
|
|
49
|
+
if (masterSeed.length !== 32) {
|
|
50
|
+
throw new Error(`master_seed must be 32 bytes, got ${String(masterSeed.length)}`);
|
|
51
|
+
}
|
|
52
|
+
const networkSeed = deriveScope(masterSeed, NETWORK_DOMAIN);
|
|
53
|
+
const libp2pSeed = deriveScope(networkSeed, LIBP2P_IDENTITY_DOMAIN);
|
|
54
|
+
const publicKey = getPublicKey(libp2pSeed);
|
|
55
|
+
if (publicKey.length !== ED25519_PUBKEY_BYTES) {
|
|
56
|
+
throw new Error(`Ed25519 pubkey must be 32 bytes, got ${String(publicKey.length)}`);
|
|
57
|
+
}
|
|
58
|
+
// libp2p PublicKey protobuf:
|
|
59
|
+
// field 1 (KeyType = Ed25519 = 1): tag 0x08, value 0x01
|
|
60
|
+
// field 2 (Data, 32 bytes): tag 0x12, length 0x20, <32 bytes>
|
|
61
|
+
const pubkeyProto = new Uint8Array(PROTOBUF_PUBKEY_LEN);
|
|
62
|
+
pubkeyProto[0] = PROTOBUF_KEYTYPE_TAG;
|
|
63
|
+
pubkeyProto[1] = PROTOBUF_KEYTYPE_ED25519;
|
|
64
|
+
pubkeyProto[2] = PROTOBUF_DATA_TAG;
|
|
65
|
+
pubkeyProto[3] = ED25519_PUBKEY_BYTES;
|
|
66
|
+
pubkeyProto.set(publicKey, 4);
|
|
67
|
+
// Identity multihash (code 0x00) for keys ≤ 42 bytes — libp2p uses this
|
|
68
|
+
// for Ed25519 PeerIds.
|
|
69
|
+
const multihash = new Uint8Array(2 + pubkeyProto.length);
|
|
70
|
+
multihash[0] = IDENTITY_MULTIHASH_CODE;
|
|
71
|
+
multihash[1] = pubkeyProto.length;
|
|
72
|
+
multihash.set(pubkeyProto, 2);
|
|
73
|
+
const peerId = base58.encode(multihash);
|
|
74
|
+
return {
|
|
75
|
+
libp2pSeedHex: bytesToHex(libp2pSeed),
|
|
76
|
+
libp2pPeerId: peerId,
|
|
77
|
+
libp2pPublicKeyProtoHex: bytesToHex(pubkeyProto),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=libp2p-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libp2p-identity.js","sourceRoot":"","sources":["../../../src/lib/crypto/libp2p-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { KeystoreDerivation } from '../keystore.js';
|
|
2
|
+
export interface MnemonicKeys {
|
|
3
|
+
readonly mnemonic: string;
|
|
4
|
+
readonly wif: string;
|
|
5
|
+
readonly btcAddress: string;
|
|
6
|
+
/** 32-byte hex seed for s_b — feed to WASM generate_client_keys_from_seed */
|
|
7
|
+
readonly s_b_seed: string;
|
|
8
|
+
/** 32-byte hex seed for v_b — feed to WASM generate_client_keys_from_seed */
|
|
9
|
+
readonly v_b_seed: string;
|
|
10
|
+
/** 32-byte hex seed for b (secp256k1 Bitcoin key) — feed to WASM */
|
|
11
|
+
readonly b_seed: string;
|
|
12
|
+
readonly derivation: KeystoreDerivation;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generate a fresh 24-word BIP39 mnemonic (256 bits of entropy, sourced from
|
|
16
|
+
* the platform's `crypto.getRandomValues` via @scure/bip39) and derive every
|
|
17
|
+
* downstream swap key.
|
|
18
|
+
*/
|
|
19
|
+
export declare function generateMnemonicKeys(network?: 'mainnet' | 'testnet' | 'regtest'): MnemonicKeys;
|
|
20
|
+
/**
|
|
21
|
+
* Derive all keys from an existing mnemonic.
|
|
22
|
+
* Throws if the mnemonic is invalid.
|
|
23
|
+
*/
|
|
24
|
+
export declare function deriveFromMnemonic(mnemonic: string, network?: 'mainnet' | 'testnet' | 'regtest'): MnemonicKeys;
|
|
25
|
+
export declare class MnemonicError extends Error {
|
|
26
|
+
readonly name = "MnemonicError";
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=mnemonic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/mnemonic.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAczD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GAAG,YAAY,CAGzG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,SAAS,GAAG,SAAS,GAAG,SAAqB,GACrD,YAAY,CAuDd;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,mBAAmB;CACjC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BIP39 mnemonic-based deterministic key derivation for atomic swaps.
|
|
3
|
+
*
|
|
4
|
+
* Derivation scheme (miradex-v0):
|
|
5
|
+
* BIP39 mnemonic (24 words, 256-bit entropy)
|
|
6
|
+
* -> BIP32 seed (64 bytes via PBKDF2)
|
|
7
|
+
* -> BTC key: m/84'/0'/0'/0/0 (BIP84 P2WPKH)
|
|
8
|
+
* -> s_b: HMAC-SHA512(seed, "miradex/s_b/v0") -> first 32 bytes -> reduce mod L
|
|
9
|
+
* -> v_b: HMAC-SHA512(seed, "miradex/v_b/v0") -> first 32 bytes -> reduce mod L
|
|
10
|
+
*
|
|
11
|
+
* The mnemonic is THE master recovery key. From it, the user can reconstruct:
|
|
12
|
+
* - BTC funding wallet (WIF + address)
|
|
13
|
+
* - Swap scalar s_b (for XMR sweep after maker redeems)
|
|
14
|
+
* - View key v_b (for Monero view-only wallet)
|
|
15
|
+
* - DLEQ proof (regenerated via WASM from s_b)
|
|
16
|
+
*/
|
|
17
|
+
import * as bip39 from 'bip39';
|
|
18
|
+
import { BIP32Factory } from 'bip32';
|
|
19
|
+
import * as ecc from 'tiny-secp256k1';
|
|
20
|
+
import { hmac } from '@noble/hashes/hmac.js';
|
|
21
|
+
import { sha512 } from '@noble/hashes/sha2.js';
|
|
22
|
+
import { bytesToHex } from '@noble/hashes/utils.js';
|
|
23
|
+
import * as bitcoin from 'bitcoinjs-lib';
|
|
24
|
+
import { wipe } from './bytes.js';
|
|
25
|
+
const bip32 = BIP32Factory(ecc);
|
|
26
|
+
const DERIVATION_SCHEME = 'miradex-v0';
|
|
27
|
+
const SCALAR_DOMAIN = 'miradex/s_b/v0';
|
|
28
|
+
const VIEW_KEY_DOMAIN = 'miradex/v_b/v0';
|
|
29
|
+
const BTC_KEY_DOMAIN = 'miradex/b/v0';
|
|
30
|
+
function btcDerivationPath(network) {
|
|
31
|
+
return network === 'mainnet' ? "m/84'/0'/0'/0/0" : "m/84'/1'/0'/0/0";
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate a fresh 24-word BIP39 mnemonic (256 bits of entropy, sourced from
|
|
35
|
+
* the platform's `crypto.getRandomValues` via @scure/bip39) and derive every
|
|
36
|
+
* downstream swap key.
|
|
37
|
+
*/
|
|
38
|
+
export function generateMnemonicKeys(network = 'mainnet') {
|
|
39
|
+
const mnemonic = bip39.generateMnemonic(256);
|
|
40
|
+
return deriveFromMnemonic(mnemonic, network);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Derive all keys from an existing mnemonic.
|
|
44
|
+
* Throws if the mnemonic is invalid.
|
|
45
|
+
*/
|
|
46
|
+
export function deriveFromMnemonic(mnemonic, network = 'mainnet') {
|
|
47
|
+
const words = mnemonic.trim().split(/\s+/);
|
|
48
|
+
if (words.length !== 12 && words.length !== 24) {
|
|
49
|
+
throw new MnemonicError(`mnemonic must be 12 or 24 words, got ${String(words.length)}`);
|
|
50
|
+
}
|
|
51
|
+
if (!bip39.validateMnemonic(mnemonic)) {
|
|
52
|
+
throw new MnemonicError('Invalid BIP39 mnemonic');
|
|
53
|
+
}
|
|
54
|
+
const seed = bip39.mnemonicToSeedSync(mnemonic);
|
|
55
|
+
const net = network === 'mainnet' ? bitcoin.networks.bitcoin : (network === 'regtest' ? bitcoin.networks.regtest : bitcoin.networks.testnet);
|
|
56
|
+
const path = btcDerivationPath(network);
|
|
57
|
+
const root = bip32.fromSeed(seed, net);
|
|
58
|
+
const child = root.derivePath(path);
|
|
59
|
+
const wif = child.toWIF();
|
|
60
|
+
const { address } = bitcoin.payments.p2wpkh({
|
|
61
|
+
pubkey: Buffer.from(child.publicKey),
|
|
62
|
+
network: net,
|
|
63
|
+
});
|
|
64
|
+
if (!address) {
|
|
65
|
+
throw new MnemonicError('Failed to derive BTC address from mnemonic');
|
|
66
|
+
}
|
|
67
|
+
const s_b_raw = hmac(sha512, seed, new TextEncoder().encode(SCALAR_DOMAIN));
|
|
68
|
+
const s_b_seed = bytesToHex(s_b_raw.subarray(0, 32));
|
|
69
|
+
const v_b_raw = hmac(sha512, seed, new TextEncoder().encode(VIEW_KEY_DOMAIN));
|
|
70
|
+
const v_b_seed = bytesToHex(v_b_raw.subarray(0, 32));
|
|
71
|
+
const b_raw = hmac(sha512, seed, new TextEncoder().encode(BTC_KEY_DOMAIN));
|
|
72
|
+
const b_seed = bytesToHex(b_raw.subarray(0, 32));
|
|
73
|
+
// AV-G.2: wipe the HMAC scratch and the root seed as soon as every derived
|
|
74
|
+
// hex string is captured. Best-effort; V8 may copy internally.
|
|
75
|
+
wipe(s_b_raw);
|
|
76
|
+
wipe(v_b_raw);
|
|
77
|
+
wipe(b_raw);
|
|
78
|
+
wipe(seed);
|
|
79
|
+
return {
|
|
80
|
+
mnemonic,
|
|
81
|
+
wif,
|
|
82
|
+
btcAddress: address,
|
|
83
|
+
s_b_seed,
|
|
84
|
+
v_b_seed,
|
|
85
|
+
b_seed,
|
|
86
|
+
derivation: {
|
|
87
|
+
scheme: DERIVATION_SCHEME,
|
|
88
|
+
btcPath: path,
|
|
89
|
+
scalarDomain: SCALAR_DOMAIN,
|
|
90
|
+
viewKeyDomain: VIEW_KEY_DOMAIN,
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export class MnemonicError extends Error {
|
|
95
|
+
name = 'MnemonicError';
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=mnemonic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mnemonic.js","sourceRoot":"","sources":["../../../src/lib/crypto/mnemonic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime environment detection for the WASM loader.
|
|
3
|
+
* Result is cached after the first call; call `__resetPlatformCache`
|
|
4
|
+
* from tests to observe a freshly-detected platform.
|
|
5
|
+
*/
|
|
6
|
+
export type Platform = 'node' | 'browser' | 'react-native' | 'electron-renderer' | 'electron-main' | 'worker' | 'unknown';
|
|
7
|
+
export declare function detectPlatform(): Platform;
|
|
8
|
+
/** Test-only; not for production code paths. */
|
|
9
|
+
export declare function __resetPlatformCache(): void;
|
|
10
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/platform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,SAAS,GACT,cAAc,GACd,mBAAmB,GACnB,eAAe,GACf,QAAQ,GACR,SAAS,CAAC;AAId,wBAAgB,cAAc,IAAI,QAAQ,CAIzC;AAwBD,gDAAgD;AAChD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime environment detection for the WASM loader.
|
|
3
|
+
* Result is cached after the first call; call `__resetPlatformCache`
|
|
4
|
+
* from tests to observe a freshly-detected platform.
|
|
5
|
+
*/
|
|
6
|
+
let cached = null;
|
|
7
|
+
export function detectPlatform() {
|
|
8
|
+
if (cached)
|
|
9
|
+
return cached;
|
|
10
|
+
cached = computePlatform();
|
|
11
|
+
return cached;
|
|
12
|
+
}
|
|
13
|
+
function computePlatform() {
|
|
14
|
+
const g = globalThis;
|
|
15
|
+
const navigator = g['navigator'];
|
|
16
|
+
if (navigator?.product === 'ReactNative')
|
|
17
|
+
return 'react-native';
|
|
18
|
+
if (typeof process !== 'undefined') {
|
|
19
|
+
const type = process.type;
|
|
20
|
+
if (type === 'renderer')
|
|
21
|
+
return 'electron-renderer';
|
|
22
|
+
if (type === 'browser')
|
|
23
|
+
return 'electron-main';
|
|
24
|
+
}
|
|
25
|
+
const selfGlobal = g['self'];
|
|
26
|
+
if (selfGlobal && typeof selfGlobal.importScripts === 'function')
|
|
27
|
+
return 'worker';
|
|
28
|
+
if (typeof process !== 'undefined' && process.versions?.node)
|
|
29
|
+
return 'node';
|
|
30
|
+
if (g['window'] !== undefined && g['document'] !== undefined)
|
|
31
|
+
return 'browser';
|
|
32
|
+
return 'unknown';
|
|
33
|
+
}
|
|
34
|
+
/** Test-only; not for production code paths. */
|
|
35
|
+
export function __resetPlatformCache() {
|
|
36
|
+
cached = null;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/lib/crypto/platform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,IAAI,MAAM,GAAoB,IAAI,CAAC;AAEnC,MAAM,UAAU,cAAc;IAC5B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,MAAM,GAAG,eAAe,EAAE,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,CAAC,GAAG,UAAqC,CAAC;IAEhD,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,CAAqC,CAAC;IACrE,IAAI,SAAS,EAAE,OAAO,KAAK,aAAa;QAAE,OAAO,cAAc,CAAC;IAEhE,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,GAAI,OAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,mBAAmB,CAAC;QACpD,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,eAAe,CAAC;IACjD,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAA4C,CAAC;IACxE,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,aAAa,KAAK,UAAU;QAAE,OAAO,QAAQ,CAAC;IAElF,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI;QAAE,OAAO,MAAM,CAAC;IAE5E,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE/E,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,oBAAoB;IAClC,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ed25519 scalar arithmetic for atomic-swap key combination.
|
|
3
|
+
*
|
|
4
|
+
* All Monero scalars are encoded little-endian per the protocol spec; Bitcoin
|
|
5
|
+
* sighash machinery is big-endian. Each function names its endianness.
|
|
6
|
+
*/
|
|
7
|
+
/** Ed25519 scalar-field prime (2^252 + 27742317777372353535851937790883648493). */
|
|
8
|
+
export declare const ED25519_GROUP_ORDER: bigint;
|
|
9
|
+
/**
|
|
10
|
+
* Decode a byte sequence as a little-endian bigint (byte[0] is the
|
|
11
|
+
* least-significant byte). This is the Monero / ed25519 convention.
|
|
12
|
+
*/
|
|
13
|
+
export declare function bytesToBigIntLE(bytes: Uint8Array): bigint;
|
|
14
|
+
/**
|
|
15
|
+
* Decode a byte sequence as a big-endian bigint (byte[0] is the
|
|
16
|
+
* most-significant byte). This is the Bitcoin sighash convention.
|
|
17
|
+
*/
|
|
18
|
+
export declare function bytesToBigIntBE(bytes: Uint8Array): bigint;
|
|
19
|
+
/**
|
|
20
|
+
* Back-compat alias for `bytesToBigIntLE`. Every call site should prefer the
|
|
21
|
+
* endian-suffixed variant so the byte order is visible at the call site.
|
|
22
|
+
*/
|
|
23
|
+
export declare function bytesToBigInt(bytes: Uint8Array): bigint;
|
|
24
|
+
/** Encode a non-negative bigint as a 32-byte little-endian buffer, reduced mod L. */
|
|
25
|
+
export declare function bigIntToBytes(num: bigint): Uint8Array;
|
|
26
|
+
/** Decode a hex-encoded little-endian scalar and reduce it mod L. */
|
|
27
|
+
export declare function hexToScalarLE(hex: string): bigint;
|
|
28
|
+
/** Sum two 32-byte little-endian scalars mod L, returning a 32-byte LE buffer. */
|
|
29
|
+
export declare function addScalars(a: Uint8Array, b: Uint8Array): Uint8Array;
|
|
30
|
+
/** Back-compat hex/byte helpers used by older call sites. */
|
|
31
|
+
export declare function bytesToHex(bytes: Uint8Array): string;
|
|
32
|
+
export declare function hexToBytes(hex: string): Uint8Array;
|
|
33
|
+
//# sourceMappingURL=scalars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalars.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/scalars.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mFAAmF;AACnF,eAAO,MAAM,mBAAmB,QACkC,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQzD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMzD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAQrD;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAEnE;AAeD,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAElD"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ed25519 scalar arithmetic for atomic-swap key combination.
|
|
3
|
+
*
|
|
4
|
+
* All Monero scalars are encoded little-endian per the protocol spec; Bitcoin
|
|
5
|
+
* sighash machinery is big-endian. Each function names its endianness.
|
|
6
|
+
*/
|
|
7
|
+
/** Ed25519 scalar-field prime (2^252 + 27742317777372353535851937790883648493). */
|
|
8
|
+
export const ED25519_GROUP_ORDER = 2n ** 252n + 27742317777372353535851937790883648493n;
|
|
9
|
+
/**
|
|
10
|
+
* Decode a byte sequence as a little-endian bigint (byte[0] is the
|
|
11
|
+
* least-significant byte). This is the Monero / ed25519 convention.
|
|
12
|
+
*/
|
|
13
|
+
export function bytesToBigIntLE(bytes) {
|
|
14
|
+
let result = 0n;
|
|
15
|
+
for (let i = bytes.length - 1; i >= 0; i--) {
|
|
16
|
+
const b = bytes[i];
|
|
17
|
+
if (b === undefined)
|
|
18
|
+
continue;
|
|
19
|
+
result = (result << 8n) | BigInt(b);
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Decode a byte sequence as a big-endian bigint (byte[0] is the
|
|
25
|
+
* most-significant byte). This is the Bitcoin sighash convention.
|
|
26
|
+
*/
|
|
27
|
+
export function bytesToBigIntBE(bytes) {
|
|
28
|
+
let result = 0n;
|
|
29
|
+
for (const b of bytes) {
|
|
30
|
+
result = (result << 8n) | BigInt(b);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Back-compat alias for `bytesToBigIntLE`. Every call site should prefer the
|
|
36
|
+
* endian-suffixed variant so the byte order is visible at the call site.
|
|
37
|
+
*/
|
|
38
|
+
export function bytesToBigInt(bytes) {
|
|
39
|
+
return bytesToBigIntLE(bytes);
|
|
40
|
+
}
|
|
41
|
+
/** Encode a non-negative bigint as a 32-byte little-endian buffer, reduced mod L. */
|
|
42
|
+
export function bigIntToBytes(num) {
|
|
43
|
+
const bytes = new Uint8Array(32);
|
|
44
|
+
let n = ((num % ED25519_GROUP_ORDER) + ED25519_GROUP_ORDER) % ED25519_GROUP_ORDER;
|
|
45
|
+
for (let i = 0; i < 32; i++) {
|
|
46
|
+
bytes[i] = Number(n & 0xffn);
|
|
47
|
+
n >>= 8n;
|
|
48
|
+
}
|
|
49
|
+
return bytes;
|
|
50
|
+
}
|
|
51
|
+
/** Decode a hex-encoded little-endian scalar and reduce it mod L. */
|
|
52
|
+
export function hexToScalarLE(hex) {
|
|
53
|
+
const bytes = hexToBytesLocal(hex);
|
|
54
|
+
const raw = bytesToBigIntLE(bytes);
|
|
55
|
+
return ((raw % ED25519_GROUP_ORDER) + ED25519_GROUP_ORDER) % ED25519_GROUP_ORDER;
|
|
56
|
+
}
|
|
57
|
+
/** Sum two 32-byte little-endian scalars mod L, returning a 32-byte LE buffer. */
|
|
58
|
+
export function addScalars(a, b) {
|
|
59
|
+
return bigIntToBytes((bytesToBigIntLE(a) + bytesToBigIntLE(b)) % ED25519_GROUP_ORDER);
|
|
60
|
+
}
|
|
61
|
+
function hexToBytesLocal(hex) {
|
|
62
|
+
if (hex.length % 2 !== 0) {
|
|
63
|
+
throw new Error('hexToScalarLE: odd-length hex');
|
|
64
|
+
}
|
|
65
|
+
const out = new Uint8Array(hex.length / 2);
|
|
66
|
+
for (let i = 0; i < out.length; i++) {
|
|
67
|
+
const byte = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
68
|
+
if (Number.isNaN(byte))
|
|
69
|
+
throw new Error('hexToScalarLE: invalid hex');
|
|
70
|
+
out[i] = byte;
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
/** Back-compat hex/byte helpers used by older call sites. */
|
|
75
|
+
export function bytesToHex(bytes) {
|
|
76
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
|
|
77
|
+
}
|
|
78
|
+
export function hexToBytes(hex) {
|
|
79
|
+
return hexToBytesLocal(hex);
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=scalars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalars.js","sourceRoot":"","sources":["../../../src/lib/crypto/scalars.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shape of the compiled miradex-rust module after `init()` runs.
|
|
3
|
+
* Mirrors #[wasm_bindgen] exports in ../../../miradex-rust/src/lib.rs.
|
|
4
|
+
*/
|
|
5
|
+
export interface WasmModule {
|
|
6
|
+
readonly generate_client_keys: () => string;
|
|
7
|
+
readonly generate_client_keys_from_seed: (s_b_hex: string, v_b_hex: string, b_hex: string) => string;
|
|
8
|
+
readonly verify_dleq_proof: (s_bitcoin_hex: string, s_monero_hex: string, proof_hex: string) => boolean;
|
|
9
|
+
readonly sign_digest: (b_hex: string, digest_hex: string) => string;
|
|
10
|
+
readonly encsign_digest: (b_hex: string, encryption_key_hex: string, digest_hex: string) => string;
|
|
11
|
+
readonly decrypt_signature: (scalar_hex: string, encsig_hex: string) => string;
|
|
12
|
+
readonly verify_encsig: (verification_key_hex: string, encryption_key_hex: string, digest_hex: string, encsig_hex: string) => boolean;
|
|
13
|
+
readonly recover_adaptor_scalar: (sig_hex: string, encsig_hex: string, encryption_key_hex: string) => string;
|
|
14
|
+
readonly derive_key_images: (outputs_json: string, view_key_hex: string, spend_key_hex: string) => string;
|
|
15
|
+
readonly select_decoys: (real_output_index: bigint, cumulative_distribution_json: string, ring_size: number) => string;
|
|
16
|
+
readonly sign_sweep_tx: (construction_data_json: string, spend_key_hex: string, view_key_hex: string) => string;
|
|
17
|
+
readonly compute_commitment_mask: (view_key_hex: string, tx_public_key_hex: string, output_index: bigint) => string;
|
|
18
|
+
readonly verify_commitment: (view_key_hex: string, tx_public_key_hex: string, output_index: bigint, amount: bigint, on_chain_commitment_hex: string) => boolean;
|
|
19
|
+
readonly decrypt_amount: (view_key_hex: string, tx_public_key_hex: string, output_index: bigint, encrypted_amount_hex: string) => bigint;
|
|
20
|
+
readonly secp256k1_scalar_to_ed25519: (secp_scalar_hex: string) => string;
|
|
21
|
+
readonly ed25519_scalar_add: (scalar_a_hex: string, scalar_b_hex: string) => string;
|
|
22
|
+
readonly version: () => string;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,UAAU;IAEzB,QAAQ,CAAC,oBAAoB,EAAE,MAAM,MAAM,CAAC;IAC5C,QAAQ,CAAC,8BAA8B,EAAE,CACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,KACV,MAAM,CAAC;IACZ,QAAQ,CAAC,iBAAiB,EAAE,CAC1B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;IAGb,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IACpE,QAAQ,CAAC,cAAc,EAAE,CACvB,KAAK,EAAE,MAAM,EACb,kBAAkB,EAAE,MAAM,EAC1B,UAAU,EAAE,MAAM,KACf,MAAM,CAAC;IACZ,QAAQ,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/E,QAAQ,CAAC,aAAa,EAAE,CACtB,oBAAoB,EAAE,MAAM,EAC5B,kBAAkB,EAAE,MAAM,EAC1B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC;IACb,QAAQ,CAAC,sBAAsB,EAAE,CAC/B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,KACvB,MAAM,CAAC;IAGZ,QAAQ,CAAC,iBAAiB,EAAE,CAC1B,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,KAClB,MAAM,CAAC;IACZ,QAAQ,CAAC,aAAa,EAAE,CACtB,iBAAiB,EAAE,MAAM,EACzB,4BAA4B,EAAE,MAAM,EACpC,SAAS,EAAE,MAAM,KACd,MAAM,CAAC;IACZ,QAAQ,CAAC,aAAa,EAAE,CACtB,sBAAsB,EAAE,MAAM,EAC9B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,KACjB,MAAM,CAAC;IACZ,QAAQ,CAAC,uBAAuB,EAAE,CAChC,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM,KACjB,MAAM,CAAC;IACZ,QAAQ,CAAC,iBAAiB,EAAE,CAC1B,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,uBAAuB,EAAE,MAAM,KAC5B,OAAO,CAAC;IACb,QAAQ,CAAC,cAAc,EAAE,CACvB,YAAY,EAAE,MAAM,EACpB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM,EACpB,oBAAoB,EAAE,MAAM,KACzB,MAAM,CAAC;IAGZ,QAAQ,CAAC,2BAA2B,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1E,QAAQ,CAAC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAGpF,QAAQ,CAAC,OAAO,EAAE,MAAM,MAAM,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/crypto/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified WASM loader + synchronous crypto wrappers.
|
|
3
|
+
*
|
|
4
|
+
* Callers invoke `await ensureWasm()` once (typically at the entry of an
|
|
5
|
+
* atomic-swap flow) and then call the synchronous wrappers afterwards.
|
|
6
|
+
* Thorchain, Chainflip, and NEAR-Intents verification paths never call this
|
|
7
|
+
* file, so the WASM binary is never loaded when those providers are used.
|
|
8
|
+
*/
|
|
9
|
+
import type { WasmModule } from './types.js';
|
|
10
|
+
import type { ClientKeys } from '../../types/index.js';
|
|
11
|
+
export interface EnsureWasmOptions {
|
|
12
|
+
/**
|
|
13
|
+
* When true, hash the loaded bytes and compare to SWAP_WASM_SHA256.
|
|
14
|
+
* When undefined, falls back to process.env.MIRADEX_VERIFY_WASM === '1'.
|
|
15
|
+
* Default: unverified (matches today's keygen-wasm behaviour).
|
|
16
|
+
*/
|
|
17
|
+
readonly verifyIntegrity?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Custom byte reader — used when the default platform reader cannot locate
|
|
20
|
+
* the binary (e.g., browser with a non-default asset path).
|
|
21
|
+
* Ignored if `overrideBytes` is provided.
|
|
22
|
+
*/
|
|
23
|
+
readonly loadBytes?: () => Promise<Uint8Array>;
|
|
24
|
+
/**
|
|
25
|
+
* Pre-loaded bytes. Required on React Native. When provided, no byte
|
|
26
|
+
* reader runs; integrity still runs if `verifyIntegrity` is true.
|
|
27
|
+
*/
|
|
28
|
+
readonly overrideBytes?: Uint8Array;
|
|
29
|
+
}
|
|
30
|
+
export declare function ensureWasm(options?: EnsureWasmOptions): Promise<void>;
|
|
31
|
+
export declare function isKeygenAvailable(): boolean;
|
|
32
|
+
export declare function initKeygen(mod: WasmModule): void;
|
|
33
|
+
export declare function generateClientKeys(): ClientKeys;
|
|
34
|
+
export declare function generateClientKeysFromSeed(sBHex: string, vBHex: string, bHex: string): ClientKeys;
|
|
35
|
+
export declare function verifyDleqProof(sBitcoinHex: string, sMoneroHex: string, proofHex: string): boolean;
|
|
36
|
+
export declare function signDigest(bHex: string, digestHex: string): string;
|
|
37
|
+
export declare function encsignDigest(bHex: string, encryptionKeyHex: string, digestHex: string): string;
|
|
38
|
+
export declare function decryptSignature(scalarHex: string, encsigHex: string): string;
|
|
39
|
+
export declare function verifyEncsig(verificationKeyHex: string, encryptionKeyHex: string, digestHex: string, encsigHex: string): boolean;
|
|
40
|
+
export declare function recoverAdaptorScalar(sigHex: string, encsigHex: string, encryptionKeyHex: string): string;
|
|
41
|
+
export declare function deriveKeyImages(outputsJson: string, viewKeyHex: string, spendKeyHex: string): string;
|
|
42
|
+
export declare function selectDecoys(realOutputIndex: number, distributionJson: string, ringSize: number): string;
|
|
43
|
+
export declare function signSweepTx(constructionDataJson: string, spendKeyHex: string, viewKeyHex: string): string;
|
|
44
|
+
export declare function computeCommitmentMask(viewKeyHex: string, txPublicKeyHex: string, outputIndex: number): string;
|
|
45
|
+
export declare function verifyCommitment(viewKeyHex: string, txPublicKeyHex: string, outputIndex: number, amount: bigint, onChainCommitmentHex: string): boolean;
|
|
46
|
+
export declare function decryptAmount(viewKeyHex: string, txPublicKeyHex: string, outputIndex: number, encryptedAmountHex: string): bigint;
|
|
47
|
+
export declare function secp256k1ScalarToEd25519(secpScalarHex: string): string;
|
|
48
|
+
export declare function ed25519ScalarAdd(scalarAHex: string, scalarBHex: string): string;
|
|
49
|
+
/** Test-only: reset the cache so successive tests can re-init the module. */
|
|
50
|
+
export declare function __resetWasmCache(): void;
|
|
51
|
+
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/wasm.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAKvD,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;CACrC;AAED,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC3E;AAyFD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAEhD;AAyBD,wBAAgB,kBAAkB,IAAI,UAAU,CAE/C;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,UAAU,CAEZ;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAET;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAElE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,YAAY,CAC1B,kBAAkB,EAAE,MAAM,EAC1B,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAET;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAER;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAED,wBAAgB,YAAY,CAC1B,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER;AAED,wBAAgB,WAAW,CACzB,oBAAoB,EAAE,MAAM,EAC5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,MAAM,GAC3B,OAAO,CAQT;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,GACzB,MAAM,CAOR;AAED,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
|