130 lines
6.6 KiB
Solidity
130 lines
6.6 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.19;
|
|
|
|
import {Script, console} from "forge-std/Script.sol";
|
|
import "../../../contracts/bridge/trustless/EnhancedSwapRouterV2.sol";
|
|
import "../../../contracts/bridge/trustless/RouteTypesV2.sol";
|
|
|
|
/// @notice Enable UniV3, Balancer, and Curve routes on live EnhancedSwapRouterV2 (Chain 138).
|
|
/// Adapters must already be set via initial deploy; this script only enables providers + routes.
|
|
contract ConfigureEnhancedSwapRouterV2MultiVenue is Script {
|
|
address constant DEFAULT_ROUTER_V2 = 0xa421706768aEB7fafA2D912C5E10824eF3437ad4;
|
|
|
|
address constant CHAIN138_WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
|
|
address constant CHAIN138_USDT = 0x004b63A7B5b0E06f6bB6adb4a5F9f590BF3182D1;
|
|
address constant CHAIN138_USDC = 0x71D6687F38b93CCad569Fa6352c876eea967201b;
|
|
address constant CHAIN138_cUSDT = 0x93E66202A11B1772E55407B32B44e5Cd8eda7f22;
|
|
address constant CHAIN138_cUSDC = 0xf22258f57794CC8E06237084b353Ab30fFfa640b;
|
|
|
|
address constant CHAIN138_DODO_PROVIDER = 0x3f729632E9553EBacCdE2e9b4c8F2B285b014F2e;
|
|
address constant CHAIN138_POOL_CUSDTCUSDC = 0x9e89bAe009adf128782E19e8341996c596ac40dC;
|
|
address constant CHAIN138_POOL_CUSDTUSDT = 0x866Cb44b59303d8dc5f4F9E3E7A8e8b0bf238d66;
|
|
address constant CHAIN138_POOL_CUSDCUSDC = 0xc39B7D0F40838cbFb54649d327f49a6DAC964062;
|
|
address constant CHAIN138_POOL_WETH_USDT = 0xe227F6C0520c0c6E8786fE56Fa76c4914F861533;
|
|
address constant CHAIN138_POOL_WETH_USDC = 0xb53A0508940b1Ff90F1AAD4f6cb50a7012Fe5593;
|
|
|
|
address constant UNISWAP_V3_ROUTER = 0xde9cD8ee2811E6E64a41D5F68Be315d33995975E;
|
|
address constant UNISWAP_QUOTER = 0x6abbB1CEb2468e748a03A00CD6aA9BFE893AFa1f;
|
|
address constant BALANCER_VAULT = 0x96423d7C1727698D8a25EbFB88131e9422d1a3C3;
|
|
bytes32 constant BALANCER_WETH_USDT_POOL_ID =
|
|
0x877cd220759e8c94b82f55450c85d382ae06856c426b56d93092a420facbc324;
|
|
bytes32 constant BALANCER_WETH_USDC_POOL_ID =
|
|
0xd8dfb18a6baf9b29d8c2dbd74639db87ac558af120df5261dab8e2a5de69013b;
|
|
address constant CURVE_3POOL = 0xE440Ec15805BE4C7BabCD17A63B8C8A08a492e0f;
|
|
|
|
function run() external {
|
|
require(block.chainid == 138, "ConfigureEnhancedSwapRouterV2MultiVenue: Chain 138 only");
|
|
|
|
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
|
|
address routerAddress = vm.envOr("ENHANCED_SWAP_ROUTER_V2_ADDRESS", DEFAULT_ROUTER_V2);
|
|
EnhancedSwapRouterV2 router = EnhancedSwapRouterV2(payable(routerAddress));
|
|
|
|
uint24 wethUsdtFee = uint24(vm.envOr("UNISWAP_V3_WETH_USDT_FEE", uint256(3000)));
|
|
uint24 wethUsdcFee = uint24(vm.envOr("UNISWAP_V3_WETH_USDC_FEE", uint256(500)));
|
|
|
|
vm.startBroadcast(deployerPrivateKey);
|
|
|
|
_setDodoPair(router, CHAIN138_cUSDT, CHAIN138_cUSDC, CHAIN138_DODO_PROVIDER, CHAIN138_POOL_CUSDTCUSDC);
|
|
_setDodoPair(router, CHAIN138_cUSDT, CHAIN138_USDT, CHAIN138_DODO_PROVIDER, CHAIN138_POOL_CUSDTUSDT);
|
|
_setDodoPair(router, CHAIN138_cUSDC, CHAIN138_USDC, CHAIN138_DODO_PROVIDER, CHAIN138_POOL_CUSDCUSDC);
|
|
_setDodoPair(router, CHAIN138_WETH, CHAIN138_USDT, CHAIN138_DODO_PROVIDER, CHAIN138_POOL_WETH_USDT);
|
|
_setDodoPair(router, CHAIN138_WETH, CHAIN138_USDC, CHAIN138_DODO_PROVIDER, CHAIN138_POOL_WETH_USDC);
|
|
|
|
_setUniswapPair(router, CHAIN138_WETH, CHAIN138_USDT, UNISWAP_V3_ROUTER, UNISWAP_QUOTER, wethUsdtFee);
|
|
_setUniswapPair(router, CHAIN138_WETH, CHAIN138_USDC, UNISWAP_V3_ROUTER, UNISWAP_QUOTER, wethUsdcFee);
|
|
|
|
_setBalancerPair(router, CHAIN138_WETH, CHAIN138_USDT, BALANCER_VAULT, BALANCER_WETH_USDT_POOL_ID);
|
|
_setBalancerPair(router, CHAIN138_WETH, CHAIN138_USDC, BALANCER_VAULT, BALANCER_WETH_USDC_POOL_ID);
|
|
|
|
_setCurvePair(router, CHAIN138_USDT, CHAIN138_USDC, CURVE_3POOL, 0, 1, false);
|
|
|
|
router.setProviderEnabled(RouteTypesV2.Provider.Dodo, true);
|
|
router.setProviderEnabled(RouteTypesV2.Provider.UniswapV3, true);
|
|
router.setProviderEnabled(RouteTypesV2.Provider.Balancer, true);
|
|
router.setProviderEnabled(RouteTypesV2.Provider.Curve, true);
|
|
router.setProviderEnabled(RouteTypesV2.Provider.OneInch, false);
|
|
router.setProviderEnabled(RouteTypesV2.Provider.Partner, false);
|
|
router.setProviderEnabled(RouteTypesV2.Provider.DodoV3, false);
|
|
|
|
RouteTypesV2.Provider[] memory providers = new RouteTypesV2.Provider[](4);
|
|
providers[0] = RouteTypesV2.Provider.Dodo;
|
|
providers[1] = RouteTypesV2.Provider.UniswapV3;
|
|
providers[2] = RouteTypesV2.Provider.Balancer;
|
|
providers[3] = RouteTypesV2.Provider.Curve;
|
|
router.setRoutingConfig(0, providers);
|
|
router.setRoutingConfig(1, providers);
|
|
router.setRoutingConfig(2, providers);
|
|
|
|
vm.stopBroadcast();
|
|
|
|
console.log("EnhancedSwapRouterV2 multi-venue configured:", routerAddress);
|
|
}
|
|
|
|
function _setDodoPair(EnhancedSwapRouterV2 router, address tokenA, address tokenB, address target, address pool)
|
|
internal
|
|
{
|
|
bytes memory providerData = abi.encode(pool);
|
|
router.setProviderRoute(tokenA, tokenB, RouteTypesV2.Provider.Dodo, target, providerData, true);
|
|
router.setProviderRoute(tokenB, tokenA, RouteTypesV2.Provider.Dodo, target, providerData, true);
|
|
}
|
|
|
|
function _setUniswapPair(
|
|
EnhancedSwapRouterV2 router,
|
|
address tokenA,
|
|
address tokenB,
|
|
address target,
|
|
address quoter,
|
|
uint24 fee
|
|
) internal {
|
|
bytes memory providerData = abi.encode(bytes(""), fee, quoter, false);
|
|
router.setProviderRoute(tokenA, tokenB, RouteTypesV2.Provider.UniswapV3, target, providerData, true);
|
|
router.setProviderRoute(tokenB, tokenA, RouteTypesV2.Provider.UniswapV3, target, providerData, true);
|
|
}
|
|
|
|
function _setBalancerPair(
|
|
EnhancedSwapRouterV2 router,
|
|
address tokenA,
|
|
address tokenB,
|
|
address target,
|
|
bytes32 poolId
|
|
) internal {
|
|
bytes memory providerData = abi.encode(poolId);
|
|
router.setProviderRoute(tokenA, tokenB, RouteTypesV2.Provider.Balancer, target, providerData, true);
|
|
router.setProviderRoute(tokenB, tokenA, RouteTypesV2.Provider.Balancer, target, providerData, true);
|
|
}
|
|
|
|
function _setCurvePair(
|
|
EnhancedSwapRouterV2 router,
|
|
address tokenA,
|
|
address tokenB,
|
|
address target,
|
|
int128 i,
|
|
int128 j,
|
|
bool useUnderlying
|
|
) internal {
|
|
bytes memory providerData = abi.encode(i, j, useUnderlying);
|
|
router.setProviderRoute(tokenA, tokenB, RouteTypesV2.Provider.Curve, target, providerData, true);
|
|
router.setProviderRoute(tokenB, tokenA, RouteTypesV2.Provider.Curve, target, providerData, true);
|
|
}
|
|
}
|