From 5f0a2953c63c31daa975b587f5c5072b6f7e418c Mon Sep 17 00:00:00 2001 From: Amir Bandeali Date: Sun, 24 Jun 2018 17:36:24 -0700 Subject: Add Kovan migrations --- packages/migrations/src/1.0.0/artifacts.ts | 21 +++++ packages/migrations/src/1.0.0/migration.ts | 142 +++++++++++++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 packages/migrations/src/1.0.0/artifacts.ts create mode 100644 packages/migrations/src/1.0.0/migration.ts (limited to 'packages/migrations/src/1.0.0') diff --git a/packages/migrations/src/1.0.0/artifacts.ts b/packages/migrations/src/1.0.0/artifacts.ts new file mode 100644 index 000000000..d0a9f735a --- /dev/null +++ b/packages/migrations/src/1.0.0/artifacts.ts @@ -0,0 +1,21 @@ +import { ContractArtifact } from '@0xproject/sol-compiler'; + +import * as DummyERC20Token from '../../artifacts/1.0.0/DummyERC20Token.json'; +import * as Exchange from '../../artifacts/1.0.0/Exchange_v1.json'; +import * as MultiSigWalletWithTimeLock from '../../artifacts/1.0.0/MultiSigWalletWithTimeLock.json'; +import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress from '../../artifacts/1.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json'; +import * as TokenRegistry from '../../artifacts/1.0.0/TokenRegistry.json'; +import * as TokenTransferProxy from '../../artifacts/1.0.0/TokenTransferProxy_v1.json'; +import * as EtherToken from '../../artifacts/1.0.0/WETH9.json'; +import * as ZRX from '../../artifacts/1.0.0/ZRXToken.json'; + +export const artifacts = { + ZRX: (ZRX as any) as ContractArtifact, + DummyERC20Token: (DummyERC20Token as any) as ContractArtifact, + Exchange: (Exchange as any) as ContractArtifact, + EtherToken: (EtherToken as any) as ContractArtifact, + TokenRegistry: (TokenRegistry as any) as ContractArtifact, + TokenTransferProxy: (TokenTransferProxy as any) as ContractArtifact, + MultiSigWalletWithTimeLock: (MultiSigWalletWithTimeLock as any) as ContractArtifact, + MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress: (MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress as any) as ContractArtifact, +}; diff --git a/packages/migrations/src/1.0.0/migration.ts b/packages/migrations/src/1.0.0/migration.ts new file mode 100644 index 000000000..3398537e5 --- /dev/null +++ b/packages/migrations/src/1.0.0/migration.ts @@ -0,0 +1,142 @@ +import { BigNumber, NULL_BYTES } from '@0xproject/utils'; +import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { Provider, TxData } from 'ethereum-types'; + +import { ArtifactWriter } from '../artifact_writer'; +import { erc20TokenInfo } from '../utils/token_info'; + +import { artifacts } from './artifacts'; +import { DummyERC20TokenContract } from './contract_wrappers/dummy_e_r_c20_token'; +import { Exchange_v1Contract } from './contract_wrappers/exchange_v1'; +import { MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract } from './contract_wrappers/multi_sig_wallet_with_time_lock_except_remove_authorized_address'; +import { TokenRegistryContract } from './contract_wrappers/token_registry'; +import { TokenTransferProxy_v1Contract } from './contract_wrappers/tokentransferproxy_v1'; +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:v1' 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 runV1MigrationsAsync = async (provider: Provider, artifactsDir: string, txDefaults: Partial) => { + const web3Wrapper = new Web3Wrapper(provider); + const networkId = await web3Wrapper.getNetworkIdAsync(); + const artifactsWriter = new ArtifactWriter(artifactsDir, networkId); + const tokenTransferProxy = await TokenTransferProxy_v1Contract.deployFrom0xArtifactAsync( + artifacts.TokenTransferProxy, + provider, + txDefaults, + ); + artifactsWriter.saveArtifact(tokenTransferProxy); + const zrxToken = await ZRXTokenContract.deployFrom0xArtifactAsync(artifacts.ZRX, provider, txDefaults); + artifactsWriter.saveArtifact(zrxToken); + + const etherToken = await WETH9Contract.deployFrom0xArtifactAsync(artifacts.EtherToken, provider, txDefaults); + artifactsWriter.saveArtifact(etherToken); + const tokenReg = await TokenRegistryContract.deployFrom0xArtifactAsync( + artifacts.TokenRegistry, + provider, + txDefaults, + ); + artifactsWriter.saveArtifact(tokenReg); + + const accounts: string[] = await web3Wrapper.getAvailableAddressesAsync(); + const owners = [accounts[0], accounts[1]]; + const confirmationsRequired = new BigNumber(2); + const secondsRequired = new BigNumber(0); + const exchange = await Exchange_v1Contract.deployFrom0xArtifactAsync( + artifacts.Exchange, + provider, + txDefaults, + zrxToken.address, + tokenTransferProxy.address, + ); + artifactsWriter.saveArtifact(exchange); + const multiSig = await MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract.deployFrom0xArtifactAsync( + artifacts.MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress, + provider, + txDefaults, + owners, + confirmationsRequired, + secondsRequired, + tokenTransferProxy.address, + ); + artifactsWriter.saveArtifact(multiSig); + + const owner = accounts[0]; + + await web3Wrapper.awaitTransactionSuccessAsync( + await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner }), + ); + await web3Wrapper.awaitTransactionSuccessAsync( + await tokenTransferProxy.transferOwnership.sendTransactionAsync(multiSig.address, { from: owner }), + ); + const addTokenGasEstimate = await tokenReg.addToken.estimateGasAsync( + zrxToken.address, + erc20TokenInfo[0].name, + erc20TokenInfo[0].symbol, + erc20TokenInfo[0].decimals, + erc20TokenInfo[0].ipfsHash, + erc20TokenInfo[0].swarmHash, + { from: owner }, + ); + const decimals = 18; + await web3Wrapper.awaitTransactionSuccessAsync( + await tokenReg.addToken.sendTransactionAsync( + zrxToken.address, + '0x Protocol Token', + 'ZRX', + decimals, + NULL_BYTES, + NULL_BYTES, + { + from: owner, + gas: addTokenGasEstimate, + }, + ), + ); + await web3Wrapper.awaitTransactionSuccessAsync( + await tokenReg.addToken.sendTransactionAsync( + etherToken.address, + 'Ether Token', + 'WETH', + decimals, + NULL_BYTES, + NULL_BYTES, + { + from: owner, + gas: addTokenGasEstimate, + }, + ), + ); + for (const token of erc20TokenInfo) { + const totalSupply = new BigNumber(100000000000000000000); + const dummyToken = await DummyERC20TokenContract.deployFrom0xArtifactAsync( + artifacts.DummyERC20Token, + provider, + txDefaults, + token.name, + token.symbol, + token.decimals, + totalSupply, + ); + await web3Wrapper.awaitTransactionSuccessAsync( + await tokenReg.addToken.sendTransactionAsync( + dummyToken.address, + token.name, + token.symbol, + token.decimals, + token.ipfsHash, + token.swarmHash, + { + from: owner, + gas: addTokenGasEstimate, + }, + ), + ); + } +}; -- cgit v1.2.3 From 6e1a549fcb5cc9257ee984a906db78dd2568042b Mon Sep 17 00:00:00 2001 From: Amir Bandeali Date: Wed, 27 Jun 2018 15:13:57 -0700 Subject: Use ledger subprovider --- packages/migrations/src/1.0.0/migration.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'packages/migrations/src/1.0.0') diff --git a/packages/migrations/src/1.0.0/migration.ts b/packages/migrations/src/1.0.0/migration.ts index 3398537e5..6cc8dc4ef 100644 --- a/packages/migrations/src/1.0.0/migration.ts +++ b/packages/migrations/src/1.0.0/migration.ts @@ -2,7 +2,7 @@ import { BigNumber, NULL_BYTES } from '@0xproject/utils'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Provider, TxData } from 'ethereum-types'; -import { ArtifactWriter } from '../artifact_writer'; +import { ArtifactWriter } from '../utils/artifact_writer'; import { erc20TokenInfo } from '../utils/token_info'; import { artifacts } from './artifacts'; -- cgit v1.2.3