Owner: @Juan Pablo Madrigal-Cianci
Reviewers: @Frederico Teixeira
This specification details the transaction fee mechanism (TFM) for the Nomos blockspace, which encompasses the finite resources of on-chain computation and permanent state storage. The design is engineered to achieve four primary, interconnected objectives:
The design process began with a fundamental choice between two distinct philosophies for fee market design, exemplified by EIP-1559 and StableFee: should the mechanism be optimized to manage short-term volatility or to provide long-term stability? (c.f. ‣). This document, together with our internal discussions, highly responsive, with a per-block fee adjustment designed to handle "rapid surges of user activity" characteristic of general-purpose L1s. However, the document, along with a key comment on its findings, correctly argues Nomos’ model doesn't map too well to a general-computation blockchain with user transactions (c.f. ‣).
This conclusion is rooted in the unique architectural premise of Nomos. The network is not primarily designed for a chaotic environment of retail users (c.f. Ethereum) but for a more regularized demand profile driven by a smaller set of high-volume, long-lived zones. For these users, cost predictability is paramount. The research confirms this, noting that "StableFee appears to perform better when... the inflow of transactions is relatively constant," (‣ ) a condition that directly mirrors the expected operational state of Nomos.
Therefore, the core rationale of this specification is to deliberately reject a mechanism designed for managing volatility and instead adopt and adapt a mechanism designed to provide stability.
Based on our analysis and the discussion above (c.f. ‣), we recommend a Nomos-Adapted StableFee Mechanism for the blockspace market. This model is a sophisticated implementation of the StableFee philosophy (c.f here) , tailored to the specific needs of Nomos. Our proposed methodology achieves the strategic simplicity of truthful bidding through a uniform clearing price, ensures proposer incentive compatibility via revenue smoothing, and integrates a fee-burn component to establish sound, deflationary tokenomics.
The mechanism operates on two core principles:
fee_cap
), as overbidding provides no advantage.fee_cap
of the last, lowest-bidding transaction that was necessary to fill the block. This ensures fairness and eliminates the "winner's curse" of overpayment common in auctions.The entire lifecycle, from user submission to proposer payment, can be visualized in the following flow:
graph TD
%% --- Transaction Submission & Mempool ---
TxIn["User Transactions<br>Each with a fee_cap (c_t)"] --> Mempool((Mempool));
%% --- Block Construction by Proposer ---
Mempool --> Sort["Sort Mempool by fee_cap (desc)"];
Sort --> Fill["Fill Block with highest-bidding txs<br>until Gas Limit (G_max) is reached"];
Fill --> DeterminePrice["Determine Clearing Price (P_clear)<br><br><i>P_clear = fee_cap of last included tx</i>"];
%% --- On-Chain Fee & Revenue Logic ---
DeterminePrice --> ApplyPricing["Apply Uniform Price to all txs<br>Final Fee = g_t * P_clear"];
ApplyPricing --> CalcRevenue["Calculate Total Block Revenue<br>R_block = (Σ g_t) * P_clear"];
CalcRevenue --> SplitRevenue{"Split Revenue"};
SplitRevenue -- "Burn Rate (φ_burn)" --> Burned["Burned Portion"];