chore: sync submodule state (parent ref update)

Made-with: Cursor
This commit is contained in:
defiQUG
2026-03-02 12:14:09 -08:00
parent 50ab378da9
commit 5efe36b1e0
1100 changed files with 155024 additions and 8674 deletions

View File

@@ -0,0 +1,67 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import "../../../contracts/bridge/trustless/DualRouterBridgeSwapCoordinator.sol";
import "../../../contracts/bridge/trustless/LiquidityPoolETH.sol";
import "../../../contracts/bridge/trustless/EnhancedSwapRouter.sol";
/**
* @title DeployDualRouterBridgeSwapCoordinator
* @notice Deploys DualRouterBridgeSwapCoordinator on Ethereum Mainnet and wires LP + EnhancedSwapRouter
* @dev Env: PRIVATE_KEY, ETHEREUM_MAINNET_RPC; INBOX_ETH_MAINNET (or INBOX_ETH), LIQUIDITY_POOL_ETH_MAINNET (or LIQUIDITY_POOL),
* SWAP_ROUTER_MAINNET (or SWAP_ROUTER), ENHANCED_SWAP_ROUTER, CHALLENGE_MANAGER_MAINNET (or CHALLENGE_MANAGER).
*/
contract DeployDualRouterBridgeSwapCoordinator is Script {
function run() external {
require(block.chainid == 1, "DeployDualRouterBridgeSwapCoordinator: Ethereum Mainnet only");
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
address deployer = vm.addr(deployerPrivateKey);
address inbox = vm.envOr("INBOX_ETH_MAINNET", vm.envOr("INBOX_ETH", address(0)));
address liquidityPool = vm.envOr("LIQUIDITY_POOL_ETH_MAINNET", vm.envOr("LIQUIDITY_POOL", address(0)));
address swapRouter = vm.envOr("SWAP_ROUTER_MAINNET", vm.envOr("SWAP_ROUTER", address(0)));
address enhancedSwapRouter = vm.envOr("ENHANCED_SWAP_ROUTER", address(0));
address challengeManager = vm.envOr("CHALLENGE_MANAGER_MAINNET", vm.envOr("CHALLENGE_MANAGER", address(0)));
require(inbox != address(0), "Set INBOX_ETH_MAINNET or INBOX_ETH");
require(liquidityPool != address(0), "Set LIQUIDITY_POOL_ETH_MAINNET or LIQUIDITY_POOL");
require(swapRouter != address(0), "Set SWAP_ROUTER_MAINNET or SWAP_ROUTER");
require(enhancedSwapRouter != address(0), "Set ENHANCED_SWAP_ROUTER");
require(challengeManager != address(0), "Set CHALLENGE_MANAGER_MAINNET or CHALLENGE_MANAGER");
console.log("=== Deploy DualRouterBridgeSwapCoordinator (Ethereum Mainnet) ===");
console.log("Inbox:", inbox);
console.log("LiquidityPool:", liquidityPool);
console.log("SwapRouter:", swapRouter);
console.log("EnhancedSwapRouter:", enhancedSwapRouter);
console.log("ChallengeManager:", challengeManager);
vm.startBroadcast(deployerPrivateKey);
DualRouterBridgeSwapCoordinator coordinator = new DualRouterBridgeSwapCoordinator(
inbox,
liquidityPool,
swapRouter,
enhancedSwapRouter,
challengeManager
);
console.log("DualRouterBridgeSwapCoordinator deployed at:", address(coordinator));
// Authorize the new coordinator to release from LiquidityPoolETH
LiquidityPoolETH(payable(liquidityPool)).authorizeRelease(address(coordinator));
console.log("LiquidityPoolETH.authorizeRelease(coordinator) done");
// Grant COORDINATOR_ROLE on EnhancedSwapRouter to the new coordinator
bytes32 COORDINATOR_ROLE = keccak256("COORDINATOR_ROLE");
EnhancedSwapRouter(payable(enhancedSwapRouter)).grantRole(COORDINATOR_ROLE, address(coordinator));
console.log("EnhancedSwapRouter.grantRole(COORDINATOR_ROLE, coordinator) done");
vm.stopBroadcast();
console.log("\n=== Export to .env ===");
console.log("DUAL_ROUTER_BRIDGE_SWAP_COORDINATOR=", vm.toString(address(coordinator)));
}
}

View File

@@ -58,6 +58,9 @@ contract DeployEnhancedSwapRouter is Script {
console.log("\nEnhancedSwapRouter deployed at:", address(router));
// Grant ROUTING_MANAGER_ROLE to deployer so setRoutingConfig can be called
router.grantRole(router.ROUTING_MANAGER_ROLE(), deployer);
// Configure default routing
_configureDefaultRouting(router, deployer);

View File

@@ -0,0 +1,35 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import "../../../contracts/bridge/trustless/SwapBridgeSwapCoordinator.sol";
/**
* @title DeploySwapBridgeSwapCoordinator
* @notice Deploys SwapBridgeSwapCoordinator for atomic swap-then-bridge flow
* @dev Requires ENHANCED_SWAP_ROUTER and UNIVERSAL_CCIP_BRIDGE (or BRIDGE_ORCHESTRATOR) in env
*/
contract DeploySwapBridgeSwapCoordinator is Script {
function run() external {
uint256 deployerPrivateKey = vm.envOr("PRIVATE_KEY", uint256(0));
require(deployerPrivateKey != 0, "PRIVATE_KEY not set");
address deployer = vm.addr(deployerPrivateKey);
address swapRouter = vm.envAddress("ENHANCED_SWAP_ROUTER");
address bridge = vm.envOr("UNIVERSAL_CCIP_BRIDGE", address(0));
if (bridge == address(0)) {
bridge = vm.envOr("BRIDGE_ORCHESTRATOR", address(0));
}
require(swapRouter != address(0), "ENHANCED_SWAP_ROUTER not set");
require(bridge != address(0), "UNIVERSAL_CCIP_BRIDGE or BRIDGE_ORCHESTRATOR not set");
vm.startBroadcast(deployerPrivateKey);
SwapBridgeSwapCoordinator coordinator = new SwapBridgeSwapCoordinator(swapRouter, bridge);
vm.stopBroadcast();
console.log("SwapBridgeSwapCoordinator deployed at:", address(coordinator));
console.log("Export: SWAP_BRIDGE_SWAP_COORDINATOR=%s", vm.toString(address(coordinator)));
}
}

View File

@@ -52,12 +52,14 @@ contract DeployTrustlessBridge is Script {
console.log("Deployer:", deployer);
console.log("Chain ID:", block.chainid);
// Detect which chain we're on
// Detect which chain we're on (138, 1, or L2 with TRUSTLESS_WETH_ADDRESS)
bool isChain138 = block.chainid == 138;
bool isEthereum = block.chainid == 1;
address l2Weth = vm.envOr("TRUSTLESS_WETH_ADDRESS", address(0));
bool isL2 = !isChain138 && !isEthereum && l2Weth != address(0);
if (!isChain138 && !isEthereum) {
revert("DeployTrustlessBridge: unsupported chain");
if (!isChain138 && !isEthereum && !isL2) {
revert("DeployTrustlessBridge: unsupported chain (set TRUSTLESS_WETH_ADDRESS for L2)");
}
vm.startBroadcast(deployerPrivateKey);
@@ -100,6 +102,30 @@ contract DeployTrustlessBridge is Script {
_authorizeInbox(addresses.liquidityPool, addresses.inbox);
}
if (isL2) {
console.log("\n--- Deploying Trustless stack on L2 (chain id ", block.chainid, ") ---");
uint256 bondMultiplier = vm.envOr("BOND_MULTIPLIER_BPS", DEFAULT_BOND_MULTIPLIER);
uint256 minBond = vm.envOr("MIN_BOND", DEFAULT_MIN_BOND);
uint256 challengeWindow = vm.envOr("CHALLENGE_WINDOW_SECONDS", DEFAULT_CHALLENGE_WINDOW);
uint256 lpFeeBps = vm.envOr("LP_FEE_BPS", DEFAULT_LP_FEE_BPS);
uint256 minLiquidityRatioBps = vm.envOr("MIN_LIQUIDITY_RATIO_BPS", DEFAULT_MIN_LIQUIDITY_RATIO_BPS);
addresses.bondManager = _deployBondManager(bondMultiplier, minBond);
addresses.challengeManager = _deployChallengeManager(addresses.bondManager, challengeWindow);
addresses.liquidityPool = _deployLiquidityPool(l2Weth, lpFeeBps, minLiquidityRatioBps);
addresses.inbox = _deployInboxETH(
addresses.bondManager,
addresses.challengeManager,
addresses.liquidityPool
);
_authorizeInbox(addresses.liquidityPool, addresses.inbox);
string memory deployLb = vm.envOr("TRUSTLESS_DEPLOY_LOCKBOX", string("0"));
if (keccak256(bytes(deployLb)) == keccak256("1") || keccak256(bytes(deployLb)) == keccak256("true")) {
addresses.lockbox138 = _deployLockbox138();
}
}
vm.stopBroadcast();
// Print deployment summary
@@ -115,6 +141,13 @@ contract DeployTrustlessBridge is Script {
console.log("SwapRouter:", addresses.swapRouter);
console.log("BridgeSwapCoordinator:", addresses.coordinator);
}
if (isL2) {
console.log("BondManager:", addresses.bondManager);
console.log("ChallengeManager:", addresses.challengeManager);
console.log("LiquidityPoolETH:", addresses.liquidityPool);
console.log("InboxETH:", addresses.inbox);
if (addresses.lockbox138 != address(0)) console.log("Lockbox:", addresses.lockbox138);
}
}
function _deployLockbox138() internal returns (address) {

View File

@@ -0,0 +1,49 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {LiquidityPoolETH} from "../../../contracts/bridge/trustless/LiquidityPoolETH.sol";
/**
* @title FundMainnetLP
* @notice Add ETH and/or WETH liquidity to the mainnet LiquidityPoolETH (G4).
* @dev Env: PRIVATE_KEY, LIQUIDITY_POOL_ETH_MAINNET (or LIQUIDITY_POOL), ETHEREUM_MAINNET_RPC.
* Optional: FUND_ETH_AMOUNT_WEI (native ETH), FUND_WETH_AMOUNT_WEI (WETH to deposit).
* If both zero/unset, script exits without error (dry run).
*/
contract FundMainnetLP is Script {
function run() external {
address poolAddr = vm.envOr("LIQUIDITY_POOL_ETH_MAINNET", vm.envOr("LIQUIDITY_POOL", address(0)));
if (poolAddr == address(0)) {
console.log("Set LIQUIDITY_POOL_ETH_MAINNET (or LIQUIDITY_POOL) in .env");
return;
}
uint256 ethAmount = vm.envOr("FUND_ETH_AMOUNT_WEI", uint256(0));
uint256 wethAmount = vm.envOr("FUND_WETH_AMOUNT_WEI", uint256(0));
if (ethAmount == 0 && wethAmount == 0) {
console.log("Set FUND_ETH_AMOUNT_WEI and/or FUND_WETH_AMOUNT_WEI to fund the LP");
return;
}
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
LiquidityPoolETH pool = LiquidityPoolETH(payable(poolAddr));
vm.startBroadcast(deployerPrivateKey);
if (ethAmount > 0) {
pool.provideLiquidity{value: ethAmount}(LiquidityPoolETH.AssetType.ETH);
console.log("Provided ETH liquidity:", ethAmount);
}
if (wethAmount > 0) {
address weth = pool.weth();
// Approve and deposit WETH
(bool ok,) = weth.call(abi.encodeWithSignature("approve(address,uint256)", poolAddr, wethAmount));
require(ok, "WETH approve failed");
pool.depositWETH(wethAmount);
console.log("Provided WETH liquidity:", wethAmount);
}
vm.stopBroadcast();
console.log("LP funding done.");
}
}

View File

@@ -7,7 +7,7 @@ import "../../../contracts/bridge/trustless/ChallengeManager.sol";
import "../../../contracts/bridge/trustless/InboxETH.sol";
import "../../../contracts/bridge/trustless/LiquidityPoolETH.sol";
import "../../../contracts/bridge/trustless/EnhancedSwapRouter.sol";
import "../../../contracts/bridge/trustless/BridgeSwapCoordinator.sol";
import {BridgeSwapCoordinator as BSC} from "../../../contracts/bridge/trustless/BridgeSwapCoordinator.sol";
import "../../../contracts/bridge/trustless/integration/BridgeReserveCoordinator.sol";
/**
@@ -44,7 +44,7 @@ contract InitializeBridgeSystem is Script {
// 2. Configure BridgeSwapCoordinator
if (bridgeSwapCoordinator != address(0)) {
_configureCoordinator(BridgeSwapCoordinator(payable(bridgeSwapCoordinator)), enhancedSwapRouter);
_configureCoordinator(BSC(payable(bridgeSwapCoordinator)), enhancedSwapRouter);
}
// 3. Configure BridgeReserveCoordinator (if deployed)
@@ -81,7 +81,7 @@ contract InitializeBridgeSystem is Script {
console.log("EnhancedSwapRouter configured");
}
function _configureCoordinator(BridgeSwapCoordinator coordinator, address enhancedRouter) internal {
function _configureCoordinator(BSC coordinator, address enhancedRouter) internal {
console.log("\n--- Configuring BridgeSwapCoordinator ---");
// If using EnhancedSwapRouter, update the coordinator