From 7c9f170e47902409fb5f0189fba969ccffe2f352 Mon Sep 17 00:00:00 2001 From: Ed Zynda Date: Wed, 8 Jan 2025 12:34:44 +0300 Subject: [PATCH] Debridge DLN Facet (Version 1.0.0) [DeBridgeDlnFacet v1.0.0] (#827) * Move DeBridgeDLNFacet from archive * Move docs from archive and update README * improve code coverage * improve code coverage * Fix opbnb * Update variable naming * Add mappings * Update demo * fix tests * Check for empty non EVM address * Various fixes * Add referral code * explicitly set orderAuthorityDst * Fix referral code mismatch * Always check for empty receiver address * Remove unneeded parameter * Update audit log * sort audited contracts --- .../Deploy/UpdateDeBridgeDlnFacet.s.sol | 13 - audit/auditLog.json | 11 + .../2024.12.05_DeBridgeDlnFacet(v1.0.0).pdf | Bin 0 -> 68501 bytes config/dln.json | 103 +++++-- config/networks.json | 2 +- deployments/_deployments_log_file.json | 8 +- deployments/arbitrum.staging.json | 3 +- deployments/polygon.diamond.staging.json | 5 +- deployments/polygon.staging.json | 2 +- {archive/docs => docs}/DeBridgeDlnFacet.md | 0 docs/README.md | 5 +- script/demoScripts/demoDLN.ts | 9 +- .../facets}/DeployDeBridgeDlnFacet.s.sol | 2 +- .../facets/UpdateDeBridgeDlnFacet.s.sol | 39 +++ src/Facets/DeBridgeDlnFacet.sol | 274 ++++++++++++++++++ .../solidity/Facets}/DeBridgeDlnFacet.t.sol | 164 ++++++++++- 16 files changed, 584 insertions(+), 56 deletions(-) delete mode 100644 archive/scripts/Deploy/UpdateDeBridgeDlnFacet.s.sol create mode 100644 audit/reports/2024.12.05_DeBridgeDlnFacet(v1.0.0).pdf rename {archive/docs => docs}/DeBridgeDlnFacet.md (100%) rename {archive/scripts/Deploy => script/deploy/facets}/DeployDeBridgeDlnFacet.s.sol (93%) create mode 100644 script/deploy/facets/UpdateDeBridgeDlnFacet.s.sol create mode 100644 src/Facets/DeBridgeDlnFacet.sol rename {archive/test => test/solidity/Facets}/DeBridgeDlnFacet.t.sol (51%) diff --git a/archive/scripts/Deploy/UpdateDeBridgeDlnFacet.s.sol b/archive/scripts/Deploy/UpdateDeBridgeDlnFacet.s.sol deleted file mode 100644 index 8b2397d7b..000000000 --- a/archive/scripts/Deploy/UpdateDeBridgeDlnFacet.s.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.17; - -import { UpdateScriptBase } from "./utils/UpdateScriptBase.sol"; - -contract DeployScript is UpdateScriptBase { - function run() - public - returns (address[] memory facets, bytes memory cutData) - { - return update("DeBridgeDlnFacet"); - } -} diff --git a/audit/auditLog.json b/audit/auditLog.json index fb599468d..56bde21e9 100644 --- a/audit/auditLog.json +++ b/audit/auditLog.json @@ -63,6 +63,12 @@ "auditReportPath": "./audit/reports/2024.12.03_LiFiDexAggregator.pdf", "auditCommitHash": "8a34562c912b5b19c919bb95338655c944428af5" }, + "audit20241205": { + "auditCompletedOn": "05.12.2024", + "auditedBy": "Sujith Somraaj (individual security researcher)", + "auditorGitHandle": "sujithsomraaj", + "auditReportPath": "./audit/reports/2024.12.05_DeBridgeDlnFacet(v1.0.0).pdf", + "auditCommitHash": "d72cb05510acc5bb794bde05af550ba2ef85d06d" "audit20241206": { "auditCompletedOn": "06.12.2024", "auditedBy": "Sujith Somraaj (individual security researcher)", @@ -95,6 +101,11 @@ "audit20241206" ] }, + "DeBridgeDlnFacet": { + "1.0.0": [ + "audit20241205" + ] + }, "EmergencyPauseFacet": { "1.0.0": [ "audit20240913" diff --git a/audit/reports/2024.12.05_DeBridgeDlnFacet(v1.0.0).pdf b/audit/reports/2024.12.05_DeBridgeDlnFacet(v1.0.0).pdf new file mode 100644 index 0000000000000000000000000000000000000000..18c85023d1f4603310218ef0e14413486b550a1b GIT binary patch literal 68501 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
Xwa>+Wy_r4Km0z{`lRD+e
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

literal 0
HcmV?d00001

diff --git a/config/dln.json b/config/dln.json
index b28e26e23..2e1a6c6d4 100644
--- a/config/dln.json
+++ b/config/dln.json
@@ -1,26 +1,83 @@
 {
-  "arbitrum": {
-    "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+  "networks": {
+    "arbitrum": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "avalanche": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "bsc": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "mainnet": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "polygon": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "linea": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "base": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "optimism": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "gnosis": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "metis": {
+      "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
+    },
+    "solana": {
+      "dlnSource": "src5qyZHqTqecJV4aY6Cb6zDZLMDzrDKKezs22MPHr4"
+    }
   },
-  "avalanche": {
-    "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
-  },
-  "bsc": {
-    "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
-  },
-  "mainnet": {
-    "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
-  },
-  "polygon": {
-    "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
-  },
-  "linea": {
-    "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
-  },
-  "base": {
-    "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
-  },
-  "optimism": {
-    "dlnSource": "0xeF4fB24aD0916217251F553c0596F8Edc630EB66"
-  }
+  "mappings": [
+    {
+      "chainId": 42161,
+      "deBridgeChainId": 42161
+    },
+    {
+      "chainId": 43114,
+      "deBridgeChainId": 43114
+    },
+    {
+      "chainId": 56,
+      "deBridgeChainId": 56
+    },
+    {
+      "chainId": 1,
+      "deBridgeChainId": 1
+    },
+    {
+      "chainId": 137,
+      "deBridgeChainId": 137
+    },
+    {
+      "chainId": 59144,
+      "deBridgeChainId": 59144
+    },
+    {
+      "chainId": 8453,
+      "deBridgeChainId": 8453
+    },
+    {
+      "chainId": 10,
+      "deBridgeChainId": 10
+    },
+    {
+      "chainId": 100,
+      "deBridgeChainId": 100000002
+    },
+    {
+      "chainId": 1088,
+      "deBridgeChainId": 100000004
+    },
+    {
+      "chainId": 1151111081099710,
+      "deBridgeChainId": 7565164
+    }
+  ]
 }
diff --git a/config/networks.json b/config/networks.json
index a21cbdfbf..4b78c3449 100644
--- a/config/networks.json
+++ b/config/networks.json
@@ -460,7 +460,7 @@
     "rpcUrl": "https://opbnb.drpc.org",
     "verificationType": "etherscan",
     "explorerUrl": "https://opbnb.bscscan.com/",
-    "explorerApiUrl": "",
+    "explorerApiUrl": "https://api-opbnb.bscscan.com/api",
     "multicallAddress": "0xcA11bde05977b3631167028862bE2a173976CA11",
     "safeApiUrl": "https://safe-transaction-opbnb-mainnet.bnbchain.org/api",
     "safeAddress": "0xaAD94196680Edb94B421bb5B1E1A0B27db686C72",
diff --git a/deployments/_deployments_log_file.json b/deployments/_deployments_log_file.json
index ba921733b..ff79e59ef 100644
--- a/deployments/_deployments_log_file.json
+++ b/deployments/_deployments_log_file.json
@@ -21199,9 +21199,9 @@
       "staging": {
         "1.0.0": [
           {
-            "ADDRESS": "0xE500dED7b9C9f1020870B7a6Db076Dbd892C0fea",
+            "ADDRESS": "0xE15C7585636e62b88bA47A40621287086E0c2E33",
             "OPTIMIZER_RUNS": "1000000",
-            "TIMESTAMP": "2024-02-22 14:29:31",
+            "TIMESTAMP": "2024-10-14 15:56:11",
             "CONSTRUCTOR_ARGS": "0x000000000000000000000000ef4fb24ad0916217251f553c0596f8edc630eb66",
             "SALT": "",
             "VERIFIED": "true"
@@ -21213,9 +21213,9 @@
       "staging": {
         "1.0.0": [
           {
-            "ADDRESS": "0xE500dED7b9C9f1020870B7a6Db076Dbd892C0fea",
+            "ADDRESS": "0xE15C7585636e62b88bA47A40621287086E0c2E33",
             "OPTIMIZER_RUNS": "1000000",
-            "TIMESTAMP": "2024-02-22 15:43:42",
+            "TIMESTAMP": "2024-10-15 09:42:45",
             "CONSTRUCTOR_ARGS": "0x000000000000000000000000ef4fb24ad0916217251f553c0596f8edc630eb66",
             "SALT": "",
             "VERIFIED": "true"
diff --git a/deployments/arbitrum.staging.json b/deployments/arbitrum.staging.json
index 14875c2e3..96b7f9fe6 100644
--- a/deployments/arbitrum.staging.json
+++ b/deployments/arbitrum.staging.json
@@ -32,7 +32,8 @@
   "ServiceFeeCollector": "0x9cc3164f01ED3796Fdf7Da538484D634608D2203",
   "WormholeFacet": "0x7260Fd3F8D0bEb06fF5935C6eadE9f406107c270",
   "SymbiosisFacet": "0x21571D628B0bCBeb954D5933A604eCac35bAF2c7",
-  "DeBridgeDlnFacet": "0xE500dED7b9C9f1020870B7a6Db076Dbd892C0fea",
+  "DeBridgeDlnFacet": "0xE15C7585636e62b88bA47A40621287086E0c2E33",
+  "MayanFacet": "0xd596C903d78870786c5DB0E448ce7F87A65A0daD",
   "StandardizedCallFacet": "0xA7ffe57ee70Ac4998e9E9fC6f17341173E081A8f",
   "MayanFacet": "0xd596C903d78870786c5DB0E448ce7F87A65A0daD",
   "GenericSwapFacetV3": "0xFf6Fa203573Baaaa4AE375EB7ac2819d539e16FF",
diff --git a/deployments/polygon.diamond.staging.json b/deployments/polygon.diamond.staging.json
index 03e420933..8b19a0da3 100644
--- a/deployments/polygon.diamond.staging.json
+++ b/deployments/polygon.diamond.staging.json
@@ -118,8 +118,8 @@
         "Version": "1.0.0"
       },
       "0xE15C7585636e62b88bA47A40621287086E0c2E33": {
-        "Name": "",
-        "Version": ""
+        "Name": "DeBridgeDlnFacet",
+        "Version": "1.0.0"
       },
       "0x74763722d92832d247cFa92825b06098cf72BAA2": {
         "Name": "RelayFacet",
@@ -140,4 +140,3 @@
       "TokenWrapper": "0xF63b27AE2Dc887b88f82E2Cc597d07fBB2E78E70"
     }
   }
-}
diff --git a/deployments/polygon.staging.json b/deployments/polygon.staging.json
index 7f01b447d..679c6ad0f 100644
--- a/deployments/polygon.staging.json
+++ b/deployments/polygon.staging.json
@@ -34,7 +34,7 @@
   "ServiceFeeCollector": "0x9cc3164f01ED3796Fdf7Da538484D634608D2203",
   "LiFuelFeeCollector": "0x94EA56D8049e93E0308B9c7d1418Baf6A7C68280",
   "AcrossFacetPacked": "0x7A3770a9504924d99D38BBba4F0116B756393Eb3",
-  "DeBridgeDlnFacet": "0xE500dED7b9C9f1020870B7a6Db076Dbd892C0fea",
+  "DeBridgeDlnFacet": "0xE15C7585636e62b88bA47A40621287086E0c2E33",
   "AmarokFacetPacked": "0x0aB252E7b5167Be2aC7841Bdaf1689E1a475ceE7",
   "TokenWrapper": "0xF63b27AE2Dc887b88f82E2Cc597d07fBB2E78E70",
   "GasRebateDistributor": "0x3116B8F099D7eFA6e24f39F80146Aac423365EB9",
diff --git a/archive/docs/DeBridgeDlnFacet.md b/docs/DeBridgeDlnFacet.md
similarity index 100%
rename from archive/docs/DeBridgeDlnFacet.md
rename to docs/DeBridgeDlnFacet.md
diff --git a/docs/README.md b/docs/README.md
index cb4f60b94..404deb64f 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -9,7 +9,7 @@
 - [CBridge Facet](./CBridgeFacet.md)
 - [Celer Circle Bridge Facet](./CelerCircleBridgeFacet.md)
 - [Circle Bridge Facet](./CircleBridgeFacet.md)
-- [DeBridge Facet](./DeBridgeFacet.md)
+- [DeBridge DLN Facet](/docs/DeBridgeDlnFacet.md)
 - [DEX Manager Facet](./DexManagerFacet.md)
 - [DiamondCut Facet](./DiamondCutFacet.md)
 - [DiamondLoupe Facet](./DiamondLoupeFacet.md)
@@ -21,9 +21,7 @@
 - [Hop Facet Packed](./HopFacetPacked.md)
 - [Hyphen Facet](./HyphenFacet.md)
 - [LIFuel Facet](./LIFuelFacet.md)
-- [MakerTeleport Facet](./MakerTeleportFacet.md)
 - [Mayan Facet](./MayanFacet.md)
-- [Multichain Facet](./MultichainFacet.md)
 - [OmniBridge Facet](./OmniBridgeFacet.md)
 - [Optimism Bridge Facet](./OptimismBridgeFacet.md)
 - [Periphery Registry Facet](./PeripheryRegistryFacet.md)
@@ -34,7 +32,6 @@
 - [Standardized Call Facet](./StandardizedCallFacet.md)
 - [Stargate Facet](./StargateFacet.md)
 - [Stargate FacetV2](./StargateFacetV2.md)
-- [Synapse Bridge Facet](./SynapseBridgeFacet.md)
 - [ThorSwap Facet](./ThorSwapFacet.md)
 - [Withdraw Facet](./WithdrawFacet.md)
 
diff --git a/script/demoScripts/demoDLN.ts b/script/demoScripts/demoDLN.ts
index 9c725c7bf..cb849f9b1 100644
--- a/script/demoScripts/demoDLN.ts
+++ b/script/demoScripts/demoDLN.ts
@@ -1,4 +1,4 @@
-import deployments from '../../deployments/mainnet.staging.json'
+import deployments from '../../deployments/arbitrum.staging.json'
 import {
   DeBridgeDlnFacet__factory,
   ILiFi,
@@ -24,7 +24,7 @@ const main = async () => {
 
   // Bridge 5 ARB from Polygon to USDC on Optimism
   const resp = await fetch(
-    'https://api.dln.trade/v1.0/dln/order/quote?srcChainId=42161&srcChainTokenIn=0x912CE59144191C1204E64559FE8253a0e49E6548&srcChainTokenInAmount=5000000000000000000&dstChainId=10&dstChainTokenOut=0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85&prependOperatingExpenses=false'
+    'https://api.dln.trade/v1.0/dln/order/quote?srcChainId=42161&srcChainTokenIn=0x912CE59144191C1204E64559FE8253a0e49E6548&srcChainTokenInAmount=95000000000000000000&dstChainId=100000002&dstChainTokenOut=0xe91D153E0b41518A2Ce8Dd3D7944Fa863463a97d&prependOperatingExpenses=false'
   )
   const quote = await resp.json()
 
@@ -42,7 +42,7 @@ const main = async () => {
     sendingAssetId: srcChainTokenIn.address,
     receiver: address,
     minAmount: srcChainTokenIn.amount,
-    destinationChainId: 10,
+    destinationChainId: 100,
     hasSourceSwaps: false,
     hasDestinationCall: false,
   }
@@ -50,6 +50,7 @@ const main = async () => {
   const dlnData: DeBridgeDlnFacet.DeBridgeDlnDataStruct = {
     receivingAssetId: dstChainTokenOut.address,
     receiver: ethers.utils.solidityPack(['address'], [address]),
+    orderAuthorityDst: ethers.utils.solidityPack(['address'], [address]),
     minAmountOut: dstChainTokenOut.recommendedAmount,
   }
 
@@ -65,7 +66,7 @@ const main = async () => {
       value: quote.fixFee,
     })
   await tx.wait()
-  console.info('Bridged USDC')
+  console.info('Bridged ARB')
 }
 
 main()
diff --git a/archive/scripts/Deploy/DeployDeBridgeDlnFacet.s.sol b/script/deploy/facets/DeployDeBridgeDlnFacet.s.sol
similarity index 93%
rename from archive/scripts/Deploy/DeployDeBridgeDlnFacet.s.sol
rename to script/deploy/facets/DeployDeBridgeDlnFacet.s.sol
index a99a01a54..224a13c5d 100644
--- a/archive/scripts/Deploy/DeployDeBridgeDlnFacet.s.sol
+++ b/script/deploy/facets/DeployDeBridgeDlnFacet.s.sol
@@ -26,7 +26,7 @@ contract DeployScript is DeployScriptBase {
         string memory json = vm.readFile(path);
 
         address dlnSource = json.readAddress(
-            string.concat(".", network, ".dlnSource")
+            string.concat(".networks.", network, ".dlnSource")
         );
 
         return abi.encode(dlnSource);
diff --git a/script/deploy/facets/UpdateDeBridgeDlnFacet.s.sol b/script/deploy/facets/UpdateDeBridgeDlnFacet.s.sol
new file mode 100644
index 000000000..9dd809ec3
--- /dev/null
+++ b/script/deploy/facets/UpdateDeBridgeDlnFacet.s.sol
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.17;
+
+import { UpdateScriptBase } from "./utils/UpdateScriptBase.sol";
+import { stdJson } from "forge-std/StdJson.sol";
+import { DeBridgeDlnFacet } from "lifi/Facets/DeBridgeDlnFacet.sol";
+
+contract DeployScript is UpdateScriptBase {
+    using stdJson for string;
+
+    struct ChainIdConfig {
+        uint256 chainId;
+        uint256 deBridgeChainId;
+    }
+
+    function run()
+        public
+        returns (address[] memory facets, bytes memory cutData)
+    {
+        return update("DeBridgeDlnFacet");
+    }
+
+    function getCallData() internal override returns (bytes memory) {
+        path = string.concat(root, "/config/dln.json");
+        json = vm.readFile(path);
+        bytes memory rawChains = json.parseRaw(".mappings");
+        ChainIdConfig[] memory cidCfg = abi.decode(
+            rawChains,
+            (ChainIdConfig[])
+        );
+
+        bytes memory callData = abi.encodeWithSelector(
+            DeBridgeDlnFacet.initDeBridgeDln.selector,
+            cidCfg
+        );
+
+        return callData;
+    }
+}
diff --git a/src/Facets/DeBridgeDlnFacet.sol b/src/Facets/DeBridgeDlnFacet.sol
new file mode 100644
index 000000000..8650bad72
--- /dev/null
+++ b/src/Facets/DeBridgeDlnFacet.sol
@@ -0,0 +1,274 @@
+// SPDX-License-Identifier: MIT
+pragma solidity 0.8.17;
+
+import { ILiFi } from "../Interfaces/ILiFi.sol";
+import { LibDiamond } from "../Libraries/LibDiamond.sol";
+import { LibAsset, IERC20 } from "../Libraries/LibAsset.sol";
+import { LibSwap } from "../Libraries/LibSwap.sol";
+import { ReentrancyGuard } from "../Helpers/ReentrancyGuard.sol";
+import { SwapperV2 } from "../Helpers/SwapperV2.sol";
+import { Validatable } from "../Helpers/Validatable.sol";
+import { IDlnSource } from "../Interfaces/IDlnSource.sol";
+import { NotInitialized } from "../Errors/GenericErrors.sol";
+
+/// @title DeBridgeDLN Facet
+/// @author LI.FI (https://li.fi)
+/// @notice Provides functionality for bridging through DeBridge DLN
+/// @custom:version 1.0.0
+contract DeBridgeDlnFacet is ILiFi, ReentrancyGuard, SwapperV2, Validatable {
+    /// Storage ///
+
+    bytes32 internal constant NAMESPACE =
+        keccak256("com.lifi.facets.debridgedln");
+    uint32 internal constant REFERRAL_CODE = 30729;
+    address internal constant NON_EVM_ADDRESS =
+        0x11f111f111f111F111f111f111F111f111f111F1;
+    IDlnSource public immutable dlnSource;
+
+    /// Types ///
+
+    /// @param receivingAssetId The address of the asset to receive
+    /// @param receiver The address of the receiver
+    /// @param minAmountOut The minimum amount to receive on the destination chain
+    struct DeBridgeDlnData {
+        bytes receivingAssetId;
+        bytes receiver;
+        bytes orderAuthorityDst;
+        uint256 minAmountOut;
+    }
+
+    struct Storage {
+        mapping(uint256 => uint256) deBridgeChainId;
+        bool initialized;
+    }
+
+    struct ChainIdConfig {
+        uint256 chainId;
+        uint256 deBridgeChainId;
+    }
+
+    /// Errors ///
+
+    error UnknownDeBridgeChain();
+    error EmptyNonEVMAddress();
+    error InvalidConfig();
+
+    /// Events ///
+
+    event DeBridgeInitialized(ChainIdConfig[] chainIdConfigs);
+
+    event DlnOrderCreated(bytes32 indexed orderId);
+
+    event DeBridgeChainIdSet(uint256 indexed chainId, uint256 deBridgeChainId);
+
+    event BridgeToNonEVMChain(
+        bytes32 indexed transactionId,
+        uint256 indexed destinationChainId,
+        bytes receiver
+    );
+
+    /// Modifiers ///
+
+    modifier onlyValidReceiverAddress(DeBridgeDlnData calldata _deBridgeData) {
+        // Ensure nonEVMAddress is not empty
+        if (_deBridgeData.receiver.length == 0) {
+            revert EmptyNonEVMAddress();
+        }
+        _;
+    }
+
+    /// Constructor ///
+
+    /// @notice Constructor for the contract.
+    /// @param _dlnSource The address of the DLN order creation contract
+    constructor(IDlnSource _dlnSource) {
+        dlnSource = _dlnSource;
+    }
+
+    /// Init ///
+
+    /// @notice Initialize local variables for the DeBridgeDln Facet
+    /// @param chainIdConfigs Chain Id configuration data
+    function initDeBridgeDln(
+        ChainIdConfig[] calldata chainIdConfigs
+    ) external {
+        if (chainIdConfigs.length == 0) revert InvalidConfig();
+        LibDiamond.enforceIsContractOwner();
+
+        Storage storage sm = getStorage();
+
+        for (uint256 i = 0; i < chainIdConfigs.length; i++) {
+            sm.deBridgeChainId[chainIdConfigs[i].chainId] = chainIdConfigs[i]
+                .deBridgeChainId;
+        }
+
+        sm.initialized = true;
+        emit DeBridgeInitialized(chainIdConfigs);
+    }
+
+    /// External Methods ///
+
+    /// @notice Bridges tokens via DeBridgeDLN
+    /// @param _bridgeData The core information needed for bridging
+    /// @param _deBridgeData Data specific to DeBridgeDLN
+    function startBridgeTokensViaDeBridgeDln(
+        ILiFi.BridgeData memory _bridgeData,
+        DeBridgeDlnData calldata _deBridgeData
+    )
+        external
+        payable
+        nonReentrant
+        refundExcessNative(payable(msg.sender))
+        validateBridgeData(_bridgeData)
+        onlyValidReceiverAddress(_deBridgeData)
+        doesNotContainSourceSwaps(_bridgeData)
+        doesNotContainDestinationCalls(_bridgeData)
+    {
+        LibAsset.depositAsset(
+            _bridgeData.sendingAssetId,
+            _bridgeData.minAmount
+        );
+        _startBridge(
+            _bridgeData,
+            _deBridgeData,
+            dlnSource.globalFixedNativeFee()
+        );
+    }
+
+    /// @notice Performs a swap before bridging via DeBridgeDLN
+    /// @param _bridgeData The core information needed for bridging
+    /// @param _swapData An array of swap related data for performing swaps before bridging
+    /// @param _deBridgeData Data specific to DeBridgeDLN
+    function swapAndStartBridgeTokensViaDeBridgeDln(
+        ILiFi.BridgeData memory _bridgeData,
+        LibSwap.SwapData[] calldata _swapData,
+        DeBridgeDlnData calldata _deBridgeData
+    )
+        external
+        payable
+        nonReentrant
+        refundExcessNative(payable(msg.sender))
+        containsSourceSwaps(_bridgeData)
+        doesNotContainDestinationCalls(_bridgeData)
+        validateBridgeData(_bridgeData)
+        onlyValidReceiverAddress(_deBridgeData)
+    {
+        uint256 fee = dlnSource.globalFixedNativeFee();
+        address assetId = _bridgeData.sendingAssetId;
+        _bridgeData.minAmount = _depositAndSwap(
+            _bridgeData.transactionId,
+            _bridgeData.minAmount,
+            _swapData,
+            payable(msg.sender),
+            LibAsset.isNativeAsset(assetId) ? 0 : fee
+        );
+        _startBridge(_bridgeData, _deBridgeData, fee);
+    }
+
+    /// Internal Methods ///
+
+    /// @dev Contains the business logic for the bridge via DeBridgeDLN
+    /// @param _bridgeData The core information needed for bridging
+    /// @param _deBridgeData Data specific to DeBridgeDLN
+    function _startBridge(
+        ILiFi.BridgeData memory _bridgeData,
+        DeBridgeDlnData calldata _deBridgeData,
+        uint256 _fee
+    ) internal {
+        IDlnSource.OrderCreation memory orderCreation = IDlnSource
+            .OrderCreation({
+                giveTokenAddress: _bridgeData.sendingAssetId,
+                giveAmount: _bridgeData.minAmount,
+                takeTokenAddress: _deBridgeData.receivingAssetId,
+                takeAmount: _deBridgeData.minAmountOut,
+                takeChainId: getDeBridgeChainId(
+                    _bridgeData.destinationChainId
+                ),
+                receiverDst: _deBridgeData.receiver,
+                givePatchAuthoritySrc: msg.sender,
+                orderAuthorityAddressDst: _deBridgeData.orderAuthorityDst,
+                allowedTakerDst: "",
+                externalCall: "",
+                allowedCancelBeneficiarySrc: abi.encodePacked(msg.sender)
+            });
+
+        bytes32 orderId;
+        if (!LibAsset.isNativeAsset(_bridgeData.sendingAssetId)) {
+            // Give the DLN Source approval to bridge tokens
+            LibAsset.maxApproveERC20(
+                IERC20(_bridgeData.sendingAssetId),
+                address(dlnSource),
+                _bridgeData.minAmount
+            );
+
+            orderId = dlnSource.createOrder{ value: _fee }(
+                orderCreation,
+                "",
+                REFERRAL_CODE,
+                ""
+            );
+        } else {
+            orderCreation.giveAmount = orderCreation.giveAmount - _fee;
+            orderId = dlnSource.createOrder{ value: _bridgeData.minAmount }(
+                orderCreation,
+                "",
+                REFERRAL_CODE,
+                ""
+            );
+        }
+
+        emit DlnOrderCreated(orderId);
+
+        if (_bridgeData.receiver == NON_EVM_ADDRESS) {
+            emit BridgeToNonEVMChain(
+                _bridgeData.transactionId,
+                _bridgeData.destinationChainId,
+                _deBridgeData.receiver
+            );
+        }
+
+        emit LiFiTransferStarted(_bridgeData);
+    }
+
+    /// Mappings management ///
+
+    /// @notice Sets the DeBridge chain ID for a given chain ID
+    /// @param _chainId uint256 of the chain ID
+    /// @param _deBridgeChainId uint256 of the DeBridge chain ID
+    /// @dev This is used to map a chain ID to its DeBridge chain ID
+    function setDeBridgeChainId(
+        uint256 _chainId,
+        uint256 _deBridgeChainId
+    ) external {
+        LibDiamond.enforceIsContractOwner();
+        Storage storage sm = getStorage();
+
+        if (!sm.initialized) {
+            revert NotInitialized();
+        }
+
+        sm.deBridgeChainId[_chainId] = _deBridgeChainId;
+        emit DeBridgeChainIdSet(_chainId, _deBridgeChainId);
+    }
+
+    /// @notice Gets the DeBridge chain ID for a given chain ID
+    /// @param _chainId uint256 of the chain ID
+    /// @return uint256 of the DeBridge chain ID
+    function getDeBridgeChainId(
+        uint256 _chainId
+    ) public view returns (uint256) {
+        Storage storage sm = getStorage();
+        uint256 chainId = sm.deBridgeChainId[_chainId];
+        if (chainId == 0) revert UnknownDeBridgeChain();
+        return chainId;
+    }
+
+    /// @dev fetch local storage
+    function getStorage() private pure returns (Storage storage s) {
+        bytes32 namespace = NAMESPACE;
+        // solhint-disable-next-line no-inline-assembly
+        assembly {
+            s.slot := namespace
+        }
+    }
+}
diff --git a/archive/test/DeBridgeDlnFacet.t.sol b/test/solidity/Facets/DeBridgeDlnFacet.t.sol
similarity index 51%
rename from archive/test/DeBridgeDlnFacet.t.sol
rename to test/solidity/Facets/DeBridgeDlnFacet.t.sol
index 8df35caa7..f8e4c9510 100644
--- a/archive/test/DeBridgeDlnFacet.t.sol
+++ b/test/solidity/Facets/DeBridgeDlnFacet.t.sol
@@ -4,6 +4,7 @@ pragma solidity ^0.8.17;
 import { LibAllowList, TestBaseFacet, console, ERC20, LibSwap } from "../utils/TestBaseFacet.sol";
 import { DeBridgeDlnFacet } from "lifi/Facets/DeBridgeDlnFacet.sol";
 import { IDlnSource } from "lifi/Interfaces/IDlnSource.sol";
+import { stdJson } from "forge-std/StdJson.sol";
 
 // Stub DeBridgeDlnFacet Contract
 contract TestDeBridgeDlnFacet is DeBridgeDlnFacet {
@@ -19,18 +20,23 @@ contract TestDeBridgeDlnFacet is DeBridgeDlnFacet {
 }
 
 contract DeBridgeDlnFacetTest is TestBaseFacet {
+    using stdJson for string;
+
     DeBridgeDlnFacet.DeBridgeDlnData internal validDeBridgeDlnData;
     TestDeBridgeDlnFacet internal deBridgeDlnFacet;
     IDlnSource internal DLN_SOURCE =
         IDlnSource(0xeF4fB24aD0916217251F553c0596F8Edc630EB66);
     uint256 internal FIXED_FEE;
 
+    // Errors
+    error EmptyNonEVMAddress();
+
     function setUp() public {
         customBlockNumberForForking = 19279222;
         initTestBase();
 
         deBridgeDlnFacet = new TestDeBridgeDlnFacet(DLN_SOURCE);
-        bytes4[] memory functionSelectors = new bytes4[](4);
+        bytes4[] memory functionSelectors = new bytes4[](5);
         functionSelectors[0] = deBridgeDlnFacet
             .startBridgeTokensViaDeBridgeDln
             .selector;
@@ -41,6 +47,7 @@ contract DeBridgeDlnFacetTest is TestBaseFacet {
         functionSelectors[3] = deBridgeDlnFacet
             .setFunctionApprovalBySignature
             .selector;
+        functionSelectors[4] = DeBridgeDlnFacet.initDeBridgeDln.selector;
 
         addFacet(diamond, address(deBridgeDlnFacet), functionSelectors);
         deBridgeDlnFacet = TestDeBridgeDlnFacet(address(diamond));
@@ -55,6 +62,20 @@ contract DeBridgeDlnFacetTest is TestBaseFacet {
             uniswap.swapETHForExactTokens.selector
         );
 
+        // Initialize
+        string memory path = string.concat(
+            vm.projectRoot(),
+            "/config/dln.json"
+        );
+        string memory json = vm.readFile(path);
+        bytes memory rawChains = json.parseRaw(".mappings");
+        DeBridgeDlnFacet.ChainIdConfig[] memory cidCfg = abi.decode(
+            rawChains,
+            (DeBridgeDlnFacet.ChainIdConfig[])
+        );
+
+        deBridgeDlnFacet.initDeBridgeDln(cidCfg);
+
         setFacetAddressInTestBase(
             address(deBridgeDlnFacet),
             "DeBridgeDlnFacet"
@@ -70,6 +91,7 @@ contract DeBridgeDlnFacetTest is TestBaseFacet {
                 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174
             ), // Polygon USDC
             receiver: abi.encodePacked(USER_RECEIVER),
+            orderAuthorityDst: abi.encodePacked(USER_RECEIVER),
             minAmountOut: (defaultUSDCAmount * 95) / 100
         });
 
@@ -176,4 +198,144 @@ contract DeBridgeDlnFacetTest is TestBaseFacet {
             initialETHBalance - swapData[0].fromAmount - FIXED_FEE
         );
     }
+
+    function test_CanBridgeToNonEVMAddress()
+        public
+        assertBalanceChange(ADDRESS_DAI, USER_RECEIVER, 0)
+        assertBalanceChange(ADDRESS_USDC, USER_RECEIVER, 0)
+    {
+        vm.startPrank(USER_SENDER);
+        // store initial balances
+        uint256 initialETHBalance = USER_SENDER.balance;
+
+        // prepare bridgeData
+        bridgeData.hasSourceSwaps = true;
+        bridgeData.sendingAssetId = ADDRESS_USDC;
+
+        // prepare swap data
+        address[] memory path = new address[](2);
+
+        path[0] = ADDRESS_WRAPPED_NATIVE;
+        path[1] = ADDRESS_USDC;
+
+        uint256 amountOut = defaultUSDCAmount;
+
+        // Calculate USDC input amount
+        uint256[] memory amounts = uniswap.getAmountsIn(amountOut, path);
+        uint256 amountIn = amounts[0];
+
+        bridgeData.minAmount = amountOut;
+
+        delete swapData;
+        swapData.push(
+            LibSwap.SwapData({
+                callTo: address(uniswap),
+                approveTo: address(uniswap),
+                sendingAssetId: address(0),
+                receivingAssetId: ADDRESS_USDC,
+                fromAmount: amountIn,
+                callData: abi.encodeWithSelector(
+                    uniswap.swapETHForExactTokens.selector,
+                    amountOut,
+                    path,
+                    _facetTestContractAddress,
+                    block.timestamp + 20 minutes
+                ),
+                requiresDeposit: true
+            })
+        );
+
+        //prepare check for events
+        vm.expectEmit(true, true, true, true, _facetTestContractAddress);
+        emit AssetSwapped(
+            bridgeData.transactionId,
+            ADDRESS_UNISWAP,
+            address(0),
+            ADDRESS_USDC,
+            swapData[0].fromAmount,
+            bridgeData.minAmount,
+            block.timestamp
+        );
+
+        // This is just a random Solana Address for testing
+        validDeBridgeDlnData
+            .receiver = hex"e275bc4764effea023f35f3c60b2260c93248b74ec8d63ee215d40317e98b014"; // [pre-commit-checker: not a secret]
+        validDeBridgeDlnData
+            .orderAuthorityDst = hex"e275bc4764effea023f35f3c60b2260c93248b74ec8d63ee215d40317e98b014"; // [pre-commit-checker: not a secret]
+        // SOL Token
+        validDeBridgeDlnData
+            .receivingAssetId = hex"0000000000000000000000000000000000000000000000000000000000000000"; // [pre-commit-checker: not a secret]
+
+        // Setup to bridge to Solana
+        bridgeData.destinationChainId = 1151111081099710;
+        bridgeData.receiver = 0x11f111f111f111F111f111f111F111f111f111F1;
+
+        //@dev the bridged amount will be higher than bridgeData.minAmount since the code will
+        //     deposit all remaining ETH to the bridge. We cannot access that value (minAmount + remaining gas)
+        //     therefore the test is designed to only check if an event was emitted but not match the parameters
+        vm.expectEmit(false, false, false, false, _facetTestContractAddress);
+        emit LiFiTransferStarted(bridgeData);
+
+        // execute call in child contract
+        initiateSwapAndBridgeTxWithFacet(true);
+
+        // check balances after call
+        assertEq(
+            USER_SENDER.balance,
+            initialETHBalance - swapData[0].fromAmount - FIXED_FEE
+        );
+    }
+
+    function testRevert_WhenBridgingToEmptyReceiverAddress() public {
+        vm.startPrank(USER_SENDER);
+
+        // prepare bridgeData
+        bridgeData.hasSourceSwaps = true;
+        bridgeData.sendingAssetId = ADDRESS_USDC;
+
+        // prepare swap data
+        address[] memory path = new address[](2);
+
+        path[0] = ADDRESS_WRAPPED_NATIVE;
+        path[1] = ADDRESS_USDC;
+
+        uint256 amountOut = defaultUSDCAmount;
+
+        // Calculate USDC input amount
+        uint256[] memory amounts = uniswap.getAmountsIn(amountOut, path);
+        uint256 amountIn = amounts[0];
+
+        bridgeData.minAmount = amountOut;
+
+        delete swapData;
+        swapData.push(
+            LibSwap.SwapData({
+                callTo: address(uniswap),
+                approveTo: address(uniswap),
+                sendingAssetId: address(0),
+                receivingAssetId: ADDRESS_USDC,
+                fromAmount: amountIn,
+                callData: abi.encodeWithSelector(
+                    uniswap.swapETHForExactTokens.selector,
+                    amountOut,
+                    path,
+                    _facetTestContractAddress,
+                    block.timestamp + 20 minutes
+                ),
+                requiresDeposit: true
+            })
+        );
+
+        // This is just a random Solana Address for testing
+        validDeBridgeDlnData.receiver = ""; // [pre-commit-checker: not a secret]
+        // SOL Token
+        validDeBridgeDlnData
+            .receivingAssetId = hex"0000000000000000000000000000000000000000000000000000000000000000"; // [pre-commit-checker: not a secret]
+
+        // Setup to bridge to Solana
+        bridgeData.destinationChainId = 137;
+
+        vm.expectRevert(EmptyNonEVMAddress.selector);
+        initiateSwapAndBridgeTxWithFacet(true);
+    }
 }