This is part of cosmos/evm, not standard Cosmos SDK. For conceptual understanding of EIP-1559, see EIP-1559 Fee Market.
Parameters
The module contains the following parameters (types, proto):Parameter | Type | Default | Description |
---|---|---|---|
NoBaseFee | bool | false | Disables EIP-1559 base fee (enables legacy pricing) |
BaseFeeChangeDenominator | uint32 | 8 | Controls max base fee change per block (higher = more stable) |
ElasticityMultiplier | uint32 | 2 | Determines target block utilization (2 = 50% target) |
EnableHeight | int64 | 0 | Block height to activate fee market (0 = genesis) |
BaseFee | sdk.Dec | 1000000000 | Current base fee (auto-adjusts each block) |
MinGasPrice | sdk.Dec | 0 | Minimum gas price floor (cannot go below) |
MinGasMultiplier | sdk.Dec | 0.5 | Minimum gas used multiplier for gas wanted |
Parameter Details
Parameter Storage Format
sdk.Dec
(LegacyDec) values are stored as strings with 18 decimal precision (cosmos-sdk):
Human Value | Stored String | Formula |
---|---|---|
1 unit | ”1000000000000000000” | 1 × 10^18 |
0.5 (50%) | “500000000000000000” | 0.5 × 10^18 |
1 billion | ”1000000000000000000000000000” | 10^9 × 10^18 |
Configuration
Adjust parameters to achieve specific network behaviors (params validation):Goal | Parameter | Adjustment | Effect |
---|---|---|---|
Faster fee response | base_fee_change_denominator | 8 → 4 | 2x faster adjustments (±25% vs ±12.5%) |
More stable fees | base_fee_change_denominator | 8 → 16 | 2x slower adjustments (±6.25% vs ±12.5%) |
Earlier fee increases | elasticity_multiplier | 2 → 4 | Fees rise at 25% vs 50% utilization |
Stronger spam deterrent | min_gas_price | Low → High | Higher transaction cost floor |
Configuration Profiles
Scenario Comparisons
Config | 5 Blocks | 10 Blocks | 10x Time |
---|---|---|---|
Ethereum (d=8, e=2) | +34% | +79% | ~20 blocks |
Stable (d=16, e=2) | +16% | +34% | ~40 blocks |
Aggressive (d=4, e=4) | +101% | +304% | ~8 blocks |
Decimal Precision Support
The module supports different token decimal configurations:Decimals | Conversion Factor | Min Unit Gas | Example |
---|---|---|---|
6 | 10^12 | 10^-12 | USDC |
8 | 10^10 | 10^-10 | BTC-wrapped |
18 | 1 | 1 | ETH, most EVM |
Configuration In Production
Parameters can be updated through governance proposals (msg server):Best Practices
Parameter Selection by Use Case
Chain Type | Denominator | Elasticity | MinGasPrice | Why |
---|---|---|---|---|
Testing/Development | 8 | 2 | Zero/Low | Quick iteration |
Production General | 8-16 | 2 | Medium | Balance stability and responsiveness |
High-Frequency Trading | 16-32 | 1-2 | Low | Predictable fees, high throughput |
Enterprise/Private | 32 | 2-3 | High | Maximum stability, cost predictability |
Gaming/Micro-tx | 4-8 | 1 | Very Low | Fast adjustments, minimal fees |
Block Time Correlation
Faster blocks require higher denominators to maintain stability:- 1s blocks → denominator ≥16 (prevents wild swings)
- 6s blocks → denominator = 8 (Ethereum standard)
- 12s blocks → denominator = 4 (can be more responsive)
Monitoring Key Metrics
Metric | Formula | Healthy | Action if Unhealthy |
---|---|---|---|
Fee Volatility | σ(fees)/μ(fees) | <20% daily | Increase denominator |
Utilization Rate | gasUsed/maxGas | 40-60% avg | Adjust elasticity |
Floor Hit Rate | count(fee==min)\/blocks | <10% | Lower min_gas_price |
Recovery Speed | Blocks to return to baseline | 20-40 | Tune denominator |
Integration Examples
Interfaces
EVM JSON-RPC
The fee market integrates with standard Ethereum JSON-RPC methods (RPC backend):Returns the current base fee as hex string. In EIP-1559 mode, returns the base fee; in legacy mode, returns the median gas price.
Returns suggested priority fee (tip) per gas. In cosmos/evm with the experimental mempool, transactions are prioritized by effective gas tip (fees), with ties broken by arrival time.
Returns base fee and gas utilization history for a range of blocks.
Block responses include
baseFeePerGas
field when EIP-1559 is enabled.Transaction Types
The fee market supports both legacy and EIP-1559 transaction types (types):CLI
gRPC
REST
Technical Implementation
State
The module maintains the following state (genesis proto):State Objects
State Object | Description | Key | Value | Store |
---|---|---|---|---|
BlockGasWanted | Gas wanted in the current block | []byte{1} | []byte{uint64} | Transient |
BaseFee | Current base fee | Params.BaseFee | sdk.Dec | KV |
Params | Module parameters | []byte{0x00} | Params | KV |
Genesis State
Begin Block
At the beginning of each block, the module calculates and sets the new base fee (source):End Block
At the end of each block, the module updates the gas wanted for base fee calculation (source):Base Fee Calculation Algorithm
The calculation follows the EIP-1559 specification with Cosmos SDK adaptations (source, utils):Keeper
The keeper manages fee market state and calculations (source):Method | Description | Usage |
---|---|---|
GetBaseFee() / SetBaseFee() | Current base fee | Read/update during block processing |
GetParams() / SetParams() | Module parameters | Governance updates |
GetBlockGasWanted() / SetBlockGasWanted() | Gas tracking | Base fee calculation |
CalculateBaseFee() | Compute next base fee | Called in BeginBlock |
PostTxProcessing
hooks for EVM transaction processing (source).
Events
The module emits the following events (types):Fee Market Block Fees
Attribute Key | Attribute Value |
---|---|
height | Current block height |
base_fee | New base fee |
gas_wanted | Total gas wanted in block |
gas_used | Total gas used in block |
AnteHandlers
The module integrates with EVM transactions through theEVMMonoDecorator
, which performs all fee-related validations in a single pass (source):
EVMMonoDecorator
The primary ante handler that validates and processes EVM transaction fees (mono_decorator.go):Fee Validation Functions
CheckMempoolFee
Validates transaction fees against the local mempool minimum (source):CheckGlobalFee
Enforces the chain-wide minimum gas price set via governance (source):CheckGasWanted
Tracks cumulative gas wanted for base fee calculation (source):Module Distinctions
cosmos/evm vs Standard Cosmos SDK
This fee market module from cosmos/evm differs from standard Cosmos SDK fee handling:Aspect | Standard Cosmos SDK | cosmos/evm Feemarket |
---|---|---|
Fee Model | Static, validator-configured min gas prices | Dynamic EIP-1559 base fee |
Price Discovery | Manual adjustment by validators | Automatic based on utilization |
Transaction Types | Cosmos SDK Tx only | Both Cosmos & Ethereum txs |
Decimal Handling | Chain-specific precision | 18-decimal EVM compatibility |
State Storage | Not tracked | Base fee in state, gas in transient store |
Consensus Impact | No consensus on fees | Base fee part of consensus |
Key Integration Points
The module integrates with EVM through:- AnteHandlers: Custom decorators for EVM transaction validation (source)
- Hooks: PostTxProcessing for EVM state updates (source)
- RPC: Ethereum JSON-RPC methods for fee queries (source)
References
Source Code
- cosmos/evm Fee Market Module - Main module implementation
- AnteHandlers - EVM transaction validation
- Proto Definitions - API and state structures
- RPC Implementation - Ethereum JSON-RPC support
Specifications
- EIP-1559 Specification - Original Ethereum proposal
- Cosmos SDK Docs - Base framework documentation
Tools & Libraries
- Ethereum Gas Tracker - Real-time Ethereum gas prices
- Web3.js EIP-1559 Support - JavaScript integration
- Ethers.js Fee Data - TypeScript/JavaScript library