From 9d45d19c80bce5ead92049ab743501f6e40d515a Mon Sep 17 00:00:00 2001 From: Alex Browne Date: Tue, 4 Sep 2018 18:10:23 -0400 Subject: More small artifacts updates/changes --- .../test/exchange_wrapper_test.ts | 2 +- packages/migrations/package.json | 4 +- packages/migrations/src/2.0.0/artifacts.ts | 10 +- packages/migrations/src/2.0.0/constants.ts | 13 -- packages/migrations/src/2.0.0/migration.ts | 142 +++++++++++++-------- 5 files changed, 98 insertions(+), 73 deletions(-) delete mode 100644 packages/migrations/src/2.0.0/constants.ts diff --git a/packages/contract-wrappers/test/exchange_wrapper_test.ts b/packages/contract-wrappers/test/exchange_wrapper_test.ts index 6762c1d43..b3bd7c633 100644 --- a/packages/contract-wrappers/test/exchange_wrapper_test.ts +++ b/packages/contract-wrappers/test/exchange_wrapper_test.ts @@ -358,7 +358,7 @@ describe('ExchangeWrapper', () => { describe('#getVersionAsync', () => { it('should return version the hash', async () => { const version = await contractWrappers.exchange.getVersionAsync(); - const VERSION = '2.0.1-alpha'; + const VERSION = '2.0.0'; expect(version).to.be.equal(VERSION); }); }); diff --git a/packages/migrations/package.json b/packages/migrations/package.json index 776cc2e00..0ce56e232 100644 --- a/packages/migrations/package.json +++ b/packages/migrations/package.json @@ -25,9 +25,7 @@ "config": { "abis": { "v1": "artifacts/1.0.0/@(DummyERC20Token|TokenTransferProxy_v1|Exchange_v1|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|WETH9).json", - "v2Testnet": "artifacts/2.0.0-testnet/@(DummyERC721Token|DummyERC20Token|ERC20Token|ERC721Token|ERC20Proxy|ERC721Proxy|Exchange|Forwarder|AssetProxyOwner|IWallet|IValidator|OrderValidator|ZRXToken).json", - "v2": "artifacts/2.0.0/@(DummyERC721Token|DummyERC20Token|ERC20Token|ERC721Token|ERC20Proxy|ERC721Proxy|Exchange|Forwarder|AssetProxyOwner|IWallet|IValidator|OrderValidator|ZRXToken).json", - "development": "artifacts/development/@(DummyERC721Token|DummyERC20Token|ERC20Token|ERC721Token|ERC20Proxy|ERC721Proxy|Exchange|Forwarder|AssetProxyOwner|IWallet|IValidator|OrderValidator|ZRXToken).json" + "v2": "artifacts/2.0.0/@(ERC20Token|DummyERC20Token|ERC721Token|DummyERC721Token|ERC20Proxy|ERC721Proxy|Exchange|Forwarder|AssetProxyOwner|ZRXToken|WETH9|IWallet|IValidator|OrderValidator).json" } }, "license": "Apache-2.0", diff --git a/packages/migrations/src/2.0.0/artifacts.ts b/packages/migrations/src/2.0.0/artifacts.ts index 65736c001..e96c555d6 100644 --- a/packages/migrations/src/2.0.0/artifacts.ts +++ b/packages/migrations/src/2.0.0/artifacts.ts @@ -1,17 +1,25 @@ import { ContractArtifact } from 'ethereum-types'; import * as AssetProxyOwner from '../../artifacts/2.0.0/AssetProxyOwner.json'; +import * as DummyERC20Token from '../../artifacts/2.0.0/DummyERC20Token.json'; +import * as DummyERC721Token from '../../artifacts/2.0.0/DummyERC721Token.json'; import * as ERC20Proxy from '../../artifacts/2.0.0/ERC20Proxy.json'; import * as ERC721Proxy from '../../artifacts/2.0.0/ERC721Proxy.json'; import * as Exchange from '../../artifacts/2.0.0/Exchange.json'; import * as Forwarder from '../../artifacts/2.0.0/Forwarder.json'; import * as OrderValidator from '../../artifacts/2.0.0/OrderValidator.json'; +import * as WETH9 from '../../artifacts/2.0.0/WETH9.json'; +import * as ZRX from '../../artifacts/2.0.0/ZRXToken.json'; export const artifacts = { + ZRX: (ZRX as any) as ContractArtifact, + DummyERC20Token: (DummyERC20Token as any) as ContractArtifact, + DummyERC721Token: (DummyERC721Token as any) as ContractArtifact, AssetProxyOwner: (AssetProxyOwner as any) as ContractArtifact, + Exchange: (Exchange as any) as ContractArtifact, + WETH9: (WETH9 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/constants.ts b/packages/migrations/src/2.0.0/constants.ts deleted file mode 100644 index 99649f687..000000000 --- a/packages/migrations/src/2.0.0/constants.ts +++ /dev/null @@ -1,13 +0,0 @@ -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/migration.ts b/packages/migrations/src/2.0.0/migration.ts index 0f20813f1..1c30fb9ec 100644 --- a/packages/migrations/src/2.0.0/migration.ts +++ b/packages/migrations/src/2.0.0/migration.ts @@ -1,21 +1,25 @@ import { assetDataUtils } from '@0xproject/order-utils'; -import { logUtils } from '@0xproject/utils'; +import { BigNumber } from '@0xproject/utils'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Provider, TxData } from 'ethereum-types'; import { ArtifactWriter } from '../utils/artifact_writer'; +import { erc20TokenInfo, erc721TokenInfo } from '../utils/token_info'; import { artifacts } from './artifacts'; -import { constants } from './constants'; import { AssetProxyOwnerContract } from './contract_wrappers/asset_proxy_owner'; +import { DummyERC20TokenContract } from './contract_wrappers/dummy_erc20_token'; +import { DummyERC721TokenContract } from './contract_wrappers/dummy_erc721_token'; 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'; +import { WETH9Contract } from './contract_wrappers/weth9'; +import { ZRXTokenContract } from './contract_wrappers/zrx_token'; /** - * Custom migrations should be defined in this function. This will be called with the CLI 'migrate:v2-mainnet' command. + * Custom migrations should be defined in this function. This will be called with the CLI 'migrate:v2' 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. @@ -27,7 +31,7 @@ export const runV2MigrationsAsync = async (provider: Provider, artifactsDir: str const networkId = await web3Wrapper.getNetworkIdAsync(); const artifactsWriter = new ArtifactWriter(artifactsDir, networkId); - // Deploy AssetProxies + // Proxies const erc20proxy = await ERC20ProxyContract.deployFrom0xArtifactAsync(artifacts.ERC20Proxy, provider, txDefaults); artifactsWriter.saveArtifact(erc20proxy); const erc721proxy = await ERC721ProxyContract.deployFrom0xArtifactAsync( @@ -37,49 +41,104 @@ export const runV2MigrationsAsync = async (provider: Provider, artifactsDir: str ); artifactsWriter.saveArtifact(erc721proxy); - // Deploy Exchange + // ZRX + const zrxToken = await ZRXTokenContract.deployFrom0xArtifactAsync(artifacts.ZRX, provider, txDefaults); + artifactsWriter.saveArtifact(zrxToken); + + // Ether token + const etherToken = await WETH9Contract.deployFrom0xArtifactAsync(artifacts.WETH9, provider, txDefaults); + artifactsWriter.saveArtifact(etherToken); + + // Exchange + const zrxAssetData = assetDataUtils.encodeERC20AssetData(zrxToken.address); 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); + // Multisigs + const accounts: string[] = await web3Wrapper.getAvailableAddressesAsync(); + const owners = [accounts[0], accounts[1]]; + const confirmationsRequired = new BigNumber(2); + const secondsRequired = new BigNumber(0); + const owner = accounts[0]; - // Deploy AssetProxyOwner - const assetProxies = [erc20proxy.address, erc721proxy.address]; + // AssetProxyOwner 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, + owners, + [erc20proxy.address, erc721proxy.address], + confirmationsRequired, + secondsRequired, ); artifactsWriter.saveArtifact(assetProxyOwner); - // Deploy Forwarder - const zrxAssetData = assetDataUtils.encodeERC20AssetData(constants.ZRX_ADDRESS); - const wethAssetData = assetDataUtils.encodeERC20AssetData(constants.WETH_ADDRESS); + await web3Wrapper.awaitTransactionSuccessAsync( + await erc20proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { + from: owner, + }), + ); + await web3Wrapper.awaitTransactionSuccessAsync( + await erc20proxy.transferOwnership.sendTransactionAsync(assetProxyOwner.address, { + from: owner, + }), + ); + await web3Wrapper.awaitTransactionSuccessAsync( + await erc721proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { + from: owner, + }), + ); + await web3Wrapper.awaitTransactionSuccessAsync( + await erc721proxy.transferOwnership.sendTransactionAsync(assetProxyOwner.address, { + from: owner, + }), + ); + + // Register the Asset Proxies to the Exchange + await web3Wrapper.awaitTransactionSuccessAsync( + await exchange.registerAssetProxy.sendTransactionAsync(erc20proxy.address), + ); + await web3Wrapper.awaitTransactionSuccessAsync( + await exchange.registerAssetProxy.sendTransactionAsync(erc721proxy.address), + ); + + // 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( + artifacts.DummyERC20Token, + provider, + txDefaults, + token.name, + token.symbol, + token.decimals, + totalSupply, + ); + } + + // ERC721 + // tslint:disable-next-line:no-unused-variable + const cryptoKittieToken = await DummyERC721TokenContract.deployFrom0xArtifactAsync( + artifacts.DummyERC721Token, + provider, + txDefaults, + erc721TokenInfo[0].name, + erc721TokenInfo[0].symbol, + ); + + // Forwarder const forwarder = await ForwarderContract.deployFrom0xArtifactAsync( artifacts.Forwarder, provider, txDefaults, exchange.address, - zrxAssetData, - wethAssetData, + assetDataUtils.encodeERC20AssetData(zrxToken.address), + assetDataUtils.encodeERC20AssetData(etherToken.address), ); artifactsWriter.saveArtifact(forwarder); - // Deploy OrderValidator + // OrderValidator const orderValidator = await OrderValidatorContract.deployFrom0xArtifactAsync( artifacts.OrderValidator, provider, @@ -88,31 +147,4 @@ export const runV2MigrationsAsync = async (provider: Provider, artifactsDir: str 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); }; -- cgit v1.2.3