97 lines
4.1 KiB
Solidity
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();
|
|
}
|
|
}
|