mirror of https://github.com/hyperledger/besu
An enterprise-grade Java-based, Apache 2.0 licensed Ethereum client https://wiki.hyperledger.org/display/besu
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tag:
Branch:
Tree:
d45f3ffac4
23.4.4-branch
4844-devnet-5b
5561migrate-tests-to-Junit5
CloseServerSocket
TransactionValidatorService
add-peer-dns
besu-for-fleet
bump_web3j
eip-4844-interop
github_ci
main
mega-eof
pectra-devnet-4
pectra-devnet3-block-110500-issue
reduceRetries
release-23.1.x
release-23.10.2
release-23.10.3
release-23.10.x
release-23.4.x
release-23.7.x
release-24.1.1
release-24.1.2
release-24.1.x
release-24.2.0
release-24.3.0-hotfix
release-24.3.2-hotfix
release-24.3.3-hotfix
release-24.4.0
release-24.5.0-rc1
release-24.5.0-rc2
release-24.5.3
release-24.7.0
revert-7203-patch-1
revert-7586-fixCHANGELOGtypo
sally-delete-me-2
sally-delete-me-testing-rules
sonarTour
tag-24.3.2
tessera_as_internal_process
test-dco1
test-dco2
test-dco3
verkle
0.8.0
0.8.0-RC1
0.8.0-RC2
0.8.1
0.8.2
0.8.3
0.8.4
0.8.5
0.9.0
0.9.1
1.0.0
1.0.0-RC1
1.0.1
1.0.2
1.0.3
1.1.0
1.1.0-RC1
1.1.1
1.1.2
1.1.3
1.1.4
1.2.0
1.2.0-RC1
1.2.1
1.2.2
1.2.3
1.2.4
1.3.0
1.3.0-RC1
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6
1.3.7
1.3.8
1.3.9
1.4.0
1.4.0-RC1
1.4.0-RC2
1.4.0-beta1
1.4.0-beta2
1.4.0-beta3
1.4.1
1.4.2
1.4.3
1.4.4
1.4.5
1.4.5-RC1
1.4.5-RC2
1.4.5-RC3
1.4.6
1.4.6-RC1
1.4.6-RC2
1.5.0
1.5.0-RC1
1.5.0-RC2
1.5.0-RC3
1.5.1
1.5.1-RC1
1.5.2
1.5.3
1.5.4
1.5.5
1626082128492
1626086821182
20.10.0
20.10.0-RC1
20.10.0-RC2
20.10.1
20.10.2
20.10.3
20.10.4
21.1.0
21.1.0-RC1
21.1.0-RC2
21.1.1
21.1.2
21.1.3
21.1.4
21.1.5
21.1.6
21.1.7
21.10.0
21.10.0-RC1
21.10.0-RC2
21.10.0-RC3
21.10.0-RC4
21.10.1
21.10.2
21.10.3
21.10.4
21.10.5
21.10.6
21.10.7
21.10.8
21.10.9
21.2.0-RC1
21.7.0
21.7.0-RC1
21.7.0-RC2
21.7.1
21.7.2
21.7.3
21.7.4
22.1.0
22.1.0-RC1
22.1.0-RC2
22.1.0-RC3
22.1.0-RC4
22.1.1
22.1.2
22.1.3
22.10.0
22.10.0-RC1
22.10.0-RC2
22.10.1
22.10.101
22.10.2
22.10.3
22.12.8.1
22.12.8.2
22.12.8.3
22.12.8.4
22.4.0
22.4.0-RC1
22.4.0-RC2
22.4.1
22.4.2
22.4.3
22.4.4
22.7.0
22.7.0-RC1
22.7.0-RC2
22.7.0-RC3
22.7.1
22.7.2
22.7.3
22.7.4
22.7.5
22.7.6
22.7.7
23.1.0
23.1.0-BETA
23.1.0-RC1
23.1.0-RC2
23.1.1
23.1.1-RC1
23.1.100
23.1.2
23.1.3
23.10.0
23.10.1
23.10.2
23.10.3
23.10.3-hotfix
23.4.0
23.4.0-RC1
23.4.1
23.4.2
23.4.3
23.4.4
23.7.0
23.7.1
23.7.2
23.7.3
24.1.0
24.1.1
24.1.2
24.10.0
24.10.0-RC1
24.10.0-RC2
24.2.0
24.2.0-RC1
24.2.0-RC2
24.2.0-RC3
24.2.0-RC4
24.3.0
24.3.0-hotfix
24.3.1
24.3.2
24.3.3
24.4.0
24.4.0-RC1
24.4.0-RC2
24.4.0-RC3
24.5.0
24.5.0-RC1
24.5.1
24.5.2
24.5.2-RC0
24.5.2-RC1
24.5.3
24.5.4
24.6.0
24.6.0-RC1
24.6.0-RC2
24.7.0
24.7.0-RC1
24.7.1
24.7.1-RC1
24.8.0
24.8.0-RC1
24.9.0
24.9.0-RC1
24.9.0-RC2
24.9.1
24.9.1-RC1
GHA-TESTRUN-1
GHA.TESTRUN.1
canary
dev
develop
${ noResults }
Danno Ferrin
1961b5d143
Our current EVM loop splits out cost, execution and halt evaluation. Flattening these three into one method results in a significant speedup in reference tests, which are EVM heavy. Mostly the cost, exceptionalHaltCondition, and execute are merged into one method, sharing calculations between the three. In fixed cost operations the merger is very simple AddOperation is a representative fixed cost operation. Check the gas, check other exceptional halts, do the work, return the result. In variable cost operations there is some value reads to be done before the cost is calculated. This is where a lot of the de-duplication occurs. CodeCopyOperation is a representative variable cost operation. JumpIOperation shows where this merger pays off. If the condition is zero then some exceptional halts don't need to be considered. But with the three way split each step couldn't consider such optimizations because the local data was lost between each call. Some cleanup was enabled by this. The old exceptional halt predicates were deleted and moved into each operation. Gas costs must be checked by the operation instead of globally, or we would lose state if we had to split into two methods and do the gas check shared. The OperandStack was flattened into a single class instead of an interface plus a single implementation. stack underflow and overflow are signaled via named exceptions and handled via catches instead of pre-checking the stack height. Since overflow/underflow is exceedingly rare in mainnet transactions java exceptions are the more performant means. Some of the APIs had lingering impacts on how some tests were run and the EVMTool (we cache operation cost in the message frame now.) Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com> |
4 years ago | |
---|---|---|
.. | ||
src/main | Flatten EVM Loop (#1192) | 4 years ago |
build.gradle | Support rocks DBs in EVMTool (#933) | 5 years ago |