aboutsummaryrefslogtreecommitdiffstats
path: root/packages/contracts/deploy
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/deploy
parent598f1dd2d8a89b0e3ab04b2917138997031bafc6 (diff)
downloaddexon-sol-tools-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.tar
dexon-sol-tools-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.tar.gz
dexon-sol-tools-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.tar.bz2
dexon-sol-tools-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.tar.lz
dexon-sol-tools-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.tar.xz
dexon-sol-tools-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.tar.zst
dexon-sol-tools-f1b267cc9fe7f6e5566dc2535b064b92aef92df1.zip
Refactor web3Wrapper to a separate package
Diffstat (limited to 'packages/contracts/deploy')
-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
11 files changed, 32 insertions, 159 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',