Skip to content

New Block Rewards Formula - #430

Open
fredericosteixeira wants to merge 10 commits into
masterfrom
new-block-rewards
Open

New Block Rewards Formula#430
fredericosteixeira wants to merge 10 commits into
masterfrom
new-block-rewards

Conversation

@fredericosteixeira

Copy link
Copy Markdown
Contributor

Reviewer Orientation

Read Motivation before the first entry. The revision replaces the block reward equation, and every other change in this PR follows from it. Row 8 is a blocking omission rather than a change to review.

# Priority Document / Change What to look for
1 Critical Start hereBlock Rewards: new reward equation (D1) $R_t = R^{\text{block}}_t + A_t c$. Fee cap, fee split and excess capture removed. $R_t$ is no longer bounded above, so no downstream protocol may assume $R_t \le c$
2 Critical Start hereBlock Rewards: epoch settlement and stock accounting (D3) Payout moves from per block to per epoch. The 40/60 split is applied once on the epoch total. Check that $S_t + P_t + B_t$ closes at every block and at the boundary
3 Critical Block Rewards: integer consensus rule (D4) New constants, the removed throttle constant, the solvency clamp, and the u64 to u128 widening. Determinism across nodes depends on this section alone
4 High Execution Market (D5) Priority fees leave $R^{\text{block}}$ and take no Blend share. Check the two aggregates sum to the block's total fees
5 High Anonymous Leaders Reward (D6) leaders_rewards now has two inflows on the same epoch schedule. Check the unlinkability argument extended to the tip
6 Medium Storage Markets (D7) Notation and settlement wording only. The price mechanism is untouched
7 Medium Overview Cryptoeconomics (D8) Pseudocode accrues over the epoch and splits once on the total. Check it matches D3 exactly
8 High Missing analysis document and assets (Affected Specifications) Blocking. 39 links, 1 further link, 2 asset references and 2 anchors in block-rewards.md resolve to nothing in this repository

Status tracker

  • 🚧 Raw (make sure that all below is completed)
    • Template applied
    • Authors filled in
    • Authors agree on the RFC content
  • 📘 Draft (make sure that all below is completed)
    • All dependent specifications added (Notion backlinks checked)
    • Specifications to deprecate added, if applicable
    • Specifications to retire added, if applicable
    • Research Lead assigned, or Project Lead assigned if the Research Lead is an author
    • Relevant Research Domain Experts assigned (cannot be authors)
  • ⚙️ Verified (make sure that all below is completed)
    • Researchers' comments addressed
    • All logical changes documented
    • All Research reviewers approve the latest version
    • Engineering Lead assigned
    • Relevant Engineering Domain Experts assigned
  • 🔀 Merged (make sure that all below is completed)
    • Engineers' comments addressed
    • Every change added to the change log
    • All Engineering reviewers approve the latest version
    • Specification version numbers assigned
    • Implementation reviewed and merged
    • Branch updated to master and all conflicts resolved
    • PR merged

Change log

Revision Description Date
v1 Initial PR description 2026-08-28

Motivation

Revision 1.1.0 of Block Rewards paid $R_t = A_t c + (1 - A_t) \bar{R}_t$, where $\bar{R}_t$ is a 120-block moving average of pooled fees and $c$ the per-block release cap. That form has three consequences the network cannot carry. The block reward was bounded above by $c$ at any fee level, so fee revenue above the cap was withheld in the rewards pool with no rule that ever released it. The release depended on a second key performance indicator, the annualized average pooling rate $\gamma_t$, so fee activity displaced the security subsidy rather than adding to it. Sustaining that average required a 120-block fee window in consensus state, and a proposer influences its own contribution to that window.

The reserve throttle inherited the same defect. It scaled the release by the reserve balance, which left the mechanism releasing an ever smaller amount exactly when the security target was still unmet and the reserve was nearly spent.

This revision separates the two jobs the reward performs. Fees are recycled to the participants who produced the blocks that collected them. The reserve pays for security while the network is establishing it, sized only by how far the inferred total stake sits below target. The two components no longer interact, gross emission is bounded per block and per year at any fee level, and consensus state loses the fee window.

Proposal

Block Rewards 1.2.0 redefines the block reward as

$$ R_t = R^{\text{block}}_t + A_t \cdot c , $$

the block's Execution base fees and Permanent Storage fees passed through in full, plus a release drawn from the genesis reserve. $A_t$ is a piecewise-linear security controller reading the inferred total stake alone. The fee-average indicator $\gamma_t$, its responsiveness constants $\alpha_d$ and $\alpha_a$, the look-back window $T$ and the reserve throttle are removed. A solvency clamp $\iota_t = \min \lbrace A_t c, \; B_{t-1} \rbrace$ replaces the throttle.

Payment moves from per block to per epoch. Block rewards accrue in the rewards pool over the $L = 21600$ blocks of an epoch and are transferred in full at the boundary, split once on the epoch total: 60% to Blend, the residual to leaders.

Execution priority fees are removed from the block reward entirely. They route to the leader reward accumulator, take no Blend share, and are settled to leaders alone. Execution Market, Storage Markets, Anonymous Leaders Reward and the cryptoeconomics overview are realigned to these definitions with no change to their own mechanisms.

Discussion

Properties withdrawn

Three claims of revision 1.1.0 no longer hold, and the specification states this explicitly. Reviewers who rely on any of them must revisit their assumptions.

  • $R_t$ is no longer bounded above. It contains uncapped fees. The bound $R_t \le c$ must not be assumed by any downstream protocol. Only the released component is bounded, at $c$ per block.
  • Circulating supply is monotone non-decreasing. The contraction regime, in which high fee inflow removed tokens from circulation, does not exist. Every pooled token returns at the next boundary. The link between usage and the token now runs through yield, not supply.
  • Manipulation resistance is relative, not absolute. Requirement R7 still holds, in that no participant with a combined share below one profits from inflating fees. The per-block absolute bound is gone, and the recovered fraction is now constant in the fee paid.

Costs accepted

  • Terminal yield cliff. The release falls from $A_t c$ to zero across two consecutive blocks when the reserve empties, removing up to $I_{max} S_{cap} / D_t$ of annual staking yield at that instant. The terminal state is absorbing.
  • Unbounded accumulator. The rewards pool has no protocol bound, because its fee component has none. Its only bound is conservation, $P_t \le S_{cap}$.
  • u128 is now mandatory. u64 is insufficient by seventeen orders of magnitude for the controller intermediate, and does not accommodate the accumulator either.

Compatibility

The change is not backwards compatible at the consensus rule. Nodes implementing 1.1.0 compute a different reward for the same state, pay it on a different schedule, and maintain a fee window this revision does not define. No migration path is specified.

Details

D1. Block reward redefined as fees plus a stake-driven release

block-rewards.md, section Block Rewards.

Removed, revision 1.1.0:

$$ R_t = A_t \cdot \frac{I_{max} \cdot S_{cap} \cdot \Delta_t}{f} + (1 - A_t) \cdot \bar{R}_t . $$

Added, equation (1), the design statement:

$$ R_t = R^{\text{block}}_t + A_t \cdot c . $$

Added, equation (2), the normative rule, solvency clamped:

$$ \iota_t = \min \lbrace A_t \cdot c, ; B_{t-1} \rbrace , \qquad R_t = R^{\text{block}}_t + \iota_t . $$

The constant $c = I_{max} S_{cap} \Delta_t / f$ is unchanged in value at $62500/657 \approx 95.129$ LGO, and changed in role. It is now the maximum draw on the reserve in one block, and it is never applied to fees.

The two components are additively separable, with zero cross-partial. Bounds become

$$ R^{\text{block}}_t ;\le; R_t ;\le; R^{\text{block}}_t + c , \qquad 0 ;\le; \iota_t ;\le; c . $$

The lower bound is the block's fees, not zero. The upper bound is not absolute.

The clamp is not a design parameter. It binds only in the final blocks of the reserve's life. It preserves continuity of $R_t$ in $D_t$, in $R^{\text{block}}_t$ and in $B_{t-1}$, since a minimum of continuous functions is continuous.

D2. Controller reduced to one indicator

Same document, section Security Controller.

Removed:

$$ A_t = \min \lbrace 1, ; \max \lbrace 0, ; \frac{\alpha_d \cdot \delta_t + \alpha_a \cdot \gamma_t + I_{min}}{I_{max}} \rbrace \rbrace . $$

Added:

$$ A_t = \min \lbrace 1, ; \max \lbrace 0, ; \frac{\delta_t}{\delta^\ast} \rbrace \rbrace , \qquad \delta^\ast = \frac{\Lambda}{D_{target}} . $$

The normative form for implementation carries no division by $D_{target}$:

$$ A_t = \frac{\min \lbrace \Lambda, ; \max \lbrace 0, ; D_{target} - D_t \rbrace \rbrace}{\Lambda} . $$

Both forms are equivalent. The second is normative because $\Lambda$ is measured in tokens and compares directly against the stake shortfall.

Removed from the parametrization: $\alpha_d = 1/4$, $\alpha_a = 1$, $I_{min} = 0\%$, $T = 120$, $w_i$, and $D_{1,target} = 10^{10}$. Added: $\Lambda = 5 \cdot 10^8$ LGO, $L = 21600$ blocks, and $c$ as an explicit constant. $D_{0,target}$ is renamed $D_{target}$. $S_{cap}$, $I_{max}$, $Y$, $\Delta_t$ and $f$ are unchanged.

At $\delta^\ast = 1/6$ the controller saturates at or below $\theta = 25\%$ and reaches zero at $\theta = 30\%$. The release-funded annual yield over the saturated region is

$$ r^{\iota}(D_t) = \frac{I_{max} S_{cap}}{D_t} ;\ge; \frac{I_{max} S_{cap}}{D_{target} - \Lambda} = 4.0% , $$

measured against the base at saturation, $D_{target} - \Lambda = 2.5 \cdot 10^9$ LGO, not against $D_{target}$.

D3. Payout moves from per block to per epoch

Same document, sections Accounting and Supply Dynamics and Epoch settlement. New requirement R9: the obligation accrued over an epoch is discharged in full at the boundary, and the rewards pool retains no balance across epochs.

Two flows occur at every block, in any order:

$$ \text{1. Block fees:} \quad R^{\text{block}}_t : ; S_t \rightarrow P_t , \qquad \text{2. Released rewards:} \quad \iota_t : ; B_t \rightarrow P_t . $$

At $t = T_e = e L$ the pool is emptied:

$$ \Pi_e = \sum_{t = T_{e-1}+1}^{T_e} R_t , \qquad \Pi^{blend}_e = \left\lfloor \frac{3 , \Pi_e}{5} \right\rfloor , \qquad \Pi^{leader}_e = \Pi_e - \Pi^{blend}_e , \qquad P_{T_e} = 0 . $$

Assigning the residual rather than computing both shares with independent floor divisions is normative. Two independent floors lose up to one base unit per settlement and break conservation. Splitting on the epoch aggregate instead of per block reduces the truncation residual by a factor of $L$.

The identity $S_t + P_t + B_t$ is invariant under these flows. Over an epoch,

$$ S_{T_e} - S_{T_{e-1}} = \sum_{t = T_{e-1}+1}^{T_e} \iota_t ;\ge; 0 . $$

D4. Integer rule restated, u128 now required

Same document, section Float Precision for Implementation. All quantities are in base units, $1$ LGO $= 10^{d}$ base units with $d = 18$.

Constants:

-A_SCALE = 120_000_000        # 1/(I_max * D1_target * Delta_t * T)
-FEE_AVG_NUMERATOR = 10_512   # fee-window term
-# Phi = beta_star * B_0      # reserve throttle
+c_star      = (62_500 * 10**d) // 657
+Lambda_star = 5 * 10**8 * 10**d
+M           = 2**32          # fixed-point scale of the controller

Rule:

$$ a_t = \left\lfloor \frac{\min \lbrace \Lambda^{\ast}, ; \max \lbrace 0, ; D_{target} - D_t \rbrace \rbrace \cdot M}{\Lambda^{\ast}} \right\rfloor , \qquad \iota_t = \min \left\lbrace \left\lfloor \frac{a_t \cdot c^{\ast}}{M} \right\rfloor , ; B_{t-1} \right\rbrace , \qquad R_t = R^{\text{block}}_t + \iota_t . $$

The fee term enters exactly, with no scaling and no floor, so all approximation error is confined to the released component. The largest intermediate is

$$ \max \lbrace \Lambda^{\ast} M, ; M c^{\ast} \rbrace = \Lambda^{\ast} M = 2.15 \cdot 10^{36} , $$

which fits u128 with a factor of 158 of headroom and exceeds u64 by seventeen orders of magnitude. Any change to $\Lambda$ or $M$ must preserve $\max \lbrace \Lambda^{\ast} M, \; M c^{\ast} \rbrace < 2^{128}$. The rewards pool accumulator is bounded only by conservation, $P_t \le S_{cap}^{\ast} = 10^{28}$ base units.

Reported accuracy against exact rational arithmetic over $432000$ blocks: worst deviation $2.22 \cdot 10^{-8}$ LGO per block, a relative error of $2.3 \cdot 10^{-10}$ on annual emission.

D5. Execution priority fees leave the block reward

execution-market.md 1.1.3. A second aggregate is defined, and the two account for the block's total fees:

$$ \hat{R}_{\mathrm{pooled}}(s) = \sum_{t \in \mathcal{B}_s} g_t \cdot b_{\mathrm{exec}}[s] , \qquad \hat{R}_{\mathrm{priority}}(s) = \sum_{t \in \mathcal{B}_s} g_t \cdot p_t , $$

$$ \sum_{t \in \mathcal{B}_s} F_t = \hat{R}_{\mathrm{pooled}}(s) + \hat{R}_{\mathrm{priority}}(s) . $$

$\hat{R}_{\mathrm{pooled}}$ is the Execution-market component of $R^{\text{block}}_s$, entering the block reward additively and in full, with no cap, no split and no excess capture. It does not enter $\iota_s$. $\hat{R}_{\mathrm{priority}}$ is routed in full to the leader reward accumulator, takes no Blend share, is not part of $R^{\text{block}}_s$, and does not enter $\Pi_e$.

The economic property is restated. Routing the base fee to the pool recycles it rather than destroying it, so usage applies no permanent downward pressure on circulating supply and none on total supply. Within an epoch the pooled amount is a float on circulation.

No change to the price mechanism, the EMA update rule, or any parameter.

D6. The leader pool is credited by two streams

bedrock-anonymous-leaders-reward.md 1.1.1. leaders_rewards is credited epoch by epoch from $\Pi^{leader}_e$, which is 40% of the pooled base fees, Permanent Storage fees and reserve release, and separately from the epoch's Execution priority fees in full.

The unlinkability argument is extended to the tip: paying a tip to the proposer in its own block would tie the amount received to that block's contents and defeat the property this protocol provides. The share formula and the voucher mechanics are unchanged.

D7. Storage-market references realigned

storage-markets.md 1.1.2. Notation $R_{block}$ becomes $R^{\text{block}}$, and the pool is described as emptied at each epoch boundary and split 40/60 rather than continuously drawn down. The decomposition $R^{\text{block}} = \hat{R}_{\text{storage}} + \hat{R}_{\mathrm{pooled}}$ is unchanged in substance. No change to $P_{\text{storage}}$, its update rule, or any parameter.

D8. Cryptoeconomics overview realigned

overview-cryptoeconomics.md 1.2.2. The KPI description is corrected: the release function takes the inferred total stake alone and does not depend on fee revenue. The pseudocode accrues over the epoch and splits once on the total:

 def get_blend_reward(e: epoch):
-    blend_rewards = 0
+    settlement = 0
     for b in e.blocks:
-        blend_rewards += 0.6 * get_block_rewards(b)
-    return blend_rewards
+        settlement += get_block_rewards(b)   # accrue, do not split per block
+    return 3 * settlement // 5
 def update_leader_rewards(e: epoch, leader_rewards: int):
+    settlement = 0
     for b in e.blocks:
-        leader_rewards += 0.4 * get_block_rewards(b)
-        leader_rewards += get_execution_market_tips(b)
+        settlement += get_block_rewards(b)
+        leader_rewards += get_execution_market_tips(b)   # in full, no Blend share
+    leader_rewards += 2 * settlement // 5
     return leader_rewards

Note that update_leader_rewards computes the leader share as an independent floor, $\lfloor 2 \Pi_e / 5 \rfloor$, while D3 specifies it as the residual $\Pi_e - \Pi^{blend}_e$. The two differ by one base unit whenever $\Pi_e \not\equiv 0 \pmod 5$.

Chores

  • block-rewards.md revision history is re-dated inconsistently. 1.0.0 moves from 2026-04-24 to 2026-08-12 and 1.1.0 from 2026-08-25 to 2026-06-22, which places 1.1.0 before 1.0.0. The new 1.2.0 row is dated 2026-08-23, earlier than the 2026-08-27 rows added to the three sibling specifications in the same PR.
  • block-rewards.md 1.1.0 row had lost its math delimiters, $S_{tge}$ for $`S_{tge}`$. Fixed in this PR.
  • overview-cryptoeconomics.md had a math span missing its closing backtick, $`e+2$ for $`e+2`$, which left the rest of the sentence unrendered. Fixed in this PR.
  • execution-market.md introduces a blank line between the Priority Fee and Fee Routing and Pooling bullets, which splits one list into two. The surrounding text still announces four core principles while three bullets follow, a discrepancy that predates this PR.
  • overview-cryptoeconomics.md corrects the second list marker from 1. to 2. and still ends without a trailing newline.
  • execution-market.md fixes the impact-dampening typo, ($1q$) for $(1-q)$.
  • block-rewards.md drops its only inbound link to analysis-block-reward-parameter-calibration.md. Nothing in the repository now links to that document. Confirm whether it is superseded, and mark it Deprecated if so.
  • Two links to #open-items in block-rewards.md point at a section the document does not contain.
  • execution-market.md carries 22 inline math spans and storage-markets.md 38, all written as bare $...$ rather than $`...`$. They predate this PR and are left untouched here to keep the diff on-subject.

Implementation

Blocking work on the specification itself comes first. The analysis document this revision depends on is not in the repository, so 39 of its cross-references currently resolve to nothing.

  • Add the analysis document to docs/blockchain/raw/, renamed to the repository's hyphen convention. It exists at revision 1.1.0 but only outside this repository
  • Reconcile it with the existing analysis-block-rewards.md, which is at 1.0.0 and analyses the superseded mechanism. Decide whether the new revision replaces that file or is added beside it
  • Re-key the analysis document's own references from Block Rewards revision 1.1.0 to 1.2.0, the number this PR assigns in the repository
  • Repoint the 39 analysis_new_block_rewards_specs.md links and the 1 analysis_block_rewards_specs.md link in block-rewards.md to the added file
  • Add block-rewards/assets/token-flows.png and the .dot source, and repoint the Figure 1 reference, which currently targets a new-block-rewards/assets/ directory that does not exist
  • Add the differential test reference_implementation.py under the same assets directory and repoint the reference in the Accuracy section
  • Add the Open Items section that block-rewards.md links to twice, or remove both links
  • Remove block-rewards/assets/high-level-system-design.png and its .dot source if Figure 1 supersedes them
  • Implement $\iota_t$ and $R_t$ per the Rule section, in u128. Widen any u64 reward path
  • Implement the epoch settlement at $t \equiv 0 \pmod L$, assigning the residual to the leader share rather than taking a second floor division
  • Remove the 120-block pooled-fee window from consensus state, along with $\alpha_d$, $\alpha_a$, $I_{min}$, $T$ and $D_{1,target}$
  • Remove the reserve throttle constant $\Phi = \beta^\ast B_0$ and add the solvency clamp against $B_{t-1}$
  • Route Execution priority fees to the leader reward accumulator, outside $R^{\text{block}}$ and outside $\Pi_e$
  • Port the differential test against exact rational arithmetic, including the near-empty reserve run in which the clamp binds
  • Add invariant tests: $S_t + P_t + B_t$ constant at every block and boundary, $P_{T_e} = 0$ at every boundary, $\iota_t \le B_{t-1}$, $B_t \ge 0$ with exact termination, and $\Pi^{blend}_e + \Pi^{leader}_e = \Pi_e$
  • Verify the implementation matches this specification

Affected Specifications

Specification Status Note
Block Rewards Modified 1.1.0 to 1.2.0. Reward equation, controller, epoch settlement and integer rule all replaced. 298 lines added, 359 removed
Execution Market Modified 1.1.2 to 1.1.3. Priority-fee routing is normative; the price mechanism is untouched
Anonymous Leaders Reward Protocol Modified 1.1.0 to 1.1.1. Two credit streams into leaders_rewards
Storage Markets Modified 1.1.1 to 1.1.2. Notation and settlement wording only
Overview Cryptoeconomics Modified 1.2.1 to 1.2.2. Informational. Carries one pseudocode discrepancy against D3
[Analysis] Block Rewards Omitted, flagged Still at 1.0.0 and analyses the superseded mechanism. block-rewards.md cites revision 1.1.0 of it 39 times under a filename that does not exist here. This PR cannot be verified without it
[Analysis] Block Reward Parameter Calibration Omitted, flagged Calibrates $\alpha_d$, $\alpha_a$ and $T$, all removed by this PR. Its only inbound link is also removed. Likely Deprecated or Retired; confirm
Total Stake Inference Omitted, check Unchanged, but $D_t$ is now the sole input to the release. Its error characteristics carry directly into emission
Service Reward Distribution Protocol Omitted, check Receives $\Pi^{blend}_e$, which is now an epoch total with no upper bound. Confirm it assumes no per-block cap

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the Logos Blockchain economics specifications to redefine block rewards as uncapped block fees plus a stake-driven reserve release, and realigns downstream specs (execution market, storage market, leader rewards, cryptoeconomics overview) to the new epoch-based settlement and fee-routing model.

Changes:

  • Redefines block rewards and accounting around R_t = R^{block}_t + iota_t with epoch settlement and u128-safe integer rules.
  • Moves leader/Blend splitting to occur once per epoch total; routes execution priority fees outside R^{block} and outside epoch settlement.
  • Updates related specifications’ wording and pseudocode to match the new routing/settlement definitions.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 9 comments.

Show a summary per file
File Description
docs/blockchain/raw/block-rewards.md Core rewrite of the reward equation, controller, epoch settlement, and integer consensus rule; adds references/assets for analysis and diagrams.
docs/blockchain/raw/execution-market.md Updates fee-routing narrative to split base vs priority fee destinations under the new reward model.
docs/blockchain/raw/bedrock-anonymous-leaders-reward.md Updates leader pool crediting to include both epoch leader-share settlement and priority fees.
docs/blockchain/raw/storage-markets.md Aligns storage-fee routing terminology and R^{block} notation with the new Block Rewards spec.
docs/blockchain/raw/overview-cryptoeconomics.md Updates overview narrative and pseudocode to accrue over the epoch and reflect new routing/splitting rules.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +24 to +26
| 1.0.0 | Initial revision. | 2026-08-12 |
| 1.1.0 | Changing from burning/minting to pooling/distributing/releasing, removing $S_{tge}$ | 2026-06-22 |
| 1.2.0 | Block reward redefined as $`R_t = R^{\text{block}}_t + A_t c`$. Fee cap, fee split and excess capture removed; the reserve throttle removed and replaced by a solvency clamp. | 2026-08-23 |
| 1.0.0 | Initial revision. | 2026-04-24 |
| 1.1.0 | Changing from burning/minting to pooling/distributing/releasing, removing $`S_{tge}`$ | 2026-08-25 |
| 1.0.0 | Initial revision. | 2026-08-12 |
| 1.1.0 | Changing from burning/minting to pooling/distributing/releasing, removing $S_{tge}$ | 2026-06-22 |
Comment on lines +87 to +91
The mechanism is specified to satisfy the following requirements. Each is discharged by a numbered result in [\[Analysis\] Block Rewards](analysis_new_block_rewards_specs.md). The requirement is normative here; the proof that the mechanism meets it is in that document.

For optimal functionality, block rewards should be anchored to specific observable metrics rather than arbitrary values. Block numbers simply track time passage without indicating chain state. Transaction counts per block are vulnerable to manipulation. On the other hand, tracking the number of Blend nodes or inferring total stake provide more robust information about the chain state, specially when they can be compared with targets that are considered “healthy”.
| | Requirement | Discharged by |
| --- | --- | --- |
| R1 | The token supply is fixed. The mechanism never mints. The stocks it controls are conserved under every state transition. | [Derived Property P1](analysis_new_block_rewards_specs.md#p1-conservation) |
| R4 | The block reward is a continuous function of the state. No threshold produces a jump in the amount paid. | [Derived Property P6](analysis_new_block_rewards_specs.md#p6-the-reserve-pool-covers-every-released-reward) |
| R5 | Gross emission into circulation is bounded per block and per year, in every state, independently of fee revenue. | [Derived Property P3](analysis_new_block_rewards_specs.md#p3-block-reward-bounds-and-monotonicity) |
| R6 | No stock accumulates without a release rule. Any token withheld from a block reward is held in an account the mechanism can later draw on. | [Derived Property P2](analysis_new_block_rewards_specs.md#p2-the-rewards-pool-accrues-within-an-epoch-and-discharges-at-the-boundary) |
| R7 | No participant profits from inflating the fees in a block. | [Incentive Analysis I1](analysis_new_block_rewards_specs.md#i1-inflating-fees-is-not-profitable-but-is-no-longer-bounded-in-effect). Weakened relative to revision 1.0.0; see [Open Items](#open-items). |

- When security participation is below target, a higher reserve release attracts more validators.
- As usage increases and fees are pooled, the reserve release adjusts downward and distribution from the pool rises to stabilize circulating supply.
![Block reward token flows](new-block-rewards/assets/token-flows.png)
np.maximum(STAKE_TARGET + FEE_AVG_NUMERATOR * sum_fees - total_stake, int64(0)),
A_SCALE,
)
A full chain of $`20`$ epochs of $`L = 21600`$ blocks, $`432000`$ blocks in total, was simulated against exact rational arithmetic with $`D_t \in [0, 4 \cdot 10^9]`$ LGO and $`R^{\text{block}}_t \in [0, 3c]`$ drawn independently at each block. The run was repeated with the reserve initialized at $`2 \cdot 10^6`$ LGO so that the clamp binds. The differential test is `new-block-rewards/assets/reference_implementation.py`.
leader_rewards += get_execution_market_tips(b) # get Execution market tips
settlement += get_block_rewards(b) # accrue, do not split per block
leader_rewards += get_execution_market_tips(b) # tips, in full, no Blend share
leader_rewards += 2 * settlement // 5 # the residual, 40%
Comment on lines 61 to +65
The mechanism operates on four core principles:

- Dynamic Base Fee: A protocol-defined base_fee for Execution Gas must be paid for a transaction to be included in a block. This fee adjusts automatically based on a smoothed average of recent network demand relative to a predefined capacity target, ensuring sustainable network load. This base_fee is the minimal threshold to be paid for the transaction to be accepted by the block builder.
- Priority Fee (Tip): To incentivize faster inclusion by block builders, users add a priority_fee on top of the base fee. This creates a simple and transparent auction for block space during periods of high demand. The proceeds of this goes to the block builder.
- Fee Splitting and Pooling: The two fee components are treated differently. The entire base_fee is routed to the rewards pool, removing it from circulation. As usage grows, more base fees are routed to the pool and removed from circulation, which creates a direct link between network activity and the circulating supply of the native token. The priority_fee is not immediately distributed to the block builder (to preserve privacy), but instead it is directed into the block builders reward stream. 40% of the rewards will be allocated to block builders and the remaining 60% to Blend nodes. Rewards are privacy-preserving via [Anonymous Leaders Reward Protocol](bedrock-anonymous-leaders-reward.md).
- Dynamic Base Fee: A protocol-defined base_fee for Execution Gas must be paid for a transaction to be included in a block. This fee adjusts automatically based on a smoothed average of recent network demand relative to a predefined capacity target, ensuring sustainable network load. This base fee is the minimal threshold to be paid for the transaction to be accepted by the block builder.
- Priority Fee (Tip): To incentivize faster inclusion by block builders, users add a priority fee on top of the base fee. This creates a simple and transparent auction for block space during periods of high demand. The proceeds go to the block builder class in full, with no Blend share, and are claimed anonymously rather than collected in the block itself.

- Built-in safeguards against manipulation through moving averages and bounded functions.

This specification represents a comprehensive approach to creating a robust economic foundation for the Logos Blockchain network that balances security requirements with long-term economic sustainability.
The properties this mechanism satisfies, its behaviour across the range of its state variables, the incentives it creates, its failure modes, and the trade-offs taken are derived in [\[Analysis\] Block Rewards](analysis_block_rewards_specs.md), revised to 1.1.0 alongside this document. Results proved there are referenced from this document by the labels P for derived properties, S for scenarios, I for incentive results, and F for failure modes. That document also records which results of revision 1.0.0 were replaced, reversed or withdrawn by this revision.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants