minimum-gas-prices, and for relayer and wallet operators who need to follow the gas price programmatically. Parameter values are from mainnet on 2026-10-15.
What the module does
The Hub uses Skip’sx/feemarket instead of a fixed minimum gas price. Maintained by Skip. Latest release v1.1.1 (2024-08-26); gaia v28.3.1 pins a later commit of the v1.1 line. Repository active. Checked 2026-10-15. Specification: feemarket SPEC.
Every block, the module computes a base gas price from how full the previous block was. The price never goes below a floor. It goes up when blocks are fuller than the target, so fees rise when the Hub is busy and come back down when it is not. A transaction must pay at least the base price times its gas limit, in the fee denom. Otherwise it is rejected in the mempool and at block execution.
Parameters
Floor price: 0.005 uatom per gas.min_base_gas_price: "0.005000000000000000". The base price can never be lower than this.
Block target: 75,000,000 gas.
The same output shows max_block_utilization: "75000000", equal to the consensus max_gas. With alpha: 0, beta: 1, gamma: 0, delta: 0, window: 1, and min_learning_rate and max_learning_rate both 0.125, the module behaves as an EIP-1559 (Ethereum Improvement Proposal 1559) style controller. Its learning rate is fixed at 12.5 percent per block. The output also shows fee_denom: uatom, enabled: true, and distribute_fees: false. With distribute_fees: false, fees go through the normal fee collector to validators and delegators, not to a separate pool.
All of these are changed by governance through /feemarket.feemarket.v1.MsgParams. The module names its update message MsgParams, not MsgUpdateParams. Proposal 970 is the last one that touched them.
Read the current price
The price that a transaction must meet right now:gas-price uatom query returns price: amount: "0.005000000000000000". The gas-prices query returns the same for every accepted denom (only uatom on the Hub). The state query returns base_gas_price, learning_rate, window, and index. On an idle chain all three show the floor. The REST path is /feemarket/v1/gas_price/uatom. That path is what wallets and relayers poll.
Set fees in gaiad
Use the current price with gas estimation rather than a fixed--fees:
--gas-adjustment should stay modest. If the transaction is rejected with insufficient fee or fee is below base gas price, re-run the gas-price query. Then raise --gas-prices to at least the value it returns. A --fees amount works too, as long as it is at least gas times the current base price.
Node operators
Theminimum-gas-prices setting in app.toml still exists and still applies to the node’s own mempool. The fee market, however, sets the effective floor on chain. Set the node’s value at or below the floor, so the node does not reject transactions the chain would accept:
minimum-gas-prices refuses to start. A node set higher than the chain’s current base price silently drops transactions that every other node accepts.
Relayers and wallets
Relayers should query the price rather than hardcode it. Hermes does this withdynamic_gas_price = { enabled = true, multiplier = 1.1, max = 0.6 } in the Hub chain block (Relaying). The chain registry lists fixed_min_gas_price: 0.005, low: 0.01, average: 0.025, and high: 0.03 for cosmoshub-4. Wallets that use the registry’s average pay five times the floor on a quiet chain. That is harmless but not necessary.
Verify
Submit any transaction at the floor price and read its fee back:code: 0 with a fee equal to gas_wanted times 0.005 uatom shows the floor was accepted. A mainnet example at height 33424479 has gas_wanted: 873264 and fee 10916uatom. That is 0.0125 uatom per gas, above the floor as the sender chose.
Next
- Delegator CLI guide for fee flags on every transaction.
- Relaying for Hermes gas settings.
- Parameter change proposals to change the floor.