Merge branch 'development' of github.com:0xProject/0x.js into development
* 'development' of github.com:0xProject/0x.js: Improve the comment Add assert.isWeb3Provider Use more concise dep pointing Don't create whole web3 object in beta tests Improve the comment Add tests for web3@1.0 Use zeroEx.getAvailableAddressesAsync instead of web3.eth.getAccounts Add web3@1.0 to web3Factory Support web3@1.0 providers Define web3@1.0 types ;) Install web3@1.0.0 as web3_beta
This commit is contained in:
@@ -85,6 +85,7 @@
|
||||
"types-bn": "^0.0.1",
|
||||
"types-ethereumjs-util": "^0.0.5",
|
||||
"typescript": "^2.4.1",
|
||||
"web3_beta": "ethereum/web3.js#1.0",
|
||||
"web3-provider-engine": "^13.0.1",
|
||||
"web3-typescript-typings": "^0.3.2",
|
||||
"webpack": "^3.1.0"
|
||||
|
@@ -163,6 +163,13 @@ export class ZeroEx {
|
||||
* @return An instance of the 0x.js ZeroEx class.
|
||||
*/
|
||||
constructor(provider: Web3Provider, config?: ZeroExConfig) {
|
||||
assert.isWeb3Provider('provider', provider);
|
||||
if (_.isUndefined((provider as any).sendAsync)) {
|
||||
// Web3@1.0 provider doesn't support synchronous http requests,
|
||||
// so it only has an async `send` method, instead of a `send` and `sendAsync` in web3@0.x.x`
|
||||
// We re-assign the send method so that Web3@1.0 providers work with 0x.js
|
||||
(provider as any).sendAsync = (provider as any).send;
|
||||
}
|
||||
this._web3Wrapper = new Web3Wrapper(provider);
|
||||
const gasPrice = _.isUndefined(config) ? undefined : config.gasPrice;
|
||||
this.token = new TokenWrapper(this._web3Wrapper, gasPrice);
|
||||
|
1
src/globals.d.ts
vendored
1
src/globals.d.ts
vendored
@@ -1,5 +1,6 @@
|
||||
/// <reference types='chai-typescript-typings' />
|
||||
/// <reference types='chai-as-promised-typescript-typings' />
|
||||
declare module 'web3_beta';
|
||||
declare module 'chai-bignumber';
|
||||
declare module 'dirty-chai';
|
||||
declare module 'request-promise-native';
|
||||
|
@@ -61,6 +61,10 @@ export const assert = {
|
||||
isBoolean(variableName: string, value: boolean): void {
|
||||
this.assert(_.isBoolean(value), this.typeAssertionMessage(variableName, 'boolean', value));
|
||||
},
|
||||
isWeb3Provider(variableName: string, value: Web3.Provider): void {
|
||||
const isWeb3Provider = _.isFunction((value as any).send) || _.isFunction((value as any).sendAsync);
|
||||
this.assert(isWeb3Provider, this.typeAssertionMessage(variableName, 'Web3.Provider', value));
|
||||
},
|
||||
doesConformToSchema(variableName: string, value: any, schema: Schema): void {
|
||||
const schemaValidator = new SchemaValidator();
|
||||
const validationResult = schemaValidator.validate(value, schema);
|
||||
|
@@ -33,7 +33,7 @@ describe('EtherTokenWrapper', () => {
|
||||
before(async () => {
|
||||
web3 = web3Factory.create();
|
||||
zeroEx = new ZeroEx(web3.currentProvider, zeroExConfig);
|
||||
userAddresses = await promisify(web3.eth.getAccounts)();
|
||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||
addressWithETH = userAddresses[0];
|
||||
wethContractAddress = await zeroEx.etherToken.getContractAddressAsync();
|
||||
depositWeiAmount = (zeroEx as any)._web3Wrapper.toWei(new BigNumber(5));
|
||||
|
@@ -44,7 +44,7 @@ describe('ExchangeWrapper', () => {
|
||||
web3 = web3Factory.create();
|
||||
zeroEx = new ZeroEx(web3.currentProvider);
|
||||
exchangeContractAddress = await zeroEx.exchange.getContractAddressAsync();
|
||||
userAddresses = await promisify(web3.eth.getAccounts)();
|
||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||
tokenUtils = new TokenUtils(tokens);
|
||||
zrxTokenAddress = tokenUtils.getProtocolTokenOrThrow().address;
|
||||
|
@@ -37,7 +37,7 @@ describe('OrderValidation', () => {
|
||||
web3 = web3Factory.create();
|
||||
zeroEx = new ZeroEx(web3.currentProvider);
|
||||
exchangeContractAddress = await zeroEx.exchange.getContractAddressAsync();
|
||||
userAddresses = await promisify(web3.eth.getAccounts)();
|
||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||
[coinbase, makerAddress, takerAddress, feeRecipient] = userAddresses;
|
||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||
tokenUtils = new TokenUtils(tokens);
|
||||
|
@@ -34,7 +34,7 @@ describe('TokenWrapper', () => {
|
||||
before(async () => {
|
||||
web3 = web3Factory.create();
|
||||
zeroEx = new ZeroEx(web3.currentProvider);
|
||||
userAddresses = await promisify(web3.eth.getAccounts)();
|
||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||
tokenUtils = new TokenUtils(tokens);
|
||||
coinbase = userAddresses[0];
|
||||
|
@@ -6,6 +6,7 @@
|
||||
import ProviderEngine = require('web3-provider-engine');
|
||||
import RpcSubprovider = require('web3-provider-engine/subproviders/rpc');
|
||||
import * as Web3 from 'web3';
|
||||
import * as Web3_beta from 'web3_beta';
|
||||
import {constants} from './constants';
|
||||
import {EmptyWalletSubProvider} from '../../src/subproviders/empty_wallet_subprovider';
|
||||
|
||||
@@ -28,4 +29,9 @@ export const web3Factory = {
|
||||
provider.start();
|
||||
return provider;
|
||||
},
|
||||
getProviderBeta(): Web3.Provider {
|
||||
const rpcUrl = `http://${constants.RPC_HOST}:${constants.RPC_PORT}`;
|
||||
const providerBeta = new Web3_beta.providers.HttpProvider(rpcUrl);
|
||||
return providerBeta;
|
||||
},
|
||||
};
|
||||
|
16
test/web3_beta_test.ts
Normal file
16
test/web3_beta_test.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import * as chai from 'chai';
|
||||
import {chaiSetup} from './utils/chai_setup';
|
||||
import 'mocha';
|
||||
import {ZeroEx, Order, SubscriptionOpts, TokenEvents, ContractEvent} from '../src';
|
||||
import {web3Factory} from './utils/web3_factory';
|
||||
|
||||
chaiSetup.configure();
|
||||
const expect = chai.expect;
|
||||
|
||||
describe('ZeroEx with beta web3', () => {
|
||||
const web3_beta_provider = web3Factory.getProviderBeta();
|
||||
const zeroEx = new ZeroEx(web3_beta_provider);
|
||||
it('is able to make a call using a beta provider', async () => {
|
||||
await zeroEx.tokenRegistry.getTokenAddressesAsync();
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user