A compliance-preserving token bridge is a cross-chain messaging protocol that enables the transfer of digital assets while embedding regulatory logic into the transfer flow. Unlike standard bridges that focus solely on security and speed, these systems must verify sender/recipient identities, screen transactions against sanctions lists, and enforce jurisdiction-specific rules—all while maintaining the trust-minimized guarantees of blockchain. The core challenge is integrating these checks without creating a centralized point of failure or control that undermines the system's credibility.
How to Architect a Compliance-Preserving Token Bridge
How to Architect a Compliance-Preserving Token Bridge
Designing a cross-chain bridge that enforces regulatory compliance without sacrificing decentralization requires a novel architectural approach.
The architecture typically revolves around a modular design separating the core bridging logic from the compliance engine. The bridge's smart contracts handle asset locking, minting, and proof verification. A separate, configurable Compliance Module—which can be implemented as an on-chain registry, a network of oracles, or a zero-knowledge proof verifier—intercepts transfer messages to validate them against predefined policies. This separation allows the compliance rules to be upgraded or tailored for different asset types (e.g., securities vs. utility tokens) without modifying the core bridge contracts.
Key technical components include Attested Identifiers for participants, such as decentralized identifiers (DIDs) or verified credentials from identity oracles like Chainlink or Ethereum Attestation Service. For transaction screening, the bridge can query off-chain Sanctions Oracle services via a commit-reveal scheme or use a zk-SNARK to prove a wallet is not on a banned list without revealing its address. The choice between optimistic, zero-knowledge, or oracle-based verification depends on the required privacy, finality speed, and cost.
Implementing this requires careful smart contract design. A basic flow in Solidity might involve a ComplianceRegistry contract that holds attestations. The bridge's transfer function would check the registry before proceeding:
solidityfunction crossChainTransfer(address to, uint256 amount) external { require(complianceRegistry.isVerified(msg.sender), "Sender not KYC'd"); require(!sanctionsOracle.isSanctioned(to), "Recipient sanctioned"); // Proceed with locking/burning tokens }
Using upgradeable proxy patterns for the compliance module is common to adapt to evolving regulations.
Ultimately, the goal is to achieve enforceable compliance—not just retroactive reporting. This means the bridge must prevent non-compliant transfers from settling on the destination chain. Successful architectures, like those explored by Polygon's Nightfall or Baseline Protocol, use cryptographic proofs to balance auditability with privacy. The future lies in standardizing compliance interfaces (e.g., ERC-7580 for composable attestations) so that bridges can interoperate with a shared layer of regulatory truth, reducing complexity and fragmentation across the ecosystem.
Prerequisites
Before architecting a compliance-preserving token bridge, you need a solid understanding of core blockchain concepts, smart contract development, and regulatory frameworks.
You must be proficient in smart contract development using Solidity (or the native language of your target chain). This includes understanding security best practices, upgrade patterns like the Transparent Proxy or UUPS, and gas optimization. Familiarity with the ERC-20 and ERC-721 token standards is essential, as these are the primary assets you will be bridging. You should also understand how to interact with oracles like Chainlink for price feeds and Axelar or Wormhole for generalized message passing, which are often used in cross-chain architectures.
A deep understanding of the source and destination blockchain architectures is critical. This includes their consensus mechanisms (e.g., Proof-of-Stake, Proof-of-Work), transaction finality times, and native token economics. For EVM-compatible chains, you'll work with tools like Hardhat or Foundry for development and testing. For non-EVM chains (e.g., Solana, Cosmos), you need knowledge of their respective SDKs and execution environments. Understanding the security models of different bridge designs—lock-and-mint, burn-and-mint, and liquidity networks—is necessary to choose the right one for your compliance needs.
Compliance logic must be encoded into the bridge's smart contracts. This requires understanding regulatory requirements like the Travel Rule, which mandates the sharing of sender/receiver information for transactions above certain thresholds. You will need to design systems that can verify user identities (e.g., integrating with KYC providers like Fractal or Civic) and screen addresses against sanctions lists without compromising decentralization or user privacy. Concepts like zero-knowledge proofs (ZKPs) may be relevant for proving compliance without revealing underlying data.
You should be comfortable with backend development for operating relayers or watcher services that monitor blockchain events. These off-chain components are often written in Node.js, Go, or Python and are responsible for submitting transactions, validating proofs, and triggering compliance checks. Knowledge of secure key management solutions (e.g., HashiCorp Vault, AWS KMS) is crucial for handling the private keys that control bridge assets and admin functions.
Finally, you must understand the testing and auditing lifecycle. This involves writing comprehensive unit and integration tests for your smart contracts, simulating mainnet forks with tools like Tenderly or Ganache, and engaging professional audit firms like OpenZeppelin or Trail of Bits. A compliance-preserving bridge has a higher attack surface due to its added logic, making rigorous security practices non-negotiable before any mainnet deployment.
How to Architect a Compliance-Preserving Token Bridge
This guide details the architectural patterns and smart contract logic required to build a cross-chain bridge that enforces regulatory compliance, such as sanctions screening, without sacrificing decentralization or user privacy.
A compliance-preserving bridge integrates regulatory logic directly into its cross-chain messaging layer. Unlike a standard bridge that only verifies transaction validity, this architecture must also validate that a transfer adheres to predefined rules before finalizing it on the destination chain. The core challenge is executing this validation in a trust-minimized way. Common approaches involve using zero-knowledge proofs (ZKPs) to prove a user's address is not on a sanctions list without revealing the address itself, or employing a modular design where a permissioned attestor signs off on compliant messages. The bridge's security model depends heavily on which component holds the compliance logic.
The architecture typically separates concerns into distinct layers. The Bridge Core handles the fundamental cross-chain asset locking, minting, and message relaying, similar to protocols like Axelar or LayerZero. A Compliance Module is then attached as a verifier or middleware. For example, a smart contract on the source chain could require a valid ZK proof attesting to compliance before it releases funds or emits a cross-chain message. Alternatively, a set of permissioned Guardian Nodes could run compliance checks off-chain and only attest to messages that pass. This separation ensures the bridge core remains upgradeable and the compliance rules can be updated independently to match evolving regulatory requirements.
Implementing this requires careful smart contract design. Below is a simplified example of a bridge vault that checks for a compliance attestation signature before releasing funds. This uses a modular approach where an off-chain service (the Attestor) signs messages for approved transfers.
solidity// Simplified ComplianceVault on Source Chain contract ComplianceVault { address public bridgeRouter; address public attestor; mapping(bytes32 => bool) public processedMessages; function lockTokens(address user, uint256 amount, bytes32 messageId, bytes memory attestationSig) external { require(msg.sender == bridgeRouter, "Unauthorized"); require(!processedMessages[messageId], "Message already processed"); // Recreate the message hash that was signed off-chain bytes32 messageHash = keccak256(abi.encodePacked(user, amount, messageId)); bytes32 ethSignedMessageHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", messageHash)); // Verify the attestation signature came from the trusted attestor require(recoverSigner(ethSignedMessageHash, attestationSig) == attestor, "Invalid compliance attestation"); // If signature is valid, process the lock processedMessages[messageId] = true; _lock(user, amount); // Internal function to hold tokens emit TokensLocked(user, amount, messageId); } }
The critical logic is in the require statement that checks the attestationSig. This signature is only provided if the user's address passed an off-chain compliance check.
Key considerations for production systems include data freshness and failure modes. The compliance state (e.g., a sanctions list) is dynamic, so proofs or attestations must have a short validity period to prevent using stale data. Architects must also decide on behavior for false positives (a compliant user is blocked). A robust system might include an appeal mechanism via a decentralized identifier (DID) or a governance override. Furthermore, to preserve privacy, consider integrating ZK circuits, such as those using the Circom library, to prove list non-membership. The trade-off is between auditability (a clear permissioned signature) and privacy (a ZK proof).
Ultimately, the goal is to create a verifiably compliant data flow. The state transition from 'locked on Chain A' to 'minted on Chain B' must be accompanied by a verifiable proof of compliance. This architecture allows projects to operate in regulated environments while maintaining the core value proposition of blockchain interoperability. Successful implementations, like some enterprise-focused deployments of Wormhole and Hyperlane, show that with careful design, compliance can be baked into the protocol layer without creating a centralized choke point.
Key Technical Concepts
Building a compliant bridge requires a layered approach, from core messaging to regulatory logic. These concepts define the technical foundation.
Modular Bridge Architecture
Separating core bridging logic from compliance enforcement for upgradeability and regulatory agility. A typical stack includes:
- Vault/Adapter Layer: Handles asset locking/minting on each chain.
- Messaging Layer: Transfers proof and instruction data (see above).
- Verification Layer: Validates incoming messages on the destination chain.
- Compliance Module: A separate, upgradeable smart contract that intercepts transfer requests to apply rules (e.g., OFAC checks). This design allows the compliance logic to be updated without redeploying the entire bridge.
On-Chain Compliance Primitives
Smart contract functions that enforce regulatory rules programmatically. These are implemented within the Compliance Module.
- Sanctions Screening: Checking sender/recipient addresses against an on-chain allowlist, denylist, or via a zero-knowledge proof from an oracle (e.g., Chainalysis Oracle).
- Transaction Limits: Enforcing daily volume caps or geographic restrictions per address.
- Travel Rule Logic: Structuring data payloads to include required sender information (IVMS 101 data) for VASPs.
- Pause & Rollback Functions: Emergency controls to halt transfers or revert them if a compliance violation is discovered post-transfer.
Decentralized Attestation & Proofs
Using cryptographic proofs to verify off-chain compliance states without revealing sensitive data. This balances transparency with privacy.
- Zero-Knowledge Proofs (ZKPs): A relayer can provide a zk-SNARK proving a user's address is not on a sanctions list, without revealing the list contents. Projects like Aztec and zkSync use this for private compliance.
- Attestation Oracles: Services like Etherscan's Verified Source Code or KYC providers can issue signed attestations that a wallet has passed checks. The bridge contract verifies the oracle's signature.
- Proof of Innocence: Techniques where users submit a cryptographic proof that their funds are not from a sanctioned source, used in privacy pools research.
Sovereign Bridging & Rollups
Architecting the bridge itself as a sovereign rollup or appchain for maximum control over compliance logic. Instead of deploying smart contracts on general-purpose L2s, the bridge operates its own settlement layer (e.g., using Celestia for data availability) and execution environment.
- Benefits: Full control over transaction ordering, fee market, and upgrade keys allows for rapid compliance rule updates and integration with traditional legal frameworks.
- Trade-offs: Introduces complexity in validator decentralization and liquidity fragmentation. Examples include projects building with the Polygon CDK or OP Stack that include native compliance features at the chain level.
Step 1: Deploy the Source-Chain Compliance Vault
The first step in building a compliance-preserving bridge is deploying the on-chain component that enforces rules before tokens can leave the source chain. This vault acts as the gatekeeper for all outbound transfers.
A compliance vault is a smart contract deployed on the source chain (e.g., Ethereum Mainnet) that holds the tokens to be bridged. Its primary function is not just custody, but programmatic enforcement of transfer policies. Before any tokens are released to the bridge's lock-and-mint or burn-and-mint mechanism, the vault's logic validates the transaction against a configurable ruleset. This could include checks for sanctioned addresses, transaction volume limits, or geographic restrictions based on the origin wallet's verifiable credentials.
Architecturally, the vault must implement a secure interface for a designated Compliance Verifier. This can be an off-chain service, a decentralized oracle network like Chainlink, or an on-chain registry. The typical flow is: 1) A user initiates a bridge transfer, 2) The bridge contract calls the vault's transfer function, 3) The vault queries the verifier with the transaction details (sender, amount, destination chain ID), 4) If the verifier returns a successful attestation, the vault releases the tokens to the bridge. A failed check should revert the transaction.
Here is a simplified Solidity snippet for a vault's core transfer function:
solidityfunction transferToBridge(address to, uint256 amount, uint64 destChainId) external onlyBridge { // Query the compliance verifier contract bool isCompliant = IComplianceVerifier(verifierAddress).checkTransfer(msg.sender, amount, destChainId); require(isCompliant, "Compliance check failed"); // If compliant, proceed with the transfer to the bridge connector _transfer(address(this), to, amount); }
The onlyBridge modifier ensures only the authorized bridge contract can initiate transfers, preventing direct withdrawals.
Key security considerations for the vault include upgradability patterns (using transparent proxies like OpenZeppelin) to adapt to new regulations, pause functionality for emergency stops, and role-based access control for managing verifier addresses and bridge connectors. The vault's state and logic should be thoroughly audited, as it holds the actual token assets. For ERC-20 tokens, the vault is typically deployed once per asset, requiring a constructor that initializes with the token address and the initial verifier.
Deploying this contract establishes the single source of truth for compliance on the origin chain. All subsequent bridge steps—like emitting events for relayers or minting on a destination chain—depend on this vault's approval. By centralizing the rule enforcement at the point of exit, you create an audit trail and prevent non-compliant tokens from ever entering the bridge's cross-chain messaging system, which is much harder to control retroactively.
Step 2: Implement Verifiable Credential Attestation
This step integrates a decentralized identity layer to verify user credentials on-chain, enabling selective, permissioned transfers across a token bridge based on regulatory status.
Verifiable Credentials (VCs) are tamper-evident digital claims issued by trusted entities, such as licensed custodians or KYC providers. In a compliance bridge, a user must obtain a VC—like a proof of accredited investor status or jurisdictional whitelist—before their wallet address is authorized to receive tokens on the destination chain. The core architectural shift is moving from a simple message-passing bridge to one that checks an on-chain registry or verifies a cryptographic proof attached to the cross-chain message. This ensures the compliance logic is enforced by the bridge's smart contracts, not an off-chain operator.
The implementation typically involves two smart contracts: an Attestation Registry and a Conditional Bridge. The registry, which could be a simple mapping or a merkle tree root stored on-chain, maintains a list of verified user addresses and their credential types. The conditional bridge contract, which holds the locked/minted tokens, will query this registry during the executeTransaction or mint function. For example, a function modifier like onlyVerifiedUsers would revert the transaction if the recipient's address is not found in the active registry, blocking the transfer.
For a more privacy-preserving approach, you can use zero-knowledge proofs (ZKPs). Instead of a public registry, users generate a ZK-SNARK proof that they possess a valid, unrevoked VC without revealing its contents. The bridge contract needs a verifier contract (e.g., using circom/snarkjs or a ZK rollup circuit) to validate this proof. This model, while more complex, allows for selective disclosure—proving you are from a permitted country without revealing which one—and reduces on-chain data leakage. Protocols like Semaphore or Sismo's ZK Badges offer frameworks for such attestations.
Key design considerations include credential revocation and interoperability. Credentials can expire or be revoked; your system must have a secure method to update the on-chain state, often via a multisig or a decentralized identifier (DID) controller. For interoperability, consider adopting standards like W3C Verifiable Credentials or EIP-712 for signed typed data, which make VCs portable across different bridges and dApps. The attestation logic should be modular, allowing the bridge to support multiple credential issuers and types without requiring a contract upgrade.
Here is a simplified code snippet for a bridge mint function with a registry check:
soliditycontract ConditionalBridge { IAttestationRegistry public registry; function mintTo(address recipient, uint256 amount, bytes32 txId) external { require(registry.isVerified(recipent), "Recipient not verified"); // ... proceed with minting logic } }
This pattern cleanly separates concerns: the registry manages identity, and the bridge manages asset transfer, coupling them only at the point of authorization.
Ultimately, implementing VC attestation transforms a bridge from a simple pipe into a policy-enforcement layer. It allows developers to build bridges that comply with Travel Rule provisions or MiCA regulations programmatically. The trade-off is increased complexity and gas costs for verification, but this is essential for institutional adoption and operating in regulated markets. The next step involves designing the failure modes and dispute resolution for when attestations are challenged.
Step 3: Build the Destination-Chain Minting Contract
This step focuses on the smart contract that receives cross-chain messages and mints or burns tokens on the destination chain, enforcing compliance logic before any state change.
The destination-chain minting contract is the authoritative endpoint for your token on a new blockchain. Its primary functions are to mint tokens upon receiving a valid deposit message from the source chain and to burn tokens to initiate a withdrawal back. Crucially, this contract must validate two key elements before executing any mint: the authenticity of the incoming message via a verifier (like a light client or oracle) and the compliance status of the transaction against your chosen ruleset (e.g., sanctions screening). This separation of concerns—transport security from business logic—is a core security pattern.
A typical contract interface includes functions like receiveMessage(bytes calldata message, bytes calldata proof) and burn(address to, uint256 amount). The receiveMessage function decodes the payload, which should contain the sender's address on the source chain, the recipient's address on this chain, the token amount, and a unique nonce. It then calls the verifier contract (e.g., an optimistic or zk-based light client) to verify the proof against a known block header root. Only if this cryptographic verification passes should the contract proceed to compliance checks.
Compliance checks are executed by calling an on-chain rules engine or policy contract. For example, before minting, the contract might query a registry like Chainalysis's Oracle for Sanctions to ensure neither the source nor destination address is on a sanctions list. The minting logic should be guarded by a modifier or require statement that enforces a successful check. This creates a programmable compliance layer that is transparent and immutable, a significant advantage over opaque traditional finance systems.
Here is a simplified code snippet illustrating the core minting logic in Solidity after verification:
solidityfunction _mintTokens(Message calldata message) internal { // Check compliance via a policy contract require(compliancePolicy.checkTransfer(message.from, message.to, message.amount), "Compliance check failed"); // Ensure nonce is processed only once to prevent replay attacks require(!processedNonces[message.nonce], "Message already processed"); processedNonces[message.nonce] = true; // Mint tokens to the designated recipient _mint(message.to, message.amount); emit TokensMinted(message.nonce, message.from, message.to, message.amount); }
The burn function is simpler but equally important: it destroys the caller's tokens and emits an event that off-chain relayers watch to initiate the withdrawal process on the source chain.
Finally, you must rigorously test this contract. Use forked mainnet tests to simulate real verification and compliance calls. Key test scenarios include: successful mint with valid proof and compliance, failed mint due to a bad proof, failed mint due to a sanctions hit, replay attack prevention, and correct burn event emission. The contract's upgradeability strategy (if any) must also be carefully designed, as it holds the token supply. Using a transparent proxy pattern with a dedicated multisig or DAO for upgrades is a common practice to balance flexibility with security.
Compliance Data Mapping Between Chains
Comparison of methods for synchronizing regulatory compliance data (e.g., sanctions lists, KYC status) across a token bridge's source and destination chains.
| Data Field & Mechanism | On-Chain Attestations | Off-Chain Oracle Network | Zero-Knowledge Proofs |
|---|---|---|---|
Sanctions List Updates | |||
Real-time KYC Status | |||
Transaction-Specific Compliance Proof | |||
Data Freshness (Update Latency) | ~1-2 hours | < 5 minutes | Per-transaction |
Cross-Chain Gas Cost for Verification | $5-15 | $0.10-0.50 | $2-8 |
Data Privacy | Public | Private to Validators | Fully Private |
Integration Complexity | Low | Medium | High |
Reliance on External Trust | High (Bridge Validators) | Medium (Oracle Committee) | Low (Cryptography) |
Step 4: Set Up the Attestation Relayer Network
Implement the decentralized off-chain service that validates and relays compliance attestations between chains, ensuring only authorized transactions are processed.
The Attestation Relayer Network is the critical off-chain component that enforces your bridge's compliance logic. Unlike a single centralized oracle, this is a decentralized network of relayers responsible for fetching, validating, and submitting attestations. Its primary function is to query the source chain's compliance contract, verify a transaction's attestation status, and relay a proof of that status to the destination chain's bridge contract. This separation of concerns keeps the on-chain bridge contracts lightweight and gas-efficient, moving complex signature verification and state query logic off-chain.
Architecturally, each relayer runs a service that monitors for Deposit events on the source chain. Upon detecting an event, it calls the verifyAttestation function on the source chain's ComplianceRegistry. The relayer must then collect the necessary cryptographic proof—such as a Merkle proof if using a Merkle tree of attestations or a signature bundle if using a multi-sig scheme. This proof is packaged into a structured message, signed by the relayer's private key for accountability, and finally submitted to the destination chain's bridge contract via a releaseTokens function call.
To achieve decentralization and fault tolerance, you should deploy multiple relayers operated by independent entities. Use a threshold signature scheme (like Schnorr or BLS) or a simple M-of-N multisig model where the destination contract requires M signed attestation messages from N designated relayers before releasing funds. This prevents a single point of failure or censorship. Tools like the OpenZeppelin Defender Relayer network or a custom Golang/Python service using Web3.js or Ethers.js libraries are common implementations. Relayers must be funded with native gas tokens on both the source and destination chains to pay for transaction fees.
Key configuration parameters for your relayer software include: the RPC endpoints for both blockchains, the contract addresses for the Bridge and ComplianceRegistry, the private key for the relayer wallet, and the required threshold (M of N). The service logic should include retry logic for RPC calls, gas price estimation for timely submissions, and monitoring/alerting for failed attestation attempts. This setup ensures the bridge remains operational and compliant even if some relayers go offline.
Security for the relayer network itself is paramount. Consider implementing slashing mechanisms where relayers that sign invalid attestations lose a staked bond. Access to the relayer signing keys should be secured via hardware modules or managed cloud services like AWS KMS or GCP Cloud HSM. Furthermore, the network should be permissioned at launch, with a clear governance process for adding or removing relayer nodes, transitioning towards a more permissionless model as the system matures and proves its security.
Resources and Tools
Practical tools and architectural components for building token bridges that meet regulatory requirements without sacrificing user privacy or decentralization.
Frequently Asked Questions
Common technical questions and solutions for building secure, compliant cross-chain bridges.
A compliance-preserving bridge is a cross-chain messaging protocol that integrates regulatory controls, such as sanctions screening and transaction monitoring, directly into its smart contract logic. Unlike standard bridges like Multichain or Stargate, which focus solely on asset transfer, these bridges enforce rules on-chain.
Key differences:
- On-Chain Policy Engine: Rules (e.g., blocklisted addresses) are stored and executed in smart contracts, not off-chain servers.
- Selective Blocking: Can prevent a transfer from being finalized on the destination chain if it violates a policy.
- Auditability: All compliance decisions create an immutable, public record on the blockchain.
This architecture is crucial for institutions and protocols operating in regulated environments, as it provides provable compliance.
Conclusion and Next Steps
This guide has outlined the core components and design patterns for building a token bridge that prioritizes regulatory compliance without sacrificing decentralization.
Architecting a compliance-preserving bridge requires a multi-layered approach. The foundation is a modular design that separates the core bridging logic from compliance verification. This is typically achieved using a verifier contract pattern, where a separate, upgradeable module handles sanctions screening and KYC/AML checks. The bridge's core Bridge.sol contract only processes transfers that receive a valid attestation from this verifier. This separation of concerns allows the compliance rules to evolve independently of the bridge's security-critical settlement layer.
The next step is implementing the verification logic itself. For on-chain compliance, you can integrate with services like Chainalysis's SanctionsOracle or integrate a decentralized attestation registry like EAS (Ethereum Attestation Service). A common pattern is to maintain a permissioned relayer set that is responsible for submitting proofs of successful off-chain checks. These relayers query licensed providers, then submit a cryptographic proof (e.g., a signature) to the verifier contract, which whitelists the user's address for a single transaction or a time-bound session.
Your implementation must also handle edge cases and failure modes. What happens if a compliance provider's API is down? Your system should have clear states: transactions can be pending, approved, or rejected. Consider implementing expiration times for pending approvals and a governance-controlled pause mechanism for the verifier module. Furthermore, data privacy is critical; design your system so sensitive PII (Personally Identifiable Information) is never stored on-chain, with only attestation hashes or zero-knowledge proofs being recorded.
To move from theory to practice, start by forking and studying existing open-source implementations. Review the Axelar cgp-solidity contracts for cross-chain message passing patterns, or examine how Circle's CCTP implements attestation-based minting. Set up a local testnet with two EVM chains (e.g., Foundry Anvil instances) and deploy a minimal bridge with a mock verifier. Your first milestone should be a working flow: lock tokens on Chain A, generate a mock compliance approval, and mint tokens on Chain B.
The final phase involves rigorous testing and considering advanced patterns. Write comprehensive tests for your verifier contract, simulating various compliance outcomes. Explore zero-knowledge proofs (ZKPs) for privacy-preserving compliance, where a user proves they are not on a sanctions list without revealing their identity. Also, plan for interoperability: your compliance state should be portable. Using a standard like IBC or a generic message bridge can allow a compliance attestation created on one chain to be reused on another, improving user experience.
Building a compliant bridge is an ongoing process. Stay updated with regulatory guidance from bodies like FATF and technical standards from industry groups. The goal is a system that is transparent, auditable, and user-centric, proving that decentralized finance can operate within legal frameworks. Continue your learning by engaging with the community on forums like the Ethereum Magicians and reviewing audit reports of major bridge protocols to understand real-world vulnerabilities and solutions.