aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2017-12-07 01:55:09 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2017-12-07 01:55:09 +0800
commitf1b267cc9fe7f6e5566dc2535b064b92aef92df1 (patch)
treec07a9dd32c5b959d33587ce2d38098dfe397badb /packages/contracts
parent598f1dd2d8a89b0e3ab04b2917138997031bafc6 (diff)
downloaddexon-0x-contracts-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.tar.gz
dexon-0x-contracts-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.tar.zst
dexon-0x-contracts-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.zip
Refactor web3Wrapper to a separate package
Diffstat (limited to 'packages/contracts')
-rw-r--r--packages/contracts/deploy/cli.ts8
-rw-r--r--packages/contracts/deploy/migrations/migrate.ts2
-rw-r--r--packages/contracts/deploy/src/compiler.ts2
-rw-r--r--packages/contracts/deploy/src/deployer.ts11
-rw-r--r--packages/contracts/deploy/src/utils/contract.ts2
-rw-r--r--packages/contracts/deploy/src/utils/fs_wrapper.ts12
-rw-r--r--packages/contracts/deploy/src/utils/network.ts13
-rw-r--r--packages/contracts/deploy/src/utils/types.ts3
-rw-r--r--packages/contracts/deploy/src/utils/web3_wrapper.ts132
-rw-r--r--packages/contracts/deploy/test/deploy_test.ts2
-rw-r--r--packages/contracts/deploy/test/util/constants.ts4
-rw-r--r--packages/contracts/globals.d.ts6
-rw-r--r--packages/contracts/package.json6
-rw-r--r--packages/contracts/test/ts/ether_token.ts6
-rw-r--r--packages/contracts/test/ts/multi_sig_with_time_lock.ts6
-rw-r--r--packages/contracts/util/order.ts4
16 files changed, 44 insertions, 175 deletions
diff --git a/packages/contracts/deploy/cli.ts b/packages/contracts/deploy/cli.ts
index 73a43b247..df3ae33b4 100644
--- a/packages/contracts/deploy/cli.ts
+++ b/packages/contracts/deploy/cli.ts
@@ -1,3 +1,5 @@
+import {TxData} from '@0xproject/types';
+import {BigNumber} from 'bignumber.js';
import * as _ from 'lodash';
import * as path from 'path';
import * as yargs from 'yargs';
@@ -46,10 +48,10 @@ async function onMigrateCommand(argv: CliOptions): Promise<void> {
await commands.compileAsync(compilerOpts);
const defaults = {
- gasPrice: argv.gasPrice,
+ gasPrice: new BigNumber(argv.gasPrice),
from: argv.account,
};
- const deployerOpts: DeployerOptions = {
+ const deployerOpts = {
artifactsDir: argv.artifactsDir,
jsonrpcPort: argv.jsonrpcPort,
networkId: networkIdIfExists,
@@ -72,7 +74,7 @@ async function onDeployCommand(argv: CliOptions): Promise<void> {
await commands.compileAsync(compilerOpts);
const defaults = {
- gasPrice: argv.gasPrice,
+ gasPrice: new BigNumber(argv.gasPrice),
from: argv.account,
};
const deployerOpts: DeployerOptions = {
diff --git a/packages/contracts/deploy/migrations/migrate.ts b/packages/contracts/deploy/migrations/migrate.ts
index ea91febe4..c3d38875e 100644
--- a/packages/contracts/deploy/migrations/migrate.ts
+++ b/packages/contracts/deploy/migrations/migrate.ts
@@ -1,3 +1,4 @@
+import {Web3Wrapper} from '@0xproject/web3-wrapper';
import {BigNumber} from 'bignumber.js';
import * as _ from 'lodash';
import * as Web3 from 'web3';
@@ -5,7 +6,6 @@ import * as Web3 from 'web3';
import {Deployer} from './../src/deployer';
import {constants} from './../src/utils/constants';
import {Token} from './../src/utils/types';
-import {Web3Wrapper} from './../src/utils/web3_wrapper';
import {tokenInfo} from './config/token_info';
export const migrator = {
diff --git a/packages/contracts/deploy/src/compiler.ts b/packages/contracts/deploy/src/compiler.ts
index 70b88b514..8a44e94a3 100644
--- a/packages/contracts/deploy/src/compiler.ts
+++ b/packages/contracts/deploy/src/compiler.ts
@@ -1,4 +1,4 @@
-import promisify = require('es6-promisify');
+import {promisify} from '@0xproject/utils';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
import * as path from 'path';
diff --git a/packages/contracts/deploy/src/deployer.ts b/packages/contracts/deploy/src/deployer.ts
index 48d175a42..2d4f31949 100644
--- a/packages/contracts/deploy/src/deployer.ts
+++ b/packages/contracts/deploy/src/deployer.ts
@@ -1,4 +1,6 @@
-import promisify = require('es6-promisify');
+import {TxData} from '@0xproject/types';
+import {promisify} from '@0xproject/utils';
+import {Web3Wrapper} from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import * as Web3 from 'web3';
@@ -11,7 +13,6 @@ import {
DeployerOptions,
} from './utils/types';
import {utils} from './utils/utils';
-import {Web3Wrapper} from './utils/web3_wrapper';
// Gas added to gas estimate to make sure there is sufficient gas for deployment.
const EXTRA_GAS = 200000;
@@ -21,7 +22,7 @@ export class Deployer {
private artifactsDir: string;
private jsonrpcPort: number;
private networkId: number;
- private defaults: Partial<Web3.TxData>;
+ private defaults: Partial<TxData>;
constructor(opts: DeployerOptions) {
this.artifactsDir = opts.artifactsDir;
@@ -30,7 +31,7 @@ export class Deployer {
const jsonrpcUrl = `http://localhost:${this.jsonrpcPort}`;
const web3Provider = new Web3.providers.HttpProvider(jsonrpcUrl);
this.defaults = opts.defaults;
- this.web3Wrapper = new Web3Wrapper(web3Provider, this.defaults);
+ this.web3Wrapper = new Web3Wrapper(web3Provider, this.networkId, this.defaults);
}
/**
* Loads contract artifact and deploys contract with given arguments.
@@ -171,7 +172,7 @@ export class Deployer {
const block = await this.web3Wrapper.getBlockAsync('latest');
let gas: number;
try {
- const gasEstimate: number = await this.web3Wrapper.estimateGasAsync({data});
+ const gasEstimate: number = await this.web3Wrapper.estimateGasAsync(data);
gas = Math.min(gasEstimate + EXTRA_GAS, block.gasLimit);
} catch (err) {
gas = block.gasLimit;
diff --git a/packages/contracts/deploy/src/utils/contract.ts b/packages/contracts/deploy/src/utils/contract.ts
index e9c49c9f1..7b6098cea 100644
--- a/packages/contracts/deploy/src/utils/contract.ts
+++ b/packages/contracts/deploy/src/utils/contract.ts
@@ -1,5 +1,5 @@
import {schemas, SchemaValidator} from '@0xproject/json-schemas';
-import promisify = require('es6-promisify');
+import {promisify} from '@0xproject/utils';
import * as _ from 'lodash';
import * as Web3 from 'web3';
diff --git a/packages/contracts/deploy/src/utils/fs_wrapper.ts b/packages/contracts/deploy/src/utils/fs_wrapper.ts
index 6b4fd625c..90785d0dd 100644
--- a/packages/contracts/deploy/src/utils/fs_wrapper.ts
+++ b/packages/contracts/deploy/src/utils/fs_wrapper.ts
@@ -1,11 +1,11 @@
-import promisify = require('es6-promisify');
+import {promisify} from '@0xproject/utils';
import * as fs from 'fs';
export const fsWrapper = {
- readdirAsync: promisify(fs.readdir),
- readFileAsync: promisify(fs.readFile),
- writeFileAsync: promisify(fs.writeFile),
- mkdirAsync: promisify(fs.mkdir),
+ readdirAsync: promisify<string[]>(fs.readdir),
+ readFileAsync: promisify<string>(fs.readFile),
+ writeFileAsync: promisify<undefined>(fs.writeFile),
+ mkdirAsync: promisify<undefined>(fs.mkdir),
doesPathExistSync: fs.existsSync,
- removeFileAsync: promisify(fs.unlink),
+ removeFileAsync: promisify<undefined>(fs.unlink),
};
diff --git a/packages/contracts/deploy/src/utils/network.ts b/packages/contracts/deploy/src/utils/network.ts
index 74123e6a5..fcb78287c 100644
--- a/packages/contracts/deploy/src/utils/network.ts
+++ b/packages/contracts/deploy/src/utils/network.ts
@@ -1,15 +1,14 @@
-import promisify = require('es6-promisify');
+import {promisify} from '@0xproject/utils';
+import {Web3Wrapper} from '@0xproject/web3-wrapper';
+import * as _ from 'lodash';
import * as Web3 from 'web3';
-import {Web3Wrapper} from './web3_wrapper';
-
export const network = {
async getNetworkIdIfExistsAsync(port: number): Promise<number> {
const url = `http://localhost:${port}`;
const web3Provider = new Web3.providers.HttpProvider(url);
- const defaults = {};
- const web3Wrapper = new Web3Wrapper(web3Provider, defaults);
- const networkIdIfExists = await web3Wrapper.getNetworkIdIfExistsAsync();
- return networkIdIfExists;
+ const web3 = new Web3(web3Provider);
+ const networkId = _.parseInt(await promisify<string>(web3.version.getNetwork)());
+ return networkId;
},
};
diff --git a/packages/contracts/deploy/src/utils/types.ts b/packages/contracts/deploy/src/utils/types.ts
index 855f1e849..f6b9de6e9 100644
--- a/packages/contracts/deploy/src/utils/types.ts
+++ b/packages/contracts/deploy/src/utils/types.ts
@@ -1,3 +1,4 @@
+import {TxData} from '@0xproject/types';
import * as Web3 from 'web3';
export enum AbiType {
@@ -54,7 +55,7 @@ export interface DeployerOptions {
artifactsDir: string;
jsonrpcPort: number;
networkId: number;
- defaults: Partial<Web3.TxData>;
+ defaults: Partial<TxData>;
}
export interface ContractSources {
diff --git a/packages/contracts/deploy/src/utils/web3_wrapper.ts b/packages/contracts/deploy/src/utils/web3_wrapper.ts
deleted file mode 100644
index 0209da26d..000000000
--- a/packages/contracts/deploy/src/utils/web3_wrapper.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-import BigNumber from 'bignumber.js';
-import promisify = require('es6-promisify');
-import * as _ from 'lodash';
-import * as Web3 from 'web3';
-
-import {Contract} from './contract';
-import {ZeroExError} from './types';
-
-export class Web3Wrapper {
- private web3: Web3;
- private defaults: Partial<Web3.TxData>;
- private networkIdIfExists?: number;
- private jsonRpcRequestId: number;
- constructor(provider: Web3.Provider, defaults: Partial<Web3.TxData>) {
- this.web3 = new Web3();
- this.web3.setProvider(provider);
- this.defaults = defaults;
- this.jsonRpcRequestId = 0;
- }
- public setProvider(provider: Web3.Provider) {
- delete this.networkIdIfExists;
- this.web3.setProvider(provider);
- }
- public isAddress(address: string): boolean {
- return this.web3.isAddress(address);
- }
- public getContractFromAbi(abi: Web3.ContractAbi): Web3.Contract<Web3.ContractInstance> {
- const contract = this.web3.eth.contract(abi);
- return contract;
- }
- public async isSenderAddressAvailableAsync(senderAddress: string): Promise<boolean> {
- const addresses = await this.getAvailableAddressesAsync();
- return _.includes(addresses, senderAddress);
- }
- public async getNodeVersionAsync(): Promise<string> {
- const nodeVersion = await promisify(this.web3.version.getNode)();
- return nodeVersion;
- }
- public async getTransactionReceiptAsync(txHash: string): Promise<Web3.TransactionReceipt> {
- const transactionReceipt = await promisify(this.web3.eth.getTransactionReceipt)(txHash);
- return transactionReceipt;
- }
- public getCurrentProvider(): Web3.Provider {
- return this.web3.currentProvider;
- }
- public async getNetworkIdIfExistsAsync(): Promise<number|undefined> {
- if (!_.isUndefined(this.networkIdIfExists)) {
- return this.networkIdIfExists;
- }
-
- try {
- const networkId = await this.getNetworkAsync();
- this.networkIdIfExists = Number(networkId);
- return this.networkIdIfExists;
- } catch (err) {
- return undefined;
- }
- }
- public toWei(ethAmount: BigNumber): BigNumber {
- const balanceWei = this.web3.toWei(ethAmount, 'ether');
- return balanceWei;
- }
- public async getBalanceInWeiAsync(owner: string): Promise<BigNumber> {
- let balanceInWei = await promisify(this.web3.eth.getBalance)(owner);
- balanceInWei = new BigNumber(balanceInWei);
- return balanceInWei;
- }
- public async doesContractExistAtAddressAsync(address: string): Promise<boolean> {
- const code = await promisify(this.web3.eth.getCode)(address);
- // Regex matches 0x0, 0x00, 0x in order to accommodate poorly implemented clients
- const codeIsEmpty = /^0x0{0,40}$/i.test(code);
- return !codeIsEmpty;
- }
- public async signTransactionAsync(address: string, message: string): Promise<string> {
- const signData = await promisify(this.web3.eth.sign)(address, message);
- return signData;
- }
- public async getBlockAsync(blockParam: string|Web3.BlockParam): Promise<Web3.BlockWithoutTransactionData> {
- const block = await promisify(this.web3.eth.getBlock)(blockParam);
- return block;
- }
- public async getBlockTimestampAsync(blockParam: string|Web3.BlockParam): Promise<number> {
- const {timestamp} = await this.getBlockAsync(blockParam);
- return timestamp;
- }
- public async getAvailableAddressesAsync(): Promise<string[]> {
- const addresses: string[] = await promisify(this.web3.eth.getAccounts)();
- return addresses;
- }
- public async getLogsAsync(filter: Web3.FilterObject): Promise<Web3.LogEntry[]> {
- let fromBlock = filter.fromBlock;
- if (_.isNumber(fromBlock)) {
- fromBlock = this.web3.toHex(fromBlock);
- }
- let toBlock = filter.toBlock;
- if (_.isNumber(toBlock)) {
- toBlock = this.web3.toHex(toBlock);
- }
- const serializedFilter = {
- ...filter,
- fromBlock,
- toBlock,
- };
- const payload = {
- jsonrpc: '2.0',
- id: this.jsonRpcRequestId++,
- method: 'eth_getLogs',
- params: [serializedFilter],
- };
- const logs = await this.sendRawPayloadAsync(payload);
- return logs;
- }
- public async estimateGasAsync(callData: Web3.CallData): Promise<number> {
- const gasEstimate = await promisify(this.web3.eth.estimateGas)(callData);
- return gasEstimate;
- }
- private getContractInstance<A extends Web3.ContractInstance>(abi: Web3.ContractAbi, address: string): A {
- const web3ContractInstance = this.web3.eth.contract(abi).at(address);
- const contractInstance = new Contract(web3ContractInstance, this.defaults) as any as A;
- return contractInstance;
- }
- private async getNetworkAsync(): Promise<number> {
- const networkId = await promisify(this.web3.version.getNetwork)();
- return networkId;
- }
- private async sendRawPayloadAsync(payload: Web3.JSONRPCRequestPayload): Promise<any> {
- const sendAsync = this.web3.currentProvider.sendAsync.bind(this.web3.currentProvider);
- const response = await promisify(sendAsync)(payload);
- const result = response.result;
- return result;
- }
-}
diff --git a/packages/contracts/deploy/test/deploy_test.ts b/packages/contracts/deploy/test/deploy_test.ts
index 28cbd4586..7e7b98f90 100644
--- a/packages/contracts/deploy/test/deploy_test.ts
+++ b/packages/contracts/deploy/test/deploy_test.ts
@@ -19,7 +19,7 @@ const compilerOpts: CompilerOptions = {
optimizerEnabled: constants.optimizerEnabled,
};
const compiler = new Compiler(compilerOpts);
-const deployerOpts: DeployerOptions = {
+const deployerOpts = {
artifactsDir,
networkId: constants.networkId,
jsonrpcPort: constants.jsonrpcPort,
diff --git a/packages/contracts/deploy/test/util/constants.ts b/packages/contracts/deploy/test/util/constants.ts
index 226c5a205..a2de44b63 100644
--- a/packages/contracts/deploy/test/util/constants.ts
+++ b/packages/contracts/deploy/test/util/constants.ts
@@ -1,8 +1,10 @@
+import {BigNumber} from 'bignumber.js';
+
export const constants = {
networkId: 0,
jsonrpcPort: 8545,
optimizerEnabled: 0,
- gasPrice: '20000000000',
+ gasPrice: new BigNumber(20000000000),
timeoutMs: 12000,
zrxTokenAddress: '0xe41d2489571d322189246dafa5ebde1f4699f498',
tokenTransferProxyAddress: '0x8da0d80f5007ef1e431dd2127178d224e32c2ef4',
diff --git a/packages/contracts/globals.d.ts b/packages/contracts/globals.d.ts
index 8bc5b5c3f..df53e9372 100644
--- a/packages/contracts/globals.d.ts
+++ b/packages/contracts/globals.d.ts
@@ -27,11 +27,6 @@ declare module 'solc' {
export function setupMethods(solcBin: any): any;
}
-declare module 'es6-promisify' {
- function promisify(original: any, settings?: any): ((...arg: any[]) => Promise<any>);
- export = promisify;
-}
-
declare module 'web3-eth-abi' {
export function encodeParameters(typesArray: string[], parameters: any[]): string;
}
@@ -39,4 +34,3 @@ declare module 'web3-eth-abi' {
// Truffle injects the following into the global scope
declare var artifacts: any;
declare var contract: any;
-
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
index efa2d94c6..92a9da53e 100644
--- a/packages/contracts/package.json
+++ b/packages/contracts/package.json
@@ -13,7 +13,7 @@
"clean": "rm -rf ./lib",
"migrate:truffle": "npm run build; truffle migrate",
"migrate": "npm run build; node lib/deploy/cli.js migrate",
- "lint": "tslint --project . 'migrations/*.ts' 'test/**/*.ts' 'util/*.ts' 'deploy/**/*.ts'",
+ "lint": "tslint --project . 'migrations/**/*.ts' 'test/**/*.ts' 'util/**/*.ts' 'deploy/**/*.ts'",
"test:deployer": "npm run build; mocha lib/deploy/test/*_test.js"
},
"repository": {
@@ -28,6 +28,7 @@
"homepage": "https://github.com/0xProject/0x.js/packages/contracts/README.md",
"devDependencies": {
"@0xproject/tslint-config": "^0.2.0",
+ "@0xproject/types": "^0.0.1",
"@types/bluebird": "^3.5.3",
"@types/isomorphic-fetch": "^0.0.34",
"@types/lodash": "^4.14.86",
@@ -53,11 +54,12 @@
},
"dependencies": {
"0x.js": "^0.22.6",
+ "@0xproject/web3-wrapper": "^0.0.1",
"@0xproject/json-schemas": "^0.6.9",
+ "@0xproject/utils": "^0.0.1",
"bignumber.js": "~4.1.0",
"bluebird": "^3.5.0",
"bn.js": "^4.11.8",
- "es6-promisify": "^5.0.0",
"ethereumjs-abi": "^0.6.4",
"ethereumjs-util": "^5.1.1",
"isomorphic-fetch": "^2.2.1",
diff --git a/packages/contracts/test/ts/ether_token.ts b/packages/contracts/test/ts/ether_token.ts
index 857371578..dbb4d2ee6 100644
--- a/packages/contracts/test/ts/ether_token.ts
+++ b/packages/contracts/test/ts/ether_token.ts
@@ -1,7 +1,7 @@
import {ZeroEx, ZeroExError} from '0x.js';
+import {promisify} from '@0xproject/utils';
import {BigNumber} from 'bignumber.js';
import * as chai from 'chai';
-import promisify = require('es6-promisify');
import Web3 = require('web3');
import {Artifacts} from '../../util/artifacts';
@@ -30,9 +30,9 @@ contract('EtherToken', (accounts: string[]) => {
});
});
- const sendTransactionAsync = promisify(web3.eth.sendTransaction);
+ const sendTransactionAsync = promisify<string>(web3.eth.sendTransaction);
const getEthBalanceAsync = async (owner: string) => {
- const balanceStr = await promisify(web3.eth.getBalance)(owner);
+ const balanceStr = await promisify<string>(web3.eth.getBalance)(owner);
const balance = new BigNumber(balanceStr);
return balance;
};
diff --git a/packages/contracts/test/ts/multi_sig_with_time_lock.ts b/packages/contracts/test/ts/multi_sig_with_time_lock.ts
index 6ab3014ab..6dd4dc3b2 100644
--- a/packages/contracts/test/ts/multi_sig_with_time_lock.ts
+++ b/packages/contracts/test/ts/multi_sig_with_time_lock.ts
@@ -1,6 +1,6 @@
+import {promisify} from '@0xproject/utils';
import {BigNumber} from 'bignumber.js';
import * as chai from 'chai';
-import promisify = require('es6-promisify');
import Web3 = require('web3');
import * as multiSigWalletJSON from '../../build/contracts/MultiSigWalletWithTimeLock.json';
@@ -64,8 +64,8 @@ contract('MultiSigWalletWithTimeLock', (accounts: string[]) => {
it('should set confirmation time with enough confirmations', async () => {
const res = await multiSig.confirmTransaction(txId, {from: owners[1]});
expect(res.logs).to.have.length(2);
- const blockNum = await promisify(web3.eth.getBlockNumber)();
- const blockInfo = await promisify(web3.eth.getBlock)(blockNum);
+ const blockNum = await promisify<number>(web3.eth.getBlockNumber)();
+ const blockInfo = await promisify<Web3.BlockWithoutTransactionData>(web3.eth.getBlock)(blockNum);
const timestamp = new BigNumber(blockInfo.timestamp);
const confirmationTimeBigNum = new BigNumber(await multiSig.confirmationTimes.call(txId));
diff --git a/packages/contracts/util/order.ts b/packages/contracts/util/order.ts
index 8e3822188..ec5362b66 100644
--- a/packages/contracts/util/order.ts
+++ b/packages/contracts/util/order.ts
@@ -1,5 +1,5 @@
+import {promisify} from '@0xproject/utils';
import {BigNumber} from 'bignumber.js';
-import promisify = require('es6-promisify');
import ethUtil = require('ethereumjs-util');
import * as _ from 'lodash';
import Web3 = require('web3');
@@ -33,7 +33,7 @@ export class Order {
}
public async signAsync() {
const orderHash = this.getOrderHash();
- const signature = await promisify(web3.eth.sign)(this.params.maker, orderHash);
+ const signature = await promisify<string>(web3.eth.sign)(this.params.maker, orderHash);
const {v, r, s} = ethUtil.fromRpcSig(signature);
this.params = _.assign(this.params, {
orderHashHex: orderHash,