@miradexio/client 0.1.1 → 0.1.3
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/README.md +57 -292
- package/dist/address/base58.d.ts.map +1 -1
- package/dist/address/base58.js +1 -2
- package/dist/address/base58.js.map +1 -1
- package/dist/address/bech32.d.ts +0 -8
- package/dist/address/bech32.d.ts.map +1 -1
- package/dist/address/bech32.js +3 -9
- package/dist/address/bech32.js.map +1 -1
- package/dist/address/evm.d.ts.map +1 -1
- package/dist/address/evm.js +1 -2
- package/dist/address/evm.js.map +1 -1
- package/dist/address/index.d.ts +0 -6
- package/dist/address/index.d.ts.map +1 -1
- package/dist/address/index.js +6 -9
- package/dist/address/index.js.map +1 -1
- package/dist/address/monero.d.ts +0 -10
- package/dist/address/monero.d.ts.map +1 -1
- package/dist/address/monero.js +4 -10
- package/dist/address/monero.js.map +1 -1
- package/dist/address/polkadot.d.ts +0 -5
- package/dist/address/polkadot.d.ts.map +1 -1
- package/dist/address/polkadot.js +2 -6
- package/dist/address/polkadot.js.map +1 -1
- package/dist/address/ton.d.ts +0 -6
- package/dist/address/ton.d.ts.map +1 -1
- package/dist/address/ton.js +3 -8
- package/dist/address/ton.js.map +1 -1
- package/dist/api/index.d.ts +0 -19
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +18 -37
- package/dist/api/index.js.map +1 -1
- package/dist/atomic-swap/drive.d.ts +0 -13
- package/dist/atomic-swap/drive.d.ts.map +1 -1
- package/dist/atomic-swap/drive.js +72 -114
- package/dist/atomic-swap/drive.js.map +1 -1
- package/dist/atomic-swap/extract.d.ts +0 -23
- package/dist/atomic-swap/extract.d.ts.map +1 -1
- package/dist/atomic-swap/extract.js +6 -16
- package/dist/atomic-swap/extract.js.map +1 -1
- package/dist/atomic-swap/index.d.ts +0 -7
- package/dist/atomic-swap/index.d.ts.map +1 -1
- package/dist/atomic-swap/index.js +1 -7
- package/dist/atomic-swap/index.js.map +1 -1
- package/dist/atomic-swap/monero-sweep/errors.d.ts.map +1 -1
- package/dist/atomic-swap/monero-sweep/errors.js +5 -20
- package/dist/atomic-swap/monero-sweep/errors.js.map +1 -1
- package/dist/atomic-swap/monero-sweep/index.d.ts +1 -13
- package/dist/atomic-swap/monero-sweep/index.d.ts.map +1 -1
- package/dist/atomic-swap/monero-sweep/index.js +36 -65
- package/dist/atomic-swap/monero-sweep/index.js.map +1 -1
- package/dist/atomic-swap/monero-sweep/ring-select.d.ts +0 -4
- package/dist/atomic-swap/monero-sweep/ring-select.d.ts.map +1 -1
- package/dist/atomic-swap/monero-sweep/ring-select.js +9 -21
- package/dist/atomic-swap/monero-sweep/ring-select.js.map +1 -1
- package/dist/atomic-swap/presign.d.ts +0 -63
- package/dist/atomic-swap/presign.d.ts.map +1 -1
- package/dist/atomic-swap/presign.js +30 -90
- package/dist/atomic-swap/presign.js.map +1 -1
- package/dist/atomic-swap/refund.d.ts +0 -18
- package/dist/atomic-swap/refund.d.ts.map +1 -1
- package/dist/atomic-swap/refund.js +16 -32
- package/dist/atomic-swap/refund.js.map +1 -1
- package/dist/atomic-swap/run.d.ts +0 -17
- package/dist/atomic-swap/run.d.ts.map +1 -1
- package/dist/atomic-swap/run.js +11 -25
- package/dist/atomic-swap/run.js.map +1 -1
- package/dist/atomic-swap/snapshot.d.ts +0 -30
- package/dist/atomic-swap/snapshot.d.ts.map +1 -1
- package/dist/atomic-swap/snapshot.js +8 -23
- package/dist/atomic-swap/snapshot.js.map +1 -1
- package/dist/atomic-swap/submit-encsig.d.ts +0 -7
- package/dist/atomic-swap/submit-encsig.d.ts.map +1 -1
- package/dist/atomic-swap/submit-encsig.js +8 -15
- package/dist/atomic-swap/submit-encsig.js.map +1 -1
- package/dist/atomic-swap/types.d.ts +2 -55
- package/dist/atomic-swap/types.d.ts.map +1 -1
- package/dist/atomic-swap/types.js +2 -3
- package/dist/atomic-swap/types.js.map +1 -1
- package/dist/blockchain/quorum-provider.d.ts +0 -15
- package/dist/blockchain/quorum-provider.d.ts.map +1 -1
- package/dist/blockchain/quorum-provider.js +7 -9
- package/dist/blockchain/quorum-provider.js.map +1 -1
- package/dist/cooperative-redeem.d.ts +5 -14
- package/dist/cooperative-redeem.d.ts.map +1 -1
- package/dist/cooperative-redeem.js +3 -20
- package/dist/cooperative-redeem.js.map +1 -1
- package/dist/engine/blockchain-querier.d.ts +0 -22
- package/dist/engine/blockchain-querier.d.ts.map +1 -1
- package/dist/engine/engine-state.d.ts +0 -8
- package/dist/engine/engine-state.d.ts.map +1 -1
- package/dist/engine/engine-state.js.map +1 -1
- package/dist/engine/flow-context.d.ts +0 -20
- package/dist/engine/flow-context.d.ts.map +1 -1
- package/dist/engine/flow-context.js +17 -41
- package/dist/engine/flow-context.js.map +1 -1
- package/dist/engine/flows/atomic-flow-state.d.ts +8 -1
- package/dist/engine/flows/atomic-flow-state.d.ts.map +1 -1
- package/dist/engine/flows/atomic-flow.d.ts +1 -28
- package/dist/engine/flows/atomic-flow.d.ts.map +1 -1
- package/dist/engine/flows/atomic-flow.js +98 -128
- package/dist/engine/flows/atomic-flow.js.map +1 -1
- package/dist/engine/flows/error-routing.d.ts +11 -0
- package/dist/engine/flows/error-routing.d.ts.map +1 -0
- package/dist/engine/flows/error-routing.js +17 -0
- package/dist/engine/flows/error-routing.js.map +1 -0
- package/dist/engine/flows/swap-flow.d.ts +0 -19
- package/dist/engine/flows/swap-flow.d.ts.map +1 -1
- package/dist/engine/flows/swap-flow.js +41 -83
- package/dist/engine/flows/swap-flow.js.map +1 -1
- package/dist/engine/miradex-engine.d.ts +1 -62
- package/dist/engine/miradex-engine.d.ts.map +1 -1
- package/dist/engine/miradex-engine.js +18 -50
- package/dist/engine/miradex-engine.js.map +1 -1
- package/dist/engine/pipeline.d.ts +0 -11
- package/dist/engine/pipeline.d.ts.map +1 -1
- package/dist/engine/pipeline.js +11 -21
- package/dist/engine/pipeline.js.map +1 -1
- package/dist/engine/platform.d.ts +0 -160
- package/dist/engine/platform.d.ts.map +1 -1
- package/dist/engine/platform.js +2 -0
- package/dist/engine/platform.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -11
- package/dist/index.js.map +1 -1
- package/dist/interfaces/blockchain.d.ts +1 -13
- package/dist/interfaces/blockchain.d.ts.map +1 -1
- package/dist/interfaces/blockchain.js +1 -0
- package/dist/interfaces/blockchain.js.map +1 -1
- package/dist/interfaces/logger.d.ts +0 -6
- package/dist/interfaces/logger.d.ts.map +1 -1
- package/dist/interfaces/logger.js.map +1 -1
- package/dist/lib/bitcoin/deposit-watcher.d.ts +0 -23
- package/dist/lib/bitcoin/deposit-watcher.d.ts.map +1 -1
- package/dist/lib/bitcoin/deposit-watcher.js +7 -31
- package/dist/lib/bitcoin/deposit-watcher.js.map +1 -1
- package/dist/lib/bitcoin/script-hash.d.ts.map +1 -1
- package/dist/lib/bitcoin/script-hash.js +2 -6
- package/dist/lib/bitcoin/script-hash.js.map +1 -1
- package/dist/lib/bitcoin/sweep.d.ts +0 -30
- package/dist/lib/bitcoin/sweep.d.ts.map +1 -1
- package/dist/lib/bitcoin/sweep.js +11 -40
- package/dist/lib/bitcoin/sweep.js.map +1 -1
- package/dist/lib/bitcoin/tx-verify.d.ts +0 -28
- package/dist/lib/bitcoin/tx-verify.d.ts.map +1 -1
- package/dist/lib/bitcoin/tx-verify.js +20 -61
- package/dist/lib/bitcoin/tx-verify.js.map +1 -1
- package/dist/lib/bitcoin/wallet.d.ts +0 -38
- package/dist/lib/bitcoin/wallet.d.ts.map +1 -1
- package/dist/lib/bitcoin/wallet.js +13 -38
- package/dist/lib/bitcoin/wallet.js.map +1 -1
- package/dist/lib/crypto/bytes.d.ts +0 -14
- package/dist/lib/crypto/bytes.d.ts.map +1 -1
- package/dist/lib/crypto/bytes.js +5 -14
- package/dist/lib/crypto/bytes.js.map +1 -1
- package/dist/lib/crypto/errors.d.ts +0 -5
- package/dist/lib/crypto/errors.d.ts.map +1 -1
- package/dist/lib/crypto/errors.js +2 -5
- package/dist/lib/crypto/errors.js.map +1 -1
- package/dist/lib/crypto/libp2p-identity.d.ts +0 -15
- package/dist/lib/crypto/libp2p-identity.d.ts.map +1 -1
- package/dist/lib/crypto/libp2p-identity.js +16 -28
- package/dist/lib/crypto/libp2p-identity.js.map +1 -1
- package/dist/lib/crypto/mnemonic.d.ts +0 -9
- package/dist/lib/crypto/mnemonic.d.ts.map +1 -1
- package/dist/lib/crypto/mnemonic.js +11 -27
- package/dist/lib/crypto/mnemonic.js.map +1 -1
- package/dist/lib/crypto/platform.d.ts +0 -6
- package/dist/lib/crypto/platform.d.ts.map +1 -1
- package/dist/lib/crypto/platform.js +2 -6
- package/dist/lib/crypto/platform.js.map +1 -1
- package/dist/lib/crypto/scalars.d.ts +0 -23
- package/dist/lib/crypto/scalars.d.ts.map +1 -1
- package/dist/lib/crypto/scalars.js +10 -23
- package/dist/lib/crypto/scalars.js.map +1 -1
- package/dist/lib/crypto/types.d.ts +0 -4
- package/dist/lib/crypto/types.d.ts.map +1 -1
- package/dist/lib/crypto/wasm.d.ts +0 -23
- package/dist/lib/crypto/wasm.d.ts.map +1 -1
- package/dist/lib/crypto/wasm.js +9 -16
- package/dist/lib/crypto/wasm.js.map +1 -1
- package/dist/lib/default-config.d.ts +1 -59
- package/dist/lib/default-config.d.ts.map +1 -1
- package/dist/lib/default-config.js +22 -61
- package/dist/lib/default-config.js.map +1 -1
- package/dist/lib/errors.d.ts +0 -54
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +12 -35
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/keystore.d.ts +0 -24
- package/dist/lib/keystore.d.ts.map +1 -1
- package/dist/lib/keystore.js +3 -10
- package/dist/lib/keystore.js.map +1 -1
- package/dist/lib/monero/output-scanner.d.ts +0 -18
- package/dist/lib/monero/output-scanner.d.ts.map +1 -1
- package/dist/lib/monero/output-scanner.js +17 -40
- package/dist/lib/monero/output-scanner.js.map +1 -1
- package/dist/lib/monero/rpc.d.ts +0 -64
- package/dist/lib/monero/rpc.d.ts.map +1 -1
- package/dist/lib/monero/rpc.js +17 -59
- package/dist/lib/monero/rpc.js.map +1 -1
- package/dist/lib/monero/verify-lock.d.ts +0 -12
- package/dist/lib/monero/verify-lock.d.ts.map +1 -1
- package/dist/lib/monero/verify-lock.js +9 -24
- package/dist/lib/monero/verify-lock.js.map +1 -1
- package/dist/lib/monero/verify-sweep.d.ts +0 -20
- package/dist/lib/monero/verify-sweep.d.ts.map +1 -1
- package/dist/lib/monero/verify-sweep.js +7 -25
- package/dist/lib/monero/verify-sweep.js.map +1 -1
- package/dist/lib/pow-solver.d.ts.map +1 -1
- package/dist/lib/pow-solver.js +3 -8
- package/dist/lib/pow-solver.js.map +1 -1
- package/dist/lib/retry.d.ts +7 -64
- package/dist/lib/retry.d.ts.map +1 -1
- package/dist/lib/retry.js +13 -13
- package/dist/lib/retry.js.map +1 -1
- package/dist/portable.d.ts.map +1 -1
- package/dist/portable.js +3 -4
- package/dist/portable.js.map +1 -1
- package/dist/quote-binding.d.ts +0 -13
- package/dist/quote-binding.d.ts.map +1 -1
- package/dist/quote-binding.js +3 -18
- package/dist/quote-binding.js.map +1 -1
- package/dist/swap-executor.d.ts +1 -5
- package/dist/swap-executor.d.ts.map +1 -1
- package/dist/swap-executor.js +1 -1
- package/dist/swap-executor.js.map +1 -1
- package/dist/types/api.d.ts +0 -6
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js +6 -9
- package/dist/types/api.js.map +1 -1
- package/dist/types/errors.d.ts +0 -7
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/errors.js +2 -7
- package/dist/types/errors.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/keys.d.ts +0 -15
- package/dist/types/keys.d.ts.map +1 -1
- package/dist/types/protocol.d.ts +0 -51
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +3 -8
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/status.d.ts +2 -0
- package/dist/types/status.d.ts.map +1 -1
- package/dist/types/status.js +17 -14
- package/dist/types/status.js.map +1 -1
- package/dist/types/verification.d.ts +0 -10
- package/dist/types/verification.d.ts.map +1 -1
- package/dist/types/verification.js +7 -15
- package/dist/types/verification.js.map +1 -1
- package/dist/verification/chainflip-networks.d.ts +2 -35
- package/dist/verification/chainflip-networks.d.ts.map +1 -1
- package/dist/verification/chainflip-networks.js +12 -4
- package/dist/verification/chainflip-networks.js.map +1 -1
- package/dist/verification/chainflip.d.ts +0 -40
- package/dist/verification/chainflip.d.ts.map +1 -1
- package/dist/verification/chainflip.js +49 -129
- package/dist/verification/chainflip.js.map +1 -1
- package/dist/verification/constants.d.ts +0 -40
- package/dist/verification/constants.d.ts.map +1 -1
- package/dist/verification/constants.js +14 -40
- package/dist/verification/constants.js.map +1 -1
- package/dist/verification/index.d.ts +0 -26
- package/dist/verification/index.d.ts.map +1 -1
- package/dist/verification/index.js +8 -12
- package/dist/verification/index.js.map +1 -1
- package/dist/verification/memo.d.ts +0 -15
- package/dist/verification/memo.d.ts.map +1 -1
- package/dist/verification/memo.js +9 -27
- package/dist/verification/memo.js.map +1 -1
- package/dist/verification/near-intents.d.ts +0 -63
- package/dist/verification/near-intents.d.ts.map +1 -1
- package/dist/verification/near-intents.js +25 -67
- package/dist/verification/near-intents.js.map +1 -1
- package/dist/verification/rate-oracle.d.ts +0 -22
- package/dist/verification/rate-oracle.d.ts.map +1 -1
- package/dist/verification/rate-oracle.js +6 -11
- package/dist/verification/rate-oracle.js.map +1 -1
- package/dist/verification/thorchain-networks.d.ts +0 -27
- package/dist/verification/thorchain-networks.d.ts.map +1 -1
- package/dist/verification/thorchain-networks.js +13 -15
- package/dist/verification/thorchain-networks.js.map +1 -1
- package/dist/verification/thorchain.d.ts +0 -30
- package/dist/verification/thorchain.d.ts.map +1 -1
- package/dist/verification/thorchain.js +24 -47
- package/dist/verification/thorchain.js.map +1 -1
- package/dist/wasm-pins.d.ts +3 -3
- package/dist/wasm-pins.js +1 -1
- package/dist/wire/near-intents.zod.d.ts +0 -27
- package/dist/wire/near-intents.zod.d.ts.map +1 -1
- package/dist/wire/near-intents.zod.js +15 -23
- package/dist/wire/near-intents.zod.js.map +1 -1
- package/dist/wire/server/action.zod.d.ts +0 -10
- package/dist/wire/server/action.zod.d.ts.map +1 -1
- package/dist/wire/server/action.zod.js +8 -14
- package/dist/wire/server/action.zod.js.map +1 -1
- package/dist/wire/server/common.zod.d.ts +0 -13
- package/dist/wire/server/common.zod.d.ts.map +1 -1
- package/dist/wire/server/common.zod.js +6 -14
- package/dist/wire/server/common.zod.js.map +1 -1
- package/dist/wire/server/quotes.zod.d.ts +35 -20
- package/dist/wire/server/quotes.zod.d.ts.map +1 -1
- package/dist/wire/server/quotes.zod.js +1 -0
- package/dist/wire/server/quotes.zod.js.map +1 -1
- package/dist/wire/server/swap.zod.d.ts +0 -42
- package/dist/wire/server/swap.zod.d.ts.map +1 -1
- package/dist/wire/server/swap.zod.js +12 -26
- package/dist/wire/server/swap.zod.js.map +1 -1
- package/dist/wire/thorchain.zod.d.ts +0 -8
- package/dist/wire/thorchain.zod.d.ts.map +1 -1
- package/dist/wire/thorchain.zod.js +3 -8
- package/dist/wire/thorchain.zod.js.map +1 -1
- package/package.json +4 -4
- package/wasm/miradex-rust/README.md +3 -4
- package/wasm/miradex-rust/miradex_rust.d.ts +4 -6
- package/wasm/miradex-rust/miradex_rust.js +4 -6
- package/wasm/miradex-rust/miradex_rust_bg.wasm +0 -0
package/README.md
CHANGED
|
@@ -1,72 +1,25 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @miradexio/client
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
and
|
|
8
|
-
the
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
## Providers
|
|
12
|
-
|
|
13
|
-
| Provider | Pairs | Settlement model |
|
|
14
|
-
| --- | --- | --- |
|
|
15
|
-
| `atomicswap` | BTC ↔ XMR | Cryptographic atomic swap (HTLC + adaptor signatures) |
|
|
16
|
-
| `thorchain` | 13 native gas assets (BTC, ETH, BSC, AVAX, …) | THORChain TSS-managed vaults |
|
|
17
|
-
| `chainflip` | BTC, ETH, ARB, DOT, SOL — multiple assets | Chainflip state-chain deposit channels |
|
|
18
|
-
| `near_intents` | 16 chains | Solver-pulled intent settlement (Defuse 1Click) |
|
|
19
|
-
|
|
20
|
-
`atomicswap` is the only provider that is non-custodial in the strict
|
|
21
|
-
cryptographic sense — funds are never under any third-party control
|
|
22
|
-
at any step. The other three move funds through validator-managed
|
|
23
|
-
vaults or solver escrows; the SDK still verifies every state claim
|
|
24
|
-
against the upstream's own infrastructure, but the atomic-swap
|
|
25
|
-
protocol's trust model is qualitatively different and is documented
|
|
26
|
-
separately in
|
|
27
|
-
[`ATOMIC-SWAP-PAPER.md`](./ATOMIC-SWAP-PAPER.md).
|
|
28
|
-
Per-provider trust analysis is in [`PROTOCOLS.md`](./PROTOCOLS.md).
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## Table of contents
|
|
33
|
-
|
|
34
|
-
- [@miradex/client](#miradexclient)
|
|
35
|
-
- [Providers](#providers)
|
|
36
|
-
- [Table of contents](#table-of-contents)
|
|
37
|
-
- [Quick start](#quick-start)
|
|
38
|
-
- [Providers](#providers-1)
|
|
39
|
-
- [`atomicswap`](#atomicswap)
|
|
40
|
-
- [`thorchain`](#thorchain)
|
|
41
|
-
- [`chainflip`](#chainflip)
|
|
42
|
-
- [`near_intents`](#near_intents)
|
|
43
|
-
- [The SDK surface](#the-sdk-surface)
|
|
44
|
-
- [Sub-path exports](#sub-path-exports)
|
|
45
|
-
- [`PlatformAdapter`](#platformadapter)
|
|
46
|
-
- [Direct entry points](#direct-entry-points)
|
|
47
|
-
- [Events](#events)
|
|
48
|
-
- [Security model](#security-model)
|
|
49
|
-
- [Configuration](#configuration)
|
|
50
|
-
- [`EngineConfig`](#engineconfig)
|
|
51
|
-
- [Errors](#errors)
|
|
52
|
-
- [Build](#build)
|
|
53
|
-
- [Building from source](#building-from-source)
|
|
54
|
-
- [License](#license)
|
|
55
|
-
|
|
56
|
-
---
|
|
3
|
+
TypeScript SDK for cross-chain swaps. Runs in-process in the
|
|
4
|
+
browser or in Node, holding keys and signing locally. The server
|
|
5
|
+
is untrusted: every state claim is verified on-chain. For BTC↔XMR
|
|
6
|
+
the SDK runs the full atomic-swap drive loop itself; for THORChain,
|
|
7
|
+
Chainflip, and NEAR Intents it verifies the deposit binding against
|
|
8
|
+
the upstream's own infrastructure (THORNode/Midgard, Chainflip
|
|
9
|
+
broker, 1Click).
|
|
57
10
|
|
|
58
11
|
## Quick start
|
|
59
12
|
|
|
60
13
|
```bash
|
|
61
|
-
pnpm add @
|
|
14
|
+
pnpm add @miradexio/client
|
|
62
15
|
# or
|
|
63
|
-
npm install @
|
|
16
|
+
npm install @miradexio/client
|
|
64
17
|
```
|
|
65
18
|
|
|
66
19
|
```ts
|
|
67
|
-
import { MiradexEngine, type PlatformAdapter } from '@
|
|
20
|
+
import { MiradexEngine, type PlatformAdapter } from '@miradexio/client';
|
|
68
21
|
|
|
69
|
-
const platform: PlatformAdapter = /* see
|
|
22
|
+
const platform: PlatformAdapter = /* see PlatformAdapter below */;
|
|
70
23
|
|
|
71
24
|
const engine = new MiradexEngine(
|
|
72
25
|
{
|
|
@@ -88,7 +41,7 @@ await engine.startAtomicSwap({
|
|
|
88
41
|
refundAddress: 'bc1q...',
|
|
89
42
|
});
|
|
90
43
|
|
|
91
|
-
//
|
|
44
|
+
// Routed providers (thorchain, chainflip, near_intents)
|
|
92
45
|
const { quotes } = await engine.apiClient.getQuotes({
|
|
93
46
|
from: 'BTC',
|
|
94
47
|
to: 'ETH',
|
|
@@ -106,170 +59,52 @@ await engine.startSwap({
|
|
|
106
59
|
});
|
|
107
60
|
```
|
|
108
61
|
|
|
109
|
-
The engine takes care of quoting via the server, generating
|
|
110
|
-
client-side keys and persisting the keystore (atomic-swap only),
|
|
111
|
-
driving the swap state machine with verification at every step, and
|
|
112
|
-
emitting `EngineEvents` so a UI can render progress.
|
|
113
|
-
|
|
114
|
-
The full per-provider drive — every protocol step, every
|
|
115
|
-
verification, every error — lives in
|
|
116
|
-
[`PROTOCOLS.md`](./PROTOCOLS.md). The BTC↔XMR atomic-swap protocol gets
|
|
117
|
-
its own attack-by-attack analysis in
|
|
118
|
-
[`ATOMIC-SWAP-PAPER.md`](./ATOMIC-SWAP-PAPER.md).
|
|
119
|
-
|
|
120
62
|
---
|
|
121
63
|
|
|
122
64
|
## Providers
|
|
123
65
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
(`<A> CHECKSIGVERIFY <B> CHECKSIG`) before XMR is locked, and the
|
|
130
|
-
adaptor-signature construction binds Alice's BTC redemption to
|
|
131
|
-
revealing the Monero scalar Bob needs to derive the joint Monero
|
|
132
|
-
spend key. Refund and punish paths are timelocked Bitcoin script;
|
|
133
|
-
liveness past the cancel window is the only operational requirement
|
|
134
|
-
on Bob.
|
|
135
|
-
|
|
136
|
-
The SDK independently:
|
|
137
|
-
|
|
138
|
-
- Verifies Alice's DLEQ proof in WASM before any BTC is broadcast.
|
|
139
|
-
- Derives the lock address locally from `(A, B)` and rejects any
|
|
140
|
-
server-supplied address that does not match.
|
|
141
|
-
- Recomputes the BIP143 sighash for `TxRedeem` and constant-time
|
|
142
|
-
compares it against the server's claim before adaptor-signing.
|
|
143
|
-
- Fetches the XMR lock tx from a quorum of monerod nodes, re-derives
|
|
144
|
-
the joint output key, and rejects `unlock_time != 0`.
|
|
145
|
-
- Verifies the recovered `s_a` satisfies `s_a · G == S_a_monero`
|
|
146
|
-
before sweeping.
|
|
147
|
-
- Bounds-checks every BIP68 sequence, every fee, and the amnesty
|
|
148
|
-
amount against the configured policy.
|
|
149
|
-
- Refuses to broadcast `TxLock` without first persisting a recovery
|
|
150
|
-
snapshot.
|
|
151
|
-
|
|
152
|
-
If anything goes wrong the SDK can refund autonomously without the
|
|
153
|
-
server: `verifyTxCancel` reads `TxCancel` from Electrum, decrypts
|
|
154
|
-
Alice's `tx_full_refund_encsig` with `s_b`, signs with `b`, and
|
|
155
|
-
broadcasts.
|
|
156
|
-
|
|
157
|
-
### `thorchain`
|
|
158
|
-
|
|
159
|
-
13 native gas assets (BTC, ETH, BSC, AVAX, …) via THORChain's Asgard
|
|
160
|
-
threshold-signature vaults. The user deposits the source asset to a
|
|
161
|
-
vault address; THORChain's validator set synthesises the destination
|
|
162
|
-
asset from its liquidity pools and broadcasts an outbound tx to the
|
|
163
|
-
destination address. Failed trades auto-refund to the inbound
|
|
164
|
-
sender.
|
|
165
|
-
|
|
166
|
-
The SDK independently:
|
|
167
|
-
|
|
168
|
-
- Reads the active vault list from THORNode and Midgard directly
|
|
169
|
-
(hardcoded URLs per network in
|
|
170
|
-
[`thorchain-networks.ts`](./src/verification/thorchain-networks.ts)
|
|
171
|
-
— the server cannot redirect verification to its own nodes).
|
|
172
|
-
- Confirms the deposit address is an active vault.
|
|
173
|
-
- Parses the registered memo and confirms it binds to the user's
|
|
174
|
-
destination address.
|
|
175
|
-
|
|
176
|
-
### `chainflip`
|
|
177
|
-
|
|
178
|
-
BTC, ETH, ARB, DOT, SOL via Chainflip's per-swap deposit channels.
|
|
179
|
-
Each trade gets a unique deposit address with an explicit
|
|
180
|
-
destination + refund-address binding committed at channel creation.
|
|
181
|
-
The validator set executes the swap and sends the output to the
|
|
182
|
-
bound destination; failures or expiries auto-refund.
|
|
183
|
-
|
|
184
|
-
The SDK independently:
|
|
185
|
-
|
|
186
|
-
- Reads the channel from the Chainflip broker REST or state-chain
|
|
187
|
-
JSON-RPC (hardcoded broker endpoints per network).
|
|
188
|
-
- Confirms the channel's destination and refund addresses match
|
|
189
|
-
what the user supplied.
|
|
190
|
-
- Confirms the source/destination chains match the requested swap.
|
|
191
|
-
|
|
192
|
-
### `near_intents`
|
|
193
|
-
|
|
194
|
-
16 chains (TRON, TON, XRP, Optimism, Doge, BCH, …) via Defuse 1Click.
|
|
195
|
-
The 1Click backend returns a per-quote deposit address; a solver
|
|
196
|
-
fronts the destination asset on the destination chain and claims the
|
|
197
|
-
deposit on the source chain after settlement. 1Click auto-refunds to
|
|
198
|
-
`refundTo` if the deposit lands after deadline or no solver bids.
|
|
199
|
-
|
|
200
|
-
The SDK independently:
|
|
201
|
-
|
|
202
|
-
- Reads the intent status from 1Click directly and confirms it is
|
|
203
|
-
registered.
|
|
204
|
-
- Confirms the deposit address is the one 1Click expects.
|
|
205
|
-
- Surfaces 1Click's terminal status (`SUCCESS` / `FAILED`) verbatim.
|
|
66
|
+
**`atomicswap`** — BTC ↔ XMR via the btc-xmr two-curve
|
|
67
|
+
atomic-swap protocol. BTC locks into a 2-of-2 P2WSH; adaptor
|
|
68
|
+
signatures tie Alice's BTC redemption to revealing the Monero
|
|
69
|
+
scalar Bob needs to sweep. Refund is timelocked Bitcoin script
|
|
70
|
+
and the SDK builds and broadcasts it without the server.
|
|
206
71
|
|
|
207
|
-
|
|
72
|
+
**`thorchain`** — 12 connected chains (BTC, ETH, BSC, AVAX,
|
|
73
|
+
BASE, SOL, TRON, XRP, …) via THORChain Asgard TSS vaults. The
|
|
74
|
+
SDK reads the active vault list from THORNode and Midgard
|
|
75
|
+
directly.
|
|
208
76
|
|
|
209
|
-
|
|
77
|
+
**`chainflip`** — Bitcoin, Ethereum, Arbitrum, Solana, Polkadot,
|
|
78
|
+
and Polkadot Assethub via per-swap deposit channels with
|
|
79
|
+
destination and Fill-or-Kill refund addresses bound at channel
|
|
80
|
+
creation. The SDK reads the channel from the broker and
|
|
81
|
+
confirms.
|
|
210
82
|
|
|
211
|
-
|
|
83
|
+
**`near_intents`** — roughly 45 chains via NEAR Intents 1Click
|
|
84
|
+
solver settlement. The SDK reads intent status from 1Click
|
|
85
|
+
directly.
|
|
212
86
|
|
|
213
|
-
|
|
87
|
+
---
|
|
214
88
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
| `@miradex/client/atomic-swap` | BTC↔XMR protocol surface (`runAtomicSwap`, `resumeAtomicSwap`, `submitEncsigWhenReady`) | Standalone atomic-swap consumer |
|
|
221
|
-
| `@miradex/client/atomic-swap/presign` | Pre-sig computation, redeem-digest recompute, `deriveLockAddress` | Independent verification & recovery binaries |
|
|
222
|
-
| `@miradex/client/atomic-swap/refund` | TxFullRefund / TxPartialRefund builders + signer | Standalone refund / recovery tools |
|
|
223
|
-
| `@miradex/client/atomic-swap/monero-sweep` | Monero sweep pipeline | Standalone sweep tool, e.g. for cooperative-redeem |
|
|
224
|
-
| `@miradex/client/verification` | Umbrella for all provider verifiers + helpers | Verify-only consumers (audit logs, watchtowers) |
|
|
225
|
-
| `@miradex/client/verification/{thorchain,chainflip,near-intents}` | Per-provider verifier | Light-touch integration |
|
|
226
|
-
| `@miradex/client/lib/bitcoin/tx-verify` | TxCancel independent verifier | Refund tools |
|
|
227
|
-
| `@miradex/client/lib/monero/verify-lock` | XMR lock independent verifier | Auditing, watchtowers |
|
|
89
|
+
## The SDK surface
|
|
90
|
+
|
|
91
|
+
The default import is `@miradexio/client`. Sub-path exports cover
|
|
92
|
+
atomic-swap-only, verification-only, and bundler-friendly subsets;
|
|
93
|
+
see the `exports` field in `package.json`.
|
|
228
94
|
|
|
229
95
|
### `PlatformAdapter`
|
|
230
96
|
|
|
231
|
-
The engine is decoupled from
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
Required methods:
|
|
236
|
-
|
|
237
|
-
- `watchDeposit(address, network, signal, onStatus?)` /
|
|
238
|
-
`checkDeposit(address, network)` / `fetchUtxo(address, network)` —
|
|
239
|
-
Bitcoin deposit detection.
|
|
240
|
-
- `saveKeystore(keystore, label)` / `loadKeystore(id)` /
|
|
241
|
-
`listKeystores()` / `deleteKeystore(id)` — keystore persistence.
|
|
242
|
-
- `estimateFee(network)` — fee-rate query.
|
|
243
|
-
- `broadcastTx(rawHex, network)` — Bitcoin broadcast.
|
|
244
|
-
- `createBlockchainQuerier(network)` /
|
|
245
|
-
`createBlockchainProvider(network)` — Electrum-equivalent on Node,
|
|
246
|
-
mempool.space-equivalent in browsers.
|
|
247
|
-
- `generateQr(text)` — QR rendering for deposit addresses.
|
|
248
|
-
- `logger: Logger` — structured logger.
|
|
249
|
-
|
|
250
|
-
Optional methods (recovery + cache):
|
|
251
|
-
|
|
252
|
-
- `saveSwapProtocol(swapId, params)` / `loadSwapProtocol(swapId)` —
|
|
253
|
-
write-through cache of public per-swap params.
|
|
254
|
-
- `saveProtocolSnapshot(swapId, json)` /
|
|
255
|
-
`loadProtocolSnapshot(swapId)` — one-shot recovery snapshot
|
|
256
|
-
written between `/presigs` and `/fund`.
|
|
257
|
-
|
|
258
|
-
Reference implementations:
|
|
259
|
-
|
|
260
|
-
- **Browser:** the miradex-web adapter
|
|
261
|
-
([`miradex-web/lib/miradex-web/browser-adapter.ts`](https://github.com/miradexio/miradex-web/blob/main/lib/miradex-web/browser-adapter.ts))
|
|
262
|
-
— uses `idb` for IndexedDB, mempool.space + electrs CORS endpoints
|
|
263
|
-
for Bitcoin queries, `qrcode.react` for QR, browser file download
|
|
264
|
-
for keystore export.
|
|
265
|
-
- **Node / Electron:** — SQLite + Electrum + filesystem keystore.
|
|
97
|
+
The engine is decoupled from host I/O. Implement
|
|
98
|
+
[`PlatformAdapter`](./src/engine/platform.ts) for your environment;
|
|
99
|
+
see the [miradex-web browser adapter](https://github.com/miradexio/miradex-web/blob/main/lib/miradex-web/browser-adapter.ts)
|
|
100
|
+
for a reference.
|
|
266
101
|
|
|
267
102
|
### Direct entry points
|
|
268
103
|
|
|
269
|
-
|
|
104
|
+
Drive flows without the engine:
|
|
270
105
|
|
|
271
106
|
```ts
|
|
272
|
-
import { runAtomicSwap, SwapExecutor } from '@
|
|
107
|
+
import { runAtomicSwap, SwapExecutor } from '@miradexio/client';
|
|
273
108
|
|
|
274
109
|
// Atomic swap, low-level:
|
|
275
110
|
await runAtomicSwap({
|
|
@@ -288,32 +123,14 @@ const result = await executor.executeSwap({
|
|
|
288
123
|
});
|
|
289
124
|
```
|
|
290
125
|
|
|
291
|
-
Cancellation: pass an `AbortController.signal` and call `.abort()`.
|
|
292
|
-
The flow throws `SwapCancelledError`. The keystore (and any partial
|
|
293
|
-
on-chain progress) survives.
|
|
294
|
-
|
|
295
|
-
### Events
|
|
296
|
-
|
|
297
|
-
`MiradexEngine extends EventEmitter`; useful events are:
|
|
298
|
-
|
|
299
|
-
- `state` — fires whenever the engine's `EngineState` changes.
|
|
300
|
-
- `flow:progress` — fires when an active flow's pipeline phase
|
|
301
|
-
changes.
|
|
302
|
-
- `flow:complete` / `flow:error` — terminal-state notifications.
|
|
303
126
|
|
|
304
|
-
See [`src/engine/miradex-engine.ts`](./src/engine/miradex-engine.ts).
|
|
305
127
|
|
|
306
128
|
---
|
|
307
129
|
|
|
308
130
|
## Security model
|
|
309
131
|
|
|
310
|
-
The
|
|
311
|
-
|
|
312
|
-
source — Electrum quorum for Bitcoin, monerod RPC quorum for Monero,
|
|
313
|
-
THORNode + Midgard for THORChain, the Chainflip broker for
|
|
314
|
-
Chainflip, the 1Click backend for NEAR Intents. The full
|
|
315
|
-
attack-by-attack analysis for the BTC↔XMR atomic swap is in
|
|
316
|
-
[`ATOMIC-SWAP-PAPER.md`](./ATOMIC-SWAP-PAPER.md).
|
|
132
|
+
The server is untrusted. Bitcoin state is verified against Electrum servers, Monero against monerod RPC servers, THORChain against THORNode + Midgard, Chainflip against the broker, NEAR
|
|
133
|
+
Intents against 1Click.
|
|
317
134
|
|
|
318
135
|
---
|
|
319
136
|
|
|
@@ -323,79 +140,27 @@ attack-by-attack analysis for the BTC↔XMR atomic swap is in
|
|
|
323
140
|
|
|
324
141
|
The first argument to `new MiradexEngine`:
|
|
325
142
|
|
|
326
|
-
| Field | Type | Default |
|
|
327
|
-
| --- | --- | --- |
|
|
328
|
-
| `apiUrl` | `string` | required |
|
|
329
|
-
| `network` | `'mainnet' \| 'testnet' \| 'regtest'` | `'mainnet'` |
|
|
330
|
-
| `slippageBps` | `number` | `100` (1.00%) |
|
|
331
|
-
| `apiTimeout` | `number` | `60_000` ms |
|
|
332
|
-
| `apiMaxRetries` | `number` | `3` |
|
|
333
|
-
| `monerodNodes` | `readonly string[]` | network default |
|
|
334
|
-
| `fetchFn` | `typeof fetch` | `globalThis.fetch` |
|
|
335
|
-
|
|
336
|
-
Sources of network defaults:
|
|
337
|
-
|
|
338
|
-
- Bitcoin Electrum servers in
|
|
339
|
-
[`src/lib/default-config.ts`](./src/lib/default-config.ts) (use
|
|
340
|
-
`ELECTRUM_SERVERS` / `electrumUrlForNetwork`).
|
|
341
|
-
- Monero RPC nodes — `MONERO_MAINNET_NODES` / `MONERO_STAGENET_NODES`
|
|
342
|
-
re-exported from `@miradex/client`.
|
|
343
|
-
|
|
344
|
-
---
|
|
345
|
-
|
|
346
|
-
## Errors
|
|
347
|
-
|
|
348
|
-
Every verification and protocol error carries a stable `code` string.
|
|
349
|
-
Handle them by code, not by message text — the messages may change
|
|
350
|
-
between releases. Codes are exported from `@miradex/client` as
|
|
351
|
-
`ERROR_CODES`.
|
|
352
|
-
|
|
353
|
-
```ts
|
|
354
|
-
import { VerificationError, ProtocolError } from '@miradex/client';
|
|
355
|
-
|
|
356
|
-
try {
|
|
357
|
-
await engine.startAtomicSwap(params);
|
|
358
|
-
} catch (err) {
|
|
359
|
-
if (err instanceof VerificationError && err.code === 'E_LOCK_ADDR_MISMATCH') {
|
|
360
|
-
// Server tried to make us fund an attacker-controlled address.
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
```
|
|
143
|
+
| Field | Type | Default |
|
|
144
|
+
| --- | --- | --- |
|
|
145
|
+
| `apiUrl` | `string` | required |
|
|
146
|
+
| `network` | `'mainnet' \| 'testnet' \| 'regtest'` | `'mainnet'` |
|
|
147
|
+
| `slippageBps` | `number` | `100` (1.00%) |
|
|
148
|
+
| `apiTimeout` | `number` | `60_000` ms |
|
|
149
|
+
| `apiMaxRetries` | `number` | `3` |
|
|
150
|
+
| `monerodNodes` | `readonly string[]` | network default |
|
|
151
|
+
| `fetchFn` | `typeof fetch` | `globalThis.fetch` |
|
|
364
152
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
| Code | Cause |
|
|
368
|
-
| --- | --- |
|
|
369
|
-
| `E_LOCK_ADDR_MISMATCH` | Locally-derived P2WSH ≠ server's claim — refusing to fund |
|
|
370
|
-
| `E_DLEQ_PROOF_INVALID` | Alice's DLEQ proof failed verification |
|
|
371
|
-
| `E_DLEQ_PROOF_REQUIRED` | Alice provided keys without a DLEQ proof |
|
|
372
|
-
| `E_REDEEM_DIGEST_MISMATCH` | Locally-recomputed redeem digest ≠ server's claim — refusing encsig |
|
|
373
|
-
| `E_XMR_LOCK_FAILED` | XMR lock did not verify against quorum |
|
|
374
|
-
| `E_S_A_MISMATCH` | `s_a` returned by server does not satisfy `s_a · G == S_a_monero` |
|
|
375
|
-
| `E_S_A_MONERO_MISSING` | `S_a_monero` absent — refusing to release encsig |
|
|
376
|
-
| `E_TIMELOCK_OUT_OF_RANGE` | A BIP68 sequence was outside accepted range |
|
|
377
|
-
| `E_FEE_BELOW_RELAY` / `E_FEE_ABOVE_CAP` | Fee outside policy band |
|
|
378
|
-
| `E_AMNESTY_EXCEEDS_CAP` | Amnesty amount exceeded the configured ratio of lock |
|
|
379
|
-
| `E_SNAPSHOT_WRITE_FAILED` | Refusing to broadcast TxLock without persisting recovery snapshot first |
|
|
380
|
-
| `E_PRESIGS_WEDGED` | Server repeatedly rejected `/presigs` — swap is wedged, fail to surface restart UI |
|
|
381
|
-
| `E_THORCHAIN_VAULT_MISMATCH` | Deposit address not in active THORChain vaults |
|
|
382
|
-
| `E_CHAINFLIP_CHANNEL_MISBINDING` | Chainflip channel binding does not match user's expected destination |
|
|
383
|
-
| `E_NEAR_INTENT_NOT_REGISTERED` | Deposit address unknown to 1Click (HTTP 404) |
|
|
384
|
-
| `E_NEAR_INTENT_FAILED` | 1Click reports `FAILED` |
|
|
385
|
-
| `E_RATE_DRIFT` | Engine's expected output drifted from the accepted quote beyond `slippageBps` |
|
|
386
|
-
| `E_SLIPPAGE_OUT_OF_RANGE` | `slippageBps` outside the network's allowed band |
|
|
153
|
+
Defaults are exported from [`src/lib/default-config.ts`](./src/lib/default-config.ts).
|
|
387
154
|
|
|
388
155
|
---
|
|
389
156
|
|
|
390
157
|
## Build
|
|
391
158
|
|
|
392
|
-
### Building from source
|
|
393
|
-
|
|
394
159
|
```bash
|
|
395
160
|
pnpm install
|
|
396
|
-
pnpm -F @
|
|
397
|
-
pnpm -F @
|
|
398
|
-
pnpm -F @
|
|
161
|
+
pnpm -F @miradexio/client build # tsc → dist/
|
|
162
|
+
pnpm -F @miradexio/client typecheck
|
|
163
|
+
pnpm -F @miradexio/client test
|
|
399
164
|
```
|
|
400
165
|
|
|
401
166
|
---
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base58.d.ts","sourceRoot":"","sources":["../../src/address/base58.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAClC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAcrC;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"base58.d.ts","sourceRoot":"","sources":["../../src/address/base58.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAClC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAcrC;AAKD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAYvF"}
|
package/dist/address/base58.js
CHANGED
|
@@ -16,13 +16,12 @@ export function validateBase58Check(address, expectedVersions) {
|
|
|
16
16
|
return { valid: false, reason: 'Invalid base58check encoding' };
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
// XRP uses a different base58 alphabet
|
|
19
|
+
// XRP uses a different base58 alphabet.
|
|
20
20
|
const XRP_ALPHABET = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz';
|
|
21
21
|
export function validateXrpAddress(address) {
|
|
22
22
|
if (!address.startsWith('r') || address.length < 25 || address.length > 35) {
|
|
23
23
|
return { valid: false, reason: 'XRP address must start with r and be 25-35 chars' };
|
|
24
24
|
}
|
|
25
|
-
// Validate characters are in XRP alphabet
|
|
26
25
|
for (const c of address) {
|
|
27
26
|
if (!XRP_ALPHABET.includes(c)) {
|
|
28
27
|
return { valid: false, reason: `Invalid character '${c}' in XRP address` };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base58.js","sourceRoot":"","sources":["../../src/address/base58.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAE/B,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,gBAAmC;IAEnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAErE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrF,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"base58.js","sourceRoot":"","sources":["../../src/address/base58.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAE/B,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,gBAAmC;IAEnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAErE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrF,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,YAAY,GAAG,4DAA4D,CAAC;AAElF,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC3E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;IACtF,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,kBAAkB,EAAE,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/address/bech32.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validate a bech32/bech32m address.
|
|
3
|
-
*
|
|
4
|
-
* For segwit addresses (BTC bc1, LTC ltc1), the first word is the witness
|
|
5
|
-
* version and is skipped before fromWords conversion.
|
|
6
|
-
*
|
|
7
|
-
* For non-segwit bech32 (Cosmos, THORChain), all words are data.
|
|
8
|
-
*/
|
|
9
1
|
export declare function validateBech32(address: string, expectedHrp: string, minDataLen?: number, maxDataLen?: number): {
|
|
10
2
|
valid: boolean;
|
|
11
3
|
reason?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bech32.d.ts","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bech32.d.ts","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,SAAK,EACf,UAAU,SAAK,GACd;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiCrC"}
|
package/dist/address/bech32.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import { bech32, bech32m } from '@scure/base';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
* For segwit addresses (BTC bc1, LTC ltc1), the first word is the witness
|
|
6
|
-
* version and is skipped before fromWords conversion.
|
|
7
|
-
*
|
|
8
|
-
* For non-segwit bech32 (Cosmos, THORChain), all words are data.
|
|
9
|
-
*/
|
|
2
|
+
// Segwit (BTC bc1, LTC ltc1, etc.): first word is the witness version, skip
|
|
3
|
+
// it before fromWords. Non-segwit (Cosmos, THORChain): all words are data.
|
|
10
4
|
export function validateBech32(address, expectedHrp, minDataLen = 20, maxDataLen = 40) {
|
|
11
5
|
try {
|
|
12
6
|
let decoded;
|
|
@@ -19,7 +13,7 @@ export function validateBech32(address, expectedHrp, minDataLen = 20, maxDataLen
|
|
|
19
13
|
if (decoded.prefix !== expectedHrp) {
|
|
20
14
|
return { valid: false, reason: `Expected HRP '${expectedHrp}', got '${decoded.prefix}'` };
|
|
21
15
|
}
|
|
22
|
-
// Segwit
|
|
16
|
+
// Segwit (bc, ltc, ...) carries the witness version as the first word.
|
|
23
17
|
const isSegwit = expectedHrp === 'bc' ||
|
|
24
18
|
expectedHrp === 'ltc' ||
|
|
25
19
|
expectedHrp === 'tb' ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bech32.js","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9C
|
|
1
|
+
{"version":3,"file":"bech32.js","sourceRoot":"","sources":["../../src/address/bech32.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9C,4EAA4E;AAC5E,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,WAAmB,EACnB,UAAU,GAAG,EAAE,EACf,UAAU,GAAG,EAAE;IAEf,IAAI,CAAC;QACH,IAAI,OAA4C,CAAC;QACjD,IAAI,CAAC;YACH,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAgC,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAgC,CAAC,CAAC;QAC5D,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,WAAW,WAAW,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;QAC5F,CAAC;QAED,uEAAuE;QACvE,MAAM,QAAQ,GACZ,WAAW,KAAK,IAAI;YACpB,WAAW,KAAK,KAAK;YACrB,WAAW,KAAK,IAAI;YACpB,WAAW,KAAK,MAAM,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAEhE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;YACzD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,eAAe,IAAI,CAAC,MAAM,kBAAkB,UAAU,KAAK,UAAU,GAAG;aACjF,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IAC7D,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/address/evm.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../src/address/evm.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CA2BvF"}
|
package/dist/address/evm.js
CHANGED
|
@@ -4,12 +4,11 @@ export function validateEvmAddress(address) {
|
|
|
4
4
|
if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
|
|
5
5
|
return { valid: false, reason: 'Must be 0x followed by 40 hex characters' };
|
|
6
6
|
}
|
|
7
|
-
//
|
|
7
|
+
// All-lower or all-upper = valid but unchecksummed; skip the EIP-55 check.
|
|
8
8
|
const hex = address.slice(2);
|
|
9
9
|
if (hex === hex.toLowerCase() || hex === hex.toUpperCase()) {
|
|
10
10
|
return { valid: true };
|
|
11
11
|
}
|
|
12
|
-
// EIP-55 mixed-case checksum validation
|
|
13
12
|
const hashHex = bytesToHex(keccak_256(new TextEncoder().encode(hex.toLowerCase())));
|
|
14
13
|
for (let i = 0; i < 40; i++) {
|
|
15
14
|
const c = hex.charAt(i);
|
package/dist/address/evm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/address/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;IAC9E,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/address/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAChD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0CAA0C,EAAE,CAAC;IAC9E,CAAC;IAED,2EAA2E;IAC3E,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1C,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YACtC,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
|
package/dist/address/index.d.ts
CHANGED
|
@@ -2,14 +2,8 @@ export interface ValidationResult {
|
|
|
2
2
|
readonly valid: boolean;
|
|
3
3
|
readonly reason?: string;
|
|
4
4
|
}
|
|
5
|
-
/**
|
|
6
|
-
* Validate a cryptocurrency address for a given token or chain.
|
|
7
|
-
* Pure function — works identically in Node.js and browser.
|
|
8
|
-
*/
|
|
9
5
|
export declare function validateAddress(address: string, tokenOrChain: string): ValidationResult;
|
|
10
6
|
export declare function resolveChain(tokenOrChain: string): string;
|
|
11
7
|
export declare function getSupportedChains(): readonly string[];
|
|
12
|
-
/** Tokens commonly received on a given chain. Used to populate the
|
|
13
|
-
* Tokens column in the address book without per-row tagging. */
|
|
14
8
|
export declare function tokensForChain(chain: string): readonly string[];
|
|
15
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/address/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/address/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAqGD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,gBAAgB,CAYvF;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAEtD;AAgBD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAE/D"}
|
package/dist/address/index.js
CHANGED
|
@@ -92,17 +92,14 @@ const TOKEN_TO_CHAIN = {
|
|
|
92
92
|
ZEC: 'zcash',
|
|
93
93
|
XMR: 'monero',
|
|
94
94
|
};
|
|
95
|
-
|
|
96
|
-
* Validate a cryptocurrency address for a given token or chain.
|
|
97
|
-
* Pure function — works identically in Node.js and browser.
|
|
98
|
-
*/
|
|
95
|
+
// Pure function; works identically in Node and browser.
|
|
99
96
|
export function validateAddress(address, tokenOrChain) {
|
|
100
97
|
if (!address || !address.trim())
|
|
101
98
|
return { valid: false, reason: 'Address is empty' };
|
|
102
99
|
const chain = resolveChain(tokenOrChain);
|
|
103
100
|
const validator = CHAIN_VALIDATORS[chain];
|
|
104
101
|
if (!validator) {
|
|
105
|
-
// Unknown chain
|
|
102
|
+
// Unknown chain: accept any non-empty address.
|
|
106
103
|
return { valid: true };
|
|
107
104
|
}
|
|
108
105
|
return validator(address.trim());
|
|
@@ -120,14 +117,14 @@ const CHAIN_TO_TOKENS = (() => {
|
|
|
120
117
|
out[chain] = [];
|
|
121
118
|
out[chain].push(token);
|
|
122
119
|
}
|
|
123
|
-
// Base shares stablecoins with Ethereum
|
|
124
|
-
//
|
|
120
|
+
// Base shares stablecoins with Ethereum; surface the common set so the
|
|
121
|
+
// address-book/picker doesn't render an empty Tokens column.
|
|
125
122
|
if (!out['base'])
|
|
126
123
|
out['base'] = ['ETH', 'USDC'];
|
|
127
124
|
return out;
|
|
128
125
|
})();
|
|
129
|
-
|
|
130
|
-
|
|
126
|
+
// Tokens commonly received on a given chain. Drives the Tokens column in the
|
|
127
|
+
// address book without per-row tagging.
|
|
131
128
|
export function tokensForChain(chain) {
|
|
132
129
|
return CHAIN_TO_TOKENS[resolveChain(chain)] ?? [];
|
|
133
130
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/address/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/address/index.ts"],"names":[],"mappings":"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"}
|
package/dist/address/monero.d.ts
CHANGED
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Monero address validation.
|
|
3
|
-
* Standard: 95 chars, starts with 4 (mainnet) or 5 (testnet)
|
|
4
|
-
* Subaddress: 95 chars, starts with 8 (mainnet) or 7 (testnet)
|
|
5
|
-
* Integrated: 106 chars, starts with 4 (mainnet)
|
|
6
|
-
*
|
|
7
|
-
* Uses Monero's modified base58 which encodes in 8-byte blocks.
|
|
8
|
-
* We validate format + length rather than full checksum because
|
|
9
|
-
* Monero base58 is non-standard (no base58check).
|
|
10
|
-
*/
|
|
11
1
|
export declare function validateMoneroAddress(address: string): {
|
|
12
2
|
valid: boolean;
|
|
13
3
|
reason?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monero.d.ts","sourceRoot":"","sources":["../../src/address/monero.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"monero.d.ts","sourceRoot":"","sources":["../../src/address/monero.ts"],"names":[],"mappings":"AAOA,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAoB1F"}
|