Your servers hold 5 keys. Avalanche treats them as a chain. No node, no VM, no rewrite of your system.
One-time setup. After this the Web2 system is a registered ICM peer on Fuji.
1. Wallet secp256k1 key, localStorage, testnet only
Return funds
2. Register virtual L1 CreateSubnetTx, CreateChainTx, ConvertSubnetToL1Tx
Generates 5 BLS keys in the browser and registers them on the P-Chain as equal-weight validators of a chain that never runs. The blockchain ID becomes the Web2 system's ICM source ID. Costs about 0.5 AVAX of validator balance plus fees.
3. Mailbox contract and Fuji validators C-Chain deploy, platform.getValidatorsAt
Deploys a small C-Chain contract that trusts only our virtual L1 (and only our wallet may send from it), and loads the Fuji validator set the browser uses to verify messages coming back.
Your servers hold 5 keys. Avalanche treats them as a chain. Messages go both ways, and every message is checked by cryptography, not by trust in a server.
Your system → Avalanche Web2 → C-Chain
Your servers sign a plain message with 4 of their 5 keys. The C-Chain contract accepts it only if the network's own Warp check passes.
3 of 5: the network refuses a message unless 4 of your 5 servers agreed. Tamper: one changed character and the network refuses. Replay: the same message cannot be delivered twice.Inbox on chain (newest first)
Avalanche → your system C-Chain → Web2
The C-Chain contract emits a plain message. Fuji validators sign it. Your browser verifies it against the Fuji validator set and acts.
Your system accepts a message only if the validators of Avalanche signed exactly this text, and only once.