Vault-Based NFT Bridge
A secure, non-destructive bridge architecture designed to map and migrate 100,000+ assets across asynchronous networks gracefully.
The Migration Problem
Faded Monsuta originated on the WAX blockchain, resulting in an ecosystem containing over 100,000 player-owned NFTs. Traditional NFT bridges rely on a Mint & Burn model: burning the asset on the origin chain, and minting it on the destination chain.
For massive pre-existing ecosystems, burning is extremely dangerous:
- If a cross-chain transmission drops, the user's asset is permanently destroyed.
- Legacy assets often contain specific creation timestamps, mint numbers, or historical data that a pure burn operation irrevocably deletes.
- Returning an asset to the legacy chain requires re-minting a functionally new asset, severing it from its historical lineage.
The Vault Architecture
Monsuta Core solves this via a Vault-based locking protocol. The NFT Bridge never burns an asset. Instead, it securely locks original NFTs in an escrow vault and uses a decentralized Oracle network to translate, map, and mirror those assets onto the destination settlement chain (Avalanche).
WAX (Origin) Avalanche (Destination)
─────────────────────────────────────────────────────────────────
1. Player deposits NFT into
the WAX Vault Contract.
(Asset Locked, NOT burned)
│
2. Oracle detects lock.
Translates ID & signs payload.
│
└──────────────────────────────► 3. Player submits signature
to Avalanche contract.
(Minted exact mirror)
[ Return Trip ]
4. Oracle unlocks WAX vault ◄─────────── 5. Player deposits mirrored
and returns original NFT. NFT into Avalanche vault.
─────────────────────────────────────────────────────────────────
Because assets are vaulted, a failure in transit never destroys player property. The original asset is always securely held and entirely recoverable.
Token ID Engineering
Mapping assets between blockchains with different numeric limits requires strategic ID formatting. WAX AtomicAssets use sequential IDs, whereas Avalanche uses ERC-721.
Monsuta Core leverages Bitwise Token IDs to solve this elegantly:
avaxTokenId = (typeId << 128) | serial
- Infinite Horizontals: This provides unlimited sequential serials per item type.
- Gas-Free Lookups: The game server and frontend can mathematically extract an item's type purely through bitwise operations, bypassing the need for expensive on-chain registries or heavy mapping arrays.
Component Topology
The NFT Bridge comprises four independent layers:
| Component | Network / Environment | Purpose |
|---|---|---|
NFTBridge.sol | Avalanche C-Chain | UUPS proxy enforcing threshold-signature mints and securely locking bridged returns. |
nftbridge.cpp | Legacy Chain (WAX) | EOSIO contract functioning as the escrow vault for origin assets. |
nft-oracle-wax.js | Off-chain Node.js | Watches legacy chain locks, queries the PostgreSQL mapping DB, and signs EIP-712 payloads. |
nft-oracle-avax.js | Off-chain Node.js | Watches Avalanche locks and instructs the legacy chain vault to release specific original assets. |
Resiliency & Security Rules
| Property | Enforcement Mechanism |
|---|---|
| Cryptographic Redundancy | EIP-712 typed data hashing ensures payloads cannot be altered or re-used on other chains. |
| Threshold Consensus | The bridge mandates independent M-of-N oracle signatures before releasing or minting an asset, eliminating single points of failure. |
| Atomic Replay Prevention | waxTxId nonces are strictly verified. A distinct teleport operation can only ever be claimed once. |
| Emergency Halts | Strict PausableUpgradeable implementation allows operators to freeze all bridge components globally in the event of an anomaly. |
Infrastructure Operations
Database configurations and tables are automatically initialized during the first execution of the Oracle watcher.
Database Schema Auto-Generation:
wax_template_map: Maps origin template schemas to new Avalanche bitwise definitions.nft_id_counter: Ensures atomic serial incrementation to strictly prevent ID collisions across concurrent bridge streams.nft_teleports: Retains signature data, providing users an infinite claim window.
Operating the Node.js oracles requires basic PM2 orchestration:
# Start dual-directional oracle watchers
pm2 start nft-oracle-wax.js --name vault-watcher-origin
pm2 start nft-oracle-avax.js --name vault-watcher-destination