Migrate migrations to v2

This commit is contained in:
Leonid Logvinov 2018-05-24 10:56:31 -07:00
parent 62431fee8e
commit 92b0efff5a
No known key found for this signature in database
GPG Key ID: 0DD294BFDE8C95D4
33 changed files with 271 additions and 122 deletions

3
.gitignore vendored
View File

@ -86,7 +86,8 @@ packages/contract-wrappers/src/contract_wrappers/generated/
packages/metacoin/src/contract_wrappers packages/metacoin/src/contract_wrappers
packages/fill-scenarios/src/generated_contract_wrappers/ packages/fill-scenarios/src/generated_contract_wrappers/
packages/order-watcher/src/generated_contract_wrappers/ packages/order-watcher/src/generated_contract_wrappers/
packages/migrations/src/contract_wrappers packages/migrations/src/v1/contract_wrappers
packages/migrations/src/v2/contract_wrappers
# solc-bin in sol-compiler # solc-bin in sol-compiler
packages/sol-compiler/solc_bin/ packages/sol-compiler/solc_bin/

View File

@ -104,7 +104,7 @@
"@0xproject/order-utils": "^0.0.5", "@0xproject/order-utils": "^0.0.5",
"@0xproject/order-watcher": "^0.0.2", "@0xproject/order-watcher": "^0.0.2",
"@0xproject/sol-compiler": "^0.5.0", "@0xproject/sol-compiler": "^0.5.0",
"@0xproject/types": "^0.7.0", "@0xproject/types": "0.7.0",
"@0xproject/typescript-typings": "^0.3.2", "@0xproject/typescript-typings": "^0.3.2",
"@0xproject/utils": "^0.6.2", "@0xproject/utils": "^0.6.2",
"@0xproject/web3-wrapper": "^0.6.4", "@0xproject/web3-wrapper": "^0.6.4",

View File

@ -1,5 +1,5 @@
import { devConstants } from '@0xproject/dev-utils'; import { devConstants } from '@0xproject/dev-utils';
import { runMigrationsAsync } from '@0xproject/migrations'; import { runV1MigrationsAsync } from '@0xproject/migrations';
import * as path from 'path'; import * as path from 'path';
import { constants } from './utils/constants'; import { constants } from './utils/constants';
@ -15,5 +15,5 @@ before('migrate contracts', async function(): Promise<void> {
from: devConstants.TESTRPC_FIRST_ADDRESS, from: devConstants.TESTRPC_FIRST_ADDRESS,
}; };
const artifactsDir = `../migrations/artifacts/1.0.0`; const artifactsDir = `../migrations/artifacts/1.0.0`;
await runMigrationsAsync(provider, artifactsDir, txDefaults); await runV1MigrationsAsync(provider, artifactsDir, txDefaults);
}); });

View File

@ -52,7 +52,7 @@
"dependencies": { "dependencies": {
"@0xproject/assert": "^0.2.10", "@0xproject/assert": "^0.2.10",
"@0xproject/json-schemas": "0.7.22", "@0xproject/json-schemas": "0.7.22",
"@0xproject/types": "^0.7.0", "@0xproject/types": "0.7.0",
"@0xproject/typescript-typings": "^0.3.2", "@0xproject/typescript-typings": "^0.3.2",
"@0xproject/utils": "^0.6.2", "@0xproject/utils": "^0.6.2",
"isomorphic-fetch": "^2.2.1", "isomorphic-fetch": "^2.2.1",

View File

@ -81,7 +81,7 @@
"@0xproject/fill-scenarios": "^0.0.2", "@0xproject/fill-scenarios": "^0.0.2",
"@0xproject/json-schemas": "0.7.22", "@0xproject/json-schemas": "0.7.22",
"@0xproject/order-utils": "^0.0.5", "@0xproject/order-utils": "^0.0.5",
"@0xproject/types": "^0.7.0", "@0xproject/types": "0.7.0",
"@0xproject/typescript-typings": "^0.3.2", "@0xproject/typescript-typings": "^0.3.2",
"@0xproject/utils": "^0.6.2", "@0xproject/utils": "^0.6.2",
"@0xproject/web3-wrapper": "^0.6.4", "@0xproject/web3-wrapper": "^0.6.4",

View File

@ -1,5 +1,5 @@
import { devConstants } from '@0xproject/dev-utils'; import { devConstants } from '@0xproject/dev-utils';
import { runMigrationsAsync } from '@0xproject/migrations'; import { runV1MigrationsAsync } from '@0xproject/migrations';
import * as path from 'path'; import * as path from 'path';
import { constants } from './utils/constants'; import { constants } from './utils/constants';
@ -15,5 +15,5 @@ before('migrate contracts', async function(): Promise<void> {
from: devConstants.TESTRPC_FIRST_ADDRESS, from: devConstants.TESTRPC_FIRST_ADDRESS,
}; };
const artifactsDir = `../migrations/artifacts/1.0.0`; const artifactsDir = `../migrations/artifacts/1.0.0`;
await runMigrationsAsync(provider, artifactsDir, txDefaults); await runV1MigrationsAsync(provider, artifactsDir, txDefaults);
}); });

View File

@ -1,4 +1,4 @@
import { Provider, TransactionReceiptWithDecodedLogs } from '@0xproject/types'; import { Provider, SignedOrder, TransactionReceiptWithDecodedLogs } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash'; import * as _ from 'lodash';
@ -10,7 +10,7 @@ import { constants } from './constants';
import { formatters } from './formatters'; import { formatters } from './formatters';
import { LogDecoder } from './log_decoder'; import { LogDecoder } from './log_decoder';
import { orderUtils } from './order_utils'; import { orderUtils } from './order_utils';
import { AssetProxyId, OrderInfo, SignedOrder, SignedTransaction } from './types'; import { AssetProxyId, OrderInfo, SignedTransaction } from './types';
export class ExchangeWrapper { export class ExchangeWrapper {
private _exchange: ExchangeContract; private _exchange: ExchangeContract;

View File

@ -1,8 +1,9 @@
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import { SignedOrder } from '@0xproject/types';
import * as _ from 'lodash'; import * as _ from 'lodash';
import { orderUtils } from './order_utils'; import { orderUtils } from './order_utils';
import { BatchCancelOrders, BatchFillOrders, MarketBuyOrders, MarketSellOrders, SignedOrder } from './types'; import { BatchCancelOrders, BatchFillOrders, MarketBuyOrders, MarketSellOrders } from './types';
export const formatters = { export const formatters = {
createBatchFill(signedOrders: SignedOrder[], takerAssetFillAmounts: BigNumber[] = []): BatchFillOrders { createBatchFill(signedOrders: SignedOrder[], takerAssetFillAmounts: BigNumber[] = []): BatchFillOrders {

View File

@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils'; import { BlockchainLifecycle } from '@0xproject/dev-utils';
import { LogWithDecodedArgs } from '@0xproject/types'; import { LogWithDecodedArgs, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai'; import * as chai from 'chai';
import ethUtil = require('ethereumjs-util'); import ethUtil = require('ethereumjs-util');
@ -29,7 +29,6 @@ import {
ERC20BalancesByOwner, ERC20BalancesByOwner,
ERC721TokenIdsByOwner, ERC721TokenIdsByOwner,
ExchangeStatus, ExchangeStatus,
SignedOrder,
TransferAmountsByMatchOrders as TransferAmounts, TransferAmountsByMatchOrders as TransferAmounts,
} from '../utils/types'; } from '../utils/types';
import { provider, web3Wrapper } from '../utils/web3_wrapper'; import { provider, web3Wrapper } from '../utils/web3_wrapper';

View File

@ -1,11 +1,12 @@
import { generatePseudoRandomSalt } from '@0xproject/order-utils'; import { generatePseudoRandomSalt } from '@0xproject/order-utils';
import { SignedOrder, UnsignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash'; import * as _ from 'lodash';
import { constants } from './constants'; import { constants } from './constants';
import { orderUtils } from './order_utils'; import { orderUtils } from './order_utils';
import { signingUtils } from './signing_utils'; import { signingUtils } from './signing_utils';
import { SignatureType, SignedOrder, UnsignedOrder } from './types'; import { SignatureType } from './types';
export class OrderFactory { export class OrderFactory {
private _defaultOrderParams: Partial<UnsignedOrder>; private _defaultOrderParams: Partial<UnsignedOrder>;

View File

@ -1,10 +1,11 @@
import { Order, SignedOrder, UnsignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Web3Wrapper } from '@0xproject/web3-wrapper';
import ethUtil = require('ethereumjs-util'); import ethUtil = require('ethereumjs-util');
import * as _ from 'lodash'; import * as _ from 'lodash';
import { crypto } from './crypto'; import { crypto } from './crypto';
import { CancelOrder, MatchOrder, OrderStruct, SignatureType, SignedOrder, UnsignedOrder } from './types'; import { CancelOrder, MatchOrder, SignatureType } from './types';
export const orderUtils = { export const orderUtils = {
createFill: (signedOrder: SignedOrder, takerAssetFillAmount?: BigNumber) => { createFill: (signedOrder: SignedOrder, takerAssetFillAmount?: BigNumber) => {
@ -22,7 +23,7 @@ export const orderUtils = {
}; };
return cancel; return cancel;
}, },
getOrderStruct(signedOrder: SignedOrder): OrderStruct { getOrderStruct(signedOrder: SignedOrder): Order {
const orderStruct = { const orderStruct = {
senderAddress: signedOrder.senderAddress, senderAddress: signedOrder.senderAddress,
makerAddress: signedOrder.makerAddress, makerAddress: signedOrder.makerAddress,

View File

@ -1,4 +1,4 @@
import { AbiDefinition, ContractAbi } from '@0xproject/types'; import { AbiDefinition, ContractAbi, Order } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
export interface ERC20BalancesByOwner { export interface ERC20BalancesByOwner {
@ -18,25 +18,25 @@ export interface SubmissionContractEventArgs {
} }
export interface BatchFillOrders { export interface BatchFillOrders {
orders: OrderStruct[]; orders: Order[];
signatures: string[]; signatures: string[];
takerAssetFillAmounts: BigNumber[]; takerAssetFillAmounts: BigNumber[];
} }
export interface MarketSellOrders { export interface MarketSellOrders {
orders: OrderStruct[]; orders: Order[];
signatures: string[]; signatures: string[];
takerAssetFillAmount: BigNumber; takerAssetFillAmount: BigNumber;
} }
export interface MarketBuyOrders { export interface MarketBuyOrders {
orders: OrderStruct[]; orders: Order[];
signatures: string[]; signatures: string[];
makerAssetFillAmount: BigNumber; makerAssetFillAmount: BigNumber;
} }
export interface BatchCancelOrders { export interface BatchCancelOrders {
orders: OrderStruct[]; orders: Order[];
} }
export interface CancelOrdersBefore { export interface CancelOrdersBefore {
@ -113,29 +113,6 @@ export enum ContractName {
Authorizable = 'Authorizable', Authorizable = 'Authorizable',
} }
export interface SignedOrder extends UnsignedOrder {
signature: string;
}
export interface OrderStruct {
senderAddress: string;
makerAddress: string;
takerAddress: string;
feeRecipientAddress: string;
makerAssetAmount: BigNumber;
takerAssetAmount: BigNumber;
makerFee: BigNumber;
takerFee: BigNumber;
expirationTimeSeconds: BigNumber;
salt: BigNumber;
makerAssetData: string;
takerAssetData: string;
}
export interface UnsignedOrder extends OrderStruct {
exchangeAddress: string;
}
export enum SignatureType { export enum SignatureType {
Illegal, Illegal,
Invalid, Invalid,
@ -199,13 +176,13 @@ export interface ProxyData {
} }
export interface CancelOrder { export interface CancelOrder {
order: OrderStruct; order: Order;
takerAssetCancelAmount: BigNumber; takerAssetCancelAmount: BigNumber;
} }
export interface MatchOrder { export interface MatchOrder {
left: OrderStruct; left: Order;
right: OrderStruct; right: Order;
leftSignature: string; leftSignature: string;
rightSignature: string; rightSignature: string;
} }

View File

@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils'; import { BlockchainLifecycle } from '@0xproject/dev-utils';
import { LogWithDecodedArgs } from '@0xproject/types'; import { LogWithDecodedArgs, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai'; import * as chai from 'chai';
@ -26,7 +26,7 @@ import { ERC721Wrapper } from '../../src/utils/erc721_wrapper';
import { ExchangeWrapper } from '../../src/utils/exchange_wrapper'; import { ExchangeWrapper } from '../../src/utils/exchange_wrapper';
import { OrderFactory } from '../../src/utils/order_factory'; import { OrderFactory } from '../../src/utils/order_factory';
import { orderUtils } from '../../src/utils/order_utils'; import { orderUtils } from '../../src/utils/order_utils';
import { AssetProxyId, ContractName, ERC20BalancesByOwner, ExchangeStatus, SignedOrder } from '../../src/utils/types'; import { AssetProxyId, ContractName, ERC20BalancesByOwner, ExchangeStatus } from '../../src/utils/types';
import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper'; import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper';
chaiSetup.configure(); chaiSetup.configure();

View File

@ -1,5 +1,6 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils'; import { BlockchainLifecycle } from '@0xproject/dev-utils';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import { SignedOrder } from '@0xproject/types';
import * as chai from 'chai'; import * as chai from 'chai';
import ethUtil = require('ethereumjs-util'); import ethUtil = require('ethereumjs-util');
@ -11,7 +12,6 @@ import { chaiSetup } from '../../src/utils/chai_setup';
import { constants } from '../../src/utils/constants'; import { constants } from '../../src/utils/constants';
import { OrderFactory } from '../../src/utils/order_factory'; import { OrderFactory } from '../../src/utils/order_factory';
import { orderUtils } from '../../src/utils/order_utils'; import { orderUtils } from '../../src/utils/order_utils';
import { SignedOrder } from '../../src/utils/types';
import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper'; import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper';
chaiSetup.configure(); chaiSetup.configure();

View File

@ -1,5 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils'; import { BlockchainLifecycle } from '@0xproject/dev-utils';
import { LogWithDecodedArgs } from '@0xproject/types'; import { LogWithDecodedArgs, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai'; import * as chai from 'chai';
@ -33,7 +33,6 @@ import {
ERC721TokenIdsByOwner, ERC721TokenIdsByOwner,
ExchangeStatus, ExchangeStatus,
OrderInfo, OrderInfo,
SignedOrder,
} from '../../src/utils/types'; } from '../../src/utils/types';
import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper'; import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper';

View File

@ -1,4 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils'; import { BlockchainLifecycle } from '@0xproject/dev-utils';
import { SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai'; import * as chai from 'chai';
import ethUtil = require('ethereumjs-util'); import ethUtil = require('ethereumjs-util');
@ -11,7 +12,6 @@ import { chaiSetup } from '../../src/utils/chai_setup';
import { constants } from '../../src/utils/constants'; import { constants } from '../../src/utils/constants';
import { OrderFactory } from '../../src/utils/order_factory'; import { OrderFactory } from '../../src/utils/order_factory';
import { orderUtils } from '../../src/utils/order_utils'; import { orderUtils } from '../../src/utils/order_utils';
import { SignedOrder } from '../../src/utils/types';
import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper'; import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper';
chaiSetup.configure(); chaiSetup.configure();

View File

@ -1,4 +1,5 @@
import { BlockchainLifecycle } from '@0xproject/dev-utils'; import { BlockchainLifecycle } from '@0xproject/dev-utils';
import { SignedOrder, Order } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai'; import * as chai from 'chai';
import * as ethUtil from 'ethereumjs-util'; import * as ethUtil from 'ethereumjs-util';
@ -20,9 +21,7 @@ import {
AssetProxyId, AssetProxyId,
ERC20BalancesByOwner, ERC20BalancesByOwner,
ExchangeStatus, ExchangeStatus,
OrderStruct,
SignatureType, SignatureType,
SignedOrder,
SignedTransaction, SignedTransaction,
} from '../../src/utils/types'; } from '../../src/utils/types';
import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper'; import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper';
@ -47,7 +46,7 @@ describe('Exchange transactions', () => {
let erc20Balances: ERC20BalancesByOwner; let erc20Balances: ERC20BalancesByOwner;
let signedOrder: SignedOrder; let signedOrder: SignedOrder;
let signedTx: SignedTransaction; let signedTx: SignedTransaction;
let order: OrderStruct; let order: Order;
let orderFactory: OrderFactory; let orderFactory: OrderFactory;
let makerTransactionFactory: TransactionFactory; let makerTransactionFactory: TransactionFactory;
let takerTransactionFactory: TransactionFactory; let takerTransactionFactory: TransactionFactory;

View File

@ -1,4 +1,5 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils'; import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai'; import * as chai from 'chai';
@ -20,7 +21,7 @@ import { ERC20Wrapper } from '../../src/utils/erc20_wrapper';
import { ERC721Wrapper } from '../../src/utils/erc721_wrapper'; import { ERC721Wrapper } from '../../src/utils/erc721_wrapper';
import { ExchangeWrapper } from '../../src/utils/exchange_wrapper'; import { ExchangeWrapper } from '../../src/utils/exchange_wrapper';
import { OrderFactory } from '../../src/utils/order_factory'; import { OrderFactory } from '../../src/utils/order_factory';
import { AssetProxyId, ERC20BalancesByOwner, SignedOrder } from '../../src/utils/types'; import { AssetProxyId, ERC20BalancesByOwner } from '../../src/utils/types';
import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper'; import { provider, txDefaults, web3Wrapper } from '../../src/utils/web3_wrapper';
chaiSetup.configure(); chaiSetup.configure();

View File

@ -38,7 +38,7 @@
"dependencies": { "dependencies": {
"@0xproject/base-contract": "^0.3.2", "@0xproject/base-contract": "^0.3.2",
"@0xproject/order-utils": "^0.0.5", "@0xproject/order-utils": "^0.0.5",
"@0xproject/types": "^0.7.0", "@0xproject/types": "0.7.0",
"@0xproject/typescript-typings": "^0.3.2", "@0xproject/typescript-typings": "^0.3.2",
"@0xproject/utils": "^0.6.2", "@0xproject/utils": "^0.6.2",
"@0xproject/web3-wrapper": "^0.6.4", "@0xproject/web3-wrapper": "^0.6.4",

View File

@ -10,18 +10,28 @@
"scripts": { "scripts": {
"watch": "tsc -w", "watch": "tsc -w",
"prebuild": "run-s clean copy_artifacts generate_contract_wrappers", "prebuild": "run-s clean copy_artifacts generate_contract_wrappers",
"copy_artifacts": "copyfiles 'artifacts/1.0.0/**/*' ./lib", "copy_artifacts": "copyfiles 'artifacts/**/*' ./lib",
"build": "tsc", "build": "tsc",
"clean": "shx rm -rf lib src/contract_wrappers", "clean": "shx rm -rf lib src/contract_wrappers",
"lint": "tslint --project .", "lint": "tslint --project .",
"migrate": "run-s build compile script:migrate", "migrate:v1": "run-s build compile script:migrate:v1",
"script:migrate": "node ./lib/migrate.js", "migrate:v2": "run-s build compile script:migrate:v2",
"generate_contract_wrappers": "abi-gen --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'", "script:migrate:v1": "node ./lib/migrate.js --contracts-version 1.0.0",
"script:migrate:v2": "node ./lib/migrate.js --contracts-version 2.0.0",
"generate_contract_wrappers": "run-p generate_contract_wrappers:*",
"generate_contract_wrappers:v1":
"abi-gen --abis ${npm_package_config_abis_v1} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/v1/contract_wrappers --backend ethers && prettier --write 'src/v1/contract_wrappers/**.ts'",
"generate_contract_wrappers:v2":
"abi-gen --abis ${npm_package_config_abis_v2} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/v2/contract_wrappers --backend ethers && prettier --write 'src/v2/contract_wrappers/**.ts'",
"compile": "sol-compiler" "compile": "sol-compiler"
}, },
"config": { "config": {
"abis": "abis": {
"artifacts/1.0.0/@(DummyERC20Token|TokenTransferProxy_v1|Exchange_v1|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|WETH9).json" "v1":
"artifacts/1.0.0/@(DummyERC20Token|TokenTransferProxy_v1|Exchange_v1|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|WETH9).json",
"v2":
"artifacts/2.0.0/@(DummyERC20Token|DummyERC721Token|ERC20Proxy|ERC721Proxy|Exchange|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|ZRXToken|WETH9).json"
}
}, },
"license": "Apache-2.0", "license": "Apache-2.0",
"devDependencies": { "devDependencies": {
@ -29,6 +39,8 @@
"@0xproject/dev-utils": "^0.4.2", "@0xproject/dev-utils": "^0.4.2",
"@0xproject/tslint-config": "^0.4.18", "@0xproject/tslint-config": "^0.4.18",
"@0xproject/types": "^0.7.0", "@0xproject/types": "^0.7.0",
"@types/yargs": "^10.0.0",
"yargs": "^10.0.3",
"make-promises-safe": "^1.1.0", "make-promises-safe": "^1.1.0",
"npm-run-all": "^4.1.2", "npm-run-all": "^4.1.2",
"shx": "^0.2.2", "shx": "^0.2.2",

View File

@ -1 +1,2 @@
export { runMigrationsAsync } from './migration'; export { runV1MigrationsAsync } from './v1/migration';
export { runV2MigrationsAsync } from './v2/migration';

View File

@ -3,8 +3,16 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils';
import { Provider } from '@0xproject/types'; import { Provider } from '@0xproject/types';
import { logUtils } from '@0xproject/utils'; import { logUtils } from '@0xproject/utils';
import * as path from 'path'; import * as path from 'path';
import * as yargs from 'yargs';
import { runMigrationsAsync } from './migration'; import { runV1MigrationsAsync } from './v1/migration';
import { runV2MigrationsAsync } from './v2/migration';
enum ContractVersions {
V1 = '1.0.0',
V2 = '2.0.0',
}
const args = yargs.argv;
(async () => { (async () => {
const txDefaults = { const txDefaults = {
@ -12,8 +20,13 @@ import { runMigrationsAsync } from './migration';
}; };
const providerConfigs = { shouldUseInProcessGanache: false }; const providerConfigs = { shouldUseInProcessGanache: false };
const provider: Provider = web3Factory.getRpcProvider(providerConfigs); const provider: Provider = web3Factory.getRpcProvider(providerConfigs);
const artifactsDir = 'artifacts/1.0.0'; const contractsVersion = args.contractsVersion;
await runMigrationsAsync(provider, artifactsDir, txDefaults); const artifactsDir = `artifacts/${contractsVersion}`;
if (contractsVersion === ContractVersions.V1) {
await runV1MigrationsAsync(provider, artifactsDir, txDefaults);
} else {
await runV2MigrationsAsync(provider, artifactsDir, txDefaults);
}
process.exit(0); process.exit(0);
})().catch(err => { })().catch(err => {
logUtils.log(err); logUtils.log(err);

View File

@ -1,16 +1,6 @@
import { BigNumber } from '@0xproject/utils'; import { BigNumber } from '@0xproject/utils';
export interface MultiSigConfig { export interface ERC20Token {
owners: string[];
confirmationsRequired: number;
secondsRequired: number;
}
export interface MultiSigConfigByNetwork {
[networkName: string]: MultiSigConfig;
}
export interface Token {
address?: string; address?: string;
name: string; name: string;
symbol: string; symbol: string;
@ -19,9 +9,9 @@ export interface Token {
swarmHash: string; swarmHash: string;
} }
export interface TokenInfoByNetwork { export interface ERC721Token {
development: Token[]; name: string;
live: Token[]; symbol: string;
} }
export enum ContractName { export enum ContractName {

View File

@ -1,8 +1,8 @@
import { BigNumber, NULL_BYTES } from '@0xproject/utils'; import { BigNumber, NULL_BYTES } from '@0xproject/utils';
import { Token } from '../types'; import { ERC20Token, ERC721Token } from '../types';
export const tokenInfo: Token[] = [ export const erc20TokenInfo: ERC20Token[] = [
{ {
name: 'Augur Reputation Token', name: 'Augur Reputation Token',
symbol: 'REP', symbol: 'REP',
@ -39,3 +39,10 @@ export const tokenInfo: Token[] = [
swarmHash: NULL_BYTES, swarmHash: NULL_BYTES,
}, },
]; ];
export const erc721TokenInfo: ERC721Token[] = [
{
name: 'CryptoKitties',
symbol: 'CK',
},
];

View File

@ -1,13 +1,13 @@
import { ContractArtifact } from '@0xproject/sol-compiler'; import { ContractArtifact } from '@0xproject/sol-compiler';
import * as DummyERC20Token from '../artifacts/1.0.0/DummyERC20Token.json'; import * as DummyERC20Token from '../../artifacts/1.0.0/DummyERC20Token.json';
import * as Exchange from '../artifacts/1.0.0/Exchange_v1.json'; import * as Exchange from '../../artifacts/1.0.0/Exchange_v1.json';
import * as MultiSigWalletWithTimeLock from '../artifacts/1.0.0/MultiSigWalletWithTimeLock.json'; import * as MultiSigWalletWithTimeLock from '../../artifacts/1.0.0/MultiSigWalletWithTimeLock.json';
import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress from '../artifacts/1.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json'; import * as MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress from '../../artifacts/1.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.json';
import * as TokenRegistry from '../artifacts/1.0.0/TokenRegistry.json'; import * as TokenRegistry from '../../artifacts/1.0.0/TokenRegistry.json';
import * as TokenTransferProxy from '../artifacts/1.0.0/TokenTransferProxy_v1.json'; import * as TokenTransferProxy from '../../artifacts/1.0.0/TokenTransferProxy_v1.json';
import * as EtherToken from '../artifacts/1.0.0/WETH9.json'; import * as EtherToken from '../../artifacts/1.0.0/WETH9.json';
import * as ZRX from '../artifacts/1.0.0/ZRXToken.json'; import * as ZRX from '../../artifacts/1.0.0/ZRXToken.json';
export const artifacts = { export const artifacts = {
ZRX: (ZRX as any) as ContractArtifact, ZRX: (ZRX as any) as ContractArtifact,

View File

@ -3,7 +3,10 @@ import { BigNumber, NULL_BYTES } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash'; import * as _ from 'lodash';
import { ArtifactWriter } from './artifact_writer'; import { ArtifactWriter } from '../artifact_writer';
import { ContractName } from '../types';
import { erc20TokenInfo } from '../utils/token_info';
import { artifacts } from './artifacts'; import { artifacts } from './artifacts';
import { DummyERC20TokenContract } from './contract_wrappers/dummy_e_r_c20_token'; import { DummyERC20TokenContract } from './contract_wrappers/dummy_e_r_c20_token';
import { Exchange_v1Contract } from './contract_wrappers/exchange_v1'; import { Exchange_v1Contract } from './contract_wrappers/exchange_v1';
@ -12,18 +15,16 @@ import { TokenRegistryContract } from './contract_wrappers/token_registry';
import { TokenTransferProxy_v1Contract } from './contract_wrappers/tokentransferproxy_v1'; import { TokenTransferProxy_v1Contract } from './contract_wrappers/tokentransferproxy_v1';
import { WETH9Contract } from './contract_wrappers/weth9'; import { WETH9Contract } from './contract_wrappers/weth9';
import { ZRXTokenContract } from './contract_wrappers/zrx_token'; import { ZRXTokenContract } from './contract_wrappers/zrx_token';
import { ContractName } from './types';
import { tokenInfo } from './utils/token_info';
/** /**
* Custom migrations should be defined in this function. This will be called with the CLI 'migrate' command. * 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, * 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. * the migration should be written to run synchronously.
* @param provider Web3 provider instance. * @param provider Web3 provider instance.
* @param artifactsDir The directory with compiler artifact files. * @param artifactsDir The directory with compiler artifact files.
* @param txDefaults Default transaction values to use when deploying contracts. * @param txDefaults Default transaction values to use when deploying contracts.
*/ */
export const runMigrationsAsync = async (provider: Provider, artifactsDir: string, txDefaults: Partial<TxData>) => { export const runV1MigrationsAsync = async (provider: Provider, artifactsDir: string, txDefaults: Partial<TxData>) => {
const web3Wrapper = new Web3Wrapper(provider); const web3Wrapper = new Web3Wrapper(provider);
const networkId = await web3Wrapper.getNetworkIdAsync(); const networkId = await web3Wrapper.getNetworkIdAsync();
const artifactsWriter = new ArtifactWriter(artifactsDir, networkId); const artifactsWriter = new ArtifactWriter(artifactsDir, networkId);
@ -73,11 +74,11 @@ export const runMigrationsAsync = async (provider: Provider, artifactsDir: strin
await tokenTransferProxy.transferOwnership.sendTransactionAsync(multiSig.address, { from: owner }); await tokenTransferProxy.transferOwnership.sendTransactionAsync(multiSig.address, { from: owner });
const addTokenGasEstimate = await tokenReg.addToken.estimateGasAsync( const addTokenGasEstimate = await tokenReg.addToken.estimateGasAsync(
zrxToken.address, zrxToken.address,
tokenInfo[0].name, erc20TokenInfo[0].name,
tokenInfo[0].symbol, erc20TokenInfo[0].symbol,
tokenInfo[0].decimals, erc20TokenInfo[0].decimals,
tokenInfo[0].ipfsHash, erc20TokenInfo[0].ipfsHash,
tokenInfo[0].swarmHash, erc20TokenInfo[0].swarmHash,
{ from: owner }, { from: owner },
); );
const decimals = 18; const decimals = 18;
@ -105,7 +106,7 @@ export const runMigrationsAsync = async (provider: Provider, artifactsDir: strin
gas: addTokenGasEstimate, gas: addTokenGasEstimate,
}, },
); );
for (const token of tokenInfo) { for (const token of erc20TokenInfo) {
const totalSupply = new BigNumber(100000000000000000000); const totalSupply = new BigNumber(100000000000000000000);
const dummyToken = await DummyERC20TokenContract.deployFrom0xArtifactAsync( const dummyToken = await DummyERC20TokenContract.deployFrom0xArtifactAsync(
artifacts.DummyERC20Token, artifacts.DummyERC20Token,

View File

@ -0,0 +1,21 @@
import { ContractArtifact } from '@0xproject/sol-compiler';
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 MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress from '../../artifacts/2.0.0/MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress.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,
MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress: (MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress 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,
};

View File

@ -0,0 +1,118 @@
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 { ContractName } from '../types';
import { erc20TokenInfo, erc721TokenInfo } from '../utils/token_info';
import { artifacts } from './artifacts';
import { DummyERC20TokenContract } from './contract_wrappers/dummy_e_r_c20_token';
import { DummyERC721TokenContract } from './contract_wrappers/dummy_e_r_c721_token';
import { ERC20ProxyContract } from './contract_wrappers/e_r_c20_proxy';
import { ERC721ProxyContract } from './contract_wrappers/e_r_c721_proxy';
import { ExchangeContract } from './contract_wrappers/exchange';
import { MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract } from './contract_wrappers/multi_sig_wallet_with_time_lock_except_remove_authorized_address';
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' 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 runV2MigrationsAsync = async (provider: Provider, artifactsDir: string, txDefaults: Partial<TxData>) => {
const web3Wrapper = new Web3Wrapper(provider);
const networkId = await web3Wrapper.getNetworkIdAsync();
const artifactsWriter = new ArtifactWriter(artifactsDir, networkId);
// Proxies
const erc20proxy = await ERC20ProxyContract.deployFrom0xArtifactAsync(artifacts.ERC20Proxy, provider, txDefaults);
artifactsWriter.saveArtifact(erc20proxy);
const erc721proxy = await ERC721ProxyContract.deployFrom0xArtifactAsync(
artifacts.ERC721Proxy,
provider,
txDefaults,
);
artifactsWriter.saveArtifact(erc721proxy);
// 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 exchange = await ExchangeContract.deployFrom0xArtifactAsync(
artifacts.Exchange,
provider,
txDefaults,
zrxToken.address,
);
artifactsWriter.saveArtifact(exchange);
// 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];
// TODO(leonid) use `AssetProxyOwner` after https://github.com/0xProject/0x-monorepo/pull/571 is merged
// ERC20 Multisig
const multiSigERC20 = await MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract.deployFrom0xArtifactAsync(
artifacts.MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,
provider,
txDefaults,
owners,
confirmationsRequired,
secondsRequired,
erc20proxy.address,
);
artifactsWriter.saveArtifact(multiSigERC20);
await erc20proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner });
await erc20proxy.transferOwnership.sendTransactionAsync(multiSigERC20.address, { from: owner });
// ERC721 Multisig
const multiSigERC721 = await MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract.deployFrom0xArtifactAsync(
artifacts.MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,
provider,
txDefaults,
owners,
confirmationsRequired,
secondsRequired,
erc721proxy.address,
);
artifactsWriter.saveArtifact(multiSigERC721);
await erc721proxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: owner });
await erc721proxy.transferOwnership.sendTransactionAsync(multiSigERC20.address, { from: owner });
// Dummy ERC20 tokens
for (const token of erc20TokenInfo) {
const totalSupply = new BigNumber(100000000000000000000);
const dummyErc20Token = await DummyERC20TokenContract.deployFrom0xArtifactAsync(
artifacts.DummyERC20Token,
provider,
txDefaults,
token.name,
token.symbol,
token.decimals,
totalSupply,
);
}
// CK -> Token registry
const cryptoKittieToken = await DummyERC721TokenContract.deployFrom0xArtifactAsync(
artifacts.DummyERC721Token,
provider,
txDefaults,
erc721TokenInfo[0].name,
erc721TokenInfo[0].symbol,
);
};

View File

@ -64,7 +64,7 @@
"dependencies": { "dependencies": {
"@0xproject/assert": "^0.2.10", "@0xproject/assert": "^0.2.10",
"@0xproject/json-schemas": "0.7.22", "@0xproject/json-schemas": "0.7.22",
"@0xproject/types": "^0.7.0", "@0xproject/types": "0.7.0",
"@0xproject/typescript-typings": "^0.3.2", "@0xproject/typescript-typings": "^0.3.2",
"@0xproject/utils": "^0.6.2", "@0xproject/utils": "^0.6.2",
"@0xproject/web3-wrapper": "^0.6.4", "@0xproject/web3-wrapper": "^0.6.4",

View File

@ -82,7 +82,7 @@
"@0xproject/fill-scenarios": "^0.0.2", "@0xproject/fill-scenarios": "^0.0.2",
"@0xproject/json-schemas": "0.7.22", "@0xproject/json-schemas": "0.7.22",
"@0xproject/order-utils": "^0.0.5", "@0xproject/order-utils": "^0.0.5",
"@0xproject/types": "^0.7.0", "@0xproject/types": "0.7.0",
"@0xproject/typescript-typings": "^0.3.2", "@0xproject/typescript-typings": "^0.3.2",
"@0xproject/utils": "^0.6.2", "@0xproject/utils": "^0.6.2",
"@0xproject/web3-wrapper": "^0.6.4", "@0xproject/web3-wrapper": "^0.6.4",

View File

@ -1,5 +1,5 @@
import { devConstants } from '@0xproject/dev-utils'; import { devConstants } from '@0xproject/dev-utils';
import { runMigrationsAsync } from '@0xproject/migrations'; import { runV1MigrationsAsync } from '@0xproject/migrations';
import 'make-promises-safe'; import 'make-promises-safe';
import * as path from 'path'; import * as path from 'path';
@ -16,5 +16,5 @@ before('migrate contracts', async function(): Promise<void> {
from: devConstants.TESTRPC_FIRST_ADDRESS, from: devConstants.TESTRPC_FIRST_ADDRESS,
}; };
const artifactsDir = `../migrations/artifacts/1.0.0`; const artifactsDir = `../migrations/artifacts/1.0.0`;
await runMigrationsAsync(provider, artifactsDir, txDefaults); await runV1MigrationsAsync(provider, artifactsDir, txDefaults);
}); });

View File

@ -282,22 +282,26 @@ export interface RawLogEntry {
} }
export interface Order { export interface Order {
maker: string; senderAddress: string;
taker: string; makerAddress: string;
takerAddress: string;
makerFee: BigNumber; makerFee: BigNumber;
takerFee: BigNumber; takerFee: BigNumber;
makerTokenAmount: BigNumber; makerAssetAmount: BigNumber;
takerTokenAmount: BigNumber; takerAssetAmount: BigNumber;
makerTokenAddress: string; makerAssetData: string;
takerTokenAddress: string; takerAssetData: string;
salt: BigNumber; salt: BigNumber;
exchangeContractAddress: string; feeRecipientAddress: string;
feeRecipient: string; expirationTimeSeconds: BigNumber;
expirationUnixTimestampSec: BigNumber;
} }
export interface SignedOrder extends Order { export interface SignedOrder extends UnsignedOrder {
ecSignature: ECSignature; signature: string;
}
export interface UnsignedOrder extends Order {
exchangeAddress: string;
} }
/** /**
@ -349,10 +353,6 @@ export interface Artifact {
}; };
} }
export type OrderAddresses = [string, string, string, string, string];
export type OrderValues = [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];
export type DoneCallback = (err?: Error) => void; export type DoneCallback = (err?: Error) => void;
export interface OrderRelevantState { export interface OrderRelevantState {

View File

@ -15,6 +15,13 @@
jsonschema "^1.2.0" jsonschema "^1.2.0"
lodash.values "^4.3.0" lodash.values "^4.3.0"
"@0xproject/types@0.6.3":
version "0.6.3"
resolved "https://registry.yarnpkg.com/@0xproject/types/-/types-0.6.3.tgz#0bc066967aad4151011b6e478bb707b1afb8504b"
dependencies:
"@types/node" "^8.0.53"
bignumber.js "~4.1.0"
"@0xproject/types@^0.5.0": "@0xproject/types@^0.5.0":
version "0.5.0" version "0.5.0"
resolved "https://registry.yarnpkg.com/@0xproject/types/-/types-0.5.0.tgz#ba3cfbc11a8c6344b57c9680aa7df2ea84b9bf05" resolved "https://registry.yarnpkg.com/@0xproject/types/-/types-0.5.0.tgz#ba3cfbc11a8c6344b57c9680aa7df2ea84b9bf05"