From 3de8ec71b98571623a48c3024046f11e0d64b0c0 Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 10:35:38 +0200 Subject: [PATCH 01/10] TransactionObserver fixed for HTTP --- .../src/observers/TransactionObserver.js | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/packages/web3-core-method/src/observers/TransactionObserver.js b/packages/web3-core-method/src/observers/TransactionObserver.js index c89de33e..bf4effdf 100644 --- a/packages/web3-core-method/src/observers/TransactionObserver.js +++ b/packages/web3-core-method/src/observers/TransactionObserver.js @@ -150,7 +150,7 @@ export default class TransactionObserver { if (receipt) { if (this.lastBlock) { - const block = await this.getBlockByNumber(this.increaseBlockNumber(this.lastBlock.number)); + const block = await this.getBlockByNumber((this.lastBlock.number + 1)); if (block && this.isValidConfirmation(block)) { this.lastBlock = block; @@ -269,17 +269,4 @@ export default class TransactionObserver { isTimeoutTimeExceeded() { return this.confirmationChecks === this.timeout; } - - /** - * Increases the blockNumber hash by one. - * - * @method increaseBlockNumber - * - * @param {String} blockNumber - * - * @returns {String} - */ - increaseBlockNumber(blockNumber) { - return '0x' + (parseInt(blockNumber, 16) + 1).toString(16); - } } From 7f0c6138e76c21b0b7f76e598178adff32488966 Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 11:30:20 +0200 Subject: [PATCH 02/10] TransactionObserverTest updated --- .../tests/src/observers/TransactionObserverTest.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/web3-core-method/tests/src/observers/TransactionObserverTest.js b/packages/web3-core-method/tests/src/observers/TransactionObserverTest.js index 80121411..665382dc 100644 --- a/packages/web3-core-method/tests/src/observers/TransactionObserverTest.js +++ b/packages/web3-core-method/tests/src/observers/TransactionObserverTest.js @@ -189,9 +189,9 @@ describe('TransactionObserverTest', () => { providerMock.supportsSubscriptions.mockReturnValueOnce(false); - const receipt = {blockNumber: '0xa'}; - const blockOne = {number: '0xa', hash: '0x0'}; - const blockTwo = {number: '0xc', parentHash: '0x0'}; + const receipt = {blockNumber: 1}; + const blockOne = {number: 1, hash: '0x0'}; + const blockTwo = {number: 2, parentHash: '0x0'}; getTransactionReceiptMethodMock.execute .mockReturnValueOnce(Promise.resolve(receipt)) @@ -222,7 +222,7 @@ describe('TransactionObserverTest', () => { expect(getTransactionReceiptMethodMock.parameters).toEqual(['transactionHash']); - expect(getBlockByNumberMethodMock.parameters).toEqual(['0xb']); + expect(getBlockByNumberMethodMock.parameters).toEqual([2]); done(); } @@ -235,8 +235,8 @@ describe('TransactionObserverTest', () => { providerMock.supportsSubscriptions.mockReturnValueOnce(false); - const receipt = {blockNumber: '0xa'}; - const blockOne = {number: '0xa', hash: '0x0'}; + const receipt = {blockNumber: 1}; + const blockOne = {number: 1, hash: '0x0'}; getTransactionReceiptMethodMock.execute.mockReturnValueOnce(Promise.resolve(receipt)); From f63bac862e597503952fdc659fb03807235872aa Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 11:31:17 +0200 Subject: [PATCH 03/10] linter executed --- packages/web3-core-method/src/index.js | 1 - packages/web3-core-method/src/observers/TransactionObserver.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/web3-core-method/src/index.js b/packages/web3-core-method/src/index.js index 705b153a..3fdd7f74 100644 --- a/packages/web3-core-method/src/index.js +++ b/packages/web3-core-method/src/index.js @@ -142,4 +142,3 @@ export SetExtraMethod from './methods/miner/SetExtraMethod'; export SetGasPriceMethod from './methods/miner/SetGasPriceMethod'; export StartMinerMethod from './methods/miner/StartMinerMethod'; export StopMinerMethod from './methods/miner/StopMinerMethod'; - diff --git a/packages/web3-core-method/src/observers/TransactionObserver.js b/packages/web3-core-method/src/observers/TransactionObserver.js index bf4effdf..cd42bd0a 100644 --- a/packages/web3-core-method/src/observers/TransactionObserver.js +++ b/packages/web3-core-method/src/observers/TransactionObserver.js @@ -150,7 +150,7 @@ export default class TransactionObserver { if (receipt) { if (this.lastBlock) { - const block = await this.getBlockByNumber((this.lastBlock.number + 1)); + const block = await this.getBlockByNumber(this.lastBlock.number + 1); if (block && this.isValidConfirmation(block)) { this.lastBlock = block; From 0dc3dd4f0bbda02d664013e71681912ff117d93d Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 12:01:46 +0200 Subject: [PATCH 04/10] TransactionObserver tested with contract deployment --- .../methods/transaction/AbstractObservedTransactionMethod.js | 2 +- packages/web3-core-method/src/observers/TransactionObserver.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web3-core-method/lib/methods/transaction/AbstractObservedTransactionMethod.js b/packages/web3-core-method/lib/methods/transaction/AbstractObservedTransactionMethod.js index 04bb368b..c41e901f 100644 --- a/packages/web3-core-method/lib/methods/transaction/AbstractObservedTransactionMethod.js +++ b/packages/web3-core-method/lib/methods/transaction/AbstractObservedTransactionMethod.js @@ -112,7 +112,7 @@ export default class AbstractObservedTransactionMethod extends AbstractMethod { return; } - this.promiEvent.emit('confirmation', confirmations, this.afterExecution(receipt)); + this.promiEvent.emit('confirmation', confirmations, receipt); }, (error) => { this.handleError(error, receipt, confirmations); diff --git a/packages/web3-core-method/src/observers/TransactionObserver.js b/packages/web3-core-method/src/observers/TransactionObserver.js index cd42bd0a..a99cb89b 100644 --- a/packages/web3-core-method/src/observers/TransactionObserver.js +++ b/packages/web3-core-method/src/observers/TransactionObserver.js @@ -164,8 +164,8 @@ export default class TransactionObserver { } if (this.isConfirmed()) { - clearInterval(interval); observer.complete(); + clearInterval(interval); } } From 5cea0ace16dd1baae9cf7c3aa5779d5329f89210 Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 12:15:57 +0200 Subject: [PATCH 05/10] error strings in utils module updated --- packages/web3-utils/src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/web3-utils/src/index.js b/packages/web3-utils/src/index.js index 70508302..12c3ba33 100644 --- a/packages/web3-utils/src/index.js +++ b/packages/web3-utils/src/index.js @@ -195,7 +195,7 @@ export const fromWei = (number, unit) => { unit = getUnitValue(unit); if (!utils.isBN(number) && !isString(number)) { - throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.'); + throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.'); } return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10); @@ -229,7 +229,7 @@ export const toWei = (number, unit) => { unit = getUnitValue(unit); if (!utils.isBN(number) && !isString(number)) { - throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.'); + throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.'); } return utils.isBN(number) ? ethjsUnit.toWei(number, unit) : ethjsUnit.toWei(number, unit).toString(10); From af5a8fa7270cc8f9a57b6ab9458568ffda75f059 Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 21:56:38 +0200 Subject: [PATCH 06/10] receipt formatting fixed --- .../AbstractObservedTransactionMethod.js | 6 +++++- .../methods/transaction/SendRawTransactionMethod.js | 13 +++++++++++++ .../methods/transaction/SendTransactionMethod.js | 13 +++++++++++++ .../src/methods/ContractDeployMethod.js | 2 +- .../src/methods/SendContractMethod.js | 2 +- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/packages/web3-core-method/lib/methods/transaction/AbstractObservedTransactionMethod.js b/packages/web3-core-method/lib/methods/transaction/AbstractObservedTransactionMethod.js index c41e901f..46b83c25 100644 --- a/packages/web3-core-method/lib/methods/transaction/AbstractObservedTransactionMethod.js +++ b/packages/web3-core-method/lib/methods/transaction/AbstractObservedTransactionMethod.js @@ -112,7 +112,11 @@ export default class AbstractObservedTransactionMethod extends AbstractMethod { return; } - this.promiEvent.emit('confirmation', confirmations, receipt); + this.promiEvent.emit( + 'confirmation', + confirmations, + this.formatters.outputTransactionFormatter(receipt) + ); }, (error) => { this.handleError(error, receipt, confirmations); diff --git a/packages/web3-core-method/src/methods/transaction/SendRawTransactionMethod.js b/packages/web3-core-method/src/methods/transaction/SendRawTransactionMethod.js index ecfeaaf9..a082ebd8 100644 --- a/packages/web3-core-method/src/methods/transaction/SendRawTransactionMethod.js +++ b/packages/web3-core-method/src/methods/transaction/SendRawTransactionMethod.js @@ -34,4 +34,17 @@ export default class SendRawTransactionMethod extends AbstractObservedTransactio constructor(utils, formatters, moduleInstance, transactionObserver) { super('eth_sendRawTransaction', 1, utils, formatters, moduleInstance, transactionObserver); } + + /** + * This method will be executed after the RPC request. + * + * @method afterExecution + * + * @param {Object} response + * + * @returns {Object} + */ + afterExecution(response) { + return this.formatters.outputTransactionFormatter(response); + } } diff --git a/packages/web3-core-method/src/methods/transaction/SendTransactionMethod.js b/packages/web3-core-method/src/methods/transaction/SendTransactionMethod.js index 1505dc64..1cf8017b 100644 --- a/packages/web3-core-method/src/methods/transaction/SendTransactionMethod.js +++ b/packages/web3-core-method/src/methods/transaction/SendTransactionMethod.js @@ -45,4 +45,17 @@ export default class SendTransactionMethod extends AbstractObservedTransactionMe beforeExecution(moduleInstance) { this.parameters[0] = this.formatters.inputTransactionFormatter(this.parameters[0], moduleInstance); } + + /** + * This method will be executed after the RPC request. + * + * @method afterExecution + * + * @param {Object} response + * + * @returns {Object} + */ + afterExecution(response) { + return this.formatters.outputTransactionFormatter(response); + } } diff --git a/packages/web3-eth-contract/src/methods/ContractDeployMethod.js b/packages/web3-eth-contract/src/methods/ContractDeployMethod.js index 6f38cdec..63903fe5 100644 --- a/packages/web3-eth-contract/src/methods/ContractDeployMethod.js +++ b/packages/web3-eth-contract/src/methods/ContractDeployMethod.js @@ -65,7 +65,7 @@ export default class ContractDeployMethod extends EthSendTransactionMethod { clonedContract.address = response.contractAddress; if (this.promiEvent.listenerCount('receipt') > 0) { - this.promiEvent.emit('receipt', response); + this.promiEvent.emit('receipt', super.afterExecution(response)); this.promiEvent.removeAllListeners('receipt'); } diff --git a/packages/web3-eth-contract/src/methods/SendContractMethod.js b/packages/web3-eth-contract/src/methods/SendContractMethod.js index 808c9437..93037d15 100644 --- a/packages/web3-eth-contract/src/methods/SendContractMethod.js +++ b/packages/web3-eth-contract/src/methods/SendContractMethod.js @@ -93,6 +93,6 @@ export default class SendContractMethod extends EthSendTransactionMethod { delete response.logs; } - return response; + return super.afterExecution(response); } } From 14376738fbfa9f1c32f0bcc121dcb14c69ae32b2 Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 22:08:38 +0200 Subject: [PATCH 07/10] AbstractObservedTransactionMethodTest updated --- .../AbstractObservedTransactionMethodTest.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/web3-core-method/tests/lib/methods/transaction/AbstractObservedTransactionMethodTest.js b/packages/web3-core-method/tests/lib/methods/transaction/AbstractObservedTransactionMethodTest.js index 741d87da..0ab0d108 100644 --- a/packages/web3-core-method/tests/lib/methods/transaction/AbstractObservedTransactionMethodTest.js +++ b/packages/web3-core-method/tests/lib/methods/transaction/AbstractObservedTransactionMethodTest.js @@ -1,8 +1,10 @@ +import {formatters} from 'web3-core-helpers'; import PromiEvent from '../../../../lib/PromiEvent'; import TransactionObserver from '../../../../src/observers/TransactionObserver'; import AbstractObservedTransactionMethod from '../../../../lib/methods/transaction/AbstractObservedTransactionMethod'; // Mocks +jest.mock('web3-core-helpers'); jest.mock('../../../../src/observers/TransactionObserver'); /** @@ -43,7 +45,7 @@ describe('AbstractObservedTransactionMethodTest', () => { 'rpcMethod', 5, {}, - {}, + formatters, moduleInstanceMock, transactionObserverMock ); @@ -68,6 +70,8 @@ describe('AbstractObservedTransactionMethodTest', () => { it('calls execute with event listeners and is emitting the expected values', (done) => { providerMock.send.mockReturnValueOnce(Promise.resolve('transactionHash')); + formatters.outputTransactionFormatter.mockReturnValue({status: false}); + observableMock.subscribe = jest.fn((next, error, complete) => { next({confirmations: 0, receipt: {status: true}}); @@ -88,7 +92,11 @@ describe('AbstractObservedTransactionMethodTest', () => { expect(transactionHashCallback).toHaveBeenCalledWith('transactionHash'); - expect(confirmationCallback).toHaveBeenCalledWith(0, {status: true}); + expect(confirmationCallback).toHaveBeenCalledWith(0, {status: false}); + + expect(formatters.outputTransactionFormatter).toHaveBeenNthCalledWith(1, {status: true}); + + expect(formatters.outputTransactionFormatter).toHaveBeenCalledTimes(1); done(); }); From f21cc7ccf7003c6a122e6dcb40543471f5fea8a0 Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 22:15:26 +0200 Subject: [PATCH 08/10] SendRawTransactionMethodTest and SendTransactionMethodTest updated --- .../transaction/SendRawTransactionMethodTest.js | 14 +++++++++++++- .../transaction/SendTransactionMethodTest.js | 12 ++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/packages/web3-core-method/tests/src/methods/transaction/SendRawTransactionMethodTest.js b/packages/web3-core-method/tests/src/methods/transaction/SendRawTransactionMethodTest.js index a5b783c9..8622842d 100644 --- a/packages/web3-core-method/tests/src/methods/transaction/SendRawTransactionMethodTest.js +++ b/packages/web3-core-method/tests/src/methods/transaction/SendRawTransactionMethodTest.js @@ -1,5 +1,9 @@ import AbstractObservedTransactionMethod from '../../../../lib/methods/transaction/AbstractObservedTransactionMethod'; import SendRawTransactionMethod from '../../../../src/methods/transaction/SendRawTransactionMethod'; +import {formatters} from 'web3-core-helpers'; + +// Mocks +jest.mock('web3-core-helpers'); /** * SendRawTransactionMethod test @@ -8,7 +12,7 @@ describe('SendRawTransactionMethodTest', () => { let method; beforeEach(() => { - method = new SendRawTransactionMethod(null, null, null, {}); + method = new SendRawTransactionMethod(null, formatters, null, {}); }); it('constructor check', () => { @@ -16,4 +20,12 @@ describe('SendRawTransactionMethodTest', () => { expect(method.rpcMethod).toEqual('eth_sendRawTransaction'); }); + + it('calls afterExecution and returns the expected value', () => { + formatters.outputTransactionFormatter.mockReturnValueOnce({status: true}); + + expect(method.afterExecution({status: false})).toEqual({status: true}); + + expect(formatters.outputTransactionFormatter).toHaveBeenCalledWith({status: false}); + }); }); diff --git a/packages/web3-core-method/tests/src/methods/transaction/SendTransactionMethodTest.js b/packages/web3-core-method/tests/src/methods/transaction/SendTransactionMethodTest.js index 3ceb7acc..3c3292ea 100644 --- a/packages/web3-core-method/tests/src/methods/transaction/SendTransactionMethodTest.js +++ b/packages/web3-core-method/tests/src/methods/transaction/SendTransactionMethodTest.js @@ -6,9 +6,9 @@ import {formatters} from 'web3-core-helpers'; jest.mock('web3-core-helpers'); /** - * SendRawTransactionMethod test + * SendTransactionMethod test */ -describe('SendRawTransactionMethodTest', () => { +describe('SendTransactionMethodTest', () => { let method; beforeEach(() => { @@ -32,4 +32,12 @@ describe('SendRawTransactionMethodTest', () => { expect(formatters.inputTransactionFormatter).toHaveBeenCalledWith('tx', {}); }); + + it('calls afterExecution and returns the expected value', () => { + formatters.outputTransactionFormatter.mockReturnValueOnce({status: true}); + + expect(method.afterExecution({status: false})).toEqual({status: true}); + + expect(formatters.outputTransactionFormatter).toHaveBeenCalledWith({status: false}); + }); }); From 9531d5a9cd9d98a3f31429cdefd6fd34f7bdfb9c Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 22:27:48 +0200 Subject: [PATCH 09/10] SendContractMethodTest updated --- .../src/methods/SendContractMethodTest.js | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/packages/web3-eth-contract/tests/src/methods/SendContractMethodTest.js b/packages/web3-eth-contract/tests/src/methods/SendContractMethodTest.js index 29aca937..af78ac4b 100644 --- a/packages/web3-eth-contract/tests/src/methods/SendContractMethodTest.js +++ b/packages/web3-eth-contract/tests/src/methods/SendContractMethodTest.js @@ -1,3 +1,4 @@ +import {formatters} from 'web3-core-helpers'; import {EthSendTransactionMethod} from 'web3-core-method'; import AbiModel from '../../../src/models/AbiModel'; import AllEventsLogDecoder from '../../../src/decoders/AllEventsLogDecoder'; @@ -7,6 +8,7 @@ import SendContractMethod from '../../../src/methods/SendContractMethod'; jest.mock('../../../src/decoders/AllEventsLogDecoder'); jest.mock('../../../src/models/AbiItemModel'); jest.mock('../../../src/models/AbiModel'); +jest.mock('web3-core-helpers'); /** * SendContractMethod test @@ -21,7 +23,7 @@ describe('SendContractMethodTest', () => { new AllEventsLogDecoder(); allEventsLogDecoderMock = AllEventsLogDecoder.mock.instances[0]; - sendContractMethod = new SendContractMethod({}, {}, {}, {}, {}, {}, allEventsLogDecoderMock, abiModelMock); + sendContractMethod = new SendContractMethod({}, formatters, {}, {}, {}, {}, allEventsLogDecoderMock, abiModelMock); }); it('constructor check', () => { @@ -58,11 +60,28 @@ describe('SendContractMethodTest', () => { allEventsLogDecoderMock.decode.mockReturnValueOnce({event: 'MyEvent'}); + formatters.outputTransactionFormatter.mockReturnValueOnce({ + events: { + 0: {event: true}, + MyEvent: [ + { + event: 'MyEvent' + }, + { + event: 'MyEvent' + }, + { + event: 'MyEvent' + } + ] + } + }); + const mappedResponse = sendContractMethod.afterExecution(response); expect(mappedResponse).toEqual({ events: { - 0: {event: false}, + 0: {event: true}, MyEvent: [ { event: 'MyEvent' @@ -84,5 +103,22 @@ describe('SendContractMethodTest', () => { expect(allEventsLogDecoderMock.decode).toHaveBeenNthCalledWith(3, abiModelMock, {event: 'MyEvent'}); expect(allEventsLogDecoderMock.decode).toHaveBeenNthCalledWith(4, abiModelMock, {event: 'MyEvent'}); + + expect(formatters.outputTransactionFormatter).toHaveBeenCalledWith({ + events: { + 0: {event: false}, + MyEvent: [ + { + event: 'MyEvent' + }, + { + event: 'MyEvent' + }, + { + event: 'MyEvent' + } + ] + } + }); }); }); From 3c0cb3a46cc89a54f377d0f3fb928e9da635d90c Mon Sep 17 00:00:00 2001 From: Samuel Furter Date: Wed, 17 Apr 2019 22:32:47 +0200 Subject: [PATCH 10/10] UtilsTest updated --- packages/web3-utils/tests/src/UtilsTest.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3-utils/tests/src/UtilsTest.js b/packages/web3-utils/tests/src/UtilsTest.js index 11ea3416..797b0f11 100644 --- a/packages/web3-utils/tests/src/UtilsTest.js +++ b/packages/web3-utils/tests/src/UtilsTest.js @@ -461,7 +461,7 @@ describe('UtilsTest', () => { expect(() => { toWei(1, 'wei'); - }).toThrow('Please pass numbers as strings or BigNumber objects to avoid precision errors.'); + }).toThrow('Please pass numbers as strings or BN objects to avoid precision errors.'); }); it('calls utf8ToHex and returns the expected results', () => {