Defines a protocol for private cross-chain transfers on Lux Network. A user deposits into a shielded pool (LP-064) on the source chain and withdraws from a corresponding pool on the destination chain. The cross-chain message is relayed via Warp messaging (LP-6022) and contains only the commitment proof and nullifier -- no amounts, senders, or receivers are revealed in the cross-chain message.
Source Chain Destination Chain
1. User deposits into ShieldedPool
2. Pool emits commitment event
3. Warp message: {root, nullifier, ----> 4. DestPool verifies Warp signature
proof, destChain, recipient_hash} 5. DestPool verifies ZK proof
6. DestPool releases funds to recipient
Each chain maintains a ShieldedPool funded by liquidity providers. LPs deposit into destination pools and earn fees from private transfer volume. Pool balances are public (aggregate liquidity) but individual deposit/withdrawal links are hidden.
Nullifiers must be globally unique across all chains. The protocol maintains a nullifier registry per chain and includes the source chain ID in the nullifier derivation:
nullifier = Poseidon2(commitment || spending_key || sourceChainID)
Warp-relayed nullifiers are checked on the destination chain before releasing funds.
1. The Warp message reveals the source and destination chains but not the sender, receiver, or amount.
2. Recipient hash prevents front-running -- only the intended recipient can claim.
3. Liquidity pool size determines the anonymity set on the destination chain.
4. Cross-chain replay is prevented by including the source chain ID in the nullifier.
github.com/luxfi/standard/contracts/privacy/PrivateTeleport.sol |github.com/luxfi/evm/warp/ |github.com/luxfi/standard/contracts/privacy/ShieldedPool.sol |Copyright (C) 2024-2026, Lux Partners Limited. All rights reserved.
Licensed under the MIT License.