From 8e6c8faca122b91b137343a5b1b000f172c77304 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Thu, 7 Nov 2019 13:48:48 -0800 Subject: [PATCH 1/4] Defer to receipt status when checking OOG --- packages/web3-core-method/src/index.js | 6 ++++- test/e2e.method.send.js | 37 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/packages/web3-core-method/src/index.js b/packages/web3-core-method/src/index.js index 611cd91d12b..ee2f63f4af9 100644 --- a/packages/web3-core-method/src/index.js +++ b/packages/web3-core-method/src/index.js @@ -393,8 +393,12 @@ Method.prototype._confirmTransaction = function(defer, result, payload) { // CHECK for normal tx check for receipt only .then(function(receipt) { if (!isContractDeployment && !promiseResolved) { + + var hasStatus = receipt.status === false || receipt.status === true; + var isOOG = !hasStatus && gasProvided === utils.numberToHex(receipt.gasUsed); + if (!receipt.outOfGas && - (!gasProvided || gasProvided !== utils.numberToHex(receipt.gasUsed)) && + (!gasProvided || !isOOG) && (receipt.status === true || receipt.status === '0x1' || typeof receipt.status === 'undefined')) { defer.eventEmitter.emit('receipt', receipt); defer.resolve(receipt); diff --git a/test/e2e.method.send.js b/test/e2e.method.send.js index d9bfa9f1713..479729c64e4 100644 --- a/test/e2e.method.send.js +++ b/test/e2e.method.send.js @@ -35,6 +35,20 @@ describe('method.send [ @E2E ]', function() { assert(web3.utils.isHexStrict(receipt.transactionHash)); }); + it('succeeds when using a perfect estimate', async function(){ + var estimate = await instance + .methods + .setValue('1') + .estimateGas(); + + var receipt = await instance + .methods + .setValue('1') + .send({from: accounts[0], gas: estimate}); + + assert(receipt.status === true); + }); + it('errors on OOG', async function(){ try { await instance @@ -65,6 +79,29 @@ describe('method.send [ @E2E ]', function() { assert(receipt.status === false); } }); + + it('errors on revert using a perfect estimate', async function(){ + var estimate = await instance + .methods + .setValue('1') + .estimateGas(); + + try { + await instance + .methods + .reverts() + .send({from: accounts[0], gas: estimate}); + + assert.fail(); + + } catch(err){ + var receipt = utils.extractReceipt(err.message); + + assert(err.message.includes('revert')) + assert(receipt.status === false); + } + + }); }); describe('ws', function() { From 6673659d6b4eec011d197042f19227716bd2bd18 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Thu, 7 Nov 2019 13:52:46 -0800 Subject: [PATCH 2/4] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23365ae7665..aa3f4028c60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,5 +89,6 @@ Released with 1.0.0-beta.37 code base. ### Fixed +- Fix incorrectly errors on tx success when using perfect gas estimates - Fix TS types for eth.subscribe syncing, newBlockHeaders, pendingTransactions (#3159) - Improve web3-eth-abi decodeParameters error message (#3134) From b24dfd5c32c28d9a7863eb7f5c3bca23603a999c Mon Sep 17 00:00:00 2001 From: cgewecke Date: Thu, 7 Nov 2019 13:53:46 -0800 Subject: [PATCH 3/4] Missing issue # --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa3f4028c60..1db79cb90ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -89,6 +89,6 @@ Released with 1.0.0-beta.37 code base. ### Fixed -- Fix incorrectly errors on tx success when using perfect gas estimates +- Fix incorrectly errors on tx success when using perfect gas estimates (#3175) - Fix TS types for eth.subscribe syncing, newBlockHeaders, pendingTransactions (#3159) - Improve web3-eth-abi decodeParameters error message (#3134) From bafe3e96a60ae6cf88235cc170d63a6f4f8f3aef Mon Sep 17 00:00:00 2001 From: cgewecke Date: Fri, 8 Nov 2019 09:33:04 -0800 Subject: [PATCH 4/4] Remove 0x1 status check, incorrect test --- packages/web3-core-method/src/index.js | 2 +- test/e2e.method.send.js | 23 ----------------------- 2 files changed, 1 insertion(+), 24 deletions(-) diff --git a/packages/web3-core-method/src/index.js b/packages/web3-core-method/src/index.js index ee2f63f4af9..0a7bdb881da 100644 --- a/packages/web3-core-method/src/index.js +++ b/packages/web3-core-method/src/index.js @@ -399,7 +399,7 @@ Method.prototype._confirmTransaction = function(defer, result, payload) { if (!receipt.outOfGas && (!gasProvided || !isOOG) && - (receipt.status === true || receipt.status === '0x1' || typeof receipt.status === 'undefined')) { + (receipt.status === true || typeof receipt.status === 'undefined')) { defer.eventEmitter.emit('receipt', receipt); defer.resolve(receipt); diff --git a/test/e2e.method.send.js b/test/e2e.method.send.js index 479729c64e4..723f8cf3647 100644 --- a/test/e2e.method.send.js +++ b/test/e2e.method.send.js @@ -79,29 +79,6 @@ describe('method.send [ @E2E ]', function() { assert(receipt.status === false); } }); - - it('errors on revert using a perfect estimate', async function(){ - var estimate = await instance - .methods - .setValue('1') - .estimateGas(); - - try { - await instance - .methods - .reverts() - .send({from: accounts[0], gas: estimate}); - - assert.fail(); - - } catch(err){ - var receipt = utils.extractReceipt(err.message); - - assert(err.message.includes('revert')) - assert(receipt.status === false); - } - - }); }); describe('ws', function() {