Skip to content
This repository has been archived by the owner on Feb 26, 2024. It is now read-only.

Commit

Permalink
fix: handle eth_gasEstimate reverts correctly to prevent potential …
Browse files Browse the repository at this point in the history
…process crash (#4056)

Co-authored-by: Jeff Smale <6363749+jeffsmale90@users.noreply.github.com>
  • Loading branch information
davidmurdoch and jeffsmale90 committed Dec 19, 2022
1 parent 788c656 commit e71c184
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/chains/ethereum/ethereum/src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -960,7 +960,7 @@ export default class EthereumApi implements Api {
generateVM,
runArgs,
(err: Error, result: EstimateGasResult) => {
if (err) reject(err);
if (err) return void reject(err);
resolve(Quantity.from(result.gasEstimate));
}
);
Expand Down
45 changes: 45 additions & 0 deletions src/chains/ethereum/ethereum/tests/api/eth/estimateGas.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import assert from "assert";
import getProvider from "../../helpers/getProvider";

describe("api", () => {
describe("eth", () => {
describe("estimateGas", () => {
it("shouldn't raise an unhandled rejection when the transaction fails", async () => {
// see https://github.com/trufflesuite/ganache/pull/4056
const provider = await getProvider();
const [from] = await provider.request({
method: "eth_accounts",
params: []
});

const transaction = {
from,
// invalid bytecode
input: "0x1234"
};

let didRaiseUnhandledRejection = false;
const unhandledRejectionHandler = () =>
(didRaiseUnhandledRejection = true);
process.once("unhandledRejection", unhandledRejectionHandler);

try {
const estimatingGas = provider.request({
method: "eth_estimateGas",
params: [transaction]
});

await assert.rejects(estimatingGas);
await new Promise(resolve => setImmediate(resolve));

assert(
didRaiseUnhandledRejection === false,
"Shouldn't have raised an unhandledRejection"
);
} finally {
process.off("unhandledRejection", unhandledRejectionHandler);
}
});
});
});
});

0 comments on commit e71c184

Please sign in to comment.