Skip to content

Optimize performance and reduce memory when creating Quantity from scalar#10134

Merged
fab-10 merged 2 commits intobesu-eth:mainfrom
fab-10:optimize-quantity-to-string
Apr 8, 2026
Merged

Optimize performance and reduce memory when creating Quantity from scalar#10134
fab-10 merged 2 commits intobesu-eth:mainfrom
fab-10:optimize-quantity-to-string

Conversation

@fab-10
Copy link
Copy Markdown
Contributor

@fab-10 fab-10 commented Mar 30, 2026

PR description

While working on another PR, I found this easy optimization, when converting from numeric scalar to hex string, that saves on CPU and memory.

Before

Benchmark                                                                    (value)  Mode  Cnt     Score     Error   Units
QuantityCreateLongBenchmark.current                                                0  avgt    9    22.623 ±   0.493   ns/op
QuantityCreateLongBenchmark.current:gc.alloc.rate.norm                             0  avgt    9   160.000 ±   0.001    B/op
QuantityCreateLongBenchmark.current                                              255  avgt    9    33.097 ±   0.956   ns/op
QuantityCreateLongBenchmark.current:gc.alloc.rate.norm                           255  avgt    9   240.000 ±   0.001    B/op
QuantityCreateLongBenchmark.current                                            65535  avgt    9    35.835 ±   0.574   ns/op
QuantityCreateLongBenchmark.current:gc.alloc.rate.norm                         65535  avgt    9   240.000 ±   0.001    B/op
QuantityCreateLongBenchmark.current                                          1000000  avgt    9    55.658 ±   1.066   ns/op
QuantityCreateLongBenchmark.current:gc.alloc.rate.norm                       1000000  avgt    9   344.000 ±   0.001    B/op
QuantityCreateLongBenchmark.current                                 9007199254740991  avgt    9    53.856 ±   1.949   ns/op
QuantityCreateLongBenchmark.current:gc.alloc.rate.norm              9007199254740991  avgt    9   288.000 ±   0.001    B/op
QuantityCreateLongBenchmark.current                              9223372036854775807  avgt    9    56.503 ±   1.402   ns/op
QuantityCreateLongBenchmark.current:gc.alloc.rate.norm           9223372036854775807  avgt    9   296.000 ±   0.001    B/op

After

Benchmark                                                                    (value)  Mode  Cnt     Score     Error   Units
QuantityCreateLongBenchmark.simpleHexString                                        0  avgt    9     8.555 ±   0.196   ns/op
QuantityCreateLongBenchmark.simpleHexString:gc.alloc.rate.norm                     0  avgt    9    72.000 ±   0.001    B/op
QuantityCreateLongBenchmark.simpleHexString                                      255  avgt    9     9.012 ±   0.192   ns/op
QuantityCreateLongBenchmark.simpleHexString:gc.alloc.rate.norm                   255  avgt    9    72.000 ±   0.001    B/op
QuantityCreateLongBenchmark.simpleHexString                                    65535  avgt    9     9.551 ±   0.109   ns/op
QuantityCreateLongBenchmark.simpleHexString:gc.alloc.rate.norm                 65535  avgt    9    72.000 ±   0.001    B/op
QuantityCreateLongBenchmark.simpleHexString                                  1000000  avgt    9     9.604 ±   0.158   ns/op
QuantityCreateLongBenchmark.simpleHexString:gc.alloc.rate.norm               1000000  avgt    9    72.000 ±   0.001    B/op
QuantityCreateLongBenchmark.simpleHexString                         9007199254740991  avgt    9    12.739 ±   0.173   ns/op
QuantityCreateLongBenchmark.simpleHexString:gc.alloc.rate.norm      9007199254740991  avgt    9    88.000 ±   0.001    B/op
QuantityCreateLongBenchmark.simpleHexString                      9223372036854775807  avgt    9    13.257 ±   0.231   ns/op
QuantityCreateLongBenchmark.simpleHexString:gc.alloc.rate.norm   9223372036854775807  avgt    9    96.000 ±   0.001    B/op

Fixed Issue(s)

Thanks for sending a pull request! Have you done the following?

  • Checked out our contribution guidelines?
  • Considered documentation and added the doc-change-required label to this PR if updates are required.
  • Considered the changelog and included an update if required.
  • For database changes (e.g. KeyValueSegmentIdentifier) considered compatibility and performed forwards and backwards compatibility tests

Locally, you can run these tests to catch failures early:

  • spotless: ./gradlew spotlessApply
  • unit tests: ./gradlew build
  • acceptance tests: ./gradlew acceptanceTest
  • integration tests: ./gradlew integrationTest
  • reference tests: ./gradlew ethereum:referenceTests:referenceTests
  • hive tests: Engine or other RPCs modified?

@fab-10 fab-10 force-pushed the optimize-quantity-to-string branch 2 times, most recently from fc235a0 to d614a2f Compare March 31, 2026 10:04
@fab-10 fab-10 changed the title Optimize performance and reduce memory when creating Quantity from sc… Optimize performance and reduce memory when creating Quantity from scalar Mar 31, 2026
@fab-10 fab-10 force-pushed the optimize-quantity-to-string branch from d614a2f to 16721c2 Compare March 31, 2026 10:10
@fab-10 fab-10 marked this pull request as ready for review March 31, 2026 10:15
Copilot AI review requested due to automatic review settings March 31, 2026 10:16
…alar

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
@fab-10 fab-10 force-pushed the optimize-quantity-to-string branch from c9215da to 69bb6a8 Compare April 8, 2026 12:32
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
@fab-10 fab-10 force-pushed the optimize-quantity-to-string branch from 69bb6a8 to 6386877 Compare April 8, 2026 12:45
@fab-10 fab-10 merged commit a8dce17 into besu-eth:main Apr 8, 2026
33 checks passed
@fab-10 fab-10 deleted the optimize-quantity-to-string branch April 8, 2026 13:13
daniellehrner added a commit that referenced this pull request Apr 9, 2026
* Add SHL, SHR and SAR shift operations for EVM v2 (#10154)

* Add SHL, SHR and SAR implementations and benchmarks for EVM v2

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Upgrade RocksDB version from 9.7.3 to 10.6.2 (#9767)

* Upgrade RocksDB version from 9.7.3 to 10.6.2
* Fix JNI SIGSEGV crashes

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>

* Add missing verification metadata (#10198)

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Stream debug_traceBlock* responses directly to avoid OOM on large blocks (#9848)

* stream block traces on op code level

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* correctly parse default setting for memory tracing

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* fix initcode capture for failed create op codes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* created separate streaming debug tracer, for batch request fall back to accumulation in memory, adddress pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* execute tests from genesis and verify full trace

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* addressed pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* spotless

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* optimize trace streaming and struct log handling

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* spotless

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Fix remaining issues and add unit tests

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* added back pressure when writing to the socket and reduced the buffer size to work better with netty's default buffer size

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* improve error handling by deferring to send the header only when data is available, allows to send the proper error codes during setup

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* compactHex candidate comparison

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* wire in more performant hex writer

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* introduce separate timeout for streaming calls, defaults to 10 minutes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* spotless

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Fix streamin/accumulating output parity, added missing refund field, corrected error format, reason encoding, returnValue prefix, and precompile gasCost, with equivalence tests between both

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* revert accidental removal of 0x prefix

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* pad memory bytes to 32 bytes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

---------

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Co-authored-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Optimize performance and reduce memory when creating Quantity from scalar (#10134)

* Optimize performance and reduce memory when creating Quantity from scalar

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Benchmark other implementations

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* snap sync - apply BALs before flat db heal (#10151)

Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>

* Remove dryRunDetector workaround methods from unit tests (#10201)

* Remove dryRunDetector workaround methods from unit tests

The dryRunDetector methods were added as a workaround for a Gradle issue
that prevented @ParameterizedTest classes from being selected when running
with --dry-run. Since the issue is fixed and --dry-run is no longer used,
these methods are no longer needed.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Remove dryRunDetector workaround from acceptance tests too

The Gradle issue is confirmed fixed, so the workaround is no longer
needed anywhere, including acceptance tests.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* preserve state gas reservoir for the top level frame in case of OOG (#10205)

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

---------

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>
Co-authored-by: ahamlat <ameziane.hamlat@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Co-authored-by: Miroslav Kovář <miroslavkovar@protonmail.com>
daniellehrner added a commit that referenced this pull request Apr 10, 2026
* Add SHL, SHR and SAR shift operations for EVM v2 (#10154)

* Add SHL, SHR and SAR implementations and benchmarks for EVM v2

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Upgrade RocksDB version from 9.7.3 to 10.6.2 (#9767)

* Upgrade RocksDB version from 9.7.3 to 10.6.2
* Fix JNI SIGSEGV crashes

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>

* Add missing verification metadata (#10198)

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Stream debug_traceBlock* responses directly to avoid OOM on large blocks (#9848)

* stream block traces on op code level

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* correctly parse default setting for memory tracing

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* fix initcode capture for failed create op codes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* created separate streaming debug tracer, for batch request fall back to accumulation in memory, adddress pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* execute tests from genesis and verify full trace

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* addressed pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* spotless

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* optimize trace streaming and struct log handling

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* spotless

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Fix remaining issues and add unit tests

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* added back pressure when writing to the socket and reduced the buffer size to work better with netty's default buffer size

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* improve error handling by deferring to send the header only when data is available, allows to send the proper error codes during setup

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* compactHex candidate comparison

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* wire in more performant hex writer

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* introduce separate timeout for streaming calls, defaults to 10 minutes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* spotless

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Fix streamin/accumulating output parity, added missing refund field, corrected error format, reason encoding, returnValue prefix, and precompile gasCost, with equivalence tests between both

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* revert accidental removal of 0x prefix

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* pad memory bytes to 32 bytes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

---------

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Co-authored-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Optimize performance and reduce memory when creating Quantity from scalar (#10134)

* Optimize performance and reduce memory when creating Quantity from scalar

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Benchmark other implementations

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* snap sync - apply BALs before flat db heal (#10151)

Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>

* Remove dryRunDetector workaround methods from unit tests (#10201)

* Remove dryRunDetector workaround methods from unit tests

The dryRunDetector methods were added as a workaround for a Gradle issue
that prevented @ParameterizedTest classes from being selected when running
with --dry-run. Since the issue is fixed and --dry-run is no longer used,
these methods are no longer needed.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Remove dryRunDetector workaround from acceptance tests too

The Gradle issue is confirmed fixed, so the workaround is no longer
needed anywhere, including acceptance tests.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* preserve state gas reservoir for the top level frame in case of OOG (#10205)

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Enable execution processor on PoA networks with system contract addresses (#10196)

* enable the prague execution processor for poa networks that have the systems contract addresses set in their genesis file

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Fix engine_getPayloadV1 to return -38001 instead of -32001 for unknown payloadId (#10179)

The Engine API spec requires error code -38001 (Unknown payload) when
engine_getPayloadV1 is called with an unrecognized payloadId. Besu was
incorrectly returning -32001 (Resource not found), which is a non-standard
error code that may cause interoperability issues with consensus layer clients.

Fixes #10174

Signed-off-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>

* Exclude IntelliJ bin/default output from Spotless shell script check (#10210)

When IntelliJ syncs a Gradle project without build delegation, it copies
processed resources (including reference test shell scripts from the
submodule) into bin/default/. Spotless then finds these copies and
incorrectly flags them for missing license headers, while CI never sees
bin/default/ since it runs bare Gradle.

Add '**/bin/default/**' to the ShellScripts targetExclude, matching the
existing pattern used for other generated/external content.

Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* Missing memory presence check (#10213)

* Call lastFrame.getMemory().isPresent() before calling lastFrame.getMemory().get().length to avoid NPE

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>
Signed-off-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>
Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
Co-authored-by: ahamlat <ameziane.hamlat@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Co-authored-by: Miroslav Kovář <miroslavkovar@protonmail.com>
Co-authored-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>
Co-authored-by: Simon Dudley <simon.dudley@consensys.net>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
daniellehrner added a commit that referenced this pull request Apr 15, 2026
* Add SHL, SHR and SAR shift operations for EVM v2 (#10154)

* Add SHL, SHR and SAR implementations and benchmarks for EVM v2

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Upgrade RocksDB version from 9.7.3 to 10.6.2 (#9767)

* Upgrade RocksDB version from 9.7.3 to 10.6.2
* Fix JNI SIGSEGV crashes

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>

* Add missing verification metadata (#10198)

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Stream debug_traceBlock* responses directly to avoid OOM on large blocks (#9848)

* stream block traces on op code level

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* correctly parse default setting for memory tracing

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* fix initcode capture for failed create op codes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* created separate streaming debug tracer, for batch request fall back to accumulation in memory, adddress pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* execute tests from genesis and verify full trace

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* addressed pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* spotless

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* optimize trace streaming and struct log handling

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* spotless

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Fix remaining issues and add unit tests

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* added back pressure when writing to the socket and reduced the buffer size to work better with netty's default buffer size

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* improve error handling by deferring to send the header only when data is available, allows to send the proper error codes during setup

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* compactHex candidate comparison

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* wire in more performant hex writer

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* introduce separate timeout for streaming calls, defaults to 10 minutes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* spotless

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Fix streamin/accumulating output parity, added missing refund field, corrected error format, reason encoding, returnValue prefix, and precompile gasCost, with equivalence tests between both

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* revert accidental removal of 0x prefix

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* pad memory bytes to 32 bytes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

---------

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Co-authored-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Optimize performance and reduce memory when creating Quantity from scalar (#10134)

* Optimize performance and reduce memory when creating Quantity from scalar

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Benchmark other implementations

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* snap sync - apply BALs before flat db heal (#10151)

Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>

* Remove dryRunDetector workaround methods from unit tests (#10201)

* Remove dryRunDetector workaround methods from unit tests

The dryRunDetector methods were added as a workaround for a Gradle issue
that prevented @ParameterizedTest classes from being selected when running
with --dry-run. Since the issue is fixed and --dry-run is no longer used,
these methods are no longer needed.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Remove dryRunDetector workaround from acceptance tests too

The Gradle issue is confirmed fixed, so the workaround is no longer
needed anywhere, including acceptance tests.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* preserve state gas reservoir for the top level frame in case of OOG (#10205)

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Enable execution processor on PoA networks with system contract addresses (#10196)

* enable the prague execution processor for poa networks that have the systems contract addresses set in their genesis file

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Fix engine_getPayloadV1 to return -38001 instead of -32001 for unknown payloadId (#10179)

The Engine API spec requires error code -38001 (Unknown payload) when
engine_getPayloadV1 is called with an unrecognized payloadId. Besu was
incorrectly returning -32001 (Resource not found), which is a non-standard
error code that may cause interoperability issues with consensus layer clients.

Fixes #10174

Signed-off-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>

* Exclude IntelliJ bin/default output from Spotless shell script check (#10210)

When IntelliJ syncs a Gradle project without build delegation, it copies
processed resources (including reference test shell scripts from the
submodule) into bin/default/. Spotless then finds these copies and
incorrectly flags them for missing license headers, while CI never sees
bin/default/ since it runs bare Gradle.

Add '**/bin/default/**' to the ShellScripts targetExclude, matching the
existing pattern used for other generated/external content.

Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>

* Missing memory presence check (#10213)

* Call lastFrame.getMemory().isPresent() before calling lastFrame.getMemory().get().length to avoid NPE

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* feat: add transactionReceipts subscription support in eth_subscribe #… (#10190)

Signed-off-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>

* remove 2nd definition of forceCaptureMem

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Exclude IntelliJ generated dir from spotless solidity (#10223)

Signed-off-by: Simon Dudley <simon.dudley@consensys.net>

* ci check to make sure that all libraries have their source code verified as well (#10217)

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Implement aggregation in pipeline service (#10202)

Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>

* Add enableMemory parameter to debug_traceTransaction and debug_traceBlockByNumber (#10169)

* Add enableMemory parameter to debug_traceTransaction

Adds the enableMemory param (default false) to TransactionTraceParams.
When both enableMemory and disableMemory are provided, enableMemory
takes precedence.

Ref: #10115

Signed-off-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>

* Update CHANGELOG for enableMemory parameter

Signed-off-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>

---------

Signed-off-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>

* Exclude halt-burned gas from block regular gas (#10225)

* Exclude halt-burned gas from block regular gas

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Add contributor call agenda issue template (#10232)

* Add contributor call agenda issue template

---------

Signed-off-by: jflo <justin+github@florentine.us>
Signed-off-by: Justin Florentine <justin+github@florentine.us>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Improve block proposal cancellation to (best effort) avoid concurrency issues (#10219)

* Fix concurrency issues when block proposal is cancelled during tx selection

When block creation is cancelled or times out, the selection thread may still
be running briefly. This change adds a CountDownLatch to internal tx selection
(mirroring the existing plugin selection mechanism) and extracts a shared
waitForCancellationToBeProcessed method that correctly handles negative
remaining-time values and logs the outcome of the wait.

Exception handling in both selection phases is split by type so that
rollback() is only called for ExecutionException, where the selection thread
is guaranteed to have finished. CancellationException and InterruptedException
no longer trigger a rollback, removing a potential race on shared world state.

In MergeCoordinator, exceptions thrown after a cancellation are now logged at
INFO with guidance to report if unexpected, rather than at WARN, reducing noise
from the expected concurrency edge cases during block proposal cancellation.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Add unit tests for concurrency fixes and repair early-return regression

- Add test verifying CancellationException during plugin selection is
  handled gracefully (no exception propagated to caller)
- Add test verifying internal selection CountDownLatch causes
  buildTransactionListForBlock() to wait for the selection thread
- Add test verifying Throwable thrown after block creation cancellation
  is handled gracefully (logged at INFO, not propagated)
- Remove early return from timeLimitedSelection when isCancelled is
  true: the guard was causing validPendingTransactionIsNotIncludedIf
  SelectionCancelled to fail because evaluatePendingTransaction (which
  marks each tx as SELECTION_CANCELLED) was never reached; the check
  is unnecessary since evaluatePendingTransaction already handles
  isCancelled on every iteration without touching world state

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Feature add block import trace to eth simulate (#10211)

* initial addition of optional block import tracing to eth_simulateV1
* move block traceEnd prior to trielog write


---------

Signed-off-by: garyschulte <garyschulte@gmail.com>
Co-authored-by: Justin Florentine <justin+github@florentine.us>

* Handle peer permission updates in PeerDiscoveryAgentV5 (#10193)

* Handle peer permission updates in PeerDiscoveryAgentV5
* Remove apparently unneeded mock calls
* Refactor to reduce code deduplication

---------

Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>

---------

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>
Signed-off-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>
Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
Signed-off-by: jflo <justin+github@florentine.us>
Signed-off-by: Justin Florentine <justin+github@florentine.us>
Signed-off-by: garyschulte <garyschulte@gmail.com>
Signed-off-by: Matilda Clerke <matilda.clerke@consensys.net>
Co-authored-by: ahamlat <ameziane.hamlat@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Co-authored-by: Miroslav Kovář <miroslavkovar@protonmail.com>
Co-authored-by: Vivek Singh Solanki <viveksolanki0509@gmail.com>
Co-authored-by: Simon Dudley <simon.dudley@consensys.net>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Justin Florentine <justin+github@florentine.us>
Co-authored-by: garyschulte <garyschulte@gmail.com>
Co-authored-by: Matilda-Clerke <matilda.clerke@consensys.net>
daniellehrner added a commit to daniellehrner/besu that referenced this pull request Apr 28, 2026
* Add SHL, SHR and SAR shift operations for EVM v2 (besu-eth#10154)

* Add SHL, SHR and SAR implementations and benchmarks for EVM v2

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Upgrade RocksDB version from 9.7.3 to 10.6.2 (besu-eth#9767)

* Upgrade RocksDB version from 9.7.3 to 10.6.2
* Fix JNI SIGSEGV crashes

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>

* Add missing verification metadata (besu-eth#10198)

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Stream debug_traceBlock* responses directly to avoid OOM on large blocks (besu-eth#9848)

* stream block traces on op code level

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* correctly parse default setting for memory tracing

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* fix initcode capture for failed create op codes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* created separate streaming debug tracer, for batch request fall back to accumulation in memory, adddress pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* execute tests from genesis and verify full trace

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* addressed pr comments

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* spotless

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* optimize trace streaming and struct log handling

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* spotless

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Fix remaining issues and add unit tests

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>

* added back pressure when writing to the socket and reduced the buffer size to work better with netty's default buffer size

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* improve error handling by deferring to send the header only when data is available, allows to send the proper error codes during setup

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* compactHex candidate comparison

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* wire in more performant hex writer

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* introduce separate timeout for streaming calls, defaults to 10 minutes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* spotless

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* Fix streamin/accumulating output parity, added missing refund field, corrected error format, reason encoding, returnValue prefix, and precompile gasCost, with equivalence tests between both

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* revert accidental removal of 0x prefix

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

* pad memory bytes to 32 bytes

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

---------

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Co-authored-by: Ameziane H. <ameziane.hamlat@consensys.net>

* Optimize performance and reduce memory when creating Quantity from scalar (besu-eth#10134)

* Optimize performance and reduce memory when creating Quantity from scalar

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Benchmark other implementations

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* snap sync - apply BALs before flat db heal (besu-eth#10151)

Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>

* Remove dryRunDetector workaround methods from unit tests (besu-eth#10201)

* Remove dryRunDetector workaround methods from unit tests

The dryRunDetector methods were added as a workaround for a Gradle issue
that prevented @ParameterizedTest classes from being selected when running
with --dry-run. Since the issue is fixed and --dry-run is no longer used,
these methods are no longer needed.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* Remove dryRunDetector workaround from acceptance tests too

The Gradle issue is confirmed fixed, so the workaround is no longer
needed anywhere, including acceptance tests.

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

---------

Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>

* preserve state gas reservoir for the top level frame in case of OOG (besu-eth#10205)

Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>

---------

Signed-off-by: Ameziane H. <ameziane.hamlat@consensys.net>
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Signed-off-by: daniellehrner <daniel.lehrner@consensys.net>
Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>
Co-authored-by: ahamlat <ameziane.hamlat@consensys.net>
Co-authored-by: Sally MacFarlane <macfarla.github@gmail.com>
Co-authored-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Co-authored-by: Miroslav Kovář <miroslavkovar@protonmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants