3.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.receipts
flag is now enabled by default (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.receipts
flag 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
.ef
files 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 update
andsnapshots reset
commands, 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
anacrolix
in #15043 - Add WebSeed download rate flag by
anacrolix
in #15912 - engineeapi, txpool: Implement GetBlobsV1, GetBlobsV2 by
somnathb1
in #13975 and #15420 - History expiry phase-1 rollout: (Drop Pre-merge data) by
Giulio2002
in #15668 - Updated config for bor-mainnet Bhilai fork by
mh0lt
in #15636 - time-deterministic prune: step1 by
AskAlexSharov
in #16069 - fulu devnet2 by
domiwei
in #15824 - Polygon Bhilai Fork Updates by
mh0lt
in #15261 - Historical exec bottleneck solved by new probabilistic filter in StateHistory files by
AskAlexSharov
in #15960 - engineapi: Add Pectra banner by
somnathb1
in #13785 - EngineBlockDownloader: pass heightToDownload when available by
yperbasis
in #15056 - engineapi: add jsonrpc client by
taratorio
in #14199 - Implement ERC-7562 tracer by
shohamc1
in #14705 - Support RIP-7560 transactions to mining loop by
shohamc1
in #14702 - Implement EIP-7610 has storage check on create by
taratorio
in #14672 - Implement EIP-7883 ModExp Gas Cost Increase by
yperbasis
in #15093 - Implement EIP-7823: Set upper bounds for MODEXP by
yperbasis
in #15148 - Implement EIP-7825: Transaction Gas Limit Cap by
yperbasis
in #15450 - EIP-7892: Blob Parameter Only Hardforks - 2nd attempt by
yperbasis
in #15067 - execution: EIP-7918: Blob base fee bounded by execution cost by
yperbasis
in #15399 - Add P256Verify for osaka and implement EIP-7951 by
somnathb1
in #15519 - Add CLZ opcode by
Giulio2002
in #15532 - EIP-7934: RLP Execution Block Size Limit by
taratorio
in #15609 - EIP-7907: Meter Contract Code Size And Increase Limit by
taratorio
in #15688 - Account Abstraction Execution by
shohamc1
in #14213 - feehistory.go: optimize the high latency of eth_feeHistory by
blxdyx
in #14135 - reduce disk IO during files merge by
AskAlexSharov
in #14902 - VM OPSwap optimisation by
JkLondon
in #15115 - etl: allocator by
AskAlexSharov
in #15092 - cp: Optimised snapshot read operations for BorEvents by
sudeepdino008
in #16140 - Caplin: update highest process slot correctly during
ForwardSync
byGiulio2002
in #13825 - Caplin: now respecting max peer count by
Giulio2002
in #13858 - Caplin: remove beacon blocks filtering by
Giulio2002
in #13883 - Caplin: removed reusable states in reorg by
Giulio2002
in #13893 - Caplin: implement encoding for archive node for Queues by
Giulio2002
in #14158 - Caplin: remove extra delay in attestation production by
Giulio2002
in #14128 - Caplin: bump default builder boost factor by
Giulio2002
in #14913 - Caplin: Added validator depositing tooling by
Giulio2002
in #16084 - Caplin: fully-working peerdas rpc by
Giulio2002
in #16083 - Caplin: added new queue endpoints for deposit lists by
Giulio2002
in #16219 - Erigon: add option to use execution network to import blocks by
Giulio2002
in #14890 - Erigon: optimistic inclusion for deep reorgs by
Giulio2002
in #14875 - rpcdaemon: Don't set miner by
shohamc1
in #13795 - jsonrpc: Add comprehensive Quantities validation for
eth_getStorageAt
bysomnathb1
in #13947 - rpcdaemon: Set correct txnum for bridge txns by
shohamc1
in #14075 - txpool: add more cases to return err instead of panicking on invalid Txn cases by
somnathb1
in #14093 - jsonrpc: Lenient on param check for eth_getStorageAt by
somnathb1
in #14105 - jsonrpc: add Authorizations to callArgs for
eth_estimateGas
bysomnathb1
in #14152 - ethapi: Add
blobVersionedHashes
tocallArgs
bysomnathb1
in #14803 - rpcdaemon: read hdr instead of blocksWithTxs in eth_estimateGas,eth_createAccessList by
lupin012
in #14915 - rpcdaemon: align response (block not found or txnHash not found) in case remote conf with local one by
lupin012
in #16029 - rpcdaemon: check BridgeBackend version only on Bor network by
canepat
in #16101 - rpcdaemon: stack-based json stream by
canepat
in #14994 - jsonrpc: implement eth_config by
somnathb1
in #15948 - Implemented mechanism to deliver mined blocks to block consumer by
eastorski
in #14056 - Removed MiningBorHeimdall stage in mining pipeline if astrid flag is set by
eastorski
in #14080 - polygon/heimdall: fix snapshot store last entity to check in snapshots too by
taratorio
in #13845 - Implemented wait if heimdall is not synced to the chain by
eastorski
in #13807 - proposerPriority from VotingPower to ProposerPriority by
fredrik0x
in #15595 - Add bor init to txpool configuration by
mh0lt
in #16160 - Remove unused polygon sync flags by
mh0lt
in #16035 - Supported heimdall v2 endpoints by
eastorski
in #15538 - qa-tests: execute qa-tests on every commit to the 3.x branch by
mriccobene
in #13783 - qa-tests: improve rpc-integration tests by
mriccobene
in #13755 - qa-tests: use the new dedicated runner for RPC testing by
mriccobene
in #14094 - qa-tests: re-enable eth_estimateGas/test_14 by
mriccobene
in #13926 - workflows: Stricter failure checks for hive tests by
somnathb1
in #14115 - qa-tests: enable change point analysis on RPC perf tests by
mriccobene
in #14100 - tests: Update EEST fixtures to Vítkov (v4.1.0) release by
somnathb1
in #14178 - tests: Update EESTs to release v4.4.0 (Stromovka) by
somnathb1
in #14886 - Upgrade ethereum/tests to v17.0 by
yperbasis
in #14210 - tests: update eest to fusaka-devnet-1@v1.0.0 by
yperbasis
in #15499 - tests: update EEST to v4.5.0 and add fusaka-devnet-0@v1.0.0 fixtures by
yperbasis
in #15215 - shutter: validate decryption keys based on eon info and signatures by
taratorio
in #13725 - shutter: add encrypted and decrypted txn pools by
taratorio
in #13864 - shutter: implement provide txns by
taratorio
in #13865 - txnprovider/shutter: integration tests and fixes by
taratorio
in #13983 - shutter: test cmds to send shutter txns and check validator registrations by
taratorio
in #14187 - Bump builder and base docker images by
lystopad
in #13869 - Upgrade builder image to 1.24-bookworm by
lystopad
in #15082 - Rework Dockerfile, release and snapshot workflows by
lystopad
in #15757 - Update release.yml - debian package dependency by
lystopad
in #16228 - add gdbme flag that starting erigon under gdb (for debug) by
JkLondon
in #13874 - Fix
getProof
for historical calls byawskii
in #15564
Full Changelog: v3.0.15...v3.1.0-rc1
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