protocol/contracts/zero-ex/script/mtxv2_deploy.s.sol
2023-04-10 12:08:56 -04:00

97 lines
4.1 KiB
Solidity

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.5;
pragma experimental ABIEncoderV2;
import "forge-std/Script.sol";
import "forge-std/console.sol";
import "@0x/contracts-erc20/src/IEtherToken.sol";
import "../contracts/src/external/ILiquidityProviderSandbox.sol";
import '../contracts/src/features/interfaces/IMetaTransactionsFeatureV2.sol';
import '../contracts/src/features/interfaces/IMultiplexFeature.sol';
import '../contracts/src/features/interfaces/IUniswapV3Feature.sol';
import '../contracts/src/features/MetaTransactionsFeatureV2.sol';
import '../contracts/src/features/UniswapV3Feature.sol';
import '../contracts/src/features/multiplex/MultiplexFeature.sol';
contract ContractScript is Script {
struct ChainConfig {
address zeroExAddress;
address wethAddress;
address liquidityProviderSandbox;
address uniswapV3Factory;
address uniswapV2Factory;
address sushiswapFactory;
bytes32 uniswapV3PoolInitCodeHash;
bytes32 uniswapV2PairInitCodeHash;
bytes32 sushiswapPairInitCodeHash;
}
function _getChainConfig() internal pure returns (ChainConfig memory) {
uint256 chainId;
assembly {
chainId := chainid()
}
if (chainId == 1) { // Ethereum
ChainConfig memory chainConfig = ChainConfig(
0xDef1C0ded9bec7F1a1670819833240f027b25EfF, // 0x EP
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, // weth address
0x407B4128E9eCaD8769B2332312a9F655cB9F5F3A, // LP sandbox
0x1F98431c8aD98523631AE4a59f267346ea31F984, // uniswapv3
0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f, // uniswapv2
0xC0AEe478e3658e2610c5F7A4A2E1777cE9e4f2Ac, // sushiswap
bytes32(0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54),
bytes32(0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f),
bytes32(0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303)
);
return chainConfig;
}
if (chainId == 137) { // polygon
ChainConfig memory chainConfig = ChainConfig(
0xDef1C0ded9bec7F1a1670819833240f027b25EfF, // 0x EP
0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270, // wmatic address
0x4Dd97080aDf36103bD3db822f9d3c0e44890fd69, // LP sandbox
0x1F98431c8aD98523631AE4a59f267346ea31F984, // uniswapv3
address(0), // there is no uniswapv2 on polygon
0xc35DADB65012eC5796536bD9864eD8773aBc74C4, // sushiswap
bytes32(0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54),
bytes32(0), // there is no uniswapv2 on polygon
bytes32(0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303)
);
return chainConfig;
}
revert("unsupported chain");
}
function run() public {
ChainConfig memory chainConfig = _getChainConfig();
vm.startBroadcast();
MetaTransactionsFeatureV2 mtx = new MetaTransactionsFeatureV2(chainConfig.zeroExAddress, IEtherToken(chainConfig.wethAddress));
console.log("MetaTransactionsFeatureV2 address:", address(mtx));
UniswapV3Feature uni = new UniswapV3Feature(
IEtherToken(chainConfig.wethAddress),
chainConfig.uniswapV3Factory,
chainConfig.uniswapV3PoolInitCodeHash
);
console.log("UniswapV3Feature address:", address(uni));
MultiplexFeature multi = new MultiplexFeature(
chainConfig.zeroExAddress,
IEtherToken(chainConfig.wethAddress),
ILiquidityProviderSandbox(chainConfig.liquidityProviderSandbox),
chainConfig.uniswapV2Factory,
chainConfig.sushiswapFactory,
chainConfig.uniswapV2PairInitCodeHash,
chainConfig.sushiswapPairInitCodeHash
);
console.log("MultiplexFeature address:", address(multi));
vm.stopBroadcast();
}
}