From 70d0d2af8cb249d67e729ef0e6c1d7b89eae7bea Mon Sep 17 00:00:00 2001 From: Thai Xuan Dang Date: Thu, 25 Jul 2024 15:41:22 +0700 Subject: [PATCH] script: deploy Aggregate Router --- .gitmodules | 5 -- Makefile | 7 +++ lib/foundry-deployment-kit | 1 - remappings.txt | 7 +-- script/DeployAggregateRouter.s.sol | 36 ++++++++++++ script/GeneralConfig.sol | 45 --------------- script/Migration.s.sol | 31 ---------- script/SDK.sol | 26 --------- script/interfaces/ISharedArgument.sol | 12 ---- .../DeployAggregateRouterTestnet.s.sol | 22 ++++++++ script/utils/Contract.sol | 19 ------- script/utils/Network.sol | 56 ------------------- .../deploy/UnsupportedProtocol.sol | 12 ---- 13 files changed, 67 insertions(+), 212 deletions(-) create mode 100644 Makefile delete mode 160000 lib/foundry-deployment-kit create mode 100644 script/DeployAggregateRouter.s.sol delete mode 100644 script/GeneralConfig.sol delete mode 100644 script/Migration.s.sol delete mode 100644 script/SDK.sol delete mode 100644 script/interfaces/ISharedArgument.sol create mode 100644 script/ronin-testnet/DeployAggregateRouterTestnet.s.sol delete mode 100644 script/utils/Contract.sol delete mode 100644 script/utils/Network.sol delete mode 100644 src/aggregate-router/deploy/UnsupportedProtocol.sol diff --git a/.gitmodules b/.gitmodules index 14b20da..cafc622 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,3 @@ -[submodule "lib/foundry-deployment-kit"] - path = lib/foundry-deployment-kit - url = https://github.com/axieinfinity/foundry-deployment-kit - branch = v0.2.0 - [submodule "lib/openzeppelin-contracts"] path = lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c94b5a7 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +deploy-testnet: + op run --env-file="./.env" -- \ + forge script DeployAggregateRouterTestnet -f ronin-testnet + +deploy-testnet-broadcast: + op run --env-file="./.env" -- \ + forge script DeployAggregateRouterTestnet -f ronin-testnet --verify --verifier sourcify --verifier-url https://sourcify.roninchain.com/server/ --legacy --broadcast \ No newline at end of file diff --git a/lib/foundry-deployment-kit b/lib/foundry-deployment-kit deleted file mode 160000 index 2f48f7d..0000000 --- a/lib/foundry-deployment-kit +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2f48f7dbed4b99688ecd2b42109e3400d296b3a3 diff --git a/remappings.txt b/remappings.txt index aa6782f..1c1919a 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,8 +1,5 @@ -@fdk/=lib/foundry-deployment-kit/script/ -@contract-libs/=lib/foundry-deployment-kit/lib/contract-libs/src/ -forge-std/=lib/foundry-deployment-kit/lib/forge-std/src/ -@solady/=lib/foundry-deployment-kit/lib/solady/src/ @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ solmate/=lib/solmate/ permit2/=lib/permit2/ -@katana/v3-contracts/=lib/katana-v3-contracts/src/ \ No newline at end of file +@katana/v3-contracts/=lib/katana-v3-contracts/src/ +@katana/operation-contracts/=src/ \ No newline at end of file diff --git a/script/DeployAggregateRouter.s.sol b/script/DeployAggregateRouter.s.sol new file mode 100644 index 0000000..f9d5c8f --- /dev/null +++ b/script/DeployAggregateRouter.s.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { Script, console } from "forge-std/Script.sol"; +import { RouterParameters } from "@katana/operation-contracts/aggregate-router/base/RouterImmutables.sol"; +import { AggregateRouter } from "@katana/operation-contracts/aggregate-router/AggregateRouter.sol"; + +abstract contract DeployAggregateRouter is Script { + RouterParameters internal params; + + function setUp() public virtual { + assert(params.permit2 != address(0)); + assert(params.wron != address(0)); + assert(params.v2Factory != address(0)); + assert(params.v3Factory != address(0)); + assert(params.pairInitCodeHash != bytes32(0)); + assert(params.poolInitCodeHash != bytes32(0)); + } + + function run() external returns (AggregateRouter router) { + logParams(); + + vm.broadcast(); + router = new AggregateRouter(params); + console.log("Aggregate Router deployed:", address(router)); + } + + function logParams() internal view { + console.log("permit2:", params.permit2); + console.log("WRON:", params.wron); + console.log("v2Factory:", params.v2Factory); + console.log("v3Factory:", params.v3Factory); + console.log("pairInitCodeHash:", vm.toString(params.pairInitCodeHash)); + console.log("poolInitCodeHash:", vm.toString(params.poolInitCodeHash)); + } +} diff --git a/script/GeneralConfig.sol b/script/GeneralConfig.sol deleted file mode 100644 index 2b88335..0000000 --- a/script/GeneralConfig.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.23; - -import { BaseGeneralConfig } from "@fdk/BaseGeneralConfig.sol"; -import { Contract } from "./utils/Contract.sol"; -import { Network } from "./utils/Network.sol"; - -contract GeneralConfig is BaseGeneralConfig { - constructor() BaseGeneralConfig("", "deployments/") { } - - function _setUpNetworks() internal virtual override { - setNetworkInfo( - Network.Goerli.chainId(), - Network.Goerli.key(), - Network.Goerli.chainAlias(), - Network.Goerli.deploymentDir(), - Network.Goerli.envLabel(), - Network.Goerli.explorer() - ); - setNetworkInfo( - Network.EthMainnet.chainId(), - Network.EthMainnet.key(), - Network.EthMainnet.chainAlias(), - Network.EthMainnet.deploymentDir(), - Network.EthMainnet.envLabel(), - Network.EthMainnet.explorer() - ); - setNetworkInfo( - Network.RoninDevnet.chainId(), - Network.RoninDevnet.key(), - Network.RoninDevnet.chainAlias(), - Network.RoninDevnet.deploymentDir(), - Network.RoninDevnet.envLabel(), - Network.RoninDevnet.explorer() - ); - } - - function _setUpContracts() internal virtual override { - _mapContractName(Contract.Counter); - } - - function _mapContractName(Contract contractEnum) internal { - _contractNameMap[contractEnum.key()] = contractEnum.name(); - } -} diff --git a/script/Migration.s.sol b/script/Migration.s.sol deleted file mode 100644 index 4a5eb4e..0000000 --- a/script/Migration.s.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.23; - -import { BaseMigration } from "@fdk/BaseMigration.s.sol"; -import { DefaultNetwork } from "@fdk/utils/DefaultNetwork.sol"; -import { ISharedArgument } from "./interfaces/ISharedArgument.sol"; -import { Network } from "./utils/Network.sol"; - -contract Migration is BaseMigration { - ISharedArgument public constant vme = ISharedArgument(address(CONFIG)); - - function _configByteCode() internal virtual override returns (bytes memory) { - return vm.getCode("GeneralConfig.sol:GeneralConfig"); - } - - function _sharedArguments() internal virtual override returns (bytes memory rawArgs) { - ISharedArgument.SharedParameter memory param; - - if (network() == Network.Goerli.key()) { - // Undefined - } else if (network() == DefaultNetwork.RoninTestnet.key()) { - // Undefined - } else if (network() == DefaultNetwork.Local.key()) { - // Undefined - } else { - revert("Migration: Network Unknown Shared Parameters Unimplemented!"); - } - - rawArgs = abi.encode(param); - } -} diff --git a/script/SDK.sol b/script/SDK.sol deleted file mode 100644 index e82904b..0000000 --- a/script/SDK.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.23; - -import { console } from "forge-std/console.sol"; -import { StdStyle } from "forge-std/StdStyle.sol"; - -import { TNetwork, TContract } from "@fdk/types/Types.sol"; -import { DefaultNetwork } from "@fdk/utils/DefaultNetwork.sol"; -import { DefaultContract } from "@fdk/utils/DefaultContract.sol"; - -import { LibSig } from "@fdk/libraries/LibSig.sol"; -import { LibProxy } from "@fdk/libraries/LibProxy.sol"; -import { LibSharedAddress } from "@fdk/libraries/LibSharedAddress.sol"; - -import { ISharedArgument } from "./interfaces/ISharedArgument.sol"; -import { Network } from "./utils/Network.sol"; -import { Contract } from "./utils/Contract.sol"; - -import { GeneralConfig } from "./GeneralConfig.sol"; -import { Migration } from "./Migration.s.sol"; - -import { LibErrorHandler } from "@contract-libs/LibErrorHandler.sol"; - -import { LibString } from "@solady/utils/LibString.sol"; -import { GasBurnerLib } from "@solady/utils/GasBurnerLib.sol"; -import { JSONParserLib } from "@solady/utils/JSONParserLib.sol"; diff --git a/script/interfaces/ISharedArgument.sol b/script/interfaces/ISharedArgument.sol deleted file mode 100644 index cd6f7a9..0000000 --- a/script/interfaces/ISharedArgument.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.23; - -import { IGeneralConfig } from "@fdk/interfaces/IGeneralConfig.sol"; - -interface ISharedArgument is IGeneralConfig { - struct SharedParameter { - bool undefined; - } - - function sharedArguments() external view returns (SharedParameter memory param); -} diff --git a/script/ronin-testnet/DeployAggregateRouterTestnet.s.sol b/script/ronin-testnet/DeployAggregateRouterTestnet.s.sol new file mode 100644 index 0000000..13febaa --- /dev/null +++ b/script/ronin-testnet/DeployAggregateRouterTestnet.s.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.17; + +import { RouterParameters } from "@katana/operation-contracts/aggregate-router/base/RouterImmutables.sol"; +import { DeployAggregateRouter } from "../DeployAggregateRouter.s.sol"; + +contract DeployAggregateRouterTestnet is DeployAggregateRouter { + function setUp() public override { + params = RouterParameters({ + permit2: 0x000000000022D473030F116dDEE9F6B43aC78BA3, + wron: 0xA959726154953bAe111746E265E6d754F48570E6, + v2Factory: 0x86587380C4c815Ba0066c90aDB2B45CC9C15E72c, + v3Factory: 0x879b939112A3a41C1253232856637F8D49E95b04, + pairInitCodeHash: 0x1cc97ead4d6949b7a6ecb28652b21159b9fd5608ae51a1960224099caab07dca, + poolInitCodeHash: 0x97ee45181a4d14c00cdcc956fefebfa98f8c8744e3fe6d83e1861dc77ff40a99 + }); + + vm.rememberKey(vm.envUint("TESTNET_PK")); + + super.setUp(); + } +} diff --git a/script/utils/Contract.sol b/script/utils/Contract.sol deleted file mode 100644 index 2877156..0000000 --- a/script/utils/Contract.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.23; - -import { LibString, TContract } from "@fdk/types/Types.sol"; - -enum Contract { - Counter -} - -using { key, name } for Contract global; - -function key(Contract contractEnum) pure returns (TContract) { - return TContract.wrap(LibString.packOne(name(contractEnum))); -} - -function name(Contract contractEnum) pure returns (string memory) { - if (contractEnum == Contract.Counter) return "Counter"; - revert("Contract: Unknown contract"); -} diff --git a/script/utils/Network.sol b/script/utils/Network.sol deleted file mode 100644 index 28ad7fb..0000000 --- a/script/utils/Network.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { LibString, TNetwork } from "@fdk/types/Types.sol"; - -enum Network { - Goerli, - EthMainnet, - RoninDevnet -} - -using { key, name, chainId, chainAlias, envLabel, deploymentDir, explorer } for Network global; - -function chainId(Network network) pure returns (uint256) { - if (network == Network.Goerli) return 5; - if (network == Network.EthMainnet) return 1; - if (network == Network.RoninDevnet) return 2022; - revert("Network: Unknown chain id"); -} - -function key(Network network) pure returns (TNetwork) { - return TNetwork.wrap(LibString.packOne(name(network))); -} - -function explorer(Network network) pure returns (string memory link) { - if (network == Network.Goerli) return "https://goerli.etherscan.io/"; - if (network == Network.EthMainnet) return "https://etherscan.io/"; -} - -function name(Network network) pure returns (string memory) { - if (network == Network.Goerli) return "Goerli"; - if (network == Network.RoninDevnet) return "RoninDevnet"; - if (network == Network.EthMainnet) return "EthMainnet"; - revert("Network: Unknown network name"); -} - -function deploymentDir(Network network) pure returns (string memory) { - if (network == Network.Goerli) return "goerli/"; - if (network == Network.EthMainnet) return "ethereum/"; - if (network == Network.RoninDevnet) return "ronin-devnet/"; - revert("Network: Unknown network deployment directory"); -} - -function envLabel(Network network) pure returns (string memory) { - if (network == Network.Goerli) return "TESTNET_PK"; - if (network == Network.RoninDevnet) return "DEVNET_PK"; - if (network == Network.EthMainnet) return "MAINNET_PK"; - revert("Network: Unknown private key env label"); -} - -function chainAlias(Network network) pure returns (string memory) { - if (network == Network.Goerli) return "goerli"; - if (network == Network.EthMainnet) return "ethereum"; - if (network == Network.RoninDevnet) return "ronin-devnet"; - revert("Network: Unknown network alias"); -} diff --git a/src/aggregate-router/deploy/UnsupportedProtocol.sol b/src/aggregate-router/deploy/UnsupportedProtocol.sol deleted file mode 100644 index e0f5579..0000000 --- a/src/aggregate-router/deploy/UnsupportedProtocol.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity ^0.8.17; - -/// @title Dummy contract that always reverts -/// @notice Used as a placeholder to ensure reverts on attempted calls to protocols unsupported on a given chain -contract UnsupportedProtocol { - error UnsupportedProtocolError(); - - fallback() external { - revert UnsupportedProtocolError(); - } -}