eth/consensus : implement eccpow consensus engine - #10
Open
mmingyeomm wants to merge 3621 commits into
Open
Conversation
I was tracing a signature verification issue in a nocgo build and found that `VerifySignature` doesn't validate hash length. #33104 added the check to `Sign` and `sigToPub` but missed this one. The cgo path in `secp256k1/secp256.go` already rejects non-32-byte hashes, so the nocgo path should do the same — otherwise a wrong-length hash gets passed to decred's `Verify` and silently gives a bogus result.
This fixes a theoretical overflow condition if an account has an impossibly high nonce.
Removes the appveyor.yml since we moved to github runners. --------- Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com> Co-authored-by: Felix Lange <fjl@twurst.com>
Passing `--dev=false` currently still enters the dev-mode startup path because a couple of branches check whether the flag was set, not its boolean value. This switches those branches to use `ctx.Bool`, so explicit false does not start dev mode or emit a dev genesis, while `--dev` keeps its existing behavior.
Changes core.Message to use Uint256 which is faster --------- Co-authored-by: Gary Rong <garyrong0905@gmail.com>
In the --create path, execFunc returns gasLeft as the second return value, but the rest of the code treats this value as "gas used" (printed as such, and compared in timedExec). This makes gas reporting incorrect and can cause benchmark consistency checks to fail.
This is a refactoring PR to wrap all pre/post-execution system calls as the exported functions, eliminating the duplicated system calls across the codebase. There are a few things unchanged but worths highlight: - ChainMaker is left as unchanged, a significant rewrite is required - BeaconRoot in header should be non-nil if Cancun is enabled --------- Co-authored-by: jwasinger <j-wasinger@hotmail.com>
Fixes the regression caught by https://hive.ethpandaops.io/#/test/generic/1778481210-e59b7465e1d04f7ed1b0200838584b16?testnumber=137. engine.AssembleBlock explicitly expects withdrawals to be non-nil for pre-Shanghai blocks as opposed to FinaliseAndAssemble which stripped off the withdrawal.
In b2843a1, metrics check len(res) == len(hashes) but res is pre-allocated with make(), so length is always equal. Partial hit metric never fires. Count non-nil elements instead. --------- Co-authored-by: Bosul Mun <bsbs8645@snu.ac.kr>
This PR introduces a separate transaction pool type for sparse blobpool. In sparse blobpool, PooledTransactions message delivers transactions without blobs, partial or full cells are downloaded by Cells message. Blobpool no longer stores transactions with complete sidecars, and it stores transactions without blobs, along with the corresponding cells. Because of this, a dedicated type distinct from types.Transaction is required. This PR introduces a type called `BlobTxForPool` and stores each sidecar field independently, in order to bypass the assumption that a sidecar always exists as a complete unit. Reintroducing the conversion queue was considered, but was ultimately omitted because type conversion should be sufficiently fast. With sparse blobpool, blob -> cell computation would take about ~13ms per blob. Not sure whether this is fast enough, but otherwise we can add the conversion queue later on the sparse blobpool branch.
1. should use !reflect.DeepEqual.
2. big.NewInt(0).SetBits([]big.Word{}) work around for DeepEqual when
big.Int is zero, unpack return a []big.Word{}.
Passing `--v2=false` currently still selects the v2 binding generator because the command checks whether the flag was set. This switches generation to use the boolean flag value, so explicit false continues to generate legacy bindings while `--v2` keeps selecting v2.
This PR introduces OnGasChangeV2 tracing hook, as the pre-requisite for landing EIP-8037. --------- Co-authored-by: Sina M <1591639+s1na@users.noreply.github.com>
This PR extends the journal to track the pre-transaction values of mutated balances, nonces, and code. At the end of the transaction, these values are used to filter out no-op changes, such as balance transitions from a-> b->a. These changes are excluded from the block-level access list. Additionally, there is a dedicated `bal.ConstructionBlockAccessList` objects for gathering the state reads and writes within the current transaction. These state writes will be keyed by the block accessList index. --------- Co-authored-by: jwasinger <j-wasinger@hotmail.com>
## Summary The `--rpc.telemetry.sample-ratio` flag declares `Value: 1.0` and `geth --help` advertises `(default: 1)`. In practice, however, omitting the flag produces a sample ratio of `0`, causing `sdktrace.TraceIDRatioBased(0)` to drop 100% of spans. Users who enable `--rpc.telemetry` see the `OpenTelemetry trace export enabled` log line and a clean startup, but no traces ever leave the process. The root cause is the interaction between two pieces of code: 1. `cmd/utils/flags.go:setOpenTelemetry` (added in #34062) only copies the flag value when `ctx.IsSet(...)` returns true: ```go if ctx.IsSet(RPCTelemetrySampleRatioFlag.Name) { tcfg.SampleRatio = ctx.Float64(RPCTelemetrySampleRatioFlag.Name) } ``` That is the right pattern for "don't clobber a config-file value with the CLI default," but it implies that something else must initialise the field when neither source sets it. 2. `node/defaults.go:DefaultConfig` never initialises `OpenTelemetry.SampleRatio`, leaving it at the float64 zero value. The result for the common CLI-only user (no TOML config) is `SampleRatio = 0` → every span is silently dropped, despite the documented default of 1. ## Change Seed `OpenTelemetry: OpenTelemetryConfig{SampleRatio: 1.0}` in `node.DefaultConfig` so the documented default matches runtime behavior and the `ctx.IsSet` guard in `setOpenTelemetry` continues to do what it was designed to do.
Avoids every legacy tx hash query hitting the blob pool on the path of BlobPool.GetRLP.
This PR fixes a bug in the current blobpool `Reset` function where it used the Transaction type instead of blobTxForPool. Decoding transactions fetched from the pool as Transaction type caused an error because the blobpool stores blobTxForPool types.
This method is similar to `eth_blobBaseFee` but returns the next base fee.
Pass targetGasLimit via engine api --------- Co-authored-by: Gary Rong <garyrong0905@gmail.com>
Commit 1f87331 moved the known-transaction marking in `sendPooledTransactionHashes` to after a successful send, so hashes are not marked known to the peer if the announcement fails to go out. The sparse blobpool change (d91b71f) reintroduced the original track-before-send ordering when adding the eth/72 packet variant, causing failed announcements to suppress future re-announcements of the same hashes to that peer. This restores the send-first ordering for both eth/71 and eth/72 packet versions, and adds a regression test covering success and failure paths on both protocol versions. ## Checklist - [x] Restored mark-known-after-send for ETH71 and ETH72 - [x] Added `TestSendPooledTransactionHashes` covering success and closed-pipe failure --------- Co-authored-by: Bosul Mun <bsbs8645@snu.ac.kr>
`conversionQueue` is meant to run billy/legacy migrations serially on a single worker. On each `startConversion`, it currently always calls `runNextTask()`, which overwrites `taskDone` and starts another goroutine even when a migration is already running. That breaks two invariants during an upgrade with legacy entries in both the main store and limbo: 1. Migrations intended to be serial can run concurrently. 2. `close()` only waits for the most recently launched task, so shutdown can close the stores while a forgotten migration is still using them. Only start the next queued migration when no task is active (`taskDone == nil`). The existing `taskDone` completion path then advances the queue, and `close` reliably waits for the active task.
Improve test coverage for amsterdam EIPs
Now with 8037, there are transactions that fail AFTER intrinsic gas but BEFORE Call or Create operation. These will currently result in a panic in tracing, since they produce a receipt --------- Co-authored-by: Gary Rong <garyrong0905@gmail.com>
blobFetcherQueueingHashes used len(announces), which is the number of peers with pending announces, not the number of queued hashes. Count unique hashes across peers instead. --------- Co-authored-by: Bosul Mun <bsbs8645@snu.ac.kr>
This PR adds the CLI flag gogc for twisting the garbage collection target. The default value is chosen as the 50, balancing the performance gain and potential memory peak.
Restarting a node mid-snap-sync can crash-loop during startup chain repair. On a restart mid-sync the pathdb is disabled (`waitSync`), so repair rewinds the stateless head to genesis and asks `StateRecoverable` if it can roll back there. `Recoverable` doesn't check `waitSync`, so it reports genesis as recoverable, but `Recover` does and refuses with `waiting for sync`, tripping a `log.Crit`. The flag is persisted, so the node crash-loops on every restart. CRIT Failed to recover state number=0 hash=37fcdc..6edf0b err="waiting for sync" The fix is to make `Recoverable` return false while a sync is running, so it agrees with `Recover`. Repair then falls through to the existing "wait state sync" path.
This PR improves the sync mode management, disabling the snap mode once the pivot block is committed. Originally the mode will only be flipped from snap to full once the entire sync cycle is completed. However, it's theoretically possible to cancel the sync cycle after committing the pivot but before inserting the remaining blocks. It drags the following sync cycle back to the snap mode. The snap mode should only be used if the head state is missing and unrecoverable. Enabling the snap mode for multiple times should be strictly prevented. What's more, it brings a fix to pivot block management, that once the pivot block is committed, the pivot block marker should be no longer advanced, preventing the situation that the real pivot state is below the pivot marker.
When a peer drop removes the last waiter for a hash, waitlist and waittime were cleaned up but partial could retain a stale entry. Delete it too so the hash is fully forgotten.
This PR parallelizes the block validation alongside the IntermediateRoot, saving the time spent on the receiptRoot hashing, BAL hashing and so on.
The deep-reorg check used depth >= maxReorgDepth, rejecting reorgs at exactly the configured limit. Use > so a depth equal to maxReorgDepth is still accepted.
This PR coordinates the prefetcher with the main tx executor. Block processing publishes the index of the transaction it is executing, prefetch workers skip anything already reached and transactions above 1M gas are promoted to the front of the prefetch queue while the rest keeps block order.
commitPivotBlock updated committed without pivotLock, while other pivot transitions serialize through that lock. Take the lock around the store to keep pivot commitment consistent with pivotHeader updates.
This PR fixes the incorrect size calculation for blob sidecar. The original formula is for legacy sidecar without the version tag. As the legacy version has been deprecated and no longer supported by the Geth's blobPool, the size calculation should also be flipped to sidecar v1.
This PR updates the go-snappy dependency.
A corrupted node should not create a bad block, but rather error out --------- Co-authored-by: rjl493456442 <garyrong0905@gmail.com>
Blocks heavy in precompile calls (e.g. Aztec's proof settlement txs) spend most of their processing time on operations (ECMUL, pairings, KZG point evaluation, MODEXP) that the state prefetcher has already computed and thrown away. This PR adds a precompile result cache shared between the prefetcher and block processing (and the miner), following the JumpDestCache pattern. Note that cached precompiles are keyed by address and input, with entries partitioned by the active precompile set, so a fork that changes the behavior behind an address can never be served results from before it. --------- Co-authored-by: Gary Rong <garyrong0905@gmail.com>
This PR aligns the `Cells` and `GetCells` message implementations with the spec: https://github.com/ethereum/devp2p/blob/master/caps/eth.md#getcells-0x14 Previously, `GetCellsPacket` and `CellsPacket` embedded `GetCellsRequest` and `CellsResponse`. This caused them to be encoded as nested lists, which does not match the wire format defined by the spec. This PR inlines their fields to flatten the RLP layout of `Cells` and `GetCells`.
This PR implements the parallel block executor, with the execution pre-state derived from the block-level access list.
…abled (#35316) If snap sync v2 is re-enabled after a previous sync already completed and committed its pivot, the leftover journal is now discarded instead of resumed.
…he entries (#35439) ## Description Blob mode cache entries (the default until a CL advertises `engine_getBlobsV4` via `engine_exchangeCapabilities`) carry no cells, but `Cache.GetCells` treated any entry as a hit and served null cells from the empty custody set instead of falling back to the pool. Found via the EELS execute-blobs simulator (EIP-8070 `engine_getBlobsV4` tests), which never calls `engine_exchangeCapabilities`: null cells appeared intermittently depending on the race with the 1s top-K preload. With the fix the suite passes 139/139 (from 87/139 on master).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
implements eccpow consensus engine for Worldland Network