Important
This release is required for the Bach (T1) network upgrade scheduled for Thursday, Feb 5th 2026 16:00 CET. Node operators must update their nodes, otherwise your nodes will fall out of sync with the network. This release focuses on mainnet-ready gas economics, expiring nonces, and security hardening from recent audits.
The Bach (T1) network upgrade implements three major TIPs:
This release includes breaking changes on the CLI, precompile interface, please read the release notes carefully.
Network Upgrade Changes
TIP-1000: State Creation Cost Increase
Tempo's high throughput makes it vulnerable to state growth attacks where adversaries could create terabytes of permanent state at low cost. TIP-1000 increases state creation costs by 12.5x, making such attacks economically infeasible (~$50M to create 1TB of state). Transfers to new addresses now cost ~300k gas (was ~70k), and contract deployments cost 5-10x more.
| Operation | Before | After |
|---|---|---|
| New state element (SSTORE zero → non-zero) | 20,000 gas | 250,000 gas |
| Account creation (first nonce write) | 0 gas | 250,000 gas |
| Contract creation per byte | 200 gas | 1,000 gas |
| Contract creation base (keccak + codesize) | included | 500,000 gas |
| Transaction gas cap | 16M gas | 30M gas |
TIP-1009: Expiring Nonces
Traditional sequential nonces create friction for gasless transactions and parallel submission. If transaction N fails, all subsequent transactions are blocked. Additionally, 2D nonces (nonce keys) can lead to permanent state bloat since unused nonce keys are stored forever. TIP-1009 introduces expiring nonces: Transactions specify a validBefore timestamp (max 30s in future) instead of a sequential nonce. A fixed-size circular buffer (300k entries) automatically evicts expired entries, preventing state growth. This enables relayers to submit multiple transactions in parallel without complex nonce management, while eliminating the state bloat attack vector.
(#2121): Time-bounded replay protection using transaction hashes. Transactions use nonceKey = uint256.max with validBefore timestamp (max 30s in future). Enables gasless/meta-transactions and parallel submission.
TIP-1010: Mainnet Gas Parameters
TIP-1010 calibrates Tempo's mainnet gas parameters, balancing high throughput with sustainable fee levels. The base fee increase to 20 gwei maintains the target of ~0.1 cent per TIP-20 transfer while providing better spam protection. The 500M block gas limit ensures sufficient capacity for payment transactions.
(#2194):
| Parameter | Before | After |
|---|---|---|
| Base fee | 10 gwei | 20 gwei |
| Total block gas limit | - | 500M gas |
| General gas limit | - | 30M gas/block |
New Features
- Unified Telemetry Configuration: New
--telemetry-url <URL>flag configures metrics and logs export in a single option. Pushes both reth and consensus metrics with aconsensus_idlabel for node identification. We ask all validators to configure the--telemetry-urlso we can support troubleshooting. - Separate Consensus Storage Directory: New
--consensus.datadir <PATH>flag allows validators to store consensus data on a separate volume (e.g., AWS EBS) while keeping execution state on high-performance local disks. Migrate by copying<datadir>/consensusto the new location. - Validator Info CLI Command: New
consensus validators-infosubcommand - Validator Health Dashboard: New Grafana dashboard for validator monitoring
- Fee Payer Signature Support:
TempoTransactionRequestsupportsfee_payer_signature - Expiring Nonce Setters: Added
valid_before/valid_aftersetters toTempoTransactionRequest
Breaking Changes
CLI Changes
-
Testnet Chain Name: Testnet nodes must now use
--chain moderato. The previousandantinochainspec has been removed. Update node startup scripts and systemd services accordingly (#1876, introduced in v1.0.0) -
CLI Force Flag:
--delete-signing-sharenow requires--forceflag to prevent accidental deletion of validator signing keys. Update any automation scripts that manage validator key lifecycle (#2215).
Precompile Interface Changes
-
Precompile Revert Behavior: Precompiles now revert with a standard error (instead of returning a precompile-specific error) when calldata is less than 4 bytes (missing function selector). This aligns precompile behavior with regular Solidity contracts. Update
try/catchblocks and test assertions that expected the old error type (#2083). -
ValidatorConfig Signature Change:
changeValidatorStatus(address, bool)now takes auint64 indexinstead of address. This prevents front-running attacks where a malicious validator could rotate their address before deactivation. Callers must now look up the validator's index in the validator array (#2188).
Access Key / Keychain Changes
- Keychain Signature Validation: Signature type (secp256k1, secp256r1, etc.) must now match the
key_typestored when the key was authorized. This closes a security gap where a key authorized for one curve could potentially be used with a different signature scheme. Transactions with mismatched types are rejected at the mempool level (#2178).
Gas Economics (T1 Network Upgrade)
-
2D Nonce Key Gas (TIP-1000): Accessing an existing 2D nonce key now costs 5,000 gas (was 0). Update gas estimates for transactions using 2D nonces (#2362).
-
Developer Action Required: The gas cost changes in TIP-1000 and TIP-1010 (see tables above) require updating
gas_limitvalues in your configuration,estimateGas()calls, and any hardcodedgasPriceormaxFeePerGasvalues in scripts and transaction builders.
Security Fixes
- Signature Type Validation: Verifies signature type matches
key_type, closing a security gap where authorized keys could potentially be used with a different signature scheme. - ValidatorConfig Front-running Fix: Uses validator index instead of address in
changeValidatorStatusto prevent malicious validators from evading deactivation by rotating addresses. - Transaction Pool DoS Hardening: Multiple fixes to prevent eviction-based DoS attacks (#2352, #2327, #2216, #2242, #2183, #2167)
- Checkpoint Revert on Key Authorization OOG: Properly reverts state on out-of-gas during key authorization.
- Reject Expired Access Keys: Mempool rejects transactions with expired access keys.
- Reject Paused TIP20 Tokens: Prevents fee validation bypass using paused tokens.
Full Changelog: v1.0.2...v1.1.0