From 1510f52b6f667216fbc9f926d5b0c79145476463 Mon Sep 17 00:00:00 2001 From: Josh Stevens Date: Sun, 26 May 2019 19:12:50 +0100 Subject: [PATCH 1/9] fix: resolve issue with parity nodes when a transaction is not mined yet and web3 calls "eth_getBlockByNumber" JSONRPC call with a null block number --- .../src/observers/TransactionObserver.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/web3-core-method/src/observers/TransactionObserver.js b/packages/web3-core-method/src/observers/TransactionObserver.js index a99cb89b5ca..43645a138ab 100644 --- a/packages/web3-core-method/src/observers/TransactionObserver.js +++ b/packages/web3-core-method/src/observers/TransactionObserver.js @@ -14,6 +14,7 @@ /** * @file TransactionObserver.js * @author Samuel Furter + * @author Josh Stevens * @date 2019 */ @@ -158,8 +159,15 @@ export default class TransactionObserver { this.emitNext(receipt, observer); } } else { - this.lastBlock = await this.getBlockByNumber(receipt.blockNumber); - this.confirmations++; + // on parity nodes you can get the receipt without it being mined + // so the receipt may not have a block number at this point. + // we should check that the blockNumber is defined before we do this call + // geth nodes only return the receipt once mined as the spec states. + if (receipt.blockNumber) { + this.lastBlock = await this.getBlockByNumber(receipt.blockNumber); + this.confirmations++; + } + this.emitNext(receipt, observer); } From 2b23d48869efd3d51f17a0c80286255e95b52b34 Mon Sep 17 00:00:00 2001 From: Josh Stevens Date: Sun, 26 May 2019 19:14:48 +0100 Subject: [PATCH 2/9] fix: resolve formatting --- packages/web3-eth/types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3-eth/types/index.d.ts b/packages/web3-eth/types/index.d.ts index beb435b2ec2..3688d9046e5 100644 --- a/packages/web3-eth/types/index.d.ts +++ b/packages/web3-eth/types/index.d.ts @@ -188,7 +188,7 @@ export interface BlockHeader { } export interface Block extends BlockHeader { - transactions: Transaction[] | string[]; + transactions: Transaction[]; size: number difficulty: number totalDifficulty: number From 12e5c945c00b98c3fb10fe57013937fe76e2082e Mon Sep 17 00:00:00 2001 From: Josh Stevens Date: Tue, 28 May 2019 12:17:31 +0100 Subject: [PATCH 3/9] Update include_announcement.rst --- docs/include_announcement.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/include_announcement.rst b/docs/include_announcement.rst index ae1f87936e6..2b9eeb66c76 100644 --- a/docs/include_announcement.rst +++ b/docs/include_announcement.rst @@ -1,2 +1 @@ .. note:: This documentation is under construction and the web3.js 1.0 stable version isn't released. If you're using a version v0.x.x of web3.js then please have a look at `github.com/ethereum/wiki/wiki/JavaScript-API `_. - From 3f2b18d79aa80921ed9817b9ce1a95da8486fe59 Mon Sep 17 00:00:00 2001 From: Josh Stevens Date: Tue, 28 May 2019 12:18:07 +0100 Subject: [PATCH 4/9] Update index.d.ts --- packages/web3-eth/types/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3-eth/types/index.d.ts b/packages/web3-eth/types/index.d.ts index 3688d9046e5..beb435b2ec2 100644 --- a/packages/web3-eth/types/index.d.ts +++ b/packages/web3-eth/types/index.d.ts @@ -188,7 +188,7 @@ export interface BlockHeader { } export interface Block extends BlockHeader { - transactions: Transaction[]; + transactions: Transaction[] | string[]; size: number difficulty: number totalDifficulty: number From 882aedd6700861f2e33a9353d92ea0a771d1df3b Mon Sep 17 00:00:00 2001 From: Jun Sugiura Date: Wed, 29 May 2019 21:07:11 +0900 Subject: [PATCH 5/9] await connection.send method --- packages/web3-providers/src/providers/Web3EthereumProvider.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3-providers/src/providers/Web3EthereumProvider.js b/packages/web3-providers/src/providers/Web3EthereumProvider.js index 6360362018b..ece4b53c3ac 100644 --- a/packages/web3-providers/src/providers/Web3EthereumProvider.js +++ b/packages/web3-providers/src/providers/Web3EthereumProvider.js @@ -129,7 +129,7 @@ export default class Web3EthereumProvider extends AbstractSocketProvider { * @returns {Promise} */ async send(method, parameters) { - const response = this.connection.send(method, parameters); + const response = await this.connection.send(method, parameters); const validationResult = JsonRpcResponseValidator.validate(response); if (validationResult instanceof Error) { From 64613ea4c8564bac9477658244e5bef554b0b1da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Thu, 30 May 2019 09:36:12 +0600 Subject: [PATCH 6/9] Update web3-providers readme --- packages/web3-providers/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/web3-providers/README.md b/packages/web3-providers/README.md index d9b28d174fb..6d030769088 100644 --- a/packages/web3-providers/README.md +++ b/packages/web3-providers/README.md @@ -36,10 +36,11 @@ Instead of setting a authorization header you could also define the credentials ```js import {WebsocketProvider} from 'web3-providers'; +const credentials = Buffer.from('username:password').toString('base64') const options = { timeout: 30000, headers: { - authorization: 'Basic username:password' + authorization: `Basic ${credentials}` } }; From bb097e7ae76acf9ccfbb6303312a2dbceacee568 Mon Sep 17 00:00:00 2001 From: Daehyun Paik Date: Thu, 30 May 2019 17:23:25 +0900 Subject: [PATCH 7/9] Replace method names of mining operation in doc Currently, some method names in documentation are not same with (implementation)[https://github.com/ethereum/web3.js/blob/1.0/packages/web3-eth-miner/types/index.d.ts#L42]. These two methods are related to RPC method `miner_start` and `miner_stop`. --- docs/web3-eth-miner.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/web3-eth-miner.rst b/docs/web3-eth-miner.rst index 6ce1e3a64b3..4c5c0c3920d 100644 --- a/docs/web3-eth-miner.rst +++ b/docs/web3-eth-miner.rst @@ -146,12 +146,12 @@ Example ------------------------------------------------------------------------------ -start +startMining ===== .. code-block:: javascript - miner.start(miningThread, [, callback]) + miner.startMining(miningThread, [, callback]) Start the CPU mining process with the given number of threads. The RPC method used is ``miner_start``. @@ -180,21 +180,21 @@ Example .. code-block:: javascript - miner.start('0x1').then(console.log); + miner.startMining('0x1').then(console.log); > true - miner.start(1).then(console.log); + miner.startMining(1).then(console.log); > true ------------------------------------------------------------------------------ -stop +stopMining ==== .. code-block:: javascript - miner.stop([callback]) + miner.stopMining([callback]) Stop the CPU mining process. The RPC method used is ``miner_stop``. @@ -222,7 +222,7 @@ Example .. code-block:: javascript - miner.stop().then(console.log); + miner.stopMining().then(console.log); > true ------------------------------------------------------------------------------ From e0849f37f62c2810a8a66aac66ec1f0f21e98871 Mon Sep 17 00:00:00 2001 From: Josh Stevens Date: Thu, 30 May 2019 15:53:20 +0100 Subject: [PATCH 8/9] Do not emit the receipt until the transaction has a block number --- .../src/observers/TransactionObserver.js | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/packages/web3-core-method/src/observers/TransactionObserver.js b/packages/web3-core-method/src/observers/TransactionObserver.js index 7d56395403a..ba5e3be758d 100644 --- a/packages/web3-core-method/src/observers/TransactionObserver.js +++ b/packages/web3-core-method/src/observers/TransactionObserver.js @@ -148,8 +148,10 @@ export default class TransactionObserver { this.getTransactionReceiptMethod.parameters = [transactionHash]; const receipt = await this.getTransactionReceiptMethod.execute(); - - if (receipt) { + + // on parity nodes you can get the receipt without it being mined + // so the receipt may not have a block number at this point + if (receipt && receipt.blockNumber) { if (this.lastBlock) { const block = await this.getBlockByNumber(this.lastBlock.number + 1); @@ -159,15 +161,9 @@ export default class TransactionObserver { this.emitNext(receipt, observer); } } else { - // on parity nodes you can get the receipt without it being mined - // so the receipt may not have a block number at this point. - // we should check that the blockNumber is defined before we do this call - // geth nodes only return the receipt once mined as the spec states. - if (receipt.blockNumber) { - this.lastBlock = await this.getBlockByNumber(receipt.blockNumber); - this.confirmations++; - } - + this.lastBlock = await this.getBlockByNumber(receipt.blockNumber); + this.confirmations++; + this.emitNext(receipt, observer); } From 9c9b60a7c500530236c597fe6655df3c6a17c08f Mon Sep 17 00:00:00 2001 From: Josh Stevens Date: Thu, 30 May 2019 15:53:43 +0100 Subject: [PATCH 9/9] Kill deadspace --- packages/web3-core-method/src/observers/TransactionObserver.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/web3-core-method/src/observers/TransactionObserver.js b/packages/web3-core-method/src/observers/TransactionObserver.js index ba5e3be758d..fc46ade3e0f 100644 --- a/packages/web3-core-method/src/observers/TransactionObserver.js +++ b/packages/web3-core-method/src/observers/TransactionObserver.js @@ -163,7 +163,6 @@ export default class TransactionObserver { } else { this.lastBlock = await this.getBlockByNumber(receipt.blockNumber); this.confirmations++; - this.emitNext(receipt, observer); }