-
Notifications
You must be signed in to change notification settings - Fork 893
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merge main into verkle #8332
base: verkle
Are you sure you want to change the base?
Merge main into verkle #8332
Conversation
* prague fee market for blob gas Signed-off-by: garyschulte <[email protected]> * Fix wiring and unit test Signed-off-by: Simon Dudley <[email protected]> --------- Signed-off-by: garyschulte <[email protected]> Signed-off-by: Simon Dudley <[email protected]> Co-authored-by: Simon Dudley <[email protected]>
This EIP was removed and equivalent functionality replaced by EIP-7840. --- Revert "Rename targetBlobCount to targetBlobsPerBlock (hyperledger#7981)" This reverts commit 1671306. Revert "EIP-7742: Add target_blob_count to block header (hyperledger#7808)" This reverts commit f855d5b. Signed-off-by: Simon Dudley <[email protected]>
* Reimplement EthereumNodeRecord and remove dependency on tuweni-devp2p * Refactor EthereumNodeRecord for DNSDaemon * Update EthereumNodeRecord to use Besu RLP * additional unit tests * Convert ENR to Java record * regenerate equals and hashcode for enr record --------- Signed-off-by: Usman Saleem <[email protected]>
* Update HISTORY_STORAGE_ADDRESS and HISTORY_SERVE_WINDOW for EIP-2935 hyperledger#8061 * Update HISTORY_STORAGE_ADDRESS and genesis code in tests. Even for unrelated tests, this has a knock-on impact on the state root due to the history storage account being created when the BlockHashProcessor runs for block 1 Signed-off-by: Simon Dudley <[email protected]>
* 7311: Add PeerTask system for use in future PRs Signed-off-by: Matilda Clerke <[email protected]> * 7311: Clean up some warnings Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add feature toggle for enabling use of the peertask system where available Signed-off-by: Matilda Clerke <[email protected]> * 7311: Remove log used for testing, apply spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add private constructor to PeerTaskFeatureToggle to prevent instantiation Signed-off-by: Matilda Clerke <[email protected]> * 7311: Switch to logging a warning instead of throwing an exception when initializing PeerTaskFeatureToggle multiple times Signed-off-by: Matilda Clerke <[email protected]> * 7311: Update javadoc to match previous commit Signed-off-by: Matilda Clerke <[email protected]> * 7311: spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix broken BesuCommandTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: add class Signed-off-by: Matilda Clerke <[email protected]> * 7311: Move PeerTaskFeatureToggle to more appropriate location Signed-off-by: Matilda Clerke <[email protected]> * 7311: add X prefix to peertask-system-enabled Signed-off-by: Matilda Clerke <[email protected]> * 7311: Move --Xpeertask-system-enabled out of BesuCommand and make hidden Signed-off-by: Matilda Clerke <[email protected]> * 7311: spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add GetReceiptsFromPeerTask Signed-off-by: Matilda Clerke <[email protected]> * 7311: Move isPeerTaskSystemEnabled to SynchronizerOptions Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix javadoc issue Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix javadoc issue Signed-off-by: Matilda Clerke <[email protected]> * 7311: Move PeerTaskFeatureToggleTestHelper to TestUtil and fix RunnerTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Remove PeerTaskFeatureToggle in favor of including isPeerTaskSystemEnabled in SynchronizerConfiguration Signed-off-by: Matilda Clerke <[email protected]> * 7311: Adjust to the removal of PeerTaskFeatureToggle and use SynchronizerConfiguration to get the toggle instead Signed-off-by: Matilda Clerke <[email protected]> * 7311: Reduce timeout in PeerTaskRequestSender to 5s Signed-off-by: Matilda Clerke <[email protected]> * 7311: Refactor PeerManager to be an interface Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix up compile errors after merge Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix MetricsAcceptanceTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix MetricsAcceptanceTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix DownloadReceiptsStep when using peer task system Signed-off-by: Matilda Clerke <[email protected]> * 7311: Rename PeerManager to PeerSelector Signed-off-by: Matilda Clerke <[email protected]> * 7311: Reword PeerSelector javadoc to avoid implementation details Signed-off-by: Matilda Clerke <[email protected]> * 7311: Use ConcurrentHashMap in DefaultPeerSelector Signed-off-by: Matilda Clerke <[email protected]> * 7311: Reword trace log in DefaultPeerSelector Signed-off-by: Matilda Clerke <[email protected]> * 7311: Remove unused imports Signed-off-by: Matilda Clerke <[email protected]> * 7311: Use a 1 second delay between retries in PeerTaskExecutor to match old implementation Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add testGetPeerButNoPeerMatchesFilter to DefaultPeerSelectorTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add testGetPeerButNoPeerMatchesFilter to DefaultPeerSelectorTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix MetricsAcceptanceTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix MetricsAcceptanceTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: Modify PeerTaskExecutor metric to include response time from peer Signed-off-by: Matilda Clerke <[email protected]> * 7311: Use SubProtocol instead of subprotocol name string in PeerTask Signed-off-by: Matilda Clerke <[email protected]> * 7311: rename timing context to ignored to prevent intellij warnings Signed-off-by: Matilda Clerke <[email protected]> * 7311: Use constants for number of retries Signed-off-by: Matilda Clerke <[email protected]> * 7311: Convert PeerTaskExecutorResult to a record Signed-off-by: Matilda Clerke <[email protected]> * 7311: Rename PeerTaskBehavior to PeerTaskRetryBehavior Signed-off-by: Matilda Clerke <[email protected]> * 7311: Move peer selection logic to PeerSelector Signed-off-by: Matilda Clerke <[email protected]> * 7311: spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix up everything broken after merge Signed-off-by: Matilda Clerke <[email protected]> * 7311: Attempt to improve performance of peer task system in pipeline Signed-off-by: Matilda Clerke <[email protected]> * 7311: fix compile check Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix broken workflow Signed-off-by: Matilda Clerke <[email protected]> * 7311: Reduce logging in JsonRpcExecutor to trace level Signed-off-by: Matilda Clerke <[email protected]> * 7311: More changes in DownloadReceiptsStep Signed-off-by: Matilda Clerke <[email protected]> * 7311: Rework DownloadReceiptsStep Signed-off-by: Matilda Clerke <[email protected]> * 7311: Make changes as discussed in walkthrough meeting Remove DefaultPeerSelector, make EthPeers implement PeerSelector interface, and add PeerTask.getPeerRequirementFilter Signed-off-by: Matilda Clerke <[email protected]> * 7311: Update after merge and make discussed changes from walkthrough discussion Signed-off-by: Matilda Clerke <[email protected]> * 7311: Change to regular HashMap Signed-off-by: Matilda Clerke <[email protected]> * 7311: Remove runtime exception again Signed-off-by: Matilda Clerke <[email protected]> * 7311: Rename getPeerTaskBehavior to getPeerTaskRetryBehavior Signed-off-by: Matilda Clerke <[email protected]> * 7311: Rename getPeerTaskBehavior to getPeerTaskRetryBehavior Signed-off-by: Matilda Clerke <[email protected]> * 7311: Rework PeerTaskExecutor retry system to be 0-based Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix up compile errors after merge Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix broken DownloadReceiptsStepTest test Signed-off-by: Matilda Clerke <[email protected]> * 7311: Move GetReceipts to services worker for parallelism Signed-off-by: Matilda Clerke <[email protected]> * 7311: Refactor peer task system usage in DownloadReceiptsStep to better match old system Signed-off-by: Matilda Clerke <[email protected]> * 7311: Remove unused async methods in PeerTaskExecutor Signed-off-by: Matilda Clerke <[email protected]> * 7311: Return Optional<EthPeer> in PeerSelector.getPeer and utilise existing peer selection behavior in EthPeers Signed-off-by: Matilda Clerke <[email protected]> * 7311: Update after merge Signed-off-by: Matilda Clerke <[email protected]> * 7311: Redo getPeer again to include hasAvailableRequestCapacity check Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add protocol spec supplier to GetReceiptsFromPeerTask Signed-off-by: Matilda Clerke <[email protected]> * 7311: Rework getPeer again to use LEAST_TO_MOST_BUSY comparator Signed-off-by: Matilda Clerke <[email protected]> * 7311: Import PeerNotConnected class instead of using fully qualified class name Signed-off-by: Matilda Clerke <[email protected]> * 7311: Change to specifying retry counts in PeerTask instead of behavior enums Signed-off-by: Matilda Clerke <[email protected]> * 7311: clean up after merge Signed-off-by: Matilda Clerke <[email protected]> * 7311: clean up after merge Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix up javadoc Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add additional metrics to PeerTaskExecutor Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add Predicate to PeerTask to check for partial success Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix incorrect name on isPartialSuccessTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: Implement isPartialSuccess and add unit tests Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add partialSuccessCounter and inflightRequestGauge in PeerTaskExecutor Signed-off-by: Matilda Clerke <[email protected]> * 7311: Also filter by whether a peer is fully validated Signed-off-by: Matilda Clerke <[email protected]> * 7311: Remove unneeded throws in RunnerTest Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix up inflight requests gauge in PeerTaskExecutor Signed-off-by: Matilda Clerke <[email protected]> * 7311: Update plugin api hash Signed-off-by: Matilda Clerke <[email protected]> * 7311: Update plugin api hash Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add javadoc to LabelledGauge.isLabelsObserved Signed-off-by: Matilda Clerke <[email protected]> * 7311: Update plugin-api hash Signed-off-by: Matilda Clerke <[email protected]> * 7311: Update changelog Signed-off-by: Matilda Clerke <[email protected]> * 7311: Handle headers with no receipts as a special case in DownloadReceiptsStep Signed-off-by: Matilda Clerke <[email protected]> * 7311: Complete merge Signed-off-by: Matilda Clerke <[email protected]> * 7311: Use taskName instead of className for labelNames Signed-off-by: Matilda Clerke <[email protected]> * 7311: Use snake_case for metric names Signed-off-by: Matilda Clerke <[email protected]> * 7311: Use _total metric name suffix Signed-off-by: Matilda Clerke <[email protected]> * 7311: rework partial success handling Signed-off-by: Matilda Clerke <[email protected]> * 7311: Update GetReceiptsFromPeerTask with partialSuccess changes Signed-off-by: Matilda Clerke <[email protected]> * 7311: Add default implementation to LabelledGauge.isLabelsObserved Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix broken unit test Signed-off-by: Matilda Clerke <[email protected]> * 7311: Rename parseResponse to processResponse Signed-off-by: Matilda Clerke <[email protected]> * add possibility to use the new peer task system when downloading the bodies Signed-off-by: [email protected] <[email protected]> * fix loop Signed-off-by: [email protected] <[email protected]> * 7311: Wrap peer task system usage in ethScheduler call to match other usages Signed-off-by: Matilda Clerke <[email protected]> * small fixes Signed-off-by: [email protected] <[email protected]> * update API change Signed-off-by: [email protected] <[email protected]> * spotless Signed-off-by: [email protected] <[email protected]> * 7311: apply spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Move check for empty trie hash into GetReceiptsFromPeerTask and update unit test to test for this functionality Signed-off-by: Matilda Clerke <[email protected]> * 7311: spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix compile issue after merge Signed-off-by: Matilda Clerke <[email protected]> * 7311: Remove BodyValidator and update code and test to match Signed-off-by: Matilda Clerke <[email protected]> * 7311: spotless Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix up pre-fill and add test to test failure scenario Signed-off-by: Matilda Clerke <[email protected]> * 7311: Use ProtocolSchedule.anyMatch to find if any ProtocolSpecs are PoS, remove new usages of currentProtocolSpecSupplier Signed-off-by: Matilda Clerke <[email protected]> * 7311: Only attempt to remove headers on successful requests Signed-off-by: Matilda Clerke <[email protected]> * 7311: Fix broken stuff after merge Signed-off-by: Matilda Clerke <[email protected]> * spotless Signed-off-by: [email protected] <[email protected]> * Fix up compile errors after merge Signed-off-by: Matilda Clerke <[email protected]> * Add PeerTaskExecutor usage for GetBodies in DownloadHeaderSequenceTask Signed-off-by: Matilda Clerke <[email protected]> * Add PeerTaskExecutor usage for GetBodies in ForwardSyncStep and apply spotless Signed-off-by: Matilda Clerke <[email protected]> * Allow custom retries against other peers in GetBodiesFromPeerTask Signed-off-by: Matilda Clerke <[email protected]> * Fix infinite loop in CheckPointSyncChainDownloaderTest Signed-off-by: Matilda Clerke <[email protected]> * spotless Signed-off-by: Matilda Clerke <[email protected]> * Update CompleteBlocksWithPeerTask.getBlocks to retrieveBlocksFromPeers and add javadoc Signed-off-by: Matilda Clerke <[email protected]> * Add javadoc to GetBodiesFromPeerTask Signed-off-by: Matilda Clerke <[email protected]> * 7582: Simplify withdrawals validation Signed-off-by: Matilda Clerke <[email protected]> --------- Signed-off-by: Matilda Clerke <[email protected]> Signed-off-by: [email protected] <[email protected]> Co-authored-by: Sally MacFarlane <[email protected]> Co-authored-by: [email protected] <[email protected]>
Signed-off-by: Gabriel-Trintinalia <[email protected]>
* implement the proposed gas changes for bls / eip-2537 for pectra-devnet-5 * disable eip-2537 testing until we have new artifacts that reflect pectra gas costs Signed-off-by: garyschulte <[email protected]>
… txpool (hyperledger#8018) Signed-off-by: Fabio Di Fabio <[email protected]>
…rtBlock calls (hyperledger#8096) Signed-off-by: Luis Pinto <[email protected]>
Signed-off-by: Karim Taam <[email protected]>
Signed-off-by: Gabriel-Trintinalia <[email protected]>
…for Pectra (hyperledger#8101) Signed-off-by: Fabio Di Fabio <[email protected]>
…edger#8091) * Refactor BlockHashOperation block height check into Operation Refactor the 4 different places block height is checked across Besu into the BlockHashOperation. Add support to make the lookback range configurable in the BlockHashLookup interface, but default it to 256. Signed-off-by: Danno Ferrin <[email protected]> * spotless Signed-off-by: Danno Ferrin <[email protected]> * javadoc Signed-off-by: Danno Ferrin <[email protected]> * Update Unit Tests to use the operation. Signed-off-by: Danno Ferrin <[email protected]> * Update Unit Tests to use the operation. Signed-off-by: Danno Ferrin <[email protected]> --------- Signed-off-by: Danno Ferrin <[email protected]>
…edger#8112) Signed-off-by: Luis Pinto <[email protected]>
* Add head execution time metric during new payload execution * Change the metric value only if the block was executed sucessfully Signed-off-by: Ameziane H. <[email protected]>
Signed-off-by: Sally MacFarlane <[email protected]>
* add workflow to verify artifacts Signed-off-by: Joshua Fernandes <[email protected]> * curate list of artifacts based on PR review Signed-off-by: Joshua Fernandes <[email protected]> * make the artifacts list simple Signed-off-by: Joshua Fernandes <[email protected]> --------- Signed-off-by: Joshua Fernandes <[email protected]> Co-authored-by: Sally MacFarlane <[email protected]>
…8116) Support authorizationList parsing in reference tests for execution-spec-tests Allow zero chainId Signed-off-by: Simon Dudley <[email protected]>
…dger#8099) Collect trielog rolling exceptions and display upon state root mismatch Signed-off-by: Simon Dudley <[email protected]>
- Change debug_traceBlockByNumber implementation by using a pipeline - Change the defaults to match Geth and Nethermind defaults - Improve general performance - Add unit tests Signed-off-by: Ameziane H. <[email protected]>
* exclude empty requests from requests hash Signed-off-by: Daniel Lehrner <[email protected]> * Exclude empty requests and prepend request type byte in engine_getPayloadV4 Fixes ethereum/execution-apis#599 change to EIP-7685 Signed-off-by: Simon Dudley <[email protected]> * fix test Signed-off-by: Daniel Lehrner <[email protected]> * fix prague tests: change request hash, reorder json elements Signed-off-by: Daniel Lehrner <[email protected]> * fix extracting of request for new payload Signed-off-by: Daniel Lehrner <[email protected]> * fix test by fixing request object creation Signed-off-by: Daniel Lehrner <[email protected]> * spotless Signed-off-by: Daniel Lehrner <[email protected]> * set request type to only one byte, fixed creation of request list in T8nExecutor Signed-off-by: Daniel Lehrner <[email protected]> * fix expected json output to exclude empty requests Signed-off-by: Daniel Lehrner <[email protected]> --------- Signed-off-by: Daniel Lehrner <[email protected]> Signed-off-by: Simon Dudley <[email protected]> Co-authored-by: Simon Dudley <[email protected]>
…lculator (hyperledger#8106) * move gas refund calculation from MainnetTransactionProcessor to RefundCalculator Signed-off-by: Daniel Lehrner <[email protected]> * fix MainnetTransactionProcessorTest Signed-off-by: Daniel Lehrner <[email protected]> * add test for FrontierRefundCalculator Signed-off-by: Daniel Lehrner <[email protected]> * add test for FrontierRefundCalculator Signed-off-by: Daniel Lehrner <[email protected]> * add PragueRefundCalculator dummy Signed-off-by: Daniel Lehrner <[email protected]> * move refund logic to gas calculator, delete RefundCalculator Signed-off-by: Daniel Lehrner <[email protected]> --------- Signed-off-by: Daniel Lehrner <[email protected]>
* Update ethereum/p2p/src/main/java/org/hyperledger/besu/ethereum/p2p/discovery/Endpoint.java Co-authored-by: Sally MacFarlane <[email protected]> Signed-off-by: Vaidik <[email protected]> * loopback address * use constant Signed-off-by: Sally MacFarlane <[email protected]> --------- Signed-off-by: Vaidik <[email protected]> Signed-off-by: Sally MacFarlane <[email protected]> Co-authored-by: Sally MacFarlane <[email protected]>
…hyperledger#8115) Signed-off-by: Gabriel-Trintinalia <[email protected]>
* upcoming breaking changes for various deprecated bonsai CLI options Signed-off-by: Sally MacFarlane <[email protected]> * order Signed-off-by: Sally MacFarlane <[email protected]> --------- Signed-off-by: Sally MacFarlane <[email protected]>
Update the EXTCALL account creation detection to match legacy call detection. Signed-off-by: Danno Ferrin <[email protected]>
* first draft for 7702 changes for pectra-devnet5 Signed-off-by: Daniel Lehrner <[email protected]> * spotless, javadoc Signed-off-by: Daniel Lehrner <[email protected]> * fixed get code in call operations Signed-off-by: Daniel Lehrner <[email protected]> * allow code delegation chain id to be up to 2^256-1 Signed-off-by: Daniel Lehrner <[email protected]> * set code for delegated accounts correctly in the initialFrame of the tx processing Signed-off-by: Daniel Lehrner <[email protected]> * delegated accounts return empty bytes for the code if the target does not exist Signed-off-by: Daniel Lehrner <[email protected]> --------- Signed-off-by: Daniel Lehrner <[email protected]> Co-authored-by: Simon Dudley <[email protected]>
Implements EIP-7623 (increase calldata cost) Signed-off-by: Daniel Lehrner <[email protected]> Signed-off-by: Simon Dudley <[email protected]> Co-authored-by: Simon Dudley <[email protected]>
* default target gas limit for holesky --------- Signed-off-by: Sally MacFarlane <[email protected]> Signed-off-by: Justin Florentine <[email protected]> Co-authored-by: Justin Florentine <[email protected]>
…er#8133) Signed-off-by: Simon Dudley <[email protected]>
* increase mainnet gas limit to 36M, remove unused gas limit calculator from BesuControllerBuilder Signed-off-by: Daniel Lehrner <[email protected]> * gas limit in SystemCallProcessor is independent of the block gas limit Signed-off-by: Daniel Lehrner <[email protected]> * update test to reflect gas limit increase from 30M -> 36M Signed-off-by: Daniel Lehrner <[email protected]> * remove unused gas limit check from previous commit Signed-off-by: Daniel Lehrner <[email protected]> * moved the target gas limit constant for testnets to the same class as the one for mainnet Signed-off-by: Daniel Lehrner <[email protected]> * fix tests Signed-off-by: Daniel Lehrner <[email protected]> --------- Signed-off-by: Daniel Lehrner <[email protected]>
* update some deprecated references Signed-off-by: Sally MacFarlane <[email protected]> * change order of params to eliminate deprecation warning Signed-off-by: Sally MacFarlane <[email protected]> --------- Signed-off-by: Sally MacFarlane <[email protected]>
Use fixtures_develop which contains Pectra test fixtures. Unignore the BLS execution-spec-tests, but keep ignoring the older reference tests version Signed-off-by: Simon Dudley <[email protected]>
Signed-off-by: Karim Taam <[email protected]>
Signed-off-by: Karim Taam <[email protected]>
Signed-off-by: Karim Taam <[email protected]>
Signed-off-by: Karim Taam <[email protected]>
ae4feed
to
36fbcdd
Compare
Signed-off-by: Karim Taam <[email protected]>
Tried and this PR is syncing the current devnet |
...src/main/java/org/hyperledger/besu/ethereum/mainnet/blockhash/Eip7709BlockHashProcessor.java
Show resolved
Hide resolved
ethereum/core/src/main/java/org/hyperledger/besu/ethereum/core/BlockHeader.java
Outdated
Show resolved
Hide resolved
+ (transaction.getAccessList().map(gasCalculator::accessListGasCost).orElse(0L)) | ||
+ gasCalculator.delegateCodeGasCost(transaction.codeDelegationListSize()); | ||
// TODO VERKLE FIX CALCULATION ON VALIDATION+ | ||
// gasCalculator.computeAccessEventsCost(accessWitness, transaction); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removal of comments, intentional?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it's an old comment we added before your refactoring of the gascost . it seems to be useless to keep it now
* @return the full world state, if available | ||
*/ | ||
private Optional<MutableWorldState> getFullWorldStateFromHead(final Hash blockHash) { | ||
// TODO begin remove before merging on main | ||
Optional<BlockHeader> blockHeader = blockchain.getBlockHeader(blockHash); | ||
if (blockHeader.isPresent()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why is this if check present? it does not exist on my merge
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it's a temporary code we have on verkle to trigger a rollback and rollfoward for each block when we are syncing and testing that everything is working correctly
private long cost(final MessageFrame frame, final long blockNumber) { | ||
final UInt256 key = UInt256.valueOf(blockNumber % BLOCKHASH_SERVE_WINDOW); | ||
long gas = frame.getAccessWitness().touchAndChargeStorageLoad(contractAddress, key); | ||
public Address getContractAddress() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is this method used for?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes seems to be useless I removed it
Signed-off-by: Karim Taam <[email protected]>
@@ -81,10 +81,10 @@ | |||
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe146098573615156028575f545f5260205ff35b36606014156101445760115f54600182026001905f5b5f82111560595781019083028483029004916001019190603e565b90939004341061014457600154600101600155600354806004026004013381556001015f35815560010160203581556001016040359055600101600355005b6003546002548082038060011160ac575060015b5f5b81811460f15780607402838201600402600401805490600101805490600101805490600101549260601b84529083601401528260340152906054015260010160ae565b9101809214610103579060025561010e565b90505f6002555f6003555b5f548061049d141561011d57505f5b6001546001828201116101325750505f610138565b01600190035b5f555f6001556074025ff35b5f5ffd", | |||
"storage": {} | |||
}, | |||
"0xfffffffffffffffffffffffffffffffffffffffe": { | |||
"0x0f792be4b0c0cb4dae440ef133e90c0ecd48cccc": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
doesn't seem correct, we are using 0xff...fe
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it will not be a problem because PragueBlockHashProcessor still use the correct with my modification . Now Eip7709BlockHashProcessor.java will have it's own address value and will not override the one from Prague
@@ -173,12 +173,12 @@ | |||
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe146098573615156028575f545f5260205ff35b36606014156101445760115f54600182026001905f5b5f82111560595781019083028483029004916001019190603e565b90939004341061014457600154600101600155600354806004026004013381556001015f35815560010160203581556001016040359055600101600355005b6003546002548082038060011160ac575060015b5f5b81811460f15780607402838201600402600401805490600101805490600101805490600101549260601b84529083601401528260340152906054015260010160ae565b9101809214610103579060025561010e565b90505f6002555f6003555b5f548061049d141561011d57505f5b6001546001828201116101325750505f610138565b01600190035b5f555f6001556074025ff35b5f5ffd", | |||
"storage": {} | |||
}, | |||
"0xfffffffffffffffffffffffffffffffffffffffe": { | |||
"0x0f792be4b0c0cb4dae440ef133e90c0ecd48cccc": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
doesn't seem correct, we are using 0xff...fe
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it will not be a problem because PragueBlockHashProcessor still use the correct with my modification . Now Eip7709BlockHashProcessor.java will have it's own address value and will not override the one from Prague
@@ -63,14 +63,14 @@ | |||
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", | |||
"storage": {} | |||
}, | |||
"0xfffffffffffffffffffffffffffffffffffffffe": { | |||
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460575767ffffffffffffffff5f3511605357600143035f3511604b575f35612000014311604b57611fff5f3516545f5260205ff35b5f5f5260205ff35b5f5ffd5b5f35611fff60014303165500", | |||
"0x0000f90827f1c53a10cb7a02335b175320002935": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
again not 0xfffffffffffffffffffffffffffffffffffffffe
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it will not be a problem because PragueBlockHashProcessor still use the correct with my modification . Now Eip7709BlockHashProcessor.java will have it's own address value and will not override the one from Prague
"balance": "0x0", | ||
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460575767ffffffffffffffff5f3511605357600143035f3511604b575f35612000014311604b57611fff5f3516545f5260205ff35b5f5f5260205ff35b5f5ffd5b5f35611fff60014303165500", | ||
"nonce": "0x1", | ||
"0x0000f90827f1c53a10cb7a02335b175320002935": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
again not 0xfffffffffffffffffffffffffffffffffffffffe
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it will not be a problem because PragueBlockHashProcessor still use the correct with my modification . Now Eip7709BlockHashProcessor.java will have it's own address value and will not override the one from Prague
"comment": "Increase the MAX_EFFECTIVE_BALANCE", | ||
"nonce": "0x01", | ||
"balance": "0x00", | ||
"code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd", | ||
"storage": {} | ||
}, | ||
"0xfffffffffffffffffffffffffffffffffffffffe": { | ||
"0x0000f90827f1c53a10cb7a02335b175320002935": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
again not 0xfffffffffffffffffffffffffffffffffffffffe
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it will not be a problem because PragueBlockHashProcessor still use the correct with my modification . Now Eip7709BlockHashProcessor.java will have it's own address value and will not override the one from Prague
"nonce":"0x1" | ||
}, | ||
"0x0c15f14308530b7cdb8460094bbb9cc28b9aaaaa": { | ||
"0x00000961ef480eb55e80d19ad83579a64c007002": { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
again not 0xfffffffffffffffffffffffffffffffffffffffe
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it will not be a problem because PragueBlockHashProcessor still use the correct with my modification . Now Eip7709BlockHashProcessor.java will have it's own address value and will not override the one from Prague
new MainnetBlockHeaderFunctions()); | ||
new MainnetBlockHeaderFunctions(), | ||
null // execution witnesses | ||
); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: extra new line
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
@@ -104,8 +105,8 @@ public static Collection<Object[]> generateTestParametersForConfig(final String[ | |||
public static void executeTest(final BlockchainReferenceTestCase testCase) { | |||
final BlockHeader genesisBlockHeader = testCase.getGenesisBlockHeader(); | |||
final MutableWorldState worldState = | |||
testCase.getWorldStateArchive() | |||
.getMutable(genesisBlockHeader.getStateRoot(), genesisBlockHeader.getHash()) | |||
testCase.getWorldStateArchive() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: spacing
|| soughtBlock >= currentBlockNumber | ||
|| soughtBlock < (currentBlockNumber - blockHashLookup.getLookback())) { | ||
frame.pushStackItem(Bytes32.ZERO); | ||
return new OperationResult(cost, null); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if you do return, why do you need the else
?
copy pasting my version:
// If the sought block is negative, a future block, the current block, or not in the
// lookback window, zero is returned.
if (soughtBlock < 0
|| soughtBlock >= currentBlockNumber
|| soughtBlock < (currentBlockNumber - blockHashLookup.getLookback())) {
frame.pushStackItem(Bytes32.ZERO);
return new OperationResult(cost, null);
}
final long remainingGas = frame.getRemainingGas();
final Hash blockHash = blockHashLookup.apply(frame, soughtBlock);
final long lookupCost = remainingGas - frame.getRemainingGas();
// give lookupCost back as it will be taken after
frame.incrementRemainingGas(lookupCost);
if (blockHash == null) {
return new OperationResult(cost + lookupCost, ExceptionalHaltReason.INSUFFICIENT_GAS);
}
frame.pushStackItem(blockHash);
return new OperationResult(cost + lookupCost, null);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes we can remove it
return null; | ||
} | ||
frame.decrementRemainingGas(lookupCost); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sorry you need to put this back before the check for OOG. I remembered the reason I did it this way - if you fail on OOG you want to be able to report exactly by how much have you failed on, so you need to decrement the gas cost here from the frame so you can get it correctly on the other side upon returning the failure.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did a rollback of this modification
Signed-off-by: Karim Taam <[email protected]>
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
|
||
public class Eip7709BlockHashLookupTest { | ||
class Eip7709BlockHashLookupTest { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would prefer the version that was there in the verkle branch, reason: I reworked these tests while implementing the gas costs so the version on the verkle branch is more up to date:
class Eip7709BlockHashLookupTest {
private static final long BLOCKHASH_SERVE_WINDOW = 160;
private static final Address STORAGE_ADDRESS = Address.fromHexString("0x0");
private static final long HISTORY_SERVE_WINDOW = 200L;
private static final int CURRENT_BLOCK_NUMBER =
Math.toIntExact(HISTORY_SERVE_WINDOW + BLOCKHASH_SERVE_WINDOW / 2);
private List<BlockHeader> headers;
private BlockHashLookup lookup;
private MessageFrame frame;
private WorldUpdater worldUpdater;
@BeforeEach
void setUp() {
headers = new ArrayList<>();
worldUpdater = createWorldUpdater(0, CURRENT_BLOCK_NUMBER);
lookup =
new Eip7709BlockHashLookup(STORAGE_ADDRESS, HISTORY_SERVE_WINDOW, BLOCKHASH_SERVE_WINDOW);
frame = createMessageFrame(CURRENT_BLOCK_NUMBER, worldUpdater, Long.MAX_VALUE);
}
private WorldUpdater createWorldUpdater(final int fromBlockNumber, final int toBlockNumber) {
WorldUpdater worldUpdaterMock = mock(WorldUpdater.class);
SimpleAccount contractAccount = spy(new SimpleAccount(STORAGE_ADDRESS, 0, Wei.ZERO));
when(worldUpdaterMock.get(STORAGE_ADDRESS)).thenReturn(contractAccount);
BlockHeader parentHeader = null;
for (int i = fromBlockNumber; i < toBlockNumber; i++) {
final BlockHeader header = createHeader(i, parentHeader);
headers.add(header);
contractAccount.setStorageValue(
UInt256.valueOf(i % HISTORY_SERVE_WINDOW), UInt256.fromBytes(header.getHash()));
parentHeader = header;
}
return worldUpdaterMock;
}
private MessageFrame createMessageFrame(
final long currentBlockNumber, final WorldUpdater worldUpdater, final long remainingGas) {
final MessageFrame messageFrame = mock(MessageFrame.class);
final BlockValues blockValues = mock(BlockValues.class);
when(blockValues.getNumber()).thenReturn(currentBlockNumber);
when(messageFrame.getBlockValues()).thenReturn(blockValues);
when(messageFrame.getBlockHashLookup()).thenReturn(lookup);
when(messageFrame.getWorldUpdater()).thenReturn(worldUpdater);
when(messageFrame.getRemainingGas()).thenReturn(remainingGas);
when(messageFrame.getAccessWitness()).thenReturn(NoopAccessWitness.get());
return messageFrame;
}
@Test
void shouldGetHashOfImmediateParent() {
assertHashForBlockNumber(CURRENT_BLOCK_NUMBER - 1);
}
@Test
void shouldGetHashOfMaxBlocksBehind() {
assertHashForBlockNumber(Math.toIntExact(CURRENT_BLOCK_NUMBER - BLOCKHASH_SERVE_WINDOW));
}
@Test
void shouldReturnZeroHashWhenSystemContractNotExists() {
worldUpdater = new SimpleWorld();
frame = createMessageFrame(CURRENT_BLOCK_NUMBER, worldUpdater, Long.MAX_VALUE);
assertThat(lookup.apply(frame, CURRENT_BLOCK_NUMBER - 1L)).isEqualTo(Hash.ZERO);
}
@Test
@SuppressWarnings("ReturnValueIgnored")
void shouldDecrementRemainingGasFromFrame() {
AccessWitness accessWitness = mock(AccessWitness.class);
when(accessWitness.touchAndChargeStorageLoad(any(), any())).thenReturn(100L);
frame = createMessageFrame(CURRENT_BLOCK_NUMBER, worldUpdater, 200L);
when(frame.getAccessWitness()).thenReturn(accessWitness);
lookup.apply(frame, CURRENT_BLOCK_NUMBER - 1L);
verify(frame).decrementRemainingGas(eq(100L));
verify(frame).getAccessWitness();
verify(frame).getRemainingGas();
verify(frame).getWorldUpdater();
verifyNoMoreInteractions(frame);
}
@Test
void insufficientGasReturnsNullBlockHash() {
worldUpdater = new SimpleWorld();
AccessWitness accessWitness = mock(AccessWitness.class);
when(accessWitness.touchAndChargeStorageLoad(any(), any())).thenReturn(100L);
frame = createMessageFrame(CURRENT_BLOCK_NUMBER, worldUpdater, 1L);
when(frame.getAccessWitness()).thenReturn(accessWitness);
final Hash blockHash = lookup.apply(frame, CURRENT_BLOCK_NUMBER - 1L);
assertThat(blockHash).isNull();
}
@Test
void shouldReturnZeroHashWhenParentBlockNotInContract() {
worldUpdater = createWorldUpdater(CURRENT_BLOCK_NUMBER - 10, CURRENT_BLOCK_NUMBER);
frame = createMessageFrame(CURRENT_BLOCK_NUMBER, worldUpdater, Long.MAX_VALUE);
lookup =
new Eip7709BlockHashLookup(STORAGE_ADDRESS, HISTORY_SERVE_WINDOW, BLOCKHASH_SERVE_WINDOW);
assertHashForBlockNumber(CURRENT_BLOCK_NUMBER - 20, Hash.ZERO);
}
@Test
void shouldCacheBlockHashes() {
worldUpdater = createWorldUpdater(0, CURRENT_BLOCK_NUMBER);
frame = createMessageFrame(CURRENT_BLOCK_NUMBER, worldUpdater, Long.MAX_VALUE);
final Account account = worldUpdater.get(STORAGE_ADDRESS);
clearInvocations(account);
int blockNumber1 = CURRENT_BLOCK_NUMBER - 1;
int blockNumber2 = CURRENT_BLOCK_NUMBER - 4;
int blockNumber3 = CURRENT_BLOCK_NUMBER - 5;
assertHashForBlockNumber(blockNumber1);
assertHashForBlockNumber(blockNumber1);
assertHashForBlockNumber(blockNumber2);
assertHashForBlockNumber(blockNumber3);
assertHashForBlockNumber(blockNumber3);
assertHashForBlockNumber(blockNumber3);
verify(account, times(1))
.getStorageValue(eq(UInt256.valueOf(blockNumber1 % HISTORY_SERVE_WINDOW)));
verify(account, times(1))
.getStorageValue(eq(UInt256.valueOf(blockNumber2 % HISTORY_SERVE_WINDOW)));
verify(account, times(1))
.getStorageValue(eq(UInt256.valueOf(blockNumber3 % HISTORY_SERVE_WINDOW)));
verifyNoMoreInteractions(account);
}
@Test
void shouldGetHashWhenParentIsGenesis() {
worldUpdater = createWorldUpdater(0, 1);
frame = createMessageFrame(1, worldUpdater, Long.MAX_VALUE);
lookup =
new Eip7709BlockHashLookup(STORAGE_ADDRESS, HISTORY_SERVE_WINDOW, BLOCKHASH_SERVE_WINDOW);
assertHashForBlockNumber(0);
}
@Test
void shouldReturnZeroWhenRequestedBlockEqualToImportingBlock() {
assertHashForBlockNumber(CURRENT_BLOCK_NUMBER, Hash.ZERO);
}
@Test
void shouldReturnZeroWhenRequestedBlockAheadOfCurrent() {
assertHashForBlockNumber(CURRENT_BLOCK_NUMBER + 1, Hash.ZERO);
assertHashForBlockNumber(CURRENT_BLOCK_NUMBER + 20, Hash.ZERO);
}
@Test
void shouldReturnZeroWhenRequestedBlockTooFarBehindCurrent() {
assertHashForBlockNumber(
Math.toIntExact(CURRENT_BLOCK_NUMBER - BLOCKHASH_SERVE_WINDOW - 1), Hash.ZERO);
assertHashForBlockNumber(2, Hash.ZERO);
}
private void assertHashForBlockNumber(final int blockNumber) {
assertHashForBlockNumber(blockNumber, headers.get(blockNumber).getHash());
}
private void assertHashForBlockNumber(final int blockNumber, final Hash hash) {
clearInvocations(frame);
BlockHashOperation op = new BlockHashOperation(new CancunGasCalculator());
when(frame.popStackItem()).thenReturn(Bytes.ofUnsignedInt(blockNumber));
op.execute(frame, null);
verify(frame).pushStackItem(hash);
}
private BlockHeader createHeader(final long blockNumber, final BlockHeader parentHeader) {
return new BlockHeaderTestFixture()
.number(blockNumber)
.parentHash(parentHeader != null ? parentHeader.getHash() : Hash.EMPTY)
.buildHeader();
}
}
PR description
Fixed Issue(s)
Thanks for sending a pull request! Have you done the following?
doc-change-required
label to this PR if updates are required.Locally, you can run these tests to catch failures early:
./gradlew spotlessApply
./gradlew build
./gradlew acceptanceTest
./gradlew integrationTest
./gradlew ethereum:referenceTests:referenceTests