Skip to content

V4.1.0

Compare
Choose a tag to compare
@terencechain terencechain released this 17 Oct 15:19
· 955 commits to develop since this release
44973b0

Highlights

  • Fundamental Deneb Support: This release lays the foundation for Deneb support, although features like backwards syncing and filesystem-based blob storage are planned for Q4 2024.
  • Multi-Value Slices for Beacon State: Implemented multi-value slices to reduce the memory footprint and optimize certain processing paths. This data structure allows for storing values shared between state instances more efficiently. This feature is controller by the --enable-experimental-state flag.
  • EIP-4881 Deposit Tree: Integrated the EIP-4881 Deposit Tree into Prysm to optimize runtime block processing and production. This feature is controlled by a flag: --enable-eip-4881
  • BLST version 0.3.11: Introduced a significant improvement to the portable build's performance. The portable build now features runtime detection, automatically enabling optimized code paths if your CPU supports it.
  • Multiarch Containers Preview Available: multiarch (:wave: arm64 support :wave:) containers will be offered for preview at the following locations:

New

EIP-4844:

Core:

  • Deneb State & Block Types: New state and block types added specifically for Deneb. (#12375, #12368)
  • Deneb Protobufs: Protocol Buffers designed exclusively for Deneb. (#12363)
  • Deneb Engine API: Specialized API endpoints for Deneb. (#12384)
  • Deneb Config/Params: Deneb-specific configurations and parameters from the deneb-integration branch. (#12783)

Blob Management:

  • Blob Retention Epoch Period: Configurable retention periods for blobs. (#12941)
  • Blob Arrival Gossip Metric: Metrics for blob arrivals via gossip protocol. (#12888)
  • Blob Merge Function: Functionality to merge and validate saved/new blobs. (#12868)
  • Blob Channel: A channel dedicated to blob processing. (#12753)
  • Save Blobs to DB: Feature to save blobs to the database for subscribers. (#12734)

Logging and Validation:

  • Logging for Blob Sidecar: Improved logging functionalities for Blob Sidecar. (#12883)
  • Blob Commitment Count Logging: Introduced logging for blob commitment counts. (#12723)
  • Blob Validation: A feature to validate blobs. (#12574)

Additional Features and Tests:

  • Deneb Changes & Blobs to Builder: Deneb-specific changes and blob functionality added to the builder. (#12477)
  • Deneb Blob Sidecar Events: Blob sidecar events added as part of the Deneb release. (#12928)
  • KZG Commitments: Functionality to copy KZG commitments when using the builder block. (#12923)
  • Deneb Validator Beacon APIs: New REST APIs specifically for the Deneb release. (#12871)
  • Deneb Tests: Test cases specific to the Deneb version. (#12680, #12610)
  • PublishBlockV2 for Deneb: The publishblockv2 endpoint implemented specifically for Deneb. (#12662)
  • Builder Override & Builder Flow for Deneb: An override for the builder and a new RPC to handle the builder flow in Deneb. (#12601, #12554)
  • SSZ Detection for Deneb: SSZ detection capabilities added for Deneb. (#12537)
  • Validator Signing for Deneb: Validators can now sign Deneb blocks. (#12449)
  • Deneb Upgrade Function: A function to handle the upgrade to Deneb. (#12433)

Rest of EIPs

  • EIP-4788: Added support for Beacon block root in the EVM (#12570).
  • EIP-7044 and EIP-7045: Implemented support for Perpetually Valid Signed Voluntary Exits and increased the max attestation inclusion slot (#12577, #12565).

Beacon API:

Note: All Beacon API work is related with moving endpoints into pure HTTP handlers. This is NOT new functionality.

Endpoints moved to HTTP:

  • /eth/v1/beacon/blocks and /eth/v1/beacon/blinded_blocks (#12827).
  • /eth/v1/beacon/states/{state_id}/committees (#12879).
  • /eth/v1/config/deposit_contract (#12872).
  • /eth/v1/beacon/pool/sync_committees (#12782).
  • /eth/v1/beacon/states/{state_id}/validators, /eth/v1/beacon/states/{state_id}/validators/{validator_id} and /eth/v1/beacon/states/{state_id}/validator_balances (#12887).
  • /eth/v1/validator/duties/attester/{epoch}, /eth/v1/validator/duties/proposer/{epoch} and /eth/v1/validator/duties/sync/{epoch} (#12810).
  • /eth/v1/validator/register_validator (#12758).
  • /eth/v1/validator/prepare_beacon_proposer (#12781).
  • /eth/v1/beacon/headers (#12817).
  • /eth/v1/beacon/blocks/{block_id}/root (#12716).
  • /eth/v1/validator/attestation_data (#12634).
  • /eth/v1/validator/sync_committee_contribution (#12698).
  • /eth/v1/beacon/genesis and /eth/v1/beacon/states/{state_id}/finality_checkpoints (#12902).
  • /eth/v1/node/syncing (#12706).
  • /eth/v1/beacon/pool/voluntary_exits (#12777).
  • /eth/v1/beacon/headers/{block_id} and /eth/v1/validator/liveness/{epoch} (#12916).

Miscellaneous:

  • Comma-Separated Query Params: Support for comma-separated query parameters added to Beacon API (#12966).
  • Middleware for Query Params: Middleware introduced for handling comma-separated query parameters (#12995).
  • Content-Type Header: Compliance improved by adding Content-Type header to VC POST requests (#12942).
  • Node Version: REST-based node version endpoint implemented (#12809).

Other additions

Protocol:

  • Multi-Value Slice for Beacon State: Enhanced the beacon state by utilizing a multi-value slice. (#12549)
  • EIP-4881 Deposit Tree: EIP-4881 Deposit Tree integrated into Prysm, controlled by a feature flag (#11942).
  • New Engine Methods: New engine methods set as the default (#12997).
  • Light Client Sync Protocol: Initiation of a 5-part light client sync protocol (#12853).
  • Block Commitment Checks: Functionality to reject blocks with excessive commitments added (#12863).

State Management:

  • Alloc More Items: Modified beacon-node/state to allocate an additional item during appends (#12832).
  • GetParentBlockHash Helper: Refactoring of getLocalPayloadAndBlobs with a new helper function for fetching parent block hashes (#12951).
  • RW Lock for Duties: Read-Write lock mechanism introduced for managing validator duties (#12861).

Build and CI/CD Improvements:

  • Manual Build Tag: A "manual" build tag introduced to expedite CI build times (#12967).
  • Multiarch Docker Containers: Support for multiple architectures in Docker containers added (#12428).

Testing:

  • Init-Sync DA Tests: Tests for initial sync Data Availability (DA) included (#12873).
  • Fuzz List Timeout: Github workflow for fuzz testing now includes a timeout setting (#12768).
  • Go Fuzzing Workflow: New Github workflow for Go fuzzing on a cron schedule (#12756).

Logging and Monitoring:

  • FFG-LMD Consistency Logging: Enhanced logging for Finality Gadget LMD (FFG-LMD) consistency (#12763).
  • Validator Count Endpoint: New endpoint to count the number of validators (#12752).

User Interface and Web:

  • Web UI Release: Prysm Web UI v2.0.4 released with unspecified updates and improvements (#12746).

Testnet support:

  • Holesky Support: Support for Holesky decompositions integrated into the codebase (#12821).

Error Handling and Responses:

  • Validation Error in ForkchoiceUpdatedResponse: Included validation errors in fork choice update responses (#12828).
  • Wrapped Invalid Block Error: Improved error handling for cases where an invalid block error is wrapped. (#12982).

Changed

General:

  • Skip MEV-Boost Flag: Updated GetBlock RPC to utilize skip mev-boost flag (#12969).
  • Portable Version of BLST: Transitioned to portable BLST version as default (#12720).
  • Teku Mainnet Bootnodes: Refreshed Teku mainnet bootnodes ENRs (#12962).
  • Geth Version Updates: Elevated geth to version v1.13.1 for additional stability and features (#12911).
  • Parallel Block Building: Deprecated sequential block building path (#13008)

Deneb-Specific Changes:

  • Deneb Spectests Release: Upgraded to Deneb spectests v1.4.0-beta.2-hotfix (#12959).
  • Deneb API and Builder Cleanup: Conducted clean-up activities for Deneb-specific API and builder (#12852, #12921).
  • Deneb Block Versioning: Introduced changes related to Deneb produce block version 3 (#12708).
  • Deneb Database Methods: Adapted database methods to accommodate Deneb (#12379).
  • Unused Code Removal: Eliminated an unused function and pending blobs queue (#12920, #12913).
  • Blob Sidecar Syncing: Altered behavior when value is 0 (#12892).

Code Cleanup and Refactor:

  • API Types Cleanup: Reorganized API types for improved readability (#12961).
  • Geth Client Headers: Simplified code for setting geth client headers (#11748).
  • Bug Report Template: Revised requirements for more clarity (#12937, #12891).

Flags and Configuration:

  • Safe Slots to Import Flag: Deprecated this flag for standard alignment (#12964).
  • Holesky Config: Revised the Holesky configuration for new genesis (#12919).

Logging:

  • Genesis State Warning: Will log a warning if the genesis state size is under 1KB (#12897).
  • Debug Log Removal: Excised debug logs for cleaner output (#12836).

Miscellaneous:

  • First Aggregation Timing: Default setting for first aggregation is 7 seconds post-genesis (#12876).
  • Pointer Usage: Modified execution chain to use pointers, reducing copy operations (#12818).

Dependency Updates:

  • Go Version Update: Updated to Go version 1.20.7 (#12707).
  • Go Version Update: Updated to Go version 1.20.9 for better security. (#13009)
  • Various Dependencies: Updated multiple dependencies including Geth, Bazel, rules_go, Gazelle, BLST, and go-libp2p (#12731, #12725, #12721, #12718, #12717, #12709).

Fixes

Deneb-Specific Bug Fixes:

  • Deneb Builder Bid HTR: Fixed an issue related to HashTreeRoot (HTR) in Deneb builder bid (#12906).
  • PBV2 Condition: Corrected conditions related to PBV2 (#12812).
  • Route Handler and Cleanup: Updated the route handler and performed minor cleanups (#12726).
  • Devnet6 Interop Issues: Resolved interoperability issues specific to Devnet6 (#12545).
  • Sepolia Version: Updated the version information for the Sepolia testnet (#12792).
  • No Blob Bundle Handling: Rectified the handling when no blob bundle exists (#12838).
  • Blob Sidecar Prefix: Corrected the database prefix used for blob sidecars (#12849).
  • Blob Retrieval Error: Added specific error handling for blob retrieval from the database (#12889).
  • Blob Sidecar Count: Adjusted metrics for accurate blob sidecar count (#12865).
  • Sync/RPC Blob Usage: Rectified blob usage when requesting a block by root in Sync/RPC (#12837).

Cache Fixes:

  • Don't Prune Proposer ID Cache: Fixed a loop erroneously pruning the proposer ID cache (#12996).
  • LastRoot Adjustment: Altered LastRoot to return the head root (#12985).
  • Last Canonical Root: Modified forkchoice to return the last canonical root of the epoch (#12954).

Block Processing fixes:

  • Block Validation: Fixed an issue where blocks were incorrectly marked as bad during validation (#12983).
  • Churn Limit Helpers: Improved churn limit calculations through refactoring (#12971).
  • Churn with 0 Exits: Rectified a bug that calculated churn even when there were 0 exits (#12976).
  • Proposer Duties Sorting: Resolved sorting issues in proposer duties (#12909).
  • Duplicate Block Processing: Eliminated redundant block processing (#12905).

Error Handling and Logging:

  • RpcError from Core Service: Ensured that RpcError is returned from core services (#12974).
  • Unhandled Error: Enhanced error management by handling previously unhandled errors (#12938).
  • Error Handling: Wrapped ctx.Err for improved error handling (#12859).
  • Attestation Error: Optimized error management in attestation processing (#12813).

Test and Build Fixes:

  • Racy Tests in Blockchain: Resolved race conditions in blockchain tests (#12957).
  • TestService_ReceiveBlock: Modified TestService_ReceiveBlock to work as expected (#12953).
  • Build Issue with @com_github_ethereum_c_kzg_4844: Resolved build issues related to this specific library (#12890).
  • Fuzz Testing: Addressed fuzz testing issues in the origin/deneb-integration
  • Long-Running E2E Tests: Fixed issues that were causing the end-to-end tests to run for an extended period. (#13000)

Additional Fixes:

  • Public Key Copies During Aggregation: Optimized to avoid unnecessary public key copies during aggregation (#12944).
  • Epoch Participations: Fixed the setting of current and previous epoch participations (#12814).
  • Verify Attestations: Resolved an attestation verification issue in proposer logic (#12704).
  • Empty JSON/YAML Files: Fixed an issue where prysmctl was writing empty configuration files (#12599).
  • Generic Fixes: Addressed various unspecified issues (#12932, #12917, #12915).
  • Phase0 Block Parsing: Resolved parsing issues in phase0 blocks on submit (#12857).
  • Hex Handling: Upgraded the hex handling in various modules (#12979).
  • Initial Sync PreProcessing: Resolved an issue affecting the initial sync preprocessing. (#13007)

Removed

  • Remote Slashing Protection: Eliminated the remote slashing protection feature (#12989).
  • Go-Playground/Validator: Removed the go-playground/validator dependency from the Beacon API (#12973).
  • Revert Cache Proposer ID: Reverted the caching of proposer ID on GetProposerDuties (#12986).
  • Go-Playground/Validator: Removed go-playground/validator from Beacon API (#12973).
  • Reverted Cache Proposer ID: Reversed the change that cached proposer ID on GetProposerDuties (#12986).
  • Cache Proposer ID: Reversed the functionality that cached proposer ID on GetProposerDuties (#12939).
  • Quadratic Loops in Exiting: Eliminated quadratic loops that occurred during voluntary exits, improving performance (#12737).
  • Deprecated Go Embed Rules: Removed deprecated go_embed rules from rules_go, to stay up-to-date with best practices (#12719).
  • Alpine Images: Removed Alpine images from the Prysm project (#12749).