diff options
author | Fabio Berger <me@fabioberger.com> | 2018-01-30 21:00:35 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-01-30 21:00:35 +0800 |
commit | 69151c06e42fd588506db3aa62b95df5b4399607 (patch) | |
tree | 878532483594627a5283f784ced0a2c0cfc68d59 | |
parent | 86cc011212088801a778d947ae925cc0b1ddadf8 (diff) | |
parent | 2e3c02887efc24de35ce82b3662d9c47a0056a8c (diff) | |
download | dexon-sol-tools-69151c06e42fd588506db3aa62b95df5b4399607.tar.gz dexon-sol-tools-69151c06e42fd588506db3aa62b95df5b4399607.tar.zst dexon-sol-tools-69151c06e42fd588506db3aa62b95df5b4399607.zip |
Merge branch 'development' into feature/portal-ledger-support
* development:
Publish
Add PR number
Add config file specifically in prettier command and fix files
Fix prettier
Fix prettier
Add shouldAddPersonalMessagePrefix param to signOrderHashAsync instead of trying to infer whether to add it or not from the nodeVersion
Publish
Move @0xproject/types to dependencies
Updated web3-typescript-typings changelog
Fixed getTransactionReceipt not returning null
Run prettier
Update changelog
Add Rinkeby addresses to artifacts
Fix bad merge on package.json
Respond to GH comments and add /info endpoint
Change package name to @0xproject/testnet-faucets
Implement testnet faucets for any testnet available via infura
Rename to testnet-faucets
Add to the Pull Request Template
Create an ISSUE TEMPLATE
52 files changed, 434 insertions, 219 deletions
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..f814c4777 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,62 @@ +<!--- Thank you for taking the time to file an Issue --> + +<!--- Before submitting please check to see if this issue was already reported --> + +<!--- Provide a general summary of the issue in the Title above --> + +## Expected Behavior + +<!--- If you're describing a bug, tell us what should happen --> + +<!--- If you're suggesting a package change/improvement, tell us how it should work --> + +<!--- If you're suggesting a contract or protocol change/improvement, visit our ZEIPs repo --> + +## Current Behavior + +<!--- If describing a bug, tell us what happens instead of the expected behavior --> + +<!--- If suggesting a change/improvement, explain the difference from current behavior --> + +## Possible Solution + +<!--- Not obligatory, but suggest a fix/reason for the bug, --> + +<!--- or ideas how to implement the addition or change --> + +## Steps to Reproduce (for bugs) + +<!--- Provide a link to a live example, or an unambiguous set of steps to --> + +<!--- reproduce this bug. Include code to reproduce, if relevant --> + +``` +1. +2. +3. +``` + +## Context + +<!--- How has this issue affected you? What are you trying to accomplish? --> + +<!--- Providing context helps us come up with a solution that is most useful in the real world --> + +## Your Environment + +<!--- Include as many relevant details about the environment you experienced the bug in --> + +| Package | Version | +| ------------------: | :------ | +| `0x.js` | 0.25.0 | +| `Exchange Contract` | v1 | + +| Network | +| ------- | +| NAME | + +<!-- For example: +| mainnet | +| kovan | +| testrpc | +--> diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index db78022e2..3b0041316 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -1,3 +1,36 @@ -This PR: +<!--- Thank you for taking the time to submit a Pull Request --> -\* +<!--- Provide a general summary of the issue in the Title above --> + +## Description + +<!--- Describe your changes in detail --> + +## Motivation and Context + +<!--- Why is this change required? What problem does it solve? --> + +<!--- If it fixes an open issue, please link to the issue here. --> + +## How Has This Been Tested? + +<!--- Please describe in detail how you tested your changes. --> + +<!--- Include details of your testing environment, and the tests you ran to --> + +<!--- see how your change affects other areas of the code, etc. --> + +## Types of changes + +<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to change) + +## Checklist: +<!--- Go over all the following points, and put an `x` in all the boxes that apply. --> + +<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> + +* [ ] Change requires a change to the documentation. +* [ ] Added tests to cover my changes. @@ -40,8 +40,8 @@ This repository contains all the 0x developer tools written in TypeScript. Our h | Package | Description | | ----------------------------------------------------------- | ---------------------------------------------------------------- | | [`@0xproject/contracts`](/packages/contracts) | 0x solidity smart contracts & tests | -| [`@0xproject/kovan_faucets`](/packages/kovan-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether | | [`@0xproject/monorepo-scripts`](/packages/monorepo-scripts) | Shared monorepo scripts | +| [`@0xproject/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether | | [`@0xproject/website`](/packages/website) | 0x website & Portal DApp | ## Usage diff --git a/package.json b/package.json index dcb48c10d..435920d2c 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "workspaces": ["packages/*"], "scripts": { "testrpc": "testrpc -p 8545 --networkId 50 -m \"${npm_package_config_mnemonic}\"", - "prettier": "prettier --write '**/*.{ts,tsx,json,md}'", - "prettier:ci": "prettier --list-different '**/*.{ts,tsx,json,md}'", + "prettier": "prettier --write '**/*.{ts,tsx,json,md}' --config .prettierrc", + "prettier:ci": "prettier --list-different '**/*.{ts,tsx,json,md}' --config .prettierrc", "lerna:run": "lerna run", "lerna:rebuild": "lerna run clean; lerna run build;", "lerna:publish": diff --git a/packages/0x.js/CHANGELOG.md b/packages/0x.js/CHANGELOG.md index 7fc1d9bba..83c33ee1c 100644 --- a/packages/0x.js/CHANGELOG.md +++ b/packages/0x.js/CHANGELOG.md @@ -1,6 +1,18 @@ # CHANGELOG -## v0.30.1 - _January 18, 2018_ +## v0.31.0 - _January 30, 2018_ + + * Add the `shouldAddPersonalMessagePrefix` parameter to `signOrderHashAsync` so that the + caller can decide on whether to add the personalMessage prefix before relaying the request + to the signer. Parity Signer, Ledger and TestRPC add the prefix themselves, Metamask expects + it to have already been added. (#349) + +## v0.30.2 - _January 29, 2018_ + + * Add Rinkeby testnet addresses to artifacts (#337) + * Move @0xproject/types to dependencies from devDependencies fixing missing type errors + +## v0.30.1 - _January 24, 2018_ * Fix a bug allowing negative fill values (#212) * Fix a bug that made it impossible to pass a custom ZRX address (#341) diff --git a/packages/0x.js/package.json b/packages/0x.js/package.json index fb27f48de..2942e5001 100644 --- a/packages/0x.js/package.json +++ b/packages/0x.js/package.json @@ -1,6 +1,6 @@ { "name": "0x.js", - "version": "0.30.1", + "version": "0.31.0", "description": "A javascript library for interacting with the 0x protocol", "keywords": [ "0x.js", @@ -41,10 +41,9 @@ "node": ">=6.0.0" }, "devDependencies": { - "@0xproject/abi-gen": "^0.1.3", - "@0xproject/dev-utils": "^0.0.6", - "@0xproject/tslint-config": "^0.4.3", - "@0xproject/types": "^0.1.5", + "@0xproject/abi-gen": "^0.1.5", + "@0xproject/dev-utils": "^0.0.8", + "@0xproject/tslint-config": "^0.4.5", "@types/bintrees": "^1.0.2", "@types/jsonschema": "^1.1.1", "@types/lodash": "^4.14.86", @@ -55,7 +54,7 @@ "awesome-typescript-loader": "^3.1.3", "chai": "^4.0.1", "chai-as-promised": "^7.1.0", - "chai-as-promised-typescript-typings": "^0.0.5", + "chai-as-promised-typescript-typings": "^0.0.7", "chai-bignumber": "^2.0.1", "chai-typescript-typings": "^0.0.2", "copyfiles": "^1.2.0", @@ -76,14 +75,15 @@ "typedoc": "~0.8.0", "typescript": "~2.6.1", "web3-provider-engine": "^13.0.1", - "web3-typescript-typings": "^0.9.5", + "web3-typescript-typings": "^0.9.7", "webpack": "^3.1.0" }, "dependencies": { - "@0xproject/assert": "^0.0.12", - "@0xproject/json-schemas": "^0.7.4", - "@0xproject/utils": "^0.2.1", - "@0xproject/web3-wrapper": "^0.1.6", + "@0xproject/assert": "^0.0.14", + "@0xproject/json-schemas": "^0.7.6", + "@0xproject/types": "^0.1.7", + "@0xproject/utils": "^0.2.3", + "@0xproject/web3-wrapper": "^0.1.8", "bintrees": "^1.0.2", "bn.js": "^4.11.8", "ethereumjs-abi": "^0.6.4", diff --git a/packages/0x.js/src/0x.ts b/packages/0x.js/src/0x.ts index 503a937c4..f8a484c5d 100644 --- a/packages/0x.js/src/0x.ts +++ b/packages/0x.js/src/0x.ts @@ -240,20 +240,22 @@ export class ZeroEx { * @param orderHash Hex encoded orderHash to sign. * @param signerAddress The hex encoded Ethereum address you wish to sign it with. This address * must be available via the Web3.Provider supplied to 0x.js. + * @param shouldAddPersonalMessagePrefix Some signers add the personal message prefix `\x19Ethereum Signed Message` + * themselves (e.g Parity Signer, Ledger, TestRPC) and others expect it to already be done by the client + * (e.g Metamask). Depending on which signer this request is going to, decide on whether to add the prefix + * before sending the request. * @return An object containing the Elliptic curve signature parameters generated by signing the orderHash. */ - public async signOrderHashAsync(orderHash: string, signerAddress: string): Promise<ECSignature> { + public async signOrderHashAsync( + orderHash: string, + signerAddress: string, + shouldAddPersonalMessagePrefix: boolean, + ): Promise<ECSignature> { assert.isHexString('orderHash', orderHash); await assert.isSenderAddressAsync('signerAddress', signerAddress, this._web3Wrapper); - let msgHashHex; - const nodeVersion = await this._web3Wrapper.getNodeVersionAsync(); - const isParityNode = utils.isParityNode(nodeVersion); - const isTestRpc = utils.isTestRpc(nodeVersion); - if (isParityNode || isTestRpc) { - // Parity and TestRpc nodes add the personalMessage prefix itself - msgHashHex = orderHash; - } else { + let msgHashHex = orderHash; + if (shouldAddPersonalMessagePrefix) { const orderHashBuff = ethUtil.toBuffer(orderHash); const msgHashBuff = ethUtil.hashPersonalMessage(orderHashBuff); msgHashHex = ethUtil.bufferToHex(msgHashBuff); diff --git a/packages/0x.js/src/artifacts/EtherToken.json b/packages/0x.js/src/artifacts/EtherToken.json index 91fba7f0a..26cca57cd 100644 --- a/packages/0x.js/src/artifacts/EtherToken.json +++ b/packages/0x.js/src/artifacts/EtherToken.json @@ -274,6 +274,9 @@ "3": { "address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a" }, + "4": { + "address": "0xc778417e063141139fce010982780140aa0cd5ab" + }, "42": { "address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1" }, diff --git a/packages/0x.js/src/artifacts/Exchange.json b/packages/0x.js/src/artifacts/Exchange.json index 45e277c45..af8db7360 100644 --- a/packages/0x.js/src/artifacts/Exchange.json +++ b/packages/0x.js/src/artifacts/Exchange.json @@ -597,6 +597,9 @@ "3": { "address": "0x479cc461fecd078f766ecc58533d6f69580cf3ac" }, + "4": { + "address": "0x1d16ef40fac01cec8adac2ac49427b9384192c05" + }, "42": { "address": "0x90fe2af704b34e0224bf2299c838e04d4dcf1364" }, diff --git a/packages/0x.js/src/artifacts/TokenRegistry.json b/packages/0x.js/src/artifacts/TokenRegistry.json index 81780074c..0f583628c 100644 --- a/packages/0x.js/src/artifacts/TokenRegistry.json +++ b/packages/0x.js/src/artifacts/TokenRegistry.json @@ -534,6 +534,9 @@ "3": { "address": "0x6b1a50f0bb5a7995444bd3877b22dc89c62843ed" }, + "4": { + "address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6" + }, "42": { "address": "0xf18e504561f4347bea557f3d4558f559dddbae7f" }, diff --git a/packages/0x.js/src/artifacts/TokenTransferProxy.json b/packages/0x.js/src/artifacts/TokenTransferProxy.json index 9b6a6cdf9..8cf551ddb 100644 --- a/packages/0x.js/src/artifacts/TokenTransferProxy.json +++ b/packages/0x.js/src/artifacts/TokenTransferProxy.json @@ -174,6 +174,9 @@ "3": { "address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6" }, + "4": { + "address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d" + }, "42": { "address": "0x087eed4bc1ee3de49befbd66c662b434b15d49d4" }, diff --git a/packages/0x.js/src/artifacts/ZRX.json b/packages/0x.js/src/artifacts/ZRX.json index 1bd973178..e40b8f268 100644 --- a/packages/0x.js/src/artifacts/ZRX.json +++ b/packages/0x.js/src/artifacts/ZRX.json @@ -7,6 +7,9 @@ "3": { "address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d" }, + "4": { + "address": "0x00f58d6d585f84b2d7267940cede30ce2fe6eae8" + }, "42": { "address": "0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570" }, diff --git a/packages/0x.js/src/utils/utils.ts b/packages/0x.js/src/utils/utils.ts index e42a1a853..42cf5d956 100644 --- a/packages/0x.js/src/utils/utils.ts +++ b/packages/0x.js/src/utils/utils.ts @@ -20,12 +20,6 @@ export const utils = { // tslint:disable-next-line: no-console console.log(message); }, - isParityNode(nodeVersion: string): boolean { - return _.includes(nodeVersion, 'Parity'); - }, - isTestRpc(nodeVersion: string): boolean { - return _.includes(nodeVersion, 'TestRPC'); - }, spawnSwitchErr(name: string, value: any): Error { return new Error(`Unexpected switch value: ${value} encountered for ${name}`); }, diff --git a/packages/0x.js/test/0x.js_test.ts b/packages/0x.js/test/0x.js_test.ts index 5bc2c149c..927fe20be 100644 --- a/packages/0x.js/test/0x.js_test.ts +++ b/packages/0x.js/test/0x.js_test.ts @@ -16,6 +16,8 @@ const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL); chaiSetup.configure(); const expect = chai.expect; +const SHOULD_ADD_PERSONAL_MESSAGE_PREFIX = false; + describe('ZeroEx library', () => { const web3 = web3Factory.create(); const config = { @@ -198,7 +200,11 @@ describe('ZeroEx library', () => { r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254', }; - const ecSignature = await zeroEx.signOrderHashAsync(orderHash, makerAddress); + const ecSignature = await zeroEx.signOrderHashAsync( + orderHash, + makerAddress, + SHOULD_ADD_PERSONAL_MESSAGE_PREFIX, + ); expect(ecSignature).to.deep.equal(expectedECSignature); }); it('should return the correct ECSignature for signatureHex concatenated as R + S + V', async () => { @@ -215,7 +221,11 @@ describe('ZeroEx library', () => { Sinon.stub(ZeroEx, 'isValidSignature').returns(true), ]; - const ecSignature = await zeroEx.signOrderHashAsync(orderHash, makerAddress); + const ecSignature = await zeroEx.signOrderHashAsync( + orderHash, + makerAddress, + SHOULD_ADD_PERSONAL_MESSAGE_PREFIX, + ); expect(ecSignature).to.deep.equal(expectedECSignature); }); it('should return the correct ECSignature for signatureHex concatenated as V + R + S', async () => { @@ -232,7 +242,11 @@ describe('ZeroEx library', () => { Sinon.stub(ZeroEx, 'isValidSignature').returns(true), ]; - const ecSignature = await zeroEx.signOrderHashAsync(orderHash, makerAddress); + const ecSignature = await zeroEx.signOrderHashAsync( + orderHash, + makerAddress, + SHOULD_ADD_PERSONAL_MESSAGE_PREFIX, + ); expect(ecSignature).to.deep.equal(expectedECSignature); }); }); diff --git a/packages/0x.js/test/utils/order_factory.ts b/packages/0x.js/test/utils/order_factory.ts index 60a7c5fb2..08f2081a4 100644 --- a/packages/0x.js/test/utils/order_factory.ts +++ b/packages/0x.js/test/utils/order_factory.ts @@ -3,6 +3,8 @@ import * as _ from 'lodash'; import { SignedOrder, ZeroEx } from '../../src'; +const SHOULD_ADD_PERSONAL_MESSAGE_PREFIX = false; + export const orderFactory = { async createSignedOrderAsync( zeroEx: ZeroEx, @@ -37,7 +39,7 @@ export const orderFactory = { expirationUnixTimestampSec, }; const orderHash = ZeroEx.getOrderHashHex(order); - const ecSignature = await zeroEx.signOrderHashAsync(orderHash, maker); + const ecSignature = await zeroEx.signOrderHashAsync(orderHash, maker, SHOULD_ADD_PERSONAL_MESSAGE_PREFIX); const signedOrder: SignedOrder = _.assign(order, { ecSignature }); return signedOrder; }, diff --git a/packages/abi-gen/package.json b/packages/abi-gen/package.json index 8d2dee18a..b43df00fe 100644 --- a/packages/abi-gen/package.json +++ b/packages/abi-gen/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/abi-gen", - "version": "0.1.3", + "version": "0.1.5", "description": "Generate contract wrappers from ABI and handlebars templates", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -22,7 +22,7 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/abi-gen/README.md", "dependencies": { - "@0xproject/utils": "^0.2.1", + "@0xproject/utils": "^0.2.3", "chalk": "^2.3.0", "glob": "^7.1.2", "handlebars": "^4.0.11", @@ -33,7 +33,7 @@ "yargs": "^10.0.3" }, "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", + "@0xproject/tslint-config": "^0.4.5", "@types/glob": "^5.0.33", "@types/handlebars": "^4.0.36", "@types/mkdirp": "^0.5.1", @@ -43,6 +43,6 @@ "shx": "^0.2.2", "tslint": "5.8.0", "typescript": "~2.6.1", - "web3-typescript-typings": "^0.9.5" + "web3-typescript-typings": "^0.9.7" } } diff --git a/packages/assert/package.json b/packages/assert/package.json index 1c25b4e40..fa2de5c0a 100644 --- a/packages/assert/package.json +++ b/packages/assert/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/assert", - "version": "0.0.12", + "version": "0.0.14", "description": "Provides a standard way of performing type and schema validation across 0x projects", "main": "lib/src/index.js", "types": "lib/src/index.d.ts", @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/assert/README.md", "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", + "@0xproject/tslint-config": "^0.4.5", "@types/lodash": "^4.14.86", "@types/mocha": "^2.2.42", "@types/valid-url": "^1.0.2", @@ -37,8 +37,8 @@ "typescript": "~2.6.1" }, "dependencies": { - "@0xproject/json-schemas": "^0.7.4", - "@0xproject/utils": "^0.2.1", + "@0xproject/json-schemas": "^0.7.6", + "@0xproject/utils": "^0.2.3", "lodash": "^4.17.4", "valid-url": "^1.0.9" } diff --git a/packages/chai-as-promised-typescript-typings/package.json b/packages/chai-as-promised-typescript-typings/package.json index 34f4ed1f3..1d5cd4334 100644 --- a/packages/chai-as-promised-typescript-typings/package.json +++ b/packages/chai-as-promised-typescript-typings/package.json @@ -1,6 +1,6 @@ { "name": "chai-as-promised-typescript-typings", - "version": "0.0.5", + "version": "0.0.7", "description": "Typescript type definitions for chai-as-promised", "main": "index.d.ts", "types": "index.d.ts", diff --git a/packages/connect/package.json b/packages/connect/package.json index a28916903..9da25a35a 100644 --- a/packages/connect/package.json +++ b/packages/connect/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/connect", - "version": "0.5.1", + "version": "0.5.3", "description": "A javascript library for interacting with the standard relayer api", "keywords": [ "connect", @@ -36,16 +36,16 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/connect/README.md", "dependencies": { - "@0xproject/assert": "^0.0.12", - "@0xproject/json-schemas": "^0.7.4", - "@0xproject/utils": "^0.2.1", + "@0xproject/assert": "^0.0.14", + "@0xproject/json-schemas": "^0.7.6", + "@0xproject/utils": "^0.2.3", "isomorphic-fetch": "^2.2.1", "lodash": "^4.17.4", "query-string": "^5.0.1", "websocket": "^1.0.25" }, "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", + "@0xproject/tslint-config": "^0.4.5", "@types/fetch-mock": "^5.12.1", "@types/lodash": "^4.14.86", "@types/mocha": "^2.2.42", @@ -53,7 +53,7 @@ "@types/websocket": "^0.0.34", "chai": "^4.0.1", "chai-as-promised": "^7.1.0", - "chai-as-promised-typescript-typings": "^0.0.5", + "chai-as-promised-typescript-typings": "^0.0.7", "chai-typescript-typings": "^0.0.2", "copyfiles": "^1.2.0", "dirty-chai": "^2.0.1", @@ -64,6 +64,6 @@ "tslint": "5.8.0", "typedoc": "~0.8.0", "typescript": "~2.6.1", - "web3-typescript-typings": "^0.9.5" + "web3-typescript-typings": "^0.9.7" } } diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 5a76bbf7f..3a140b23e 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "contracts", - "version": "2.1.5", + "version": "2.1.7", "description": "Smart contract components of 0x protocol", "main": "index.js", "directories": { @@ -28,9 +28,9 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/contracts/README.md", "devDependencies": { - "@0xproject/dev-utils": "^0.0.6", - "@0xproject/tslint-config": "^0.4.3", - "@0xproject/types": "^0.1.5", + "@0xproject/dev-utils": "^0.0.8", + "@0xproject/tslint-config": "^0.4.5", + "@0xproject/types": "^0.1.7", "@types/bluebird": "^3.5.3", "@types/lodash": "^4.14.86", "@types/node": "^8.0.53", @@ -38,7 +38,7 @@ "@types/yargs": "^10.0.0", "chai": "^4.0.1", "chai-as-promised": "^7.1.0", - "chai-as-promised-typescript-typings": "^0.0.5", + "chai-as-promised-typescript-typings": "^0.0.7", "chai-bignumber": "^2.0.1", "chai-typescript-typings": "^0.0.2", "copyfiles": "^1.2.0", @@ -50,15 +50,15 @@ "types-bn": "^0.0.1", "types-ethereumjs-util": "0xProject/types-ethereumjs-util", "typescript": "~2.6.1", - "web3-typescript-typings": "^0.9.5", + "web3-typescript-typings": "^0.9.7", "yargs": "^10.0.3" }, "dependencies": { - "0x.js": "^0.30.1", - "@0xproject/deployer": "^0.0.2", - "@0xproject/json-schemas": "^0.7.4", - "@0xproject/utils": "^0.2.1", - "@0xproject/web3-wrapper": "^0.1.6", + "0x.js": "^0.31.0", + "@0xproject/deployer": "^0.0.4", + "@0xproject/json-schemas": "^0.7.6", + "@0xproject/utils": "^0.2.3", + "@0xproject/web3-wrapper": "^0.1.8", "bluebird": "^3.5.0", "bn.js": "^4.11.8", "ethereumjs-abi": "^0.6.4", diff --git a/packages/deployer/package.json b/packages/deployer/package.json index 1ae0ca227..723c4a465 100644 --- a/packages/deployer/package.json +++ b/packages/deployer/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/deployer", - "version": "0.0.2", + "version": "0.0.4", "description": "Smart contract deployer of 0x protocol", "main": "lib/src/cli.js", "scripts": { @@ -29,11 +29,11 @@ "copyfiles": "^1.2.0", "types-bn": "^0.0.1", "typescript": "~2.6.1", - "web3-typescript-typings": "^0.9.5" + "web3-typescript-typings": "^0.9.7" }, "dependencies": { "@0xproject/utils": "^0.1.3", - "@0xproject/web3-wrapper": "^0.1.6", + "@0xproject/web3-wrapper": "^0.1.8", "lodash": "^4.17.4", "solc": "^0.4.18", "web3": "^0.20.0", diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 1cd54f15f..bd77b7c20 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/dev-utils", - "version": "0.0.6", + "version": "0.0.8", "description": "0x dev TS utils", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -19,7 +19,7 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/dev-utils/README.md", "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", + "@0xproject/tslint-config": "^0.4.5", "@types/lodash": "^4.14.86", "npm-run-all": "^4.1.2", "shx": "^0.2.2", @@ -29,7 +29,7 @@ "typescript": "~2.6.1" }, "dependencies": { - "@0xproject/utils": "^0.2.1", + "@0xproject/utils": "^0.2.3", "ethereumjs-util": "^5.1.2", "lodash": "^4.17.4", "request-promise-native": "^1.0.5" diff --git a/packages/json-schemas/package.json b/packages/json-schemas/package.json index 4b500eab3..4deba09bc 100644 --- a/packages/json-schemas/package.json +++ b/packages/json-schemas/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/json-schemas", - "version": "0.7.4", + "version": "0.7.6", "description": "0x-related json schemas", "main": "lib/src/index.js", "types": "lib/src/index.d.ts", @@ -27,8 +27,8 @@ "lodash.values": "^4.3.0" }, "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", - "@0xproject/utils": "^0.2.1", + "@0xproject/tslint-config": "^0.4.5", + "@0xproject/utils": "^0.2.3", "@types/lodash.foreach": "^4.5.3", "@types/lodash.values": "^4.3.3", "@types/mocha": "^2.2.42", diff --git a/packages/kovan-faucets/src/ts/handler.ts b/packages/kovan-faucets/src/ts/handler.ts deleted file mode 100644 index 4bf776264..000000000 --- a/packages/kovan-faucets/src/ts/handler.ts +++ /dev/null @@ -1,93 +0,0 @@ -import * as express from 'express'; -import * as _ from 'lodash'; -import ProviderEngine = require('web3-provider-engine'); -import HookedWalletSubprovider = require('web3-provider-engine/subproviders/hooked-wallet'); -import NonceSubprovider = require('web3-provider-engine/subproviders/nonce-tracker'); -import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); - -import { configs } from './configs'; -import { EtherRequestQueue } from './ether_request_queue'; -import { idManagement } from './id_management'; -import { utils } from './utils'; -import { ZRXRequestQueue } from './zrx_request_queue'; - -// HACK: web3 leaks XMLHttpRequest into the global scope and causes requests to hang -// because they are using the wrong XHR package. -// Filed issue: https://github.com/ethereum/web3.js/issues/844 -// tslint:disable-next-line:ordered-imports -import * as Web3 from 'web3'; - -export class Handler { - private _etherRequestQueue: EtherRequestQueue; - private _zrxRequestQueue: ZRXRequestQueue; - private _web3: Web3; - constructor() { - // Setup provider engine to talk with RPC node - const providerObj = this._createProviderEngine(configs.RPC_URL); - this._web3 = new Web3(providerObj); - - this._etherRequestQueue = new EtherRequestQueue(this._web3); - this._zrxRequestQueue = new ZRXRequestQueue(this._web3); - } - public dispenseEther(req: express.Request, res: express.Response) { - const recipientAddress = req.params.recipient; - if (_.isUndefined(recipientAddress) || !this._isValidEthereumAddress(recipientAddress)) { - res.status(400).send('INVALID_REQUEST'); - return; - } - const lowerCaseRecipientAddress = recipientAddress.toLowerCase(); - const didAddToQueue = this._etherRequestQueue.add(lowerCaseRecipientAddress); - if (!didAddToQueue) { - res.status(503).send('QUEUE_IS_FULL'); - return; - } - utils.consoleLog(`Added ${lowerCaseRecipientAddress} to the ETH queue`); - res.status(200).end(); - } - public dispenseZRX(req: express.Request, res: express.Response) { - const recipientAddress = req.params.recipient; - if (_.isUndefined(recipientAddress) || !this._isValidEthereumAddress(recipientAddress)) { - res.status(400).send('INVALID_REQUEST'); - return; - } - const lowerCaseRecipientAddress = recipientAddress.toLowerCase(); - const didAddToQueue = this._zrxRequestQueue.add(lowerCaseRecipientAddress); - if (!didAddToQueue) { - res.status(503).send('QUEUE_IS_FULL'); - return; - } - utils.consoleLog(`Added ${lowerCaseRecipientAddress} to the ZRX queue`); - res.status(200).end(); - } - public getQueueInfo(req: express.Request, res: express.Response) { - res.setHeader('Content-Type', 'application/json'); - const payload = JSON.stringify({ - ether: { - full: this._etherRequestQueue.isFull(), - size: this._etherRequestQueue.size(), - }, - zrx: { - full: this._zrxRequestQueue.isFull(), - size: this._zrxRequestQueue.size(), - }, - }); - res.status(200).send(payload); - } - // tslint:disable-next-line:prefer-function-over-method - private _createProviderEngine(rpcUrl: string) { - const engine = new ProviderEngine(); - engine.addProvider(new NonceSubprovider()); - engine.addProvider(new HookedWalletSubprovider(idManagement)); - engine.addProvider( - new RpcSubprovider({ - rpcUrl, - }), - ); - engine.start(); - return engine; - } - private _isValidEthereumAddress(address: string): boolean { - const lowercaseAddress = address.toLowerCase(); - return this._web3.isAddress(lowercaseAddress); - } -} diff --git a/packages/monorepo-scripts/package.json b/packages/monorepo-scripts/package.json index 57d0d6f5f..1e177836a 100644 --- a/packages/monorepo-scripts/package.json +++ b/packages/monorepo-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/monorepo-scripts", - "version": "0.1.5", + "version": "0.1.7", "private": true, "description": "Helper scripts for the monorepo", "scripts": { @@ -19,7 +19,7 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/monorepo-scripts/README.md", "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", + "@0xproject/tslint-config": "^0.4.5", "@types/glob": "^5.0.33", "@types/node": "^8.0.53", "shx": "^0.2.2", diff --git a/packages/subproviders/package.json b/packages/subproviders/package.json index 2735f8280..251b63e19 100644 --- a/packages/subproviders/package.json +++ b/packages/subproviders/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/subproviders", - "version": "0.3.2", + "version": "0.3.4", "main": "lib/src/index.js", "types": "lib/src/index.d.ts", "license": "Apache-2.0", @@ -17,8 +17,8 @@ "test:integration": "run-s clean build run_mocha_integration" }, "dependencies": { - "@0xproject/assert": "^0.0.12", - "@0xproject/utils": "^0.2.1", + "@0xproject/assert": "^0.0.14", + "@0xproject/utils": "^0.2.3", "bn.js": "^4.11.8", "es6-promisify": "^5.0.0", "ethereumjs-tx": "^1.3.3", @@ -31,15 +31,15 @@ "web3-provider-engine": "^13.0.1" }, "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", - "@0xproject/utils": "^0.2.1", + "@0xproject/tslint-config": "^0.4.5", + "@0xproject/utils": "^0.2.3", "@types/lodash": "^4.14.86", "@types/mocha": "^2.2.42", "@types/node": "^8.0.53", "awesome-typescript-loader": "^3.1.3", "chai": "^4.0.1", "chai-as-promised": "^7.1.0", - "chai-as-promised-typescript-typings": "^0.0.5", + "chai-as-promised-typescript-typings": "^0.0.7", "chai-typescript-typings": "^0.0.2", "dirty-chai": "^2.0.1", "mocha": "^4.0.1", diff --git a/packages/kovan-faucets/Dockerfile b/packages/testnet-faucets/Dockerfile index 6d6ddc192..6d6ddc192 100644 --- a/packages/kovan-faucets/Dockerfile +++ b/packages/testnet-faucets/Dockerfile diff --git a/packages/kovan-faucets/README.md b/packages/testnet-faucets/README.md index 07bd23575..a52d16a00 100644 --- a/packages/kovan-faucets/README.md +++ b/packages/testnet-faucets/README.md @@ -1,4 +1,4 @@ -## @0xproject/kovan_faucets +## @0xproject/testnet-faucets This faucet dispenses 0.1 test ether to one recipient per second and 0.1 test ZRX every 5 seconds. It has a max queue size of 1000. @@ -31,14 +31,19 @@ yarn install Set the following environment variables: ```bash -export FAUCET_ENVIRONMENT=development export DISPENSER_ADDRESS=0x5409ed021d9299bf6814279a6a1411a7e866a631 export DISPENSER_PRIVATE_KEY=f2f48ee19680706196e2e339e5da3491186e0c4c5030670656b0e0164837257d export FAUCET_ROLLBAR_ACCESS_KEY={GET_THIS_FROM_ROLLBAR_ACCOUNT_SETTINGS} export INFURA_API_KEY={GET_THIS_FROM_INFURA} ``` -Infura API Key can be requested here: https://infura.io/register.html +If you want to talk to testrpc, set the following environment variable: + +```bash +export FAUCET_ENVIRONMENT=development +``` + +Infura API Key can be requested here: https://infura.io/signup Note: The above public/private keys exist when running `testrpc` with the following option `--mnemonic concert load couple harbor equip island argue ramp clarify fence smart topic`. @@ -48,27 +53,73 @@ yarn dev ### Endpoints +`GET /ping` + +Returns `pong` + +`GET /info` + +Returns a JSON payload describing the state of the queues for each network. For example: + +```json +{ + "3": { + "ether": { + "full": false, + "size": 4 + }, + "zrx": { + "full": false, + "size": 6 + } + }, + "42": { + "ether": { + "full": false, + "size": 8 + }, + "zrx": { + "full": false, + "size": 20 + } + } +} +``` + `GET /ether/:recipient` -Where recipient_address is a hex encoded Ethereum address prefixed with `0x`. +Where recipient is a hex encoded Ethereum address prefixed with `0x`. `GET /zrx/:recipient` -Where recipient_address is a hex encoded Ethereum address prefixed with `0x`. +Where recipient is a hex encoded Ethereum address prefixed with `0x`. + +#### Parameters + +The endpoints `/ether` and `/zrx` take a query parameter named `networkId` to specify the desired network where you would like to receive the ETH or ZRX. For example: + +```bash +curl -i http://localhost:3000/ether/0x14e2F1F157E7DD4057D02817436D628A37120FD1\?networkId=3 +``` + +This command will request the local server to initiate a transfer of 0.1 ETH from the dispensing address to `0x14e2F1F157E7DD4057D02817436D628A37120FD1` on the Ropsten testnet. + +If no `networkId` is provided via query parameters the faucet will default to network 42 (Kovan) ### Docker configs ``` docker run -d \ -p 80:3000 \ ---name kovan-faucets \ +--name testnet-faucets \ --log-opt max-size=100m \ --log-opt max-file=20 \ -e DISPENSER_ADDRESS=$DISPENSER_ADDRESS \ -e DISPENSER_PRIVATE_KEY=$DISPENSER_PRIVATE_KEY \ -e FAUCET_ROLLBAR_ACCESS_KEY=$FAUCET_ROLLBAR_ACCESS_KEY \ -e FAUCET_ENVIRONMENT=production \ -kovan-faucets +-e INFURA_API_KEY=$INFURA_API_KEY \ +testnet-faucets ``` ### Lint diff --git a/packages/kovan-faucets/gulpfile.js b/packages/testnet-faucets/gulpfile.js index 773faf33a..773faf33a 100644 --- a/packages/kovan-faucets/gulpfile.js +++ b/packages/testnet-faucets/gulpfile.js diff --git a/packages/kovan-faucets/package.json b/packages/testnet-faucets/package.json index 7dc6b0512..3b42ebb3e 100644 --- a/packages/kovan-faucets/package.json +++ b/packages/testnet-faucets/package.json @@ -1,7 +1,7 @@ { "private": true, - "name": "@0xproject/kovan_faucets", - "version": "1.0.6", + "name": "@0xproject/testnet-faucets", + "version": "1.0.8", "description": "A faucet micro-service that dispenses test ERC20 tokens or Ether", "main": "server.js", "scripts": { @@ -14,8 +14,8 @@ "author": "Fabio Berger", "license": "Apache-2.0", "dependencies": { - "0x.js": "^0.30.1", - "@0xproject/utils": "^0.2.1", + "0x.js": "^0.31.0", + "@0xproject/utils": "^0.2.3", "body-parser": "^1.17.1", "ethereumjs-tx": "^1.3.3", "express": "^4.15.2", @@ -25,7 +25,7 @@ "web3-provider-engine": "^13.0.1" }, "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", + "@0xproject/tslint-config": "^0.4.5", "@types/body-parser": "^1.16.1", "@types/express": "^4.0.35", "@types/lodash": "^4.14.86", @@ -36,7 +36,7 @@ "source-map-loader": "^0.1.6", "tslint": "5.8.0", "typescript": "~2.6.1", - "web3-typescript-typings": "^0.9.5", + "web3-typescript-typings": "^0.9.7", "webpack": "^3.1.0", "webpack-node-externals": "^1.6.0" } diff --git a/packages/kovan-faucets/scripts/postpublish.js b/packages/testnet-faucets/scripts/postpublish.js index 16d67e03f..16d67e03f 100644 --- a/packages/kovan-faucets/scripts/postpublish.js +++ b/packages/testnet-faucets/scripts/postpublish.js diff --git a/packages/kovan-faucets/src/ts/configs.ts b/packages/testnet-faucets/src/ts/configs.ts index 2e5a7f64d..038c8e22a 100644 --- a/packages/kovan-faucets/src/ts/configs.ts +++ b/packages/testnet-faucets/src/ts/configs.ts @@ -2,11 +2,6 @@ export const configs = { DISPENSER_ADDRESS: (process.env.DISPENSER_ADDRESS as string).toLowerCase(), DISPENSER_PRIVATE_KEY: process.env.DISPENSER_PRIVATE_KEY, ENVIRONMENT: process.env.FAUCET_ENVIRONMENT, + INFURA_API_KEY: process.env.INFURA_API_KEY, ROLLBAR_ACCESS_KEY: process.env.FAUCET_ROLLBAR_ACCESS_KEY, - RPC_URL: - process.env.FAUCET_ENVIRONMENT === 'development' - ? 'http://127.0.0.1:8545' - : `https://kovan.infura.io/${process.env.INFURA_API_KEY}`, - ZRX_TOKEN_ADDRESS: '0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570', - KOVAN_NETWORK_ID: 42, }; diff --git a/packages/kovan-faucets/src/ts/error_reporter.ts b/packages/testnet-faucets/src/ts/error_reporter.ts index 6865d3893..6865d3893 100644 --- a/packages/kovan-faucets/src/ts/error_reporter.ts +++ b/packages/testnet-faucets/src/ts/error_reporter.ts diff --git a/packages/kovan-faucets/src/ts/ether_request_queue.ts b/packages/testnet-faucets/src/ts/ether_request_queue.ts index 1c4b19ab9..1c4b19ab9 100644 --- a/packages/kovan-faucets/src/ts/ether_request_queue.ts +++ b/packages/testnet-faucets/src/ts/ether_request_queue.ts diff --git a/packages/kovan-faucets/src/ts/global.d.ts b/packages/testnet-faucets/src/ts/global.d.ts index 97cd35680..97cd35680 100644 --- a/packages/kovan-faucets/src/ts/global.d.ts +++ b/packages/testnet-faucets/src/ts/global.d.ts diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts new file mode 100644 index 000000000..bf5b3e81e --- /dev/null +++ b/packages/testnet-faucets/src/ts/handler.ts @@ -0,0 +1,114 @@ +import { addressUtils } from '@0xproject/utils'; +import * as express from 'express'; +import * as _ from 'lodash'; +import ProviderEngine = require('web3-provider-engine'); +import HookedWalletSubprovider = require('web3-provider-engine/subproviders/hooked-wallet'); +import NonceSubprovider = require('web3-provider-engine/subproviders/nonce-tracker'); +import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); + +import { EtherRequestQueue } from './ether_request_queue'; +import { idManagement } from './id_management'; +import { RequestQueue } from './request_queue'; +import { rpcUrls } from './rpc_urls'; +import { utils } from './utils'; +import { ZRXRequestQueue } from './zrx_request_queue'; + +// HACK: web3 leaks XMLHttpRequest into the global scope and causes requests to hang +// because they are using the wrong XHR package. +// Filed issue: https://github.com/ethereum/web3.js/issues/844 +// tslint:disable-next-line:ordered-imports +import * as Web3 from 'web3'; + +interface RequestQueueByNetworkId { + [networkId: string]: RequestQueue; +} + +enum QueueType { + ETH = 'ETH', + ZRX = 'ZRX', +} + +const DEFAULT_NETWORK_ID = 42; // kovan + +export class Handler { + private _etherRequestQueueByNetworkId: RequestQueueByNetworkId = {}; + private _zrxRequestQueueByNetworkId: RequestQueueByNetworkId = {}; + constructor() { + _.forIn(rpcUrls, (rpcUrl: string, networkId: string) => { + const providerObj = this._createProviderEngine(rpcUrl); + const web3 = new Web3(providerObj); + this._etherRequestQueueByNetworkId[networkId] = new EtherRequestQueue(web3); + this._zrxRequestQueueByNetworkId[networkId] = new ZRXRequestQueue(web3, +networkId); + }); + } + public getQueueInfo(req: express.Request, res: express.Response) { + res.setHeader('Content-Type', 'application/json'); + const queueInfo = _.mapValues(rpcUrls, (rpcUrl: string, networkId: string) => { + utils.consoleLog(networkId); + const etherRequestQueue = this._etherRequestQueueByNetworkId[networkId]; + const zrxRequestQueue = this._zrxRequestQueueByNetworkId[networkId]; + return { + ether: { + full: etherRequestQueue.isFull(), + size: etherRequestQueue.size(), + }, + zrx: { + full: zrxRequestQueue.isFull(), + size: zrxRequestQueue.size(), + }, + }; + }); + const payload = JSON.stringify(queueInfo); + res.status(200).send(payload); + } + public dispenseEther(req: express.Request, res: express.Response) { + this._dispense(req, res, this._etherRequestQueueByNetworkId, QueueType.ETH); + } + public dispenseZRX(req: express.Request, res: express.Response) { + this._dispense(req, res, this._zrxRequestQueueByNetworkId, QueueType.ZRX); + } + private _dispense( + req: express.Request, + res: express.Response, + requestQueueByNetworkId: RequestQueueByNetworkId, + queueType: QueueType, + ) { + const recipientAddress = req.params.recipient; + if (_.isUndefined(recipientAddress) || !this._isValidEthereumAddress(recipientAddress)) { + res.status(400).send('INVALID_RECIPIENT_ADDRESS'); + return; + } + const networkId = _.get(req.query, 'networkId', DEFAULT_NETWORK_ID); + const requestQueue = _.get(requestQueueByNetworkId, networkId); + if (_.isUndefined(requestQueue)) { + res.status(400).send('INVALID_NETWORK_ID'); + return; + } + const lowerCaseRecipientAddress = recipientAddress.toLowerCase(); + const didAddToQueue = requestQueue.add(lowerCaseRecipientAddress); + if (!didAddToQueue) { + res.status(503).send('QUEUE_IS_FULL'); + return; + } + utils.consoleLog(`Added ${lowerCaseRecipientAddress} to queue: ${queueType} networkId: ${networkId}`); + res.status(200).end(); + } + // tslint:disable-next-line:prefer-function-over-method + private _createProviderEngine(rpcUrl: string) { + const engine = new ProviderEngine(); + engine.addProvider(new NonceSubprovider()); + engine.addProvider(new HookedWalletSubprovider(idManagement)); + engine.addProvider( + new RpcSubprovider({ + rpcUrl, + }), + ); + engine.start(); + return engine; + } + // tslint:disable-next-line:prefer-function-over-method + private _isValidEthereumAddress(address: string): boolean { + const lowercaseAddress = address.toLowerCase(); + return addressUtils.isAddress(lowercaseAddress); + } +} diff --git a/packages/kovan-faucets/src/ts/id_management.ts b/packages/testnet-faucets/src/ts/id_management.ts index 930821172..db9b610a3 100644 --- a/packages/kovan-faucets/src/ts/id_management.ts +++ b/packages/testnet-faucets/src/ts/id_management.ts @@ -1,13 +1,11 @@ import EthereumTx = require('ethereumjs-tx'); import { configs } from './configs'; -import { utils } from './utils'; type Callback = (err: Error | null, accounts: any) => void; export const idManagement = { getAccounts(callback: Callback) { - utils.consoleLog(`configs.DISPENSER_ADDRESS: ${configs.DISPENSER_ADDRESS}`); callback(null, [configs.DISPENSER_ADDRESS]); }, approveTransaction(txData: object, callback: Callback) { diff --git a/packages/kovan-faucets/src/ts/request_queue.ts b/packages/testnet-faucets/src/ts/request_queue.ts index 2b42ca4bf..20f2833a1 100644 --- a/packages/kovan-faucets/src/ts/request_queue.ts +++ b/packages/testnet-faucets/src/ts/request_queue.ts @@ -51,6 +51,6 @@ export class RequestQueue { } // tslint:disable-next-line:prefer-function-over-method protected async processNextRequestFireAndForgetAsync(recipientAddress: string) { - throw new Error('Expected processNextRequestFireAndForgetAsync to be implemented by a superclass'); + throw new Error('Expected processNextRequestFireAndForgetAsync to be implemented by a subclass'); } } diff --git a/packages/testnet-faucets/src/ts/rpc_urls.ts b/packages/testnet-faucets/src/ts/rpc_urls.ts new file mode 100644 index 000000000..25a3b938f --- /dev/null +++ b/packages/testnet-faucets/src/ts/rpc_urls.ts @@ -0,0 +1,13 @@ +import { configs } from './configs'; + +const productionRpcUrls = { + '2': `https://ropsten.infura.io/${configs.INFURA_API_KEY}`, + '3': `https://rinkeby.infura.io/${configs.INFURA_API_KEY}`, + '42': `https://kovan.infura.io/${configs.INFURA_API_KEY}`, +}; + +const developmentRpcUrls = { + '50': 'http://127.0.0.1:8545', +}; + +export const rpcUrls = configs.ENVIRONMENT === 'development' ? developmentRpcUrls : productionRpcUrls; diff --git a/packages/kovan-faucets/src/ts/server.ts b/packages/testnet-faucets/src/ts/server.ts index 23642787d..26edfff5a 100644 --- a/packages/kovan-faucets/src/ts/server.ts +++ b/packages/testnet-faucets/src/ts/server.ts @@ -19,6 +19,7 @@ const handler = new Handler(); app.get('/ping', (req: express.Request, res: express.Response) => { res.status(200).send('pong'); }); +app.get('/info', handler.getQueueInfo.bind(handler)); app.get('/ether/:recipient', handler.dispenseEther.bind(handler)); app.get('/zrx/:recipient', handler.dispenseZRX.bind(handler)); diff --git a/packages/kovan-faucets/src/ts/utils.ts b/packages/testnet-faucets/src/ts/utils.ts index 893f82ca3..893f82ca3 100644 --- a/packages/kovan-faucets/src/ts/utils.ts +++ b/packages/testnet-faucets/src/ts/utils.ts diff --git a/packages/kovan-faucets/src/ts/zrx_request_queue.ts b/packages/testnet-faucets/src/ts/zrx_request_queue.ts index bbc06f1de..3d73f9dd2 100644 --- a/packages/kovan-faucets/src/ts/zrx_request_queue.ts +++ b/packages/testnet-faucets/src/ts/zrx_request_queue.ts @@ -18,11 +18,11 @@ const QUEUE_INTERVAL_MS = 5000; export class ZRXRequestQueue extends RequestQueue { private _zeroEx: ZeroEx; - constructor(web3: Web3) { + constructor(web3: Web3, networkId: number) { super(web3); this.queueIntervalMs = QUEUE_INTERVAL_MS; const zeroExConfig = { - networkId: configs.KOVAN_NETWORK_ID, + networkId, }; this._zeroEx = new ZeroEx(web3.currentProvider, zeroExConfig); } @@ -30,13 +30,14 @@ export class ZRXRequestQueue extends RequestQueue { utils.consoleLog(`Processing ZRX ${recipientAddress}`); const baseUnitAmount = ZeroEx.toBaseUnitAmount(DISPENSE_AMOUNT_ZRX, 18); try { - await this._zeroEx.token.transferAsync( - configs.ZRX_TOKEN_ADDRESS, + const zrxTokenAddress = this._zeroEx.exchange.getZRXTokenAddress(); + const txHash = await this._zeroEx.token.transferAsync( + zrxTokenAddress, configs.DISPENSER_ADDRESS, recipientAddress, baseUnitAmount, ); - utils.consoleLog(`Sent ${DISPENSE_AMOUNT_ZRX} ZRX to ${recipientAddress}`); + utils.consoleLog(`Sent ${DISPENSE_AMOUNT_ZRX} ZRX to ${recipientAddress} tx: ${txHash}`); } catch (err) { utils.consoleLog(`Unexpected err: ${err} - ${JSON.stringify(err)}`); await errorReporter.reportAsync(err); diff --git a/packages/kovan-faucets/tsconfig.json b/packages/testnet-faucets/tsconfig.json index 7f0c084ff..7f0c084ff 100644 --- a/packages/kovan-faucets/tsconfig.json +++ b/packages/testnet-faucets/tsconfig.json diff --git a/packages/kovan-faucets/tslint.json b/packages/testnet-faucets/tslint.json index ffaefe83a..ffaefe83a 100644 --- a/packages/kovan-faucets/tslint.json +++ b/packages/testnet-faucets/tslint.json diff --git a/packages/tslint-config/package.json b/packages/tslint-config/package.json index bcffe5a8e..3b616ba3a 100644 --- a/packages/tslint-config/package.json +++ b/packages/tslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/tslint-config", - "version": "0.4.3", + "version": "0.4.5", "description": "Lint rules related to 0xProject for TSLint", "main": "tslint.json", "scripts": { diff --git a/packages/types/package.json b/packages/types/package.json index 8a8244950..0c17e52ea 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/types", - "version": "0.1.5", + "version": "0.1.7", "description": "0x types", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -19,13 +19,13 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/types/README.md", "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", + "@0xproject/tslint-config": "^0.4.5", "shx": "^0.2.2", "tslint": "5.8.0", "typescript": "~2.6.1" }, "dependencies": { - "@0xproject/utils": "^0.2.1", + "@0xproject/utils": "^0.2.3", "web3": "^0.20.0" } } diff --git a/packages/utils/package.json b/packages/utils/package.json index b1f8b3792..a1cf4c24a 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/utils", - "version": "0.2.1", + "version": "0.2.3", "description": "0x TS utils", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -19,7 +19,7 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/utils/README.md", "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", + "@0xproject/tslint-config": "^0.4.5", "@types/lodash": "^4.14.86", "npm-run-all": "^4.1.2", "shx": "^0.2.2", diff --git a/packages/web3-typescript-typings/CHANGELOG.md b/packages/web3-typescript-typings/CHANGELOG.md index 46f70d864..56bb4ed48 100644 --- a/packages/web3-typescript-typings/CHANGELOG.md +++ b/packages/web3-typescript-typings/CHANGELOG.md @@ -2,5 +2,6 @@ ## v0.9.3 - _January 11, 2018_ +* Fix `getTransactionReceipt` not returning null (#338) * Add type for getData on a contract * Fixed the `defaultAccount` not allowing for `undefined` value (#320) diff --git a/packages/web3-typescript-typings/index.d.ts b/packages/web3-typescript-typings/index.d.ts index ff379cb3d..cd34759ed 100644 --- a/packages/web3-typescript-typings/index.d.ts +++ b/packages/web3-typescript-typings/index.d.ts @@ -257,10 +257,10 @@ declare module 'web3' { sign(address: string, data: string): string; sign(address: string, data: string, callback: (err: Error, signature: string) => void): void; - getTransactionReceipt(txHash: string): Web3.TransactionReceipt; + getTransactionReceipt(txHash: string): Web3.TransactionReceipt | null; getTransactionReceipt( txHash: string, - callback: (err: Error, receipt: Web3.TransactionReceipt) => void, + callback: (err: Error, receipt: Web3.TransactionReceipt | null) => void, ): void; // TODO block param diff --git a/packages/web3-typescript-typings/package.json b/packages/web3-typescript-typings/package.json index 6dddf22aa..03d8e333e 100644 --- a/packages/web3-typescript-typings/package.json +++ b/packages/web3-typescript-typings/package.json @@ -1,6 +1,6 @@ { "name": "web3-typescript-typings", - "version": "0.9.5", + "version": "0.9.7", "description": "Typescript type definitions for web3", "main": "index.d.ts", "types": "index.d.ts", diff --git a/packages/web3-wrapper/package.json b/packages/web3-wrapper/package.json index a0e15b48d..ec9ff3bb4 100644 --- a/packages/web3-wrapper/package.json +++ b/packages/web3-wrapper/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/web3-wrapper", - "version": "0.1.6", + "version": "0.1.8", "description": "Wraps around web3 and gives a nicer interface", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -19,17 +19,17 @@ }, "homepage": "https://github.com/0xProject/0x.js/packages/web3-wrapper/README.md", "devDependencies": { - "@0xproject/tslint-config": "^0.4.3", - "@0xproject/types": "^0.1.5", + "@0xproject/tslint-config": "^0.4.5", + "@0xproject/types": "^0.1.7", "@types/lodash": "^4.14.86", "npm-run-all": "^4.1.2", "shx": "^0.2.2", "tslint": "5.8.0", "typescript": "~2.6.1", - "web3-typescript-typings": "^0.9.5" + "web3-typescript-typings": "^0.9.7" }, "dependencies": { - "@0xproject/utils": "^0.2.1", + "@0xproject/utils": "^0.2.3", "lodash": "^4.17.4", "web3": "^0.20.0" } diff --git a/packages/website/package.json b/packages/website/package.json index 38afa8ec1..3d6cc24f7 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { "name": "@0xproject/website", - "version": "0.0.8", + "version": "0.0.10", "private": true, "description": "Website and 0x portal dapp", "scripts": { @@ -21,9 +21,9 @@ "author": "Fabio Berger", "license": "Apache-2.0", "dependencies": { - "0x.js": "^0.30.1", - "@0xproject/subproviders": "^0.3.2", - "@0xproject/utils": "^0.2.1", + "0x.js": "^0.31.0", + "@0xproject/subproviders": "^0.3.4", + "@0xproject/utils": "^0.2.3", "accounting": "^0.4.1", "basscss": "^8.0.3", "blockies": "^0.0.2", @@ -100,7 +100,7 @@ "style-loader": "0.13.x", "tslint": "5.8.0", "typescript": "~2.6.1", - "web3-typescript-typings": "^0.9.5", + "web3-typescript-typings": "^0.9.7", "webpack": "^3.1.0", "webpack-dev-middleware": "^1.10.0", "webpack-dev-server": "^2.5.0" |