Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
Free 30-min Web3 Consultation
Book Consultation
Smart Contract Security Audits
View Audit Services
Custom DeFi Protocol Development
Explore DeFi
Full-Stack Web3 dApp Development
View App Services
LABS
Guides

How to Architect a Cross-Chain Liquidity Pool

A technical guide for developers on designing liquidity pools that operate across multiple blockchains, covering architecture, asset handling, and incentive models.
Chainscore © 2026
introduction
ARCHITECTURE GUIDE

How to Architect a Cross-Chain Liquidity Pool

A technical guide to designing the core components of a cross-chain liquidity pool, covering messaging, asset representation, and pool logic.

A cross-chain liquidity pool is a decentralized application (dApp) that allows users to provide and trade assets across multiple blockchains. Unlike a single-chain pool like Uniswap v3 on Ethereum, a cross-chain pool must manage assets that exist natively on different, isolated networks. The core architectural challenge is enabling secure, trust-minimized communication between these chains to synchronize pool state and facilitate asset transfers. This requires a modular design with three key layers: a messaging layer (like a cross-chain bridge or interoperability protocol), an asset representation layer (using canonical or synthetic tokens), and the core pool smart contract logic.

The messaging layer is the most critical component. It is responsible for relaying messages—such as deposit confirmations, swap requests, and withdrawal instructions—between the pool's deployments on each supported chain. You must choose a protocol based on its security model and latency. For maximum security, use a validation protocol like the Inter-Blockchain Communication (IBC) protocol or a zkBridge, where relayers prove state validity. For broader EVM compatibility, you might integrate a general message passing system like LayerZero, Axelar, or Wormhole. Your pool's smart contracts will emit events that these protocols' on-chain endpoints pick up and relay.

On the asset layer, you must decide how to represent the foreign asset on the destination chain. The two primary models are canonical tokens and local synthetic tokens. A canonical token is the 'official' bridged version of an asset, like WETH on Arbitrum bridved via the Arbitrum bridge. A synthetic token is minted and burned by your pool's contracts to represent a deposit. For example, a user deposits ETH on Ethereum, a message is sent, and poolETH is minted for them on Polygon. The synthetic model gives your pool direct custody but introduces liquidity fragmentation; the canonical model relies on an external bridge's security but benefits from wider composability.

The pool logic layer contains the smart contract that manages liquidity, pricing, and swaps on each chain. This contract must be able to:

  • Accept deposits of local assets and mint liquidity provider (LP) tokens.
  • Execute swaps using a constant product formula (x * y = k) or a more advanced curve.
  • Lock local assets when a cross-chain swap is initiated and mint/burn synthetic assets as needed.
  • Process incoming cross-chain messages to credit users after a swap or deposit on a remote chain. Crucially, the contract must verify the authenticity of every incoming message using the chosen messaging layer's verification module to prevent forged transactions.

Here is a simplified code snippet for a cross-chain pool contract's core swap function, assuming a synthetic asset model and an external verifier for cross-chain messages:

solidity
function swapLocalToRemote(
    address tokenIn,
    uint256 amountIn,
    uint64 destChainId,
    address destReceiver
) external payable returns (bytes32 messageId) {
    // 1. Transfer tokens from user and update local pool reserves
    IERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn);
    _updateReserves(tokenIn, amountIn, true);
    
    // 2. Calculate amountOut on this chain using local pool logic
    uint256 amountOut = getAmountOut(amountIn, tokenIn, destChainDefaultToken);
    
    // 3. Lock the local 'amountOut' equivalent or burn synthetic token
    _lockTokens(destChainDefaultToken, amountOut);
    
    // 4. Send message via cross-chain messaging protocol
    bytes memory payload = abi.encode(destReceiver, amountOut);
    messageId = ICrossChainMessenger(MESSENGER).sendMessage{
        value: msg.value
    }(destChainId, payload);
    
    emit CrossChainSwapInitiated(messageId, msg.sender, destChainId, amountIn, amountOut);
}

This function handles the first leg of a cross-chain swap, locking funds and dispatching a message.

When architecting your pool, you must also design for liquidity management and fee economics. Liquidity can be asymmetric across chains, so you may need rebalancing incentives or a dynamic fee model that adjusts based on destination chain liquidity depth. Always conduct thorough audits on the messaging protocol integration and your custom pool logic, as this is a high-value attack surface. Successful examples of this architecture include Stargate Finance (using LayerZero) and some implementations within the Cosmos ecosystem using IBC. The end goal is a seamless user experience where a swap from ETH on Ethereum to USDC on Avalanche feels like a single transaction.

prerequisites
FOUNDATIONAL KNOWLEDGE

Prerequisites and Core Concepts

Before building a cross-chain liquidity pool, you need a solid grasp of the underlying technologies and design patterns. This section covers the essential concepts required to architect a secure and efficient multi-chain DeFi primitive.

A cross-chain liquidity pool is a smart contract system that allows users to deposit assets on one blockchain and have them represented as liquidity on another. Unlike a traditional Automated Market Maker (AMM) like Uniswap V3, which operates on a single network, a cross-chain pool requires a messaging layer to synchronize state and a bridging mechanism to lock/mint or burn/release assets. Core components include the pool contract on each chain, a relayer or oracle network, and a cross-chain messaging protocol like Axelar GMP, LayerZero, or Wormhole.

Understanding the bridging model is critical. The two primary models are lock-and-mint and liquidity network. In a lock-and-mint system (e.g., many wrapped assets), the native asset is locked in a vault on Chain A, and a synthetic representation is minted on Chain B. A liquidity network (e.g., Stargate, Chainlink CCIP) uses a pool of pre-deposited assets on the destination chain, enabling faster transfers. Your architecture must define which model your pool will use, as it dictates security assumptions and fee structures.

You must also master the concept of canonical representation. When an asset like USDC exists natively on Ethereum, Avalanche, and Arbitrum, which version is the "source of truth" for your pool? Many protocols designate the Ethereum version as canonical and treat others as bridged representations. Your pool's logic needs to handle the decimal differences, fee-on-transfer mechanics, and pausing functions that can vary between these different token contracts to prevent exploits.

Finally, grasp the oracle-relayer duality. Some systems like Wormhole rely on a network of guardian nodes (oracles) to attest to events, while others like Axelar use validators that both observe and relay messages. The security of your pool is directly tied to the economic security and decentralization of this underlying messaging layer. You'll need to integrate their SDKs, handle gas payments on the destination chain, and implement a secure message verification pattern in your contracts.

architecture-overview
CORE ARCHITECTURAL MODELS

How to Architect a Cross-Chain Liquidity Pool

Designing a cross-chain liquidity pool requires a secure, efficient architecture to manage assets across multiple blockchains. This guide outlines the core models and technical considerations.

A cross-chain liquidity pool architecture must solve three primary challenges: asset custody, state synchronization, and message relaying. Unlike a single-chain AMM like Uniswap V3, a cross-chain pool's liquidity is fragmented. The canonical model uses a hub-and-spoke design, where a primary liquidity hub (often on a chain like Ethereum or a dedicated appchain) holds the main reserve, while satellite pools on connected chains (e.g., Arbitrum, Polygon) hold wrapped representations. A secure bridging protocol like Axelar, LayerZero, or Wormhole is required to atomically lock/mint or burn/unlock assets as they move, ensuring the total supply across chains remains constant.

The smart contract architecture typically involves a CrossChainPoolManager on the hub chain and SatellitePool contracts on each connected chain. The manager maintains the master ledger of total liquidity and exchange rates. When a user deposits USDC on Arbitrum, the SatellitePool locks the tokens and sends a cross-chain message via the chosen bridge to the manager. The manager validates the message, credits the user's virtual share on the hub, and can instruct another SatellitePool on Polygon to mint a synthetic asset for the user. This requires a verifiable message queue and often an off-chain relayer service to submit proofs.

Security is the paramount concern. The system's trust assumptions are defined by the underlying bridge. Using a validated bridge (like IBC or optimistic rollup bridges) provides stronger guarantees than most external validator sets. A critical design pattern is the pause mechanism and governance-controlled upgradeability for all core contracts. You must also implement slippage controls and deadline parameters on cross-chain swaps, as transaction finality times vary between chains (e.g., 12 seconds on Polygon vs. 12 minutes on Ethereum).

For developers, implementing a basic cross-chain swap involves several contract calls. Below is a simplified flow for a swap from Chain A to Chain B:

solidity
// On Chain A SatellitePool
function swapCrossChain(
    address bridge,
    bytes32 destPool,
    uint256 amountIn,
    uint256 minAmountOut,
    uint64 destChainId
) external payable {
    IERC20(assetIn).transferFrom(msg.sender, address(this), amountIn);
    bytes memory message = abi.encode(
        msg.sender,
        destPool,
        assetOut,
        minAmountOut
    );
    IBridge(bridge).sendMessage{value: msg.value}(
        destChainId,
        message
    );
    emit SwapInitiated(...);
}

The corresponding SatellitePool on Chain B must have a function authenticated by the bridge to execute the final swap and transfer.

Key architectural decisions include choosing between a unified virtual AMM (where pricing is calculated on the hub) or localized AMMs (each SatellitePool runs its own pricing curve). Unified pricing, used by protocols like Stargate, ensures consistent rates but adds latency. Localized pricing, as seen in some multichain deployments of Curve, is faster but can lead to temporary arbitrage opportunities. You must also design the fee structure to account for gas costs on multiple chains and bridge fees, often taking a portion of the swap fee to replenish a relayer gas treasury.

Finally, thorough testing is non-negotiable. Use forked mainnet environments with tools like Foundry to simulate cross-chain interactions. Deploy to testnets that support your chosen bridge (e.g., Goerli, Mumbai, Arbitrum Goerli). Monitor for liquidity fragmentation and implement rebalancing incentives if one satellite pool becomes too depleted. The architecture must be documented clearly, highlighting the trust model, failure scenarios, and emergency withdrawal procedures for users in case of a bridge failure.

DESIGN PATTERNS

Cross-Chain Pool Architecture Comparison

Comparison of three primary architectural models for managing liquidity across multiple blockchains.

Architecture FeatureLock/Mint (e.g., Stargate)Burn/Mint (e.g., Axelar)Liquidity Network (e.g., Chainflip)

Native Asset Support

Canonical Token Creation

Primary Security Model

Validator Set

Validator Set

Threshold Signature Scheme (TSS)

Liquidity Fragmentation

High (per chain)

Medium (hub chain)

Low (unified pool)

Typical Finality Time

10-30 minutes

1-10 minutes

< 1 minute

Bridge-Specific Risk

High (lockup contract)

Medium (mint control)

Low (no user lockup)

Example Fee Structure

0.06% + gas

Gas-only on destination

0.1% swap fee

Developer Integration

Messaging SDK

General Message Passing

Atomic Swap API

asset-management
LIQUIDITY ENGINEERING

How to Architect a Cross-Chain Liquidity Pool

Designing a cross-chain liquidity pool requires managing the complexities of native and wrapped assets across different blockchain environments. This guide outlines the core architectural decisions and smart contract patterns.

A cross-chain liquidity pool must handle two fundamental asset types: native assets (like ETH on Ethereum or AVAX on Avalanche) and wrapped assets (like WETH or bridged USDC). The primary architectural challenge is maintaining a unified accounting system for liquidity that exists across multiple, isolated state machines. Unlike a single-chain Automated Market Maker (AMM), a cross-chain pool's total value locked (TVL) is the sum of balances held in separate smart contracts on each supported chain. A canonical architecture uses a hub-and-spoke model, where a central controller (often on a settlement layer like Ethereum) manages global liquidity shares, while satellite pools on connected chains (spokes) hold the actual assets.

The smart contract system requires a clear abstraction for asset representation. A common pattern is to use a cross-chain token vault on each spoke chain. When a user deposits native ETH into the Avalanche pool, the vault locks it and mints a synthetic representation (e.g., axETH) that is message-locked to the hub. The hub contract then credits the user's global liquidity provider (LP) position. This ensures the LP share token is a claim against the aggregated multi-chain treasury, not just the assets on one chain. Critical functions like deposit, withdraw, and swap must be implemented as cross-chain messages using a secure protocol like Chainlink CCIP, Axelar GMP, or a LayerZero OFT.

Swap logic must account for asynchronous liquidity. A swap on Chain A for an asset primarily held on Chain B cannot settle instantly. The architecture needs a cross-chain swap queue or a market-making system that uses local reserves and rebalances via arbitrage. For example, a pool might allow a swap from USDC on Arbitrum to ETH on Optimism by first completing the trade on Arbitrum using its local USDC/ETH reserves, then initiating a rebalancing transfer behind the scenes. This requires careful fee modeling to cover the latency and gas costs of the eventual cross-chain settlement, which differs from the instant execution of a traditional AMM.

Security considerations are paramount. The bridge or messaging protocol linking the hub and spokes becomes a critical trust dependency. A compromise there could lead to the minting of fraudulent LP shares or the theft of all vaulted assets. Mitigations include using audited, battle-tested messaging layers, implementing timelocks and governance for hub upgrades, and designing pause mechanisms for individual spokes. Furthermore, the accounting logic must be resilient to message delivery failures and include explicit functions for manual recovery or force-closing of stale transactions to prevent locked funds.

To implement a basic deposit flow, your hub contract on Ethereum and vault contract on an L2 like Arbitrum would interact as follows. The user calls depositToVault(amount) on the Arbitrum vault, which locks their native ETH and sends a message via the cross-chain router. The hub, upon verifying the message, mints LP tokens to the user's cross-chain address. A simplified proof-of-concept snippet for the vault might look like this:

solidity
function depositNative() external payable {
    require(msg.value > 0, "No value sent");
    totalVaultBalance += msg.value;
    // Send message to hub chain via chosen middleware
    crossChainRouter.sendMessage(hubChainId, hubContract, abi.encode(msg.sender, msg.value));
}

The corresponding hub function would decode this message and update the global ledger.

Finally, successful architectures are measured by capital efficiency and user experience. Key metrics include the pool's ability to minimize idle capital on any single chain, the speed and cost of cross-chain rebalancing, and the transparency of its fee structure. Projects like Stargate and LayerZero's OFT standard provide reference implementations. The end goal is to create a seamless system where users provide liquidity once and can access it—or trade against it—from any connected chain, abstracting away the underlying complexity of bridges and wrapped asset conversions.

messaging-implementation
IMPLEMENTING CROSS-CHAIN MESSAGING

How to Architect a Cross-Chain Liquidity Pool

A technical guide to designing a liquidity pool that operates across multiple blockchains using cross-chain messaging protocols.

A cross-chain liquidity pool is a decentralized exchange (DEX) mechanism where assets from different blockchains are pooled to facilitate swaps. Unlike a single-chain AMM like Uniswap v3 on Ethereum, it requires a messaging layer to synchronize state and transfer value between chains. The core architectural challenge is maintaining a unified pool balance and accurate pricing oracle while assets are physically locked in vaults on separate networks like Arbitrum, Polygon, and Base.

The foundation is a set of synchronized smart contracts deployed on each supported chain. Each local contract manages the pool's assets on its native chain. A cross-chain messaging protocol, such as Axelar, LayerZero, or Wormhole, is then integrated to pass messages between these contracts. These messages typically convey instructions for deposits, withdrawals, and, most critically, swap execution proofs that must be verified on the destination chain.

For a swap from Chain A to Chain B, the user initiates the transaction on Chain A. The local pool contract locks the input tokens and sends a cross-chain message containing the swap details. A relayer or validator network attests to this message. On Chain B, the destination contract verifies the message's validity via the chosen protocol's light client or oracle, then releases the corresponding output tokens from its local vault to the user. This creates a unified liquidity experience despite the fragmented settlement layers.

Security is paramount. The architecture must guard against double-spend attacks and message forgery. This is achieved through the underlying messaging protocol's security model, which may involve a proof-of-stake validator set, optimistic verification with fraud proofs, or multi-signature committees. Additionally, the contracts need robust pause mechanisms and governance controls to respond to vulnerabilities in the bridge layer, which is often the system's most significant risk vector.

Developers can implement this using SDKs from messaging protocols. For example, using Axelar's General Message Passing (GMP), a contract on Ethereum can call a function on Avalanche. A basic deposit function might encode a GMP call with the payload "withdrawOnDestinationChain" and the recipient address. The destination chain contract executes this payload, minting a local representation of the asset or releasing it from a vault, effectively moving liquidity.

messaging-protocols
ARCHITECTURE PRIMER

Cross-Chain Messaging Protocols

Secure message passing between blockchains is the foundation for building cross-chain liquidity pools. This guide covers the core protocols and design patterns.

06

Design Patterns for Liquidity Pools

When architecting a cross-chain pool, you must decide on a canonical vs. wrapped asset model and a liquidity network topology.

  • Canonical Bridging: A single token minted across chains via a lock/mint or burn/mint mechanism (e.g., LayerZero OFT). Reduces fragmentation.
  • Liquidity Network: Choose between a hub-and-spoke model (central liquidity reservoir) or a mesh network (direct chain-to-chain pools).
  • Security Consideration: The messaging protocol's time-to-finality directly impacts the withdrawal delay and economic security of your pool.
economic-model
ECONOMIC MODEL

How to Architect a Cross-Chain Liquidity Pool

A cross-chain liquidity pool's economic model defines the incentives for liquidity providers and the mechanisms for sustainable, secure asset exchange between blockchains.

The core of a cross-chain liquidity pool is a bonding curve or constant function market maker (CFMM) that determines asset prices. Unlike single-chain AMMs like Uniswap V3, a cross-chain model must account for asynchronous liquidity and bridging latency. The canonical design uses a lock-mint-burn mechanism: assets are locked in a vault on the source chain, and a synthetic representation (like a wrapped asset) is minted on the destination chain. The economic model must ensure the synthetic asset's value is fully backed by the locked collateral at all times, a principle enforced by smart contracts on both chains.

Incentive alignment is critical. Liquidity providers (LPs) typically earn fees from swap transactions, but cross-chain LPs face unique risks like bridge validator slashing or chain reorganization. To compensate, models often incorporate a multi-tiered fee structure: a base swap fee (e.g., 0.3%), a small protocol fee for sustainability, and sometimes a dynamic fee that adjusts based on cross-chain message volume or congestion. Protocols like Stargate and Synapse use veToken governance models, where staking the protocol token grants fee-sharing rewards and voting power over pool parameters, creating a flywheel for protocol-owned liquidity.

A major challenge is managing imbalanced pools caused by directional capital flow. If more USDC flows from Ethereum to Arbitrum than returns, the Arbitrum-side pool depletes. Solutions include: rebalancing incentives (higher rewards for depositing the depleted asset), asymmetric fee curves, or employing a liquidity network with a central hub chain (like Axelar or LayerZero) that acts as a clearinghouse. The economic model must also define slippage parameters and minimum liquidity thresholds to prevent price manipulation during large cross-chain transfers.

Security and sustainability are enforced through economic safeguards. A liquidity reserve factor (e.g., 10% of fees) can be allocated to an insurance fund to cover potential bridge exploits or shortfall events. Furthermore, withdrawal delays or challenge periods can be implemented to allow for fraud proofs, as seen in optimistic bridges. The model should be simulated extensively using agent-based modeling tools like Gauntlet or Chaos Labs to stress-test capital efficiency and resilience under various market and attack scenarios before mainnet deployment.

Finally, the model must be upgradeable and parameterized. Governance should control key variables like fee percentages, reward emission schedules, and supported asset lists without requiring a full contract migration. By architecting the economic model with clear incentives for LPs, robust security assumptions, and flexible parameters, a cross-chain liquidity pool can achieve deep, sustainable liquidity that enables seamless interoperability across the blockchain ecosystem.

FEE BREAKDOWN

Typical Cross-Chain Pool Fee Structure

Comparison of fee models and their allocation across different cross-chain liquidity pool architectures.

Fee ComponentBridge-Centric PoolMessaging-Based PoolLiquidity Network Pool

Swap Fee (to LPs)

0.05% - 0.30%

0.05% - 0.30%

0.05% - 0.30%

Bridge/Relay Fee

0.1% - 0.5%

0.05% - 0.15%

0.02% - 0.1%

Gas Subsidy Fee

0.05% - 0.2%

0.1% - 0.3%

0.01% - 0.05%

Protocol Treasury Fee

0% - 0.05%

0.05% - 0.1%

0.03% - 0.07%

Slippage Protection Fee

0% - 0.02%

0.01% - 0.03%

Total Estimated Fee

0.2% - 1.05%

0.25% - 0.87%

0.12% - 0.55%

Fee Paid in Native Token

Dynamic Fee Adjustment

security-considerations
SECURITY AND RISK MITIGATION

How to Architect a Cross-Chain Liquidity Pool

Designing a cross-chain liquidity pool requires a security-first architecture to mitigate risks like bridge exploits, validator failures, and economic attacks.

A cross-chain liquidity pool (xLP) is a decentralized exchange (DEX) pool that holds assets on multiple blockchains, allowing users to swap tokens across chains without a central custodian. Unlike a standard Automated Market Maker (AMM) like Uniswap V3, which operates on a single network, an xLP relies on a messaging layer (e.g., LayerZero, Wormhole, Axelar) to synchronize state and transfer liquidity between chains. The core architectural challenge is maintaining a consistent, accurate, and secure representation of the pool's total liquidity across all connected chains, as a compromise on any chain can drain the entire system.

The security model hinges on the oracle and relayer network used for cross-chain communication. For example, a pool using Wormhole relies on its Guardian network of validators to attest to state changes. A common pattern is a hub-and-spoke architecture, where a main "hub" chain (like Ethereum) holds the canonical pool state and total value locked (TVL), while "spoke" chains (like Arbitrum, Polygon) hold local liquidity. All swaps on spokes must be validated and finalized by the hub via signed messages, preventing double-spends. The choice of messaging protocol directly determines the pool's trust assumptions and attack surface.

Key smart contract risks include reentrancy on the destination chain during a cross-chain callback, incorrect state updates due to message delays or forks, and economic arbitrage from stale prices. Mitigations involve using checks-effects-interactions patterns, implementing slippage controls and deadline parameters for cross-chain swaps, and employing circuit breakers that can pause operations if message validity is in doubt. Contracts should also enforce that only verified messages from the designated message dispatcher contract can update pool reserves.

Liquidity provisioning carries unique risks. Asymmetric liquidity across chains can lead to high slippage on one chain while another is underutilized, creating arbitrage opportunities that drain value. A robust design uses a dynamic fee algorithm that adjusts based on chain-specific utilization, and may employ rebalancing bots that use cross-chain messages to move liquidity between chains when imbalances exceed a threshold, similar to protocols like Stargate. Providers must also be aware of the validator slashing conditions of the underlying bridge to assess custodial risk.

To implement a basic proof-of-concept, you would deploy a pair of contracts: a MainPool on the hub chain and a SatellitePool on a spoke chain. The SatellitePool would lock user funds locally and send a message via the chosen cross-chain messenger to the MainPool to update the global TVL. A swap on the spoke would require the MainPool to sign and send a message back authorizing the release of funds from the SatellitePool. All functions must verify the msg.sender is the trusted messenger endpoint. Open-source reference implementations can be studied in the Stargate Finance or Chainlink CCIP documentation.

Ultimately, architecting a secure xLP is an exercise in managing sovereign risk. You are delegating security to the underlying cross-chain protocol's validator set. A best practice is to design for graceful degradation—if a bridge is compromised, the system should isolate the affected chain's liquidity without collapsing the entire pool. Regular audits, bug bounties, and monitoring for anomalous cross-chain message volume are non-negotiable for production deployments, as the combined value at risk is the sum of liquidity on all connected chains.

CROSS-CHAIN LIQUIDITY POOLS

Frequently Asked Questions

Common technical questions and troubleshooting for developers building cross-chain liquidity pools.

A native liquidity pool, like a Uniswap v3 pool, exists on a single blockchain. A cross-chain pool is a system of smart contracts deployed across multiple chains that coordinate to share liquidity and state. The primary architectural challenge is state synchronization. Instead of a single source of truth, you have multiple contract instances that must agree on pool balances, fees, and exchange rates. This is typically solved via a messaging layer (like Axelar, LayerZero, or Wormhole) or a verification bridge (like zkBridge) that relays proofs of state changes between chains. The canonical liquidity is often managed on a primary "hub" chain, with "spoke" contracts on other chains representing wrapped liquidity.

How to Architect a Cross-Chain Liquidity Pool | ChainScore Guides