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:
Fabio Berger
2017-08-30 19:47:14 +02:00
11 changed files with 761 additions and 28 deletions

View File

@@ -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"

View File

@@ -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
View File

@@ -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';

View File

@@ -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);

View File

@@ -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));

View File

@@ -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;

View File

@@ -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);

View File

@@ -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];

View File

@@ -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
View 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();
});
});

746
yarn.lock

File diff suppressed because it is too large Load Diff