When producing the next block, the previousBlockHeader.number + 1 needs to be used to query the transition forkSchedule.
This is because the list of validators associated with each forkSchedule may be a different set to the current block.
This commit changes the implementation for getValidatorsAfterBlock to support this and points getValidatorsAtHead at this implementation.
Note getValidatorsForBlock's forkSchedule query is unchanged since we have already mined the block at the point this is called (e.g. for RPCs qbft_getValidatorsBy...).
For TransactionValidatorProvider, we need to use the next block's contract address but still use the previous block's validators in the contract call itself.
Querying validators using afterBlock vs forBlock may yield different (blockNumber -> validatorAddresses) combinations when transitioning into CONTRACT mode.
There we also split TransactionValidatorProvider validatorCache into two caches.
Add special case to ForkingValidatorProvider (BlockValidatorProvider.hasValidatorOverridesForBlockNumber) to support transitioning to blockheader mode with some validator overrides. This might be needed if the current validator set loses quorum and we
are no longer able to vote new ones in.
New integration test cases for validatorselectionmode transitions:
- contract -> contract
- contract1 -> blockheader -> contract2
- contract1 -> blockheader with overridden validators -> contract2
Fixes https://github.com/hyperledger/besu/issues/2901
Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
* When tls is on, use passthrough framer and passthrough handshaker to avoid double encryption
Signed-off-by: Saravana Perumal Shanmugam <perusworld@linux.com>
* adds a new docker build focusing on providing tools for debugging
* updates the latest build to only include a jvm, not a full jdk as shipped for Java 17
Signed-off-by: Justin Florentine <justin+github@florentine.us>
* 2705 - logging unused request fields during serialization for JsonCallParameter class
- used the @JsonAnySetter marker annotation to catch unused request fields and log their values and class type
Signed-off-by: SivaTharun <kolasivatharun@gmail.com>
* 2705 - addressing review comments
Signed-off-by: SivaTharun <kolasivatharun@gmail.com>
* final on params
Signed-off-by: Sally MacFarlane <sally.macfarlane@consensys.net>
Co-authored-by: SivaTharun <kolasivatharun@gmail.com>
Co-authored-by: Siva Tharun Kola <SivaTharun@users.noreply.github.com>
* [2950] Support websocket binary frames
Signed-off-by: Frank Li <b439988l@gmail.com>
Co-authored-by: Stefan Pingel <16143240+pinges@users.noreply.github.com>
* catch exception and shorten warning log
Signed-off-by: Frank Li <b439988l@gmail.com>
Co-authored-by: Frank Li <frank@Franks-MacBook-Pro.local>
Co-authored-by: matkt <karim.t2am@gmail.com>
Co-authored-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Co-authored-by: Justin Florentine <justin+github@florentine.us>
Co-authored-by: Diego López León <dieguitoll@gmail.com>
Co-authored-by: garyschulte <garyschulte@gmail.com>
For operations where input length as a maximum, only send that amount of
data to the native methods.
Signed-off-by: Danno Ferrin (shemnon) <danno.ferrin@shemnon.com>
* reduce use of global quorum config
The use of the org.hyperledger.besu.config.GoQuorumOptions static
variable is ugly. In particular does changing its value during tests
cause flaky tests. To ameliorate the issue this commit
- removes unused code that did rely on GoQuorumOptions
- removes access to GoQuorumOptions deep in the call stack by looking
it up in the transaction validator instead
- change the TransactionDecoder to explicitly take the
goQuorumCompatbility flag as an argument where access to the
transaction validator is not easy
- rewriting all tests that did change the GoQuorumOptions by mocking
the option change instead.
Signed-off-by: Taccat Isid <taccatisid@protonmail.com>
* protect access to GoQuorum flag by getter and write once setter
Signed-off-by: Taccat Isid <taccatisid@protonmail.com>
* deduce goQuorum flag from privacyOptions
Signed-off-by: Taccat Isid <taccatisid@protonmail.com>
* remove unnecessary mocks from TransactionPoolTest
Signed-off-by: Taccat Isid <taccatisid@protonmail.com>
Co-authored-by: Sally MacFarlane <sally.macfarlane@consensys.net>
More EVM Speed Improvements aimed at improving MSTORE times.
* Move Memory from raw bytes to byte array
* Add calls for right packed partial value copy
* Remove `incrementProgramCounter` and move data into OperationResult
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
Before we set the account balance to maximum allowed, but this had
side effects in smart contracts.
Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net>
Create readOnlyValidatorProvider in QbftBesuControllerBuilder and pass into QbftJsonRpcMethods constructor (better than using protocolContext as is only used once when creating the RPCs
This requires storing transactionValidatorProvider in a field and relying on its earlier creation during createConsensusContext()
Fixes#2795
Signed-off-by: Simon Dudley <simon.dudley@consensys.net>
Always copy create code
Always copy the create code. Since it is memory bytes it is subject to
re-writing by the caller and all data would otherwise have to be treated
as mutable.
Signed-off-by: Danno Ferrin <danno.ferrin@gmail.com>
During the transition from contract mode to block header mode, when creating the extra data for a new block, we need to look ahead to the next block's voteProvider to obtain the nonEmpty one associated with the BlockValidatorProvider.
This only applies to ForkingValidatorProvider which is currently only used for QBFT. However, we don't want QBFT to know it's using a ForkingValidatorProvider. Therefore we need to implement getVoteProviderAfterBlock on the ValidatorProvider interface even though it's implementation is equivalent to getVoteProvider.
Signed-off-by: Simon Dudley <simon.dudley@consensys.net>