aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/migrations
diff options
context:
space:
mode:
Diffstat (limited to 'packages/contracts/migrations')
-rw-r--r--packages/contracts/migrations/1_initial_migration.ts6
-rw-r--r--packages/contracts/migrations/2_deploy_independent_contracts.ts43
-rw-r--r--packages/contracts/migrations/3_register_tokens.ts86
-rw-r--r--packages/contracts/migrations/4_configure_proxy.ts27
-rw-r--r--packages/contracts/migrations/5_transfer_ownership.ts25
-rw-r--r--packages/contracts/migrations/config/multisig_sample.ts10
-rw-r--r--packages/contracts/migrations/config/token_info.ts99
7 files changed, 296 insertions, 0 deletions
diff --git a/packages/contracts/migrations/1_initial_migration.ts b/packages/contracts/migrations/1_initial_migration.ts
new file mode 100644
index 000000000..0bd75b9a5
--- /dev/null
+++ b/packages/contracts/migrations/1_initial_migration.ts
@@ -0,0 +1,6 @@
+import {Artifacts} from '../util/artifacts';
+const {Migrations} = new Artifacts(artifacts);
+
+module.exports = (deployer: any) => {
+ deployer.deploy(Migrations);
+};
diff --git a/packages/contracts/migrations/2_deploy_independent_contracts.ts b/packages/contracts/migrations/2_deploy_independent_contracts.ts
new file mode 100644
index 000000000..10947655b
--- /dev/null
+++ b/packages/contracts/migrations/2_deploy_independent_contracts.ts
@@ -0,0 +1,43 @@
+import {Artifacts} from '../util/artifacts';
+import {ContractInstance, MultiSigConfigByNetwork} from '../util/types';
+const {
+ MultiSigWalletWithTimeLock,
+ TokenTransferProxy,
+ EtherToken,
+ TokenRegistry,
+} = new Artifacts(artifacts);
+
+let multiSigConfigByNetwork: MultiSigConfigByNetwork;
+try {
+ /* tslint:disable */
+ const multiSigConfig = require('./config/multisig');
+ multiSigConfigByNetwork = multiSigConfig.multiSig;
+ /* tslint:enable */
+} catch (e) {
+ multiSigConfigByNetwork = {};
+}
+
+module.exports = (deployer: any, network: string, accounts: string[]) => {
+ const defaultConfig = {
+ owners: [accounts[0], accounts[1]],
+ confirmationsRequired: 2,
+ secondsRequired: 0,
+ };
+ const config = multiSigConfigByNetwork[network] || defaultConfig;
+ if (network !== 'live') {
+ deployer.deploy(MultiSigWalletWithTimeLock, config.owners, config.confirmationsRequired, config.secondsRequired)
+ .then(() => {
+ return deployer.deploy(TokenTransferProxy);
+ }).then(() => {
+ return deployer.deploy(TokenRegistry);
+ }).then(() => {
+ return deployer.deploy(EtherToken);
+ });
+ } else {
+ deployer.deploy([
+ [MultiSigWalletWithTimeLock, config.owners, config.confirmationsRequired, config.secondsRequired],
+ TokenTransferProxy,
+ TokenRegistry,
+ ]);
+ }
+};
diff --git a/packages/contracts/migrations/3_register_tokens.ts b/packages/contracts/migrations/3_register_tokens.ts
new file mode 100644
index 000000000..ef0e03123
--- /dev/null
+++ b/packages/contracts/migrations/3_register_tokens.ts
@@ -0,0 +1,86 @@
+import * as Bluebird from 'bluebird';
+import * as _ from 'lodash';
+
+import {Artifacts} from '../util/artifacts';
+import {constants} from '../util/constants';
+import {ContractInstance, Token, TokenInfoByNetwork} from '../util/types';
+
+import {tokenInfo} from './config/token_info';
+const {
+ DummyToken,
+ EtherToken,
+ ZRXToken,
+ TokenRegistry,
+} = new Artifacts(artifacts);
+
+module.exports = (deployer: any, network: string) => {
+ const tokens = network === 'live' ? tokenInfo.live : tokenInfo.development;
+ deployer.then(() => {
+ return TokenRegistry.deployed();
+ }).then((tokenRegistry: ContractInstance) => {
+ if (network !== 'live') {
+ const totalSupply = Math.pow(10, 18) * 1000000000;
+ return Bluebird.each(tokens.map((token: Token) => DummyToken.new(
+ token.name,
+ token.symbol,
+ token.decimals,
+ totalSupply,
+ )), _.noop).then((dummyTokens: ContractInstance[]) => {
+ const weth = {
+ address: EtherToken.address,
+ name: 'Ether Token',
+ symbol: 'WETH',
+ url: '',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ };
+ return Bluebird.each(dummyTokens.map((tokenContract: ContractInstance, i: number) => {
+ const token = tokens[i];
+ return tokenRegistry.addToken(
+ tokenContract.address,
+ token.name,
+ token.symbol,
+ token.decimals,
+ token.ipfsHash,
+ token.swarmHash,
+ );
+ }).concat(tokenRegistry.addToken(
+ weth.address,
+ weth.name,
+ weth.symbol,
+ weth.decimals,
+ weth.ipfsHash,
+ weth.swarmHash,
+ )), _.noop);
+ });
+ } else {
+ const zrx = {
+ address: ZRXToken.address,
+ name: '0x Protocol Token',
+ symbol: 'ZRX',
+ url: 'https://www.0xproject.com/',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ };
+ return Bluebird.each(tokens.map((token: Token) => {
+ return tokenRegistry.addToken(
+ token.address,
+ token.name,
+ token.symbol,
+ token.decimals,
+ token.ipfsHash,
+ token.swarmHash,
+ );
+ }).concat(tokenRegistry.addToken(
+ zrx.address,
+ zrx.name,
+ zrx.symbol,
+ zrx.decimals,
+ zrx.ipfsHash,
+ zrx.swarmHash,
+ )), _.noop);
+ }
+ });
+};
diff --git a/packages/contracts/migrations/4_configure_proxy.ts b/packages/contracts/migrations/4_configure_proxy.ts
new file mode 100644
index 000000000..cbf3695dd
--- /dev/null
+++ b/packages/contracts/migrations/4_configure_proxy.ts
@@ -0,0 +1,27 @@
+import {Artifacts} from '../util/artifacts';
+import {ContractInstance} from '../util/types';
+const {
+ TokenTransferProxy,
+ Exchange,
+ TokenRegistry,
+} = new Artifacts(artifacts);
+
+let tokenTransferProxy: ContractInstance;
+module.exports = (deployer: any) => {
+ deployer.then(async () => {
+ return Promise.all([
+ TokenTransferProxy.deployed(),
+ TokenRegistry.deployed(),
+ ]);
+ })
+ .then((instances: ContractInstance[]) => {
+ let tokenRegistry: ContractInstance;
+ [tokenTransferProxy, tokenRegistry] = instances;
+ return tokenRegistry.getTokenAddressBySymbol('ZRX');
+ })
+ .then((ptAddress: string) => {
+ return deployer.deploy(Exchange, ptAddress, tokenTransferProxy.address);
+ }).then(() => {
+ return tokenTransferProxy.addAuthorizedAddress(Exchange.address);
+ });
+};
diff --git a/packages/contracts/migrations/5_transfer_ownership.ts b/packages/contracts/migrations/5_transfer_ownership.ts
new file mode 100644
index 000000000..ee879e2b6
--- /dev/null
+++ b/packages/contracts/migrations/5_transfer_ownership.ts
@@ -0,0 +1,25 @@
+import {Artifacts} from '../util/artifacts';
+import {ContractInstance} from '../util/types';
+const {
+ TokenTransferProxy,
+ MultiSigWalletWithTimeLock,
+ TokenRegistry,
+} = new Artifacts(artifacts);
+
+let tokenRegistry: ContractInstance;
+module.exports = (deployer: any, network: string) => {
+ if (network !== 'development') {
+ deployer.then(async () => {
+ return Promise.all([
+ TokenTransferProxy.deployed(),
+ TokenRegistry.deployed(),
+ ]).then((instances: ContractInstance[]) => {
+ let tokenTransferProxy: ContractInstance;
+ [tokenTransferProxy, tokenRegistry] = instances;
+ return tokenTransferProxy.transferOwnership(MultiSigWalletWithTimeLock.address);
+ }).then(() => {
+ return tokenRegistry.transferOwnership(MultiSigWalletWithTimeLock.address);
+ });
+ });
+ }
+};
diff --git a/packages/contracts/migrations/config/multisig_sample.ts b/packages/contracts/migrations/config/multisig_sample.ts
new file mode 100644
index 000000000..dfa0f962f
--- /dev/null
+++ b/packages/contracts/migrations/config/multisig_sample.ts
@@ -0,0 +1,10 @@
+import {MultiSigConfigByNetwork} from '../../util/types';
+
+// Make a copy of this file named `multisig.js` and input custom params as needed
+export const multiSig: MultiSigConfigByNetwork = {
+ kovan: {
+ owners: [],
+ confirmationsRequired: 0,
+ secondsRequired: 0,
+ },
+};
diff --git a/packages/contracts/migrations/config/token_info.ts b/packages/contracts/migrations/config/token_info.ts
new file mode 100644
index 000000000..02bad087f
--- /dev/null
+++ b/packages/contracts/migrations/config/token_info.ts
@@ -0,0 +1,99 @@
+import {constants} from '../../util/constants';
+import {TokenInfoByNetwork} from '../../util/types';
+
+export const tokenInfo: TokenInfoByNetwork = {
+ development: [
+ {
+ name: '0x Protocol Token',
+ symbol: 'ZRX',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ name: 'Augur Reputation Token',
+ symbol: 'REP',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ name: 'Digix DAO Token',
+ symbol: 'DGD',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ name: 'Golem Network Token',
+ symbol: 'GNT',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ name: 'MakerDAO',
+ symbol: 'MKR',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ name: 'Melon Token',
+ symbol: 'MLN',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ ],
+ live: [
+ {
+ address: '0xecf8f87f810ecf450940c9f60066b4a7a501d6a7',
+ name: 'ETH Wrapper Token',
+ symbol: 'WETH',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ address: '0x48c80f1f4d53d5951e5d5438b54cba84f29f32a5',
+ name: 'Augur Reputation Token',
+ symbol: 'REP',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ address: '0xe0b7927c4af23765cb51314a0e0521a9645f0e2a',
+ name: 'Digix DAO Token',
+ symbol: 'DGD',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ address: '0xa74476443119a942de498590fe1f2454d7d4ac0d',
+ name: 'Golem Network Token',
+ symbol: 'GNT',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ address: '0xc66ea802717bfb9833400264dd12c2bceaa34a6d',
+ name: 'MakerDAO',
+ symbol: 'MKR',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ {
+ address: '0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1',
+ name: 'Melon Token',
+ symbol: 'MLN',
+ decimals: 18,
+ ipfsHash: constants.NULL_BYTES,
+ swarmHash: constants.NULL_BYTES,
+ },
+ ],
+};