v3.1.0 "Pebble Paws"
Erigon 3.1.0 Pebble Paws is a significant update for node operators and validators, focusing on stability, performance, and efficiency. This release introduces several new features and optimizations, including the default enabling of receipt persistence, a smarter snapshots downloader, and numerous consensus layer improvements and official support for Shutter Network on Gnosis Chain.
Breaking changes
- Port of external RPCDaemon now uses the same WebSocket port as the default for Erigon. (#15643)
- Docker Images: Docker images are now based on Debian. (#16228)
- Go Language Version: The required Go version is now golang 1.24.
- Receipt Persistence: The
--persist.receiptsflag is now enabled by default for Full and Minimal nodes (more details are provided below). - Pebble Paws will be the last Erigon release series to officially support Polygon.
How to upgrade
Erigon 3.1 Pebble Paws will work flawlessly with old data. For those who want to ensure they have the absolute latest data files and any recent data-specific fixes, you can optionally perform a manual data upgrade. After upgrading your Erigon binary and having done a back-up of your data directory, just run the command erigon snapshots reset --datadir /your/datadir.
Key features
Disk Footprint and Management
Several improvements furtherly reduced the size of the Ethereum archive nodes while actually storing more data, making the nodes more cost-effective and easier to manage:
-
The
--persist.receiptsflag is now enabled by default for Full and Minimal nodes. This downloads pre-calculated receipts, ensuring a consistent and predictable latency, meaning a more reliable system when interacting with the network, especially during high-traffic periods, and a 10x faster RPC for calls likeeth_getLogs.- The size of the receipts is 300 GB for the Ethereum mainnet, 1 TB for the Polygon bor-mainnet, and 200 GB for the Gnosis Network. However, this can be disabled with the command
--persist.receipts=false. In this case, the RPC calls will generate receipts on demand from the StateHistory. (#16040).
- The size of the receipts is 300 GB for the Ethereum mainnet, 1 TB for the Polygon bor-mainnet, and 200 GB for the Gnosis Network. However, this can be disabled with the command
-
The size of
.effiles was reduced by 50% with better encoding, resulting in smaller archive nodes. (#12907) -
Rolled out phase 1 of history expiry, allowing nodes to drop pre-merge data, which significantly reduces storage requirements and simplifies node maintenance. (#15668)
-
Efficiently upgrade the existing data using the new
snapshots updateandsnapshots resetcommands, reducing node downtime and resource usage while avoiding a full re-sync. -
Several optimization have been implemented to reduce latency, lower disk I/O, and optimize VM and snapshot operations, resulting in faster, more efficient node operation and easier maintenance (#14135, #14902, #15115, #15092, #16140).
Networking and Performance
-
Faster and more reliable syncing: the new Bittorrent web seed implementation downloads entire files in a single stream instead of making many small-range HTTP requests, resulting in faster syncing, reduced server load, improved CDN compatibility, and enhanced protection against DDoS attacks. The downloader now automatically switches sources if the snapshot set becomes inaccessible, and once the snapshot files are downloaded, they are marked as read-only to prevent accidental corruption. Torrent logging and status outputs have been upgraded, offering clearer real-time insights into sync speed, estimated completion times, and the root causes of any synchronization stalls. (#15043)
-
A new configuration flag now enables independent tuning of web seeding and peer-to-peer (P2P) download speeds, delivering more control over how data is sourced and transferred. (#15912)
-
Improved and more reliable experience with faster, more accurate RPC responses, improved error handling, and broader support for new features and tools. (#13795, #13947, #14075, #14093, #14105, #14152, #14803, #14915, #14994, #15948, #16029, #16101)
-
Smoother Polygon Network experiences with faster syncing, improved reliability, and better compatibility, thanks to a series of targeted bug fixes and optimizations. (#14056, #14080, #13845, #13807, #15595, #16160, #16035, #15538)
-
The new probabilistic filter makes historical queries much faster and more efficient. (#15960)
Protocol
-
Improved Caplin (Consensus Layer) reliability and performance with enhanced slot processing, better peer management, optimized block and attestation handling, new validator deposit toolingAore efficient reorg support. These updates provide smoother network participation, easier validator operations, and improved responsiveness. (#13825, #13858, #13883, #13893, #14158, #14128, #14913, #16084, #16083, #16219, #14890, #14875)
-
Engine API and EIP Support: This release includes new Engine API methods like GetBlobsV1 and GetBlobsV2. It also implements various Ethereum Improvement Proposals (EIPs) related to blobs and gas, ensuring compatibility with upcoming network changes. (#13975, #15420)
-
Added support for the latest protocol upgrades and features—delivering improved compatibility, security, and performance for users. (#14705, #14702, #14672, #15093, #15148, #15450, #15067, #15399, #15519, #15532, #15609, #15688, #14213)
Shutter Network
-
Official support for Shutter Network has been added to Erigon Validators on Gnosis Chain, helping prevent malicious Maximal Extractable Value (MEV) attacks by enabling the use of encrypted transactions. (#13725, #13864, #13865, #13983, #14187, #16505, #16554, #16561, #16592, #16590)
-
Further information can be found at https://github.com/erigontech/erigon/tree/release/3.1/txnprovider/shutter#shutter
QA and Testing
- Improvemend testing and QA to deliver more reliable releases and higher quality software by expanding automated testing, enforcing stricter failure checks, and enhancing test coverage for every commit. (#13783, #13755, #14094, #13926, #14115, #14100, #14178, #14886, #14210, #15499, #15215)
Other Improvements
-
Thanks to an updated build infrastructure and streamlined release processes, deployments have improved, becoming more reliable and secure. (#13869, #15082, #15757, #16228)
-
Time-deterministic pruning loop has been introduced, making pruning steps bounded in time, improving predictability and stability, especially for large databases. (#16069)
-
Enabled the fulu devnet2 network, introducing advanced features like validator custody, earliest slot tracking, and blob recovery—empowering developers and node operators to test next-generation consensus and data availability enhancements. (#15824)
Changelog
- Fix a collection of downloader, snapshot sync and torrent related issues by
anacrolixin #15043 - Add WebSeed download rate flag by
anacrolixin #15912 - engineeapi, txpool: Implement GetBlobsV1, GetBlobsV2 by
somnathb1in #13975 and #15420 - History expiry phase-1 rollout: (Drop Pre-merge data) by
Giulio2002in #15668 - Updated config for bor-mainnet Bhilai fork by
mh0ltin #15636 - time-deterministic prune: step1 by
AskAlexSharovin #16069 - fulu devnet2 by
domiweiin #15824 - Polygon Bhilai Fork Updates by
mh0ltin #15261 - Historical exec bottleneck solved by new probabilistic filter in StateHistory files by
AskAlexSharovin #15960 - engineapi: Add Pectra banner by
somnathb1in #13785 - EngineBlockDownloader: pass heightToDownload when available by
yperbasisin #15056 - engineapi: add jsonrpc client by
taratorioin #14199 - Implement ERC-7562 tracer by
shohamc1in #14705 - Support RIP-7560 transactions to mining loop by
shohamc1in #14702 - Implement EIP-7610 has storage check on create by
taratorioin #14672 - Implement EIP-7883 ModExp Gas Cost Increase by
yperbasisin #15093 - Implement EIP-7823: Set upper bounds for MODEXP by
yperbasisin #15148 - Implement EIP-7825: Transaction Gas Limit Cap by
yperbasisin #15450 - EIP-7892: Blob Parameter Only Hardforks - 2nd attempt by
yperbasisin #15067 - execution: EIP-7918: Blob base fee bounded by execution cost by
yperbasisin #15399 - Add P256Verify for osaka and implement EIP-7951 by
somnathb1in #15519 - Add CLZ opcode by
Giulio2002in #15532 - EIP-7934: RLP Execution Block Size Limit by
taratorioin #15609 - EIP-7907: Meter Contract Code Size And Increase Limit by
taratorioin #15688 - Account Abstraction Execution by
shohamc1in #14213 - feehistory.go: optimize the high latency of eth_feeHistory by
blxdyxin #14135 - reduce disk IO during files merge by
AskAlexSharovin #14902 - VM OPSwap optimisation by
JkLondonin #15115 - etl: allocator by
AskAlexSharovin #15092 - cp: Optimised snapshot read operations for BorEvents by
sudeepdino008in #16140 - Caplin: update highest process slot correctly during
ForwardSyncbyGiulio2002in #13825 - Caplin: now respecting max peer count by
Giulio2002in #13858 - Caplin: remove beacon blocks filtering by
Giulio2002in #13883 - Caplin: removed reusable states in reorg by
Giulio2002in #13893 - Caplin: implement encoding for archive node for Queues by
Giulio2002in #14158 - Caplin: remove extra delay in attestation production by
Giulio2002in #14128 - Caplin: bump default builder boost factor by
Giulio2002in #14913 - Caplin: Added validator depositing tooling by
Giulio2002in #16084 - Caplin: fully-working peerdas rpc by
Giulio2002in #16083 - Caplin: added new queue endpoints for deposit lists by
Giulio2002in #16219 - Erigon: add option to use execution network to import blocks by
Giulio2002in #14890 - Erigon: optimistic inclusion for deep reorgs by
Giulio2002in #14875 - rpcdaemon: Don't set miner by
shohamc1in #13795 - jsonrpc: Add comprehensive Quantities validation for
eth_getStorageAtbysomnathb1in #13947 - rpcdaemon: Set correct txnum for bridge txns by
shohamc1in #14075 - txpool: add more cases to return err instead of panicking on invalid Txn cases by
somnathb1in #14093 - jsonrpc: Lenient on param check for eth_getStorageAt by
somnathb1in #14105 - jsonrpc: add Authorizations to callArgs for
eth_estimateGasbysomnathb1in #14152 - ethapi: Add
blobVersionedHashestocallArgsbysomnathb1in #14803 - rpcdaemon: read hdr instead of blocksWithTxs in eth_estimateGas,eth_createAccessList by
lupin012in #14915 - rpcdaemon: align response (block not found or txnHash not found) in case remote conf with local one by
lupin012in #16029 - rpcdaemon: check BridgeBackend version only on Bor network by
canepatin #16101 - rpcdaemon: stack-based json stream by
canepatin #14994 - jsonrpc: implement eth_config by
somnathb1in #15948 - Implemented mechanism to deliver mined blocks to block consumer by
eastorskiin #14056 - Removed MiningBorHeimdall stage in mining pipeline if astrid flag is set by
eastorskiin #14080 - polygon/heimdall: fix snapshot store last entity to check in snapshots too by
taratorioin #13845 - Implemented wait if heimdall is not synced to the chain by
eastorskiin #13807 - proposerPriority from VotingPower to ProposerPriority by
fredrik0xin #15595 - Add bor init to txpool configuration by
mh0ltin #16160 - Remove unused polygon sync flags by
mh0ltin #16035 - Supported heimdall v2 endpoints by
eastorskiin #15538 - qa-tests: execute qa-tests on every commit to the 3.x branch by
mriccobenein #13783 - qa-tests: improve rpc-integration tests by
mriccobenein #13755 - qa-tests: use the new dedicated runner for RPC testing by
mriccobenein #14094 - qa-tests: re-enable eth_estimateGas/test_14 by
mriccobenein #13926 - workflows: Stricter failure checks for hive tests by
somnathb1in #14115 - qa-tests: enable change point analysis on RPC perf tests by
mriccobenein #14100 - tests: Update EEST fixtures to Vítkov (v4.1.0) release by
somnathb1in #14178 - tests: Update EESTs to release v4.4.0 (Stromovka) by
somnathb1in #14886 - Upgrade ethereum/tests to v17.0 by
yperbasisin #14210 - tests: update eest to fusaka-devnet-1@v1.0.0 by
yperbasisin #15499 - tests: update EEST to v4.5.0 and add fusaka-devnet-0@v1.0.0 fixtures by
yperbasisin #15215 - shutter: validate decryption keys based on eon info and signatures by
taratorioin #13725 - shutter: add encrypted and decrypted txn pools by
taratorioin #13864 - shutter: implement provide txns by
taratorioin #13865 - txnprovider/shutter: integration tests and fixes by
taratorioin #13983 - shutter: test cmds to send shutter txns and check validator registrations by
taratorioin #14187 - Bump builder and base docker images by
lystopadin #13869 - Upgrade builder image to 1.24-bookworm by
lystopadin #15082 - Rework Dockerfile, release and snapshot workflows by
lystopadin #15757 - Update release.yml - debian package dependency by
lystopadin #16228 - add gdbme flag that starting erigon under gdb (for debug) by
JkLondonin #13874 - Fix
getProoffor historical calls byawskiiin #15564
Full Changelog: v3.0.17...v3.1.0
New Contributors
Thanks to our first time code contributors:
- @julienrbrt made their first contribution in #13949
- @VolodymyrBg made their first contribution in #13906
- @0x0FOG made their first contribution in #13998
- @shenpengfeng made their first contribution in #13997
- @sjtucoder made their first contribution in #13726
- @lemenkov made their first contribution in #14022
- @elliothllm made their first contribution in #14052
- @Olexandr88 made their first contribution in #14252
- @Hopium21 made their first contribution in #14455
- @threehonor made their first contribution in #14297
- @ohko4711 made their first contribution in #14640
- @fivecut made their first contribution in #14622
- @hardlydearly made their first contribution in #14812
- @gap-editor made their first contribution in #14807
- @mutestt made their first contribution in #14805
- @rodiazet made their first contribution in #14944
- @carrychair made their first contribution in #15169
- @roseshahar made their first contribution in #15288
- @eeemmmmmm made their first contribution in #15475
- @fredrik0x made their first contribution in #15595
- @reallesee made their first contribution in #16103