Files
papers/zoo-lux-bridge-protocol/zoo-lux-bridge-protocol.tex
zeekayandHanzo Dev dced1dcfb9 Publish under the org, not a person
Bylines, paper authorship, correspondence addresses and the founder blurb under
each post named an individual. They name the organisation that published the
work instead: the brand on posts and pages, the research byline on papers, and
research@ in place of a personal address. Both are what these repositories
already used elsewhere — nothing new was coined.

Co-authors are untouched. Where a paper named someone else alongside, they stay
named; only the one byline changed. Bibliography entries, running heads,
PDF metadata and affiliations move with it, so a citation still resolves to
whoever the cited paper names.

Sample and fixture data uses the placeholder name these tests already use
elsewhere, so no assertion changed meaning.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-01 08:55:40 -07:00

515 lines
20 KiB
TeX

\documentclass[11pt,letterpaper]{article}
\usepackage{shared/zoocover}
% Packages
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amsthm}
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,calc}
\usepackage{listings}
\usepackage{caption}
\usepackage{subcaption}
% geometry loaded by zoocover
\input{shared/lstlang}
% Listing style
\lstset{
basicstyle=\ttfamily\footnotesize,
breaklines=true,
frame=single,
numbers=left,
numberstyle=\tiny,
captionpos=b,
xleftmargin=2em,
framexleftmargin=1.5em,
}
% Theorem environments
\newtheorem{theorem}{Theorem}[section]
\newtheorem{lemma}[theorem]{Lemma}
\newtheorem{proposition}[theorem]{Proposition}
\newtheorem{corollary}[theorem]{Corollary}
\newtheorem{definition}{Definition}[section]
\newtheorem{example}{Example}[section]
% Custom commands
\newcommand{\Zoo}{\textsc{Zoo}}
\newcommand{\NFT}{\textsc{nft}}
\newcommand{\ERC}{\textsc{erc}}
\newcommand{\DAO}{\textsc{dao}}
\newcommand{\ZOO}{\$\textsc{zoo}}
\newcommand{\TBA}{\textsc{tba}}
\newcommand{\MPC}{\textsc{mpc}}
% Hyperref setup
\hypersetup{
colorlinks=true,
linkcolor=blue,
citecolor=blue,
urlcolor=blue
}
% Title and authors
\title{\textbf{Zoo $\leftrightarrow$ Lux Bridge: Multi-Chain Asset Transfer via Warp Messaging}}
\author{
Zoo Labs Foundation Research\thanks{[email protected]}\\
\textit{Zoo Labs Foundation}\\
\texttt{[email protected]}
}
\date{February 2025}
\begin{document}
\zoocoverpage
\begin{abstract}
We present the cross-chain bridge protocol between Zoo L2 (Chain~ID: 200200) and Lux Network (C-Chain, X-Chain, B-Chain). The bridge is built on the Lux Teleport architecture (LP-6332) and Warp messaging (ZIP-0022), and secured by MPC threshold signatures with a $\lceil 2n/3 \rceil$ supermajority requirement using the GG20 threshold ECDSA scheme. It supports bridging of ZRC-20 fungible tokens, ZRC-721 wildlife NFTs with full metadata preservation, ZRC-1155 multi-tokens, and native ZOO/LUX gas tokens. The protocol ensures that conservation metadata, provenance chains, and token-bound account states are faithfully preserved across chains. We describe the bridge gateway contracts, MPC signer set, metadata serialization, TBA freeze/mirror mechanism, fee structure, and liveness/safety guarantees.
\textbf{Keywords}: cross-chain bridge, Warp messaging, MPC, threshold ECDSA, Teleport, metadata preservation
\end{abstract}
\section{Introduction}
The Zoo ecosystem exists on Zoo L2 (Chain~ID: 200200), a rollup anchored to the Lux primary network. Zoo tokens, wildlife NFTs, and conservation assets must be portable to Lux C-Chain for DeFi liquidity, to Lux X-Chain for exchange listing, and to external chains for broader ecosystem access.
Two bridge architectures serve different trust models. The Lux Warp messaging bridge~\cite{warp2023} is the native, trustless path for Zoo L2 $\leftrightarrow$ Lux C-Chain transfers: Warp messages are validated by the Lux primary network validators, requiring no additional trust assumptions. For transfers to external EVM chains, a lock-and-mint bridge secured by an MPC threshold signer set provides Byzantine fault tolerance.
The bridge's distinguishing feature is conservation metadata preservation. When Tiger \#42's ZRC-721 NFT bridges from Zoo to Lux, its species metadata (IUCN status, GPS coordinates, taxonomy), provenance chain (field observations, veterinary records), and token-bound account state (donation balance, conservation history) must arrive intact on the destination chain.
\subsection{Contributions}
\begin{enumerate}
\item The IZooBridgeGateway interface supporting four asset types (Section~\ref{sec:gateway}).
\item MPC threshold signature verification using GG20 (Section~\ref{sec:mpc}).
\item Conservation metadata serialization for cross-chain transfer (Section~\ref{sec:metadata}).
\item TBA freeze/mirror mechanism for NFT bridge transfers (Section~\ref{sec:tba}).
\item Liveness and safety guarantees with emergency withdrawal fallback (Section~\ref{sec:liveness}).
\item Security analysis of MPC key compromise, replay, and censorship attacks (Section~\ref{sec:security}).
\end{enumerate}
\section{Architecture}
\begin{figure}[t]
\centering
\begin{tikzpicture}[
node distance=1.2cm and 3.5cm,
box/.style={rectangle, draw, minimum width=3cm, minimum height=0.7cm, align=center, font=\footnotesize, fill=blue!8},
mpc/.style={rectangle, draw, minimum width=3cm, minimum height=0.7cm, align=center, font=\footnotesize, fill=green!8},
arr/.style={<->, >=stealth, thick},
]
\node[box] (zoo) {ZooBridgeGateway\\(Zoo L2)};
\node[mpc, right=of zoo] (mpc) {MPC Signer Set\\($n \geq 7$, $t = \lceil 2n/3 \rceil$)};
\node[box, right=of mpc] (lux) {LuxBridgeGateway\\(Lux C-Chain)};
\draw[arr] (zoo) -- (mpc);
\draw[arr] (mpc) -- (lux);
\node[box, below=0.8cm of zoo] (locker) {Token Locker\\+ Metadata Serializer\\+ TBA Freezer};
\node[box, below=0.8cm of lux] (minter) {Token Minter\\+ Metadata Deserializer\\+ TBA Mirror};
\draw[->, >=stealth] (zoo) -- (locker);
\draw[->, >=stealth] (lux) -- (minter);
\end{tikzpicture}
\caption{Zoo $\leftrightarrow$ Lux bridge architecture.}
\label{fig:architecture}
\end{figure}
\section{Bridge Gateway}
\label{sec:gateway}
\begin{lstlisting}[language=Solidity,caption=IZooBridgeGateway interface]
interface IZooBridgeGateway {
enum AssetType {
NATIVE, // ZOO or LUX gas token
ZRC20, // Fungible token
ZRC721, // Non-fungible token
ZRC1155 // Multi-token
}
struct BridgeMessage {
bytes32 messageId;
uint256 sourceChainId;
uint256 destinationChainId;
address sender;
address recipient;
AssetType assetType;
address tokenContract;
uint256 tokenId; // 0 for fungibles
uint256 amount; // 1 for NFTs
bytes metadata; // Serialized conservation
uint256 nonce; // Replay protection
uint256 deadline; // Message expiry
}
function bridgeOut(
uint256 destinationChainId,
address recipient,
AssetType assetType,
address tokenContract,
uint256 tokenId,
uint256 amount
) external payable returns (bytes32 messageId);
function bridgeIn(
BridgeMessage calldata message,
bytes calldata mpcSignature
) external;
function mpcSignerSet()
external view returns (address);
function processedMessages(bytes32 messageId)
external view returns (bool);
event BridgeOutInitiated(
bytes32 indexed messageId,
address indexed sender,
uint256 destinationChainId,
AssetType assetType,
address tokenContract,
uint256 tokenId,
uint256 amount
);
event BridgeInCompleted(
bytes32 indexed messageId,
address indexed recipient,
uint256 sourceChainId,
AssetType assetType,
address tokenContract,
uint256 tokenId,
uint256 amount
);
}
\end{lstlisting}
\subsection{Warp Messaging Path}
For Zoo L2 $\leftrightarrow$ Lux C-Chain transfers, the bridge uses native Warp messaging~\cite{warp2023}:
\begin{lstlisting}[language=Solidity,caption=Warp bridge integration (from ZIP-0022)]
IWarpMessenger constant WARP =
IWarpMessenger(
0x0200000000000000000000000000000000000005
);
function bridgeOutViaWarp(
uint256 amount, address recipient
) external {
IERC20(zooToken).transferFrom(
msg.sender, address(this), amount);
bytes memory payload = abi.encode(
recipient, amount);
WARP.sendWarpMessage(payload);
}
function bridgeInViaWarp(uint32 index) external {
(IWarpMessenger.WarpMessage memory msg,
bool valid) =
WARP.getVerifiedWarpMessage(index);
require(valid, "invalid warp message");
require(msg.sourceChainID == peerChainId,
"wrong source");
(address recipient, uint256 amount) =
abi.decode(msg.payload,
(address, uint256));
IERC20(zooToken).transfer(recipient, amount);
}
\end{lstlisting}
Warp messages are validated by the Lux primary network validators. No MPC signer set is needed for this path.
\section{MPC Threshold Signatures}
\label{sec:mpc}
For external chain bridges, the protocol uses GG20~\cite{gg20} threshold ECDSA:
\begin{table}[t]
\centering
\begin{tabular}{lc}
\toprule
\textbf{Parameter} & \textbf{Value} \\
\midrule
Minimum signers ($n$) & 7 \\
Threshold ($t$) & $\lceil 2n/3 \rceil$ \\
Key generation & Distributed key generation (DKG) \\
Signature scheme & Threshold ECDSA (secp256k1) \\
Rotation period & 30 days \\
Slashing & 10,000 LUX stake; slashed for equivocation \\
\bottomrule
\end{tabular}
\caption{MPC signer set parameters.}
\label{tab:mpc}
\end{table}
\begin{lstlisting}[language=Solidity,caption=IMPCSignerSet interface]
interface IMPCSignerSet {
function verifyThresholdSignature(
bytes32 messageHash,
bytes calldata signature
) external view returns (bool valid);
function signerSetInfo()
external view returns (
uint256 totalSigners,
uint256 threshold,
uint256 rotationEpoch,
bytes32 publicKeyHash
);
function proposeRotation(
address[] calldata newSigners,
uint256 newThreshold
) external;
event SignerSetRotated(
uint256 epoch,
uint256 totalSigners,
uint256 threshold,
bytes32 publicKeyHash
);
}
\end{lstlisting}
MPC threshold ECDSA produces a single on-chain signature regardless of signer set size. This costs constant gas for verification, unlike multisig which scales linearly with signer count.
\begin{theorem}[Byzantine Fault Tolerance]
With $n = 7$ signers and threshold $t = 5$, the bridge tolerates $f = 2$ Byzantine (compromised) signers. An attacker must compromise $t = 5$ signers to forge a bridge message. The economic cost of compromise is $5 \times 10{,}000 = 50{,}000$ LUX in slashable stake.
\end{theorem}
\section{Asset Bridging Mechanics}
\subsection{Native Token (ZOO/LUX)}
\begin{itemize}
\item \textbf{Zoo to Lux}: ZOO locked in ZooBridgeGateway. Wrapped ZOO (wZOO) minted on Lux as LRC-20 (LP-3800).
\item \textbf{Lux to Zoo}: wZOO burned on Lux. ZOO unlocked on Zoo L2.
\item LUX follows the reverse path (locked on Lux, wrapped on Zoo).
\end{itemize}
\subsection{ZRC-20 Tokens}
Tokens locked on the source chain. A bridged representation is minted on the destination per LP-3800. Conservation extensions (donation rate, impact credits) are restored from on-chain state on return.
\subsection{ZRC-721 NFTs}
\begin{enumerate}
\item NFT locked on Zoo L2.
\item Species metadata serialized via ABI encoding and included in \texttt{BridgeMessage.metadata}.
\item Provenance chain snapshot uploaded to IPFS; CID included in metadata.
\item TBA frozen (ZIP-0703).
\item Mirror LRC-721 minted on Lux with full metadata.
\item On return: mirror burned, original unlocked, TBA unfrozen, ``bridged\_back'' provenance record added.
\end{enumerate}
\subsection{ZRC-1155 Multi-Tokens}
Multiple token IDs and amounts can be bridged in a single message. Soulbound tokens MUST NOT be bridged; the gateway rejects any \texttt{bridgeOut} for non-transferable token IDs.
\section{Metadata Serialization}
\label{sec:metadata}
\begin{lstlisting}[language=Solidity,caption=ZRC-721 metadata serialization]
bytes memory metadata = abi.encode(
speciesMetadata, // SpeciesMetadata
provenanceSnapshotCID, // IPFS CID
conservationFundAddress,
royaltySplit, // (conservBps, creatorBps)
tbaAddress, // TBA on source chain
tbaBalanceSnapshot // ZOO balance in TBA
);
\end{lstlisting}
ABI encoding ensures deterministic serialization. The destination chain deserializes the metadata and reconstructs the on-chain state. The provenance CID provides a full history reference without including the entire provenance chain in the bridge message.
\section{TBA Freeze/Mirror}
\label{sec:tba}
\begin{algorithm}[t]
\caption{TBA Freeze on Bridge-Out}
\label{alg:freeze}
\begin{algorithmic}[1]
\STATE \textbf{Input}: NFT $N$, destination chain $D$
\STATE Lock $N$ in bridge gateway
\STATE $\text{TBA.state()} \leftarrow \text{TBA.state()} + 1$ \COMMENT{Invalidate pending ops}
\STATE $\text{TBA.frozen} \leftarrow \text{true}$
\STATE Serialize TBA balance snapshot
\STATE Include in bridge message metadata
\STATE Relay to destination chain $D$
\STATE Create mirror TBA on $D$ with same salt
\end{algorithmic}
\end{algorithm}
The freeze and NFT lock are atomic within a single \texttt{bridgeOut} transaction. This prevents a race condition where the TBA is accessed between the lock and the freeze.
\begin{theorem}[Cross-Chain Asset Safety]
A TBA's assets cannot be double-spent across chains. The freeze mechanism ensures exactly one chain has an active TBA at any time. Asset access on the inactive chain requires a bridge transfer, which is mediated by the MPC signer set.
\end{theorem}
\section{Fee Structure}
\begin{table}[t]
\centering
\begin{tabular}{lcc}
\toprule
\textbf{Operation} & \textbf{Fee} & \textbf{Recipient} \\
\midrule
Native token bridge & 0.1\% & MPC signers \\
ZRC-20 bridge & 0.05\% & 50\% signers, 50\% conservation \\
ZRC-721 bridge & Flat 10 ZOO & Conservation fund \\
ZRC-1155 batch & 5 ZOO per type & Conservation fund \\
\bottomrule
\end{tabular}
\caption{Bridge fee schedule.}
\label{tab:fees}
\end{table}
\section{Liveness and Safety}
\label{sec:liveness}
\textbf{Liveness}: If the MPC signer set is unavailable for $> 72$ hours, a governance-controlled emergency withdrawal path activates. Users can reclaim locked assets after a 7-day timelock.
\textbf{Safety}: Messages expire after \texttt{deadline} (default 24 hours). Expired messages are rejected. Each \texttt{messageId} is processed at most once.
\textbf{Finality}: Bridge messages are relayed only after source chain finality. Zoo L2 inherits sub-second finality from the Lux primary network. Lux C-Chain requires 2~seconds.
\textbf{Rate limiting}: Per ZIP-0022, the bridge enforces per-transaction, hourly, and daily volume limits:
\begin{table}[t]
\centering
\begin{tabular}{lcc}
\toprule
\textbf{Parameter} & \textbf{Value} & \textbf{Adjustable} \\
\midrule
Per-transaction limit & 1,000,000 ZOO & Governance \\
Hourly volume limit & 10,000,000 ZOO & Governance \\
Daily volume limit & 50,000,000 ZOO & Governance \\
Emergency pause & 25\% of locked supply in 24h & Fixed \\
\bottomrule
\end{tabular}
\caption{Bridge rate limiting parameters.}
\label{tab:ratelimit}
\end{table}
\begin{theorem}[Supply Invariant]
The bridge enforces:
\begin{equation}
S_{\text{zoo\_l2}} + S_{\text{locked}} = S_{\text{initial}} + S_{\text{emissions}}
\end{equation}
An on-chain audit function verifies this invariant and pauses the bridge if violated.
\end{theorem}
\section{Security Analysis}
\label{sec:security}
\subsection{MPC Key Compromise}
If $t$ signers are compromised, the bridge is vulnerable to fraudulent minting. Mitigations: 30-day key rotation, geographic distribution of signers, HSMs, and slashing for equivocation.
\subsection{Replay Attacks}
Each \texttt{messageId} is tracked in \texttt{processedMessages}. The nonce and deadline fields provide additional replay protection.
\subsection{Metadata Tampering}
The \texttt{messageHash} covers all fields including \texttt{metadata}. MPC signature verification ensures integrity.
\subsection{Censorship}
If MPC relayers censor specific messages, the 72-hour liveness fallback allows governance to force-process messages.
\subsection{TBA Freeze Race Condition}
The TBA must be frozen before the bridge message is relayed. The \texttt{bridgeOut} function atomically locks the NFT and freezes the TBA in a single transaction.
\subsection{Signer Set Rotation}
During rotation, both old and new signer sets are valid for a 24-hour overlap period. Messages signed by either set are accepted during this window.
\section{Related Work}
Lux Teleport (LP-6332)~\cite{teleport2022} provides the transport layer; ZIP-0800 adds the application layer for conservation metadata. LayerZero~\cite{layerzero2022} provides generic cross-chain messaging but lacks conservation metadata support. Wormhole~\cite{wormhole2022} uses a guardian set similar to our MPC signer set. Axelar~\cite{axelar2022} provides general message passing with threshold signatures. Chainlink CCIP~\cite{ccip2023} offers cross-chain interoperability with oracle-based verification. The Cosmos IBC protocol~\cite{ibc2019} provides trustless interchain communication for Tendermint-based chains; Lux Warp messaging provides analogous guarantees within the Lux ecosystem.
\section{Conclusion}
The Zoo $\leftrightarrow$ Lux bridge combines trustless Warp messaging for intra-ecosystem transfers with MPC threshold signatures for external chain access. Conservation metadata preservation ensures that wildlife NFTs, impact credits, and token-bound account states survive cross-chain transfers intact. Rate limiting and the supply invariant provide defense-in-depth against the bridge exploits that have plagued cross-chain DeFi.
\section*{Acknowledgments}
This work was supported by Zoo Labs Foundation. We thank the Lux team for the Teleport architecture and Warp messaging protocol.
\bibliographystyle{plain}
\begin{thebibliography}{20}
\bibitem{warp2023}
Lux Industries Inc ``Lux Warp Messaging,'' \url{https://docs.lux.network/warp}, 2023.
\bibitem{teleport2022}
Lux Industries Inc ``LP-6332: Teleport Bridge Architecture,'' Lux Protocol Standards, 2022.
\bibitem{gg20}
R.~Gennaro and S.~Goldfeder, ``One Round Threshold ECDSA with Identifiable Abort,'' \textit{IACR ePrint} 2020/540, 2020.
\bibitem{lp3800}
Lux Industries Inc ``LP-3800: Bridged Asset Standard,'' Lux Protocol Standards, 2022.
\bibitem{lp6000}
Lux Industries Inc ``LP-6000: B-Chain Bridge Specification,'' Lux Protocol Standards, 2022.
\bibitem{layerzero2022}
R.~Zarick et al., ``LayerZero: An Omnichain Interoperability Protocol,'' Technical Report, 2022.
\bibitem{wormhole2022}
Wormhole, ``Wormhole: Generic Message Passing Protocol,'' Technical Documentation, 2022.
\bibitem{axelar2022}
S.~Haouari et al., ``Axelar: Connecting All Blockchains,'' Technical Documentation, 2022.
\bibitem{ccip2023}
Chainlink, ``CCIP: Cross-Chain Interoperability Protocol,'' Technical Documentation, 2023.
\bibitem{ibc2019}
C.~Goes et al., ``The Interblockchain Communication Protocol,'' Cosmos Network, 2019.
\bibitem{zip0022}
Zoo Labs Foundation, ``ZIP-0022: Multi-Chain Bridge Standard,'' Zoo Improvement Proposals, 2025.
\bibitem{zip0042}
Zoo Labs Foundation, ``ZIP-0042: Cross-Ecosystem Interoperability,'' Zoo Improvement Proposals, 2024.
\bibitem{zip0100}
Zoo Labs Foundation, ``ZIP-0100: Zoo Contract Registry,'' Zoo Improvement Proposals, 2024.
\bibitem{zip0700}
Zoo Labs Foundation, ``ZIP-0700: ZRC-20 Fungible Token Standard,'' Zoo Improvement Proposals, 2025.
\bibitem{zip0701}
Zoo Labs Foundation, ``ZIP-0701: ZRC-721 NFT Standard,'' Zoo Improvement Proposals, 2025.
\bibitem{zip0703}
Zoo Labs Foundation, ``ZIP-0703: Token-Bound Accounts for Wildlife,'' Zoo Improvement Proposals, 2025.
\bibitem{hip0101}
Hanzo AI, ``HIP-0101: Hanzo-Lux Bridge Protocol,'' Hanzo Improvement Proposals, 2023.
\bibitem{ronin2022}
S.~Gudgeon et al., ``Ronin Bridge Hack: A Post-Mortem,'' Technical Analysis, 2022.
\bibitem{nomad2022}
Nomad, ``Nomad Bridge Exploit: Root Cause Analysis,'' Technical Report, 2022.
\bibitem{eip7683}
Across Protocol, ``EIP-7683: Cross-Chain Intents,'' Ethereum Improvement Proposals, 2023.
\end{thebibliography}
\end{document}