avoid unnecessary binary search in gas estimation #876
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Change
Currently the
eth_estimateGas
RPC is slow with a p95 performance of3.5s
. This is because we need to binary search the best passinggasLimit
, which callseth_call
repeatedly, usually 5-8 times.However, in most cases if the contract doesn't have special logics to deal with gas, a
gasLimit
that is slightly more thangasUsed
should make it work. We only need to do binary search if that's not the case.So we can first check if
usedGas * 1.2
works, to avoid binary search in most cases, which should speed up the gas estimation, and respectively reduce node burden, by 5-8X .Also removed some gas related legacy codes
Test
Added tests to make sure it still works for odd gas contract whose passing gaslimit is much higher than actual used gas