diff options
author | Fabio Berger <me@fabioberger.com> | 2018-09-05 03:23:48 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-05 03:23:48 +0800 |
commit | a5859c6cee0729cf493afa4ff192469cd781fa2b (patch) | |
tree | f9f90173c30b6af0eaf903444d1766713a8349e6 /packages/migrations/src/2.0.0-mainnet | |
parent | 6a619a4084188d1c48d8030d0fe2a1ba777c55e3 (diff) | |
parent | 6f7a5d00e6af9e94043daef858ed407a95f386b2 (diff) | |
download | dexon-sol-tools-a5859c6cee0729cf493afa4ff192469cd781fa2b.tar.gz dexon-sol-tools-a5859c6cee0729cf493afa4ff192469cd781fa2b.tar.zst dexon-sol-tools-a5859c6cee0729cf493afa4ff192469cd781fa2b.zip |
Merge pull request #1038 from 0xProject/feature/contracts/mainnetMigrations
Mainnet migrations
Diffstat (limited to 'packages/migrations/src/2.0.0-mainnet')
-rw-r--r-- | packages/migrations/src/2.0.0-mainnet/artifacts.ts | 17 | ||||
-rw-r--r-- | packages/migrations/src/2.0.0-mainnet/constants.ts | 13 | ||||
-rw-r--r-- | packages/migrations/src/2.0.0-mainnet/migration.ts | 122 |
3 files changed, 152 insertions, 0 deletions
diff --git a/packages/migrations/src/2.0.0-mainnet/artifacts.ts b/packages/migrations/src/2.0.0-mainnet/artifacts.ts new file mode 100644 index 000000000..8091fa9d0 --- /dev/null +++ b/packages/migrations/src/2.0.0-mainnet/artifacts.ts @@ -0,0 +1,17 @@ +import { ContractArtifact } from 'ethereum-types'; + +import * as AssetProxyOwner from '../../artifacts/2.0.0-mainnet/AssetProxyOwner.json'; +import * as ERC20Proxy from '../../artifacts/2.0.0-mainnet/ERC20Proxy.json'; +import * as ERC721Proxy from '../../artifacts/2.0.0-mainnet/ERC721Proxy.json'; +import * as Exchange from '../../artifacts/2.0.0-mainnet/Exchange.json'; +import * as Forwarder from '../../artifacts/2.0.0-mainnet/Forwarder.json'; +import * as OrderValidator from '../../artifacts/2.0.0-mainnet/OrderValidator.json'; + +export const artifacts = { + AssetProxyOwner: (AssetProxyOwner as any) as ContractArtifact, + ERC20Proxy: (ERC20Proxy as any) as ContractArtifact, + ERC721Proxy: (ERC721Proxy as any) as ContractArtifact, + Exchange: (Exchange as any) as ContractArtifact, + Forwarder: (Forwarder as any) as ContractArtifact, + OrderValidator: (OrderValidator as any) as ContractArtifact, +}; diff --git a/packages/migrations/src/2.0.0-mainnet/constants.ts b/packages/migrations/src/2.0.0-mainnet/constants.ts new file mode 100644 index 000000000..99649f687 --- /dev/null +++ b/packages/migrations/src/2.0.0-mainnet/constants.ts @@ -0,0 +1,13 @@ +import { BigNumber } from '@0xproject/utils'; + +export const constants = { + ASSET_PROXY_OWNER_OWNERS: [ + '0x257619b7155d247e43c8b6d90c8c17278ae481f0', + '0x5ee2a00f8f01d099451844af7f894f26a57fcbf2', + '0x894d623e0e0e8ed12c4a73dada999e275684a37d', + ], + ASSET_PROXY_OWNER_REQUIRED_CONFIRMATIONS: new BigNumber(2), + ASSET_PROXY_OWNER_SECONDS_TIMELOCKED: new BigNumber(1209600), + WETH_ADDRESS: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', + ZRX_ADDRESS: '0xe41d2489571d322189246dafa5ebde1f4699f498', +}; diff --git a/packages/migrations/src/2.0.0-mainnet/migration.ts b/packages/migrations/src/2.0.0-mainnet/migration.ts new file mode 100644 index 000000000..4100a750c --- /dev/null +++ b/packages/migrations/src/2.0.0-mainnet/migration.ts @@ -0,0 +1,122 @@ +import { assetDataUtils } from '@0xproject/order-utils'; +import { logUtils } from '@0xproject/utils'; +import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Provider, TxData } from 'ethereum-types'; + +import { ArtifactWriter } from '../utils/artifact_writer'; + +import { artifacts } from './artifacts'; +import { constants } from './constants'; +import { AssetProxyOwnerContract } from './contract_wrappers/asset_proxy_owner'; +import { ERC20ProxyContract } from './contract_wrappers/erc20_proxy'; +import { ERC721ProxyContract } from './contract_wrappers/erc721_proxy'; +import { ExchangeContract } from './contract_wrappers/exchange'; +import { ForwarderContract } from './contract_wrappers/forwarder'; +import { OrderValidatorContract } from './contract_wrappers/order_validator'; + +/** + * Custom migrations should be defined in this function. This will be called with the CLI 'migrate:v2-mainnet' command. + * Migrations could be written to run in parallel, but if you want contract addresses to be created deterministically, + * the migration should be written to run synchronously. + * @param provider Web3 provider instance. + * @param artifactsDir The directory with compiler artifact files. + * @param txDefaults Default transaction values to use when deploying contracts. + */ +export const runV2MainnetMigrationsAsync = async ( + provider: Provider, + artifactsDir: string, + txDefaults: Partial<TxData>, +) => { + const web3Wrapper = new Web3Wrapper(provider); + const networkId = await web3Wrapper.getNetworkIdAsync(); + const artifactsWriter = new ArtifactWriter(artifactsDir, networkId); + + // Deploy AssetProxies + const erc20proxy = await ERC20ProxyContract.deployFrom0xArtifactAsync(artifacts.ERC20Proxy, provider, txDefaults); + artifactsWriter.saveArtifact(erc20proxy); + const erc721proxy = await ERC721ProxyContract.deployFrom0xArtifactAsync( + artifacts.ERC721Proxy, + provider, + txDefaults, + ); + artifactsWriter.saveArtifact(erc721proxy); + + // Deploy Exchange + const exchange = await ExchangeContract.deployFrom0xArtifactAsync(artifacts.Exchange, provider, txDefaults); + artifactsWriter.saveArtifact(exchange); + + let txHash; + // Register AssetProxies in Exchange + txHash = await exchange.registerAssetProxy.sendTransactionAsync(erc20proxy.address); + logUtils.log(`transactionHash: ${txHash}`); + logUtils.log('Registering ERC20Proxy'); + await web3Wrapper.awaitTransactionSuccessAsync(txHash); + + txHash = await exchange.registerAssetProxy.sendTransactionAsync(erc721proxy.address); + logUtils.log(`transactionHash: ${txHash}`); + logUtils.log('Registering ERC721Proxy'); + await web3Wrapper.awaitTransactionSuccessAsync(txHash); + + // Deploy AssetProxyOwner + const assetProxies = [erc20proxy.address, erc721proxy.address]; + const assetProxyOwner = await AssetProxyOwnerContract.deployFrom0xArtifactAsync( + artifacts.AssetProxyOwner, + provider, + txDefaults, + constants.ASSET_PROXY_OWNER_OWNERS, + assetProxies, + constants.ASSET_PROXY_OWNER_REQUIRED_CONFIRMATIONS, + constants.ASSET_PROXY_OWNER_SECONDS_TIMELOCKED, + ); + artifactsWriter.saveArtifact(assetProxyOwner); + + // Deploy Forwarder + const zrxAssetData = assetDataUtils.encodeERC20AssetData(constants.ZRX_ADDRESS); + const wethAssetData = assetDataUtils.encodeERC20AssetData(constants.WETH_ADDRESS); + const forwarder = await ForwarderContract.deployFrom0xArtifactAsync( + artifacts.Forwarder, + provider, + txDefaults, + exchange.address, + zrxAssetData, + wethAssetData, + ); + artifactsWriter.saveArtifact(forwarder); + + // Deploy OrderValidator + const orderValidator = await OrderValidatorContract.deployFrom0xArtifactAsync( + artifacts.OrderValidator, + provider, + txDefaults, + exchange.address, + zrxAssetData, + ); + artifactsWriter.saveArtifact(orderValidator); + + // Authorize Exchange contracts to call AssetProxies + txHash = await erc20proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address); + logUtils.log(`transactionHash: ${txHash}`); + logUtils.log('Authorizing Exchange on ERC20Proxy'); + await web3Wrapper.awaitTransactionSuccessAsync(txHash); + + txHash = await erc721proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address); + logUtils.log(`transactionHash: ${txHash}`); + logUtils.log('Authorizing Exchange on ERC721Proxy'); + await web3Wrapper.awaitTransactionSuccessAsync(txHash); + + // Transfer ownership of AssetProxies and Exchange to AssetProxyOwner + txHash = await erc20proxy.transferOwnership.sendTransactionAsync(assetProxyOwner.address); + logUtils.log(`transactionHash: ${txHash}`); + logUtils.log('Transferring ownership of ERC20Proxy'); + await web3Wrapper.awaitTransactionSuccessAsync(txHash); + + txHash = await erc721proxy.transferOwnership.sendTransactionAsync(assetProxyOwner.address); + logUtils.log(`transactionHash: ${txHash}`); + logUtils.log('Transferring ownership of ERC721Proxy'); + await web3Wrapper.awaitTransactionSuccessAsync(txHash); + + txHash = await exchange.transferOwnership.sendTransactionAsync(assetProxyOwner.address); + logUtils.log(`transactionHash: ${txHash}`); + logUtils.log('Transferring ownership of Exchange'); + await web3Wrapper.awaitTransactionSuccessAsync(txHash); +}; |