From d2f04ecc62b1f14d4538c51a2b23120fad8ca6e4 Mon Sep 17 00:00:00 2001 From: edakturk14 <edakturk96@gmail.com> Date: Mon, 17 Mar 2025 14:19:12 -0400 Subject: [PATCH 1/6] Multicollateral warp route guide --- docs/guides/multicollateral-warp-route.mdx | 176 +++++++++++++++++++++ sidebars.js | 5 + 2 files changed, 181 insertions(+) create mode 100644 docs/guides/multicollateral-warp-route.mdx diff --git a/docs/guides/multicollateral-warp-route.mdx b/docs/guides/multicollateral-warp-route.mdx new file mode 100644 index 00000000..31399494 --- /dev/null +++ b/docs/guides/multicollateral-warp-route.mdx @@ -0,0 +1,176 @@ +# Multicollateral Warp Route Rebalancing + +## Overview + +A **Multicollateral Warp Route** is a way to bridge multiple existing tokens across different chains while maintaining liquidity. Instead of introducing a new synthetic asset for every transfer, it allows chains to leverage existing token liquidity in a structured manner. + +This is useful when expanding to new chains, ensuring users have access to assets that already exist in the ecosystem. The diagram below shows a setup where canonical USDC exists on Base and Arbitrum, with a synthetic warp route created on a new chain. + +```mermaid +flowchart + subgraph base + BU((User)) + BWR[USDC Collateral Warp Route] + end + + subgraph arbitrum + AU((User)) + AWR[USDC Collateral Warp Route] + end + + subgraph newchain + NWR[USDC Synthetic Warp Route] + Recipient((Recipient)) + end + + BU -- "transferRemote(newchain,<br>recipient, amount)" --> BWR + BWR -. "{recipient, amount}" .-> NWR + AU -- "transferRemote(newchain,<br>recipient, amount)" --> AWR + AWR -. "{recipient, amount}" .-> NWR + NWR -. "2 \* amount" .-> Recipient +``` + +### Collateral Imbalances + +If more funds flow in one direction, one of the chains in the route can run out of collateral. This _imbalanced flow_ prevents withdrawals until liquidity is restored. + +To fix this and mantain a good user experience we must perform _collateral rebalancing_,collateral must be moved between chains to restore balance. Liquidity providers (LPs) can supply liquidity to address these imbalances. + +```mermaid +flowchart + subgraph base + BWR[USDC Collateral Warp Route] + end + + subgraph arbitrum + AWR[USDC Collateral Warp Route] + end + + subgraph newchain + NWR[USDC Synthetic Warp Route] + NU((Recipient)) + end + + NU -- "transferRemote(arbitrum,<br> recipient, 2 * amount)" --> NWR + NWR -. "{recipient, 2 * amount}" .-> AWR +``` + +## Liquidity Provider + +Currently, Warp Routes don’t have an explicit liquidity provider interface that enables local deposits/withdrawals. However, LPs can manually manage liquidity using the [Hyperlane CLI](https://www.npmjs.com/package/@hyperlane-xyz/cli) to interact with the Warp Routes in the [Hyperlane registry](https://github.com/hyperlane-xyz/hyperlane-registry). + +:::warning +The stopgap procedure defined before requires at least one synthetic chain to exist within the warp route topology. +::: + +- To inspect a warp route’s topology, use the `warp read` command + +``` +hyperlane warp read --symbol ETH + +ethereum: + type: native + ... +base: + type: native + ... +bsc: + type: synthetic + ... +``` + +- To send a transfer (`transferRemote`) on a warp route, use the `warp send` command + +``` +hyperlane warp send \ + --symbol ETH \ + --origin base \ + --destination bsc \ + --amount <AMOUNT> \ + --recipient <ADDRESS> +``` + +### Depositing Liquidity + +LPs can deposit collateral via a `transferRemote` where: + +- the `destination` domain is a chain where the warp route has a `synthetic` type +- the `recipient` address is controlled by the LP +- the `amount` is liquidity denominated in the `origin` chains `collateral` token + +```mermaid +flowchart + LP((Liquidity Provider)) + + subgraph arbitrum + AWR[USDC Collateral Warp Route] + AUSDC[USDC] + end + + subgraph newchain + MWR[USDC Synthetic Warp Route] + end + + AWR -- "transferFrom(LP, amount)" --> AUSDC + LP -. "amount" .-> AWR + LP -- "transferRemote(newchain,<br>LP, amount)" --> AWR + + AWR -. "{LP, amount}" .-> MWR + MWR -. "amount" .-> LP +``` + +### Withdrawing Liquidity + +LPs can withdraw via a `transferRemote` where + +- the `destination` domain is a chain where the warp route is a `collateral` type +- the `recipient` address is controlled by the LP +- the `amount` is denominated in the `destination` chains `collateral` token + +```mermaid +flowchart + LP((Liquidity Provider)) + + subgraph arbitrum + AWR[USDC Collateral Warp Route] + AUSDC[USDC] + end + + subgraph newchain + MWR[USDC Synthetic Warp Route] + end + + LP -- "transferRemote(arbitrum, LP, amount)" --> MWR + LP -. "amount" .-> MWR + + MWR -. "{LP, amount}" .-> AWR + AWR -- "transfer(LP, amount)" --> AUSDC + AWR -. "amount" .-> LP +``` + +## Admin-Controlled Liquidity Rebalancing + +Instead of relying on individual LPs, an admin can rebalance liquidity by moving collateral between warp route contracts. For example, CCTP (Circle’s Cross-Chain Transfer Protocol) can efficiently move USDC between Base and Arbitrum. + +```mermaid +flowchart + subgraph base + BR((Rebalancer)) + BWR[USDC Collateral Warp Route] + BCCTP[CCTP] + BUSDC[USDC] + end + + subgraph arbitrum + AWR[USDC Collateral Warp Route] + ACCTP[CCTP] + AUSDC[USDC] + end + + BR -- "transferCollateral(arbitrum,<br>amount)" --> BWR + BWR -- "send(arbitrum, amount, router)" --> BCCTP + BCCTP -- "burn(amount)" --> BUSDC + BCCTP -. "{amount, router}" .-> ACCTP + ACCTP -- "mint(amount, router}" --> AUSDC + AUSDC -. "amount" .-> AWR +``` diff --git a/sidebars.js b/sidebars.js index 0ecb658a..08681acc 100644 --- a/sidebars.js +++ b/sidebars.js @@ -134,6 +134,11 @@ const sidebars = { id: "guides/manage-warp-route-limits", label: "Mangaging Warp Route Limits", }, + { + type: "doc", + id: "guides/multicollateral-warp-route", + label: "Multicollateral Warp Route Rebalancing", + }, ], }, { From 0486dd199fc86477136cf6ca2ae1d9d881b1e9a7 Mon Sep 17 00:00:00 2001 From: edakturk14 <edakturk96@gmail.com> Date: Mon, 17 Mar 2025 14:38:42 -0400 Subject: [PATCH 2/6] nitpicks --- docs/guides/multicollateral-warp-route.mdx | 48 +++++++++++----------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/docs/guides/multicollateral-warp-route.mdx b/docs/guides/multicollateral-warp-route.mdx index 31399494..7aca51be 100644 --- a/docs/guides/multicollateral-warp-route.mdx +++ b/docs/guides/multicollateral-warp-route.mdx @@ -32,9 +32,7 @@ flowchart ### Collateral Imbalances -If more funds flow in one direction, one of the chains in the route can run out of collateral. This _imbalanced flow_ prevents withdrawals until liquidity is restored. - -To fix this and mantain a good user experience we must perform _collateral rebalancing_,collateral must be moved between chains to restore balance. Liquidity providers (LPs) can supply liquidity to address these imbalances. +If more funds flow in one direction, one of the chains in the route can run out of collateral. This _imbalanced flow_ prevents withdrawals until the collateral is covered. ```mermaid flowchart @@ -55,31 +53,33 @@ flowchart NWR -. "{recipient, 2 * amount}" .-> AWR ``` +To fix this and mantain a good user experience we must perform _collateral rebalancing_, collateral must be moved between chains to restore balance. An aligned actor may assue a traditional Liquidity Provider (LP) role and provide collateral to address these imbalances using their own inventory. + ## Liquidity Provider Currently, Warp Routes don’t have an explicit liquidity provider interface that enables local deposits/withdrawals. However, LPs can manually manage liquidity using the [Hyperlane CLI](https://www.npmjs.com/package/@hyperlane-xyz/cli) to interact with the Warp Routes in the [Hyperlane registry](https://github.com/hyperlane-xyz/hyperlane-registry). :::warning -The stopgap procedure defined before requires at least one synthetic chain to exist within the warp route topology. +The stopgap procedure defined below requires at least one synthetic chain to exist within the warp route topology. ::: -- To inspect a warp route’s topology, use the `warp read` command +- To inspect a Warp Route’s topology, use the `warp read` command: ``` hyperlane warp read --symbol ETH ethereum: - type: native - ... + type: native + ... base: - type: native - ... + type: native + ... bsc: - type: synthetic - ... + type: synthetic + ... ``` -- To send a transfer (`transferRemote`) on a warp route, use the `warp send` command +- To send a transfer (`transferRemote`) on a Warp Route, use the `warp send` command: ``` hyperlane warp send \ @@ -94,9 +94,9 @@ hyperlane warp send \ LPs can deposit collateral via a `transferRemote` where: -- the `destination` domain is a chain where the warp route has a `synthetic` type -- the `recipient` address is controlled by the LP -- the `amount` is liquidity denominated in the `origin` chains `collateral` token +- `destination` domain is a chain where the warp route has a `synthetic` type +- `recipient` address is controlled by the LP +- `amount` is liquidity denominated in the `origin` chains `collateral` token ```mermaid flowchart @@ -107,7 +107,7 @@ flowchart AUSDC[USDC] end - subgraph newchain + subgraph mychain MWR[USDC Synthetic Warp Route] end @@ -119,13 +119,15 @@ flowchart MWR -. "amount" .-> LP ``` +This can be done for providing liquidity on many collateral chains and representing a claim on each collateral with a single synthetic asset balance. + ### Withdrawing Liquidity LPs can withdraw via a `transferRemote` where -- the `destination` domain is a chain where the warp route is a `collateral` type -- the `recipient` address is controlled by the LP -- the `amount` is denominated in the `destination` chains `collateral` token +- `destination` domain is a chain where the warp route is a `collateral` type +- `recipient` address is controlled by the LP +- `amount` is denominated in the `destination` chains `collateral` token ```mermaid flowchart @@ -136,11 +138,11 @@ flowchart AUSDC[USDC] end - subgraph newchain + subgraph mychain MWR[USDC Synthetic Warp Route] end - LP -- "transferRemote(arbitrum, LP, amount)" --> MWR + LP -- "transferRemote(arbitrum,<br>LP, amount)" --> MWR LP -. "amount" .-> MWR MWR -. "{LP, amount}" .-> AWR @@ -148,9 +150,9 @@ flowchart AWR -. "amount" .-> LP ``` -## Admin-Controlled Liquidity Rebalancing +## Future: Admin-Controlled Liquidity Rebalancing -Instead of relying on individual LPs, an admin can rebalance liquidity by moving collateral between warp route contracts. For example, CCTP (Circle’s Cross-Chain Transfer Protocol) can efficiently move USDC between Base and Arbitrum. +Depending on the collateral asset and the pair of chains, several different rebalancing paths may be available. For example, CCTP (Circle’s Cross-Chain Transfer Protocol) can efficiently move USDC between Base and Arbitrum. Other assets and pairs may require more complex rebalancing paths (eg L2 withdrawals+deposits). This approach requires a permissioned rebalancer to move the collateral over trusted paths. ```mermaid flowchart From fb271fb868d5f7d0f0363b053ef588a76ddc4736 Mon Sep 17 00:00:00 2001 From: edakturk14 <edakturk96@gmail.com> Date: Wed, 19 Mar 2025 20:15:44 -0400 Subject: [PATCH 3/6] review fixes --- docs/guides/multicollateral-warp-route.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/guides/multicollateral-warp-route.mdx b/docs/guides/multicollateral-warp-route.mdx index 7aca51be..8b3b837b 100644 --- a/docs/guides/multicollateral-warp-route.mdx +++ b/docs/guides/multicollateral-warp-route.mdx @@ -53,11 +53,11 @@ flowchart NWR -. "{recipient, 2 * amount}" .-> AWR ``` -To fix this and mantain a good user experience we must perform _collateral rebalancing_, collateral must be moved between chains to restore balance. An aligned actor may assue a traditional Liquidity Provider (LP) role and provide collateral to address these imbalances using their own inventory. +To fix this and maintain a good user experience, we must perform _collateral rebalancing_; collateral may need to be moved between chains or sourced from local inventory to restore balance. An aligned actor may assume a traditional Liquidity Provider (LP) role and provide collateral to address these imbalances using their inventory. ## Liquidity Provider -Currently, Warp Routes don’t have an explicit liquidity provider interface that enables local deposits/withdrawals. However, LPs can manually manage liquidity using the [Hyperlane CLI](https://www.npmjs.com/package/@hyperlane-xyz/cli) to interact with the Warp Routes in the [Hyperlane registry](https://github.com/hyperlane-xyz/hyperlane-registry). +Currently, Warp Routes don’t have an explicit liquidity provider interface that enables local deposits/withdrawals. However, LPs can manually manage liquidity using the [Hyperlane CLI](https://www.npmjs.com/package/@hyperlane-xyz/cli) or the UI to interact with the Warp Routes in the [Hyperlane registry](https://github.com/hyperlane-xyz/hyperlane-registry). :::warning The stopgap procedure defined below requires at least one synthetic chain to exist within the warp route topology. @@ -119,7 +119,7 @@ flowchart MWR -. "amount" .-> LP ``` -This can be done for providing liquidity on many collateral chains and representing a claim on each collateral with a single synthetic asset balance. +This can be done by providing liquidity on many collateral chains and representing a claim on each collateral with a single synthetic asset balance. ### Withdrawing Liquidity @@ -152,7 +152,7 @@ flowchart ## Future: Admin-Controlled Liquidity Rebalancing -Depending on the collateral asset and the pair of chains, several different rebalancing paths may be available. For example, CCTP (Circle’s Cross-Chain Transfer Protocol) can efficiently move USDC between Base and Arbitrum. Other assets and pairs may require more complex rebalancing paths (eg L2 withdrawals+deposits). This approach requires a permissioned rebalancer to move the collateral over trusted paths. +Depending on the collateral asset and the pair of chains, several different rebalancing paths may be available. For example, CCTP (Circle’s Cross-Chain Transfer Protocol) can efficiently move USDC between Base and Arbitrum. Other assets and pairs may require more complex rebalancing paths (e.g.: L2 withdrawals+deposits). This approach requires a permissioned rebalancer to move the collateral over trusted paths. ```mermaid flowchart From 3361892b0b53a5f65dca1f41dfe54ec5e25950cd Mon Sep 17 00:00:00 2001 From: edakturk14 <edakturk96@gmail.com> Date: Thu, 20 Mar 2025 10:08:04 -0400 Subject: [PATCH 4/6] remove future section --- docs/guides/multicollateral-warp-route.mdx | 27 ---------------------- 1 file changed, 27 deletions(-) diff --git a/docs/guides/multicollateral-warp-route.mdx b/docs/guides/multicollateral-warp-route.mdx index 8b3b837b..cd643310 100644 --- a/docs/guides/multicollateral-warp-route.mdx +++ b/docs/guides/multicollateral-warp-route.mdx @@ -149,30 +149,3 @@ flowchart AWR -- "transfer(LP, amount)" --> AUSDC AWR -. "amount" .-> LP ``` - -## Future: Admin-Controlled Liquidity Rebalancing - -Depending on the collateral asset and the pair of chains, several different rebalancing paths may be available. For example, CCTP (Circle’s Cross-Chain Transfer Protocol) can efficiently move USDC between Base and Arbitrum. Other assets and pairs may require more complex rebalancing paths (e.g.: L2 withdrawals+deposits). This approach requires a permissioned rebalancer to move the collateral over trusted paths. - -```mermaid -flowchart - subgraph base - BR((Rebalancer)) - BWR[USDC Collateral Warp Route] - BCCTP[CCTP] - BUSDC[USDC] - end - - subgraph arbitrum - AWR[USDC Collateral Warp Route] - ACCTP[CCTP] - AUSDC[USDC] - end - - BR -- "transferCollateral(arbitrum,<br>amount)" --> BWR - BWR -- "send(arbitrum, amount, router)" --> BCCTP - BCCTP -- "burn(amount)" --> BUSDC - BCCTP -. "{amount, router}" .-> ACCTP - ACCTP -- "mint(amount, router}" --> AUSDC - AUSDC -. "amount" .-> AWR -``` From 2eb4e53a6fb1a82905e97d956b952917e3d68816 Mon Sep 17 00:00:00 2001 From: edakturk14 <edakturk96@gmail.com> Date: Wed, 26 Mar 2025 14:05:47 -0400 Subject: [PATCH 5/6] sidebar reorg: move to evm warp routes --- sidebars.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sidebars.js b/sidebars.js index 8681004c..dc29fafd 100644 --- a/sidebars.js +++ b/sidebars.js @@ -141,6 +141,11 @@ const sidebars = { id: "guides/manage-warp-route-limits", label: "Mangaging Warp Route Limits", }, + { + type: "doc", + id: "guides/multicollateral-warp-route", + label: "Multicollateral Warp Route Rebalancing", + }, ], }, { @@ -166,11 +171,6 @@ const sidebars = { id: "guides/deploy-warp-route-UI", label: "Deploy a Bridge UI for Hyperlane Warp Routes", }, - { - type: "doc", - id: "guides/multicollateral-warp-route", - label: "Multicollateral Warp Route Rebalancing", - }, ], }, { From ed29dd20e48dcf04a81346d8eff569207e5f4e6e Mon Sep 17 00:00:00 2001 From: Eda Akturk <edakturk96@gmail.com> Date: Fri, 11 Apr 2025 12:39:49 -0400 Subject: [PATCH 6/6] update sidebar for consistency --- sidebars.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sidebars.js b/sidebars.js index b87ed10c..0c02bd19 100644 --- a/sidebars.js +++ b/sidebars.js @@ -149,7 +149,7 @@ const sidebars = { { type: "doc", id: "guides/multicollateral-warp-route", - label: "Multicollateral Warp Route Rebalancing", + label: "Multi-Collateral Warp Route Rebalancing", }, { type: "doc",