aboutsummaryrefslogtreecommitdiffstats
path: root/packages/migrations
diff options
context:
space:
mode:
Diffstat (limited to 'packages/migrations')
-rw-r--r--packages/migrations/compiler.json20
-rw-r--r--packages/migrations/package.json15
-rw-r--r--packages/migrations/src/artifact_writer.ts26
-rw-r--r--packages/migrations/src/artifacts.ts31
-rw-r--r--packages/migrations/src/migrate.ts23
-rw-r--r--packages/migrations/src/migration.ts77
-rw-r--r--packages/migrations/src/types.ts4
-rw-r--r--packages/migrations/src/utils/token_info.ts12
8 files changed, 167 insertions, 41 deletions
diff --git a/packages/migrations/compiler.json b/packages/migrations/compiler.json
new file mode 100644
index 000000000..0d126f4b6
--- /dev/null
+++ b/packages/migrations/compiler.json
@@ -0,0 +1,20 @@
+{
+ "artifactsDir": "artifacts/1.0.0",
+ "contractsDir": "../contracts/src/contracts",
+ "contracts": [
+ "Exchange",
+ "DummyToken",
+ "ZRXToken",
+ "Token",
+ "WETH9",
+ "TokenTransferProxy",
+ "MultiSigWallet",
+ "MultiSigWalletWithTimeLock",
+ "MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress",
+ "MaliciousToken",
+ "TokenRegistry",
+ "Arbitrage",
+ "EtherDelta",
+ "AccountLevels"
+ ]
+}
diff --git a/packages/migrations/package.json b/packages/migrations/package.json
index 883e489f0..95922f7b6 100644
--- a/packages/migrations/package.json
+++ b/packages/migrations/package.json
@@ -6,20 +6,24 @@
"types": "lib/index.d.ts",
"scripts": {
"build:watch": "tsc -w",
+ "prebuild": "run-s clean compile copy_artifacts generate_contract_wrappers",
+ "copy_artifacts": "copyfiles -u 4 'artifacts/1.0.0/**/*' ./lib/src/artifacts",
"build": "tsc",
"clean": "shx rm -rf lib artifacts",
"lint": "tslint --project .",
"migrate": "run-s build compile script:migrate",
"script:migrate": "node ./lib/migrate.js",
- "copy_artifacts": "copyfiles 'src/artifacts/**/*' ./lib",
- "compile": "node ../deployer/lib/src/cli.js compile --contracts ${npm_package_config_contracts} --contracts-dir ../contracts/src/contracts --artifacts-dir src/artifacts"
+ "copy_artifacts": "copyfiles 'artifacts/1.0.0/**/*' ./lib",
+ "generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers --backend ethers && prettier --write 'src/contract_wrappers/**.ts'",
+ "compile": "node ../sol-compiler/lib/src/cli.js compile"
},
"config": {
- "contracts": "Exchange,DummyToken,ZRXToken,Token,WETH9,TokenTransferProxy,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,MaliciousToken,TokenRegistry,Arbitrage,EtherDelta,AccountLevels"
+ "abis": "artifacts/1.0.0/@(DummyToken|TokenTransferProxy|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|Arbitrage|EtherDelta|AccountLevels|WETH9|MaliciousToken).json"
},
"license": "Apache-2.0",
"devDependencies": {
"@0xproject/dev-utils": "^0.4.1",
+ "@0xproject/types": "^0.6.3",
"@0xproject/tslint-config": "^0.4.17",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
@@ -27,9 +31,12 @@
"typescript": "2.7.1"
},
"dependencies": {
- "@0xproject/deployer": "^0.4.3",
+ "@0xproject/sol-compiler": "^0.4.3",
+ "@0xproject/base-contract": "^0.3.1",
+ "@0xproject/typescript-typings": "^0.3.1",
"@0xproject/utils": "^0.6.1",
"@0xproject/web3-wrapper": "^0.6.3",
+ "ethers": "^3.0.15",
"lodash": "^4.17.4"
},
"publishConfig": {
diff --git a/packages/migrations/src/artifact_writer.ts b/packages/migrations/src/artifact_writer.ts
new file mode 100644
index 000000000..2da5a09dd
--- /dev/null
+++ b/packages/migrations/src/artifact_writer.ts
@@ -0,0 +1,26 @@
+import { BaseContract } from '@0xproject/base-contract';
+import { ContractArtifact } from '@0xproject/sol-compiler';
+import * as fs from 'fs';
+import * as path from 'path';
+
+export class ArtifactWriter {
+ private _artifactsDir: string;
+ private _networkId: number;
+ constructor(artifactsDir: string, networkId: number) {
+ this._artifactsDir = artifactsDir;
+ this._networkId = networkId;
+ }
+ // This updates the artifact file but does not update the `artifacts` module above. It will not
+ // contain the saved artifact changes.
+ public saveArtifact(contract: BaseContract): void {
+ const contractName = contract.contractName;
+ const artifactFile = path.join(this._artifactsDir, `${contractName}.json`);
+ const artifact: ContractArtifact = JSON.parse(fs.readFileSync(artifactFile).toString());
+ artifact.networks[this._networkId] = {
+ address: contract.address,
+ links: {},
+ constructorArgs: JSON.stringify(contract.constructorArgs),
+ };
+ fs.writeFileSync(artifactFile, JSON.stringify(artifact, null, '\t'));
+ }
+}
diff --git a/packages/migrations/src/artifacts.ts b/packages/migrations/src/artifacts.ts
new file mode 100644
index 000000000..42eb1c33e
--- /dev/null
+++ b/packages/migrations/src/artifacts.ts
@@ -0,0 +1,31 @@
+import { ContractArtifact } from '@0xproject/sol-compiler';
+
+import * as AccountLevels from '../artifacts/1.0.0/AccountLevels.json';
+import * as Arbitrage from '../artifacts/1.0.0/Arbitrage.json';
+import * as DummyToken from '../artifacts/1.0.0/DummyToken.json';
+import * as EtherDelta from '../artifacts/1.0.0/EtherDelta.json';
+import * as Exchange from '../artifacts/1.0.0/Exchange.json';
+import * as MaliciousToken from '../artifacts/1.0.0/MaliciousToken.json';
+import * as MultiSigWalletWithTimeLock from '../artifacts/1.0.0/MultiSigWalletWithTimeLock.json';
+import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress from '../artifacts/1.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json';
+import * as Token from '../artifacts/1.0.0/Token.json';
+import * as TokenRegistry from '../artifacts/1.0.0/TokenRegistry.json';
+import * as TokenTransferProxy from '../artifacts/1.0.0/TokenTransferProxy.json';
+import * as EtherToken from '../artifacts/1.0.0/WETH9.json';
+import * as ZRX from '../artifacts/1.0.0/ZRXToken.json';
+
+export const artifacts = {
+ AccountLevels: (AccountLevels as any) as ContractArtifact,
+ Arbitrage: (Arbitrage as any) as ContractArtifact,
+ EtherDelta: (EtherDelta as any) as ContractArtifact,
+ ZRX: (ZRX as any) as ContractArtifact,
+ DummyToken: (DummyToken as any) as ContractArtifact,
+ Token: (Token as any) as ContractArtifact,
+ Exchange: (Exchange as any) as ContractArtifact,
+ EtherToken: (EtherToken as any) as ContractArtifact,
+ TokenRegistry: (TokenRegistry as any) as ContractArtifact,
+ MaliciousToken: (MaliciousToken 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/migrate.ts b/packages/migrations/src/migrate.ts
index 76dcbd847..b00ba698f 100644
--- a/packages/migrations/src/migrate.ts
+++ b/packages/migrations/src/migrate.ts
@@ -1,24 +1,21 @@
#!/usr/bin/env node
-import { Deployer } from '@0xproject/deployer';
-import { devConstants } from '@0xproject/dev-utils';
+import { devConstants, web3Factory } from '@0xproject/dev-utils';
+import { Provider } from '@0xproject/types';
import { logUtils } from '@0xproject/utils';
import * as path from 'path';
import { runMigrationsAsync } from './migration';
(async () => {
- const deployerOpts = {
- jsonrpcUrl: 'http://localhost:8545',
- artifactsDir: path.resolve('src', 'artifacts'),
- networkId: 50,
- defaults: {
- gas: devConstants.GAS_ESTIMATE,
- },
+ const txDefaults = {
+ from: devConstants.TESTRPC_FIRST_ADDRESS,
};
-
- const deployer = new Deployer(deployerOpts);
-
- await runMigrationsAsync(deployer);
+ const providerConfigs = { shouldUseInProcessGanache: false };
+ const web3 = web3Factory.create(providerConfigs);
+ const provider = web3.currentProvider;
+ const artifactsDir = 'artifacts/1.0.0';
+ await runMigrationsAsync(provider, artifactsDir, txDefaults);
+ process.exit(0);
})().catch(err => {
logUtils.log(err);
process.exit(1);
diff --git a/packages/migrations/src/migration.ts b/packages/migrations/src/migration.ts
index 6313efcff..96973fb62 100644
--- a/packages/migrations/src/migration.ts
+++ b/packages/migrations/src/migration.ts
@@ -1,8 +1,17 @@
-import { Deployer } from '@0xproject/deployer';
+import { Provider, TxData } from '@0xproject/types';
import { BigNumber, NULL_BYTES } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
+import { ArtifactWriter } from './artifact_writer';
+import { artifacts } from './artifacts';
+import { DummyTokenContract } from './contract_wrappers/dummy_token';
+import { ExchangeContract } from './contract_wrappers/exchange';
+import { MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract } from './contract_wrappers/multi_sig_wallet_with_time_lock_except_remove_authorized_address';
+import { TokenRegistryContract } from './contract_wrappers/token_registry';
+import { TokenTransferProxyContract } from './contract_wrappers/token_transfer_proxy';
+import { WETH9Contract } from './contract_wrappers/weth9';
+import { ZRXTokenContract } from './contract_wrappers/zrx_token';
import { ContractName } from './types';
import { tokenInfo } from './utils/token_info';
@@ -10,27 +19,54 @@ import { tokenInfo } from './utils/token_info';
* Custom migrations should be defined in this function. This will be called with the CLI 'migrate' 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 deployer Deployer instance.
+ * @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 runMigrationsAsync = async (deployer: Deployer) => {
- const web3Wrapper: Web3Wrapper = deployer.web3Wrapper;
- const accounts: string[] = await web3Wrapper.getAvailableAddressesAsync();
+export const runMigrationsAsync = async (provider: Provider, artifactsDir: string, txDefaults: Partial<TxData>) => {
+ const web3Wrapper = new Web3Wrapper(provider);
+ const networkId = await web3Wrapper.getNetworkIdAsync();
+ const artifactsWriter = new ArtifactWriter(artifactsDir, networkId);
+ const tokenTransferProxy = await TokenTransferProxyContract.deployFrom0xArtifactAsync(
+ artifacts.TokenTransferProxy,
+ provider,
+ txDefaults,
+ );
+ artifactsWriter.saveArtifact(tokenTransferProxy);
+ const zrxToken = await ZRXTokenContract.deployFrom0xArtifactAsync(artifacts.ZRX, provider, txDefaults);
+ artifactsWriter.saveArtifact(zrxToken);
- const tokenTransferProxy = await deployer.deployAndSaveAsync(ContractName.TokenTransferProxy);
- const zrxToken = await deployer.deployAndSaveAsync(ContractName.ZRXToken);
- const etherToken = await deployer.deployAndSaveAsync(ContractName.WETH9);
- const tokenReg = await deployer.deployAndSaveAsync(ContractName.TokenRegistry);
+ 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 exchangeArgs = [zrxToken.address, tokenTransferProxy.address];
+ const accounts: string[] = await web3Wrapper.getAvailableAddressesAsync();
const owners = [accounts[0], accounts[1]];
const confirmationsRequired = new BigNumber(2);
const secondsRequired = new BigNumber(0);
- const multiSigArgs = [owners, confirmationsRequired, secondsRequired, tokenTransferProxy.address];
- const exchange = await deployer.deployAndSaveAsync(ContractName.Exchange, exchangeArgs);
- const multiSig = await deployer.deployAndSaveAsync(
- ContractName.MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,
- multiSigArgs,
+ const exchange = await ExchangeContract.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 tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner });
@@ -70,8 +106,15 @@ export const runMigrationsAsync = async (deployer: Deployer) => {
);
for (const token of tokenInfo) {
const totalSupply = new BigNumber(100000000000000000000);
- const args = [token.name, token.symbol, token.decimals, totalSupply];
- const dummyToken = await deployer.deployAsync(ContractName.DummyToken, args);
+ const dummyToken = await DummyTokenContract.deployFrom0xArtifactAsync(
+ artifacts.DummyToken,
+ provider,
+ txDefaults,
+ token.name,
+ token.symbol,
+ token.decimals,
+ totalSupply,
+ );
await tokenReg.addToken.sendTransactionAsync(
dummyToken.address,
token.name,
diff --git a/packages/migrations/src/types.ts b/packages/migrations/src/types.ts
index 1887bfd96..21daf47f0 100644
--- a/packages/migrations/src/types.ts
+++ b/packages/migrations/src/types.ts
@@ -1,3 +1,5 @@
+import { BigNumber } from '@0xproject/utils';
+
export interface MultiSigConfig {
owners: string[];
confirmationsRequired: number;
@@ -12,7 +14,7 @@ export interface Token {
address?: string;
name: string;
symbol: string;
- decimals: number;
+ decimals: BigNumber;
ipfsHash: string;
swarmHash: string;
}
diff --git a/packages/migrations/src/utils/token_info.ts b/packages/migrations/src/utils/token_info.ts
index 968665c7d..e72a80220 100644
--- a/packages/migrations/src/utils/token_info.ts
+++ b/packages/migrations/src/utils/token_info.ts
@@ -1,4 +1,4 @@
-import { NULL_BYTES } from '@0xproject/utils';
+import { BigNumber, NULL_BYTES } from '@0xproject/utils';
import { Token } from '../types';
@@ -6,35 +6,35 @@ export const tokenInfo: Token[] = [
{
name: 'Augur Reputation Token',
symbol: 'REP',
- decimals: 18,
+ decimals: new BigNumber(18),
ipfsHash: NULL_BYTES,
swarmHash: NULL_BYTES,
},
{
name: 'Digix DAO Token',
symbol: 'DGD',
- decimals: 18,
+ decimals: new BigNumber(18),
ipfsHash: NULL_BYTES,
swarmHash: NULL_BYTES,
},
{
name: 'Golem Network Token',
symbol: 'GNT',
- decimals: 18,
+ decimals: new BigNumber(18),
ipfsHash: NULL_BYTES,
swarmHash: NULL_BYTES,
},
{
name: 'MakerDAO',
symbol: 'MKR',
- decimals: 18,
+ decimals: new BigNumber(18),
ipfsHash: NULL_BYTES,
swarmHash: NULL_BYTES,
},
{
name: 'Melon Token',
symbol: 'MLN',
- decimals: 18,
+ decimals: new BigNumber(18),
ipfsHash: NULL_BYTES,
swarmHash: NULL_BYTES,
},