Redeploy/verify testnet contracts 🙄

This commit is contained in:
Michael Zhu 2020-08-03 11:39:04 -07:00
parent 788bdba8cd
commit 2b39ae4800
4 changed files with 368 additions and 266 deletions

View File

@ -18,6 +18,7 @@ export {
TestDydxBridgeContract,
TestStaticCallTargetContract,
UniswapBridgeContract,
DexForwarderBridgeContract,
} from './wrappers';
export { ERC20Wrapper } from './erc20_wrapper';

View File

@ -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.

View File

@ -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"
}
},

View File

@ -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<ContractAddresses> {
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;