Bridging ECX (eCash Peg)
Snowside’s bridge moves ECX between the eCash L1 and Snowside L2 at a strict 1:1 peg.
- 1 satoshi (L1, 8 decimals) = 1010 wei (Snowside, 18 decimals)
- 1 ECX on eCash = 1 ECX on Snowside
Networks
Section titled “Networks”| Bridge leg | L1 network | Address format | Confirmations required |
|---|---|---|---|
mainnet |
eCash Mainnet (post-fork chain) | bc1q… (P2WPKH) |
3 (~30 min) |
testnet |
eCash Betanet | bc1q… (P2WPKH) |
1 (~10 min) |
signet |
Bitcoin Signet | tb1q… |
1 |
- Every deposit receives a unique, single-purpose address (HD-derived per request). Do not reuse an address across deposit requests.
- Mainnet deposits are gated by the fork height (973,728). Before the eCash fork, the mainnet esplora serves the shared BTC chain; the federation will observe but never mint against pre-fork UTXOs. BTC sent to a mainnet deposit address pre-fork becomes ECX at the fork and is then processed normally.
- Snowside ECX is only ever minted after the L1 transaction reaches the confirmation count above, and only for the exact observed amount — 1:1 backing by construction.
Deposits (eCash → Snowside)
Section titled “Deposits (eCash → Snowside)”-
Open the bridge UI at bridge.snowside.network, pick your network, and enter the Snowside address that should receive the minted ECX (your EVM address on the matching Snowside L1).
-
The UI creates a deposit request and shows a QR code + address (
bc1q…/tb1q…). -
Send ECX (or signet sBTC) to that address from any eCash wallet.
-
The federation polls the L1 esplora every 10 seconds. When the transaction reaches the required confirmations, the deposit is marked
confirmed, then the exact amount is minted to your Snowside address viaNativeMinter.mintNativeCoinand the deposit is markedmintedwith the L2 mint transaction hash.
Track a deposit programmatically:
curl -s https://snowside.network/v1/bridge/deposit/<deposit-id># status flow: pending -> confirmed -> mintedWithdrawals (Snowside → eCash)
Section titled “Withdrawals (Snowside → eCash)”-
In the bridge UI, switch to the Withdraw tab and enter your destination L1 address (
bc1q…for eCash mainnet/betanet). -
Burn the ECX on Snowside (the UI sends the burn transaction from your connected wallet) and submit the burn transaction hash.
-
The federation verifies the burn on the L2, builds an L1 transaction spending from funded deposit UTXOs, signs it (P2WPKH,
SIGHASH_ALL), and broadcasts it. -
The withdrawal is marked
completedwith the L1 transaction hash. Minimum withdrawal: 1,000 satoshis (dust limit 546 sats + 1,000-sat flat network fee).
Withdrawal requests expire after 15 minutes if no valid burn is detected (auto-failed) — submit the burn promptly after creating the request.
Replay protection
Section titled “Replay protection”All withdrawal transactions set a network-specific nLockTime (marker just below 500,000,000) with non-final sequences, per the eCash replay-protection convention:
| Network | nLockTime |
|---|---|
| eCash Mainnet | 499,999,998 |
| eCash Betanet | 499,999,999 |
| Bitcoin Signet | 0 (none needed — separate chain) |
A withdrawal signed for one eCash network is invalid on the other after the fork.
API surface
Section titled “API surface”All bridge endpoints are public; federation-facing endpoints use bearer auth. See the OpenAPI UI at snowside.network/v1.
| Endpoint | Purpose |
|---|---|
POST /v1/bridge/deposit |
Create a deposit request |
GET /v1/bridge/deposit/{id} |
Deposit status |
GET /v1/bridge/deposits/{address} |
History for a Snowside address |
POST /v1/bridge/withdraw |
Submit a withdrawal |
GET /v1/bridge/withdrawals/{address} |
Withdrawal history |
GET /v1/bridge/status |
Federation online status + last check-in |
Custodial MVP trust model (read before mainnet use)
Section titled “Custodial MVP trust model (read before mainnet use)”- The federation holds the L1 wallet keys (HD mnemonic, encrypted at rest on the Snowside infra host) and an L2 minter key with mint-only role (granted via
NativeMinter.setEnabledby the chain authority; the authority retains sole admin). - Deposit minting is fully automatic and amount-exact. Burn verification is operator-supervised in the MVP: the federation checks the burn transaction exists on the L2 before paying out (full input parsing is a known follow-up).
- Supply integrity: the genesis pre-mine (1,001,200 ECX per chain) is a recognized liability that will be collateralized 1:1 by real ECX at sidechain slot-88 registration (post-fork M1/M2). Every post-genesis mint is 1:1-backed by an observed L1 deposit.
- Roadmap to trustlessness: Phase 2 enforcer + slot registration on the post-fork network, Phase 3/4 rollout, ending with miner-voted M6 withdrawals (~13,150 ACKs over ~6 months) and no federation keys.