# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). This changelog documents updates relevant to users and downstream integrations. The scope of each version includes changes to the following interfaces: - Interactions with other nodes in the Sonic network. - Command-line interface and configuration files. - Execution support for Ethereum transactions and Ethereum-compatible contracts. - RPC interfaces, including JSON-RPC, WebSockets, and Unix sockets. ## [Unreleased] Unreleased features are staged for future releases but have not yet undergone thorough testing or integration. These changes are experimental and may cause unexpected behavior or malfunctions in the client. For optimal compatibility and stability, it is recommended to use the most recent released version. ### Added ### Changed ### Removed ### Fixed ## [2.2.4] - 2 October 2026 Version 2.2.4 is a stability release. Upgrading is recommended for all RPC operators. ### Changed - The `executionPlan` returned by `sonic_prepareBundle` is now the root group of the plan itself, instead of an object holding the root group as its only step. - `sonic_prepareBundle` and `sonic_submitBundle` no longer collapse groups with a single step into that step. - The transaction pool now rejects bundles whose execution plan, or the plan of any bundle nested in it, has a single transaction as its root. ### Fixed - Fixed `sonic_prepareBundle` building single-transaction bundles without an enclosing group, which let a failing transaction be dropped from the block without its effects rolled back. ## [2.2.3] - 1 October 2026 Version 2.2.3 is a stability release. Upgrading is recommended for all RPC operators. ### Changed - `trace_filter` now rejects requests whose `toBlock` is more than 1000 blocks past `fromBlock`. The limit can be adjusted with the new `--rpc.tracefilterrange` flag (`Opera.MaxTraceFilterRange` in the configuration file), 0 disables it. - `eth_getProof` now accepts at most 1024 storage keys per request and rejects malformed storage keys with an invalid params error. - `--rpc.log-query-parameter-limit` now also applies to `eth_getLogs` queries by `blockHash`, to `eth_newFilter` and to logs subscriptions. - `eth_createAccessList` now stops when its request is cancelled or times out. - `eth_sendTransaction`, `eth_signTransaction`, `eth_fillTransaction`, `eth_resend`, `eth_createAccessList`, `personal_sendTransaction` and `personal_signTransaction` now reject a `chainId` that does not match the node's, set-code transactions without `to` or with `gasPrice`, and blob transactions without `to`. - The transaction pool now rejects bundle-only transactions that approve no execution plan, more than one execution plan, or only execution plans that have already been processed. - The transaction pool now evicts bundle-only transactions once all execution plans they approve have been processed, or once they have waited for their bundle for one hour (`TxPool.BundleOnlyLifetime` in the configuration file). ### Fixed - Fixed genesis import skipping the bundle history when the genesis contains no retained bundles, which made the node diverge from the network at the next epoch sealing. - Fixed RPC methods serving a block, its transactions or receipts before the state of that block, which let calls resolving `latest` miss the effects of a transaction whose receipt had already been returned. - Fixed `newHeads` and `newPendingTransactions` subscriptions dropping notifications for events occurring right after the subscription was created. - Fixed `debug_traceCall`, `trace_call` and `trace_callMany` panicking for unknown blocks instead of reporting `header not found`. - Fixed `eth_simulateV1` panicking for set-code and blob calls without `to` instead of rejecting them as in transaction execution. - Fixed `dag_getHeads` panicking at epoch boundaries instead of returning an error. - Fixed the transaction pool keeping set-code transactions with invalid authorizations indexed indefinitely, which slowed the pool down over time. - Fixed a race between node shutdown and connecting peers. ## [2.2.2] - 15 September 2026 Version 2.2.2 is a stability release. Upgrading is recommended for all operators. ### Changed - `sonicd` and `sonictool` now handle `SIGINT` and `SIGTERM` during node startup and password prompts. - `sonictool` genesis imports now place temporary data in the data directory instead of the system temporary directory. - Released binaries now ship with symbol table and debug information. - Reduced the memory footprint of the state database. - `eth_feeHistory` results now include the baseFeePerBlobGas and blobGasUsedRatio fields, for compatibility with the Ethereum execution APIs. ### Fixed - Fixed a data race during shutdown caused by the transaction pool being stopped twice. - Fixed data races in the state database node cache and in its error reporting. ## [2.2.1] - 5 August 2026 Version 2.2.1 is a stability release. Upgrading is recommended for all operators but is not mandatory — the minimum version required to support the Brio hard-fork is still 2.2.0. ### Changed - Changed the format of `SELFDESTRUCT` (suicide) traces returned by `trace_` RPC methods to match the Parity/OpenEthereum specification: the refund address field was renamed from `refund_address` to `refundAddress`, suicide actions now carry only `address`, `refundAddress` and `balance`, and their `result` is an explicit `null`. - Fields `from`, `value` and `gas` are no longer reported with zero values in `trace_` RPC results when not applicable to the trace type. - The metrics and pprof HTTP endpoints now enforce request timeouts. - The node terminates with a distinct exit code (74) when it stops permanently due to an unrecoverable issue, instead of an unspecific failure. - Reduced log verbosity and resource utilization during event processing. ### Removed - Remove SCC RPC namespace, the feature was not completed. - Remove `debug_blocksTransactionTimes` RPC method. - Remove `debug_testSignCliqueBlock` RPC method, which was never supported by Sonic. ### Fixed - General robustness and hardening improvements of the node's external interfaces. - Fixed handling of omitted optional parameters in the `debug_traceCall` RPC method. - Improved shutdown behavior of the node and `sonictool`, removing spurious error reports. ## [2.2.0] - 2 July 2026 ### Added - Add support the Brio hard-fork. - Add support for Transaction Bundles feature, enabled with the Brio hard-fork. - Add RPC methods to create, submit, and monitor transaction bundles: `sonic_prepareBundle`, `sonic_submitBundle`, `sonic_getBundleInfo`. - Add RPC method `sonic_estimateGasForTransactions`, allowing to estimate gas for a sequence of dependent transactions. - Implement CLZ VM instruction [EIP-7939](https://eips.ethereum.org/EIPS/eip-7939), enabled with the Brio hard-fork. - Add precompiled contract for secp256r1 Curve Support [EIP-7951](https://eips.ethereum.org/EIPS/eip-7951), enabled with the Brio hard-fork. - Introduce `eth_Config` RPC method tailored for the Sonic network. - Add `analyze` command to `sonictool` providing database usage insights. - Add restrictions for rpc log queries `rpc.log-query-parameter-limit` and `rpc.log-query-result-limit`. - Introduced the `eth_simulateV1` RPC method. - Introduced the `trace_callMany` RPC method. - Added the `stateDiff` tracer to the `trace_call` RPC method. ### Changed - Increase maximum contract and init-code size to 48 KiB and 96 KiB respectively when the Brio upgrade is enabled. - Increase gas cost for the ModExp precompiled contract in accordance with [EIP-7883](https://eips.ethereum.org/EIPS/eip-7883) when the Brio upgrade is enabled. - Restrict maximum input length for ModExp precompiled contract [EIP-7823](https://eips.ethereum.org/EIPS/eip-7823) when Brio upgrade is enabled. - Introduce protocol-level upper bound gas usage per transaction (à la [EIP-7825](https://eips.ethereum.org/EIPS/eip-7825)) when Brio upgrade is enabled. - Introduce protocol level maximum RLP encoded block size of 10 MiB [EIP-7934](https://eips.ethereum.org/EIPS/eip-7934) when the Brio upgrade is enabled. - Changed the output format of the `trace_call` RPC from a list of traces to a structure that includes both traces and `stateDiff`. - Reduce log indexer resource utilization in the context of `eth_getlogs`. - Changed minimum required Go version to 1.26.0. ### Removed - Disable RPC debug namespace methods: `debug_verbosity`, `debug_vmodule`, `debug_memStats`, `debug_gcStats`, `debug_cpuProfile`, `debug_startCPUProfile`, `debug_stopCPUProfile`, `debug_goTrace`, `debug_startGoTrace`, `debug_stopGoTrace`, `debug_blockProfile`, `debug_setBlockProfileRate`, `debug_writeBlockProfile`, `debug_mutexProfile`, `debug_setMutexProfileFraction`, `debug_writeMutexProfile`, `debug_writeMemProfile`, `debug_stacks`, `debug_freeOSMemory`, `debug_setGCPercent`, `debug_setMemoryLimit` ### Fixed - Fixed inconsistent RPC answers near the block head (live-db and archive-db asynchronicity issue). - Fixed an issue where partial results were returned without an error when calling `debug_traceBlockByNumber` and `debug_traceBlockByHash` under certain erroneous scenarios. - Fixed rewards attribution of subsidized transactions. ## [2.1.6] - 12 March 2026 ### Changed - Geth dependency updated to v1.16.9. - Integrated security patches for CVE-2026-26314 and CVE-2026-26315. ## [2.1.5] - 5 Feb 2026 ### Added - Added optional event throttling feature for validator nodes with low stake to reduce network resource usage. - Extended `eth_subscribe` RPC to optionally return full transaction details. ## [2.1.4] - 25 Nov 2025 ### Fixed - Fix issue affecting log timestamps serialization (RPC) - Fix consistency issue of log transaction indices when querying logs using block hash (RPC) ### Changed - Transaction Pool rejects transactions from non-EOA accounts. ## [2.1.3] - 5 Nov 2025 - Reduce overhead produced by handling of sponsored transactions by the transaction pool under heavy load. - Reuse transactions sender to reduce transactions signature overheads. - Implement mitigation measures regarding P2P events broadcasting lag which stalls block processing. ## [2.1.2] - 2 Oct 2025 - Added Gas Subsidy support - Fixed backward compatibility of gas limit updates ## [2.1.1] - 23 Sep 2025 - RPC api: Fix empty logs bloom - Add CreateTransaction helper function - Set chain ID for internal transaction in RPC - Remove deprecated default command arguments - Improve unit tests and integration tests ## [2.1.0] - 20 Aug 2025 - Fix error handling in debug_traceBlock ## [2.0.6] - 26 May 2025 - Synchronize access to cached hash in Block - fixes incorrect block hash returned by RPC rarely - Check NoArchiveError when sending block notifications - Update Tosca dependency ## [2.0.5] - 28 Apr 2025 - Check archive block height before sending subscribers notification - Use GETH for eth_call simulation with large code in state override ## [2.0.4] - 26 Mar 2025 - Replay transaction on empty blocks - Add block overrides for RPC calls - Change the NoBaseFee VM configuration parameter for replaying transactions ## [2.0.3] - 20 Feb 2025 - Security fix of the CVE-2025-24883 (public key validity check on P2P). - Storage override for eth_call RPC interface. - Various fixes and improvements. ## [2.0.2] - 10 Feb 2025 - Implements eth_getAccount RPC method (Fantom-foundation/Sonic#370) - Handle "finalized" and "safe" block number tags (Fantom-foundation/Sonic#388) - Events fetching improved (Fantom-foundation/Sonic#372) - Fixes gas capping in RPC calls (Fantom-foundation/Sonic#391) ## [2.0.1] - 10 Feb 2025 - Adds the new Sonic VM for faster contract code processing. - Improves upon the Sonic DB performance with additional optimizations, especially for the new features. - Adds support for Cancun/Deneb including transient storage and new VM opcodes. - The Prevrandao is now fully supported in the VM and is ready to be used in contracts. Please note Prevrandao on Sonic can not be influenced by a validator not proposing a block. - Offers limited support for Type 3 transactions. The BLOB storage has not been implemented and non-empty BLOB transactions are rejected if submitted. - Includes an updated consensus control for stable TTF with improved security of the blocks building. - Built-in topology heuristics optimizes the network responsiveness. - We also included number of smaller bug fixes and improvements across different parts of the system. ## [2.0.0] - 10 Feb 2025 Initial release of the Sonic client for the Sonic network.