From 2b39ae4800b96138521a106eb3c63b7a8f5e7e96 Mon Sep 17 00:00:00 2001 From: Michael Zhu Date: Mon, 3 Aug 2020 11:39:04 -0700 Subject: [PATCH] Redeploy/verify testnet contracts :roll_eyes: --- contracts/asset-proxy/src/index.ts | 1 + .../contracts/src/DeploymentConstants.sol | 110 +++-- packages/contract-addresses/addresses.json | 102 ++--- packages/migrations/src/migration.ts | 421 ++++++++++-------- 4 files changed, 368 insertions(+), 266 deletions(-) diff --git a/contracts/asset-proxy/src/index.ts b/contracts/asset-proxy/src/index.ts index b95851265b..7e31c510b3 100644 --- a/contracts/asset-proxy/src/index.ts +++ b/contracts/asset-proxy/src/index.ts @@ -18,6 +18,7 @@ export { TestDydxBridgeContract, TestStaticCallTargetContract, UniswapBridgeContract, + DexForwarderBridgeContract, } from './wrappers'; export { ERC20Wrapper } from './erc20_wrapper'; diff --git a/contracts/utils/contracts/src/DeploymentConstants.sol b/contracts/utils/contracts/src/DeploymentConstants.sol index 7950ccc0e5..0f387fbf90 100644 --- a/contracts/utils/contracts/src/DeploymentConstants.sol +++ b/contracts/utils/contracts/src/DeploymentConstants.sol @@ -51,33 +51,89 @@ contract DeploymentConstants { /// @dev Mainnet address of the GST Collector address constant private GST_COLLECTOR_ADDRESS = 0x000000D3b08566BE75A6DB803C03C85C0c1c5B96; - // Kovan addresses ///////////////////////////////////////////////////////// - // /// @dev Kovan address of the WETH contract. - // address constant private WETH_ADDRESS = 0xd0A1E359811322d97991E03f863a0C30C2cF029C; - // /// @dev Kovan address of the KyberNetworkProxy contract. - // address constant private KYBER_NETWORK_PROXY_ADDRESS = 0x692f391bCc85cefCe8C237C01e1f636BbD70EA4D; - // /// @dev Kovan address of the `UniswapExchangeFactory` contract. - // address constant private UNISWAP_EXCHANGE_FACTORY_ADDRESS = 0xD3E51Ef092B2845f10401a0159B2B96e8B6c3D30; - // /// @dev Kovan address of the `UniswapV2Router01` contract. - // address constant private UNISWAP_V2_ROUTER_01_ADDRESS = 0xf164fC0Ec4E93095b804a4795bBe1e041497b92a; - // /// @dev Kovan address of the Eth2Dai `MatchingMarket` contract. - // address constant private ETH2DAI_ADDRESS = 0xe325acB9765b02b8b418199bf9650972299235F4; - // /// @dev Kovan address of the `ERC20BridgeProxy` contract - // address constant private ERC20_BRIDGE_PROXY_ADDRESS = 0xFb2DD2A1366dE37f7241C83d47DA58fd503E2C64; - // /// @dev Kovan address of the `Chai` contract - // address constant private CHAI_ADDRESS = address(0); - // /// @dev Kovan address of the `Dai` (multi-collateral) contract - // address constant private DAI_ADDRESS = 0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa; - // /// @dev Kovan address of the 0x DevUtils contract. - // address constant private DEV_UTILS_ADDRESS = 0x9402639A828BdF4E9e4103ac3B69E1a6E522eB59; - // /// @dev Kyber ETH pseudo-address. - // address constant internal KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; - // /// @dev Kovan address of the dYdX contract. - // address constant private DYDX_ADDRESS = address(0); - // /// @dev Kovan address of the GST2 contract - // address constant private GST_ADDRESS = address(0); - // /// @dev Kovan address of the GST Collector - // address constant private GST_COLLECTOR_ADDRESS = address(0); + /* // Ropsten addresses /////////////////////////////////////////////////////// + /// @dev Mainnet address of the WETH contract. + address constant private WETH_ADDRESS = 0xc778417E063141139Fce010982780140Aa0cD5Ab; + /// @dev Mainnet address of the KyberNetworkProxy contract. + address constant private KYBER_NETWORK_PROXY_ADDRESS = address(0); + /// @dev Mainnet address of the `UniswapExchangeFactory` contract. + address constant private UNISWAP_EXCHANGE_FACTORY_ADDRESS = address(0); + /// @dev Mainnet address of the `UniswapV2Router01` contract. + address constant private UNISWAP_V2_ROUTER_01_ADDRESS = address(0); + /// @dev Mainnet address of the Eth2Dai `MatchingMarket` contract. + address constant private ETH2DAI_ADDRESS = address(0); + /// @dev Mainnet address of the `ERC20BridgeProxy` contract + address constant private ERC20_BRIDGE_PROXY_ADDRESS = 0xb344afeD348de15eb4a9e180205A2B0739628339; + ///@dev Mainnet address of the `Dai` (multi-collateral) contract + address constant private DAI_ADDRESS = address(0); + /// @dev Mainnet address of the `Chai` contract + address constant private CHAI_ADDRESS = address(0); + /// @dev Mainnet address of the 0x DevUtils contract. + address constant private DEV_UTILS_ADDRESS = 0xC812AF3f3fBC62F76ea4262576EC0f49dB8B7f1c; + /// @dev Kyber ETH pseudo-address. + address constant internal KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + /// @dev Mainnet address of the dYdX contract. + address constant private DYDX_ADDRESS = address(0); + /// @dev Mainnet address of the GST2 contract + address constant private GST_ADDRESS = address(0); + /// @dev Mainnet address of the GST Collector + address constant private GST_COLLECTOR_ADDRESS = address(0); */ + + /* // Rinkeby addresses /////////////////////////////////////////////////////// + /// @dev Mainnet address of the WETH contract. + address constant private WETH_ADDRESS = 0xc778417E063141139Fce010982780140Aa0cD5Ab; + /// @dev Mainnet address of the KyberNetworkProxy contract. + address constant private KYBER_NETWORK_PROXY_ADDRESS = address(0); + /// @dev Mainnet address of the `UniswapExchangeFactory` contract. + address constant private UNISWAP_EXCHANGE_FACTORY_ADDRESS = address(0); + /// @dev Mainnet address of the `UniswapV2Router01` contract. + address constant private UNISWAP_V2_ROUTER_01_ADDRESS = address(0); + /// @dev Mainnet address of the Eth2Dai `MatchingMarket` contract. + address constant private ETH2DAI_ADDRESS = address(0); + /// @dev Mainnet address of the `ERC20BridgeProxy` contract + address constant private ERC20_BRIDGE_PROXY_ADDRESS = 0xA2AA4bEFED748Fba27a3bE7Dfd2C4b2c6DB1F49B; + ///@dev Mainnet address of the `Dai` (multi-collateral) contract + address constant private DAI_ADDRESS = address(0); + /// @dev Mainnet address of the `Chai` contract + address constant private CHAI_ADDRESS = address(0); + /// @dev Mainnet address of the 0x DevUtils contract. + address constant private DEV_UTILS_ADDRESS = 0x46B5BC959e8A754c0256FFF73bF34A52Ad5CdfA9; + /// @dev Kyber ETH pseudo-address. + address constant internal KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + /// @dev Mainnet address of the dYdX contract. + address constant private DYDX_ADDRESS = address(0); + /// @dev Mainnet address of the GST2 contract + address constant private GST_ADDRESS = address(0); + /// @dev Mainnet address of the GST Collector + address constant private GST_COLLECTOR_ADDRESS = address(0); */ + + /* // Kovan addresses ///////////////////////////////////////////////////////// + /// @dev Kovan address of the WETH contract. + address constant private WETH_ADDRESS = 0xd0A1E359811322d97991E03f863a0C30C2cF029C; + /// @dev Kovan address of the KyberNetworkProxy contract. + address constant private KYBER_NETWORK_PROXY_ADDRESS = 0x692f391bCc85cefCe8C237C01e1f636BbD70EA4D; + /// @dev Kovan address of the `UniswapExchangeFactory` contract. + address constant private UNISWAP_EXCHANGE_FACTORY_ADDRESS = 0xD3E51Ef092B2845f10401a0159B2B96e8B6c3D30; + /// @dev Kovan address of the `UniswapV2Router01` contract. + address constant private UNISWAP_V2_ROUTER_01_ADDRESS = 0xf164fC0Ec4E93095b804a4795bBe1e041497b92a; + /// @dev Kovan address of the Eth2Dai `MatchingMarket` contract. + address constant private ETH2DAI_ADDRESS = 0xe325acB9765b02b8b418199bf9650972299235F4; + /// @dev Kovan address of the `ERC20BridgeProxy` contract + address constant private ERC20_BRIDGE_PROXY_ADDRESS = 0x3577552C1Fb7A44aD76BeEB7aB53251668A21F8D; + /// @dev Kovan address of the `Chai` contract + address constant private CHAI_ADDRESS = address(0); + /// @dev Kovan address of the `Dai` (multi-collateral) contract + address constant private DAI_ADDRESS = 0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa; + /// @dev Kovan address of the 0x DevUtils contract. + address constant private DEV_UTILS_ADDRESS = 0x9402639A828BdF4E9e4103ac3B69E1a6E522eB59; + /// @dev Kyber ETH pseudo-address. + address constant internal KYBER_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + /// @dev Kovan address of the dYdX contract. + address constant private DYDX_ADDRESS = address(0); + /// @dev Kovan address of the GST2 contract + address constant private GST_ADDRESS = address(0); + /// @dev Kovan address of the GST Collector + address constant private GST_COLLECTOR_ADDRESS = address(0); */ /// @dev Overridable way to get the `KyberNetworkProxy` address. /// @return kyberAddress The `IKyberNetworkProxy` address. diff --git a/packages/contract-addresses/addresses.json b/packages/contract-addresses/addresses.json index fbfb520df2..18793fd4bb 100644 --- a/packages/contract-addresses/addresses.json +++ b/packages/contract-addresses/addresses.json @@ -47,25 +47,25 @@ } }, "3": { - "erc20Proxy": "0xb1408f4c245a23c31b98d2c626777d4c0d766caa", - "erc721Proxy": "0xe654aac058bfbf9f83fcaee7793311dd82f6ddb4", + "erc20Proxy": "0xf1ec7d0ba42f15fb5c9e3adbe86431973e44764c", + "erc721Proxy": "0x070efeb7e5ffa3d1a59d03a219539551ae60ba43", "zrxToken": "0xff67881f8d12f372d91baae9752eb3631ff0ed00", "etherToken": "0xc778417e063141139fce010982780140aa0cd5ab", "exchangeV2": "0xbff9493f92a3df4b0429b6d00743b3cfb4c85831", - "exchange": "0xfb2dd2a1366de37f7241c83d47da58fd503e2c64", + "exchange": "0x5d8c9ba74607d2cbc4176882a42d4ace891c1c00", "assetProxyOwner": "0x0000000000000000000000000000000000000000", "zeroExGovernor": "0x53993733d41a88ae86f77a18a024e5548ee26579", - "forwarder": "0x2127a60bedfba1c01857b09b8f24094049c48493", - "coordinatorRegistry": "0x403cc23e88c17c4652fb904784d1af640a6722d9", - "coordinator": "0x6ff734d96104965c9c1b0108f83abc46e6e501df", - "multiAssetProxy": "0xab8fbd189c569ccdee3a4d929bb7f557be4028f6", - "staticCallProxy": "0xe1b97e47aa3796276033a5341e884d2ba46b6ac1", - "erc1155Proxy": "0x19bb6caa3bc34d39e5a23cedfa3e6c7e7f3c931d", - "devUtils": "0x88e746ad9ab158210266e7765adbe1756c73cf84", - "zrxVault": "0xffd161026865ad8b4ab28a76840474935eec4dfa", - "staking": "0x986b588e472b712385579d172494fe2685669504", - "stakingProxy": "0xfaabcee42ab6b9c649794ac6c133711071897ee9", - "erc20BridgeProxy": "0x599b340b5045436a99b1f0c718d30f5a0c8519dd", + "forwarder": "0xd5abddda4ba89c0120edc0ca8a95ed1ad0bf9fc3", + "coordinatorRegistry": "0xf8becacec90bfc361c0a2c720839e08405a72f6d", + "coordinator": "0xc2e2f8faf4bf649123b6f94103646cb4a0331006", + "multiAssetProxy": "0x7b70a148e20b348c320208df84fdd642aab49fd0", + "staticCallProxy": "0xaa460127562482faa5df42f2c39a025cd4a1cc0a", + "erc1155Proxy": "0x7f10d80f2659aaae790ab03da12be11c4e6008c3", + "devUtils": "0xc812af3f3fbc62f76ea4262576ec0f49db8b7f1c", + "zrxVault": "0x38bbb9fb54a6b6d0376948bf3b2a7ed1e8aea6e8", + "staking": "0x4af649ffde640ceb34b1afaba3e0bb8e9698cb01", + "stakingProxy": "0x6acab4c9c4e3a0c78435fdb5ad1719c95460a668", + "erc20BridgeProxy": "0xb344afed348de15eb4a9e180205a2b0739628339", "uniswapBridge": "0x0000000000000000000000000000000000000000", "uniswapV2Bridge": "0x0000000000000000000000000000000000000000", "eth2DaiBridge": "0x0000000000000000000000000000000000000000", @@ -74,11 +74,11 @@ "chaiBridge": "0x0000000000000000000000000000000000000000", "dydxBridge": "0x0000000000000000000000000000000000000000", "godsUnchainedValidator": "0xd4690a51044db77d91d7aa8f7a3a5ad5da331af0", - "broker": "0x4aa817c6f383c8e8ae77301d18ce48efb16fd2be", + "broker": "0x4022e3982f326455f0905de3dbc4449999baf2dc", "chainlinkStopLimit": "0x67a094cf028221ffdd93fc658f963151d05e2a74", "curveBridge": "0x1796cd592d19e3bcd744fbb025bb61a6d8cb2c09", "maximumGasPrice": "0x407b4128e9ecad8769b2332312a9f655cb9f5f3a", - "dexForwarderBridge": "0x3be8e59038d8c4e8d8776ca40ef2f024bad95ad1", + "dexForwarderBridge": "0x3261ea1411a1a840aed708896f779e1b837c917e", "multiBridge": "0x0000000000000000000000000000000000000000", "balancerBridge": "0x47697b44bd89051e93b4d5857ba8e024800a74ac", "exchangeProxyGovernor": "0x618f9c67ce7bf1a50afa1e7e0238422601b0ff6e", @@ -89,30 +89,30 @@ "transformers": { "wethTransformer": "0x7bab5f7299e1ca123bb44eb71e6c89be7e558cc8", "payTakerTransformer": "0xe8c07a119452b55eee2f999478aab97f3656d841", - "fillQuoteTransformer": "0x43bea7eaca21a14a411274fb365707080ff25f80", + "fillQuoteTransformer": "0xfadbeff43a07dedeb69eda5590be1b78be3d1044", "affiliateFeeTransformer": "0x9d7174f55b50dad2e417bd567ad2da1ae4eef76d" } }, "4": { "exchangeV2": "0xbff9493f92a3df4b0429b6d00743b3cfb4c85831", - "exchange": "0x198805e9682fceec29413059b68550f92868c129", - "erc20Proxy": "0x2f5ae4f6106e89b4147651688a92256885c5f410", - "erc721Proxy": "0x7656d773e11ff7383a14dcf09a9c50990481cd10", + "exchange": "0xf8becacec90bfc361c0a2c720839e08405a72f6d", + "erc20Proxy": "0x070efeb7e5ffa3d1a59d03a219539551ae60ba43", + "erc721Proxy": "0x7f10d80f2659aaae790ab03da12be11c4e6008c3", "zrxToken": "0x8080c7e4b81ecf23aa6f877cfbfd9b0c228c6ffa", "etherToken": "0xc778417e063141139fce010982780140aa0cd5ab", "assetProxyOwner": "0x0000000000000000000000000000000000000000", "zeroExGovernor": "0x3f46b98061a3e1e1f41dff296ec19402c298f8a9", - "forwarder": "0x18571835c95a6d79b2f5c45b676ccd16f5fa34a1", - "coordinatorRegistry": "0x1084b6a398e47907bae43fec3ff4b677db6e4fee", - "coordinator": "0x70c5385ee5ee4629ef72abd169e888c8b4a12238", - "multiAssetProxy": "0xb34cde0ad3a83d04abebc0b66e75196f22216621", - "staticCallProxy": "0xe1b97e47aa3796276033a5341e884d2ba46b6ac1", - "erc1155Proxy": "0x19bb6caa3bc34d39e5a23cedfa3e6c7e7f3c931d", - "devUtils": "0x9402639a828bdf4e9e4103ac3b69e1a6e522eb59", - "zrxVault": "0xa5bf6ac73bc40790fc6ffc9dbbbce76c9176e224", - "staking": "0x7cbe3c09cba24f26db24d9100ee915fa9fa21f5b", - "stakingProxy": "0xc6ad5277ea225ac05e271eb14a7ebb480cd9dd9f", - "erc20BridgeProxy": "0x31b8653642110f17bdb1f719901d7e7d49b08141", + "forwarder": "0xe30f6166fe1cd5f0048abeed3d20360feb4a1fd8", + "coordinatorRegistry": "0xc2e2f8faf4bf649123b6f94103646cb4a0331006", + "coordinator": "0xf1ec7d0ba42f15fb5c9e3adbe86431973e44764c", + "multiAssetProxy": "0xb344afed348de15eb4a9e180205a2b0739628339", + "staticCallProxy": "0x7b70a148e20b348c320208df84fdd642aab49fd0", + "erc1155Proxy": "0xaa460127562482faa5df42f2c39a025cd4a1cc0a", + "devUtils": "0x46b5bc959e8a754c0256fff73bf34a52ad5cdfa9", + "zrxVault": "0x4af649ffde640ceb34b1afaba3e0bb8e9698cb01", + "staking": "0x6acab4c9c4e3a0c78435fdb5ad1719c95460a668", + "stakingProxy": "0x781ee6683595f823208be6540a279f940e6af196", + "erc20BridgeProxy": "0xa2aa4befed748fba27a3be7dfd2c4b2c6db1f49b", "uniswapBridge": "0x0000000000000000000000000000000000000000", "uniswapV2Bridge": "0x0000000000000000000000000000000000000000", "eth2DaiBridge": "0x0000000000000000000000000000000000000000", @@ -121,7 +121,7 @@ "chaiBridge": "0x0000000000000000000000000000000000000000", "dydxBridge": "0x0000000000000000000000000000000000000000", "godsUnchainedValidator": "0x0000000000000000000000000000000000000000", - "broker": "0x0000000000000000000000000000000000000000", + "broker": "0x0dd2d6cabbd8ae7d2fe6840fa597a44b1a7e4747", "chainlinkStopLimit": "0x407b4128e9ecad8769b2332312a9f655cb9f5f3a", "curveBridge": "0x1796cd592d19e3bcd744fbb025bb61a6d8cb2c09", "maximumGasPrice": "0x47697b44bd89051e93b4d5857ba8e024800a74ac", @@ -136,43 +136,43 @@ "transformers": { "wethTransformer": "0x7bab5f7299e1ca123bb44eb71e6c89be7e558cc8", "payTakerTransformer": "0xe8c07a119452b55eee2f999478aab97f3656d841", - "fillQuoteTransformer": "0x2013735f6df965494a0fbc292f84dd44debaba3e", + "fillQuoteTransformer": "0x454cC891dc428Be81d1d6Fd3dd7026a752FBFBc9", "affiliateFeeTransformer": "0x9d7174f55b50dad2e417bd567ad2da1ae4eef76d" } }, "42": { - "erc20Proxy": "0xf1ec01d6236d3cd881a0bf0130ea25fe4234003e", - "erc721Proxy": "0x2a9127c745688a165106c11cd4d647d2220af821", + "erc20Proxy": "0xaa460127562482faa5df42f2c39a025cd4a1cc0a", + "erc721Proxy": "0x7b70a148e20b348c320208df84fdd642aab49fd0", "zrxToken": "0x2002d3812f58e35f0ea1ffbf80a75a38c32175fa", "etherToken": "0xd0a1e359811322d97991e03f863a0c30c2cf029c", "exchangeV2": "0x30589010550762d2f0d06f650d8e8b6ade6dbf4b", - "exchange": "0x4eacd0af335451709e1e7b570b8ea68edec8bc97", + "exchange": "0xf1ec7d0ba42f15fb5c9e3adbe86431973e44764c", "assetProxyOwner": "0x0000000000000000000000000000000000000000", "zeroExGovernor": "0x6ff734d96104965c9c1b0108f83abc46e6e501df", - "forwarder": "0x01c0ecf5d1a22de07a2de84c322bfa2b5435990e", - "coordinatorRegistry": "0x09fb99968c016a3ff537bf58fb3d9fe55a7975d5", - "coordinator": "0xd29e59e51e8ab5f94121efaeebd935ca4214e257", - "multiAssetProxy": "0xf6313a772c222f51c28f2304c0703b8cf5428fd8", - "staticCallProxy": "0x48e94bdb9033640d45ea7c721e25f380f8bffa43", - "erc1155Proxy": "0x64517fa2b480ba3678a2a3c0cf08ef7fd4fad36f", - "devUtils": "0x9402639a828bdf4e9e4103ac3b69e1a6e522eb59", - "zrxVault": "0xf36eabdfe986b35b62c8fd5a98a7f2aebb79b291", - "staking": "0x32b06d5611a03737a5f1834a24ccd641033fd89c", - "stakingProxy": "0xbab9145f1d57cd4bb0c9aa2d1ece0a5b6e734d34", - "erc20BridgeProxy": "0xfb2dd2a1366de37f7241c83d47da58fd503e2c64", + "forwarder": "0x0f64646a5154ae5e58b6dd87ede7b04f508d76f8", + "coordinatorRegistry": "0x070efeb7e5ffa3d1a59d03a219539551ae60ba43", + "coordinator": "0x7f10d80f2659aaae790ab03da12be11c4e6008c3", + "multiAssetProxy": "0x58a01e826e60731247e7de8b446ed4c8535a099c", + "staticCallProxy": "0xa2aa4befed748fba27a3be7dfd2c4b2c6db1f49b", + "erc1155Proxy": "0xb344afed348de15eb4a9e180205a2b0739628339", + "devUtils": "0xc67ae71928568a180b3aad1339dedcf3076876fe", + "zrxVault": "0x781ee6683595f823208be6540a279f940e6af196", + "staking": "0x73ea24041e03a012c51a45c307e0ba376af0238c", + "stakingProxy": "0xe94cb304b3f515be7c95fedcfa249a84995fd748", + "erc20BridgeProxy": "0x3577552c1fb7a44ad76beeb7ab53251668a21f8d", "uniswapBridge": "0x0e85f89f29998df65402391478e5924700c0079d", "uniswapV2Bridge": "0x7b3530a635d099de0534dc27e46cd7c57578c3c8", "eth2DaiBridge": "0x2d47147429b474d2e4f83e658015858a1312ed5b", "erc20BridgeSampler": "0xcf9e66851f274aa4721e54526117876d90d51aa1", "kyberBridge": "0xaecfa25920f892b6eb496e1f6e84037f59da7f44", "chaiBridge": "0x0000000000000000000000000000000000000000", - "dydxBridge": "0x3be8e59038d8c4e8d8776ca40ef2f024bad95ad1", + "dydxBridge": "0xc213707de0454008758071c2edc1365621b8a5c5", "godsUnchainedValidator": "0x0000000000000000000000000000000000000000", - "broker": "0x0000000000000000000000000000000000000000", + "broker": "0xcdeb6d90ee7c96b4c713f7bb4f8604981f7ebe9d", "chainlinkStopLimit": "0x0000000000000000000000000000000000000000", "curveBridge": "0x81c0ab53a7352d2e97f682a37cba44e54647eefb", "maximumGasPrice": "0x67a094cf028221ffdd93fc658f963151d05e2a74", - "dexForwarderBridge": "0xf220eb0b29e18bbc8ebc964e915b7547c7b4de4f", + "dexForwarderBridge": "0x985d1a95c6a86a3bf85c4d425af984abceaf01de", "multiBridge": "0x0000000000000000000000000000000000000000", "balancerBridge": "0x407b4128e9ecad8769b2332312a9f655cb9f5f3a", "exchangeProxyGovernor": "0x618f9c67ce7bf1a50afa1e7e0238422601b0ff6e", @@ -183,7 +183,7 @@ "transformers": { "wethTransformer": "0x7bab5f7299e1ca123bb44eb71e6c89be7e558cc8", "payTakerTransformer": "0xe8c07a119452b55eee2f999478aab97f3656d841", - "fillQuoteTransformer": "0xbc33dd7a09da8ca943517a0fb786bcf0192f8be2", + "fillQuoteTransformer": "0xA8c8Cf29699F223766F47FE79e2B7eB1a90e08C8", "affiliateFeeTransformer": "0x9d7174f55b50dad2e417bd567ad2da1ae4eef76d" } }, diff --git a/packages/migrations/src/migration.ts b/packages/migrations/src/migration.ts index 0646511e52..7f8f972e88 100644 --- a/packages/migrations/src/migration.ts +++ b/packages/migrations/src/migration.ts @@ -14,13 +14,10 @@ import { CoordinatorRegistryContract, } from '@0x/contracts-coordinator'; import { artifacts as devUtilsArtifacts, DevUtilsContract } from '@0x/contracts-dev-utils'; -import { artifacts as erc1155Artifacts, ERC1155MintableContract } from '@0x/contracts-erc1155'; -import { artifacts as erc20Artifacts, DummyERC20TokenContract, WETH9Contract } from '@0x/contracts-erc20'; -import { - artifacts as erc20BridgeSamplerArtifacts, - ERC20BridgeSamplerContract, -} from '@0x/contracts-erc20-bridge-sampler'; -import { artifacts as erc721Artifacts, DummyERC721TokenContract } from '@0x/contracts-erc721'; +import { artifacts as erc1155Artifacts } from '@0x/contracts-erc1155'; +import { artifacts as erc20Artifacts } from '@0x/contracts-erc20'; +import { artifacts as erc20BridgeSamplerArtifacts } from '@0x/contracts-erc20-bridge-sampler'; +import { artifacts as erc721Artifacts } from '@0x/contracts-erc721'; import { artifacts as exchangeArtifacts, ExchangeContract } from '@0x/contracts-exchange'; import { artifacts as forwarderArtifacts, ForwarderContract } from '@0x/contracts-exchange-forwarder'; import { @@ -38,13 +35,13 @@ import { ITransformERC20Contract, PayTakerTransformerContract, WethTransformerContract, + ZeroExContract, } from '@0x/contracts-zero-ex'; -import { Web3ProviderEngine } from '@0x/subproviders'; +import { Web3ProviderEngine, ZeroExProvider } from '@0x/subproviders'; import { BigNumber, providerUtils } from '@0x/utils'; import { SupportedProvider, TxData } from 'ethereum-types'; import { constants } from './utils/constants'; -import { erc20TokenInfo, erc721TokenInfo } from './utils/token_info'; const allArtifacts = { ...assetProxyArtifacts, @@ -61,6 +58,53 @@ const allArtifacts = { }; const { NULL_ADDRESS } = constants; +const NULL_ADDRESSES = { + erc20Proxy: NULL_ADDRESS, + erc721Proxy: NULL_ADDRESS, + erc1155Proxy: NULL_ADDRESS, + zrxToken: NULL_ADDRESS, + etherToken: NULL_ADDRESS, + exchange: NULL_ADDRESS, + assetProxyOwner: NULL_ADDRESS, + erc20BridgeProxy: NULL_ADDRESS, + zeroExGovernor: NULL_ADDRESS, + forwarder: NULL_ADDRESS, + coordinatorRegistry: NULL_ADDRESS, + coordinator: NULL_ADDRESS, + multiAssetProxy: NULL_ADDRESS, + staticCallProxy: NULL_ADDRESS, + devUtils: NULL_ADDRESS, + exchangeV2: NULL_ADDRESS, + zrxVault: NULL_ADDRESS, + staking: NULL_ADDRESS, + stakingProxy: NULL_ADDRESS, + uniswapBridge: NULL_ADDRESS, + eth2DaiBridge: NULL_ADDRESS, + kyberBridge: NULL_ADDRESS, + erc20BridgeSampler: NULL_ADDRESS, + chaiBridge: NULL_ADDRESS, + dydxBridge: NULL_ADDRESS, + curveBridge: NULL_ADDRESS, + uniswapV2Bridge: NULL_ADDRESS, + godsUnchainedValidator: NULL_ADDRESS, + broker: NULL_ADDRESS, + chainlinkStopLimit: NULL_ADDRESS, + maximumGasPrice: NULL_ADDRESS, + dexForwarderBridge: NULL_ADDRESS, + multiBridge: NULL_ADDRESS, + balancerBridge: NULL_ADDRESS, + exchangeProxyGovernor: NULL_ADDRESS, + exchangeProxy: NULL_ADDRESS, + exchangeProxyAllowanceTarget: NULL_ADDRESS, + exchangeProxyTransformerDeployer: NULL_ADDRESS, + exchangeProxyFlashWallet: NULL_ADDRESS, + transformers: { + wethTransformer: NULL_ADDRESS, + payTakerTransformer: NULL_ADDRESS, + fillQuoteTransformer: NULL_ADDRESS, + affiliateFeeTransformer: NULL_ADDRESS, + }, +}; /** * Creates and deploys all the contracts that are required for the latest @@ -75,7 +119,135 @@ export async function runMigrationsAsync( ): Promise { const provider = providerUtils.standardizeOrThrow(supportedProvider); const chainId = new BigNumber(await providerUtils.getChainIdAsync(provider)); + const { exchangeV2, etherToken, zrxToken } = getContractAddressesForChainOrThrow(chainId.toNumber()); + // Exchange + const exchange = await ExchangeContract.deployFrom0xArtifactAsync( + exchangeArtifacts.Exchange, + provider, + txDefaults, + allArtifacts, + chainId, + ); + + // Dev Utils + const devUtils = await DevUtilsContract.deployWithLibrariesFrom0xArtifactAsync( + devUtilsArtifacts.DevUtils, + devUtilsArtifacts, + provider, + txDefaults, + allArtifacts, + exchange.address, + NULL_ADDRESS, + NULL_ADDRESS, + ); + + // CoordinatorRegistry + const coordinatorRegistry = await CoordinatorRegistryContract.deployFrom0xArtifactAsync( + coordinatorArtifacts.CoordinatorRegistry, + provider, + txDefaults, + allArtifacts, + ); + + // Coordinator + const coordinator = await CoordinatorContract.deployFrom0xArtifactAsync( + coordinatorArtifacts.Coordinator, + provider, + txDefaults, + allArtifacts, + exchange.address, + chainId, + ); + + const [ + erc20Proxy, + erc721Proxy, + erc1155Proxy, + staticCallProxy, + multiAssetProxy, + erc20BridgeProxy, + ] = await _migrateAssetProxiesAsync(exchange, provider, txDefaults); + + const [zrxVault, stakingLogic, stakingProxy] = await _migrateStakingAsync( + exchange, + erc20Proxy, + zrxToken, + etherToken, + provider, + txDefaults, + ); + + // Forwarder + // Deployed after Exchange and Staking is configured as it queries + // in the constructor + const forwarder = await ForwarderContract.deployFrom0xArtifactAsync( + forwarderArtifacts.Forwarder, + provider, + txDefaults, + allArtifacts, + exchange.address, + exchangeV2, + etherToken, + ); + + const [ + exchangeProxy, + fillQuoteTransformer, + payTakerTransformer, + wethTransformer, + affiliateFeeTransformer, + exchangeProxyFlashWalletAddress, + exchangeProxyAllowanceTargetAddress, + ] = await _migrateExchangeProxyAsync(exchange, etherToken, provider, txDefaults); + + const contractAddresses = { + ...NULL_ADDRESSES, + erc20Proxy: erc20Proxy.address, + erc721Proxy: erc721Proxy.address, + erc1155Proxy: erc1155Proxy.address, + zrxToken, + etherToken, + exchange: exchange.address, + erc20BridgeProxy: erc20BridgeProxy.address, + forwarder: forwarder.address, + coordinatorRegistry: coordinatorRegistry.address, + coordinator: coordinator.address, + multiAssetProxy: multiAssetProxy.address, + staticCallProxy: staticCallProxy.address, + devUtils: devUtils.address, + exchangeV2: exchangeV2, + zrxVault: zrxVault.address, + staking: stakingLogic.address, + stakingProxy: stakingProxy.address, + exchangeProxy: exchangeProxy.address, + exchangeProxyAllowanceTarget: exchangeProxyAllowanceTargetAddress, + exchangeProxyTransformerDeployer: txDefaults.from, + exchangeProxyFlashWallet: exchangeProxyFlashWalletAddress, + transformers: { + wethTransformer: wethTransformer.address, + payTakerTransformer: payTakerTransformer.address, + fillQuoteTransformer: fillQuoteTransformer.address, + affiliateFeeTransformer: affiliateFeeTransformer.address, + }, + }; + return contractAddresses; +} + +async function _migrateAssetProxiesAsync( + exchange: ExchangeContract, + provider: ZeroExProvider, + txDefaults: TxData, +): Promise< + [ + ERC20ProxyContract, + ERC721ProxyContract, + ERC1155ProxyContract, + StaticCallProxyContract, + MultiAssetProxyContract, + ERC20BridgeProxyContract + ] +> { // Proxies const erc20Proxy = await ERC20ProxyContract.deployFrom0xArtifactAsync( assetProxyArtifacts.ERC20Proxy, @@ -90,62 +262,6 @@ export async function runMigrationsAsync( allArtifacts, ); - // ZRX - const zrxToken = await DummyERC20TokenContract.deployFrom0xArtifactAsync( - erc20Artifacts.DummyERC20Token, - provider, - txDefaults, - allArtifacts, - '0x Protocol Token', - 'ZRX', - new BigNumber(18), - new BigNumber(1000000000000000000000000000), - ); - - // Ether token - const etherToken = await WETH9Contract.deployFrom0xArtifactAsync( - erc20Artifacts.WETH9, - provider, - txDefaults, - allArtifacts, - ); - - // Exchange - const exchange = await ExchangeContract.deployFrom0xArtifactAsync( - exchangeArtifacts.Exchange, - provider, - txDefaults, - allArtifacts, - chainId, - ); - - // Dummy ERC20 tokens - for (const token of erc20TokenInfo) { - const totalSupply = new BigNumber(1000000000000000000000000000); - // tslint:disable-next-line:no-unused-variable - const dummyErc20Token = await DummyERC20TokenContract.deployFrom0xArtifactAsync( - erc20Artifacts.DummyERC20Token, - provider, - txDefaults, - allArtifacts, - token.name, - token.symbol, - token.decimals, - totalSupply, - ); - } - - // ERC721 - // tslint:disable-next-line:no-unused-variable - const cryptoKittieToken = await DummyERC721TokenContract.deployFrom0xArtifactAsync( - erc721Artifacts.DummyERC721Token, - provider, - txDefaults, - allArtifacts, - erc721TokenInfo[0].name, - erc721TokenInfo[0].symbol, - ); - // 1155 Asset Proxy const erc1155Proxy = await ERC1155ProxyContract.deployFrom0xArtifactAsync( assetProxyArtifacts.ERC1155Proxy, @@ -168,19 +284,29 @@ export async function runMigrationsAsync( allArtifacts, ); + const erc20BridgeProxy = await ERC20BridgeProxyContract.deployFrom0xArtifactAsync( + assetProxyArtifacts.ERC20BridgeProxy, + provider, + txDefaults, + allArtifacts, + ); + await erc20Proxy.addAuthorizedAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults); await erc721Proxy.addAuthorizedAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults); await erc1155Proxy.addAuthorizedAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults); await multiAssetProxy.addAuthorizedAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults); + await erc20BridgeProxy.addAuthorizedAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults); // MultiAssetProxy await erc20Proxy.addAuthorizedAddress(multiAssetProxy.address).awaitTransactionSuccessAsync(txDefaults); await erc721Proxy.addAuthorizedAddress(multiAssetProxy.address).awaitTransactionSuccessAsync(txDefaults); await erc1155Proxy.addAuthorizedAddress(multiAssetProxy.address).awaitTransactionSuccessAsync(txDefaults); + await erc20BridgeProxy.addAuthorizedAddress(multiAssetProxy.address).awaitTransactionSuccessAsync(txDefaults); await multiAssetProxy.registerAssetProxy(erc20Proxy.address).awaitTransactionSuccessAsync(txDefaults); await multiAssetProxy.registerAssetProxy(erc721Proxy.address).awaitTransactionSuccessAsync(txDefaults); await multiAssetProxy.registerAssetProxy(erc1155Proxy.address).awaitTransactionSuccessAsync(txDefaults); await multiAssetProxy.registerAssetProxy(staticCallProxy.address).awaitTransactionSuccessAsync(txDefaults); + await multiAssetProxy.registerAssetProxy(erc20BridgeProxy.address).awaitTransactionSuccessAsync(txDefaults); // Register the Asset Proxies to the Exchange await exchange.registerAssetProxy(erc20Proxy.address).awaitTransactionSuccessAsync(txDefaults); @@ -188,64 +314,26 @@ export async function runMigrationsAsync( await exchange.registerAssetProxy(erc1155Proxy.address).awaitTransactionSuccessAsync(txDefaults); await exchange.registerAssetProxy(multiAssetProxy.address).awaitTransactionSuccessAsync(txDefaults); await exchange.registerAssetProxy(staticCallProxy.address).awaitTransactionSuccessAsync(txDefaults); - - // CoordinatorRegistry - const coordinatorRegistry = await CoordinatorRegistryContract.deployFrom0xArtifactAsync( - coordinatorArtifacts.CoordinatorRegistry, - provider, - txDefaults, - allArtifacts, - ); - - // Coordinator - const coordinator = await CoordinatorContract.deployFrom0xArtifactAsync( - coordinatorArtifacts.Coordinator, - provider, - txDefaults, - allArtifacts, - exchange.address, - chainId, - ); - - // Dev Utils - const devUtils = await DevUtilsContract.deployWithLibrariesFrom0xArtifactAsync( - devUtilsArtifacts.DevUtils, - devUtilsArtifacts, - provider, - txDefaults, - allArtifacts, - exchange.address, - NULL_ADDRESS, - NULL_ADDRESS, - ); - - // tslint:disable-next-line:no-unused-variable - const erc1155DummyToken = await ERC1155MintableContract.deployFrom0xArtifactAsync( - erc1155Artifacts.ERC1155Mintable, - provider, - txDefaults, - allArtifacts, - ); - - const erc20BridgeProxy = await ERC20BridgeProxyContract.deployFrom0xArtifactAsync( - assetProxyArtifacts.ERC20BridgeProxy, - provider, - txDefaults, - allArtifacts, - ); await exchange.registerAssetProxy(erc20BridgeProxy.address).awaitTransactionSuccessAsync(txDefaults); - await erc20BridgeProxy.addAuthorizedAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults); - await erc20BridgeProxy.addAuthorizedAddress(multiAssetProxy.address).awaitTransactionSuccessAsync(txDefaults); - await multiAssetProxy.registerAssetProxy(erc20BridgeProxy.address).awaitTransactionSuccessAsync(txDefaults); - const zrxProxy = erc20Proxy.address; + return [erc20Proxy, erc721Proxy, erc1155Proxy, staticCallProxy, multiAssetProxy, erc20BridgeProxy]; +} + +async function _migrateStakingAsync( + exchange: ExchangeContract, + erc20Proxy: ERC20ProxyContract, + zrxTokenAddress: string, + etherTokenAddress: string, + provider: ZeroExProvider, + txDefaults: TxData, +): Promise<[ZrxVaultContract, TestStakingContract, StakingProxyContract]> { const zrxVault = await ZrxVaultContract.deployFrom0xArtifactAsync( stakingArtifacts.ZrxVault, provider, txDefaults, allArtifacts, - zrxProxy, - zrxToken.address, + erc20Proxy.address, + zrxTokenAddress, ); // Note we use TestStakingContract as the deployed bytecode of a StakingContract @@ -255,7 +343,7 @@ export async function runMigrationsAsync( provider, txDefaults, allArtifacts, - etherToken.address, + etherTokenAddress, zrxVault.address, ); @@ -281,29 +369,25 @@ export async function runMigrationsAsync( await stakingLogic.addAuthorizedAddress(txDefaults.from).awaitTransactionSuccessAsync(txDefaults); await stakingLogic.addExchangeAddress(exchange.address).awaitTransactionSuccessAsync(txDefaults); - // Forwarder - // Deployed after Exchange and Staking is configured as it queries - // in the constructor - const { exchangeV2: exchangeV2Address } = getContractAddressesForChainOrThrow(chainId.toNumber()); - const forwarder = await ForwarderContract.deployFrom0xArtifactAsync( - forwarderArtifacts.Forwarder, - provider, - txDefaults, - allArtifacts, - exchange.address, - exchangeV2Address || NULL_ADDRESS, - etherToken.address, - ); - - const erc20BridgeSampler = await ERC20BridgeSamplerContract.deployFrom0xArtifactAsync( - erc20BridgeSamplerArtifacts.ERC20BridgeSampler, - provider, - txDefaults, - allArtifacts, - ); - - // Exchange Proxy ////////////////////////////////////////////////////////// + return [zrxVault, stakingLogic, stakingProxy]; +} +async function _migrateExchangeProxyAsync( + exchange: ExchangeContract, + etherTokenAddress: string, + provider: ZeroExProvider, + txDefaults: TxData, +): Promise< + [ + ZeroExContract, + FillQuoteTransformerContract, + PayTakerTransformerContract, + WethTransformerContract, + AffiliateFeeTransformerContract, + string, + string + ] +> { const exchangeProxy = await fullMigrateExchangeProxyAsync(txDefaults.from, provider, txDefaults); const exchangeProxyAllowanceTargetAddress = await new ITokenSpenderContract( exchangeProxy.address, @@ -335,7 +419,7 @@ export async function runMigrationsAsync( provider, txDefaults, allArtifacts, - etherToken.address, + etherTokenAddress, ); const affiliateFeeTransformer = await AffiliateFeeTransformerContract.deployFrom0xArtifactAsync( exchangeProxyArtifacts.AffiliateFeeTransformer, @@ -344,54 +428,15 @@ export async function runMigrationsAsync( allArtifacts, ); - const contractAddresses = { - erc20Proxy: erc20Proxy.address, - erc721Proxy: erc721Proxy.address, - erc1155Proxy: erc1155Proxy.address, - zrxToken: zrxToken.address, - etherToken: etherToken.address, - exchange: exchange.address, - assetProxyOwner: NULL_ADDRESS, - erc20BridgeProxy: erc20BridgeProxy.address, - zeroExGovernor: NULL_ADDRESS, - forwarder: forwarder.address, - coordinatorRegistry: coordinatorRegistry.address, - coordinator: coordinator.address, - multiAssetProxy: multiAssetProxy.address, - staticCallProxy: staticCallProxy.address, - devUtils: devUtils.address, - exchangeV2: exchangeV2Address || NULL_ADDRESS, - zrxVault: zrxVault.address, - staking: stakingLogic.address, - stakingProxy: stakingProxy.address, - uniswapBridge: NULL_ADDRESS, - eth2DaiBridge: NULL_ADDRESS, - kyberBridge: NULL_ADDRESS, - erc20BridgeSampler: erc20BridgeSampler.address, - chaiBridge: NULL_ADDRESS, - dydxBridge: NULL_ADDRESS, - curveBridge: NULL_ADDRESS, - uniswapV2Bridge: NULL_ADDRESS, - godsUnchainedValidator: NULL_ADDRESS, - broker: NULL_ADDRESS, - chainlinkStopLimit: NULL_ADDRESS, - maximumGasPrice: NULL_ADDRESS, - dexForwarderBridge: NULL_ADDRESS, - multiBridge: NULL_ADDRESS, - balancerBridge: NULL_ADDRESS, - exchangeProxyGovernor: NULL_ADDRESS, - exchangeProxy: exchangeProxy.address, - exchangeProxyAllowanceTarget: exchangeProxyAllowanceTargetAddress, - exchangeProxyTransformerDeployer: txDefaults.from, - exchangeProxyFlashWallet: exchangeProxyFlashWalletAddress, - transformers: { - wethTransformer: wethTransformer.address, - payTakerTransformer: payTakerTransformer.address, - fillQuoteTransformer: fillQuoteTransformer.address, - affiliateFeeTransformer: affiliateFeeTransformer.address, - }, - }; - return contractAddresses; + return [ + exchangeProxy, + fillQuoteTransformer, + payTakerTransformer, + wethTransformer, + affiliateFeeTransformer, + exchangeProxyFlashWalletAddress, + exchangeProxyAllowanceTargetAddress, + ]; } let _cachedContractAddresses: ContractAddresses;