{"events":[{"id":"docs:https://docs.flop.network/docs/agent-integration:2026-11-03","kind":"docs","at":"2026-11-03","clock":"page-date","source":"https://docs.flop.network/docs/agent-integration","measuredAt":"2026-11-06T03:27:33.788Z","title":"/docs/agent-integration","detail":"Page labels this as Last updated. Day precision only. It is not a verified edit time or a content diff.","changes":[{"name":"Page label","before":null,"after":"Last updated 2026-11-03"}],"links":[{"label":"Docs page","url":"https://docs.flop.network/docs/agent-integration"}]},{"id":"docs:https://docs.flop.network/docs/sdk-references:2026-10-30","kind":"docs","at":"2026-10-30","clock":"page-date","source":"https://docs.flop.network/docs/sdk-references","measuredAt":"2026-11-06T03:27:33.218Z","title":"/docs/sdk-references","detail":"Page labels this as Last updated. Day precision only. It is not a verified edit time or a content diff.","changes":[{"name":"Page label","before":null,"after":"Last updated 2026-10-30"}],"links":[{"label":"Docs page","url":"https://docs.flop.network/docs/sdk-references"}]},{"id":"pypi:flop-sdk:0.2.0","kind":"sdk","at":"2026-10-29T05:27:41.419Z","clock":"published","source":"https://pypi.org/pypi/flop-sdk/json","measuredAt":"2026-11-06T03:27:32.507Z","title":"flop-sdk 0.2.0","detail":"Earliest recorded PyPI artifact upload for this release. Later uploads can have other dates.","changes":[{"name":"Published artifact","before":null,"after":"flop-sdk==0.2.0"}],"links":[{"label":"PyPI release","url":"https://pypi.org/project/flop-sdk/0.2.0/"}]},{"id":"npm:@flop-labs/sdk:0.4.0","kind":"sdk","at":"2026-10-29T04:03:01.374Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/sdk","measuredAt":"2026-11-06T03:27:30.848Z","title":"@flop-labs/sdk 0.4.0","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/sdk@0.4.0"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/sdk"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/sdk/v/0.4.0"}]},{"id":"npm:@flop-labs/cli:0.4.0","kind":"sdk","at":"2026-10-29T04:02:15.653Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/cli","measuredAt":"2026-11-06T03:27:31.418Z","title":"@flop-labs/cli 0.4.0","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/cli@0.4.0"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/cli"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/cli/v/0.4.0"}]},{"id":"npm:@flop-labs/pi:0.3.1","kind":"sdk","at":"2026-10-29T04:01:52.222Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/pi","measuredAt":"2026-11-06T03:27:32.209Z","title":"@flop-labs/pi 0.3.1","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/pi@0.3.1"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/pi"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/pi/v/0.3.1"}]},{"id":"npm:@flop-labs/client:0.2.1","kind":"sdk","at":"2026-10-29T04:01:44.835Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/client","measuredAt":"2026-11-06T03:27:29.646Z","title":"@flop-labs/client 0.2.1","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/client@0.2.1"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/client"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/client/v/0.2.1"}]},{"id":"npm:@flop-labs/contracts:0.1.1","kind":"sdk","at":"2026-10-29T04:01:41.714Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/contracts","measuredAt":"2026-11-06T03:27:30.263Z","title":"@flop-labs/contracts 0.1.1","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/contracts@0.1.1"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/contracts"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/contracts/v/0.1.1"}]},{"id":"npm:@flop-labs/cli:0.0.0-stage","kind":"sdk","at":"2026-10-29T04:00:59.319Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/cli","measuredAt":"2026-11-06T03:27:31.418Z","title":"@flop-labs/cli 0.0.0-stage","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/cli@0.0.0-stage"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/cli"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/cli/v/0.0.0-stage"}]},{"id":"npm:@flop-labs/pi:0.0.0-stage","kind":"sdk","at":"2026-10-29T04:00:56.285Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/pi","measuredAt":"2026-11-06T03:27:32.209Z","title":"@flop-labs/pi 0.0.0-stage","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/pi@0.0.0-stage"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/pi"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/pi/v/0.0.0-stage"}]},{"id":"npm:@flop-labs/sdk:0.0.0-stage","kind":"sdk","at":"2026-10-29T04:00:53.210Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/sdk","measuredAt":"2026-11-06T03:27:30.848Z","title":"@flop-labs/sdk 0.0.0-stage","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/sdk@0.0.0-stage"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/sdk"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/sdk/v/0.0.0-stage"}]},{"id":"npm:@flop-labs/client:0.0.0-stage","kind":"sdk","at":"2026-10-29T04:00:48.967Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/client","measuredAt":"2026-11-06T03:27:29.646Z","title":"@flop-labs/client 0.0.0-stage","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/client@0.0.0-stage"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/client"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/client/v/0.0.0-stage"}]},{"id":"npm:@flop-labs/contracts:0.0.0-stage","kind":"sdk","at":"2026-10-29T04:00:46.233Z","clock":"published","source":"https://registry.npmjs.org/@flop-labs/contracts","measuredAt":"2026-11-06T03:27:30.263Z","title":"@flop-labs/contracts 0.0.0-stage","detail":"npm publication time. It does not establish compatibility or a deployed runtime version.","changes":[{"name":"Published artifact","before":null,"after":"@flop-labs/contracts@0.0.0-stage"}],"links":[{"label":"Registry metadata","url":"https://registry.npmjs.org/@flop-labs/contracts"},{"label":"Package","url":"https://www.npmjs.com/package/@flop-labs/contracts/v/0.0.0-stage"}]},{"id":"spec:5730f4b6cf56fa88bb93bbda272dc449b2f77b17:56410c67b11292e707d32ef32e9c4ff9c02e28c7:CHANGELOG.md","kind":"spec","at":"2026-10-26T03:50:48.000Z","clock":"commit","source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/56410c67b11292e707d32ef32e9c4ff9c02e28c7/CHANGELOG.md","measuredAt":"2026-11-06T03:27:28.272Z","title":"CHANGELOG.md: 5730f4b to 56410c6","detail":"docs(yellowpaper): sync 0.5.0 (draft) from flop-core@dfd98a59. 1 changed sections. 0 changed Appendix A values. Text changes are not deployed upgrades.","changes":[{"name":"Section: Yellowpaper changelog [after start] / Yellowpaper changelog [after start] / [Unreleased] [after start] / Changed [after start]","before":"### Changed\n\n- State in §15.5 R15.5 that proven-fault slash proceeds at the active-set floor are confiscated and transferred to the Foundation (R9.10) rather than burned.\n\n- Propagate the zero-burn, operator self-stake-only, and off-chain referral rulings to the normative\n  spec and canonical parameters (D-0529, D-0530, D-0531; #2792, #1945, #1358): set\n  `tx_fee_burn_percent_live` (`BurnFees`) to 0% with 100% of live transaction fees and tips routed to\n  the block author (§9.1 R9.6, Appendix D, Appendix H); replace legacy \"full-burn\" slash terminology\n  with 100% routing to `FLOPFoundationAccount` (§11.3, §13.2, §15.7, Appendix A); prohibit third-party\n  delegated staking into validators and miners, deprecate delegation extrinsics/caps and operator\n  commissions (`miner_staking::delegate`, `max_delegators_per_miner`, `miner_commission_cap_percent`),\n  and formalize the 5% duration-locked community staking pool across seven lock tiers without\n  slashing risk (§2.3, §6.1, §9.1 R9.12, §11.3, §15.2, E.32, E.40, G.3); and record that the\n  800,000,000 FLOP `genesis_reserve` funds the off-chain explorer referral leaderboard and periodic\n  lotteries in place of on-chain referral commissions (§9.1 R9.4, E.38).\n\n- Let sponsors post an operator's whole registration bond on devnet and testnet (R6.1a; D-0528). The\n  bond stays frozen in the sponsor account and is refunded only to the sponsor. It counts as miner or\n  validator self-stake only on runtimes built with `sponsored_self_stake_enabled`. Narrow E.32 to its\n  mainnet questions; index the new calls in G.3 and their status in H.1.\n\n- Reconcile normative contradictions surfaced by the 2026-10-13 mirror sync (#2648): align §15.5,\n  E.56 and H.5 with the implemented `validator_min_active_validators` = 4 removal/rotation floor and\n  10% churn cap (#1727) while keeping the D-0507/D-0508/E.42 policy questions open; reconcile §9.3\n  R9.9, §15.5 R15.5/R15.5b and Appendix G.3 on active-set entry paths (`rotate` promotion from\n  `ValidatorQueue` vs direct `un_jail`/`rejoin` restoration under `validator_active_set_cap`, and\n  rotation ejection thawing self-stake before re-registration); align §9, R9.2, R9.3, Appendix A and\n  Appendix D cumulative emission and subsidy totals with the runtime's `era(b) = ⌊b / H⌋` boundary\n  and unrewarded genesis block 0 (R9.7); define the +9%/yr validator stake baseline's annual\n  `31,536,000`-block boundary, integer floor formula and 1%-of-`total_issuance` cap in §15.2; update\n  §13.2 V11 and E.57 to compose `W` against R1.2a's multi-round bisection dispute lifetime (`8 d 20 h`);\n  define Validator grant unlocked amount (`P − S`) and slashed-principal accounting `S` in §8.2\n  R8.7/R8.8; and clarify in §11.2 R11.2b and §8.2 R8.7 that settled-session airdrop unlock/spend\n  credit is private payment-denominated vesting credit distinct from public `G_n` work credit.\n\n- Credit miner block rewards toward the Miner airdrop unlock (R8.7; D-0527, superseding D-0517\n  item 1). A Miner grant now unlocks one FLOP per FLOP of the miner-leg block rewards minted to the\n  grantee, counted once the distribution block is finalized, as well as per FLOP of its settled\n  channel payouts after the dispute window. Other block-reward legs, the subsidy, transaction fees, refunds, penalties and\n  bonds still earn nothing.\n\n- Mark INV-M06 payout atomicity LIVE in §11.1 and H.5: channel settlement now reverts when the\n  refund-penalty burn fails, as it already did for the miner and refund transfers.\n\n- Name RTMR3 as the only accepted measurement path for the model root (§3.3 step 2), matching the\n  step 3 verifier and D-0404.\n\n- Bring Appendix E/H status, trackers and code paths up to date with landed code; no protocol rule\n  changes. Index the on-chain bisection dispute calls in G.1 and correct `open_dispute`'s arguments;\n  mark multi-round bisection and `G_n` overflow rejection LIVE; record the development-network\n  paid-storage pallet (rent released without audit), its CI-run Quint models and its simulation as\n  PARTIAL; narrow E.9, E.32, E.41, E.46, E.47, E.51 and E.54 to what remains open; and replace\n  enforcement paths for code removed with the per-task path in §11.1 and H.5.\n\n- Specify Appendix D's chain inclusion-fee terms, align the shared-collateral example with its\n  generated four-claim row, and list both work-vesting grant entry points in Appendix G.3.\n\n- Ratify slot/tranche position rent (D-0524, R5.4e/f, E.54, F.7, G.4): replacements retain\n  historical earned rent, failed or forfeited deltas refund the payer, and new tariffs use separate\n  funded tranches. Supersede independent provider ceilings; add seven executable balance vectors.\n\n- Describe implemented HTLC pair directions as target-only for initial publication (E.48).\n  Preserve cross-leg late-claim, finality-stall and failed-payout counterexamples, qualify the local\n  formal models, and add focused pallet/contract expiry-ordering tests and a reproducible pair gate.\n\n- Specify the Agent airdrop unlock as spend-to-unlock (R8.7, R8.8; D-0522). An Agent grant unlocks\n  nothing at its start and has no end block; it unlocks one FLOP per three FLOP of its locked\n  principal in the gross `payable` of settled sessions, once every fraud dispute raised in the window has\n  resolved, and its locked compute spend is capped at three quarters of principal. Channel escrow\n  drawn from locked principal goes to the `payable` first and is refunded first, back to the grant as frozen\n  principal. E.38 no longer holds the Agent horizon.\n\n- Make current-profile channel settlements payment-only (§11.2 R11.2b). Receipt claims no\n  longer feed public work rewards or performance vesting, including unilateral/DA-void payout.\n  Historical recovery and future audited credit remain open.\n\n- Tighten the Appendix F vector schema to require canonical fields, byte widths, integer ranges,\n  case identities, and coverage. Wide integers use decimal strings so JSON consumers preserve\n  their exact values; the public generator also checks duplicate identities.\n- Protect Ephemeral DA blobs from pruning while any usage pin remains, matching Leased blobs\n  (R5.3d; D-0521). Pins do not extend expiry or admit new usage after the retention deadline.\n\n- Replace §8.2's Miner and Validator airdrop unlock (R8.7, R8.8; D-0517). A Miner grant is a quarter\n  liquid at its start and unlocks the rest one FLOP per FLOP it receives as miner from settled\n  sessions once their dispute window passes, with no end block (D-0527 adds miner block rewards), and\n  the performance adjustment is retired. A Validator grant stays frozen until the first halving, then grants release one per day\n  without unbonding; none releases until E.38 fixes the order. Only Agent grants may still spend\n  locked principal on compute; a miner may bond its locked principal as its own self-stake.\n- Make block rewards and the subsidy liquid on issue (R9.13; D-0518). The miner and validator legs and\n  the Labs/Foundation subsidy are never auto-compounded, force-staked or vested, and agent-leg payouts\n  are liquid once E.40 ratifies; validator earnings no longer auto-compound into locked stake, and E.39\n  is closed.\n\n- Ratify §8.2's grant-landing (R8.6) and claim and locked-spend (R8.8) rules as D-0515. D-0514\n  had covered only R8.3–R8.5 and R8.7; the requirement text is unchanged.\n\n- Repoint Appendix E blockers to live trackers and refresh Appendix H implementation grades for\n  fee distribution, metering overflow, session-key invariants, and collusion monitoring.","after":"### Changed\n\n- Name `FLOPFoundationAccount` as the sink of the failed/early-close penalty `φ·(E−P)` with zero burn in\n  §12.1 R12.1d, §11.1 INV-M06, Appendix A (`refund_penalty_phi_percent`) and Appendix G.1 `finalize`,\n  matching §9.3 R9.10 and Appendix D; record in Appendix H.5 that the runtime still burns that leg.\n\n- State in §15.5 R15.5 that proven-fault slash proceeds at the active-set floor are confiscated and transferred to the Foundation (R9.10) rather than burned.\n\n- Propagate the zero-burn, operator self-stake-only, and off-chain referral rulings to the normative\n  spec and canonical parameters (D-0529, D-0530, D-0531; #2792, #1945, #1358): set\n  `tx_fee_burn_percent_live` (`BurnFees`) to 0% with 100% of live transaction fees and tips routed to\n  the block author (§9.1 R9.6, Appendix D, Appendix H); replace legacy \"full-burn\" slash terminology\n  with 100% routing to `FLOPFoundationAccount` (§11.3, §13.2, §15.7, Appendix A); prohibit third-party\n  delegated staking into validators and miners, deprecate delegation extrinsics/caps and operator\n  commissions (`miner_staking::delegate`, `max_delegators_per_miner`, `miner_commission_cap_percent`),\n  and formalize the 5% duration-locked community staking pool across seven lock tiers without\n  slashing risk (§2.3, §6.1, §9.1 R9.12, §11.3, §15.2, E.32, E.40, G.3); and record that the\n  800,000,000 FLOP `genesis_reserve` funds the off-chain explorer referral leaderboard and periodic\n  lotteries in place of on-chain referral commissions (§9.1 R9.4, E.38).\n\n- Let sponsors post an operator's whole registration bond on devnet and testnet (R6.1a; D-0528). The\n  bond stays frozen in the sponsor account and is refunded only to the sponsor. It counts as miner or\n  validator self-stake only on runtimes built with `sponsored_self_stake_enabled`. Narrow E.32 to its\n  mainnet questions; index the new calls in G.3 and their status in H.1.\n\n- Reconcile normative contradictions surfaced by the 2026-10-13 mirror sync (#2648): align §15.5,\n  E.56 and H.5 with the implemented `validator_min_active_validators` = 4 removal/rotation floor and\n  10% churn cap (#1727) while keeping the D-0507/D-0508/E.42 policy questions open; reconcile §9.3\n  R9.9, §15.5 R15.5/R15.5b and Appendix G.3 on active-set entry paths (`rotate` promotion from\n  `ValidatorQueue` vs direct `un_jail`/`rejoin` restoration under `validator_active_set_cap`, and\n  rotation ejection thawing self-stake before re-registration); align §9, R9.2, R9.3, Appendix A and\n  Appendix D cumulative emission and subsidy totals with the runtime's `era(b) = ⌊b / H⌋` boundary\n  and unrewarded genesis block 0 (R9.7); define the +9%/yr validator stake baseline's annual\n  `31,536,000`-block boundary, integer floor formula and 1%-of-`total_issuance` cap in §15.2; update\n  §13.2 V11 and E.57 to compose `W` against R1.2a's multi-round bisection dispute lifetime (`8 d 20 h`);\n  define Validator grant unlocked amount (`P − S`) and slashed-principal accounting `S` in §8.2\n  R8.7/R8.8; and clarify in §11.2 R11.2b and §8.2 R8.7 that settled-session airdrop unlock/spend\n  credit is private payment-denominated vesting credit distinct from public `G_n` work credit.\n\n- Credit miner block rewards toward the Miner airdrop unlock (R8.7; D-0527, superseding D-0517\n  item 1). A Miner grant now unlocks one FLOP per FLOP of the miner-leg block rewards minted to the\n  grantee, counted once the distribution block is finalized, as well as per FLOP of its settled\n  channel payouts after the dispute window. Other block-reward legs, the subsidy, transaction fees, refunds, penalties and\n  bonds still earn nothing.\n\n- Mark INV-M06 payout atomicity LIVE in §11.1 and H.5: channel settlement now reverts when the\n  refund-penalty burn fails, as it already did for the miner and refund transfers.\n\n- Name RTMR3 as the only accepted measurement path for the model root (§3.3 step 2), matching the\n  step 3 verifier and D-0404.\n\n- Bring Appendix E/H status, trackers and code paths up to date with landed code; no protocol rule\n  changes. Index the on-chain bisection dispute calls in G.1 and correct `open_dispute`'s arguments;\n  mark multi-round bisection and `G_n` overflow rejection LIVE; record the development-network\n  paid-storage pallet (rent released without audit), its CI-run Quint models and its simulation as\n  PARTIAL; narrow E.9, E.32, E.41, E.46, E.47, E.51 and E.54 to what remains open; and replace\n  enforcement paths for code removed with the per-task path in §11.1 and H.5.\n\n- Specify Appendix D's chain inclusion-fee terms, align the shared-collateral example with its\n  generated four-claim row, and list both work-vesting grant entry points in Appendix G.3.\n\n- Ratify slot/tranche position rent (D-0524, R5.4e/f, E.54, F.7, G.4): replacements retain\n  historical earned rent, failed or forfeited deltas refund the payer, and new tariffs use separate\n  funded tranches. Supersede independent provider ceilings; add seven executable balance vectors.\n\n- Describe implemented HTLC pair directions as target-only for initial publication (E.48).\n  Preserve cross-leg late-claim, finality-stall and failed-payout counterexamples, qualify the local\n  formal models, and add focused pallet/contract expiry-ordering tests and a reproducible pair gate.\n\n- Specify the Agent airdrop unlock as spend-to-unlock (R8.7, R8.8; D-0522). An Agent grant unlocks\n  nothing at its start and has no end block; it unlocks one FLOP per three FLOP of its locked\n  principal in the gross `payable` of settled sessions, once every fraud dispute raised in the window has\n  resolved, and its locked compute spend is capped at three quarters of principal. Channel escrow\n  drawn from locked principal goes to the `payable` first and is refunded first, back to the grant as frozen\n  principal. E.38 no longer holds the Agent horizon.\n\n- Make current-profile channel settlements payment-only (§11.2 R11.2b). Receipt claims no\n  longer feed public work rewards or performance vesting, including unilateral/DA-void payout.\n  Historical recovery and future audited credit remain open.\n\n- Tighten the Appendix F vector schema to require canonical fields, byte widths, integer ranges,\n  case identities, and coverage. Wide integers use decimal strings so JSON consumers preserve\n  their exact values; the public generator also checks duplicate identities.\n- Protect Ephemeral DA blobs from pruning while any usage pin remains, matching Leased blobs\n  (R5.3d; D-0521). Pins do not extend expiry or admit new usage after the retention deadline.\n\n- Replace §8.2's Miner and Validator airdrop unlock (R8.7, R8.8; D-0517). A Miner grant is a quarter\n  liquid at its start and unlocks the rest one FLOP per FLOP it receives as miner from settled\n  sessions once their dispute window passes, with no end block (D-0527 adds miner block rewards), and\n  the performance adjustment is retired. A Validator grant stays frozen until the first halving, then grants release one per day\n  without unbonding; none releases until E.38 fixes the order. Only Agent grants may still spend\n  locked principal on compute; a miner may bond its locked principal as its own self-stake.\n- Make block rewards and the subsidy liquid on issue (R9.13; D-0518). The miner and validator legs and\n  the Labs/Foundation subsidy are never auto-compounded, force-staked or vested, and agent-leg payouts\n  are liquid once E.40 ratifies; validator earnings no longer auto-compound into locked stake, and E.39\n  is closed.\n\n- Ratify §8.2's grant-landing (R8.6) and claim and locked-spend (R8.8) rules as D-0515. D-0514\n  had covered only R8.3–R8.5 and R8.7; the requirement text is unchanged.\n\n- Repoint Appendix E blockers to live trackers and refresh Appendix H implementation grades for\n  fee distribution, metering overflow, session-key invariants, and collusion monitoring."}],"links":[{"label":"Before","url":"https://github.com/flop-labs/yellowpaper/blob/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/CHANGELOG.md"},{"label":"After","url":"https://github.com/flop-labs/yellowpaper/blob/56410c67b11292e707d32ef32e9c4ff9c02e28c7/CHANGELOG.md"},{"label":"Git comparison","url":"https://github.com/flop-labs/yellowpaper/compare/5730f4b6cf56fa88bb93bbda272dc449b2f77b17...56410c67b11292e707d32ef32e9c4ff9c02e28c7"}]},{"id":"spec:5730f4b6cf56fa88bb93bbda272dc449b2f77b17:56410c67b11292e707d32ef32e9c4ff9c02e28c7:yellowpaper.md","kind":"spec","at":"2026-10-26T03:50:48.000Z","clock":"commit","source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/56410c67b11292e707d32ef32e9c4ff9c02e28c7/yellowpaper.md","measuredAt":"2026-11-06T03:27:27.841Z","title":"yellowpaper.md: 5730f4b to 56410c6","detail":"docs(yellowpaper): sync 0.5.0 (draft) from flop-core@dfd98a59. 7 changed sections. 0 changed Appendix A values. Text changes are not deployed upgrades.","changes":[{"name":"Section: 11.1","before":"### 11.1 Enforced invariants\n\n| Invariant | Rule (normative) | Enforcement |\n|-----------|------------------|-------------|\n| INV-02 / session cap | session spending **MUST** be ≤ the session cap | `agent_transfer` checks `remaining_session_cap()` (`SessionCapExceeded`) |\n| `fail_task` authority | only an authorized reporter, rate-limited, **MUST** fail a task | none: the per-task path and its `fail_task` call were removed (Appendix H.5), so this rule binds no current call |\n| INV-S01 / session nonce | a session nonce **MUST** be monotonic (anti-replay) | `SessionInfo.nonce` validated + incremented per use (`InvalidSessionNonce`) |\n| INV-M06 / payout atomicity | a miner→validator→burn payout **MUST** be all-or-nothing | compute-channel `payout_settlement`: a failed miner transfer, agent refund or burn reverts the settling extrinsic, so no leg lands without the others |\n| Supply | emission cap + halving monotonicity **MUST** hold | `tokenomics-supply.qnt` |\n| HTLC | local conservation + conditional completion + timelock symmetry (§10) | `htlc-atomic-swap.qnt` |\n| Channel | conservation + no-double-settle **MUST** hold | `channel/channel-settlement.qnt` |\n| DA | retrievability + serve-or-slash (§5.3) | `da/da-retrievability.qnt` |","after":"### 11.1 Enforced invariants\n\n| Invariant | Rule (normative) | Enforcement |\n|-----------|------------------|-------------|\n| INV-02 / session cap | session spending **MUST** be ≤ the session cap | `agent_transfer` checks `remaining_session_cap()` (`SessionCapExceeded`) |\n| `fail_task` authority | only an authorized reporter, rate-limited, **MUST** fail a task | none: the per-task path and its `fail_task` call were removed (Appendix H.5), so this rule binds no current call |\n| INV-S01 / session nonce | a session nonce **MUST** be monotonic (anti-replay) | `SessionInfo.nonce` validated + incremented per use (`InvalidSessionNonce`) |\n| INV-M06 / payout atomicity | a settlement payout **MUST** be all-or-nothing: the miner and validator legs, the agent refund and the `φ·(E−P)` transfer to `FLOPFoundationAccount` (R12.1d) either all land or none does | compute-channel `payout_settlement`: a failed miner transfer, agent refund or penalty leg reverts the settling extrinsic, so no leg lands without the others (penalty-leg sink: Appendix H.5) |\n| Supply | emission cap + halving monotonicity **MUST** hold | `tokenomics-supply.qnt` |\n| HTLC | local conservation + conditional completion + timelock symmetry (§10) | `htlc-atomic-swap.qnt` |\n| Channel | conservation + no-double-settle **MUST** hold | `channel/channel-settlement.qnt` |\n| DA | retrievability + serve-or-slash (§5.3) | `da/da-retrievability.qnt` |"},{"name":"Section: 12 / Rationale & sources *(non-normative)* [after 12.4]","before":"### Rationale & sources *(non-normative)*\n\nProvenance: `D-0403` (capacity-reservation sessions), `D-0422` (refundable failed sessions), `D-0424`\n(dispute standing), `D-0427` (withdrawn throughput target), `D-0430` (degraded-state matrix), `D-0501`\n(verification, finality, unit, and claim-scope clarifications), `D-0502` (capacity disposition), `D-0511`\n(canonical session-transcript and receipt definitions). Frame threats on\nOWASP Agentic Top-10 (2026) + ATFAA/STRIDE + MITRE ATLAS. Controlled repeated-auction evidence finds\nthat LLM bidders produce supra-competitive outcomes in small markets and return toward competition as\nbidder count grows ([Tolety 2025](https://arxiv.org/abs/2511.21802)); this empirically grounds R12.3 but\nis not an assumption of the formal deterrence theorem. Grounding:\nagent-market-threat-and-compute-economics.md,\nagent-swarm-collusion-design.md (bid-dispersion + price-level detector, mechanism perturbation, reproducible ABM),\nr2-payment-channel-sessions.md,\nsession-matching-orderbook-vs-agent-select.md,\nsession-migration-semantics.md,\nf1-f2-store-of-compute-and-network-survival.md,\ncompute-spot-market-formation.md,\nfrcr-methodology-v0.md,\ntriz-ifr-agent-market-ideas.md (C-TRIZ pass: system IFR,\nopen-contradictions ledger, verification/discovery/fairness clusters),\nagent-demand-discovery-mechanisms.md (agent demand\nloop: typed need, bounded spot proof, receipt propagation, graduated CRU commitment),\nproposal-capacity-reservation-units.md (CRU —\nbonded forward compute, ratified as D-0434; implementation as forward-dated channels),\nterm-curve-methodology-v0.md (the observational CRU forward\ncurve: terminal bonded settlements only, 1d/7d/30d buckets, quantity-weighted median under\npublication floors — never blended with spot FRCR),\ndispute-window-rightsizing.md (the 7 d → ~1 d rightsize\nanalysis, deferred). Agent-security cluster:\nsecurity-across-domains.md,\nagent-security.md,\nagent-specific-security.md. Formal:\n`DemandSideSybil.lean`,\n`ChannelPayoutLiveness.lean`,\n`FlopSpecs/Sessions.lean`,\n`formal-specs/channel/channel-settlement.qnt`. `ChannelPayoutLiveness::escape_safe` models the prior\nbest-head escape and is not a witness for R12.1g after D-0501; the finality-safe replacement needs a new\nwitness. `DemandSideSybil.lean` keeps capital and incentives separate: `postedCapital` is exposure,\n`postedCapital_ge_card_mul_floor` proves only the identity-count-linear capital bound, and\n`individual_deterred_iff` requires explicit irrecoverable cost plus lost continuation value for\ndeterrence; yellowpaper#58 applies that split to the current floor. Venue-specific observations reported\nin yellowpaper#30 and yellowpaper#34 are unverified design inputs, not rules: arrival dispersion\n(inter-arrival coefficient of variation) and timing/structural signals missed by wash pair-counting are\ncandidate gauges. The shipped `turn_ack_message` (`sdk/typescript/src/compute-channel/transcript.ts` and\n`sdk/rust-compute-channel/src/transcript.rs`) has no domain tag or version byte; like the transcript\nleaf, it relies on its `channel_id ‖ turn_index` binding, and changing either preimage is out of scope\nhere. Review evidence:\n[prepublication-evidence.md](research/prepublication-evidence.md). Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---","after":"### Rationale & sources *(non-normative)*\n\nProvenance: `D-0403` (capacity-reservation sessions), `D-0422` (refundable failed sessions), `D-0424`\n(dispute standing), `D-0427` (withdrawn throughput target), `D-0430` (degraded-state matrix), `D-0501`\n(verification, finality, unit, and claim-scope clarifications), `D-0502` (capacity disposition), `D-0511`\n(canonical session-transcript and receipt definitions), `D-0529` (zero burn protocol-wide; the R12.1d\npenalty `φ·(E−P)` routes to `FLOPFoundationAccount`). Frame threats on\nOWASP Agentic Top-10 (2026) + ATFAA/STRIDE + MITRE ATLAS. Controlled repeated-auction evidence finds\nthat LLM bidders produce supra-competitive outcomes in small markets and return toward competition as\nbidder count grows ([Tolety 2025](https://arxiv.org/abs/2511.21802)); this empirically grounds R12.3 but\nis not an assumption of the formal deterrence theorem. Grounding:\nagent-market-threat-and-compute-economics.md,\nagent-swarm-collusion-design.md (bid-dispersion + price-level detector, mechanism perturbation, reproducible ABM),\nr2-payment-channel-sessions.md,\nsession-matching-orderbook-vs-agent-select.md,\nsession-migration-semantics.md,\nf1-f2-store-of-compute-and-network-survival.md,\ncompute-spot-market-formation.md,\nfrcr-methodology-v0.md,\ntriz-ifr-agent-market-ideas.md (C-TRIZ pass: system IFR,\nopen-contradictions ledger, verification/discovery/fairness clusters),\nagent-demand-discovery-mechanisms.md (agent demand\nloop: typed need, bounded spot proof, receipt propagation, graduated CRU commitment),\nproposal-capacity-reservation-units.md (CRU —\nbonded forward compute, ratified as D-0434; implementation as forward-dated channels),\nterm-curve-methodology-v0.md (the observational CRU forward\ncurve: terminal bonded settlements only, 1d/7d/30d buckets, quantity-weighted median under\npublication floors — never blended with spot FRCR),\ndispute-window-rightsizing.md (the 7 d → ~1 d rightsize\nanalysis, deferred). Agent-security cluster:\nsecurity-across-domains.md,\nagent-security.md,\nagent-specific-security.md. Formal:\n`DemandSideSybil.lean`,\n`ChannelPayoutLiveness.lean`,\n`FlopSpecs/Sessions.lean`,\n`formal-specs/channel/channel-settlement.qnt`. `ChannelPayoutLiveness::escape_safe` models the prior\nbest-head escape and is not a witness for R12.1g after D-0501; the finality-safe replacement needs a new\nwitness. `DemandSideSybil.lean` keeps capital and incentives separate: `postedCapital` is exposure,\n`postedCapital_ge_card_mul_floor` proves only the identity-count-linear capital bound, and\n`individual_deterred_iff` requires explicit irrecoverable cost plus lost continuation value for\ndeterrence; yellowpaper#58 applies that split to the current floor. Venue-specific observations reported\nin yellowpaper#30 and yellowpaper#34 are unverified design inputs, not rules: arrival dispersion\n(inter-arrival coefficient of variation) and timing/structural signals missed by wash pair-counting are\ncandidate gauges. The shipped `turn_ack_message` (`sdk/typescript/src/compute-channel/transcript.ts` and\n`sdk/rust-compute-channel/src/transcript.rs`) has no domain tag or version byte; like the transcript\nleaf, it relies on its `channel_id ‖ turn_index` binding, and changing either preimage is out of scope\nhere. Review evidence:\n[prepublication-evidence.md](research/prepublication-evidence.md). Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---"},{"name":"Section: 12.1","before":"### 12.1 Sessions — attested streaming & aggregate settlement\n\nInference settles through **`pallet_compute_channel`** — the sole inference-dispatch path (the former\nper-task 4-extrinsic RPC rail is removed). A cooperative happy path has two primary lifecycle inclusions,\n`open_channel` and `settle`; unilateral close, evidence publication, escalation, and disputes add calls.\nSettlement bytes and verification cost are not constant: `settle` carries and verifies submitted turns,\nsignatures, and Merkle paths; pairwise duplicate scanning is quadratic in submitted turn count. The\ninference stream remains off-chain, but throughput depends on encoded bytes, runtime weight, evidence\ncalls, committee load, and GPU capacity ([E.46](#appendix-e--open-specification-items)).\n\n- **R12.1a — Reserved capacity and fee split.** Escrow at `open_channel` **is** the payment for\n  reserved capacity; under-use **MUST NOT** be refunded. The only refund paths are a non-delivery\n  timeout, an upheld fraud dispute, or a failed/early-terminated session (R12.1d). At settlement\n  (`settle`, `certificate_settle`, or `force_settle → finalize`), the settled `payable` amount **MUST**\n  be split: [`inference_fee_miner_share_ppt`](#param-inference_fee_miner_share_ppt) = 85% to the miner,\n  and [`inference_fee_validator_share_ppt`](#param-inference_fee_validator_share_ppt) = 15% to the\n  validator pool (D-0525). The 1% audit pool earmark\n  ([`audit_fee_split_ppm`](#param-audit_fee_split_ppm) = 10,000 ppm) **MUST** be deducted from the 15%\n  validator share to fund verification audits; the remainder of the validator leg is distributed\n  intra-pool by the R9.5 weighting, liquid on issue (R9.13, D-0518).\n- **R12.1b — Transcript.** The enclave (or, on the SOFT path, the miner session key) **MUST** sign each\n  turn's 32 B transcript-leaf hash into a running Merkle accumulator. [Appendix F.3](#f3-session-transcript-compute-channel-121)\n  is the sole leaf definition and accepted-version rule; V3 is the current TOPLOC-binding format for a\n  channel carrying a `ChannelDecodePolicies` marker. Uniqueness is `channel_id ‖ turn_index`; replay\n  protection is the monotonic counter. Before accepting output, the agent **MUST** verify the signed leaf\n  and cumulative root and counter-sign the turn with the Appendix F.3 per-turn agent ack over the leaf hash\n  and timing inputs. Settlement carries the separate agent receipt v1, which binds `channel_id`,\n  `final_root`, `aggregate_gn`, and `payable` exactly as defined in Appendix F.3. `settle` posts the final\n  root + aggregate `G_n`. These signatures prove agreement on a receipt and sum; they do not prove that the\n  output resulted from the claimed execution. The current cooperative path pays private escrow\n  immediately and issues no public work credit (R11.2b). Future audited reward eligibility and\n  recovery of historical credit after late fraud remain open in\n  [E.44](#appendix-e--open-specification-items).\n- **R12.1c — Tier-specific model binding.** A HARD-tier `open_channel` and `settle` **MUST** verify the\n  proof's measured dm-verity root against the registry (`ModelRegistryQuery::verify_measured_root`); a\n  wrong root at settle **MUST** reject. The SOFT profile has no TEE-measured root; its model/decode binding,\n  evidence predicate, value cap, and dispute path are [E.33](#appendix-e--open-specification-items).\n- **R12.1d — Failed/early close split.** On the unilateral `force_settle → finalize` path the earned\n  tariff `P = BasePerTurn·n + rate_G·G_claimed` (flat per-turn payment over `n` turns plus claimed\n  reference-work converted into payment units) forms the payable session settlement, which is split\n  85% to the miner and 15% to validators (with the 1% audit pool funded from the validator leg) under\n  R12.1a. `P` is denominated in the escrow's base unit (10⁻¹⁸ FLOP);\n  [`channel_base_per_turn`](#param-channel_base_per_turn) and `rate_G` are each one base unit. `G_n` is\n  the whole-reference-GFLOP integer from R4.4; the rate is a tariff price, not an assertion that one `G_n`\n  equals one FLOP base unit. `force_settle` **MUST** reject with `TariffExceedsEscrow` when `P > E`; it\n  **MUST NOT** clamp `P` or create negative payout legs\n  (`pallets/pallets/compute-channel/src/lib.rs::{turn_tariff_pay,verified_work_from_turns}`). Otherwise,\n  the agent is refunded `(1−φ)·(E−P)`, and the penalty `φ·(E−P)`\n  ([`refund_penalty_phi_percent`](#param-refund_penalty_phi_percent) = 20%) **MUST** be burned/routed to\n  the Foundation — never the miner. A miner-fault non-delivery uses `φ = 0` (full refund). Conservation:\n  `P + (1−φ)(E−P) + φ(E−P) = E`. Caller restriction and tariff magnitude on this path are E.24.\n- **R12.1e — Over-use.** Handled by abort or in-place `top_up_escrow` (Lightning splice-in); the\n  aggregate-`G_n` accumulator already grows unbounded, only the escrow cap is raised.\n- **R12.1f — Disputes (fraud only).** Optimistic settlement + bisection over the transcript root: a\n  challenge resolves at a single contested turn (signature + Merkle-membership check); a non-response\n  within [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks)\n  **MUST** default to a fraud verdict → slash via the `miner-slashing` forgery path + agent refund.\n  Disputes cover **protocol fraud only** (wrong measured root, inflated `G_n` vs transcript, forged\n  signatures, non-delivery) — **never output quality.** The challenge window\n  ([`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) = 7 d) plus every bisection\n  leg, the terminal response, and one degraded extension **MUST** fit strictly inside DA retention `W`\n  (14 d), as specified by R1.2a. A force-settled transcript reference **MUST** be naturally available\n  through that worst-case end before it is pinned; a pin prevents pruning but does not extend expiry.\n  **Standing** is the session agent (its own channel) + any active validator (any channel); arbitrary\n  public challengers **MUST** be rejected before bond lock.\n- **R12.1g — Finality-stall recovery.** Deadlines **MUST** read `hp_consensus::FinalizedPrefix` and\n  economic deadlines **MUST** freeze while finality stalls. Funds **MUST NOT** release from an\n  unfinalized best head. Recovery is restored AlephBFT finality or an explicitly ratified checkpoint\n  procedure under §13.0a; unresolved channels remain frozen until that recovery establishes a finalized\n  prefix.\n- **R12.1h — Session length & re-attestation.** Trust shifts to the session enclave key attested once at\n  `open_channel`. A channel **MUST** bound blast radius by a max duration `D_max` / max turns `n_max`\n  (`channel_max_settlement_turns` caps a bundle at 1,024), and **SHOULD** re-attest every `k` turns with\n  `k ≤ min(Bond / v_turn, T_tcb / t_turn)`.\n\n**Capacity disposition.** No session-control transactions-per-block, finalized-lifecycles-per-second,\nor inclusion/finality-latency target is specified. D-0502 proposes to withdraw the former 96/128 admission and\n48/64 lifecycle figures because they were derived from call count rather than serialized size, charged\nweight, state execution, competing traffic, serving load, and network finality. Admission remains subject\nto the runtime's byte, two-dimensional weight, state, and validity gates. A future profile **MUST** reserve\nmeasured settlement/dispute headroom under congestion and satisfy E.46 before making a capacity claim.","after":"### 12.1 Sessions — attested streaming & aggregate settlement\n\nInference settles through **`pallet_compute_channel`** — the sole inference-dispatch path (the former\nper-task 4-extrinsic RPC rail is removed). A cooperative happy path has two primary lifecycle inclusions,\n`open_channel` and `settle`; unilateral close, evidence publication, escalation, and disputes add calls.\nSettlement bytes and verification cost are not constant: `settle` carries and verifies submitted turns,\nsignatures, and Merkle paths; pairwise duplicate scanning is quadratic in submitted turn count. The\ninference stream remains off-chain, but throughput depends on encoded bytes, runtime weight, evidence\ncalls, committee load, and GPU capacity ([E.46](#appendix-e--open-specification-items)).\n\n- **R12.1a — Reserved capacity and fee split.** Escrow at `open_channel` **is** the payment for\n  reserved capacity; under-use **MUST NOT** be refunded. The only refund paths are a non-delivery\n  timeout, an upheld fraud dispute, or a failed/early-terminated session (R12.1d). At settlement\n  (`settle`, `certificate_settle`, or `force_settle → finalize`), the settled `payable` amount **MUST**\n  be split: [`inference_fee_miner_share_ppt`](#param-inference_fee_miner_share_ppt) = 85% to the miner,\n  and [`inference_fee_validator_share_ppt`](#param-inference_fee_validator_share_ppt) = 15% to the\n  validator pool (D-0525). The 1% audit pool earmark\n  ([`audit_fee_split_ppm`](#param-audit_fee_split_ppm) = 10,000 ppm) **MUST** be deducted from the 15%\n  validator share to fund verification audits; the remainder of the validator leg is distributed\n  intra-pool by the R9.5 weighting, liquid on issue (R9.13, D-0518).\n- **R12.1b — Transcript.** The enclave (or, on the SOFT path, the miner session key) **MUST** sign each\n  turn's 32 B transcript-leaf hash into a running Merkle accumulator. [Appendix F.3](#f3-session-transcript-compute-channel-121)\n  is the sole leaf definition and accepted-version rule; V3 is the current TOPLOC-binding format for a\n  channel carrying a `ChannelDecodePolicies` marker. Uniqueness is `channel_id ‖ turn_index`; replay\n  protection is the monotonic counter. Before accepting output, the agent **MUST** verify the signed leaf\n  and cumulative root and counter-sign the turn with the Appendix F.3 per-turn agent ack over the leaf hash\n  and timing inputs. Settlement carries the separate agent receipt v1, which binds `channel_id`,\n  `final_root`, `aggregate_gn`, and `payable` exactly as defined in Appendix F.3. `settle` posts the final\n  root + aggregate `G_n`. These signatures prove agreement on a receipt and sum; they do not prove that the\n  output resulted from the claimed execution. The current cooperative path pays private escrow\n  immediately and issues no public work credit (R11.2b). Future audited reward eligibility and\n  recovery of historical credit after late fraud remain open in\n  [E.44](#appendix-e--open-specification-items).\n- **R12.1c — Tier-specific model binding.** A HARD-tier `open_channel` and `settle` **MUST** verify the\n  proof's measured dm-verity root against the registry (`ModelRegistryQuery::verify_measured_root`); a\n  wrong root at settle **MUST** reject. The SOFT profile has no TEE-measured root; its model/decode binding,\n  evidence predicate, value cap, and dispute path are [E.33](#appendix-e--open-specification-items).\n- **R12.1d — Failed/early close split.** On the unilateral `force_settle → finalize` path the earned\n  tariff `P = BasePerTurn·n + rate_G·G_claimed` (flat per-turn payment over `n` turns plus claimed\n  reference-work converted into payment units) forms the payable session settlement, which is split\n  85% to the miner and 15% to validators (with the 1% audit pool funded from the validator leg) under\n  R12.1a. `P` is denominated in the escrow's base unit (10⁻¹⁸ FLOP);\n  [`channel_base_per_turn`](#param-channel_base_per_turn) and `rate_G` are each one base unit. `G_n` is\n  the whole-reference-GFLOP integer from R4.4; the rate is a tariff price, not an assertion that one `G_n`\n  equals one FLOP base unit. `force_settle` **MUST** reject with `TariffExceedsEscrow` when `P > E`; it\n  **MUST NOT** clamp `P` or create negative payout legs\n  (`pallets/pallets/compute-channel/src/lib.rs::{turn_tariff_pay,verified_work_from_turns}`). Otherwise,\n  the agent is refunded `(1−φ)·(E−P)`, and the penalty `φ·(E−P)`\n  ([`refund_penalty_phi_percent`](#param-refund_penalty_phi_percent) = 20%) **MUST** be transferred in full\n  to `FLOPFoundationAccount` (§9.3 R9.10) with zero burn — never the miner. A miner-fault non-delivery uses\n  `φ = 0` (full refund). Conservation:\n  `P + (1−φ)(E−P) + φ(E−P) = E`. Caller restriction and tariff magnitude on this path are E.24.\n- **R12.1e — Over-use.** Handled by abort or in-place `top_up_escrow` (Lightning splice-in); the\n  aggregate-`G_n` accumulator already grows unbounded, only the escrow cap is raised.\n- **R12.1f — Disputes (fraud only).** Optimistic settlement + bisection over the transcript root: a\n  challenge resolves at a single contested turn (signature + Merkle-membership check); a non-response\n  within [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks)\n  **MUST** default to a fraud verdict → slash via the `miner-slashing` forgery path + agent refund.\n  Disputes cover **protocol fraud only** (wrong measured root, inflated `G_n` vs transcript, forged\n  signatures, non-delivery) — **never output quality.** The challenge window\n  ([`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) = 7 d) plus every bisection\n  leg, the terminal response, and one degraded extension **MUST** fit strictly inside DA retention `W`\n  (14 d), as specified by R1.2a. A force-settled transcript reference **MUST** be naturally available\n  through that worst-case end before it is pinned; a pin prevents pruning but does not extend expiry.\n  **Standing** is the session agent (its own channel) + any active validator (any channel); arbitrary\n  public challengers **MUST** be rejected before bond lock.\n- **R12.1g — Finality-stall recovery.** Deadlines **MUST** read `hp_consensus::FinalizedPrefix` and\n  economic deadlines **MUST** freeze while finality stalls. Funds **MUST NOT** release from an\n  unfinalized best head. Recovery is restored AlephBFT finality or an explicitly ratified checkpoint\n  procedure under §13.0a; unresolved channels remain frozen until that recovery establishes a finalized\n  prefix.\n- **R12.1h — Session length & re-attestation.** Trust shifts to the session enclave key attested once at\n  `open_channel`. A channel **MUST** bound blast radius by a max duration `D_max` / max turns `n_max`\n  (`channel_max_settlement_turns` caps a bundle at 1,024), and **SHOULD** re-attest every `k` turns with\n  `k ≤ min(Bond / v_turn, T_tcb / t_turn)`.\n\n**Capacity disposition.** No session-control transactions-per-block, finalized-lifecycles-per-second,\nor inclusion/finality-latency target is specified. D-0502 proposes to withdraw the former 96/128 admission and\n48/64 lifecycle figures because they were derived from call count rather than serialized size, charged\nweight, state execution, competing traffic, serving load, and network finality. Admission remains subject\nto the runtime's byte, two-dimensional weight, state, and validity gates. A future profile **MUST** reserve\nmeasured settlement/dispute headroom under congestion and satisfy E.46 before making a capacity claim."},{"name":"Section: Appendix A","before":"## Appendix A — Parameter Reference\n\nThe table below is **generated** from `params/flop-protocol-params.yaml` (the canonical machine-checked\ncontract; every value is mirrored into runtime / SDK / sim code and gated by `scripts/check_params.py`).\nRegenerate with `uv run --script scripts/gen_param_table.py`; drift fails `just verify-whitepaper`. Each\nrow is anchored `#param-<name>`, and prose links to the corresponding generated anchor. This table is the\nsingle authoritative list of the values themselves.\n\n<!-- BEGIN GENERATED: param-table (source: params/flop-protocol-params.yaml via scripts/gen_param_table.py) -->\n\nEnforced parameters (`params/flop-protocol-params.yaml`); every value below is mirrored into code and gated by `scripts/check_params.py`. Link a parameter anywhere in the spec with its generated `#param-<name>` anchor.\n\n**Genesis**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-genesis_supply\"></a>`genesis_supply` | 4_400_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Genesis (pre-emission) total supply, pinned normatively by R9.7 (§9.3). |\n| <a id=\"param-genesis_miner_airdrop\"></a>`genesis_miner_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0438 | Miner-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_validator_airdrop\"></a>`genesis_validator_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Validator-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_agent_airdrop\"></a>`genesis_agent_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0438 | Agent-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_reserve\"></a>`genesis_reserve` | 800_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Ecosystem/incentives reserve component of the genesis supply (18.18%) — KOL, referral and growth incentives. |\n| <a id=\"param-validator_min_stake\"></a>`validator_min_stake` | 1_200_000 FLOP | [§9](#9-emission--supply) | D-0440 | Baseline floor; compounds 9%/yr (MinimumValidatorStake). |\n| <a id=\"param-airdrop_vesting_duration_blocks\"></a>`airdrop_vesting_duration_blocks` | 7_776_000 blocks | [§8.2](#82-era-t-conversion-and-airdrop-vesting) | SPEC-022 | Interim pallet schedule: 90-day linear airdrop vesting at 1-second block time, governing no ratified grant tier (§8.2). |\n\n**Emission & Rewards**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-initial_block_reward\"></a>`initial_block_reward` | 96 FLOP | [§9](#9-emission--supply) | D-008 | Block reward at genesis (Era 0). |\n| <a id=\"param-halving_interval_blocks\"></a>`halving_interval_blocks` | 63_072_000 blocks | [§9](#9-emission--supply) |  | Blocks between halvings (~730 days at 1s/block). |\n| <a id=\"param-max_halvings\"></a>`max_halvings` | 5 count | [§9](#9-emission--supply) | D-0436 | Halvings before the reward floors permanently. |\n| <a id=\"param-floor_reward\"></a>`floor_reward` | 3 FLOP | [§9](#9-emission--supply) | D-0436 | Perpetual per-block reward after max_halvings (96 >> 5 = 3). |\n| <a id=\"param-miner_share_ppt\"></a>`miner_share_ppt` | 750 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Miner share of each block reward (75%; yellowpaper §9). |\n| <a id=\"param-validator_share_ppt\"></a>`validator_share_ppt` | 100 parts-per-thousand | [§9](#9-emission--supply) |  | Validator share of each block reward (10%). |\n| <a id=\"param-agent_share_ppt\"></a>`agent_share_ppt` | 100 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Agent/broker rebate share of each block reward (10%; yellowpaper §9). |\n| <a id=\"param-staker_share_ppt\"></a>`staker_share_ppt` | 50 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Community-staker share of each block reward (5%; yellowpaper §9) — duration-locked community staking pool across seven lock duration tiers with zero slashing risk and no operator delegation (D-0530), for all FLOP stakers other than miners and validators. |\n| <a id=\"param-reward_distribution_period_blocks\"></a>`reward_distribution_period_blocks` | 86_400 blocks | [§9](#9-emission--supply) |  | Blocks between block-rewards distributions (one day at 1 s blocks). |\n| <a id=\"param-gn_decay_factor_ppb\"></a>`gn_decay_factor_ppb` | 1_000_000_000 ppb | [§9](#9-emission--supply) |  | GnDecayFactor read when the key is absent: 1.0, i.e. NO decay, so a period's miner leg is split purely by verified G_n (owner decision 2026-10-01, #2144). |\n| <a id=\"param-finality_committee_premium_weight_ppm\"></a>`finality_committee_premium_weight_ppm` | 1_100_000 ppm | [§9](#9-emission--supply) |  | Finality-committee validator reward weight inside the validator 10% pool. |\n\n**Developer Subsidy (separate from block reward)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-subsidy_per_block_per_recipient\"></a>`subsidy_per_block_per_recipient` | 8 FLOP | [§9](#9-emission--supply) | D-0436 | ERA-0 per-block subsidy to EACH of FLOP Labs and FLOP Foundation (16 FLOP/block combined; yellowpaper §9), on top of the 96 FLOP block reward. |\n| <a id=\"param-subsidy_duration_blocks\"></a>`subsidy_duration_blocks` | 315_360_000 blocks | [§9](#9-emission--supply) | D-0436 | Exclusive subsidy sunset block (~3650 days = 10 years = 5 × halving_interval_blocks), at and after which (`now >= SubsidyEndBlock`) `on_initialize` mints 0. |\n\n**Staking & Delegation**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-min_miner_self_stake\"></a>`min_miner_self_stake` | 10_000 FLOP | [§6.1](#61-primitives) |  | Minimum self-stake to register as a miner (anti-Sybil). |\n| <a id=\"param-miner_commission_cap_percent\"></a>`miner_commission_cap_percent` | 20 percent | [§6.1](#61-primitives) | D-0530 | [DEPRECATED — D-0530] Legacy maximum commission a miner could charge delegators (20%; yellowpaper §6.1). |\n| <a id=\"param-miner_unbonding_blocks\"></a>`miner_unbonding_blocks` | 604_800 blocks | [§6.1](#61-primitives) |  | Miner unbonding period (~7 days at 1s/block). |\n| <a id=\"param-miner_capacity_stake_per_gflop\"></a>`miner_capacity_stake_per_gflop` | VFY / 100 (= 0.01 FLOP per GFLOP/s) | [§6.1](#61-primitives) | D-0418 | Capacity-proportional miner self-stake = min_miner_self_stake + B_p * this (LINEAR, NO CAP — a cap would make the largest miners' fraud +EV; D-0418, ENG-8). 0.01 FLOP per GFLOP/s of CALIBRATED B_p (VFY/100, where VFY = 1 FLOP). |\n| <a id=\"param-miner_stake_revocation_latency_blocks\"></a>`miner_stake_revocation_latency_blocks` | 604_800 blocks | [§6.1](#61-primitives) |  | Revocation/dispute latency window used in miner stake exposure: required self-stake covers cap × this window × stake_rate. |\n| <a id=\"param-miner_stake_surge_multiplier_ppm\"></a>`miner_stake_surge_multiplier_ppm` | 1_250_000 ppm | [§6.1](#61-primitives) |  | Provisional burst-cap stake multiplier. 1_250_000 ppm = 1.25x exposure stake while a cap is still burst/audit-ratcheted. |\n| <a id=\"param-calibration_min_verified_jobs\"></a>`calibration_min_verified_jobs` | 64 jobs | [§7.1](#71-entry--benchmark-burst) | D-0433 | D-0433 minimum independently verified jobs in the quick serving-entry burst. |\n| <a id=\"param-calibration_min_burst_blocks\"></a>`calibration_min_burst_blocks` | 600 blocks | [§7.1](#71-entry--benchmark-burst) | D-0433 | D-0433 minimum chain-timed serving-entry burst (10 minutes at 1s blocks). yellowpaper §7.1. |\n| <a id=\"param-calibration_min_utilization_ppm\"></a>`calibration_min_utilization_ppm` | 500_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | Sustained utilization threshold for burst acceptance. |\n| <a id=\"param-calibration_provisional_discount_ppm\"></a>`calibration_provisional_discount_ppm` | 900_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | HARD-tier provisional discount applied to attested SKU ceilings before min(empirical_burst_cap, discounted_sku_ceiling). yellowpaper §7.1. |\n| <a id=\"param-calibration_lease_blocks\"></a>`calibration_lease_blocks` | 604_800 blocks | [§7.2](#72-renewable-cap) | D-0433 | D-0433 renewable calibration-cap lease (7 days at 1s blocks). |\n| <a id=\"param-calibration_renewal_min_verified_jobs\"></a>`calibration_renewal_min_verified_jobs` | 8 jobs | [§7.2](#72-renewable-cap) | D-0433 | D-0433 minimum fresh one-shot Ghost canaries for quick restart/offline/periodic cap renewal. |\n| <a id=\"param-calibration_renewal_max_age_blocks\"></a>`calibration_renewal_max_age_blocks` | 600 blocks | [§7.2](#72-renewable-cap) |  | Maximum miner-triggered renewal window (10 minutes at 1s blocks). |\n| <a id=\"param-calibration_min_recalibration_interval_blocks\"></a>`calibration_min_recalibration_interval_blocks` | 600 blocks | [§7.1](#71-entry--benchmark-burst) |  | Minimum interval between accepted initial calibrations (10 minutes at 1s blocks), preventing rapid cap replacement and strategic retry loops. |\n| <a id=\"param-calibration_max_gpu_inventory_entries\"></a>`calibration_max_gpu_inventory_entries` | 16 distinct SKUs | [§7.1](#71-entry--benchmark-burst) |  | Maximum distinct attested GPU SKUs on one miner host. |\n| <a id=\"param-miner_capacity_stake_sim_per_10_gflop\"></a>`miner_capacity_stake_sim_per_10_gflop` | 0.1 FLOP per 10 GFLOP/s | [§6.1](#61-primitives) | D-0418 | Simulator mirror of miner_capacity_stake_per_gflop (D-0418). |\n\n**Compute-channel timing bounds**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-timing_max_clock_skew_ms\"></a>`timing_max_clock_skew_ms` | 250 ms | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Maximum clock skew (in ms) tolerated between miner and agent wall clocks when classifying timing as Eligible vs Ambiguous. |\n| <a id=\"param-timing_network_pad_ms\"></a>`timing_network_pad_ms` | 100 ms | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Network round-trip padding (in ms) added to the clock-skew allowance when evaluating receipt timing. |\n\n**Sessions / capacity reservations (A1 anti-spam)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-max_active_reservations_base\"></a>`max_active_reservations_base` | 4 count | [§12.2](#122-per-identity-capacity-reservation) |  | Base number of concurrent active capacity reservations per agent identity. |\n| <a id=\"param-escrow_per_reservation_slot\"></a>`escrow_per_reservation_slot` | 50 FLOP | [§12.2](#122-per-identity-capacity-reservation) |  | Escrow (in FLOP) that grants +1 additional active reservation slot beyond base. |\n| <a id=\"param-min_certificate_premium_ppm\"></a>`min_certificate_premium_ppm` | 1_500_000 ppm | [§12.2](#122-per-identity-capacity-reservation) |  | Minimum price multiple (1_500_000 = 1.5x) over the model's per-GFLOP rate for certificate-backed premium settlement (#535). certificate_settle requires escrow >= price_per_gflop * aggregate_gn * multiple, so premium-class proven work cannot pay standard-rate escrow. |\n| <a id=\"param-sampled_audit_alpha_ppm\"></a>`sampled_audit_alpha_ppm` | 50_000 ppm | [§3.5](#35-tier-3--independent-optimistic-re-execution--slashing) |  | Default α for sampled-audit certificate mode (#628 / certificate format section 9.5; yellowpaper §3.5). 50_000 = 5% of turns selected post-epoch via VRF beacon; 1_000_000 = full audit. |\n| <a id=\"param-sampled_audit_checkpoint_turns\"></a>`sampled_audit_checkpoint_turns` | 16 turns | [§3.5](#35-tier-3--independent-optimistic-re-execution--slashing) |  | KV-checkpoint interval C for sampled-audit replay (#628). |\n| <a id=\"param-audit_quantum_gn\"></a>`audit_quantum_gn` | 100_000_000 G_n | [§12.2](#122-per-identity-capacity-reservation) |  | #764 blast-radius control: the session-host / checker forces at least one audit ticket every this many G_n of served work (value quantum Q). |\n| <a id=\"param-high_value_gn_threshold\"></a>`high_value_gn_threshold` | 10_000_000 G_n | [§12.2](#122-per-identity-capacity-reservation) |  | #764 asymmetry: any single turn with G_n ≥ this is force-audited (effective α=1 for its leaf), so a sparse high-G_n turn cannot ride Bernoulli-α. MUST stay ≤ audit_quantum_gn so no unaudited turn alone fills a quantum (TRIZ P4 Asymmetry). |\n\n**Finality-stall safe mode (compute-channel)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-finality_lag_warn\"></a>`finality_lag_warn` | 30 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag above which the detector reports Lagging (alert only; finality-clocked deadlines pause naturally). |\n| <a id=\"param-finality_freeze_threshold\"></a>`finality_freeze_threshold` | 120 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag at/above which the channel enters Stalled: new finality-dependent opens are rejected fail-closed (ensure_finality_open_allowed); additive top-up/cancel paths stay open. |\n| <a id=\"param-max_finality_stall\"></a>`max_finality_stall` | 3_600 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag at/above which the chain is EscapeEligible (safe mode): restore AlephBFT finality or ratify a checkpoint recovery through the hard-fork runbook. ~1h at 1s blocks. |\n| <a id=\"param-htlc_timelock_symmetry_safety_margin_percent\"></a>`htlc_timelock_symmetry_safety_margin_percent` | 20 percent | [§10.1](#101-requirements) |  | Minimum foreign-chain HTLC safety margin as a percentage of the foreign duration, after converting it to one-second FLOP blocks. |\n| <a id=\"param-htlc_burn_share_ppt\"></a>`htlc_burn_share_ppt` | 0 ppt | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Share of a finalized post-timeout HTLC resolution burned before payout. |\n| <a id=\"param-btc_block_time_flop_blocks\"></a>`btc_block_time_flop_blocks` | 600 blocks | [§10.1](#101-requirements) |  | Average Bitcoin block interval expressed in one-second FLOP blocks. |\n\n**PoUI simulator-mode safety flag (#297 CRIT-02 / RT-C02)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-poui_allow_simulator_mode\"></a>`poui_allow_simulator_mode` | cfg!(feature = \"volta\") flag |  |  | #297: AllowSimulatorMode gates the TEE-free simulator credit path; derived from the `volta` devnet feature so production runtimes fail closed. |\n| <a id=\"param-paid_storage_enabled\"></a>`paid_storage_enabled` | cfg!(feature = \"paid-storage-unratified\") flag | [§5.4](#54-agent-memory-and-paid-data-storage) |  | Build-time gate for the unratified paid agent-storage pallet (yellowpaper §5.4, R5.4k). |\n\n**D-0528 sponsor-owned registration bonds (devnet/testnet only)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-sponsored_self_stake_enabled\"></a>`sponsored_self_stake_enabled` | cfg!(feature = \"sponsored-self-stake\") flag |  | D-0528 | D-0528: active sponsored principal counts toward the miner capacity bond and the validator effective minimum, and sponsors may post an operator's whole registration bond (sponsor_register_miner / sponsor_register_validator). |\n\n**PoUI submission rate limit**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-poui_submission_window_blocks\"></a>`poui_submission_window_blocks` | 86_400 blocks | [§1.2](#12-protocol-clocks--canonical-table) |  | Block-aligned PoUI submission rate-limit window (1 day at 1 s blocks). |\n| <a id=\"param-poui_max_submissions_epoch\"></a>`poui_max_submissions_epoch` | 10 count | [§1.2](#12-protocol-clocks--canonical-table) |  | Maximum submissions per miner during each block-aligned poui_submission_window_blocks window. |\n\n**F2 supply-side governor (default OFF; governance-settable)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-governor_default_enabled\"></a>`governor_default_enabled` | false bool | [§9](#9-emission--supply) |  | Master default for both governor dampers — OFF at genesis (insurance, governance-armed). |\n| <a id=\"param-governor_emission_damping_util_floor\"></a>`governor_emission_damping_util_floor` | 0.3 fraction | [§9](#9-emission--supply) |  | Utilization below which the retention reward-boost engages (utilization-indexed, never price-indexed — anti-Terra). |\n| <a id=\"param-governor_emission_damping_max_boost\"></a>`governor_emission_damping_max_boost` | 1.5 multiplier | [§9](#9-emission--supply) |  | Hard cap on the miner-reward multiplier when the governor is armed (+50% max). |\n| <a id=\"param-governor_dynamic_burn_tier1\"></a>`governor_dynamic_burn_tier1` | 0.1 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 0–1 (era_max 1) when dynamic burn is armed. |\n| <a id=\"param-governor_dynamic_burn_tier2\"></a>`governor_dynamic_burn_tier2` | 0.15 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 2–3 (era_max 3) when dynamic burn is armed. |\n| <a id=\"param-governor_dynamic_burn_tier3\"></a>`governor_dynamic_burn_tier3` | 0.25 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 4+ (era_max 99 sentinel) when dynamic burn is armed. |\n\n**Governance**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-governance_root_track_approval\"></a>`governance_root_track_approval` | 67 percent | [§14.2](#142-fip-binding) | D-015 | Flat approval threshold (Byzantine 2/3) for the root / protocol-upgrade governance curve, encoded as APP_ROOT and used by the production protocol_upgrade track (GOV-A, yellowpaper §14.2). |\n| <a id=\"param-protocol_upgrade_support_floor\"></a>`protocol_upgrade_support_floor` | 15 percent | [§14.2](#142-fip-binding) | D-0415 | Turnout-floor (min_support) for the production protocol_upgrade (Root) track — 50% ceiling decaying to a 15% floor (the quorum SPEC-024 lacked). |\n\n**Consensus / finality committee**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-babe_primary_probability_denominator\"></a>`babe_primary_probability_denominator` | 50 ratio-denominator | [§15.4](#154-selection--the-poui-gated-committee) |  | BABE primary-slot probability c = 1/N, where a validator's per-slot win chance is p = 1 - (1 - c)^theta (theta = stake fraction). |\n| <a id=\"param-aleph_max_data_branch_len\"></a>`aleph_max_data_branch_len` | 30 blocks | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum blocks in one AlephBFT-ordered chain proposal — the finality throughput ceiling (finality rate ~= this / ordering latency; measured 1.66 blocks/s at the previous value of 7, implying ~4.2 s to order a proposal). |\n| <a id=\"param-aleph_max_round\"></a>`aleph_max_round` | 65_535 round | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum AlephBFT round accepted in one session. |\n| <a id=\"param-aleph_gossip_protocol_version\"></a>`aleph_gossip_protocol_version` | 5 version | [§15.4](#154-selection--the-poui-gated-committee) |  | Notification-protocol version for AlephBFT unit gossip (/flop/aleph/N). |\n| <a id=\"param-finality_committee_size\"></a>`finality_committee_size` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) | D-0437 | AlephBFT finalizing committee size: randomly sampled stake-weighted without replacement from the PoUI-gated active set off a BABE-VRF seed (#448/#848). |\n| <a id=\"param-validator_attestation_threshold\"></a>`validator_attestation_threshold` | 666_666_666 perbill-parts | [§3.6](#36-tier-4--on-chain-settlement-zk-aggregation--validator-bft-quorum) | D-0414 | BFT attestation quorum (Perbill parts 666_666_666 = 2/3), root-governable; gates the direct PoUI proof path + Ghost Tasks. yellowpaper §3.6/§13.3. |\n| <a id=\"param-attest_max_verifier_set_members\"></a>`attest_max_verifier_set_members` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum governed verifier keys stored for one attestation profile. |\n| <a id=\"param-attest_max_claim_signatures\"></a>`attest_max_claim_signatures` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum signatures accepted by the `pallet_attest` shared-claim rail; matches that rail's 100-member governed verifier-set bound and does not cap `pallet_flop_poui` `submit_validator_attestations` bundles, which are bounded by dispatch weight and block length. |\n| <a id=\"param-poui_tee_v1_profile_id\"></a>`poui_tee_v1_profile_id` | H256([4u8; 32]) profile-id | [§15.4](#154-selection--the-poui-gated-committee) |  | Governed shared-attestation profile id for PoUI TEE v1 claims. |\n| <a id=\"param-poui_tee_v1_profile_version\"></a>`poui_tee_v1_profile_version` | 1 profile-version | [§15.4](#154-selection--the-poui-gated-committee) |  | Initial profile version for PoUI TEE v1 claims. |\n\n**Validator security policy**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-validator_rotation_interval_blocks\"></a>`validator_rotation_interval_blocks` | 2_592_000 blocks | [§15.5](#155-rotation--set-size) | D-0416 | Validator-set rotation cadence (~30 d at 1s); automatic on_initialize + manual rotate. yellowpaper §15.5. |\n| <a id=\"param-validators_to_eject\"></a>`validators_to_eject` | 50 count | [§15.5](#155-rotation--set-size) |  | Requested maximum per rotation; live ejections also require scored evidence (a blacklisted seat needs none and goes first) and respect the churn percentage and minimum active set. |\n| <a id=\"param-validators_to_promote\"></a>`validators_to_promote` | 50 count | [§15.5](#155-rotation--set-size) |  | Per-rotation promote count from the queue (stake >= current minimum). yellowpaper §15.5. |\n| <a id=\"param-validator_active_set_cap\"></a>`validator_active_set_cap` | 1_000 count | [§9.3](#93-genesis-configuration) | D-0437 | Maximum active validators in ActiveValidators (admitted by rotation promotion from ValidatorQueue or direct un_jail/rejoin restoration). yellowpaper §9.3 R9.9, §15.5. |\n| <a id=\"param-validator_min_active_validators\"></a>`validator_min_active_validators` | 4 count | [§15.5](#155-rotation--set-size) |  | Minimum active set preserved by rotation and every removal path. |\n| <a id=\"param-validator_rotation_churn_percent\"></a>`validator_rotation_churn_percent` | 10 percent | [§15.5](#155-rotation--set-size) |  | Maximum share of the current active set ejected in one rotation, rounded up to a whole validator. |\n| <a id=\"param-validator_min_scored_samples\"></a>`validator_min_scored_samples` | 3 count | [§15.5](#155-rotation--set-size) |  | Performance-score updates required within one rotation interval before a validator may be ejected. |\n| <a id=\"param-ejection_cooldown_blocks\"></a>`ejection_cooldown_blocks` | 604_800 blocks | [§15.5](#155-rotation--set-size) |  | Cooldown (~7 d) before a rotation-ejected validator (whose self-stake freeze was thawed on ejection) may re-register into ValidatorQueue at effective_minimum_stake; configured in Config, enforcement in register pending. |\n| <a id=\"param-validator_unbonding_blocks\"></a>`validator_unbonding_blocks` | 1_814_400 blocks | [§13](#13-failure-semantics--actor--failure-matrix) | D-0419 | Validator stake unbonding lockup (~21 d); bounds withdraw-after-misbehavior. yellowpaper §13. |\n| <a id=\"param-validator_extended_downtime_slash_percent\"></a>`validator_extended_downtime_slash_percent` | 5 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Slash fraction for extended validator downtime (followed by removal). yellowpaper §13.2. |\n| <a id=\"param-validator_growth_numerator\"></a>`validator_growth_numerator` | 109 ratio | [§15.2](#152-onboarding-normative) | D-0413 | Numerator of the annual compounding factor on the validator minimum-stake floor (109/100 = +9%/yr). yellowpaper §15.2. |\n| <a id=\"param-validator_growth_denominator\"></a>`validator_growth_denominator` | 100 ratio | [§15.2](#152-onboarding-normative) | D-0413 | Denominator paired with validator_growth_numerator (109/100 = +9%/yr). yellowpaper §15.2. |\n\n**Metering tripwire**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-throughput_tripwire_gflops_per_sec\"></a>`throughput_tripwire_gflops_per_sec` | 2_000_000 G_n/s | [§4.2](#42-the-op-count-model) | D-0405 | Reject (never clamp) any claim whose implied gn*1000/latency_ms exceeds this; reject-only, governable, default-on. yellowpaper §4.2. |\n| <a id=\"param-soft_tier_spot_check_rate_ppm\"></a>`soft_tier_spot_check_rate_ppm` | 25_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | SOFT-tier channel spot-check exposure surfaced with the calibration snapshot event for quality-audit pricing. yellowpaper §7.1. |\n\n**Compute-channel settlement**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-refund_penalty_phi_percent\"></a>`refund_penalty_phi_percent` | 20 percent | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0422 | Static D-0422 penalty fraction phi on unused escrow for ambiguous early close; penalty routes 100% to burn/Foundation, never miner. |\n| <a id=\"param-channel_max_settlement_turns\"></a>`channel_max_settlement_turns` | 1_024 count | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Hard cap on VerifiedTurns per settle/force_settle bundle, and the ceiling on an SLA's max_turns at open. |\n| <a id=\"param-channel_max_session_activation_bytes\"></a>`channel_max_session_activation_bytes` | 65_536 bytes | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Per-activation DA allocation cap for a funded Open session. |\n| <a id=\"param-channel_max_merkle_path_len\"></a>`channel_max_merkle_path_len` | 64 count | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Max Merkle authentication-path length per VerifiedTurn (proves membership in a tree of up to 2^64 leaves). |\n| <a id=\"param-channel_base_per_turn\"></a>`channel_base_per_turn` | 1 base unit (10^-18 FLOP) | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Per-turn flat fee of the two-part tariff (#719 option A): turn_pay = BasePerTurn + G_n (rate=1 in channel pay units). |\n| <a id=\"param-channel_c_turn_fixed\"></a>`channel_c_turn_fixed` | 1 base unit (10^-18 FLOP) | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Fixed per-turn cost floor that BasePerTurn must cover (#719). integrity_test asserts BasePerTurn ≥ CTurnFixed so dust turns are not net-negative for miner/network. |\n| <a id=\"param-channel_dispute_window_blocks\"></a>`channel_dispute_window_blocks` | 604_800 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | Session dispute/challenge window (7 d); integrity_test enforces <= DaEphemeralRetention (14 d). yellowpaper §12.1. |\n| <a id=\"param-channel_dispute_response_window_blocks\"></a>`channel_dispute_response_window_blocks` | 7_200 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | Time to respond to an open dispute (2 h); non-response defaults to a fraud verdict. yellowpaper §12.1. |\n| <a id=\"param-channel_toploc_escalation_window_blocks\"></a>`channel_toploc_escalation_window_blocks` | 7_200 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0431 | #754: validators' window (2 h) to resolve a middle-band TOPLOC escalation (stronger report → slash, or quorum clear) before it times out inconclusive (full agent refund, no miner pay, no slash). |\n| <a id=\"param-channel_challenger_bond\"></a>`channel_challenger_bond` | 100 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Bond a challenger posts to open a session dispute (anti-griefing). yellowpaper §12.1. |\n| <a id=\"param-slash_fraud_percent\"></a>`slash_fraud_percent` | 100 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0529 | Full-slash fault class (100% routed to FLOPFoundationAccount, zero burn per D-0529): Collusion / EvidenceForgery / TEE-attestation failure / correlated equivocation / double-spend → 100% slash + eject + blacklist. yellowpaper §13.2. |\n| <a id=\"param-channel_audit_forfeit_slash_ppm\"></a>`channel_audit_forfeit_slash_ppm` | 1_000_000 ppm | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #844 publish-or-forfeit: audit-data liveness-forfeit slash floor, in ppm of the withheld settlement window's value. |\n| <a id=\"param-inference_fee_miner_share_ppt\"></a>`inference_fee_miner_share_ppt` | 850 parts-per-thousand | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0525 | #2702 (D-0525): Executive ruling (Shu, 2026-10-14). |\n| <a id=\"param-inference_fee_validator_share_ppt\"></a>`inference_fee_validator_share_ppt` | 150 parts-per-thousand | [§9](#9-emission--supply) | D-0525 | #2702 (D-0525): Executive ruling (Shu, 2026-10-14). |\n| <a id=\"param-audit_fee_split_ppm\"></a>`audit_fee_split_ppm` | 10_000 ppm | [§9](#9-emission--supply) | D-0403 | #846, #2702 (D-0525): ratified 1% (10_000 ppm) of the settlement payment funded out of the 15% validator fee leg into the audit pool that pays validators for audit work. |\n| <a id=\"param-audit_fee_per_turn\"></a>`audit_fee_per_turn` | 1 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #846: flat fee a VRF-assigned validator claims per audit verdict from the audit pool (claim_audit_fee), gated on submitted evidence and pool solvency (no unpaid-duty path). 1 FLOP placeholder; governance may recalibrate against measured audit cost. |\n| <a id=\"param-channel_ack_window_blocks\"></a>`channel_ack_window_blocks` | 600 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Window for a named miner to force_ack a permissionless force_open before expire refunds escrow. yellowpaper §12.1, Appendix C.3. |\n| <a id=\"param-min_force_open_escrow_for_failed_ack\"></a>`min_force_open_escrow_for_failed_ack` | 0.05 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0423 | Minimum force_open escrow that makes an expired, unacked request increment the named miner's FailedAcks counter. |\n\n**Derived TOPLOC band (governance-set per model/precision; #685, #705)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-toploc_band_constants_fields\"></a>`toploc_band_constants_fields` | kappa_profile_hash structural |  |  | Per-(model, precision) derived TOPLOC band committed constants consumed by band_verdict / report_toploc_mismatch: kappa_profile_hash, band_tau_accept, band_tau_slash, challenge_k, challenge_window_w. |\n| <a id=\"param-toploc_band_tau_accept_bf16_milli\"></a>`toploc_band_tau_accept_bf16_milli` | 2_900 milli_exponent_error |  |  | Derived bf16 accept threshold τ_accept≈2.9 exponent errors in milli units (×1000). |\n| <a id=\"param-toploc_band_tau_slash_bf16_milli\"></a>`toploc_band_tau_slash_bf16_milli` | 185_600 milli_exponent_error |  |  | Derived bf16 slash threshold τ_slash≈185.6 exponent errors in milli units (×1000). |\n| <a id=\"param-toploc_band_eng29_threshold_milli\"></a>`toploc_band_eng29_threshold_milli` | 38_000 milli_exponent_error |  |  | ENG-29 empirically-deployed exponent-error threshold (38) in milli units. |\n| <a id=\"param-toploc_band_kappa_within_llama31_8b_bf16\"></a>`toploc_band_kappa_within_llama31_8b_bf16` | 4.5 dimensionless |  |  | Fitted/selected within-layer κ for Llama-3.1-8B bf16 (ENG-29). |\n\n**Model registry (decode-policy sets)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-max_decode_policies_per_model\"></a>`max_decode_policies_per_model` | 32 count |  |  | Maximum decode-policy hashes pinnable in a model's optional allowed set (BoundedDecodePolicySet = BoundedVec<H256, ConstU32<MAX_DECODE_POLICIES_PER_MODEL>>). |\n\n**Metering cert tokens-per-byte band (#871)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-tokens_per_byte_band_ppm_llama3\"></a>`tokens_per_byte_band_ppm_llama3` | 500_000 ppm | [§4](#4-effective-flop-metering) |  | Certified upper bound on honest tokens-per-byte for the Llama-3 tokenizer (ppm; 500000 = 0.5 tokens/byte) — the per-(model, tokenizer) model-registry field that caps the metering cert padding constraint (e): prompt_tokens ≤ ⌈len(input_bytes) · band/1e6⌉ and generated_tokens ≤ ⌈(len(output_bytes) + 1) · band/1e6⌉ (#871, spec whitepaper/research/metering-cert-spec.md §4). |\n\n**Metering cert circuit version + guest image-id registry (#929)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-metering_cert_circuit_version\"></a>`metering_cert_circuit_version` | 3 version |  |  | Governance-pinned circuit layout the metering cert proves against (V3 transcript leaf, #929). |\n| <a id=\"param-metering_cert_guest_image_id\"></a>`metering_cert_guest_image_id` | OptionQuery storage-default |  |  | Governance-pinned RISC0 guest image id for the metering cert (safety zone, #945). |\n\n**Transaction fees (live values)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-tx_fee_burn_percent_live\"></a>`tx_fee_burn_percent_live` | 0 percent | [§9.1](#91-requirements) | D-0529 | LIVE burn fraction of the base+length+weight tx fee (0%; D-0529). |\n| <a id=\"param-tx_fee_author_share_percent_live\"></a>`tx_fee_author_share_percent_live` | 100 percent | [§9](#9-emission--supply) | D-0529 | LIVE share of the transaction fee paid to the block author (= 100% of the whole fee under 0% burn, D-0529). |\n| <a id=\"param-tx_weight_to_fee\"></a>`tx_weight_to_fee` | 5_000_000 base units/weight (1 base unit = 10^-18 FLOP) | [§9.1](#91-requirements) |  | WeightToFee ConstantMultiplier; per-weight component of the base fee (effective floor: MinimumMultiplier = 1.0). yellowpaper §9.1. |\n| <a id=\"param-tx_length_to_fee\"></a>`tx_length_to_fee` | 5_000_000 base units/byte (1 base unit = 10^-18 FLOP) | [§9.1](#91-requirements) |  | LengthToFee ConstantMultiplier; per-byte component of the base fee. yellowpaper §9.1. |\n| <a id=\"param-tx_target_block_fullness_percent\"></a>`tx_target_block_fullness_percent` | 75 percent | [§9.1](#91-requirements) |  | Congestion target for the TargetedFeeAdjustment multiplier (raises the fee above the base floor as blocks fill). yellowpaper §9.1. |\n| <a id=\"param-tx_operational_fee_multiplier\"></a>`tx_operational_fee_multiplier` | 5 ratio | [§9.1](#91-requirements) |  | Surcharge multiple applied to operational-class dispatches. pallet_transaction_payment config. |\n\n**Data availability**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-da_ephemeral_retention_blocks\"></a>`da_ephemeral_retention_blocks` | 1_209_600 blocks | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0412 | Retention W (14 d) for Ephemeral DA blobs (quotes/proofs/transcripts/I-O); bounds the session challenge window. yellowpaper §5.3. |\n| <a id=\"param-da_shard_count\"></a>`da_shard_count` | 6 count | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | DA erasure-coding shard count R = 6, Reed-Solomon rate 1/2 (k = 3+3, any 3 reconstruct). yellowpaper §5.3. |\n| <a id=\"param-da_min_replication_factor\"></a>`da_min_replication_factor` | 3 count | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | DA Reed-Solomon reconstruction threshold k = 3 (any k of R shards reconstruct); hard floor for the governable da_shard_count so R < k (unreconstructable) is unreachable. yellowpaper §5.3. |\n| <a id=\"param-da_lease_deposit_per_byte\"></a>`da_lease_deposit_per_byte` | 200 FLOP per 10^9 bytes (= 2e-7 FLOP/byte) | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0412 | D-0412 refundable anti-spam deposit for leased DA (model weights): deposit = bytes × DepositPerByte, held on the publisher (never validator revenue), returned in full on prune/withdrawal. |\n\n**Agent wallet / session keys**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-agent_cap_window_blocks\"></a>`agent_cap_window_blocks` | 86_400 blocks | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Wallet and session daily spend-cap window: resets on the first spend at or after 86,400 blocks from wallet or session creation or the previous reset. |\n| <a id=\"param-agent_identity_min_stake\"></a>`agent_identity_min_stake` | 10 FLOP | [§12.3](#123-market-actor-threat-class) |  | Refundable minimum stake locked to register an agent identity: capital exposure, not an irrecoverable identity cost. yellowpaper §12.3. |\n| <a id=\"param-circuit_breaker_window\"></a>`circuit_breaker_window` | 60 blocks | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Fixed agent session-key circuit-breaker window (60 blocks): either the transaction-count or spend limb trips independently, latches until window end, and then auto-resets. yellowpaper §6.2. |\n| <a id=\"param-circuit_breaker_tx_count\"></a>`circuit_breaker_tx_count` | 100 count | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Agent session-key circuit-breaker transaction-count limb: trips at 100 txs within the window, independently of circuit_breaker_flop_cap. yellowpaper §6.2. |\n| <a id=\"param-circuit_breaker_flop_cap\"></a>`circuit_breaker_flop_cap` | 250 FLOP | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Agent session-key circuit-breaker max spend per window (60 blk / 100 tx / 250 FLOP triple). yellowpaper §6.2. |\n\n**Reference-only** — canonical documented values, single-site or not yet wired for cross-language enforcement (`enforce: false`).\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-validator_min_self_stake_ratio_percent\"></a>`validator_min_self_stake_ratio_percent` | 20 percent | [§15.2](#152-onboarding-normative) |  | Legacy minimum validator self-stake ratio when sponsored backing is enabled (§15.2). |\n| <a id=\"param-validator_work_recency_window_blocks\"></a>`validator_work_recency_window_blocks` | 86_400 blocks | [§15.2](#152-onboarding-normative) |  | Accepted verification-duty recency window for PoUI committee eligibility (§15.2, R15.4c). |\n| <a id=\"param-protocol_upgrade_approval\"></a>`protocol_upgrade_approval` | 67 percent | [§14.2](#142-fip-binding) | GOV-A | Production protocol_upgrade (Root) track approval (flat BFT 2/3); live as APP_ROOT in (enforced above as governance_root_track_approval + protocol_upgrade_support_floor). |\n| <a id=\"param-protocol_upgrade_decision_period\"></a>`protocol_upgrade_decision_period` | 28 days | [§14.2](#142-fip-binding) |  | [RATIFY] deliberation window for the protocol_upgrade track. yellowpaper §14.2. |\n| <a id=\"param-protocol_upgrade_enactment_timelock\"></a>`protocol_upgrade_enactment_timelock` | 1_209_600 blocks | [§14.1](#141-requirements) |  | 14 d at 1s — Scheduler min_enactment_period (upgrade timelock). yellowpaper §14.1. |\n| <a id=\"param-fip_decision_deposit\"></a>`fip_decision_deposit` | RATIFY FLOP | [§14.2](#142-fip-binding) |  | [RATIFY] decision-deposit spam barrier for protocol_upgrade referenda (FLOP-denominated; magnitude TBD). yellowpaper §14.2. |\n| <a id=\"param-emergency_override_timelock\"></a>`emergency_override_timelock` | 259_200 blocks |  | SPEC-015 | 72 h at 1s — pallet_emergency_override break-glass timelock (root-only). |\n| <a id=\"param-emergency_override_cooldown\"></a>`emergency_override_cooldown` | 604_800 blocks |  | SPEC-015 | 7 d at 1s — minimum gap between emergency overrides. |\n| <a id=\"param-governance_vote_locking_period\"></a>`governance_vote_locking_period` | 604_800 blocks |  |  | 7 d conviction VoteLockingPeriod (pallet_conviction_voting, live).. |\n| <a id=\"param-sudo_pallet_index\"></a>`sudo_pallet_index` | 50 index | [§14.1](#141-requirements) | GOV-B | pallet_sudo — bootstrap Root through devnet/testnet; REMOVED/neutered at the mainnet-genesis handoff (GOV-B). yellowpaper §14.1. |\n| <a id=\"param-subsidy_total_per_block\"></a>`subsidy_total_per_block` | 16 FLOP | [§9](#9-emission--supply) | D-0436 | 8 Labs + 8 Foundation in halving era 0 (years 1-2), on top of the 96 FLOP reward (yellowpaper §9); halves with the reward (`era(b) = ⌊b / H⌋`: 16 -> 8 -> 4 -> 2 -> 1 combined) and is exactly 0 from era 5 (`b = 315,360,000`), where the reward floors. |\n| <a id=\"param-emission_at_end_of_era6\"></a>`emission_at_end_of_era6` | 12_109_823_904 FLOP |  | D-0436 | 2·R₀·H − R₀ = 12,109,823,904 (2·R₀·H = 12,109,824,000 before subtracting unrewarded genesis block 0, R9.7), reached at the end of era 6 (block 441,503,999, ~year 14) under max_halvings=5 — one era earlier than the superseded maxHalvings=6 put it (hence the rename from emission_at_end_of_era7). |\n| <a id=\"param-emission_through_halving_eras\"></a>`emission_through_halving_eras` | 11_920_607_904 FLOP |  | D-0436 | R₀·H·63/32 − R₀ = 63,072,000 × (96+48+24+12+6+3) − 96 = 11,920,607,904 (11,920,608,000 before subtracting unrewarded genesis block 0, R9.7) = cumulative emission through the halving phase (end of era 5, block 378,431,999, ~year 12) under max_halvings=5. |\n| <a id=\"param-floor_annual_emission\"></a>`floor_annual_emission` | 94_608_000 FLOP |  | D-0436 | perpetual floor tail: 3 FLOP/block × 31,536,000 blocks/yr (= 189,216,000 FLOP/era). |\n| <a id=\"param-max_delegators_per_miner\"></a>`max_delegators_per_miner` | 10_000 count | [§6.1](#61-primitives) | D-0530 | [DEPRECATED — D-0530] Superseded by operator self-stake-only ruling (§6.1, §15.2); legacy MinerStaking.MaxDelegatorsPerMiner constant retained pending pallet cleanup. |\n| <a id=\"param-agent_daily_cap_autonomous\"></a>`agent_daily_cap_autonomous` | 500 FLOP | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Autonomous-agent scenario daily cap in the simulator; the runtime stores each wallet's chosen daily_cap at create_wallet rather than enforcing a global 500 FLOP constant; yellowpaper §6.2. |\n| <a id=\"param-agent_per_tx_limit\"></a>`agent_per_tx_limit` | 100 FLOP |  |  |  |\n| <a id=\"param-attestation_outage_pause_cap_blocks\"></a>`attestation_outage_pause_cap_blocks` | 14_400 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Designed-not-built 4 h cap on per-channel pauses of attestation-dependent clocks under R13.0e / O1; no runtime or pallet implementation site. yellowpaper §13.0. |\n| <a id=\"param-da_endpoint_deposit\"></a>`da_endpoint_deposit` | VFY (= 1 FLOP) |  |  | Refundable anti-spam deposit held while a validator's DA serving endpoint announcement exists in DaRegistry 1 VFY = 1 FLOP. Held under HoldReason; released in full on clear_endpoint. |\n| <a id=\"param-da_max_endpoint_bytes\"></a>`da_max_endpoint_bytes` | 256 bytes |  |  | Maximum UTF-8 byte length of a validator DA serving endpoint URL stored in DaRegistry (e.g. 'http://host:7000'). |\n| <a id=\"param-validator_stake_value_coupled_floor\"></a>`validator_stake_value_coupled_floor` | dynamic FLOP |  | D-0413 | D-0413 (C5): governance-retargeted value-coupled stake floor k·V_booked (storage ValueCoupledStakeFloor, default 0 = baseline-identical). |\n| <a id=\"param-security_kappa_extractable\"></a>`security_kappa_extractable` | 0.2 dimensionless |  | DEC-5 | ASSUMPTION — NOT a theorem; a governance/DEC-5 risk input. κ = fraction of realized value V_booked a successful AlephBFT safety break extracts; the lever the value-coupled stake floor rests on (k ≥ m·κ/(θ·N·σ·δ), linear in κ — k_threshold_scales_with_kappa). |\n| <a id=\"param-da_deposit_max_step_factor\"></a>`da_deposit_max_step_factor` | 100 ratio |  |  | pallet_da_registry MAX_DEPOSIT_STEP_FACTOR: a single set_deposit_per_byte call may move the deposit ≤100× in either direction (anti-shock; the hard floor is >0). |\n| <a id=\"param-governance_param_max_step_pct\"></a>`governance_param_max_step_pct` | 50 percent |  |  | MAX_STEP_PCT: the FORMAL-MODEL proportional per-enactment bound (100·\\|Δ\\| ≤ pct·\\|old\\|) proven invariant in Model-side rail; the runtime instantiates the same proportional FORM per-param (e.g. da_deposit_max_step_factor) with its own magnitude. |\n| <a id=\"param-da_serve_or_slash_percent\"></a>`da_serve_or_slash_percent` | 1 percent | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | Serve-or-slash Liveness bound: a validator failing a DA audit is slashed ≤1% (bounded, not fraud). yellowpaper §5.3. |\n| <a id=\"param-slash_liveness_percent\"></a>`slash_liveness_percent` | 1 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Liveness fault slash (jail > 300 blk). yellowpaper §13.2. |\n| <a id=\"param-slash_equivocation_lone_percent\"></a>`slash_equivocation_lone_percent` | 50 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0420 | Lone equivocation slash (correlated Eth2-style curve; +50% returned after 180 d, ≥1/3 correlated → 100%). yellowpaper §13.2. |\n| <a id=\"param-session_key_expiry_days\"></a>`session_key_expiry_days` | 10 days | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Target-cadence conversion of the 864,000-block session-key limit (yellowpaper §6.2): approximately 10 d at uninterrupted 1 s blocks, not a wall-clock upper bound; checked against the runtime and blocks_per_day. |\n| <a id=\"param-blackout_revoke_blocks\"></a>`blackout_revoke_blocks` | 86_400 blocks | [§8](#8-performance-locked-vesting) |  | Performance-vesting blackout: capacity < 10% for 86,400 continuous blocks (~1 d) revokes the grant (1.0× slash). yellowpaper §8. |\n| <a id=\"param-performance_score_weights\"></a>`performance_score_weights` | 40/30/20/10 percent | [§15.4](#154-selection--the-poui-gated-committee) |  | Composite validator performance score: 40% uptime + 30% block_rate + 20% accuracy + 10% latency (parts-per-10,000); the rotation-floor input. yellowpaper §15.4/§15.5. |\n\n**Cross-language names (canonical ⇄ Rust ⇄ Lean ⇄ Quint).** The same protocol value carries a different identifier per language by convention; values agree where a language pins the real (non-demo) figure. Enforced rows are value-gated against the Rust site by `check_params.py`.\n\n| Parameter | Rust (runtime) | Lean (lean-proofs) | Quint (formal-specs) |\n|-----------|----------------|--------------------------|----------------------|\n| [`genesis_supply`](#param-genesis_supply) | `FLOP_TOTAL_SUPPLY` | `HalvingBoundary.genesisSupply` | `GENESIS_MICRO` |\n| [`validator_min_stake`](#param-validator_min_stake) | `ValidatorInitialMinimumStake` | — | — |\n| [`initial_block_reward`](#param-initial_block_reward) | `RewardInitialPerBlock` | `Emission.initialReward` | `P_EMISSION_CAP` |\n| [`max_halvings`](#param-max_halvings) | `RewardMaxHalvings` | `Emission.maxHalvings` | `MAX_HALVINGS` |\n| [`floor_reward`](#param-floor_reward) | — | `Emission.floorReward` | `FLOOR_MICRO` |\n| [`miner_share_ppt`](#param-miner_share_ppt) | `MINER_SHARE_PPT` | `SettlementInt.BlockRewards.minerPpt` | — |\n| [`validator_share_ppt`](#param-validator_share_ppt) | `VALIDATOR_SHARE_PPT` | `SettlementInt.BlockRewards.validatorPpt` | — |\n| [`agent_share_ppt`](#param-agent_share_ppt) | `AGENT_SHARE_PPT` | `SettlementInt.BlockRewards.agentPpt` | — |\n| [`staker_share_ppt`](#param-staker_share_ppt) | `STAKER_SHARE_PPT` | `SettlementInt.BlockRewards.stakerPpt` | — |\n| [`reward_distribution_period_blocks`](#param-reward_distribution_period_blocks) | `RewardDistributionPeriodBlocks` | — | `PERIOD_BLOCKS` |\n| [`gn_decay_factor_ppb`](#param-gn_decay_factor_ppb) | `DEFAULT_GN_DECAY_FACTOR_PPB` | — | `DEFAULT_DECAY_PPB` |\n| [`finality_committee_premium_weight_ppm`](#param-finality_committee_premium_weight_ppm) | `FINALITY_COMMITTEE_PREMIUM_WEIGHT_PPM` | — | — |\n| [`poui_submission_window_blocks`](#param-poui_submission_window_blocks) | `PouiEpochDurationBlocks` | — | — |\n| [`poui_max_submissions_epoch`](#param-poui_max_submissions_epoch) | `PouiMaxSubmissionsPerEpoch` | — | — |\n| [`governance_root_track_approval`](#param-governance_root_track_approval) | `APP_ROOT` | — | `P_APPROVAL_FLOOR` |\n| [`babe_primary_probability_denominator`](#param-babe_primary_probability_denominator) | `PRIMARY_PROBABILITY` | — | — |\n| [`aleph_max_data_branch_len`](#param-aleph_max_data_branch_len) | `MAX_DATA_BRANCH_LEN` | — | — |\n| [`aleph_max_round`](#param-aleph_max_round) | `MAX_ROUND` | — | — |\n| [`finality_committee_size`](#param-finality_committee_size) | `AlephMaxCommittee` | — | — |\n| [`validator_attestation_threshold`](#param-validator_attestation_threshold) | `PouiDefaultValidatorAttestationThreshold` | — | — |\n| [`attest_max_verifier_set_members`](#param-attest_max_verifier_set_members) | `AttestMaxVerifierSetMembers` | — | — |\n| [`attest_max_claim_signatures`](#param-attest_max_claim_signatures) | `AttestMaxClaimSignatures` | — | — |\n| [`poui_tee_v1_profile_id`](#param-poui_tee_v1_profile_id) | `POUI_TEE_V1_PROFILE_ID` | — | — |\n| [`poui_tee_v1_profile_version`](#param-poui_tee_v1_profile_version) | `PouiTeeV1Profile` | — | — |\n| [`validator_rotation_interval_blocks`](#param-validator_rotation_interval_blocks) | `RotationIntervalBlocks` | — | — |\n| [`validators_to_eject`](#param-validators_to_eject) | `ValidatorsToEject` | — | — |\n| [`validators_to_promote`](#param-validators_to_promote) | `ValidatorsToPromote` | — | — |\n| [`validator_active_set_cap`](#param-validator_active_set_cap) | `ValidatorActiveSetCap` | — | — |\n| [`validator_min_active_validators`](#param-validator_min_active_validators) | `ValidatorMinActiveValidators` | — | — |\n| [`validator_rotation_churn_percent`](#param-validator_rotation_churn_percent) | `ValidatorRotationChurnPercent` | — | — |\n| [`validator_min_scored_samples`](#param-validator_min_scored_samples) | `ValidatorMinScoredSamples` | — | — |\n| [`ejection_cooldown_blocks`](#param-ejection_cooldown_blocks) | `EjectionCooldownBlocks` | — | — |\n| [`validator_unbonding_blocks`](#param-validator_unbonding_blocks) | `ValidatorUnbondingPeriodBlocks` | — | — |\n| [`validator_extended_downtime_slash_percent`](#param-validator_extended_downtime_slash_percent) | `ValidatorExtendedDowntimeSlash` | — | — |\n| [`validator_growth_numerator`](#param-validator_growth_numerator) | `ValidatorGrowthNumerator` | — | — |\n| [`validator_growth_denominator`](#param-validator_growth_denominator) | `ValidatorGrowthDenominator` | — | — |\n| [`throughput_tripwire_gflops_per_sec`](#param-throughput_tripwire_gflops_per_sec) | `PouiGnThroughputCeilingGflopsPerSec` | — | — |\n| [`refund_penalty_phi_percent`](#param-refund_penalty_phi_percent) | `ChannelRefundPenalty` | — | — |\n| [`channel_max_settlement_turns`](#param-channel_max_settlement_turns) | `ChannelMaxSettlementTurns` | — | — |\n| [`channel_max_session_activation_bytes`](#param-channel_max_session_activation_bytes) | `ChannelMaxSessionActivationBytes` | — | — |\n| [`channel_max_merkle_path_len`](#param-channel_max_merkle_path_len) | `ChannelMaxMerklePathLen` | — | — |\n| [`channel_base_per_turn`](#param-channel_base_per_turn) | `ChannelBasePerTurn` | — | — |\n| [`channel_c_turn_fixed`](#param-channel_c_turn_fixed) | `ChannelCTurnFixed` | — | — |\n| [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) | `ChannelDisputeWindow` | — | — |\n| [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks) | `ChannelDisputeResponseWindow` | — | — |\n| [`channel_toploc_escalation_window_blocks`](#param-channel_toploc_escalation_window_blocks) | `ChannelToplocEscalationWindow` | — | — |\n| [`channel_challenger_bond`](#param-channel_challenger_bond) | `ChannelChallengerBond` | — | — |\n| [`channel_audit_forfeit_slash_ppm`](#param-channel_audit_forfeit_slash_ppm) | `ChannelAuditForfeitSlashPpm` | — | — |\n| [`inference_fee_miner_share_ppt`](#param-inference_fee_miner_share_ppt) | `INFERENCE_FEE_MINER_SHARE_PPT` | — | — |\n| [`inference_fee_validator_share_ppt`](#param-inference_fee_validator_share_ppt) | `INFERENCE_FEE_VALIDATOR_SHARE_PPT` | — | — |\n| [`audit_fee_split_ppm`](#param-audit_fee_split_ppm) | `ChannelAuditFeeSplitPpm` | — | — |\n| [`audit_fee_per_turn`](#param-audit_fee_per_turn) | `ChannelAuditFeePerTurn` | — | — |\n| [`channel_ack_window_blocks`](#param-channel_ack_window_blocks) | `ChannelAckWindow` | — | — |\n| [`min_force_open_escrow_for_failed_ack`](#param-min_force_open_escrow_for_failed_ack) | `MinForceOpenEscrowForFailedAck` | — | — |\n| [`toploc_band_tau_accept_bf16_milli`](#param-toploc_band_tau_accept_bf16_milli) | — | `ToplocBandInt.tauAcceptBf16` | — |\n| [`toploc_band_tau_slash_bf16_milli`](#param-toploc_band_tau_slash_bf16_milli) | — | `ToplocBandInt.tauSlashBf16` | — |\n| [`toploc_band_eng29_threshold_milli`](#param-toploc_band_eng29_threshold_milli) | — | `ToplocBandInt.eng29Threshold` | — |\n| [`max_decode_policies_per_model`](#param-max_decode_policies_per_model) | `MAX_DECODE_POLICIES_PER_MODEL` | — | — |\n| [`tokens_per_byte_band_ppm_llama3`](#param-tokens_per_byte_band_ppm_llama3) | — | `MeteringCertInt.tokensPerByteBandPpmLlama3` | — |\n| [`tx_fee_burn_percent_live`](#param-tx_fee_burn_percent_live) | `BurnFees` | — | — |\n| [`tx_fee_author_share_percent_live`](#param-tx_fee_author_share_percent_live) | `AllFeesToAuthor` | — | — |\n| [`tx_weight_to_fee`](#param-tx_weight_to_fee) | `TransactionPicosecondFee` | — | — |\n| [`tx_length_to_fee`](#param-tx_length_to_fee) | `TransactionByteFee` | — | — |\n| [`tx_target_block_fullness_percent`](#param-tx_target_block_fullness_percent) | `TargetBlockFullness` | — | — |\n| [`tx_operational_fee_multiplier`](#param-tx_operational_fee_multiplier) | `OperationalFeeMultiplier` | — | — |\n| [`da_ephemeral_retention_blocks`](#param-da_ephemeral_retention_blocks) | `DaEphemeralRetention` | — | — |\n| [`da_shard_count`](#param-da_shard_count) | `DaReplicationFactor` | — | — |\n| [`da_min_replication_factor`](#param-da_min_replication_factor) | `MIN_REPLICATION_FACTOR` | `k` | — |\n| [`da_lease_deposit_per_byte`](#param-da_lease_deposit_per_byte) | `DaDepositPerByte` | — | — |\n| [`agent_cap_window_blocks`](#param-agent_cap_window_blocks) | `AgentEpochLength` | — | — |\n| [`agent_identity_min_stake`](#param-agent_identity_min_stake) | `AgentIdentityMinStake` | — | — |\n| [`circuit_breaker_window`](#param-circuit_breaker_window) | `SessionKeysCircuitBreakerPeriod` | — | — |\n| [`circuit_breaker_tx_count`](#param-circuit_breaker_tx_count) | `SessionKeysCircuitBreakerMaxTxs` | — | — |\n| [`circuit_breaker_flop_cap`](#param-circuit_breaker_flop_cap) | `SessionKeysCircuitBreakerMaxSpend` | — | — |\n| [`validator_min_self_stake_ratio_percent`](#param-validator_min_self_stake_ratio_percent) | `ValidatorMinSelfStakeRatio` | — | — |\n| [`validator_work_recency_window_blocks`](#param-validator_work_recency_window_blocks) | `ValidatorWorkRecencyWindow` | — | — |\n\n<!-- END GENERATED: param-table -->\n\n**Derived quantities & narrative constants** — structural values, formulas, and mechanism constants that are\n*not* part of the machine-checked numeric contract above (so they live here, not in the params file):\n\n| Parameter | Value | § | D-id |\n|-----------|-------|---|------|\n| Block interval / runtime length envelope | 1 s / 5 MiB maximum, 75% Normal; no measured capacity profile | [2.1](#21-requirements) / [5.2](#52-block--transaction-sizing) | D-0401, D-0502 |\n| Finality / BFT tolerance | deterministic once ordered; no latency target / strictly < ⅓ Byzantine committee seats | [2.1](#21-requirements) | D-0401, D-0501, D-0502 |\n| Committee selection | PoUI-gated: stake + recent accepted verification duty (`hp-consensus::select_committee`; R15.4c) | [2.1](#21-requirements) / [2.3](#23-safety--the-three-sub-proofs) / [15.4](#154-selection--the-poui-gated-committee) | D-0401, D-0439 |\n| Consensus engine | BABE block authoring + stake-BFT-DAG **AlephBFT finality**; `pallet_aleph` runtime **index 104** reports `LastFinalized` to `AlephFinalizedPrefix` | [2](#2-consensus) | D-0401 |\n| Miner/checker Sybil cost / identity | ≥10k FLOP base + capacity deposit + attested inventory + active renewable cap | [2.4](#24-sybil-model--miner-and-checker-identities) | D-0418, D-0433 |\n| Validator slashing | Liveness 1 % (jail > 300 blk) / extended-downtime 5 % (kick > 24 h); **Equivocation correlated** — lone 50 % (+50 % returned after 180 d) → ≥⅓ correlated 100 %; Collusion / EvidenceForgery / TEE / DoubleSpend 100 % + eject + blacklist | [11](#11-security-invariants) / [13.2](#132-validator-consensus--da--leader-duties) | D-0409, D-0420 |\n| Unbonding slash-lock | no unbond completion while a session/dispute/audit is open; unlock cooldown ≥ dispute window + resolution (miner `[LIVE]`; validator freeze and margin composition E.57) | [6.1](#61-primitives) / [13](#13-failure-semantics--actor--failure-matrix) | D-0419 |\n| Validator rotation | [`RotationIntervalBlocks`](#param-validator_rotation_interval_blocks); **stake-ordered**, gated by a verified-work + liveness **minimum-performance floor**; [eject](#param-validators_to_eject)/[promote](#param-validators_to_promote) = 50, [cooldown](#param-ejection_cooldown_blocks) ~7 d | [6.1](#61-primitives) / [13.2](#132-validator-consensus--da--leader-duties) | D-0416, D-0409 |\n| `G_n` / `F_eff` | `F_eff/10⁹`; deterministic reference-work accounting (`hp_poui::flop_meter`), distinct from physical instruction measurement | [4.1](#41-requirements) / [4.2](#42-the-op-count-model) | D-0405, D-0501 |\n| Throughput tripwire ceiling | reject if `gn·1000/latency_ms` > [**2,000,000 GFLOPS/s**](#param-throughput_tripwire_gflops_per_sec) (reject-only, never clamps `gn`; governable, default-on) | [4.2](#42-the-op-count-model) | D-0405 |\n| Heuristic (sanity only) | `2·P_active·N + 2·n_layer·n_ctx·d_attn`, ~2–3× | [4.2](#42-the-op-count-model) | D-0405 |\n| `model_hash` | measured dm-verity Merkle root (reproducible packer `[tools/modelpack]`), extended to RTMR3, registry-pinned per `(model, precision)`, fail-closed `Vk::V3` | [3.3](#33-tier-1--tee-attestation--measuring-model_hash-optional--hard-tier) | D-0404 |\n| Validator attestation quorum | [**BFT fraction, default 2/3**](#param-validator_attestation_threshold) (`ValidatorAttestationThreshold: Perbill`, root-governable); `ceil(active_count × threshold).max(1)` distinct active-validator signatures required | [3.6](#36-tier-4--on-chain-settlement-zk-aggregation--validator-bft-quorum), [13.3](#133-validator-attestation-quorum-bft-fraction) | D-0414 (supersedes D-0406) |\n| Direct-rail attestation extrinsic | 18,434 B at active=100/q=67; 36,859 B at supported max active=200/q=134; no throughput inference | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0502 |\n| Protocol DA (sovereign validator, §5.3) | [`R = 6` shards](#param-da_shard_count), Reed–Solomon **rate ½** (k=3+3, any 3 reconstruct); `Ephemeral` [retention `W` = **14 d**](#param-da_ephemeral_retention_blocks); audit deadline ~5 min; serve-or-slash bounded 1% (`Liveness`); **no per-byte DA fee** — DA is a validator duty funded by the validator reward share (D-0412) | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402, D-0412 |\n| DA leased model storage (D-0407) | default lease term **180 d**; term unit / top-up granularity **30 d**; expiry warning **30 d** before `lease_end` (one-shot, lazy); grace **14 d** (= `W`); **no storage fee** — `top_up_lease` is free (tx only); a **refundable** anti-spam deposit = `bytes × DepositPerByte` is **held** (dedicated hold reason) and **returned in full** on prune / voluntary withdrawal (D-0412); usage **pin** blocks prune; prune recoverable (deterministic root), reactivation re-locks the deposit | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0407, D-0412 |\n| Session-key expiry / caps | **≤10 d** (`SessionKeysMaxDuration = 864,000` blocks at 1 s); per-tx + daily caps; circuit breaker 60 blk / [100 tx](#param-circuit_breaker_tx_count) / [250 FLOP](#param-circuit_breaker_flop_cap) | [6.2](#62-agent-autonomy--operating-without-per-action-consensus) | — |\n| Compute channel (session settle) | 2 primary cooperative lifecycle inclusions, plus evidence/dispute calls; bytes and verification grow with turns; escrow = reserved capacity paid to the miner (no under-use refund, no settlement fee); [**dispute window 7 d**](#param-channel_dispute_window_blocks) ≤ DA `W` = 14 d; [**dispute-response window 2 h**](#param-channel_dispute_response_window_blocks); `top_up_escrow` | [12.1](#121-sessions--attested-streaming--aggregate-settlement) / [12.2](#122-per-identity-capacity-reservation) | D-0403 |\n| Tx model / composability | account + monotonic `u32` nonce (2-D lanes optional, not adopted); UTXO-native **not adopted**; opcode-like composability via a **declarative spend-condition layer** (Miniscript-style) + multisig/proxy/timelock/HTLC; UTXO side-rail = future micropayment option | [6.3](#63-transaction--state-model) / [6.4](#64-collaborative-pool--composition) | D-0401, D-0417 |\n| Calibrated host capacity | empirical timed work; HARD ≤ 90% of summed `(SKU,count)` ceiling; seven-day lease | [7](#7-hardware-calibration--drift) | D-0433 |\n| UnlockRate / Blackout | `R_p²` / <10% for 86,400 blocks → revoke | [8](#8-performance-locked-vesting) | — |\n| `T_lock` | pair-specific; default 7,200 FLOP blocks vs 3,600 s counter duration has zero unallocated inclusion budget | [10](#10-htlc-atomic-swap) | — |\n\nThe open/unset values referenced above are specified as numbered fill-in stubs in\n[Appendix E — Open Specification Items](#appendix-e--open-specification-items).\n\n---","after":"## Appendix A — Parameter Reference\n\nThe table below is **generated** from `params/flop-protocol-params.yaml` (the canonical machine-checked\ncontract; every value is mirrored into runtime / SDK / sim code and gated by `scripts/check_params.py`).\nRegenerate with `uv run --script scripts/gen_param_table.py`; drift fails `just verify-whitepaper`. Each\nrow is anchored `#param-<name>`, and prose links to the corresponding generated anchor. This table is the\nsingle authoritative list of the values themselves.\n\n<!-- BEGIN GENERATED: param-table (source: params/flop-protocol-params.yaml via scripts/gen_param_table.py) -->\n\nEnforced parameters (`params/flop-protocol-params.yaml`); every value below is mirrored into code and gated by `scripts/check_params.py`. Link a parameter anywhere in the spec with its generated `#param-<name>` anchor.\n\n**Genesis**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-genesis_supply\"></a>`genesis_supply` | 4_400_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Genesis (pre-emission) total supply, pinned normatively by R9.7 (§9.3). |\n| <a id=\"param-genesis_miner_airdrop\"></a>`genesis_miner_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0438 | Miner-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_validator_airdrop\"></a>`genesis_validator_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Validator-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_agent_airdrop\"></a>`genesis_agent_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0438 | Agent-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_reserve\"></a>`genesis_reserve` | 800_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Ecosystem/incentives reserve component of the genesis supply (18.18%) — KOL, referral and growth incentives. |\n| <a id=\"param-validator_min_stake\"></a>`validator_min_stake` | 1_200_000 FLOP | [§9](#9-emission--supply) | D-0440 | Baseline floor; compounds 9%/yr (MinimumValidatorStake). |\n| <a id=\"param-airdrop_vesting_duration_blocks\"></a>`airdrop_vesting_duration_blocks` | 7_776_000 blocks | [§8.2](#82-era-t-conversion-and-airdrop-vesting) | SPEC-022 | Interim pallet schedule: 90-day linear airdrop vesting at 1-second block time, governing no ratified grant tier (§8.2). |\n\n**Emission & Rewards**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-initial_block_reward\"></a>`initial_block_reward` | 96 FLOP | [§9](#9-emission--supply) | D-008 | Block reward at genesis (Era 0). |\n| <a id=\"param-halving_interval_blocks\"></a>`halving_interval_blocks` | 63_072_000 blocks | [§9](#9-emission--supply) |  | Blocks between halvings (~730 days at 1s/block). |\n| <a id=\"param-max_halvings\"></a>`max_halvings` | 5 count | [§9](#9-emission--supply) | D-0436 | Halvings before the reward floors permanently. |\n| <a id=\"param-floor_reward\"></a>`floor_reward` | 3 FLOP | [§9](#9-emission--supply) | D-0436 | Perpetual per-block reward after max_halvings (96 >> 5 = 3). |\n| <a id=\"param-miner_share_ppt\"></a>`miner_share_ppt` | 750 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Miner share of each block reward (75%; yellowpaper §9). |\n| <a id=\"param-validator_share_ppt\"></a>`validator_share_ppt` | 100 parts-per-thousand | [§9](#9-emission--supply) |  | Validator share of each block reward (10%). |\n| <a id=\"param-agent_share_ppt\"></a>`agent_share_ppt` | 100 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Agent/broker rebate share of each block reward (10%; yellowpaper §9). |\n| <a id=\"param-staker_share_ppt\"></a>`staker_share_ppt` | 50 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Community-staker share of each block reward (5%; yellowpaper §9) — duration-locked community staking pool across seven lock duration tiers with zero slashing risk and no operator delegation (D-0530), for all FLOP stakers other than miners and validators. |\n| <a id=\"param-reward_distribution_period_blocks\"></a>`reward_distribution_period_blocks` | 86_400 blocks | [§9](#9-emission--supply) |  | Blocks between block-rewards distributions (one day at 1 s blocks). |\n| <a id=\"param-gn_decay_factor_ppb\"></a>`gn_decay_factor_ppb` | 1_000_000_000 ppb | [§9](#9-emission--supply) |  | GnDecayFactor read when the key is absent: 1.0, i.e. NO decay, so a period's miner leg is split purely by verified G_n (owner decision 2026-10-01, #2144). |\n| <a id=\"param-finality_committee_premium_weight_ppm\"></a>`finality_committee_premium_weight_ppm` | 1_100_000 ppm | [§9](#9-emission--supply) |  | Finality-committee validator reward weight inside the validator 10% pool. |\n\n**Developer Subsidy (separate from block reward)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-subsidy_per_block_per_recipient\"></a>`subsidy_per_block_per_recipient` | 8 FLOP | [§9](#9-emission--supply) | D-0436 | ERA-0 per-block subsidy to EACH of FLOP Labs and FLOP Foundation (16 FLOP/block combined; yellowpaper §9), on top of the 96 FLOP block reward. |\n| <a id=\"param-subsidy_duration_blocks\"></a>`subsidy_duration_blocks` | 315_360_000 blocks | [§9](#9-emission--supply) | D-0436 | Exclusive subsidy sunset block (~3650 days = 10 years = 5 × halving_interval_blocks), at and after which (`now >= SubsidyEndBlock`) `on_initialize` mints 0. |\n\n**Staking & Delegation**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-min_miner_self_stake\"></a>`min_miner_self_stake` | 10_000 FLOP | [§6.1](#61-primitives) |  | Minimum self-stake to register as a miner (anti-Sybil). |\n| <a id=\"param-miner_commission_cap_percent\"></a>`miner_commission_cap_percent` | 20 percent | [§6.1](#61-primitives) | D-0530 | [DEPRECATED — D-0530] Legacy maximum commission a miner could charge delegators (20%; yellowpaper §6.1). |\n| <a id=\"param-miner_unbonding_blocks\"></a>`miner_unbonding_blocks` | 604_800 blocks | [§6.1](#61-primitives) |  | Miner unbonding period (~7 days at 1s/block). |\n| <a id=\"param-miner_capacity_stake_per_gflop\"></a>`miner_capacity_stake_per_gflop` | VFY / 100 (= 0.01 FLOP per GFLOP/s) | [§6.1](#61-primitives) | D-0418 | Capacity-proportional miner self-stake = min_miner_self_stake + B_p * this (LINEAR, NO CAP — a cap would make the largest miners' fraud +EV; D-0418, ENG-8). 0.01 FLOP per GFLOP/s of CALIBRATED B_p (VFY/100, where VFY = 1 FLOP). |\n| <a id=\"param-miner_stake_revocation_latency_blocks\"></a>`miner_stake_revocation_latency_blocks` | 604_800 blocks | [§6.1](#61-primitives) |  | Revocation/dispute latency window used in miner stake exposure: required self-stake covers cap × this window × stake_rate. |\n| <a id=\"param-miner_stake_surge_multiplier_ppm\"></a>`miner_stake_surge_multiplier_ppm` | 1_250_000 ppm | [§6.1](#61-primitives) |  | Provisional burst-cap stake multiplier. 1_250_000 ppm = 1.25x exposure stake while a cap is still burst/audit-ratcheted. |\n| <a id=\"param-calibration_min_verified_jobs\"></a>`calibration_min_verified_jobs` | 64 jobs | [§7.1](#71-entry--benchmark-burst) | D-0433 | D-0433 minimum independently verified jobs in the quick serving-entry burst. |\n| <a id=\"param-calibration_min_burst_blocks\"></a>`calibration_min_burst_blocks` | 600 blocks | [§7.1](#71-entry--benchmark-burst) | D-0433 | D-0433 minimum chain-timed serving-entry burst (10 minutes at 1s blocks). yellowpaper §7.1. |\n| <a id=\"param-calibration_min_utilization_ppm\"></a>`calibration_min_utilization_ppm` | 500_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | Sustained utilization threshold for burst acceptance. |\n| <a id=\"param-calibration_provisional_discount_ppm\"></a>`calibration_provisional_discount_ppm` | 900_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | HARD-tier provisional discount applied to attested SKU ceilings before min(empirical_burst_cap, discounted_sku_ceiling). yellowpaper §7.1. |\n| <a id=\"param-calibration_lease_blocks\"></a>`calibration_lease_blocks` | 604_800 blocks | [§7.2](#72-renewable-cap) | D-0433 | D-0433 renewable calibration-cap lease (7 days at 1s blocks). |\n| <a id=\"param-calibration_renewal_min_verified_jobs\"></a>`calibration_renewal_min_verified_jobs` | 8 jobs | [§7.2](#72-renewable-cap) | D-0433 | D-0433 minimum fresh one-shot Ghost canaries for quick restart/offline/periodic cap renewal. |\n| <a id=\"param-calibration_renewal_max_age_blocks\"></a>`calibration_renewal_max_age_blocks` | 600 blocks | [§7.2](#72-renewable-cap) |  | Maximum miner-triggered renewal window (10 minutes at 1s blocks). |\n| <a id=\"param-calibration_min_recalibration_interval_blocks\"></a>`calibration_min_recalibration_interval_blocks` | 600 blocks | [§7.1](#71-entry--benchmark-burst) |  | Minimum interval between accepted initial calibrations (10 minutes at 1s blocks), preventing rapid cap replacement and strategic retry loops. |\n| <a id=\"param-calibration_max_gpu_inventory_entries\"></a>`calibration_max_gpu_inventory_entries` | 16 distinct SKUs | [§7.1](#71-entry--benchmark-burst) |  | Maximum distinct attested GPU SKUs on one miner host. |\n| <a id=\"param-miner_capacity_stake_sim_per_10_gflop\"></a>`miner_capacity_stake_sim_per_10_gflop` | 0.1 FLOP per 10 GFLOP/s | [§6.1](#61-primitives) | D-0418 | Simulator mirror of miner_capacity_stake_per_gflop (D-0418). |\n\n**Compute-channel timing bounds**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-timing_max_clock_skew_ms\"></a>`timing_max_clock_skew_ms` | 250 ms | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Maximum clock skew (in ms) tolerated between miner and agent wall clocks when classifying timing as Eligible vs Ambiguous. |\n| <a id=\"param-timing_network_pad_ms\"></a>`timing_network_pad_ms` | 100 ms | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Network round-trip padding (in ms) added to the clock-skew allowance when evaluating receipt timing. |\n\n**Sessions / capacity reservations (A1 anti-spam)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-max_active_reservations_base\"></a>`max_active_reservations_base` | 4 count | [§12.2](#122-per-identity-capacity-reservation) |  | Base number of concurrent active capacity reservations per agent identity. |\n| <a id=\"param-escrow_per_reservation_slot\"></a>`escrow_per_reservation_slot` | 50 FLOP | [§12.2](#122-per-identity-capacity-reservation) |  | Escrow (in FLOP) that grants +1 additional active reservation slot beyond base. |\n| <a id=\"param-min_certificate_premium_ppm\"></a>`min_certificate_premium_ppm` | 1_500_000 ppm | [§12.2](#122-per-identity-capacity-reservation) |  | Minimum price multiple (1_500_000 = 1.5x) over the model's per-GFLOP rate for certificate-backed premium settlement (#535). certificate_settle requires escrow >= price_per_gflop * aggregate_gn * multiple, so premium-class proven work cannot pay standard-rate escrow. |\n| <a id=\"param-sampled_audit_alpha_ppm\"></a>`sampled_audit_alpha_ppm` | 50_000 ppm | [§3.5](#35-tier-3--independent-optimistic-re-execution--slashing) |  | Default α for sampled-audit certificate mode (#628 / certificate format section 9.5; yellowpaper §3.5). 50_000 = 5% of turns selected post-epoch via VRF beacon; 1_000_000 = full audit. |\n| <a id=\"param-sampled_audit_checkpoint_turns\"></a>`sampled_audit_checkpoint_turns` | 16 turns | [§3.5](#35-tier-3--independent-optimistic-re-execution--slashing) |  | KV-checkpoint interval C for sampled-audit replay (#628). |\n| <a id=\"param-audit_quantum_gn\"></a>`audit_quantum_gn` | 100_000_000 G_n | [§12.2](#122-per-identity-capacity-reservation) |  | #764 blast-radius control: the session-host / checker forces at least one audit ticket every this many G_n of served work (value quantum Q). |\n| <a id=\"param-high_value_gn_threshold\"></a>`high_value_gn_threshold` | 10_000_000 G_n | [§12.2](#122-per-identity-capacity-reservation) |  | #764 asymmetry: any single turn with G_n ≥ this is force-audited (effective α=1 for its leaf), so a sparse high-G_n turn cannot ride Bernoulli-α. MUST stay ≤ audit_quantum_gn so no unaudited turn alone fills a quantum (TRIZ P4 Asymmetry). |\n\n**Finality-stall safe mode (compute-channel)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-finality_lag_warn\"></a>`finality_lag_warn` | 30 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag above which the detector reports Lagging (alert only; finality-clocked deadlines pause naturally). |\n| <a id=\"param-finality_freeze_threshold\"></a>`finality_freeze_threshold` | 120 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag at/above which the channel enters Stalled: new finality-dependent opens are rejected fail-closed (ensure_finality_open_allowed); additive top-up/cancel paths stay open. |\n| <a id=\"param-max_finality_stall\"></a>`max_finality_stall` | 3_600 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag at/above which the chain is EscapeEligible (safe mode): restore AlephBFT finality or ratify a checkpoint recovery through the hard-fork runbook. ~1h at 1s blocks. |\n| <a id=\"param-htlc_timelock_symmetry_safety_margin_percent\"></a>`htlc_timelock_symmetry_safety_margin_percent` | 20 percent | [§10.1](#101-requirements) |  | Minimum foreign-chain HTLC safety margin as a percentage of the foreign duration, after converting it to one-second FLOP blocks. |\n| <a id=\"param-htlc_burn_share_ppt\"></a>`htlc_burn_share_ppt` | 0 ppt | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Share of a finalized post-timeout HTLC resolution burned before payout. |\n| <a id=\"param-btc_block_time_flop_blocks\"></a>`btc_block_time_flop_blocks` | 600 blocks | [§10.1](#101-requirements) |  | Average Bitcoin block interval expressed in one-second FLOP blocks. |\n\n**PoUI simulator-mode safety flag (#297 CRIT-02 / RT-C02)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-poui_allow_simulator_mode\"></a>`poui_allow_simulator_mode` | cfg!(feature = \"volta\") flag |  |  | #297: AllowSimulatorMode gates the TEE-free simulator credit path; derived from the `volta` devnet feature so production runtimes fail closed. |\n| <a id=\"param-paid_storage_enabled\"></a>`paid_storage_enabled` | cfg!(feature = \"paid-storage-unratified\") flag | [§5.4](#54-agent-memory-and-paid-data-storage) |  | Build-time gate for the unratified paid agent-storage pallet (yellowpaper §5.4, R5.4k). |\n\n**D-0528 sponsor-owned registration bonds (devnet/testnet only)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-sponsored_self_stake_enabled\"></a>`sponsored_self_stake_enabled` | cfg!(feature = \"sponsored-self-stake\") flag |  | D-0528 | D-0528: active sponsored principal counts toward the miner capacity bond and the validator effective minimum, and sponsors may post an operator's whole registration bond (sponsor_register_miner / sponsor_register_validator). |\n\n**PoUI submission rate limit**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-poui_submission_window_blocks\"></a>`poui_submission_window_blocks` | 86_400 blocks | [§1.2](#12-protocol-clocks--canonical-table) |  | Block-aligned PoUI submission rate-limit window (1 day at 1 s blocks). |\n| <a id=\"param-poui_max_submissions_epoch\"></a>`poui_max_submissions_epoch` | 10 count | [§1.2](#12-protocol-clocks--canonical-table) |  | Maximum submissions per miner during each block-aligned poui_submission_window_blocks window. |\n\n**F2 supply-side governor (default OFF; governance-settable)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-governor_default_enabled\"></a>`governor_default_enabled` | false bool | [§9](#9-emission--supply) |  | Master default for both governor dampers — OFF at genesis (insurance, governance-armed). |\n| <a id=\"param-governor_emission_damping_util_floor\"></a>`governor_emission_damping_util_floor` | 0.3 fraction | [§9](#9-emission--supply) |  | Utilization below which the retention reward-boost engages (utilization-indexed, never price-indexed — anti-Terra). |\n| <a id=\"param-governor_emission_damping_max_boost\"></a>`governor_emission_damping_max_boost` | 1.5 multiplier | [§9](#9-emission--supply) |  | Hard cap on the miner-reward multiplier when the governor is armed (+50% max). |\n| <a id=\"param-governor_dynamic_burn_tier1\"></a>`governor_dynamic_burn_tier1` | 0.1 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 0–1 (era_max 1) when dynamic burn is armed. |\n| <a id=\"param-governor_dynamic_burn_tier2\"></a>`governor_dynamic_burn_tier2` | 0.15 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 2–3 (era_max 3) when dynamic burn is armed. |\n| <a id=\"param-governor_dynamic_burn_tier3\"></a>`governor_dynamic_burn_tier3` | 0.25 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 4+ (era_max 99 sentinel) when dynamic burn is armed. |\n\n**Governance**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-governance_root_track_approval\"></a>`governance_root_track_approval` | 67 percent | [§14.2](#142-fip-binding) | D-015 | Flat approval threshold (Byzantine 2/3) for the root / protocol-upgrade governance curve, encoded as APP_ROOT and used by the production protocol_upgrade track (GOV-A, yellowpaper §14.2). |\n| <a id=\"param-protocol_upgrade_support_floor\"></a>`protocol_upgrade_support_floor` | 15 percent | [§14.2](#142-fip-binding) | D-0415 | Turnout-floor (min_support) for the production protocol_upgrade (Root) track — 50% ceiling decaying to a 15% floor (the quorum SPEC-024 lacked). |\n\n**Consensus / finality committee**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-babe_primary_probability_denominator\"></a>`babe_primary_probability_denominator` | 50 ratio-denominator | [§15.4](#154-selection--the-poui-gated-committee) |  | BABE primary-slot probability c = 1/N, where a validator's per-slot win chance is p = 1 - (1 - c)^theta (theta = stake fraction). |\n| <a id=\"param-aleph_max_data_branch_len\"></a>`aleph_max_data_branch_len` | 30 blocks | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum blocks in one AlephBFT-ordered chain proposal — the finality throughput ceiling (finality rate ~= this / ordering latency; measured 1.66 blocks/s at the previous value of 7, implying ~4.2 s to order a proposal). |\n| <a id=\"param-aleph_max_round\"></a>`aleph_max_round` | 65_535 round | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum AlephBFT round accepted in one session. |\n| <a id=\"param-aleph_gossip_protocol_version\"></a>`aleph_gossip_protocol_version` | 5 version | [§15.4](#154-selection--the-poui-gated-committee) |  | Notification-protocol version for AlephBFT unit gossip (/flop/aleph/N). |\n| <a id=\"param-finality_committee_size\"></a>`finality_committee_size` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) | D-0437 | AlephBFT finalizing committee size: randomly sampled stake-weighted without replacement from the PoUI-gated active set off a BABE-VRF seed (#448/#848). |\n| <a id=\"param-validator_attestation_threshold\"></a>`validator_attestation_threshold` | 666_666_666 perbill-parts | [§3.6](#36-tier-4--on-chain-settlement-zk-aggregation--validator-bft-quorum) | D-0414 | BFT attestation quorum (Perbill parts 666_666_666 = 2/3), root-governable; gates the direct PoUI proof path + Ghost Tasks. yellowpaper §3.6/§13.3. |\n| <a id=\"param-attest_max_verifier_set_members\"></a>`attest_max_verifier_set_members` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum governed verifier keys stored for one attestation profile. |\n| <a id=\"param-attest_max_claim_signatures\"></a>`attest_max_claim_signatures` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum signatures accepted by the `pallet_attest` shared-claim rail; matches that rail's 100-member governed verifier-set bound and does not cap `pallet_flop_poui` `submit_validator_attestations` bundles, which are bounded by dispatch weight and block length. |\n| <a id=\"param-poui_tee_v1_profile_id\"></a>`poui_tee_v1_profile_id` | H256([4u8; 32]) profile-id | [§15.4](#154-selection--the-poui-gated-committee) |  | Governed shared-attestation profile id for PoUI TEE v1 claims. |\n| <a id=\"param-poui_tee_v1_profile_version\"></a>`poui_tee_v1_profile_version` | 1 profile-version | [§15.4](#154-selection--the-poui-gated-committee) |  | Initial profile version for PoUI TEE v1 claims. |\n\n**Validator security policy**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-validator_rotation_interval_blocks\"></a>`validator_rotation_interval_blocks` | 2_592_000 blocks | [§15.5](#155-rotation--set-size) | D-0416 | Validator-set rotation cadence (~30 d at 1s); automatic on_initialize + manual rotate. yellowpaper §15.5. |\n| <a id=\"param-validators_to_eject\"></a>`validators_to_eject` | 50 count | [§15.5](#155-rotation--set-size) |  | Requested maximum per rotation; live ejections also require scored evidence (a blacklisted seat needs none and goes first) and respect the churn percentage and minimum active set. |\n| <a id=\"param-validators_to_promote\"></a>`validators_to_promote` | 50 count | [§15.5](#155-rotation--set-size) |  | Per-rotation promote count from the queue (stake >= current minimum). yellowpaper §15.5. |\n| <a id=\"param-validator_active_set_cap\"></a>`validator_active_set_cap` | 1_000 count | [§9.3](#93-genesis-configuration) | D-0437 | Maximum active validators in ActiveValidators (admitted by rotation promotion from ValidatorQueue or direct un_jail/rejoin restoration). yellowpaper §9.3 R9.9, §15.5. |\n| <a id=\"param-validator_min_active_validators\"></a>`validator_min_active_validators` | 4 count | [§15.5](#155-rotation--set-size) |  | Minimum active set preserved by rotation and every removal path. |\n| <a id=\"param-validator_rotation_churn_percent\"></a>`validator_rotation_churn_percent` | 10 percent | [§15.5](#155-rotation--set-size) |  | Maximum share of the current active set ejected in one rotation, rounded up to a whole validator. |\n| <a id=\"param-validator_min_scored_samples\"></a>`validator_min_scored_samples` | 3 count | [§15.5](#155-rotation--set-size) |  | Performance-score updates required within one rotation interval before a validator may be ejected. |\n| <a id=\"param-ejection_cooldown_blocks\"></a>`ejection_cooldown_blocks` | 604_800 blocks | [§15.5](#155-rotation--set-size) |  | Cooldown (~7 d) before a rotation-ejected validator (whose self-stake freeze was thawed on ejection) may re-register into ValidatorQueue at effective_minimum_stake; configured in Config, enforcement in register pending. |\n| <a id=\"param-validator_unbonding_blocks\"></a>`validator_unbonding_blocks` | 1_814_400 blocks | [§13](#13-failure-semantics--actor--failure-matrix) | D-0419 | Validator stake unbonding lockup (~21 d); bounds withdraw-after-misbehavior. yellowpaper §13. |\n| <a id=\"param-validator_extended_downtime_slash_percent\"></a>`validator_extended_downtime_slash_percent` | 5 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Slash fraction for extended validator downtime (followed by removal). yellowpaper §13.2. |\n| <a id=\"param-validator_growth_numerator\"></a>`validator_growth_numerator` | 109 ratio | [§15.2](#152-onboarding-normative) | D-0413 | Numerator of the annual compounding factor on the validator minimum-stake floor (109/100 = +9%/yr). yellowpaper §15.2. |\n| <a id=\"param-validator_growth_denominator\"></a>`validator_growth_denominator` | 100 ratio | [§15.2](#152-onboarding-normative) | D-0413 | Denominator paired with validator_growth_numerator (109/100 = +9%/yr). yellowpaper §15.2. |\n\n**Metering tripwire**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-throughput_tripwire_gflops_per_sec\"></a>`throughput_tripwire_gflops_per_sec` | 2_000_000 G_n/s | [§4.2](#42-the-op-count-model) | D-0405 | Reject (never clamp) any claim whose implied gn*1000/latency_ms exceeds this; reject-only, governable, default-on. yellowpaper §4.2. |\n| <a id=\"param-soft_tier_spot_check_rate_ppm\"></a>`soft_tier_spot_check_rate_ppm` | 25_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | SOFT-tier channel spot-check exposure surfaced with the calibration snapshot event for quality-audit pricing. yellowpaper §7.1. |\n\n**Compute-channel settlement**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-refund_penalty_phi_percent\"></a>`refund_penalty_phi_percent` | 20 percent | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0422 | Static D-0422 penalty fraction phi on unused escrow for ambiguous early close; penalty routes 100% to FLOPFoundationAccount with zero burn (R9.10), never miner. |\n| <a id=\"param-channel_max_settlement_turns\"></a>`channel_max_settlement_turns` | 1_024 count | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Hard cap on VerifiedTurns per settle/force_settle bundle, and the ceiling on an SLA's max_turns at open. |\n| <a id=\"param-channel_max_session_activation_bytes\"></a>`channel_max_session_activation_bytes` | 65_536 bytes | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Per-activation DA allocation cap for a funded Open session. |\n| <a id=\"param-channel_max_merkle_path_len\"></a>`channel_max_merkle_path_len` | 64 count | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Max Merkle authentication-path length per VerifiedTurn (proves membership in a tree of up to 2^64 leaves). |\n| <a id=\"param-channel_base_per_turn\"></a>`channel_base_per_turn` | 1 base unit (10^-18 FLOP) | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Per-turn flat fee of the two-part tariff (#719 option A): turn_pay = BasePerTurn + G_n (rate=1 in channel pay units). |\n| <a id=\"param-channel_c_turn_fixed\"></a>`channel_c_turn_fixed` | 1 base unit (10^-18 FLOP) | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Fixed per-turn cost floor that BasePerTurn must cover (#719). integrity_test asserts BasePerTurn ≥ CTurnFixed so dust turns are not net-negative for miner/network. |\n| <a id=\"param-channel_dispute_window_blocks\"></a>`channel_dispute_window_blocks` | 604_800 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | Session dispute/challenge window (7 d); integrity_test enforces <= DaEphemeralRetention (14 d). yellowpaper §12.1. |\n| <a id=\"param-channel_dispute_response_window_blocks\"></a>`channel_dispute_response_window_blocks` | 7_200 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | Time to respond to an open dispute (2 h); non-response defaults to a fraud verdict. yellowpaper §12.1. |\n| <a id=\"param-channel_toploc_escalation_window_blocks\"></a>`channel_toploc_escalation_window_blocks` | 7_200 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0431 | #754: validators' window (2 h) to resolve a middle-band TOPLOC escalation (stronger report → slash, or quorum clear) before it times out inconclusive (full agent refund, no miner pay, no slash). |\n| <a id=\"param-channel_challenger_bond\"></a>`channel_challenger_bond` | 100 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Bond a challenger posts to open a session dispute (anti-griefing). yellowpaper §12.1. |\n| <a id=\"param-slash_fraud_percent\"></a>`slash_fraud_percent` | 100 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0529 | Full-slash fault class (100% routed to FLOPFoundationAccount, zero burn per D-0529): Collusion / EvidenceForgery / TEE-attestation failure / correlated equivocation / double-spend → 100% slash + eject + blacklist. yellowpaper §13.2. |\n| <a id=\"param-channel_audit_forfeit_slash_ppm\"></a>`channel_audit_forfeit_slash_ppm` | 1_000_000 ppm | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #844 publish-or-forfeit: audit-data liveness-forfeit slash floor, in ppm of the withheld settlement window's value. |\n| <a id=\"param-inference_fee_miner_share_ppt\"></a>`inference_fee_miner_share_ppt` | 850 parts-per-thousand | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0525 | #2702 (D-0525): Executive ruling (Shu, 2026-10-14). |\n| <a id=\"param-inference_fee_validator_share_ppt\"></a>`inference_fee_validator_share_ppt` | 150 parts-per-thousand | [§9](#9-emission--supply) | D-0525 | #2702 (D-0525): Executive ruling (Shu, 2026-10-14). |\n| <a id=\"param-audit_fee_split_ppm\"></a>`audit_fee_split_ppm` | 10_000 ppm | [§9](#9-emission--supply) | D-0403 | #846, #2702 (D-0525): ratified 1% (10_000 ppm) of the settlement payment funded out of the 15% validator fee leg into the audit pool that pays validators for audit work. |\n| <a id=\"param-audit_fee_per_turn\"></a>`audit_fee_per_turn` | 1 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #846: flat fee a VRF-assigned validator claims per audit verdict from the audit pool (claim_audit_fee), gated on submitted evidence and pool solvency (no unpaid-duty path). 1 FLOP placeholder; governance may recalibrate against measured audit cost. |\n| <a id=\"param-channel_ack_window_blocks\"></a>`channel_ack_window_blocks` | 600 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Window for a named miner to force_ack a permissionless force_open before expire refunds escrow. yellowpaper §12.1, Appendix C.3. |\n| <a id=\"param-min_force_open_escrow_for_failed_ack\"></a>`min_force_open_escrow_for_failed_ack` | 0.05 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0423 | Minimum force_open escrow that makes an expired, unacked request increment the named miner's FailedAcks counter. |\n\n**Derived TOPLOC band (governance-set per model/precision; #685, #705)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-toploc_band_constants_fields\"></a>`toploc_band_constants_fields` | kappa_profile_hash structural |  |  | Per-(model, precision) derived TOPLOC band committed constants consumed by band_verdict / report_toploc_mismatch: kappa_profile_hash, band_tau_accept, band_tau_slash, challenge_k, challenge_window_w. |\n| <a id=\"param-toploc_band_tau_accept_bf16_milli\"></a>`toploc_band_tau_accept_bf16_milli` | 2_900 milli_exponent_error |  |  | Derived bf16 accept threshold τ_accept≈2.9 exponent errors in milli units (×1000). |\n| <a id=\"param-toploc_band_tau_slash_bf16_milli\"></a>`toploc_band_tau_slash_bf16_milli` | 185_600 milli_exponent_error |  |  | Derived bf16 slash threshold τ_slash≈185.6 exponent errors in milli units (×1000). |\n| <a id=\"param-toploc_band_eng29_threshold_milli\"></a>`toploc_band_eng29_threshold_milli` | 38_000 milli_exponent_error |  |  | ENG-29 empirically-deployed exponent-error threshold (38) in milli units. |\n| <a id=\"param-toploc_band_kappa_within_llama31_8b_bf16\"></a>`toploc_band_kappa_within_llama31_8b_bf16` | 4.5 dimensionless |  |  | Fitted/selected within-layer κ for Llama-3.1-8B bf16 (ENG-29). |\n\n**Model registry (decode-policy sets)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-max_decode_policies_per_model\"></a>`max_decode_policies_per_model` | 32 count |  |  | Maximum decode-policy hashes pinnable in a model's optional allowed set (BoundedDecodePolicySet = BoundedVec<H256, ConstU32<MAX_DECODE_POLICIES_PER_MODEL>>). |\n\n**Metering cert tokens-per-byte band (#871)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-tokens_per_byte_band_ppm_llama3\"></a>`tokens_per_byte_band_ppm_llama3` | 500_000 ppm | [§4](#4-effective-flop-metering) |  | Certified upper bound on honest tokens-per-byte for the Llama-3 tokenizer (ppm; 500000 = 0.5 tokens/byte) — the per-(model, tokenizer) model-registry field that caps the metering cert padding constraint (e): prompt_tokens ≤ ⌈len(input_bytes) · band/1e6⌉ and generated_tokens ≤ ⌈(len(output_bytes) + 1) · band/1e6⌉ (#871, spec whitepaper/research/metering-cert-spec.md §4). |\n\n**Metering cert circuit version + guest image-id registry (#929)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-metering_cert_circuit_version\"></a>`metering_cert_circuit_version` | 3 version |  |  | Governance-pinned circuit layout the metering cert proves against (V3 transcript leaf, #929). |\n| <a id=\"param-metering_cert_guest_image_id\"></a>`metering_cert_guest_image_id` | OptionQuery storage-default |  |  | Governance-pinned RISC0 guest image id for the metering cert (safety zone, #945). |\n\n**Transaction fees (live values)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-tx_fee_burn_percent_live\"></a>`tx_fee_burn_percent_live` | 0 percent | [§9.1](#91-requirements) | D-0529 | LIVE burn fraction of the base+length+weight tx fee (0%; D-0529). |\n| <a id=\"param-tx_fee_author_share_percent_live\"></a>`tx_fee_author_share_percent_live` | 100 percent | [§9](#9-emission--supply) | D-0529 | LIVE share of the transaction fee paid to the block author (= 100% of the whole fee under 0% burn, D-0529). |\n| <a id=\"param-tx_weight_to_fee\"></a>`tx_weight_to_fee` | 5_000_000 base units/weight (1 base unit = 10^-18 FLOP) | [§9.1](#91-requirements) |  | WeightToFee ConstantMultiplier; per-weight component of the base fee (effective floor: MinimumMultiplier = 1.0). yellowpaper §9.1. |\n| <a id=\"param-tx_length_to_fee\"></a>`tx_length_to_fee` | 5_000_000 base units/byte (1 base unit = 10^-18 FLOP) | [§9.1](#91-requirements) |  | LengthToFee ConstantMultiplier; per-byte component of the base fee. yellowpaper §9.1. |\n| <a id=\"param-tx_target_block_fullness_percent\"></a>`tx_target_block_fullness_percent` | 75 percent | [§9.1](#91-requirements) |  | Congestion target for the TargetedFeeAdjustment multiplier (raises the fee above the base floor as blocks fill). yellowpaper §9.1. |\n| <a id=\"param-tx_operational_fee_multiplier\"></a>`tx_operational_fee_multiplier` | 5 ratio | [§9.1](#91-requirements) |  | Surcharge multiple applied to operational-class dispatches. pallet_transaction_payment config. |\n\n**Data availability**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-da_ephemeral_retention_blocks\"></a>`da_ephemeral_retention_blocks` | 1_209_600 blocks | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0412 | Retention W (14 d) for Ephemeral DA blobs (quotes/proofs/transcripts/I-O); bounds the session challenge window. yellowpaper §5.3. |\n| <a id=\"param-da_shard_count\"></a>`da_shard_count` | 6 count | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | DA erasure-coding shard count R = 6, Reed-Solomon rate 1/2 (k = 3+3, any 3 reconstruct). yellowpaper §5.3. |\n| <a id=\"param-da_min_replication_factor\"></a>`da_min_replication_factor` | 3 count | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | DA Reed-Solomon reconstruction threshold k = 3 (any k of R shards reconstruct); hard floor for the governable da_shard_count so R < k (unreconstructable) is unreachable. yellowpaper §5.3. |\n| <a id=\"param-da_lease_deposit_per_byte\"></a>`da_lease_deposit_per_byte` | 200 FLOP per 10^9 bytes (= 2e-7 FLOP/byte) | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0412 | D-0412 refundable anti-spam deposit for leased DA (model weights): deposit = bytes × DepositPerByte, held on the publisher (never validator revenue), returned in full on prune/withdrawal. |\n\n**Agent wallet / session keys**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-agent_cap_window_blocks\"></a>`agent_cap_window_blocks` | 86_400 blocks | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Wallet and session daily spend-cap window: resets on the first spend at or after 86,400 blocks from wallet or session creation or the previous reset. |\n| <a id=\"param-agent_identity_min_stake\"></a>`agent_identity_min_stake` | 10 FLOP | [§12.3](#123-market-actor-threat-class) |  | Refundable minimum stake locked to register an agent identity: capital exposure, not an irrecoverable identity cost. yellowpaper §12.3. |\n| <a id=\"param-circuit_breaker_window\"></a>`circuit_breaker_window` | 60 blocks | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Fixed agent session-key circuit-breaker window (60 blocks): either the transaction-count or spend limb trips independently, latches until window end, and then auto-resets. yellowpaper §6.2. |\n| <a id=\"param-circuit_breaker_tx_count\"></a>`circuit_breaker_tx_count` | 100 count | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Agent session-key circuit-breaker transaction-count limb: trips at 100 txs within the window, independently of circuit_breaker_flop_cap. yellowpaper §6.2. |\n| <a id=\"param-circuit_breaker_flop_cap\"></a>`circuit_breaker_flop_cap` | 250 FLOP | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Agent session-key circuit-breaker max spend per window (60 blk / 100 tx / 250 FLOP triple). yellowpaper §6.2. |\n\n**Reference-only** — canonical documented values, single-site or not yet wired for cross-language enforcement (`enforce: false`).\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-validator_min_self_stake_ratio_percent\"></a>`validator_min_self_stake_ratio_percent` | 20 percent | [§15.2](#152-onboarding-normative) |  | Legacy minimum validator self-stake ratio when sponsored backing is enabled (§15.2). |\n| <a id=\"param-validator_work_recency_window_blocks\"></a>`validator_work_recency_window_blocks` | 86_400 blocks | [§15.2](#152-onboarding-normative) |  | Accepted verification-duty recency window for PoUI committee eligibility (§15.2, R15.4c). |\n| <a id=\"param-protocol_upgrade_approval\"></a>`protocol_upgrade_approval` | 67 percent | [§14.2](#142-fip-binding) | GOV-A | Production protocol_upgrade (Root) track approval (flat BFT 2/3); live as APP_ROOT in (enforced above as governance_root_track_approval + protocol_upgrade_support_floor). |\n| <a id=\"param-protocol_upgrade_decision_period\"></a>`protocol_upgrade_decision_period` | 28 days | [§14.2](#142-fip-binding) |  | [RATIFY] deliberation window for the protocol_upgrade track. yellowpaper §14.2. |\n| <a id=\"param-protocol_upgrade_enactment_timelock\"></a>`protocol_upgrade_enactment_timelock` | 1_209_600 blocks | [§14.1](#141-requirements) |  | 14 d at 1s — Scheduler min_enactment_period (upgrade timelock). yellowpaper §14.1. |\n| <a id=\"param-fip_decision_deposit\"></a>`fip_decision_deposit` | RATIFY FLOP | [§14.2](#142-fip-binding) |  | [RATIFY] decision-deposit spam barrier for protocol_upgrade referenda (FLOP-denominated; magnitude TBD). yellowpaper §14.2. |\n| <a id=\"param-emergency_override_timelock\"></a>`emergency_override_timelock` | 259_200 blocks |  | SPEC-015 | 72 h at 1s — pallet_emergency_override break-glass timelock (root-only). |\n| <a id=\"param-emergency_override_cooldown\"></a>`emergency_override_cooldown` | 604_800 blocks |  | SPEC-015 | 7 d at 1s — minimum gap between emergency overrides. |\n| <a id=\"param-governance_vote_locking_period\"></a>`governance_vote_locking_period` | 604_800 blocks |  |  | 7 d conviction VoteLockingPeriod (pallet_conviction_voting, live).. |\n| <a id=\"param-sudo_pallet_index\"></a>`sudo_pallet_index` | 50 index | [§14.1](#141-requirements) | GOV-B | pallet_sudo — bootstrap Root through devnet/testnet; REMOVED/neutered at the mainnet-genesis handoff (GOV-B). yellowpaper §14.1. |\n| <a id=\"param-subsidy_total_per_block\"></a>`subsidy_total_per_block` | 16 FLOP | [§9](#9-emission--supply) | D-0436 | 8 Labs + 8 Foundation in halving era 0 (years 1-2), on top of the 96 FLOP reward (yellowpaper §9); halves with the reward (`era(b) = ⌊b / H⌋`: 16 -> 8 -> 4 -> 2 -> 1 combined) and is exactly 0 from era 5 (`b = 315,360,000`), where the reward floors. |\n| <a id=\"param-emission_at_end_of_era6\"></a>`emission_at_end_of_era6` | 12_109_823_904 FLOP |  | D-0436 | 2·R₀·H − R₀ = 12,109,823,904 (2·R₀·H = 12,109,824,000 before subtracting unrewarded genesis block 0, R9.7), reached at the end of era 6 (block 441,503,999, ~year 14) under max_halvings=5 — one era earlier than the superseded maxHalvings=6 put it (hence the rename from emission_at_end_of_era7). |\n| <a id=\"param-emission_through_halving_eras\"></a>`emission_through_halving_eras` | 11_920_607_904 FLOP |  | D-0436 | R₀·H·63/32 − R₀ = 63,072,000 × (96+48+24+12+6+3) − 96 = 11,920,607,904 (11,920,608,000 before subtracting unrewarded genesis block 0, R9.7) = cumulative emission through the halving phase (end of era 5, block 378,431,999, ~year 12) under max_halvings=5. |\n| <a id=\"param-floor_annual_emission\"></a>`floor_annual_emission` | 94_608_000 FLOP |  | D-0436 | perpetual floor tail: 3 FLOP/block × 31,536,000 blocks/yr (= 189,216,000 FLOP/era). |\n| <a id=\"param-max_delegators_per_miner\"></a>`max_delegators_per_miner` | 10_000 count | [§6.1](#61-primitives) | D-0530 | [DEPRECATED — D-0530] Superseded by operator self-stake-only ruling (§6.1, §15.2); legacy MinerStaking.MaxDelegatorsPerMiner constant retained pending pallet cleanup. |\n| <a id=\"param-agent_daily_cap_autonomous\"></a>`agent_daily_cap_autonomous` | 500 FLOP | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Autonomous-agent scenario daily cap in the simulator; the runtime stores each wallet's chosen daily_cap at create_wallet rather than enforcing a global 500 FLOP constant; yellowpaper §6.2. |\n| <a id=\"param-agent_per_tx_limit\"></a>`agent_per_tx_limit` | 100 FLOP |  |  |  |\n| <a id=\"param-attestation_outage_pause_cap_blocks\"></a>`attestation_outage_pause_cap_blocks` | 14_400 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Designed-not-built 4 h cap on per-channel pauses of attestation-dependent clocks under R13.0e / O1; no runtime or pallet implementation site. yellowpaper §13.0. |\n| <a id=\"param-da_endpoint_deposit\"></a>`da_endpoint_deposit` | VFY (= 1 FLOP) |  |  | Refundable anti-spam deposit held while a validator's DA serving endpoint announcement exists in DaRegistry 1 VFY = 1 FLOP. Held under HoldReason; released in full on clear_endpoint. |\n| <a id=\"param-da_max_endpoint_bytes\"></a>`da_max_endpoint_bytes` | 256 bytes |  |  | Maximum UTF-8 byte length of a validator DA serving endpoint URL stored in DaRegistry (e.g. 'http://host:7000'). |\n| <a id=\"param-validator_stake_value_coupled_floor\"></a>`validator_stake_value_coupled_floor` | dynamic FLOP |  | D-0413 | D-0413 (C5): governance-retargeted value-coupled stake floor k·V_booked (storage ValueCoupledStakeFloor, default 0 = baseline-identical). |\n| <a id=\"param-security_kappa_extractable\"></a>`security_kappa_extractable` | 0.2 dimensionless |  | DEC-5 | ASSUMPTION — NOT a theorem; a governance/DEC-5 risk input. κ = fraction of realized value V_booked a successful AlephBFT safety break extracts; the lever the value-coupled stake floor rests on (k ≥ m·κ/(θ·N·σ·δ), linear in κ — k_threshold_scales_with_kappa). |\n| <a id=\"param-da_deposit_max_step_factor\"></a>`da_deposit_max_step_factor` | 100 ratio |  |  | pallet_da_registry MAX_DEPOSIT_STEP_FACTOR: a single set_deposit_per_byte call may move the deposit ≤100× in either direction (anti-shock; the hard floor is >0). |\n| <a id=\"param-governance_param_max_step_pct\"></a>`governance_param_max_step_pct` | 50 percent |  |  | MAX_STEP_PCT: the FORMAL-MODEL proportional per-enactment bound (100·\\|Δ\\| ≤ pct·\\|old\\|) proven invariant in Model-side rail; the runtime instantiates the same proportional FORM per-param (e.g. da_deposit_max_step_factor) with its own magnitude. |\n| <a id=\"param-da_serve_or_slash_percent\"></a>`da_serve_or_slash_percent` | 1 percent | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | Serve-or-slash Liveness bound: a validator failing a DA audit is slashed ≤1% (bounded, not fraud). yellowpaper §5.3. |\n| <a id=\"param-slash_liveness_percent\"></a>`slash_liveness_percent` | 1 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Liveness fault slash (jail > 300 blk). yellowpaper §13.2. |\n| <a id=\"param-slash_equivocation_lone_percent\"></a>`slash_equivocation_lone_percent` | 50 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0420 | Lone equivocation slash (correlated Eth2-style curve; +50% returned after 180 d, ≥1/3 correlated → 100%). yellowpaper §13.2. |\n| <a id=\"param-session_key_expiry_days\"></a>`session_key_expiry_days` | 10 days | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Target-cadence conversion of the 864,000-block session-key limit (yellowpaper §6.2): approximately 10 d at uninterrupted 1 s blocks, not a wall-clock upper bound; checked against the runtime and blocks_per_day. |\n| <a id=\"param-blackout_revoke_blocks\"></a>`blackout_revoke_blocks` | 86_400 blocks | [§8](#8-performance-locked-vesting) |  | Performance-vesting blackout: capacity < 10% for 86,400 continuous blocks (~1 d) revokes the grant (1.0× slash). yellowpaper §8. |\n| <a id=\"param-performance_score_weights\"></a>`performance_score_weights` | 40/30/20/10 percent | [§15.4](#154-selection--the-poui-gated-committee) |  | Composite validator performance score: 40% uptime + 30% block_rate + 20% accuracy + 10% latency (parts-per-10,000); the rotation-floor input. yellowpaper §15.4/§15.5. |\n\n**Cross-language names (canonical ⇄ Rust ⇄ Lean ⇄ Quint).** The same protocol value carries a different identifier per language by convention; values agree where a language pins the real (non-demo) figure. Enforced rows are value-gated against the Rust site by `check_params.py`.\n\n| Parameter | Rust (runtime) | Lean (lean-proofs) | Quint (formal-specs) |\n|-----------|----------------|--------------------------|----------------------|\n| [`genesis_supply`](#param-genesis_supply) | `FLOP_TOTAL_SUPPLY` | `HalvingBoundary.genesisSupply` | `GENESIS_MICRO` |\n| [`validator_min_stake`](#param-validator_min_stake) | `ValidatorInitialMinimumStake` | — | — |\n| [`initial_block_reward`](#param-initial_block_reward) | `RewardInitialPerBlock` | `Emission.initialReward` | `P_EMISSION_CAP` |\n| [`max_halvings`](#param-max_halvings) | `RewardMaxHalvings` | `Emission.maxHalvings` | `MAX_HALVINGS` |\n| [`floor_reward`](#param-floor_reward) | — | `Emission.floorReward` | `FLOOR_MICRO` |\n| [`miner_share_ppt`](#param-miner_share_ppt) | `MINER_SHARE_PPT` | `SettlementInt.BlockRewards.minerPpt` | — |\n| [`validator_share_ppt`](#param-validator_share_ppt) | `VALIDATOR_SHARE_PPT` | `SettlementInt.BlockRewards.validatorPpt` | — |\n| [`agent_share_ppt`](#param-agent_share_ppt) | `AGENT_SHARE_PPT` | `SettlementInt.BlockRewards.agentPpt` | — |\n| [`staker_share_ppt`](#param-staker_share_ppt) | `STAKER_SHARE_PPT` | `SettlementInt.BlockRewards.stakerPpt` | — |\n| [`reward_distribution_period_blocks`](#param-reward_distribution_period_blocks) | `RewardDistributionPeriodBlocks` | — | `PERIOD_BLOCKS` |\n| [`gn_decay_factor_ppb`](#param-gn_decay_factor_ppb) | `DEFAULT_GN_DECAY_FACTOR_PPB` | — | `DEFAULT_DECAY_PPB` |\n| [`finality_committee_premium_weight_ppm`](#param-finality_committee_premium_weight_ppm) | `FINALITY_COMMITTEE_PREMIUM_WEIGHT_PPM` | — | — |\n| [`poui_submission_window_blocks`](#param-poui_submission_window_blocks) | `PouiEpochDurationBlocks` | — | — |\n| [`poui_max_submissions_epoch`](#param-poui_max_submissions_epoch) | `PouiMaxSubmissionsPerEpoch` | — | — |\n| [`governance_root_track_approval`](#param-governance_root_track_approval) | `APP_ROOT` | — | `P_APPROVAL_FLOOR` |\n| [`babe_primary_probability_denominator`](#param-babe_primary_probability_denominator) | `PRIMARY_PROBABILITY` | — | — |\n| [`aleph_max_data_branch_len`](#param-aleph_max_data_branch_len) | `MAX_DATA_BRANCH_LEN` | — | — |\n| [`aleph_max_round`](#param-aleph_max_round) | `MAX_ROUND` | — | — |\n| [`finality_committee_size`](#param-finality_committee_size) | `AlephMaxCommittee` | — | — |\n| [`validator_attestation_threshold`](#param-validator_attestation_threshold) | `PouiDefaultValidatorAttestationThreshold` | — | — |\n| [`attest_max_verifier_set_members`](#param-attest_max_verifier_set_members) | `AttestMaxVerifierSetMembers` | — | — |\n| [`attest_max_claim_signatures`](#param-attest_max_claim_signatures) | `AttestMaxClaimSignatures` | — | — |\n| [`poui_tee_v1_profile_id`](#param-poui_tee_v1_profile_id) | `POUI_TEE_V1_PROFILE_ID` | — | — |\n| [`poui_tee_v1_profile_version`](#param-poui_tee_v1_profile_version) | `PouiTeeV1Profile` | — | — |\n| [`validator_rotation_interval_blocks`](#param-validator_rotation_interval_blocks) | `RotationIntervalBlocks` | — | — |\n| [`validators_to_eject`](#param-validators_to_eject) | `ValidatorsToEject` | — | — |\n| [`validators_to_promote`](#param-validators_to_promote) | `ValidatorsToPromote` | — | — |\n| [`validator_active_set_cap`](#param-validator_active_set_cap) | `ValidatorActiveSetCap` | — | — |\n| [`validator_min_active_validators`](#param-validator_min_active_validators) | `ValidatorMinActiveValidators` | — | — |\n| [`validator_rotation_churn_percent`](#param-validator_rotation_churn_percent) | `ValidatorRotationChurnPercent` | — | — |\n| [`validator_min_scored_samples`](#param-validator_min_scored_samples) | `ValidatorMinScoredSamples` | — | — |\n| [`ejection_cooldown_blocks`](#param-ejection_cooldown_blocks) | `EjectionCooldownBlocks` | — | — |\n| [`validator_unbonding_blocks`](#param-validator_unbonding_blocks) | `ValidatorUnbondingPeriodBlocks` | — | — |\n| [`validator_extended_downtime_slash_percent`](#param-validator_extended_downtime_slash_percent) | `ValidatorExtendedDowntimeSlash` | — | — |\n| [`validator_growth_numerator`](#param-validator_growth_numerator) | `ValidatorGrowthNumerator` | — | — |\n| [`validator_growth_denominator`](#param-validator_growth_denominator) | `ValidatorGrowthDenominator` | — | — |\n| [`throughput_tripwire_gflops_per_sec`](#param-throughput_tripwire_gflops_per_sec) | `PouiGnThroughputCeilingGflopsPerSec` | — | — |\n| [`refund_penalty_phi_percent`](#param-refund_penalty_phi_percent) | `ChannelRefundPenalty` | — | — |\n| [`channel_max_settlement_turns`](#param-channel_max_settlement_turns) | `ChannelMaxSettlementTurns` | — | — |\n| [`channel_max_session_activation_bytes`](#param-channel_max_session_activation_bytes) | `ChannelMaxSessionActivationBytes` | — | — |\n| [`channel_max_merkle_path_len`](#param-channel_max_merkle_path_len) | `ChannelMaxMerklePathLen` | — | — |\n| [`channel_base_per_turn`](#param-channel_base_per_turn) | `ChannelBasePerTurn` | — | — |\n| [`channel_c_turn_fixed`](#param-channel_c_turn_fixed) | `ChannelCTurnFixed` | — | — |\n| [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) | `ChannelDisputeWindow` | — | — |\n| [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks) | `ChannelDisputeResponseWindow` | — | — |\n| [`channel_toploc_escalation_window_blocks`](#param-channel_toploc_escalation_window_blocks) | `ChannelToplocEscalationWindow` | — | — |\n| [`channel_challenger_bond`](#param-channel_challenger_bond) | `ChannelChallengerBond` | — | — |\n| [`channel_audit_forfeit_slash_ppm`](#param-channel_audit_forfeit_slash_ppm) | `ChannelAuditForfeitSlashPpm` | — | — |\n| [`inference_fee_miner_share_ppt`](#param-inference_fee_miner_share_ppt) | `INFERENCE_FEE_MINER_SHARE_PPT` | — | — |\n| [`inference_fee_validator_share_ppt`](#param-inference_fee_validator_share_ppt) | `INFERENCE_FEE_VALIDATOR_SHARE_PPT` | — | — |\n| [`audit_fee_split_ppm`](#param-audit_fee_split_ppm) | `ChannelAuditFeeSplitPpm` | — | — |\n| [`audit_fee_per_turn`](#param-audit_fee_per_turn) | `ChannelAuditFeePerTurn` | — | — |\n| [`channel_ack_window_blocks`](#param-channel_ack_window_blocks) | `ChannelAckWindow` | — | — |\n| [`min_force_open_escrow_for_failed_ack`](#param-min_force_open_escrow_for_failed_ack) | `MinForceOpenEscrowForFailedAck` | — | — |\n| [`toploc_band_tau_accept_bf16_milli`](#param-toploc_band_tau_accept_bf16_milli) | — | `ToplocBandInt.tauAcceptBf16` | — |\n| [`toploc_band_tau_slash_bf16_milli`](#param-toploc_band_tau_slash_bf16_milli) | — | `ToplocBandInt.tauSlashBf16` | — |\n| [`toploc_band_eng29_threshold_milli`](#param-toploc_band_eng29_threshold_milli) | — | `ToplocBandInt.eng29Threshold` | — |\n| [`max_decode_policies_per_model`](#param-max_decode_policies_per_model) | `MAX_DECODE_POLICIES_PER_MODEL` | — | — |\n| [`tokens_per_byte_band_ppm_llama3`](#param-tokens_per_byte_band_ppm_llama3) | — | `MeteringCertInt.tokensPerByteBandPpmLlama3` | — |\n| [`tx_fee_burn_percent_live`](#param-tx_fee_burn_percent_live) | `BurnFees` | — | — |\n| [`tx_fee_author_share_percent_live`](#param-tx_fee_author_share_percent_live) | `AllFeesToAuthor` | — | — |\n| [`tx_weight_to_fee`](#param-tx_weight_to_fee) | `TransactionPicosecondFee` | — | — |\n| [`tx_length_to_fee`](#param-tx_length_to_fee) | `TransactionByteFee` | — | — |\n| [`tx_target_block_fullness_percent`](#param-tx_target_block_fullness_percent) | `TargetBlockFullness` | — | — |\n| [`tx_operational_fee_multiplier`](#param-tx_operational_fee_multiplier) | `OperationalFeeMultiplier` | — | — |\n| [`da_ephemeral_retention_blocks`](#param-da_ephemeral_retention_blocks) | `DaEphemeralRetention` | — | — |\n| [`da_shard_count`](#param-da_shard_count) | `DaReplicationFactor` | — | — |\n| [`da_min_replication_factor`](#param-da_min_replication_factor) | `MIN_REPLICATION_FACTOR` | `k` | — |\n| [`da_lease_deposit_per_byte`](#param-da_lease_deposit_per_byte) | `DaDepositPerByte` | — | — |\n| [`agent_cap_window_blocks`](#param-agent_cap_window_blocks) | `AgentEpochLength` | — | — |\n| [`agent_identity_min_stake`](#param-agent_identity_min_stake) | `AgentIdentityMinStake` | — | — |\n| [`circuit_breaker_window`](#param-circuit_breaker_window) | `SessionKeysCircuitBreakerPeriod` | — | — |\n| [`circuit_breaker_tx_count`](#param-circuit_breaker_tx_count) | `SessionKeysCircuitBreakerMaxTxs` | — | — |\n| [`circuit_breaker_flop_cap`](#param-circuit_breaker_flop_cap) | `SessionKeysCircuitBreakerMaxSpend` | — | — |\n| [`validator_min_self_stake_ratio_percent`](#param-validator_min_self_stake_ratio_percent) | `ValidatorMinSelfStakeRatio` | — | — |\n| [`validator_work_recency_window_blocks`](#param-validator_work_recency_window_blocks) | `ValidatorWorkRecencyWindow` | — | — |\n\n<!-- END GENERATED: param-table -->\n\n**Derived quantities & narrative constants** — structural values, formulas, and mechanism constants that are\n*not* part of the machine-checked numeric contract above (so they live here, not in the params file):\n\n| Parameter | Value | § | D-id |\n|-----------|-------|---|------|\n| Block interval / runtime length envelope | 1 s / 5 MiB maximum, 75% Normal; no measured capacity profile | [2.1](#21-requirements) / [5.2](#52-block--transaction-sizing) | D-0401, D-0502 |\n| Finality / BFT tolerance | deterministic once ordered; no latency target / strictly < ⅓ Byzantine committee seats | [2.1](#21-requirements) | D-0401, D-0501, D-0502 |\n| Committee selection | PoUI-gated: stake + recent accepted verification duty (`hp-consensus::select_committee`; R15.4c) | [2.1](#21-requirements) / [2.3](#23-safety--the-three-sub-proofs) / [15.4](#154-selection--the-poui-gated-committee) | D-0401, D-0439 |\n| Consensus engine | BABE block authoring + stake-BFT-DAG **AlephBFT finality**; `pallet_aleph` runtime **index 104** reports `LastFinalized` to `AlephFinalizedPrefix` | [2](#2-consensus) | D-0401 |\n| Miner/checker Sybil cost / identity | ≥10k FLOP base + capacity deposit + attested inventory + active renewable cap | [2.4](#24-sybil-model--miner-and-checker-identities) | D-0418, D-0433 |\n| Validator slashing | Liveness 1 % (jail > 300 blk) / extended-downtime 5 % (kick > 24 h); **Equivocation correlated** — lone 50 % (+50 % returned after 180 d) → ≥⅓ correlated 100 %; Collusion / EvidenceForgery / TEE / DoubleSpend 100 % + eject + blacklist | [11](#11-security-invariants) / [13.2](#132-validator-consensus--da--leader-duties) | D-0409, D-0420 |\n| Unbonding slash-lock | no unbond completion while a session/dispute/audit is open; unlock cooldown ≥ dispute window + resolution (miner `[LIVE]`; validator freeze and margin composition E.57) | [6.1](#61-primitives) / [13](#13-failure-semantics--actor--failure-matrix) | D-0419 |\n| Validator rotation | [`RotationIntervalBlocks`](#param-validator_rotation_interval_blocks); **stake-ordered**, gated by a verified-work + liveness **minimum-performance floor**; [eject](#param-validators_to_eject)/[promote](#param-validators_to_promote) = 50, [cooldown](#param-ejection_cooldown_blocks) ~7 d | [6.1](#61-primitives) / [13.2](#132-validator-consensus--da--leader-duties) | D-0416, D-0409 |\n| `G_n` / `F_eff` | `F_eff/10⁹`; deterministic reference-work accounting (`hp_poui::flop_meter`), distinct from physical instruction measurement | [4.1](#41-requirements) / [4.2](#42-the-op-count-model) | D-0405, D-0501 |\n| Throughput tripwire ceiling | reject if `gn·1000/latency_ms` > [**2,000,000 GFLOPS/s**](#param-throughput_tripwire_gflops_per_sec) (reject-only, never clamps `gn`; governable, default-on) | [4.2](#42-the-op-count-model) | D-0405 |\n| Heuristic (sanity only) | `2·P_active·N + 2·n_layer·n_ctx·d_attn`, ~2–3× | [4.2](#42-the-op-count-model) | D-0405 |\n| `model_hash` | measured dm-verity Merkle root (reproducible packer `[tools/modelpack]`), extended to RTMR3, registry-pinned per `(model, precision)`, fail-closed `Vk::V3` | [3.3](#33-tier-1--tee-attestation--measuring-model_hash-optional--hard-tier) | D-0404 |\n| Validator attestation quorum | [**BFT fraction, default 2/3**](#param-validator_attestation_threshold) (`ValidatorAttestationThreshold: Perbill`, root-governable); `ceil(active_count × threshold).max(1)` distinct active-validator signatures required | [3.6](#36-tier-4--on-chain-settlement-zk-aggregation--validator-bft-quorum), [13.3](#133-validator-attestation-quorum-bft-fraction) | D-0414 (supersedes D-0406) |\n| Direct-rail attestation extrinsic | 18,434 B at active=100/q=67; 36,859 B at supported max active=200/q=134; no throughput inference | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0502 |\n| Protocol DA (sovereign validator, §5.3) | [`R = 6` shards](#param-da_shard_count), Reed–Solomon **rate ½** (k=3+3, any 3 reconstruct); `Ephemeral` [retention `W` = **14 d**](#param-da_ephemeral_retention_blocks); audit deadline ~5 min; serve-or-slash bounded 1% (`Liveness`); **no per-byte DA fee** — DA is a validator duty funded by the validator reward share (D-0412) | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402, D-0412 |\n| DA leased model storage (D-0407) | default lease term **180 d**; term unit / top-up granularity **30 d**; expiry warning **30 d** before `lease_end` (one-shot, lazy); grace **14 d** (= `W`); **no storage fee** — `top_up_lease` is free (tx only); a **refundable** anti-spam deposit = `bytes × DepositPerByte` is **held** (dedicated hold reason) and **returned in full** on prune / voluntary withdrawal (D-0412); usage **pin** blocks prune; prune recoverable (deterministic root), reactivation re-locks the deposit | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0407, D-0412 |\n| Session-key expiry / caps | **≤10 d** (`SessionKeysMaxDuration = 864,000` blocks at 1 s); per-tx + daily caps; circuit breaker 60 blk / [100 tx](#param-circuit_breaker_tx_count) / [250 FLOP](#param-circuit_breaker_flop_cap) | [6.2](#62-agent-autonomy--operating-without-per-action-consensus) | — |\n| Compute channel (session settle) | 2 primary cooperative lifecycle inclusions, plus evidence/dispute calls; bytes and verification grow with turns; escrow = reserved capacity paid to the miner (no under-use refund, no settlement fee); [**dispute window 7 d**](#param-channel_dispute_window_blocks) ≤ DA `W` = 14 d; [**dispute-response window 2 h**](#param-channel_dispute_response_window_blocks); `top_up_escrow` | [12.1](#121-sessions--attested-streaming--aggregate-settlement) / [12.2](#122-per-identity-capacity-reservation) | D-0403 |\n| Tx model / composability | account + monotonic `u32` nonce (2-D lanes optional, not adopted); UTXO-native **not adopted**; opcode-like composability via a **declarative spend-condition layer** (Miniscript-style) + multisig/proxy/timelock/HTLC; UTXO side-rail = future micropayment option | [6.3](#63-transaction--state-model) / [6.4](#64-collaborative-pool--composition) | D-0401, D-0417 |\n| Calibrated host capacity | empirical timed work; HARD ≤ 90% of summed `(SKU,count)` ceiling; seven-day lease | [7](#7-hardware-calibration--drift) | D-0433 |\n| UnlockRate / Blackout | `R_p²` / <10% for 86,400 blocks → revoke | [8](#8-performance-locked-vesting) | — |\n| `T_lock` | pair-specific; default 7,200 FLOP blocks vs 3,600 s counter duration has zero unallocated inclusion budget | [10](#10-htlc-atomic-swap) | — |\n\nThe open/unset values referenced above are specified as numbered fill-in stubs in\n[Appendix E — Open Specification Items](#appendix-e--open-specification-items).\n\n---"},{"name":"Section: G.1","before":"### G.1 Compute channel — `pallet_compute_channel` (sole inference-dispatch path, §12.1)\n\n| Extrinsic | Origin | Effect | Key errors |\n|-----------|--------|--------|-----------|\n| `open_channel(miner, model_hash, measured_root, decode_policy_hash, precision, enclave_key, agent_key, sla, escrow, nonce, settlement_class)` | agent (signed) | reserve escrow; fix Appendix F.3 `SettlementClass`; snapshot the miner-calibration assurance tier; verify measured root vs. registry; state → `Open` | root mismatch; reservation-cap exceeded; expired lease |\n| `force_open(miner, model_hash, measured_root, decode_policy_hash, precision, agent_key, sla, escrow, nonce)` | agent (signed) | fix `SettlementClass::Standard`; state → `PendingAck { ack_deadline }`; no session signing key bound | reservation-cap exceeded |\n| `force_ack(channel_id, enclave_key)` | named miner (signed) | bind the provenance-neutral session signing key; snapshot the miner-calibration assurance tier; state → `Open` | not the named miner; window elapsed |\n| `register_session_evidence(channel_id, slot, commitment, size_bytes:u32)` | named miner (signed) | funded Open channel only; allocate bounded Ephemeral DA via R5.3g; identical retry preserves expiry; emit SessionEvidenceRegistered only for a new slot | NotAParty; BadState; ZeroToplocCommitment; VerifiedTurnOutOfBounds; SessionEvidenceTooLarge; SessionEvidenceConflict; registry errors |\n| `expire_force_open(channel_id)` | anyone (signed) | refund escrow in full; `FailedAcks += 1` if escrow ≥ floor | still within ack window |\n| `top_up_escrow(channel_id, amount)` | agent (signed) | raise reserved-capacity cap (splice-in) | channel not `Open` |\n| `settle(channel_id, final_root, aggregate_gn, claimed_measured_root, agent_receipt_sig, transcript_ref, verified_turns)` | miner (signed); agent bilaterally signs receipt | verify versioned receipt, every explicitly versioned turn signature/path, distinct indices, checked aggregate, calibration/`GnSink`, measured root, required TOPLOC record, and no open escalation; immediate private reserved-escrow payout; no public work credit (R11.2b/E.44) | `BadReceiptSignature`; `UnsupportedLeafVersion`; `AggregateGnMismatch`; `TooManySettlementTurns`; `MerklePathTooLong`; `GnTripwireRejected`; root/TOPLOC/escalation errors |\n| `force_settle(channel_id, final_root, aggregate_gn, claimed_measured_root, agent_receipt_sig, transcript_ref, verified_turns)` | miner or agent (signed) | verify the same receipt/turn/claim gates; compute two-part tariff `P`; open challenge window | receipt/turn/root/claim errors; rejects `P > E` with `TariffExceedsEscrow` (R12.1d) |\n| `finalize(channel_id)` | anyone (signed) | after the challenge window, pay `P` → miner, `(1−φ)(E−P)` → agent, `φ(E−P)` → burn/Foundation; `P` is in the escrow's base unit (10⁻¹⁸ FLOP), with `channel_base_per_turn = rate_G = 1` base unit | window not elapsed; open dispute |\n| `timeout(channel_id)` | anyone (signed) | non-delivery → full refund (`φ=0`) | not past `max_duration` |\n| `open_dispute(channel_id, contested_turn)` | session agent or active validator | lock [`channel_challenger_bond`](#param-channel_challenger_bond); contest one settled turn, which the miner answers with `respond_dispute` | `NoDisputeStanding`; `DisputeTurnNotSettled`; `DisputeExists`; window elapsed; transcript unavailable |\n| `open_bisection_dispute(channel_id, n_turns)` | session agent or active validator | lock the challenger bond; `n_turns` equals the settled power-of-two leaf count (2 to `MaxSettlementTurns`); begin midpoint rounds over the whole bundle | `BisectionBadTurnCount`; `DisputeTurnNotSettled`; standing and window errors as `open_dispute` |\n| `respond_bisection(channel_id, left_root, right_root)` | named miner (signed) | open the two child roots, whose hash equals the interval's parent root; reset the response window | `NotAParty`; `BisectionNotAwaitingResponse`; `BisectionBadChildRoots`; window elapsed |\n| `challenge_bisection(channel_id, choose_left)` | the dispute's challenger | pick the left or right half; once one turn remains, the miner answers with `respond_dispute` | `NotAParty`; `BisectionNotAwaitingChallenge`; `BisectionRoundCap`; window elapsed |\n| `respond_dispute(channel_id, leaf_version, turn_index, h_in, h_out, g_n, decode_policy_hash, h_ids, toploc_commitment_hash, miner_recv_ms, miner_done_ms, latency_ms, enclave_sig, merkle_path)` | miner (signed) | select exactly one Appendix F leaf preimage; verify signature + Merkle membership | unsupported version; bad signature/path; window elapsed → fraud default |\n| `report_toploc_mismatch(channel_id, evidence)` | active validator | quorum-judged activation mismatch → forgery slash | uncalibrated cell (fail-closed inert) |","after":"### G.1 Compute channel — `pallet_compute_channel` (sole inference-dispatch path, §12.1)\n\n| Extrinsic | Origin | Effect | Key errors |\n|-----------|--------|--------|-----------|\n| `open_channel(miner, model_hash, measured_root, decode_policy_hash, precision, enclave_key, agent_key, sla, escrow, nonce, settlement_class)` | agent (signed) | reserve escrow; fix Appendix F.3 `SettlementClass`; snapshot the miner-calibration assurance tier; verify measured root vs. registry; state → `Open` | root mismatch; reservation-cap exceeded; expired lease |\n| `force_open(miner, model_hash, measured_root, decode_policy_hash, precision, agent_key, sla, escrow, nonce)` | agent (signed) | fix `SettlementClass::Standard`; state → `PendingAck { ack_deadline }`; no session signing key bound | reservation-cap exceeded |\n| `force_ack(channel_id, enclave_key)` | named miner (signed) | bind the provenance-neutral session signing key; snapshot the miner-calibration assurance tier; state → `Open` | not the named miner; window elapsed |\n| `register_session_evidence(channel_id, slot, commitment, size_bytes:u32)` | named miner (signed) | funded Open channel only; allocate bounded Ephemeral DA via R5.3g; identical retry preserves expiry; emit SessionEvidenceRegistered only for a new slot | NotAParty; BadState; ZeroToplocCommitment; VerifiedTurnOutOfBounds; SessionEvidenceTooLarge; SessionEvidenceConflict; registry errors |\n| `expire_force_open(channel_id)` | anyone (signed) | refund escrow in full; `FailedAcks += 1` if escrow ≥ floor | still within ack window |\n| `top_up_escrow(channel_id, amount)` | agent (signed) | raise reserved-capacity cap (splice-in) | channel not `Open` |\n| `settle(channel_id, final_root, aggregate_gn, claimed_measured_root, agent_receipt_sig, transcript_ref, verified_turns)` | miner (signed); agent bilaterally signs receipt | verify versioned receipt, every explicitly versioned turn signature/path, distinct indices, checked aggregate, calibration/`GnSink`, measured root, required TOPLOC record, and no open escalation; immediate private reserved-escrow payout; no public work credit (R11.2b/E.44) | `BadReceiptSignature`; `UnsupportedLeafVersion`; `AggregateGnMismatch`; `TooManySettlementTurns`; `MerklePathTooLong`; `GnTripwireRejected`; root/TOPLOC/escalation errors |\n| `force_settle(channel_id, final_root, aggregate_gn, claimed_measured_root, agent_receipt_sig, transcript_ref, verified_turns)` | miner or agent (signed) | verify the same receipt/turn/claim gates; compute two-part tariff `P`; open challenge window | receipt/turn/root/claim errors; rejects `P > E` with `TariffExceedsEscrow` (R12.1d) |\n| `finalize(channel_id)` | anyone (signed) | after the challenge window, pay `P` → miner, `(1−φ)(E−P)` → agent, `φ(E−P)` → `FLOPFoundationAccount` (zero burn, R12.1d); `P` is in the escrow's base unit (10⁻¹⁸ FLOP), with `channel_base_per_turn = rate_G = 1` base unit | window not elapsed; open dispute |\n| `timeout(channel_id)` | anyone (signed) | non-delivery → full refund (`φ=0`) | not past `max_duration` |\n| `open_dispute(channel_id, contested_turn)` | session agent or active validator | lock [`channel_challenger_bond`](#param-channel_challenger_bond); contest one settled turn, which the miner answers with `respond_dispute` | `NoDisputeStanding`; `DisputeTurnNotSettled`; `DisputeExists`; window elapsed; transcript unavailable |\n| `open_bisection_dispute(channel_id, n_turns)` | session agent or active validator | lock the challenger bond; `n_turns` equals the settled power-of-two leaf count (2 to `MaxSettlementTurns`); begin midpoint rounds over the whole bundle | `BisectionBadTurnCount`; `DisputeTurnNotSettled`; standing and window errors as `open_dispute` |\n| `respond_bisection(channel_id, left_root, right_root)` | named miner (signed) | open the two child roots, whose hash equals the interval's parent root; reset the response window | `NotAParty`; `BisectionNotAwaitingResponse`; `BisectionBadChildRoots`; window elapsed |\n| `challenge_bisection(channel_id, choose_left)` | the dispute's challenger | pick the left or right half; once one turn remains, the miner answers with `respond_dispute` | `NotAParty`; `BisectionNotAwaitingChallenge`; `BisectionRoundCap`; window elapsed |\n| `respond_dispute(channel_id, leaf_version, turn_index, h_in, h_out, g_n, decode_policy_hash, h_ids, toploc_commitment_hash, miner_recv_ms, miner_done_ms, latency_ms, enclave_sig, merkle_path)` | miner (signed) | select exactly one Appendix F leaf preimage; verify signature + Merkle membership | unsupported version; bad signature/path; window elapsed → fraud default |\n| `report_toploc_mismatch(channel_id, evidence)` | active validator | quorum-judged activation mismatch → forgery slash | uncalibrated cell (fail-closed inert) |"},{"name":"Section: H.5","before":"### H.5 HTLC, invariants, sessions, governance, validators (§10–§15)\n\n| Requirement / mechanism | Status |\n|-------------------------|--------|\n| FLOP-leg HTLC create/redeem/refund; cross-chain pair profiles | LIVE local mechanics; all implemented pair directions target-only — conformance PENDING E.48 |\n| Finality-safe FLOP refund; permissioned FLOP relayer gate | LIVE local mechanics; pair-level binding/finality PENDING E.48 |\n| Agent-economics invariants (INV-02, INV-S01 session nonce, INV-M06 payout atomicity) | LIVE for INV-02, INV-S01 and INV-M06; `fail_task` removed with the per-task path |\n| INV-S03 pallet allowlist; INV-S05 immediate revocation | LIVE: direct calls checked; known runtime dispatch wrappers rejected for every session; revocation immediate |\n| Session `G_n` plausibility gate + authenticated submitted-turn sum | LIVE arithmetic/authentication; execution guarantee GAP (E.43/E.44) |\n| Current-profile channel payment without public work credit (R11.2b) | LIVE payment-only; future audited credit and historical recovery OPEN (E.44) |\n| Sessions: cooperative path has 2 primary inclusions; variable turn/path/evidence cost; reserved capacity; 85/15 fee split | LIVE mechanics; 85/15 fee split RATIFIED (D-0525, #2702); capacity mechanism PENDING; serialized bytes PARTIAL; withdrawal PROPOSED (ratification pending); benchmark/network GAP (E.44/E.46) |\n| Terminal DA-loss settlement (R13.0c / V4) | GAP: receipt payout in code conflicts with D-0430 full-refund rule; a missing tariff now rejects (`SettlementTariffMissing`) except for a pre-v2 legacy channel, which the migration flag converts once |\n| Failed/early-close three-way split (`φ`) | LIVE |\n| Dispute standing (agent + validators) | LIVE |\n| Recursive dispute bisection beyond single turn | LIVE: on-chain midpoint rounds over complete power-of-two settled bundles; other bundles use single-turn `open_dispute` |\n| Market-actor collusion detector + mechanism perturbation (R12.3) | PARTIAL: off-chain detector and dry-run perturbation canary LIVE; mechanism action open |\n| Attestation-outage scoped pause (R13.0e / O1) | PLANNED: designed, not built |\n| Session re-attestation cadence + max-duration extension | PLANNED |\n| Per-task path removal | LIVE |\n| OpenGov + `protocol_upgrade` (Root) track; Foundation submit gate; de-sudo | LIVE (de-sudo genesis-time) |\n| Validator onboarding/duties/rotation | LIVE (stake-ordering PARTIAL; runtime minimum-set guard and bounded ejection implemented; floor/bootstrap/batch policy PENDING E.56/E.42) |\n| Validator slashing table | LIVE (correlated equivocation curve PARTIAL) |\n| V6 censorship (FOCIL); V8 ghost-task accountability; O3 attestation reputation; P3 provenance; A8 account recovery | PLANNED |\n| Committee-sampling composition machine-check; PQ crypto | PARTIAL/OOS: committee gate predicate proved, including the bootstrap fallback; seat-capture composition PLANNED (E.42); quantum out of scope |\n| Session capacity units (R11.2) | PARTIAL: source landed (elapsed-time bound; pre-open finality lag excluded); runtime qualification and deployment pending; the value-audit planner is SDK-only, with no production caller yet |\n\n**Regenerating the evidence-coverage matrix.** The per-section research/Lean/Quint/Julia backing is\ngenerated separately into [`yellowpaper-coverage.md`](yellowpaper-coverage.md) via\n`just yellowpaper-regen`.\n\n**Per-requirement attribution.** A finer, requirement-level map (each `R-id` → its Lean theorem / Quint\ninvariant / Rust code path) is kept in the companion index\n[`yellowpaper-attribution.md`](yellowpaper-attribution.md). It is non-normative and lives outside the\nspec by design — it exposes proof-artifact and code-path detail the normative body omits.\n\n---","after":"### H.5 HTLC, invariants, sessions, governance, validators (§10–§15)\n\n| Requirement / mechanism | Status |\n|-------------------------|--------|\n| FLOP-leg HTLC create/redeem/refund; cross-chain pair profiles | LIVE local mechanics; all implemented pair directions target-only — conformance PENDING E.48 |\n| Finality-safe FLOP refund; permissioned FLOP relayer gate | LIVE local mechanics; pair-level binding/finality PENDING E.48 |\n| Agent-economics invariants (INV-02, INV-S01 session nonce, INV-M06 payout atomicity) | LIVE for INV-02, INV-S01 and INV-M06; `fail_task` removed with the per-task path |\n| INV-S03 pallet allowlist; INV-S05 immediate revocation | LIVE: direct calls checked; known runtime dispatch wrappers rejected for every session; revocation immediate |\n| Session `G_n` plausibility gate + authenticated submitted-turn sum | LIVE arithmetic/authentication; execution guarantee GAP (E.43/E.44) |\n| Current-profile channel payment without public work credit (R11.2b) | LIVE payment-only; future audited credit and historical recovery OPEN (E.44) |\n| Sessions: cooperative path has 2 primary inclusions; variable turn/path/evidence cost; reserved capacity; 85/15 fee split | LIVE mechanics; 85/15 fee split RATIFIED (D-0525, #2702); capacity mechanism PENDING; serialized bytes PARTIAL; withdrawal PROPOSED (ratification pending); benchmark/network GAP (E.44/E.46) |\n| Terminal DA-loss settlement (R13.0c / V4) | GAP: receipt payout in code conflicts with D-0430 full-refund rule; a missing tariff now rejects (`SettlementTariffMissing`) except for a pre-v2 legacy channel, which the migration flag converts once |\n| Failed/early-close three-way split (`φ`) | PARTIAL: tariff `P`, the `(1−φ)(E−P)` refund and the all-or-nothing split are wired, but the runtime still burns the `φ·(E−P)` leg (`burn_from` into `TotalBurned`, reported as `Settled.burned`) instead of transferring it to `FLOPFoundationAccount` as R12.1d and R9.10 require under D-0529 |\n| Dispute standing (agent + validators) | LIVE |\n| Recursive dispute bisection beyond single turn | LIVE: on-chain midpoint rounds over complete power-of-two settled bundles; other bundles use single-turn `open_dispute` |\n| Market-actor collusion detector + mechanism perturbation (R12.3) | PARTIAL: off-chain detector and dry-run perturbation canary LIVE; mechanism action open |\n| Attestation-outage scoped pause (R13.0e / O1) | PLANNED: designed, not built |\n| Session re-attestation cadence + max-duration extension | PLANNED |\n| Per-task path removal | LIVE |\n| OpenGov + `protocol_upgrade` (Root) track; Foundation submit gate; de-sudo | LIVE (de-sudo genesis-time) |\n| Validator onboarding/duties/rotation | LIVE (stake-ordering PARTIAL; runtime minimum-set guard and bounded ejection implemented; floor/bootstrap/batch policy PENDING E.56/E.42) |\n| Validator slashing table | LIVE (correlated equivocation curve PARTIAL) |\n| V6 censorship (FOCIL); V8 ghost-task accountability; O3 attestation reputation; P3 provenance; A8 account recovery | PLANNED |\n| Committee-sampling composition machine-check; PQ crypto | PARTIAL/OOS: committee gate predicate proved, including the bootstrap fallback; seat-capture composition PLANNED (E.42); quantum out of scope |\n| Session capacity units (R11.2) | PARTIAL: source landed (elapsed-time bound; pre-open finality lag excluded); runtime qualification and deployment pending; the value-audit planner is SDK-only, with no production caller yet |\n\n**Regenerating the evidence-coverage matrix.** The per-section research/Lean/Quint/Julia backing is\ngenerated separately into [`yellowpaper-coverage.md`](yellowpaper-coverage.md) via\n`just yellowpaper-regen`.\n\n**Per-requirement attribution.** A finer, requirement-level map (each `R-id` → its Lean theorem / Quint\ninvariant / Rust code path) is kept in the companion index\n[`yellowpaper-attribution.md`](yellowpaper-attribution.md). It is non-normative and lives outside the\nspec by design — it exposes proof-artifact and code-path detail the normative body omits.\n\n---"},{"name":"Section: preamble","before":"<!-- Published mirror of the FLOP yellowpaper — generated by scripts/publish_yellowpaper.py from flop-labs/flop-core@4e2b00890. Do not edit here. -->\n> **Published mirror — 0.5.0 (draft)** (source `flop-core@4e2b00890`). This file is generated; corrections are made upstream and re-published. Three publish-time transforms are applied to the spec: Appendix H's `Code path · tracker` column is removed, local links are retargeted to published paths/anchors or flattened when their file is unpublished, and machine-readable `<!-- cite: -->` gate comments are stripped. No normative text is altered. Tracker references of the form `#NNN` point at FLOP's internal engineering tracker, not at issues in this repository. Feedback: open an issue.\n\n<div class=\"cover\">\n  <p class=\"kicker\">FLOP Network · Yellow Paper</p>\n  <h1 class=\"mission\">Normative specification of the <em>FLOP protocol</em>.</h1>\n  <div class=\"meta\">\n    <span>Version<b>0.5.0 (draft)</b></span>\n    <span>Status<b>Implementation spec — iterating</b></span>\n    <span>Updated<b>2026-09-24</b></span>\n  </div>\n</div>\n\n> The **implementation specification** of the FLOP Network: notation, message and storage formats,\n> extrinsic interfaces, state machines, algorithms, and protocol invariants. This is the authoritative\n> reference an implementer builds against. It is the math/spec companion to the\n> Whitepaper (conceptual) and Litepaper (overview).\n>\n> **How to read this document — see [§0](#0-conformance--reading-guide) first.** The section bodies are\n> **normative** and describe the *target protocol* using RFC 2119 keywords (**MUST**/**SHOULD**/**MAY**).\n> Everything an implementer needs to satisfy conformance lives in the numbered sections and in\n> Appendices A (parameters), F (message & storage formats), and G (extrinsic index). Everything that is\n> *not* a requirement — design rationale, decision provenance, prior art, formal-proof citations — is\n> confined to the **Rationale & sources** trailer at the end of each section, and to Appendix B.\n> **Implementation status** (what is built vs. designed) is *not* carried in the normative body; it lives\n> in one place, the [Conformance & Status Matrix (Appendix H)](#appendix-h--conformance--implementation-status-matrix).\n> **Unresolved values/mechanisms** are numbered stubs in\n> [Appendix E — Open Specification Items](#appendix-e--open-specification-items); the body references a\n> stub rather than restating an open debate.\n>\n> **Decision provenance.** Ratified positions are recorded once in\n> [`decisions/v0.4.md`](decisions/v0.4.md) (`D-04xx`, MADR-shaped, immutable once merged, superseded by\n> ID in later versions). Where a normative rule cites a `D-id`, the citation is *provenance only* — the\n> rule itself is stated in full in the body; the reader never needs the decision record to implement.\n\n---","after":"<!-- Published mirror of the FLOP yellowpaper — generated by scripts/publish_yellowpaper.py from flop-labs/flop-core@dfd98a59d. Do not edit here. -->\n> **Published mirror — 0.5.0 (draft)** (source `flop-core@dfd98a59d`). This file is generated; corrections are made upstream and re-published. Three publish-time transforms are applied to the spec: Appendix H's `Code path · tracker` column is removed, local links are retargeted to published paths/anchors or flattened when their file is unpublished, and machine-readable `<!-- cite: -->` gate comments are stripped. No normative text is altered. Tracker references of the form `#NNN` point at FLOP's internal engineering tracker, not at issues in this repository. Feedback: open an issue.\n\n<div class=\"cover\">\n  <p class=\"kicker\">FLOP Network · Yellow Paper</p>\n  <h1 class=\"mission\">Normative specification of the <em>FLOP protocol</em>.</h1>\n  <div class=\"meta\">\n    <span>Version<b>0.5.0 (draft)</b></span>\n    <span>Status<b>Implementation spec — iterating</b></span>\n    <span>Updated<b>2026-09-24</b></span>\n  </div>\n</div>\n\n> The **implementation specification** of the FLOP Network: notation, message and storage formats,\n> extrinsic interfaces, state machines, algorithms, and protocol invariants. This is the authoritative\n> reference an implementer builds against. It is the math/spec companion to the\n> Whitepaper (conceptual) and Litepaper (overview).\n>\n> **How to read this document — see [§0](#0-conformance--reading-guide) first.** The section bodies are\n> **normative** and describe the *target protocol* using RFC 2119 keywords (**MUST**/**SHOULD**/**MAY**).\n> Everything an implementer needs to satisfy conformance lives in the numbered sections and in\n> Appendices A (parameters), F (message & storage formats), and G (extrinsic index). Everything that is\n> *not* a requirement — design rationale, decision provenance, prior art, formal-proof citations — is\n> confined to the **Rationale & sources** trailer at the end of each section, and to Appendix B.\n> **Implementation status** (what is built vs. designed) is *not* carried in the normative body; it lives\n> in one place, the [Conformance & Status Matrix (Appendix H)](#appendix-h--conformance--implementation-status-matrix).\n> **Unresolved values/mechanisms** are numbered stubs in\n> [Appendix E — Open Specification Items](#appendix-e--open-specification-items); the body references a\n> stub rather than restating an open debate.\n>\n> **Decision provenance.** Ratified positions are recorded once in\n> [`decisions/v0.4.md`](decisions/v0.4.md) (`D-04xx`, MADR-shaped, immutable once merged, superseded by\n> ID in later versions). Where a normative rule cites a `D-id`, the citation is *provenance only* — the\n> rule itself is stated in full in the body; the reader never needs the decision record to implement.\n\n---"}],"links":[{"label":"Before","url":"https://github.com/flop-labs/yellowpaper/blob/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/yellowpaper.md"},{"label":"After","url":"https://github.com/flop-labs/yellowpaper/blob/56410c67b11292e707d32ef32e9c4ff9c02e28c7/yellowpaper.md"},{"label":"Git comparison","url":"https://github.com/flop-labs/yellowpaper/compare/5730f4b6cf56fa88bb93bbda272dc449b2f77b17...56410c67b11292e707d32ef32e9c4ff9c02e28c7"}]},{"id":"docs:https://docs.flop.network/docs/protocol-parameters:2026-10-26","kind":"docs","at":"2026-10-26","clock":"page-date","source":"https://docs.flop.network/docs/protocol-parameters","measuredAt":"2026-11-06T03:27:33.291Z","title":"/docs/protocol-parameters","detail":"Page labels this as Last updated. Day precision only. It is not a verified edit time or a content diff.","changes":[{"name":"Page label","before":null,"after":"Last updated 2026-10-26"}],"links":[{"label":"Docs page","url":"https://docs.flop.network/docs/protocol-parameters"}]},{"id":"spec:70e691c758e53eed17a016a02b0a2ae1200d3744:5730f4b6cf56fa88bb93bbda272dc449b2f77b17:CHANGELOG.md","kind":"spec","at":"2026-10-25T15:44:54.000Z","clock":"commit","source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/CHANGELOG.md","measuredAt":"2026-11-06T03:27:26.823Z","title":"CHANGELOG.md: 70e691c to 5730f4b","detail":"docs(yellowpaper): sync 0.5.0 (draft) from flop-core@4e2b0089. 3 changed sections. 0 changed Appendix A values. Text changes are not deployed upgrades.","changes":[{"name":"Section: Yellowpaper changelog [after start]","before":"# Yellowpaper changelog\n\nThe initial public release is **0.5.0 (draft)**. No version has been published yet. Prepublication\nedits are folded into the initial text; there are no public errata or patch releases to record.\nAfter publication, use Semantic Versioning and Keep a Changelog, preserving released versions.","after":"# Yellowpaper changelog\n\nThe initial public release is **0.5.0 (draft)**. No version has been published yet. Prepublication\nedits are folded into the initial text.\nAfter publication, use [Semantic Versioning](https://semver.org/spec/v2.0.0.html) and\n[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), preserving released versions."},{"name":"Section: Yellowpaper changelog [after start] / Yellowpaper changelog [after start] / [Unreleased] [after start] / Added [after start]","before":"### Added\n\n- Ratified D-0519 (owner, 2026-10-04): paid-storage service lanes close at a fixed boundary with\n  a funding-pinned claim deadline on the finalized prefix. Only the lane's provider redeems, with\n  strict sequence, counter and amount checks, including after reassignment. Otherwise-valid\n  post-close signatures remain payable within the unspent budget until the deadline; finalization\n  refunds only the remainder above it. Unknown finality rejects both operations. R5.4g, R5.4j,\n  E.54, F.7 and G.4 carry the rule. E.54 constrains sequential entitlement-maturity and funded-request\n  timing to fit that fixed deadline and requires an actual redeem-valid dispatch opportunity under\n  permitted finality behavior before affected work can be enabled. Timing arithmetic alone does not\n  establish it; the numerical window and production activation remain unratified.\n\n- Era-T conversion and airdrop vesting (§8.2, R8.3–R8.8; D-0514). Conversion draws only on the\n  fixed genesis cohort pools. Agents are scored on settled compute-channel spend and miners on\n  verified effective-FLOP; balance, stake, job count and active days carry no weight. Snapshot and\n  evidence of record are fixed before genesis lock. Grants land as frozen genesis balances with\n  linear vesting and finalized-head claims. The miner performance adjustment fails closed: without\n  both performance inputs a Miner grant unlocks nothing before its end block. E.38 keeps score caps,\n  the validator activity basis, the agent horizon and the remainder disposition open.\n\n- Development-network exception to the paid-storage activation gate (D-0512, R5.4q): a valueless\n  devnet may run the §5.4 extension ahead of E.54 only from a runtime built with a non-default,\n  development-only flag, under an explicitly unratified profile with placeholder values kept out of\n  the canonical parameters, with unaudited rent releases marked as such, and with no result citable\n  as E.54/E.47 evidence. R5.4k now names R5.4q as its only exception; every other network is unchanged.\n\n- Paid encrypted agent memory/data storage specification (D-0506): fixed-term validator storage\n  revenue, metered retrieval vouchers, scoped authority, versioned memory heads, and bounded\n  audit/repair/refund obligations. Activation remains gated on E.54 economics/security calibration\n  and E.47 availability evidence; protocol/model DA pricing is preserved. Distinguish client encryption\n  from enforceable envelope validation, price setup separately from rent, and separate provider quotes\n  from protocol limits and calibration inputs. Fund storage as take-or-pay capacity reservations:\n  deletion frees bytes for reuse and refunds nothing, the remaining term is transferable, and rent\n  rounds once per provider. Price by one epoch tariff (stake-weighted median of capacity-declaring\n  validators, bounded step, under-supply tripwire) with protocol-random assignment among declarers.\n  Keep the chain footprint flat: one reservation per payer, objects and ordinary memory heads in a\n  provider-group manifest with quorum receipts and one checkpoint per provider per epoch, rent\n  released per epoch without claims, setup and retrieval on one service lane per provider. Advance\n  the retrieval request fee before the first chunk, calibrate audit sampling by `p_a × c_r ≥ c_s`,\n  count held-back rent as bond. Bound attempted traffic and retries independently of voucher billing.\n\n- Initial normative specification of consensus, useful-inference verification, reference-work\n  accounting, settlement, economics, data availability, and governance.\n- Strict `< ⅓` Byzantine committee-seat premise with Lean quorum/nonforking references and explicit\n  sampler, protocol-integration, and liveness assumptions.\n- Reproducible committee counterexample, internal source-checked SCALE extrinsic fixtures, charged-weight\n  ledger, negative capacity evidence, and conditional audit scenarios. Raw capacity-mechanism failure\n  diagnostics and their reproducer remain private while E.46 is pending.\n- Parameter and wire-format references, conformance status, and numbered open specification items.\n- v0.5 decision D-0501 and proposed D-0502, pending ratification; D-0502 would withdraw unmeasured\n  byte, throughput, and latency targets while earlier decisions retain their original IDs and history.\n- D-0505 interoperable wire/rejection profile with explicit leaf and receipt versions, replay domains,\n  legacy cutoffs, FCC4 transcripts, and a public Rust/TypeScript/Python vector corpus.\n- D-0511 canonical compute-channel transcript/receipt definition, including per-channel decode-policy\n  pinning and the path-specific `payable` derivation.\n- D-0440 genesis sizing: a 4,400,000,000 FLOP genesis supply whose validator cohort is the aggregate\n  1,200,000 FLOP bond across the 1,000-seat active-set cap.\n- Proposed D-0507–D-0510, pending ratification: post-testnet genesis validator selection and placement,\n  floor-based rotation with an on-chain performance signal, committee sessions aligned to the BABE\n  epoch, and bootstrap nodes.\n- E.55 open item for a canonical pre-session quote/discovery contract.\n- Whole-integer `G_n` representation and full-context cache accounting for profile v1.\n- Publication checks for references, parameters, source layouts, generated artifacts, and\n  offline sampler reproduction independent of the surrounding Python project's dependencies.\n- Public standalone claim-ledger reproduction and canonical Appendix A parameter source/generator,\n  with gates for published command paths, Python floors, and lossy parameter descriptions.\n- Private Lean/Quint sources, locks, axiom checks, bounded model witnesses and mutation fixtures, plus\n  a summary-only **PENDING** public profile; source licensing and implementation refinement must pass\n  before the runnable bundle or broader protocol claims are published.\n- Curated Lean sources and axiom checks with frozen source hashes, exact committee enumeration,\n  and conditional audit/shared-collateral evidence; remaining publication and runtime-test gaps stay explicit.\n- HTLC pair-qualification requirements with local-safety scope and an explicit PENDING disposition\n  for end-to-end cross-chain conformance.","after":"### Added\n\n- Specify paid-storage service lanes that close at a fixed boundary with\n  a funding-pinned claim deadline on the finalized prefix. Only the lane's provider redeems, with\n  strict sequence, counter and amount checks, including after reassignment. Otherwise-valid\n  post-close signatures remain payable within the unspent budget until the deadline; finalization\n  refunds only the remainder above it. Unknown finality rejects both operations. R5.4g, R5.4j,\n  E.54, F.7 and G.4 carry the rule. E.54 constrains sequential entitlement-maturity and funded-request\n  timing to fit that fixed deadline and requires an actual redeem-valid dispatch opportunity under\n  permitted finality behavior before affected work can be enabled. Timing arithmetic alone does not\n  establish it; the numerical window and production activation remain unratified.\n\n- Era-T conversion and airdrop vesting (§8.2, R8.3–R8.8; D-0514). Conversion draws only on the\n  fixed genesis cohort pools. Agents are scored on settled compute-channel spend and miners on\n  verified effective-FLOP; balance, stake, job count and active days carry no weight. Snapshot and\n  evidence of record are fixed before genesis lock. Grants land as frozen genesis balances with\n  linear vesting and finalized-head claims. The miner performance adjustment fails closed: without\n  both performance inputs a Miner grant unlocks nothing before its end block. E.38 keeps score caps,\n  the validator activity basis, the agent horizon and the remainder disposition open.\n\n- Development-network exception to the paid-storage activation gate (D-0512, R5.4q): a valueless\n  devnet may run the §5.4 extension ahead of E.54 only from a runtime built with a non-default,\n  development-only flag, under an explicitly unratified profile with placeholder values kept out of\n  the canonical parameters, with unaudited rent releases marked as such, and with no result citable\n  as E.54/E.47 evidence. R5.4k now names R5.4q as its only exception; every other network is unchanged.\n\n- Paid encrypted agent memory/data storage specification (D-0506): fixed-term validator storage\n  revenue, metered retrieval vouchers, scoped authority, versioned memory heads, and bounded\n  audit/repair/refund obligations. Activation remains gated on E.54 economics/security calibration\n  and E.47 availability evidence; protocol/model DA pricing is preserved. Distinguish client encryption\n  from enforceable envelope validation, price setup separately from rent, and separate provider quotes\n  from protocol limits and calibration inputs. Fund storage as take-or-pay capacity reservations:\n  deletion frees bytes for reuse and refunds nothing, the remaining term is transferable, and rent\n  rounds once per provider. Price by one epoch tariff (stake-weighted median of capacity-declaring\n  validators, bounded step, under-supply tripwire) with protocol-random assignment among declarers.\n  Keep the chain footprint flat: one reservation per payer, objects and ordinary memory heads in a\n  provider-group manifest with quorum receipts and one checkpoint per provider per epoch, rent\n  released per epoch without claims, setup and retrieval on one service lane per provider. Advance\n  the retrieval request fee before the first chunk, calibrate audit sampling by `p_a × c_r ≥ c_s`,\n  count held-back rent as bond. Bound attempted traffic and retries independently of voucher billing.\n\n- Initial normative specification of consensus, useful-inference verification, reference-work\n  accounting, settlement, economics, data availability, and governance.\n- Strict `< ⅓` Byzantine committee-seat premise with Lean quorum/nonforking references and explicit\n  sampler, protocol-integration, and liveness assumptions.\n- Reproducible committee counterexample, internal source-checked SCALE extrinsic fixtures, charged-weight\n  ledger, negative capacity evidence, and conditional audit scenarios. Raw capacity-mechanism failure\n  diagnostics and their reproducer remain private while E.46 is pending.\n- Parameter and wire-format references, conformance status, and numbered open specification items.\n- v0.5 decision D-0501 and proposed D-0502, pending ratification; D-0502 would withdraw unmeasured\n  byte, throughput, and latency targets while earlier decisions retain their original IDs and history.\n- D-0505 interoperable wire/rejection profile with explicit leaf and receipt versions, replay domains,\n  legacy cutoffs, FCC4 transcripts, and a public Rust/TypeScript/Python vector corpus.\n- D-0511 canonical compute-channel transcript/receipt definition, including per-channel decode-policy\n  pinning and the path-specific `payable` derivation.\n- D-0440 genesis sizing: a 4,400,000,000 FLOP genesis supply whose validator cohort is the aggregate\n  1,200,000 FLOP bond across the 1,000-seat active-set cap.\n- Proposed D-0507–D-0510, pending ratification: post-testnet genesis validator selection and placement,\n  floor-based rotation with an on-chain performance signal, committee sessions aligned to the BABE\n  epoch, and bootstrap nodes.\n- E.55 open item for a canonical pre-session quote/discovery contract.\n- Whole-integer `G_n` representation and full-context cache accounting for profile v1.\n- Publication checks for references, parameters, source layouts, generated artifacts, and\n  offline sampler reproduction independent of the surrounding Python project's dependencies.\n- Public standalone claim-ledger reproduction and canonical Appendix A parameter source/generator,\n  with gates for published command paths, Python floors, and lossy parameter descriptions.\n- Private Lean/Quint sources, locks, axiom checks, bounded model witnesses and mutation fixtures, plus\n  a summary-only **PENDING** public profile; source licensing and implementation refinement must pass\n  before the runnable bundle or broader protocol claims are published.\n- Curated Lean sources and axiom checks with frozen source hashes, exact committee enumeration,\n  and conditional audit/shared-collateral evidence; remaining publication and runtime-test gaps stay explicit.\n- HTLC pair-qualification requirements with local-safety scope and an explicit PENDING disposition\n  for end-to-end cross-chain conformance."},{"name":"Section: Yellowpaper changelog [after start] / Yellowpaper changelog [after start] / [Unreleased] [after start] / Changed [after start]","before":"### Changed\n\n- Name RTMR3 as the only accepted measurement path for the model root (§3.3 step 2), matching the\n  step 3 verifier and D-0404.\n\n- Bring Appendix E/H status, trackers and code paths up to date with landed code; no protocol rule\n  changes. Index the on-chain bisection dispute calls in G.1 and correct `open_dispute`'s arguments;\n  mark multi-round bisection and `G_n` overflow rejection LIVE; record the development-network\n  paid-storage pallet (rent released without audit), its CI-run Quint models and its simulation as\n  PARTIAL; narrow E.9, E.32, E.41, E.46, E.47, E.51 and E.54 to what remains open; and replace\n  enforcement paths for code removed with the per-task path in §11.1 and H.5.\n\n- Specify Appendix D's chain inclusion-fee terms, align the shared-collateral example with its\n  generated four-claim row, and list both work-vesting grant entry points in Appendix G.3.\n\n- Ratify slot/tranche position rent (D-0524, R5.4e/f, E.54, F.7, G.4): replacements retain\n  historical earned rent, failed or forfeited deltas refund the payer, and new tariffs use separate\n  funded tranches. Supersede independent provider ceilings; add seven executable balance vectors.\n\n- Dispose implemented HTLC pair directions as target-only for initial publication (E.48, #1498).\n  Preserve cross-leg late-claim, finality-stall and failed-payout counterexamples, qualify the local\n  formal models, and add focused pallet/contract expiry-ordering tests and a reproducible pair gate.\n\n- Specify the Agent airdrop unlock as spend-to-unlock (R8.7, R8.8; D-0522). An Agent grant unlocks\n  nothing at its start and has no end block; it unlocks one FLOP per three FLOP of its locked\n  principal in the gross `payable` of settled sessions, once every fraud dispute raised in the window has\n  resolved, and its locked compute spend is capped at three quarters of principal. Channel escrow\n  drawn from locked principal goes to the `payable` first and is refunded first, back to the grant as frozen\n  principal. E.38 no longer holds the Agent horizon.\n\n- Make current-profile channel settlements payment-only (R11.2b, task 1494). Receipt claims no\n  longer feed public work rewards or performance vesting, including unilateral/DA-void payout.\n  Historical recovery and future audited credit remain open; the distinct decision ID awaits approval.\n\n- Tighten the Appendix F vector schema to require canonical fields, byte widths, integer ranges,\n  case identities, and coverage. Wide integers use decimal strings so JSON consumers preserve\n  their exact values; the public generator also checks duplicate identities.\n\n- Replace §8.2's Miner and Validator airdrop unlock (R8.7, R8.8; D-0517). A Miner grant is a quarter\n  liquid at its start and unlocks the rest one FLOP per FLOP it receives as miner from settled\n  sessions once their dispute window passes, with no end block; block rewards earn no credit, and the performance adjustment\n  is retired. A Validator grant stays frozen until the first halving, then grants release one per day\n  without unbonding; none releases until E.38 fixes the order. Only Agent grants may still spend\n  locked principal on compute; a miner may bond its locked principal as its own self-stake.\n- Make block rewards and the subsidy liquid on issue (R9.13; D-0518). The miner and validator legs and\n  the Labs/Foundation subsidy are never auto-compounded, force-staked or vested, and agent-leg payouts\n  are liquid once E.40 ratifies; validator earnings no longer auto-compound into locked stake, and E.39\n  is closed.\n\n- Ratify §8.2's grant-landing (R8.6) and claim and locked-spend (R8.8) rules as D-0515. D-0514\n  had covered only R8.3–R8.5 and R8.7; the requirement text is unchanged.\n\n- Repoint Appendix E blockers to live trackers and refresh Appendix H implementation grades for\n  fee distribution, metering overflow, session-key invariants, and collusion monitoring.","after":"### Changed\n\n- State in §15.5 R15.5 that proven-fault slash proceeds at the active-set floor are confiscated and transferred to the Foundation (R9.10) rather than burned.\n\n- Propagate the zero-burn, operator self-stake-only, and off-chain referral rulings to the normative\n  spec and canonical parameters (D-0529, D-0530, D-0531; #2792, #1945, #1358): set\n  `tx_fee_burn_percent_live` (`BurnFees`) to 0% with 100% of live transaction fees and tips routed to\n  the block author (§9.1 R9.6, Appendix D, Appendix H); replace legacy \"full-burn\" slash terminology\n  with 100% routing to `FLOPFoundationAccount` (§11.3, §13.2, §15.7, Appendix A); prohibit third-party\n  delegated staking into validators and miners, deprecate delegation extrinsics/caps and operator\n  commissions (`miner_staking::delegate`, `max_delegators_per_miner`, `miner_commission_cap_percent`),\n  and formalize the 5% duration-locked community staking pool across seven lock tiers without\n  slashing risk (§2.3, §6.1, §9.1 R9.12, §11.3, §15.2, E.32, E.40, G.3); and record that the\n  800,000,000 FLOP `genesis_reserve` funds the off-chain explorer referral leaderboard and periodic\n  lotteries in place of on-chain referral commissions (§9.1 R9.4, E.38).\n\n- Let sponsors post an operator's whole registration bond on devnet and testnet (R6.1a; D-0528). The\n  bond stays frozen in the sponsor account and is refunded only to the sponsor. It counts as miner or\n  validator self-stake only on runtimes built with `sponsored_self_stake_enabled`. Narrow E.32 to its\n  mainnet questions; index the new calls in G.3 and their status in H.1.\n\n- Reconcile normative contradictions surfaced by the 2026-10-13 mirror sync (#2648): align §15.5,\n  E.56 and H.5 with the implemented `validator_min_active_validators` = 4 removal/rotation floor and\n  10% churn cap (#1727) while keeping the D-0507/D-0508/E.42 policy questions open; reconcile §9.3\n  R9.9, §15.5 R15.5/R15.5b and Appendix G.3 on active-set entry paths (`rotate` promotion from\n  `ValidatorQueue` vs direct `un_jail`/`rejoin` restoration under `validator_active_set_cap`, and\n  rotation ejection thawing self-stake before re-registration); align §9, R9.2, R9.3, Appendix A and\n  Appendix D cumulative emission and subsidy totals with the runtime's `era(b) = ⌊b / H⌋` boundary\n  and unrewarded genesis block 0 (R9.7); define the +9%/yr validator stake baseline's annual\n  `31,536,000`-block boundary, integer floor formula and 1%-of-`total_issuance` cap in §15.2; update\n  §13.2 V11 and E.57 to compose `W` against R1.2a's multi-round bisection dispute lifetime (`8 d 20 h`);\n  define Validator grant unlocked amount (`P − S`) and slashed-principal accounting `S` in §8.2\n  R8.7/R8.8; and clarify in §11.2 R11.2b and §8.2 R8.7 that settled-session airdrop unlock/spend\n  credit is private payment-denominated vesting credit distinct from public `G_n` work credit.\n\n- Credit miner block rewards toward the Miner airdrop unlock (R8.7; D-0527, superseding D-0517\n  item 1). A Miner grant now unlocks one FLOP per FLOP of the miner-leg block rewards minted to the\n  grantee, counted once the distribution block is finalized, as well as per FLOP of its settled\n  channel payouts after the dispute window. Other block-reward legs, the subsidy, transaction fees, refunds, penalties and\n  bonds still earn nothing.\n\n- Mark INV-M06 payout atomicity LIVE in §11.1 and H.5: channel settlement now reverts when the\n  refund-penalty burn fails, as it already did for the miner and refund transfers.\n\n- Name RTMR3 as the only accepted measurement path for the model root (§3.3 step 2), matching the\n  step 3 verifier and D-0404.\n\n- Bring Appendix E/H status, trackers and code paths up to date with landed code; no protocol rule\n  changes. Index the on-chain bisection dispute calls in G.1 and correct `open_dispute`'s arguments;\n  mark multi-round bisection and `G_n` overflow rejection LIVE; record the development-network\n  paid-storage pallet (rent released without audit), its CI-run Quint models and its simulation as\n  PARTIAL; narrow E.9, E.32, E.41, E.46, E.47, E.51 and E.54 to what remains open; and replace\n  enforcement paths for code removed with the per-task path in §11.1 and H.5.\n\n- Specify Appendix D's chain inclusion-fee terms, align the shared-collateral example with its\n  generated four-claim row, and list both work-vesting grant entry points in Appendix G.3.\n\n- Ratify slot/tranche position rent (D-0524, R5.4e/f, E.54, F.7, G.4): replacements retain\n  historical earned rent, failed or forfeited deltas refund the payer, and new tariffs use separate\n  funded tranches. Supersede independent provider ceilings; add seven executable balance vectors.\n\n- Describe implemented HTLC pair directions as target-only for initial publication (E.48).\n  Preserve cross-leg late-claim, finality-stall and failed-payout counterexamples, qualify the local\n  formal models, and add focused pallet/contract expiry-ordering tests and a reproducible pair gate.\n\n- Specify the Agent airdrop unlock as spend-to-unlock (R8.7, R8.8; D-0522). An Agent grant unlocks\n  nothing at its start and has no end block; it unlocks one FLOP per three FLOP of its locked\n  principal in the gross `payable` of settled sessions, once every fraud dispute raised in the window has\n  resolved, and its locked compute spend is capped at three quarters of principal. Channel escrow\n  drawn from locked principal goes to the `payable` first and is refunded first, back to the grant as frozen\n  principal. E.38 no longer holds the Agent horizon.\n\n- Make current-profile channel settlements payment-only (§11.2 R11.2b). Receipt claims no\n  longer feed public work rewards or performance vesting, including unilateral/DA-void payout.\n  Historical recovery and future audited credit remain open.\n\n- Tighten the Appendix F vector schema to require canonical fields, byte widths, integer ranges,\n  case identities, and coverage. Wide integers use decimal strings so JSON consumers preserve\n  their exact values; the public generator also checks duplicate identities.\n- Protect Ephemeral DA blobs from pruning while any usage pin remains, matching Leased blobs\n  (R5.3d; D-0521). Pins do not extend expiry or admit new usage after the retention deadline.\n\n- Replace §8.2's Miner and Validator airdrop unlock (R8.7, R8.8; D-0517). A Miner grant is a quarter\n  liquid at its start and unlocks the rest one FLOP per FLOP it receives as miner from settled\n  sessions once their dispute window passes, with no end block (D-0527 adds miner block rewards), and\n  the performance adjustment is retired. A Validator grant stays frozen until the first halving, then grants release one per day\n  without unbonding; none releases until E.38 fixes the order. Only Agent grants may still spend\n  locked principal on compute; a miner may bond its locked principal as its own self-stake.\n- Make block rewards and the subsidy liquid on issue (R9.13; D-0518). The miner and validator legs and\n  the Labs/Foundation subsidy are never auto-compounded, force-staked or vested, and agent-leg payouts\n  are liquid once E.40 ratifies; validator earnings no longer auto-compound into locked stake, and E.39\n  is closed.\n\n- Ratify §8.2's grant-landing (R8.6) and claim and locked-spend (R8.8) rules as D-0515. D-0514\n  had covered only R8.3–R8.5 and R8.7; the requirement text is unchanged.\n\n- Repoint Appendix E blockers to live trackers and refresh Appendix H implementation grades for\n  fee distribution, metering overflow, session-key invariants, and collusion monitoring."}],"links":[{"label":"Before","url":"https://github.com/flop-labs/yellowpaper/blob/70e691c758e53eed17a016a02b0a2ae1200d3744/CHANGELOG.md"},{"label":"After","url":"https://github.com/flop-labs/yellowpaper/blob/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/CHANGELOG.md"},{"label":"Git comparison","url":"https://github.com/flop-labs/yellowpaper/compare/70e691c758e53eed17a016a02b0a2ae1200d3744...5730f4b6cf56fa88bb93bbda272dc449b2f77b17"}]},{"id":"spec:70e691c758e53eed17a016a02b0a2ae1200d3744:5730f4b6cf56fa88bb93bbda272dc449b2f77b17:decisions/v0.5.md","kind":"spec","at":"2026-10-25T15:44:54.000Z","clock":"commit","source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/decisions/v0.5.md","measuredAt":"2026-11-06T03:27:27.315Z","title":"decisions/v0.5.md: 70e691c to 5730f4b","detail":"docs(yellowpaper): sync 0.5.0 (draft) from flop-core@4e2b0089. 12 changed sections. 0 changed Appendix A values. Text changes are not deployed upgrades.","changes":[{"name":"Section: D-0521","before":null,"after":"## D-0521 — Usage pins protect both DA retention classes\n\n**Status:** implementation decision for task #2228 on 2026-10-02. Supersedes the Leased-only\nscope of D-0407's prune pin guard; preserves D-0441's expiry and dispute-horizon rules.\n\n**Context.** `pin` accepts any available DA blob, and compute-channel pins Ephemeral transcript\nreferences after checking their availability through the dispute horizon. `prune_blob` previously\nignored those pins at window end, contrary to the pin API's promise to protect in-flight usage.\n\n**Decision.** Both retention classes require `pin_count == 0` before pruning. Ephemeral blobs still\nrequire their finalized retention deadline; Leased blobs still require `lease_end + grace`. Pins\ndo not extend expiry or allow new usage after expiry. Retention errors retain precedence over\n`BlobPinned`, and an expired blob becomes prunable once its final pin is released.\n\n**Specification.** §5.3 R5.3d.\n\n**Rationale & sources.** A shared prune guard preserves the existing pin interface and transcript\ncallers. Rejecting Ephemeral pins would require changing those callers and their protection\ncontract. The DA Veil model proves the guard for both classes and checks that an expired Ephemeral\nblob cannot be pruned while pinned, then can be pruned after unpinning."},{"name":"Section: D-0524","before":"## D-0524 — Slot and tranche position rent\n\n**Status:** ratified by the protocol owner on 2026-10-07 in\n[task #1965](https://github.com/flop-labs/flop-core/issues/1965). The production activation\nprofile and numerical tariff, bond and audit parameters remain pending E.54.\n\n**Supersedes by scope.** D-0506 item 2's rounding once per provider, and R5.4f's independent\nprovider cumulative ceilings and replacement entitlement within residual segment budgets.\nThe escrow ceiling, signed payer cap, checked arithmetic and separate setup/lane holds remain.\n\n**Decision.** One rent accumulator per slot and funding tranche, indexed by position in the term.\nA slot holds `c` encoded bytes. Tranche `k` funds positions `[S_k,S_k+L_k)` at `p_k/q_k`, with\n`q_k > 0`, for `B_k = ceil(c·L_k·p_k/q_k)`. Its accumulator is\n`R_k(τ) = ceil(c·(τ−S_k)·p_k/q_k)`. Accepted interval `[a,b)` earns its historical holder\n`R_k(b)−R_k(a)`; split an interval at every tranche boundary. Never restart the accumulator\nat replacement, epoch boundaries or repeat assignment. Never index it by accepted-block count.\n\nA replaced provider keeps earned/unreleased rent for its own positions, pending the existing\nchallenge/forfeiture rule. A replacement receives only its own positions. Failed, unserved and\nforfeited deltas remain in escrow and refund to the payer; they cannot be reassigned. Close settles\nsurviving historical entitlements before refunding `Σ_k B_k − paid − held` per slot; live holds\ncannot be refunded. Each provider bears its positions' rounding discrepancy: within one tranche,\nan interval can earn above or below its exact share by strictly less than one base unit. The payer\nfunds each tranche's ceiling and receives all unearned deltas at close. Fully accepted service\nreleases every funded ceiling unit and refunds zero. No provider has an independent ceiling guarantee.\n\n**Rationale.** Disjoint position deltas telescope within each funded tranche, conserving the cap\nregardless of release order. Splitting epochs, rotating identities and assigning the same provider\nagain cannot change payment for the same served positions. New positions use their own funding\ntranche's tariff. For `c=1,T=2,p/q=1/2`, A earns 1 and B earns 0, rather than the impossible\nindependent entitlements 1+1 against funding 1. Residual clipping would make earnings depend on\nrelease order and underpay F in the multi-replacement vector.\n\n**Evidence and handoff.** Seven state/balance vectors\nand `paid-storage-counterexamples.qnt` witnesses supply #1837's payout and #1907's money-path corpus,\nand #1570/#1571's proof/model coverage. `PaidStorageArithmetic.slot_counter_releases_le_term`\nproves the term bound; `slot_interval_fairness` proves the strict one-unit interval error.\n`PaidStorageSettlement.lean` already indexes intervals by position. These are specification/model\ncontracts, not runtime conformance receipts. #1837 must consume this decision and the regression\nvectors before its payout implementation is ready. This task changes no pallet code or launch default.","after":"## D-0524 — Slot and tranche position rent\n\n**Status:** ratified by the protocol owner on 2026-10-07 in\n[task #1965](https://github.com/flop-labs/flop-core/issues/1965). The production activation\nprofile and numerical tariff, bond and audit parameters remain pending E.54.\n\n**Supersedes by scope.** D-0506 item 2's rounding once per provider, and R5.4f's independent\nprovider cumulative ceilings and replacement entitlement within residual segment budgets.\nThe escrow ceiling, signed payer cap, checked arithmetic and separate setup/lane holds remain.\n\n**Decision.** One rent accumulator per slot and funding tranche, indexed by position in the term.\nA slot holds `c` encoded bytes. Tranche `k` funds positions `[S_k,S_k+L_k)` at `p_k/q_k`, with\n`q_k > 0`, for `B_k = ceil(c·L_k·p_k/q_k)`. Its accumulator is\n`R_k(τ) = ceil(c·(τ−S_k)·p_k/q_k)`. Accepted interval `[a,b)` earns its historical holder\n`R_k(b)−R_k(a)`; split an interval at every tranche boundary. Never restart the accumulator\nat replacement, epoch boundaries or repeat assignment. Never index it by accepted-block count.\n\nA replaced provider keeps earned/unreleased rent for its own positions, pending the existing\nchallenge/forfeiture rule. A replacement receives only its own positions. Failed, unserved and\nforfeited deltas remain in escrow and refund to the payer; they cannot be reassigned. Close settles\nsurviving historical entitlements before refunding `Σ_k B_k − paid − held` per slot; live holds\ncannot be refunded. Each provider bears its positions' rounding discrepancy: within one tranche,\nan interval can earn above or below its exact share by strictly less than one base unit. The payer\nfunds each tranche's ceiling and receives all unearned deltas at close. Fully accepted service\nreleases every funded ceiling unit and refunds zero. No provider has an independent ceiling guarantee.\n\n**Rationale.** Disjoint position deltas telescope within each funded tranche, conserving the cap\nregardless of release order. Splitting epochs, rotating identities and assigning the same provider\nagain cannot change payment for the same served positions. New positions use their own funding\ntranche's tariff. For `c=1,T=2,p/q=1/2`, A earns 1 and B earns 0, rather than the impossible\nindependent entitlements 1+1 against funding 1. Residual clipping would make earnings depend on\nrelease order and underpay F in the multi-replacement vector.\n\n**Evidence and handoff.** Seven state/balance vectors\nand `paid-storage-counterexamples.qnt` witnesses supply #1837's payout and #1907's money-path corpus,\nand #1570/#1571's proof/model coverage. `PaidStorageArithmetic.slot_counter_releases_le_term`\nproves the term bound; `slot_interval_fairness` proves the strict one-unit interval error.\n`PaidStorageSettlement.lean` already indexes intervals by position. These are specification/model\ncontracts, not runtime conformance receipts. #1837 must consume this decision and the regression\nvectors before its payout implementation is ready. This task changes no pallet code or launch default.\n\n---"},{"name":"Section: D-0525","before":null,"after":"## D-0525 — Inference fee split (85% miner / 15% validator)\n\n**Status:** ratified 2026-10-14 (owner; #2702). Brought into line across yellow paper §9, §12.1,\nAppendices D, E.38, F.3, H.5 and canonical parameters.\n\n**Context.** Executive ruling by Shu on 2026-10-14 confirms that inference fees in compute channels\nare split 85% to the miner and 15% to validators. This represents the ratified economics in the\ntokenomics projection model (`FLOP Tokenomics & Airdrop.xlsx`, Projection Input), institutional\ncounterparty agreements (Pantera, Gaorong/HashKey, Luganodes, BitGo, Caladan, Kraken), and the\npublished teaser. Previously, the Yellowpaper spec stated in Appendix D that settlement had \"no settlement fee\"\n(100% to miner), and §9 R9.5 forbade increasing the validator pool with an inference surcharge.\n\n**Supersedes by scope.** Supersedes D-0403's preliminary framing where the only deduction from a session\npayment was the 1% audit earmark against 99% miner payment.\n\n**Decision.**\n1. **Settlement fee split:** Every settled compute-channel session payment (`payable` at `settle`,\n   `certificate_settle`, or `force_settle → finalize`) is split **85% to the miner**\n   ([`inference_fee_miner_share_ppt`](../yellowpaper.md#param-inference_fee_miner_share_ppt) = 850 ppt) and **15% to validators**\n   ([`inference_fee_validator_share_ppt`](../yellowpaper.md#param-inference_fee_validator_share_ppt) = 150 ppt).\n2. **Audit fee earmark inside the validator leg:** The 1% audit pool earmark\n   ([`audit_fee_split_ppm`](../yellowpaper.md#param-audit_fee_split_ppm) = 10,000 ppm) sits *inside* the 15% validator leg,\n   funding the pool that pays `claim_audit_fee`. The remaining 14% is distributed across active\n   validators according to the §9 R9.5 committee-premium weighting (1.1× for finality committee members)\n   and is liquid on issue per D-0518.\n3. **Scope of R9.5:** Reword R9.5 to clarify that the prohibition on surcharges and second mints applies\n   to the *block-reward pool* (10% emission leg stays 10%). The 15% inference fee leg is an extrinsic\n   settlement fee, not an emission or dilution.\n4. **Self-dealing residual in E.38:** Re-derive the self-dealing recycling analysis: an operator\n   buying inference from itself recovers ~85% of escrow (after the 15% validator deduction), meaning\n   unlocking locked principal via self-inference incurs a ~15% economic cost, not ~0.75%.\n\n---"},{"name":"Section: D-0526","before":null,"after":"## D-0526 — Active-set cap and BABE authority alignment (1,000 active validators, 100 finalizers)\n\n**Status:** ratified 2026-10-15 (closes #1393 / YP E.41).\n\n**Context.** D-0437 (#1400) ratified `validator_active_set_cap = 1,000` in the yellowpaper and protocol\nparameters, but left open the authority-set sizing question (YP stub E.41). In the runtime,\n`MAX_ACTIVE_VALIDATORS` and `MaxAuthorities` were set to 200, while `ValidatorSessionManager::new_session`\npassed the entire active set to `pallet_session` untruncated. Any active set above 200 would have collided\nwith the BABE authority bound. Additionally, `ActiveValidators` storage was bounded by `ConstU32<10_000>`,\nwhich mismatched the ratified 1,000 active set cap.\n\n**Decision.**\n1. **Option (a) ratified:** Raise `MAX_ACTIVE_VALIDATORS` and `MaxAuthorities` to 1,000. Every active\n   validator is a BABE block authoring authority. Because BABE slot evaluation evaluates a private VRF\n   locally per slot with zero gossip round overhead, 1,000 authorities incur no interactive consensus\n   round messaging.\n2. **AlephBFT finality decoupled:** AlephBFT finality remains strictly bounded to the 100-member PoUI-gated\n   committee ([`finality_committee_size`](../yellowpaper.md#param-finality_committee_size) = 100, `AlephMaxCommittee` = 100).\n   The networking unit-gossip peer budget `ALEPH_SET_PEERS` in `pallet-relay-node` is sized to\n   `AlephMaxCommittee::get() + ALEPH_RELAY_HEADROOM` (150 peers) rather than 1,000, preventing redundant\n   gossip mesh allocations.\n3. **Storage bound alignment:** Align `ActiveValidators` storage bound from `ConstU32<10_000>` to\n   `ConstU32<1_000>`, verified with a decode-compatibility test against prior SCALE encodings.\n   `ValidatorQueue` preserves its registration capacity (`ConstU32<10_000>`) per yellowpaper §15.5 R15.5b.\n4. **Promotion enforcement:** When `ActiveValidators.len() == ActiveSetCap` (1,000), `rotate` cleanly\n   refuses promotion without panic or storage overflow, preserving candidate order in `ValidatorQueue`.\n\n---"},{"name":"Section: D-0527","before":null,"after":"## D-0527 — Miner airdrop unlock credits miner block rewards\n\n**Status:** ratified by the owner. The ruling is recorded in the body of #2625 (2026-10-12) and in\n§1 item 2 of outstanding-decisions, not in a review signature.\nSupersedes D-0517 item 1's exclusion of block\nrewards and the block-reward half of D-0517's rationale. The rest of D-0517 stands: a quarter at the\nstart block, no end block, the payout credit and its dispute-window rule, locked Miner principal usable\nonly as self-stake, slash attribution, and the Validator release. This documentation changes no\nruntime behavior; the implementation is #1175.\n\n**Context.** D-0517 item 1 credited a Miner grant only for the payouts its grantee receives as a\nchannel's miner. The terms the team gives counterparties count block rewards as well, and the\nprojection model's estimate of about four months to unlock at constant capacity holds only if they\ncount. The public airdrop page, generated from D-0517, gave a counterparty the opposite answer.\n\n**Decision.**\n\n1. A Miner grant's unlock credit accrues one FLOP per FLOP of either receipt:\n   1. the payout the grantee receives as the channel's miner, as D-0517 item 1 defines it and counted\n      as it says: once the settlement is finalized and the channel dispute window has passed with no\n      upheld fraud dispute;\n   2. the grantee's share of the miner leg of the block reward (`miner_share_ppt`, 75% of each block\n      reward) as actually minted to the grantee account in a block-reward distribution, counted once\n      the distribution block is finalized.\n2. No other receipt counts: the validator, agent and staker legs of the block reward, the\n   Labs/Foundation subsidy, transaction fees and tips, forward-availability payments, refunds,\n   penalties and dispute bonds. Each receipt counts once.\n3. The unlocked amount stays `min(P − S, ⌊P/4⌋ + credit)` with no end block. Whether a fraud verdict\n   upheld later reverses credit of either kind follows E.44.\n\n**Specification.** §8.2 R8.7.\n\n**Rationale & sources.** D-0517 gave two reasons to exclude block rewards. Both still describe the\nmechanism: the owner accepts the first, and the second is bounded by what the miner leg pays for.\n\n- *A clock.* The era-0 miner leg is 72 FLOP per block, about 6.22M FLOP a day. If the airdropped\n  miners earned all of it, block rewards alone would unlock the 900M locked tranche in about 145 days\n  whatever the demand; at the miner calculator's launch share (1,000 of 1,200 H100-equivalents) they\n  take about 174 days. The published \"about four months\" is this constant-capacity case with payouts\n  added. In the calculator's base case the network grows past the airdropped cohort, its share falls,\n  and the whole tranche unlocks by month 8. It is not a calendar clock: a grantee that stops doing\n  verified work stops unlocking, and its share of the leg falls as other miners' verified `G_n` grows.\n- *The synthetic-task floor.* `pallet_block_rewards` splits the miner leg pro rata to each miner's\n  `G_n` for the distribution period (`PeriodGn`), and its only writer is `pallet_flop_poui`'s\n  `OnProofVerified`: quorum-attested direct-rail proofs (synthetic and ghost, calibration) under R3.6b.\n  The simulator path that skips the quorum is compiled out of production runtimes. Block-reward credit\n  is therefore credit for verified capacity, including the synthetic-task bootstrap floor (§9.2), and\n  never for registered but idle hardware. Limiting the credit to that leg is the filter; no separate\n  one is needed. Minted rewards are liquid (R9.13) and nothing claws back credited `G_n` or a minted\n  reward, so credit counts at finality with no dispute-window lag. A future direct-rail clawback would\n  need a matching lag.\n- *Self-dealing.* Current-profile channel payout issues no public work credit and does not feed\n  `BlockRewards` (R11.2b), so wash demand through an agent the miner controls buys no block-reward\n  credit. It still buys payout credit, at the 15% validator-leg cost E.38 records (D-0525). If a later\n  profile lets channel payout earn public work credit (E.44), wash demand would also raise a grantee's\n  share of the miner leg; that case belongs to E.49. A validator leader grading ghost tasks for a\n  miner it controls is threat V8 and is unchanged.\n\nThe validator leg stays excluded because a Validator grant has its own release rule. Transaction fees\nstay excluded under either realization of R9.6: the interim one that pays the block author, and the\nratified target that attributes the miner share by `G_n`.\n\n---"},{"name":"Section: D-0528","before":null,"after":"## D-0528 — Sponsor-owned registration bonds count as self-stake on devnet and testnet\n\n**Status:** ratified by the owner on 2026-10-17 for devnet and testnet, in the brief for #2676. It settles\n#683 for those networks only; mainnet treatment stays open in E.32. #1361 (the capacity formula) also\nstays open, so grants are sized from the live on-chain requirement, never from a constant. SPEC-024\npositions keep their mainnet meaning.\n\n**Context.** Outside GPU miners began onboarding on devnet-ts on 2026-10-17. Each one needed the core team\nto transfer about 0.6–1M FLOP (a miner) or the 1.2M FLOP validator minimum (D-0440). A plain transfer is\nspendable: an agent could pose as a miner or validator and spend the grant on inference. SPEC-024 sponsor\npositions already kept principal in the sponsor account, but only as backing: they never satisfied the\nminer capacity bond or the validator floor, and they required an operator that had already registered\nwith its own funds.\n\n**Decision.**\n\n1. On devnet and testnet runtimes, active sponsored principal counts as the operator's self-stake:\n   toward the miner capacity bond (`required_self_stake_for`, `is_capacity_bonded`, the hw-calibration\n   bond check and the audit-forfeit base) and toward the validator effective minimum (queue promotion and\n   `rejoin`). On mainnet, sponsored stake stays backing and never satisfies self-stake. A build feature\n   (`sponsored-self-stake`, implied by the devnet `volta` build and by the `testnet` build) selects the\n   rule; on its own it is a compile error, and CI checks that the mainnet node build reports it off.\n   Governance cannot switch it.\n2. The bond is sponsor-owned and usable only as stake. It stays frozen in the sponsor account, so the\n   operator can never transfer it, pay fees with it, place it on hold or escrow, or back other stake with\n   it. It is slashable while active or unbonding, and it is refunded only to the sponsor, after the role's\n   unbonding window has elapsed on the finalized prefix. The slash-proceeds account may not post\n   principal that counts as self-stake, because slashing it would pay that account back. While it still\n   holds a live position from before the rule was enabled, no sponsored principal is credited at all\n   (fail closed) until that position is withdrawn. The bond stays at risk for slashing and exit.\n   Sponsor principal is the sponsor account's only staking freeze: an account with own stake, a\n   delegation or a freeze in the other staking pallet cannot sponsor, and a sponsor account cannot\n   self-stake or delegate in either pallet. When a running chain first enables the rule, positions\n   whose sponsor already holds another staking freeze are quarantined, and nothing is credited until\n   that scan finishes (it runs in bounded per-block batches) or while any quarantined position\n   remains live (fail closed).\n3. A sponsor may register an operator that holds no balance (`sponsor_register_miner`,\n   `sponsor_register_validator`), posting the whole bond. The bond must cover the live requirement:\n   `required_self_stake_for(miner)` for a miner, `effective_minimum_stake()` for a validator.\n   `sponsor_top_up` grows an existing position when the requirement rises.\n4. On devnet and testnet an operator's deregistration starts the unbonding of its active sponsor\n   positions, and the account cannot register again until they are withdrawn: a slash of the new\n   registration must never reach sponsors of the old one. The operator may withdraw them after the\n   finalized unlock, and may fully unbond a position that outlived its registration, so an absent\n   sponsor cannot lock it out. Because a sponsor may unbond while a validator is jailed, `un_jail`\n   first restores the bonded self-stake to the effective minimum from the validator's own spare\n   balance, as `rejoin` does. A sponsor can release its own position with `sponsor_unbond` and then\n   `sponsor_withdraw`. If that takes an active validator below the effective minimum, the validator\n   goes back to the queue, and the unbond waits while that would cross the minimum active set; an\n   author never keeps its seat without collateral.\n5. The validator self-stake ratio for native delegation counts operator-owned stake only, so a fully\n   sponsored validator accepts no native delegation.\n6. Chain state and events report own stake (`self_stake`, zero when fully sponsored) separately from\n   sponsored stake. A sponsored bond creates no allocation right (R8.4).\n\n**Specification.** §6.1 R6.1a; §2.3; §15.2; Appendices E.32, G.3 and H.1.\n\n**Rationale & sources.**\n\n- *Ownership instead of a lock on the operator.* Freezes and fungible holds overlap in FRAME, so frozen\n  funds in the operator's account could still be consumed by inference escrow. Keeping the principal in\n  the sponsor account closes every operator path at once and reuses the SPEC-024 slash and refund\n  machinery unchanged.\n- *One staking freeze per sponsor.* An account's frozen amount is its largest freeze, not their sum. A\n  sponsor backing a miner and a validator with the same funds would pass any admission check that sums\n  freezes, and could then transfer the smaller bond away (#2770 review). Exclusivity closes that without\n  a storage change, a shared freeze id or a move to holds.\n- *All sponsored stake counts.* A separate position kind for registration bonds would change a stored type\n  and need a migration, with no devnet or testnet behavior that depends on the distinction.\n- *Mainnet authority unchanged.* Item 4 applies only where the rule is enabled, so on mainnet only the\n  sponsor can start a refund (E.32).\n- *A dedicated build feature.* Tying the rule to `volta` alone would make a testnet build enable\n  simulator-mode crediting to get it.\n- *Residual risks, recorded in E.32 and H.1.*\n  - A sponsor's own fungible hold over its frozen principal would make a later slash transfer fail. The\n    slash then fails atomically, and so does the dispatch that needs it: a channel `finalize` that\n    forfeits audit stake cannot complete until the hold is released. The same gap applies to self-stake\n    and delegator freezes, so the sponsor service uses dedicated accounts that do nothing else.\n  - The operator still needs a small, spendable balance for the existential deposit, fees and session\n    keys.\n  - A sponsor account holds at most 64 live positions.\n  - Rotation or slash ejection leaves positions active, and the sponsor unbonds them.\n  - A validator offence reported after deregistration cannot reach its unbonding positions, as it cannot\n    reach a validator's own stake today.\n\n**Alternatives rejected.**\n\n- A plain transfer: the operator could spend it.\n- Transfer plus a freeze in the operator account: holds and fees could consume it.\n- A position-kind marker: a storage migration for no behavioral gain.\n- Moving all sponsor principal into a pallet escrow account: it changes the balance model of every\n  existing position.\n\n---"},{"name":"Section: D-0529","before":null,"after":"## D-0529 — Zero burn across all protocol paths\n\n**Status:** ratified by the owner (executive ruling by Shu, 2026-09-22; #1945, #2792). Supersedes the interim 10% transaction-fee burn in §9.1 R9.6 and the 80/10/10 transaction-fee burn target, and replaces \"full-burn\" terminology on slash paths (`D-0409`, `D-0420`).\n\n**Context:** Earlier drafts of §9.1 R9.6 and `params/flop-protocol-params.yaml` retained an interim 10% transaction-fee burn (`tx_fee_burn_percent_live = 10`, `BurnFees = Percent::from_percent(10)`) and described 100% fraud/equivocation slashes in §11.3, §13.2, and §15.7 as \"100% burn\" or \"full-burn fault class\", even though R9.10 and the runtime already transferred slash proceeds to `FLOPFoundationAccount`.\n\n**Decision:**\n\n1. **Zero transaction-fee burn:** `tx_fee_burn_percent_live` is `0%` (`BurnFees = Percent::from_percent(0)`). `tx_fee_author_share_percent_live` is `100%` (`AllFeesToAuthor = Percent::from_percent(100)`): 100% of the live base, encoded-length, and adjusted-weight transaction inclusion fee and 100% of tips route to the block author.\n2. **Zero inference-fee burn:** Session settlement fees carry 0% burn and no platform take, splitting 85% to the compute miner and 15% to the validator pool (including the 1% audit pool earmark per D-0525).\n3. **Zero slash burn (100% Foundation routing):** No slashed collateral or failed-session penalty is burned across any validator or miner fault path. 100% of slashed stakes route to the protocol-derived `FLOPFoundationAccount` (§9.3 R9.10). Fault classes with a 100% penalty (`slash_fraud_percent = 100%`) are full-slash fault classes routed to `FLOPFoundationAccount`.\n\n**Specification:** §9.1 R9.6, §9.3 R9.10, §11.3, §13.2, §15.7; Appendices A, D, H; `params/flop-protocol-params.yaml` (`tx_fee_burn_percent_live`, `tx_fee_author_share_percent_live`, `slash_fraud_percent`); `pallets/runtime/zkverify/src/payout_conf.rs`.\n\n---"},{"name":"Section: D-0530","before":null,"after":"## D-0530 — Operator self-stake only and duration-locked community staking pool\n\n**Status:** ratified by the owner (executive ruling by Shu, 2026-09-08; #2792). Supersedes third-party operator delegation and commission provisions in `D-0408` and §6.1 / §11.3 / §15.2.\n\n**Context:** The v0.4/v0.5 draft inherited third-party stake delegation into validators and miners (`pallet_validators::delegate`, `pallet_miner_staking::delegate`, `max_delegators_per_miner = 10,000`, `miner_commission_cap_percent = 20%`, `register_miner(commission)`, and `pallet_delegation_cap`). Allowing passive holders to back an operator's position for a share of its rewards creates transferable/custodied third-party operator positions and exposes non-operating holders to operator slashing waterfalls.\n\n**Decision:**\n\n1. **Operator self-stake only:** Validator stake (the 1,200,000 FLOP bond floor, [`validator_min_stake`](../yellowpaper.md#param-validator_min_stake)) and miner stake (the capacity-proportional self-stake requirement of §6.1) are **self-stake only**. A FLOP holder cannot delegate to or back a validator's or miner's stake for a share of its rewards, and no such third-party position exists to buy, sell, or custody.\n2. **Deprecation of operator delegation and commissions:** Third-party delegation extrinsics (`miner_staking::delegate`, `miner_staking::set_commission`, `validators::delegate`), delegation caps (`max_delegators_per_miner`, `pallet_delegation_cap`), operator commission parameters (`miner_commission_cap_percent`, the `commission` argument of `miner_staking::register_miner`), and third-party delegator loss waterfalls are deprecated and superseded. Operator rewards route directly to operator accounts without commission cuts.\n3. **Duration-locked community staking pool (5% block-reward leg):** FLOP holders who do not operate hardware participate exclusively through the **duration-locked community staking pool**, which shares the [`staker_share_ppt`](../yellowpaper.md#param-staker_share_ppt) = 5% (50 ppt) block-reward allocation across seven lock duration tiers with **zero slashing risk** and no validator or miner intermediary. Its security contribution is circulating supply lockup; exact tier weights and claim distribution mechanics remain tracked under E.40 (§9.1 R9.12).\n\n**Specification:** §2.3, §6.1, §9.1 R9.12, §11.3, §15.2, §15.5; Appendices A, C.1, D, E.32, E.40, G.3, H; `params/flop-protocol-params.yaml` (`miner_commission_cap_percent`, `max_delegators_per_miner`, `staker_share_ppt`).\n\n---"},{"name":"Section: D-0531","before":null,"after":"## D-0531 — Off-chain referral leaderboard and lottery program\n\n**Status:** ratified by the owner (executive ruling by Shu, 2026-09-23; Arthur, 2026-09-24; #1358, #2792). Closes #1358.\n\n**Context:** Earlier tokenomics workbook drafts proposed an on-chain referral commission structure taking 6–10% of a referred miner's inference earnings and 10% of a referred agent's spend. On-chain fee rebates and multi-tier referral cuts distort settlement economics and invite self-referral wash loops.\n\n**Decision:**\n\n1. **No on-chain referral commissions:** The legacy 6–10% miner referral commission and 10% agent-spend referral commission are superseded. The protocol takes no referral commission cut from inference settlements or block rewards, and referrals are strictly single-tier (validators cannot be referred).\n2. **Public explorer leaderboard & periodic referral lotteries:** Creators register with a verified email, a FLOP wallet, and verified social handles (X, Instagram, TikTok, YouTube, or Naver) to receive a unique referral link. The network explorer publishes a public leaderboard tracking referred wallets created, total FLOP held, and period-on-period changes in FLOP held, inference paid, and HTLC escrow paid (ranked on network usage during testnet and net change in FLOP held at mainnet). Leading creators receive periodic payouts proportional to their cohort share of FLOP held, and a fixed number of referred wallets are drawn at random each period for equal lottery prizes.\n3. **Ecosystem reserve funding:** Both creator leaderboard payouts and periodic referral lotteries are funded from the 800,000,000 FLOP [`genesis_reserve`](../yellowpaper.md#param-genesis_reserve) inside the genesis pool (§9.1 R9.4, alongside builder programmes and security-disclosure rewards) and settled off-chain to verified wallets.\n\n**Specification:** §9.1 R9.4, Appendices A, E.38; `params/flop-protocol-params.yaml` (`genesis_reserve`).\n\n---"},{"name":"Section: D-0532","before":null,"after":"## D-0532 — Miner capacity bond: one unit, window inside the coefficient, value set against a security envelope\n\n**Status:** proposal pending ratification (#1361). Amends D-0418; does not supersede its curve shape.\nNothing changes in the runtime, `params/` or published surfaces until the owner ratifies it and the\nactivation gates below are met.\n\n**Context.** #1361 found three miner capacity-stake numbers in circulation. They reduce to one formula\nand one implementation error (analysis):\n\n- D-0418 and §6.1 require `10,000 + k·B_p`, with `k = 0.01` FLOP per G_n/s of calibrated cap. The\n  calibration behind `k` already integrates the 604,800-block dispute window.\n- The workbook's 19,890 FLOP per H100-eq unit is that formula with H100 SXM peak (989,000) standing\n  in for calibrated `B_p`.\n- The runtime (#643, specified in #633 as a settlement-exposure bound) computes\n  `10,000 + 0.01·B_p·604,800·1.25`. It uses D-0418's per-G_n/s coefficient as a per-G_n rate, which\n  counts the window twice and adds surge: 7,560 FLOP per G_n/s, 756,000× the ratified requirement.\n  An 8× H200 host at 40% of peak would need 23.9B FLOP. That is more than the 18.47B FLOP issued by\n  the end of era 6 (genesis 4.40B, block emission 12.11B, developer subsidy 1.96B), so real-hardware\n  calibration (#2850) cannot be bonded.\n\nThe bound was re-derived with today's parameters and the 2026-10 consult's corrections: rewards\ndivide by credited work, rewards are liquid, and settlement exposure is part of the gain. For emission\nfraud the floor is `k_min = P·W/(c·T)`, with `P·W` = 43.5M FLOP of miner pot per window in era 0,\n`c` the effective catch probability and `T` the network credited throughput. The gain never exceeds\n`P·W`, so the uncapped linear curve over-deters at the top, and D-0418's no-cap invariant stands.\n\n**Decision (proposed):**\n\n1. **One unit.** The capacity coefficient is FLOP per G_n/s of **calibrated** cap `B_p`. The exposure\n   window is inside the coefficient (`k` is sized against gain over the window). The requirement\n   **MUST NOT** multiply by the revocation or dispute window again.\n2. **Surge is a separate margin.** `σ = miner_stake_surge_multiplier_ppm / 10⁶ ≥ 1` multiplies only the\n   capacity term:\n   `required_self_stake(B_p) = min_miner_self_stake + σ·k·B_p`.\n   Whether `σ` applies to every cap or only to provisional/SOFT caps stays with E.33. Until then it\n   applies to every cap, as the runtime does now.\n3. **The value of `k` is set at activation, not here.** A later owner decision sets `k`, citing\n   evidence that it satisfies the security envelope (item 4). The candidate to validate first is\n   `k = 0.25` FLOP per G_n/s (`VFY/4`) with `σ = 1.25`. At 40% of peak that is: 1× RTX 4090 30,625;\n   1× H100 SXM 133,625; 8× H200 999,000; 8× B200 2,260,000 FLOP. Analytically it deters liquid,\n   all-fake emission fraud once credited throughput exceeds about 1.9e8 G_n/s at `c = 0.9`\n   (7.0e8 at `c = 0.25`). That is a sensitivity result, not a demonstrated bound: `c` is unmeasured,\n   and enforced detection is dispute-only today.\n4. **Security envelope and activation gates.** The runtime keeps today's requirement until a value of\n   `k` is shown to satisfy `c_lower · s · S_available ≥ G_max` throughout operation, where:\n   - `c_lower` is a conservative bound on detection, adjudication **and collection**, not a sampling\n     rate;\n   - `G_max` is total retained emission **and settlement** gain, including concurrent and unresolved\n     exposure, with no collateral counted twice;\n   - the time until fraudulent crediting stops is bounded, and collateral is retained through\n     dispute resolution;\n   - enforcement continues after activation: stale measurements, falling credited throughput or failed\n     detection liveness block new uncovered exposure, including during bootstrap.\n\n   The evidence must also include:\n   - real-inference calibration (#2850), active or activating in the same upgrade;\n   - aggregate cap enforcement across a miner's concurrent channels;\n   - measured detection liveness;\n   - a reproducible adversarial analysis with runtime tests covering bootstrap, low utilization,\n     coalitions and capacity exits, with uncertainty margins, where leaving the validated envelope\n     fails closed.\n\n   Activation is a separate owner decision, recorded in Appendix H.\n5. **Alignment, after ratification and activation:**\n   - runtime: drop `RevocationLatencyBlocks` from `required_self_stake` and set `CapacityStakePerGflop`;\n   - `params/` (`miner_capacity_stake_per_gflop`, the revocation and surge descriptions), then\n     `just verify-params`, the simulator mirror and `check_params.py`;\n   - the miner-worker bond sizing and faucet sponsor sizing, which mirror the runtime formula and\n     move with it;\n   - the Lean `stake_covers_settlement_exposure` statement and the Quint miner-staking spec;\n   - §6.1, Appendices A and C.1, and the workbook (Projection Input §2), which should use calibrated\n     `B_p` instead of peak spec;\n   - the published surfaces that quote 7,560 FLOP per G_n/s: the knowledge pages, the intro and\n     params pages, the onboarding docs and the runbooks.\n\n**Rejected:**\n\n- *Keep the runtime formula.* Hardware-scale caps cannot be bonded.\n- *Keep `k = 0.01`.* It deters only above about 4.8e9 G_n/s credited at `c = 0.9`.\n- *Ratify `k = 0.25` now.* Bondability and conditional thresholds do not establish deterrence while\n  `c` is unmeasured (2026-10 consult).\n- *Settlement-exposure sizing (cap × window × price per G_n).* The model-registry base price\n  (0.003 FLOP/G_n) is devnet-scale: at that price a week of 8× H200 service bills about 5.7B FLOP. It\n  needs its own recalibration, and settlement exposure is bounded by escrow and aggregate cap\n  enforcement, not by this bond.\n- *A cap or sublinear curve.* Unnecessary, since the gain is bounded by `P·W`, and D-0418 rejects it.\n\n**Owner decision requested:**\n\n1. Ratify the unit and window placement now (items 1–2).\n2. Adopt `k = 0.25` as the candidate to validate, or name another; 0.05 and 1.0 are tabulated in the\n   analysis.\n3. Approve the security envelope and gates (item 4), which fund the adversarial analysis that sets\n   `k`.\n\n**Specification:** §6.1, Appendices A, C.1, E.33, H; `params/flop-protocol-params.yaml`\n(`miner_capacity_stake_per_gflop`, `miner_stake_revocation_latency_blocks`,\n`miner_stake_surge_multiplier_ppm`); analysis.\n\n---"},{"name":"Section: D-0533","before":null,"after":"## D-0533 — Model-registry base price per G_n: a reference set against emission at a reference throughput\n\n**Status:** proposal pending ratification (follow-up to #1361 and D-0532). Nothing changes in the\nruntime, `params/` or published surfaces until the owner ratifies the method and a later decision\nsets the value at activation.\n\n**Context.** `ModelRegistryBasePricePerGFLOP` = 0.003 FLOP per `G_n` was sized for devnet throughput\n(about 1e3 `G_n/s` network-wide). Its only stated derivation is a simulator input denominated in USD\nper GFLOP (analysis).\n\nReal-inference calibration (#2850) puts caps near 1e5–1e7 `G_n/s` per host. At 0.003, one 8× H200\nhost at 40% of peak bills about 9,500 FLOP/s. That is 132× the whole era-0 miner pot, or 5.74B FLOP\nper week against 18.47B FLOP issued by the end of era 6.\n\nThe price does four jobs today:\n- it is the gateway's de facto bill: gateway escrow is estimated `G_n` × epoch price, and a\n  cooperative settle pays the whole escrow;\n- it sets the `certificate_settle` floor;\n- it is every new model's default price;\n- base/10 floors publisher overrides.\n\nThe market factor is inert: `Permill::from_percent(200)` saturates at 100%, so the epoch price\nalways equals the model's price.\n\n**Decision (proposed):**\n\n1. **Method (to ratify).** The base price is a FLOP-denominated reference, not a peg:\n   `p_ref = φ · P_m(e) / T_ref`. It is the era-`e` miner emission per credited `G_n` at a reference\n   network throughput `T_ref`, scaled by `φ`, the ratio of gross fees to the miner emission pot.\n   - No exchange rate enters.\n   - The emission rate is the design reference D-0532 uses. Channel payouts do not earn it today\n     (E.44).\n2. **Benchmark (to validate, not ratified).**\n   - The inputs are `φ = 1` and `T_ref` = 500 H100-equivalent units (the workbook's testnet T3 basis)\n     × 740,140 `G_n/s` × 40% = 1.48e8 `G_n/s`.\n   - That gives 4.86e-7, so the benchmark is **5e-7 FLOP per `G_n`** (`VFY / 2_000_000`,\n     500,000,000,000 base units).\n   - `T_ref` is a scenario, not measured throughput. The parity price scales as `1/u` (1.95e-6 at\n     10% utilization). On a PCIe-equivalent unit instead of the measured SXM unit, it is about\n     6.4e-7.\n   - At 5e-7: a 70B-class 1k-token request costs 0.07 FLOP, an 8× H200 host-week bills 0.96M FLOP,\n     and the publisher floor is 5e-8.\n3. **Bounds on `φ` (analysis, not ratified).** Let `m` be the miner share of a settlement payment:\n   0.85 under ratified D-0525, 0.99 in today's runtime.\n   - **Bond.** If D-0532's envelope counts settlement gain at `p_ref`, the bond must cover\n     `(1 + mφ)·k_min(T_ref)`. Holding that to 1.0 FLOP per `G_n/s` at `c = 0.9` gives\n     `φ ≤ ~2`.\n   - **Wash demand.** Fee leakage deters it only at `φ ≥ 1/(1−m)` (6.7 to 100), and only if credit\n     checked the price paid, which it does not. The base price makes no claim against wash demand;\n     that stays with E.49.\n4. **Activation (a separate owner decision).** The activated value cites:\n   - measured eligible credited throughput (indexer realized index, settled `G_n`) and #2850 caps;\n   - the reward and fee split live at activation (E.44 credit, D-0525 `m`);\n   - migration of existing `avg` and epoch prices, outstanding gateway quotes and open certificate\n     channels;\n   - minimum-escrow, existential-deposit and rounding boundaries;\n   - audit funding at measured claim frequency and cost.\n\n   The value is revisited at each halving (`φ` doubles at constant throughput), or when realized\n   credited throughput leaves `[T_ref/10, 10·T_ref]`.\n5. **D-0532 coupling.**\n   - Settlement exposure stays bounded by escrow and aggregate cap enforcement, as D-0532 states.\n   - The adversarial analysis that sets D-0532's `k` adds a settlement term: `m × (escrow a miner can\n     collect in W)`. That counts gateway estimates, publisher prices above `p_ref`, and contract\n     prices. At exactly `p_ref` it equals `m·φ·k_min(T_ref)` per `G_n/s` (0.29–0.33 at the benchmark,\n     `c = 0.9`), and it does not fall as throughput grows.\n   - The base-price change and D-0532 activation ship in the same upgrade or in a fixed order.\n     Otherwise hardware-scale caps would meet a 0.003 gateway bill.\n6. **Coupled items (each a separate owner decision):**\n   - `rate_G` and `channel_base_per_turn` (E.24), today 1e-18 FLOP per `G_n`, with `p_ref` as the\n     natural reference;\n   - audit funding (earmark, `audit_fee_per_turn`, claim frequency), which must stay solvent without\n     lowering `c`;\n   - the simulator mirror, which becomes a FLOP-denominated input.\n7. **Alignment, after activation:**\n   - the runtime constant and `param_consts.rs`;\n   - `#[pallet::constant]` exposure;\n   - the market-factor unit fix (or removal of `MaxMarketFactorPercent`);\n   - promotion into `params/flop-protocol-params.yaml` with a `check_params.py` entry, then\n     `just verify-params`;\n   - a reset of every registered model's `avg` and epoch price;\n   - the docs that quote 0.003.\n\n**Rejected:**\n\n- *Keep 0.003.* One host bills 132× the miner pot, a single 70B-class request exceeds\n  `agent_per_tx_limit`, and the base/10 floor blocks hardware-scale publisher prices.\n- *Halve the base with emission.* Pegs fees to the subsidy.\n- *Size from the bond (`k/(W·σ)`).* Makes the bond the price oracle.\n- *Tier multipliers per `G_n`.* `G_n` per token already scales with model size.\n- *Ratify 5e-7 now.* `T_ref` is a scenario, and both channel reward credit and the D-0525 split are\n  unimplemented (2026-10 consult).\n- *Price high enough to deter wash.* Unbondable under D-0532, and ineffective without a price gate on\n  credit.\n\n**Owner decision requested:**\n\n1. Ratify the method (item 1).\n2. Adopt 5e-7 FLOP per `G_n` as the benchmark to validate, or name another `φ`, `T_ref` or\n   utilization.\n3. Approve the activation evidence, the D-0532 coupling and the activation order (items 4–5).\n\n**Specification:** §12.1 R12.1d, Appendices A, E.24, E.44, E.49; `pallets/runtime/zkverify/src/lib.rs`\n(`ModelRegistryBasePricePerGFLOP`, `ModelRegistryMaxMarketFactorPercent`); `params/system-settings.yaml`;\nanalysis."},{"name":"Section: FLOP Yellow Paper — Decision Record · v0.5 [after start] / Index [after start]","before":"## Index\n\n| Decision | Scope | Status | Specification |\n|---|---|---|---|\n| [D-0501](#d-0501--public-claim-scope-and-reproducible-evidence) | Initial public claim scope, proof assumptions, evidence, and conformance | Draft for initial publication | [Yellowpaper](../yellowpaper.md), §0–§5, §9–§15, Appendices E–H |\n| [D-0502](#d-0502--withdraw-unmeasured-capacity-and-latency-profile) | Capacity and latency claim disposition | Proposal — pending ratification | [Yellowpaper](../yellowpaper.md), §2.2, §5.2–§5.3, §12.1, E.46 |\n| [D-0505](#d-0505--canonical-wire-and-accounting-profile) | Canonical encoding, rejection, replay domains, legacy cutoff, and `G_n` representation | Draft for initial publication | [Yellowpaper](../yellowpaper.md), §4, Appendices F–H |\n| [D-0507](#d-0507--post-testnet-genesis-validator-selection-and-placement-admission) | Genesis composition of the first active set, placement admission, per-domain cap | Proposal — pending ratification | [Yellowpaper](../yellowpaper.md), §15.2, §15.5, E.41 |\n| [D-0508](#d-0508--rotation-on-underperformance-floor-based-ejection-and-on-chain-performance-signal) | Floor-based ejection, on-chain performance signal, rotation throughput | Proposal — pending ratification | [Yellowpaper](../yellowpaper.md), §15.4, §15.5 |\n| [D-0509](#d-0509--committee-session-cadence-aligned-to-the-babe-epoch) | `AlephEpochBlocks` 900 → BABE epoch (3,600) | Proposal — pending ratification; consensus safety zone | [Yellowpaper](../yellowpaper.md), §2.2, §15.4 |\n| [D-0510](#d-0510--bootstrap-nodes-and-the-public-discovery-plane) | Bootnodes as a launch requirement: count, placement, node keys, chain-spec wiring, unique `protocol_id` | Proposal — pending ratification | bootnodes.md |\n| [D-0506](#d-0506--paid-agent-memory-and-validator-data-services) | Paid encrypted application storage and retrieval, validator revenue, authority and liability | Draft; activation profile pending E.54 | [Yellowpaper](../yellowpaper.md), §5.4, Appendices D–H |\n| [D-0511](#d-0511--one-canonical-compute-channel-transcript-and-receipt-definition) | One canonical compute-channel transcript and receipt definition | Draft for initial publication | [Yellowpaper](../yellowpaper.md), §6.5, §12.1, Appendix C.3–C.4, Appendix F.3 |\n| [D-0512](#d-0512--development-network-exception-to-the-paid-storage-activation-gate) | Paid storage on development networks ahead of E.54 | Ratified 2026-09-25 (owner); development networks only | [Yellowpaper](../yellowpaper.md), §5.4 R5.4k, R5.4q; Appendices E.54, H.3 |\n| [D-0513](#d-0513--one-generic-ss58-prefix-on-every-flop-network) | Account-address prefix: generic Substrate `42` on every FLOP network; networks told apart by genesis hash | Ratified 2026-09-29 (owner) | [Yellowpaper](../yellowpaper.md), §6.5 R6.5a, §9.3 R9.8 |\n| [D-0514](#d-0514--era-t-conversion-rules-and-a-fail-closed-miner-adjustment) | Era-T conversion: supply, eligibility and scoring inputs, snapshot of record; the miner airdrop adjustment fails closed on missing performance data | Ratified 2026-09-29 (owner) | [Yellowpaper](../yellowpaper.md), §8.2 R8.3–R8.5, R8.7; Appendices E.38, H.4 |\n| [D-0515](#d-0515--airdrop-grant-landing-claims-and-locked-compute-spend) | Airdrop grants funded once as frozen genesis balances; finalized-head claims; locked principal spendable only on four compute calls | Ratified 2026-09-29 (owner) | [Yellowpaper](../yellowpaper.md), §8.2 R8.6, R8.8; Appendix H.4 |\n| [D-0517](#d-0517--airdrop-unlock-miner-earn-to-unlock-validator-halving-release) | Miner grant a quarter at genesis, the rest 1:1 against finalized inference settlement; Validator grant frozen to the first halving, then one per day; locked Miner principal usable only as self-stake, locked Validator principal immobile | Ratified 2026-09-30 (owner) | [Yellowpaper](../yellowpaper.md), §8.2 R8.7, R8.8; Appendix E.38, H.4 |\n| [D-0518](#d-0518--block-rewards-and-the-subsidy-are-liquid-on-issue) | Miner and validator block-reward legs and the Labs/Foundation subsidy liquid on issue, agent-leg payouts liquid once E.40 ratifies; validator earnings no longer auto-compound | Ratified 2026-09-30 (owner) | [Yellowpaper](../yellowpaper.md), §9 R9.2, R9.13; Appendix D, E.40, H.4 |\n| [D-0519](#d-0519--service-lane-close-boundary-claim-window-and-provider-only-redemption) | Paid-storage service lanes: close boundary, a claim window on the finalized prefix, bounded post-close exposure, provider-only redemption | Ratified 2026-10-04 (owner); activation profile pending E.54 | [Yellowpaper](../yellowpaper.md), §5.4 R5.4g, R5.4j; Appendices E.54, F.7, G.4 |\n| [D-0522](#d-0522--agent-airdrop-spend-to-unlock) | Agent grant unlocks one FLOP per three FLOP of locked principal in settled `payable`s, spend capped at three quarters of principal, locked-first payout and refund; no end block | Ratified 2026-10-05 (owner); spend cap and attribution await owner confirmation in review | [Yellowpaper](../yellowpaper.md), §8.2 R8.7, R8.8; Appendices E.38, H.4 |\n\n| [D-0523](#d-0523--dormant-htlc-timeout-burn) | Default-zero HTLC burn implementation and proposed activation semantics | Proposal — pending ratification; not activated | [Yellowpaper](../yellowpaper.md), §10, E.48 |\n\n| [D-0524](#d-0524--slot-and-tranche-position-rent) | Rent rounding per slot and funding tranche, historical replacement entitlements and payer dust refunds | Ratified 2026-10-07 (owner); activation profile pending E.54 | [Yellowpaper](../yellowpaper.md), §5.4 R5.4e/f; Appendices E.54, F.7, G.4 |\n\n---","after":"## Index\n\n| Decision | Scope | Status | Specification |\n|---|---|---|---|\n| [D-0501](#d-0501--public-claim-scope-and-reproducible-evidence) | Initial public claim scope, proof assumptions, evidence, and conformance | Draft for initial publication | [Yellowpaper](../yellowpaper.md), §0–§5, §9–§15, Appendices E–H |\n| [D-0502](#d-0502--withdraw-unmeasured-capacity-and-latency-profile) | Capacity and latency claim disposition | Proposal — pending ratification | [Yellowpaper](../yellowpaper.md), §2.2, §5.2–§5.3, §12.1, E.46 |\n| [D-0505](#d-0505--canonical-wire-and-accounting-profile) | Canonical encoding, rejection, replay domains, legacy cutoff, and `G_n` representation | Draft for initial publication | [Yellowpaper](../yellowpaper.md), §4, Appendices F–H |\n| [D-0507](#d-0507--post-testnet-genesis-validator-selection-and-placement-admission) | Genesis composition of the first active set, placement admission, per-domain cap | Proposal — pending ratification | [Yellowpaper](../yellowpaper.md), §15.2, §15.5, E.41 |\n| [D-0508](#d-0508--rotation-on-underperformance-floor-based-ejection-and-on-chain-performance-signal) | Floor-based ejection, on-chain performance signal, rotation throughput | Proposal — pending ratification | [Yellowpaper](../yellowpaper.md), §15.4, §15.5 |\n| [D-0509](#d-0509--committee-session-cadence-aligned-to-the-babe-epoch) | `AlephEpochBlocks` 900 → BABE epoch (3,600) | Proposal — pending ratification; consensus safety zone | [Yellowpaper](../yellowpaper.md), §2.2, §15.4 |\n| [D-0510](#d-0510--bootstrap-nodes-and-the-public-discovery-plane) | Bootnodes as a launch requirement: count, placement, node keys, chain-spec wiring, unique `protocol_id` | Proposal — pending ratification | bootnodes.md |\n| [D-0506](#d-0506--paid-agent-memory-and-validator-data-services) | Paid encrypted application storage and retrieval, validator revenue, authority and liability | Draft; activation profile pending E.54 | [Yellowpaper](../yellowpaper.md), §5.4, Appendices D–H |\n| [D-0511](#d-0511--one-canonical-compute-channel-transcript-and-receipt-definition) | One canonical compute-channel transcript and receipt definition | Draft for initial publication | [Yellowpaper](../yellowpaper.md), §6.5, §12.1, Appendix C.3–C.4, Appendix F.3 |\n| [D-0512](#d-0512--development-network-exception-to-the-paid-storage-activation-gate) | Paid storage on development networks ahead of E.54 | Ratified 2026-09-25 (owner); development networks only | [Yellowpaper](../yellowpaper.md), §5.4 R5.4k, R5.4q; Appendices E.54, H.3 |\n| [D-0513](#d-0513--one-generic-ss58-prefix-on-every-flop-network) | Account-address prefix: generic Substrate `42` on every FLOP network; networks told apart by genesis hash | Ratified 2026-09-29 (owner) | [Yellowpaper](../yellowpaper.md), §6.5 R6.5a, §9.3 R9.8 |\n| [D-0514](#d-0514--era-t-conversion-rules-and-a-fail-closed-miner-adjustment) | Era-T conversion: supply, eligibility and scoring inputs, snapshot of record; the miner airdrop adjustment fails closed on missing performance data | Ratified 2026-09-29 (owner) | [Yellowpaper](../yellowpaper.md), §8.2 R8.3–R8.5, R8.7; Appendices E.38, H.4 |\n| [D-0515](#d-0515--airdrop-grant-landing-claims-and-locked-compute-spend) | Airdrop grants funded once as frozen genesis balances; finalized-head claims; locked principal spendable only on four compute calls | Ratified 2026-09-29 (owner) | [Yellowpaper](../yellowpaper.md), §8.2 R8.6, R8.8; Appendix H.4 |\n| [D-0517](#d-0517--airdrop-unlock-miner-earn-to-unlock-validator-halving-release) | Miner grant a quarter at genesis, the rest 1:1 against finalized inference settlement; Validator grant frozen to the first halving, then one per day; locked Miner principal usable only as self-stake, locked Validator principal immobile | Ratified 2026-09-30 (owner) | [Yellowpaper](../yellowpaper.md), §8.2 R8.7, R8.8; Appendix E.38, H.4 |\n| [D-0518](#d-0518--block-rewards-and-the-subsidy-are-liquid-on-issue) | Miner and validator block-reward legs and the Labs/Foundation subsidy liquid on issue, agent-leg payouts liquid once E.40 ratifies; validator earnings no longer auto-compound | Ratified 2026-09-30 (owner) | [Yellowpaper](../yellowpaper.md), §9 R9.2, R9.13; Appendix D, E.40, H.4 |\n| [D-0519](#d-0519--service-lane-close-boundary-claim-window-and-provider-only-redemption) | Paid-storage service lanes: close boundary, a claim window on the finalized prefix, bounded post-close exposure, provider-only redemption | Ratified 2026-10-04 (owner); activation profile pending E.54 | [Yellowpaper](../yellowpaper.md), §5.4 R5.4g, R5.4j; Appendices E.54, F.7, G.4 |\n| [D-0521](#d-0521--usage-pins-protect-both-da-retention-classes) | Usage pins prevent pruning of Ephemeral and Leased blobs without extending expiry | Task #2228 implementation decision | [Yellowpaper](../yellowpaper.md), §5.3 R5.3d |\n| [D-0522](#d-0522--agent-airdrop-spend-to-unlock) | Agent grant unlocks one FLOP per three FLOP of locked principal in settled `payable`s, spend capped at three quarters of principal, locked-first payout and refund; no end block | Ratified 2026-10-05 (owner); spend cap and attribution await owner confirmation in review | [Yellowpaper](../yellowpaper.md), §8.2 R8.7, R8.8; Appendices E.38, H.4 |\n\n| [D-0523](#d-0523--dormant-htlc-timeout-burn) | Default-zero HTLC burn implementation and proposed activation semantics | Proposal — pending ratification; not activated | [Yellowpaper](../yellowpaper.md), §10, E.48 |\n\n| [D-0524](#d-0524--slot-and-tranche-position-rent) | Rent rounding per slot and funding tranche, historical replacement entitlements and payer dust refunds | Ratified 2026-10-07 (owner); activation profile pending E.54 | [Yellowpaper](../yellowpaper.md), §5.4 R5.4e/f; Appendices E.54, F.7, G.4 |\n| [D-0525](#d-0525--inference-fee-split-85-miner--15-validator) | Inference fee settlement split: 85% miner / 15% validator, 1% audit earmark inside the validator leg | Ratified 2026-10-14 (owner) | [Yellowpaper](../yellowpaper.md), §9 R9.5, §12.1 R12.1a/d; Appendices D, E.38, F.3, H.5 |\n| [D-0526](#d-0526--active-set-cap-and-babe-authority-alignment-1000-active-validators-100-finalizers) | Active-set cap and BABE authority alignment (1,000 active validators, 100 finalizers) | Ratified 2026-10-15 (closes #1393 / YP E.41) | [Yellowpaper](../yellowpaper.md), §2.2, §15.2, §15.4, §15.5, E.41 |\n| [D-0527](#d-0527--miner-airdrop-unlock-credits-miner-block-rewards) | Miner grant unlock credit counts the grantee's minted miner-leg block rewards, at finality, alongside its settled payouts; supersedes D-0517 item 1 | Ratified 2026-10-12 (owner; #2625) | [Yellowpaper](../yellowpaper.md), §8.2 R8.7 |\n| [D-0528](#d-0528--sponsor-owned-registration-bonds-count-as-self-stake-on-devnet-and-testnet) | Sponsor-owned, stake-only registration bonds count as operator self-stake on devnet and testnet only, refunded to the sponsor; mainnet unchanged | Ratified 2026-10-17 (owner; #2676, settles #683 for devnet/testnet) | [Yellowpaper](../yellowpaper.md), §2.3, §6.1 R6.1a, §15.2; Appendices E.32, G.3, H.1 |\n| [D-0529](#d-0529--zero-burn-across-all-protocol-paths) | Zero burn across all protocol paths: 0% transaction-fee burn (`BurnFees = 0`), 0% inference-fee burn, and 100% routing of slashes to `FLOPFoundationAccount` | Ratified 2026-09-22 (owner; #1945, #2792) | [Yellowpaper](../yellowpaper.md), §9.1 R9.6, §9.3 R9.10, §11.3, §13.2, §15.7, Appendices A, D, H |\n| [D-0530](#d-0530--operator-self-stake-only-and-duration-locked-community-staking-pool) | Prohibition of delegated staking into validators and miners (self-stake only); deprecation of delegation extrinsics and commissions; 5% duration-locked community staking pool | Ratified 2026-09-08 (owner; #2792) | [Yellowpaper](../yellowpaper.md), §2.3, §6.1, §9.1 R9.12, §11.3, §15.2, §15.5, Appendices A, C, D, E.32, E.40, G.3, H |\n| [D-0531](#d-0531--off-chain-referral-leaderboard-and-lottery-program) | Off-chain explorer referral leaderboard and periodic referral lotteries funded from `genesis_reserve` (800M FLOP), superseding on-chain referral commissions | Ratified 2026-09-23 / 2026-09-24 (owner; #1358, #2792) | [Yellowpaper](../yellowpaper.md), §9.1 R9.4, Appendices A, E.38 |\n| [D-0532](#d-0532--miner-capacity-bond-one-unit-window-inside-the-coefficient-value-set-against-a-security-envelope) | Miner capacity bond: one unit (FLOP per G_n/s of calibrated cap), dispute window inside the coefficient, surge as a separate margin; `k` set at activation against a security envelope (0.25 candidate); amends D-0418 | Proposal — pending ratification (#1361) | [Yellowpaper](../yellowpaper.md), §6.1, Appendices A, C.1, E.33, H |\n| [D-0533](#d-0533--model-registry-base-price-per-g_n-a-reference-set-against-emission-at-a-reference-throughput) | Model-registry base price per `G_n`: a FLOP-denominated reference set by `φ·P_m(era)/T_ref`, replacing the devnet-scale 0.003; 5e-7 FLOP is the benchmark to validate, and the value is set at activation alongside D-0532 | Proposal — pending ratification (#1361 follow-up) | [Yellowpaper](../yellowpaper.md), §12.1, Appendices A, E.24, E.44, E.49 |\n\n---"}],"links":[{"label":"Before","url":"https://github.com/flop-labs/yellowpaper/blob/70e691c758e53eed17a016a02b0a2ae1200d3744/decisions/v0.5.md"},{"label":"After","url":"https://github.com/flop-labs/yellowpaper/blob/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/decisions/v0.5.md"},{"label":"Git comparison","url":"https://github.com/flop-labs/yellowpaper/compare/70e691c758e53eed17a016a02b0a2ae1200d3744...5730f4b6cf56fa88bb93bbda272dc449b2f77b17"}]},{"id":"spec:70e691c758e53eed17a016a02b0a2ae1200d3744:5730f4b6cf56fa88bb93bbda272dc449b2f77b17:yellowpaper.md","kind":"spec","at":"2026-10-25T15:44:54.000Z","clock":"commit","source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/yellowpaper.md","measuredAt":"2026-11-06T03:27:26.368Z","title":"yellowpaper.md: 70e691c to 5730f4b","detail":"docs(yellowpaper): sync 0.5.0 (draft) from flop-core@4e2b0089. 39 changed sections. 9 changed Appendix A values. Text changes are not deployed upgrades.","changes":[{"name":"Parameter: channel_max_session_activation_bytes","before":null,"after":"65_536 bytes"},{"name":"Parameter: emission_at_end_of_era6","before":"12_109_824_000 FLOP","after":"12_109_823_904 FLOP"},{"name":"Parameter: emission_through_halving_eras","before":"11_920_608_000 FLOP","after":"11_920_607_904 FLOP"},{"name":"Parameter: inference_fee_miner_share_ppt","before":null,"after":"850 parts-per-thousand"},{"name":"Parameter: inference_fee_validator_share_ppt","before":null,"after":"150 parts-per-thousand"},{"name":"Parameter: sponsored_self_stake_enabled","before":null,"after":"cfg!(feature = \"sponsored-self-stake\") flag"},{"name":"Parameter: tx_fee_burn_percent_live","before":"10 percent","after":"0 percent"},{"name":"Parameter: validator_min_self_stake_ratio_percent","before":null,"after":"20 percent"},{"name":"Parameter: validator_work_recency_window_blocks","before":null,"after":"86_400 blocks"},{"name":"Section: 0","before":"## 0. Conformance & Reading Guide\n\n**Normative keywords.** The keywords **MUST**, **MUST NOT**, **REQUIRED**, **SHALL**, **SHALL NOT**,\n**SHOULD**, **SHOULD NOT**, **RECOMMENDED**, **MAY**, and **OPTIONAL** are to be interpreted as in\nRFC 2119 / RFC 8174 when, and only when, they appear in capitals. Lower-case uses carry no normative\nweight. A statement with no keyword is descriptive context, not a requirement.\n\n**What is normative.** The numbered section bodies (§1–§15), Appendix A (Parameter Reference),\nAppendix F (Message & Storage Formats), and Appendix G (Extrinsic Index) are normative. Appendices B\n(Sources), C (Miner Lifecycle — a worked walkthrough), D (Fee & Revenue Map — a derived summary),\nE (Open Items), and H (Conformance & Status Matrix) are informative except where they restate a\nnormative rule and cite its home section.\n\n**Section skeleton.** Each protocol section is organized as:\n1. **Requirements** — the normative rules (MUST/SHOULD/MAY).\n2. **Data structures** — field · type · encoding · constraint (or a pointer into Appendix F).\n3. **Interfaces** — extrinsics/functions: signature · origin · preconditions · errors · events (or a\n   pointer into Appendix G).\n4. **State machine** — states and a transition table, where the section defines one.\n5. **Rationale & sources** *(non-normative)* — why the design is as it is, decision IDs, prior art, and\n   formal-proof citations. An implementer MAY ignore this trailer.\n\nNot every section needs every part; a part is present only where it carries content.\n\n**Reading the parameters.** Every protocol constant is named in Appendix A, which is generated from\n`params/flop-protocol-params.yaml` (the single machine-checked source, gated by\n`scripts/check_params.py`). A parameter named in the body links to its generated `#param-<name>` anchor.\nConcrete figures appearing inline are worked examples; the value of\nrecord is always Appendix A.\n\n**Implementation status is out of band.** This specification describes the protocol FLOP targets, not a\nsnapshot of the codebase. The build state of each requirement — implemented, in progress, or designed —\nis tracked only in [Appendix H](#appendix-h--conformance--implementation-status-matrix), together with\nthe code path and any tracking issue. The body contains no `[LIVE]`/`[PARTIAL]`/`[PLANNED]` tags and no\ncommit/PR references, so a requirement's wording does not change as code lands.\n\n**Trust-domain principle.** FLOP's verification architecture rests on an explicit rule that recurs\nthroughout §3, §7, §11, and §12: **a fallback verification layer MUST occupy a different trust domain\nfrom the fast path it backs.** In particular, protocol soundness **MUST NOT** rest on any single\nhardware root of trust. TEE attestation is one assurance tier (§3.3) and is **OPTIONAL**, not a\nprecondition for participation or settlement; the mandatory execution-integrity floor is the\nTEE-independent stack of activation commitments, sampled re-execution, and slashing (§3.4–§3.5). This is\nratified as `D-0432`; the non-TEE (SOFT) tier's end-to-end definition is the open item\n[E.33](#appendix-e--open-specification-items).\n\n**Terminology and clocks.** §1 fixes the notation, the role glossary, and the canonical protocol-clock\ntable with its coupling invariants. All durations assume 1-second blocks.","after":"## 0. Conformance & Reading Guide\n\n**Normative keywords.** The keywords **MUST**, **MUST NOT**, **REQUIRED**, **SHALL**, **SHALL NOT**,\n**SHOULD**, **SHOULD NOT**, **RECOMMENDED**, **MAY**, and **OPTIONAL** are to be interpreted as in\nRFC 2119 / RFC 8174 when, and only when, they appear in capitals. Lower-case uses carry no normative\nweight. A statement with no keyword is descriptive context, not a requirement.\n\n**What is normative.** The numbered section bodies (§1–§15), Appendix A (Parameter Reference),\nAppendix F (Message & Storage Formats), Appendix G (Extrinsic Index), and Appendix I (Pallet Index\nReference) are normative. Appendices B\n(Sources), C (Miner Lifecycle — a worked walkthrough), D (Fee & Revenue Map — a derived summary),\nE (Open Items), and H (Conformance & Status Matrix) are informative except where they restate a\nnormative rule and cite its home section.\n\n**Section skeleton.** Each protocol section is organized as:\n1. **Requirements** — the normative rules (MUST/SHOULD/MAY).\n2. **Data structures** — field · type · encoding · constraint (or a pointer into Appendix F).\n3. **Interfaces** — extrinsics/functions: signature · origin · preconditions · errors · events (or a\n   pointer into Appendix G).\n4. **State machine** — states and a transition table, where the section defines one.\n5. **Rationale & sources** *(non-normative)* — why the design is as it is, decision IDs, prior art, and\n   formal-proof citations. An implementer MAY ignore this trailer.\n\nNot every section needs every part; a part is present only where it carries content.\n\n**Reading the parameters.** Every protocol constant is named in Appendix A, which is generated from\n`params/flop-protocol-params.yaml` (the single machine-checked source, gated by\n`scripts/check_params.py`). A parameter named in the body links to its generated `#param-<name>` anchor.\nConcrete figures appearing inline are worked examples; the value of\nrecord is always Appendix A.\n\n**Implementation status is out of band.** This specification describes the protocol FLOP targets, not a\nsnapshot of the codebase. The build state of each requirement — implemented, in progress, or designed —\nis tracked only in [Appendix H](#appendix-h--conformance--implementation-status-matrix), together with\nthe code path and any tracking issue. The body contains no `[LIVE]`/`[PARTIAL]`/`[PLANNED]` tags and no\ncommit/PR references, so a requirement's wording does not change as code lands.\n\n**Trust-domain principle.** FLOP's verification architecture rests on an explicit rule that recurs\nthroughout §3, §7, §11, and §12: **a fallback verification layer MUST occupy a different trust domain\nfrom the fast path it backs.** In particular, protocol soundness **MUST NOT** rest on any single\nhardware root of trust. TEE attestation is one assurance tier (§3.3) and is **OPTIONAL**, not a\nprecondition for participation or settlement; the mandatory execution-integrity floor is the\nTEE-independent stack of activation commitments, sampled re-execution, and slashing (§3.4–§3.5). This is\nratified as `D-0432`; the non-TEE (SOFT) tier's end-to-end definition is the open item\n[E.33](#appendix-e--open-specification-items).\n\n**Terminology and clocks.** §1 fixes the notation, the role glossary, and the canonical protocol-clock\ntable with its coupling invariants. All durations assume 1-second blocks."},{"name":"Section: 10","before":"## 10. HTLC Atomic Swap\n\n```mermaid\nstateDiagram-v2\n  [*] --> CREATED: lock funds behind H = SHA256(s)\n  CREATED --> SETTLED: redeem(s) where SHA256(s) = H, before T_lock\n  CREATED --> REFUNDED: timeout, T_lock expires\n  SETTLED --> [*]\n  REFUNDED --> [*]\n```\n\n`has-station` implements `create/redeem/refund_htlc` and `create_cross_chain_htlc`.","after":"## 10. HTLC Atomic Swap\n\n```mermaid\nstateDiagram-v2\n  [*] --> CREATED: lock funds behind H = SHA256(s)\n  CREATED --> SETTLED: redeem or relay valid preimage\n  CREATED --> REFUNDED: refund request after finalized timeout\n  SETTLED --> [*]\n  REFUNDED --> [*]\n```\n\n`has-station` implements `create/redeem/refund_htlc` and `create_cross_chain_htlc`."},{"name":"Section: 11 / Rationale & sources *(non-normative)* [after 11.3]","before":"### Rationale & sources *(non-normative)*\n\nProvenance: task 1494 (confirmed payment-only scope; decision ID pending),\n`D-0409` (slashing-table reconciliation), `D-0420` (correlated equivocation), `D-0419`\n(unbonding slash-lock). The P0 agent-economics sweep (INV-02, `fail_task`, session nonce, payout\natomicity) closed the four flagged-not-enforced invariants. Grounding:\n`formal-specs-agent-economics.md`,\nsession-work-verification-gap.md,\nfee-design.md,\neconomic-security-proofs.md,\nnetwork-valuation.md (value-coupled floor `V_booked = a·n_eff + b·n_eff² + c·v̄·D₂`, C5/D-0413). Formal: `FlopSpecs/Security.lean`\n(`StakingSlashing`, `CoCVoC`), `FlopSpecs/Sessions.lean`,\n`channel/session-gn-integrity.qnt`. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---","after":"### Rationale & sources *(non-normative)*\n\nProvenance: R11.2b payment-only scope,\n`D-0409` (slashing-table reconciliation), `D-0420` (correlated equivocation), `D-0419`\n(unbonding slash-lock), `D-0529` (zero burn; 100% of slashes to `FLOPFoundationAccount`),\n`D-0530` (operator self-stake only; delegation waterfall deprecated). The P0 agent-economics sweep (INV-02, `fail_task`, session nonce, payout\natomicity) closed the four flagged-not-enforced invariants. Grounding:\n`formal-specs-agent-economics.md`,\nsession-work-verification-gap.md,\nfee-design.md,\neconomic-security-proofs.md,\nnetwork-valuation.md (value-coupled floor `V_booked = a·n_eff + b·n_eff² + c·v̄·D₂`, C5/D-0413). Formal: `FlopSpecs/Security.lean`\n(`StakingSlashing`, `CoCVoC`), `FlopSpecs/Sessions.lean`,\n`channel/session-gn-integrity.qnt`. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---"},{"name":"Section: 11.1","before":"### 11.1 Enforced invariants\n\n| Invariant | Rule (normative) | Enforcement |\n|-----------|------------------|-------------|\n| INV-02 / session cap | session spending **MUST** be ≤ the session cap | `agent_transfer` checks `remaining_session_cap()` (`SessionCapExceeded`) |\n| `fail_task` authority | only an authorized reporter, rate-limited, **MUST** fail a task | none: the per-task path and its `fail_task` call were removed (Appendix H.5), so this rule binds no current call |\n| INV-S01 / session nonce | a session nonce **MUST** be monotonic (anti-replay) | `SessionInfo.nonce` validated + incremented per use (`InvalidSessionNonce`) |\n| INV-M06 / payout atomicity | a miner→validator→burn payout **MUST** be all-or-nothing | compute-channel `payout_settlement`: a failed miner or agent-refund transfer reverts the settling extrinsic; the burn leg's result is not checked |\n| Supply | emission cap + halving monotonicity **MUST** hold | `tokenomics-supply.qnt` |\n| HTLC | local conservation + conditional completion + timelock symmetry (§10) | `htlc-atomic-swap.qnt` |\n| Channel | conservation + no-double-settle **MUST** hold | `channel/channel-settlement.qnt` |\n| DA | retrievability + serve-or-slash (§5.3) | `da/da-retrievability.qnt` |","after":"### 11.1 Enforced invariants\n\n| Invariant | Rule (normative) | Enforcement |\n|-----------|------------------|-------------|\n| INV-02 / session cap | session spending **MUST** be ≤ the session cap | `agent_transfer` checks `remaining_session_cap()` (`SessionCapExceeded`) |\n| `fail_task` authority | only an authorized reporter, rate-limited, **MUST** fail a task | none: the per-task path and its `fail_task` call were removed (Appendix H.5), so this rule binds no current call |\n| INV-S01 / session nonce | a session nonce **MUST** be monotonic (anti-replay) | `SessionInfo.nonce` validated + incremented per use (`InvalidSessionNonce`) |\n| INV-M06 / payout atomicity | a miner→validator→burn payout **MUST** be all-or-nothing | compute-channel `payout_settlement`: a failed miner transfer, agent refund or burn reverts the settling extrinsic, so no leg lands without the others |\n| Supply | emission cap + halving monotonicity **MUST** hold | `tokenomics-supply.qnt` |\n| HTLC | local conservation + conditional completion + timelock symmetry (§10) | `htlc-atomic-swap.qnt` |\n| Channel | conservation + no-double-settle **MUST** hold | `channel/channel-settlement.qnt` |\n| DA | retrievability + serve-or-slash (§5.3) | `da/da-retrievability.qnt` |"},{"name":"Section: 11.2","before":"### 11.2 Session `G_n` settlement gate\n\n- **R11.2.** Channel `settle` / `force_settle` **MUST** call `GnSink::validate_session_gn` before payout\n  or credit: a non-zero aggregate `G_n` **MUST** fit the credit domain, the miner efficiency ceiling, the\n  finalized calibration cap, the §6.1 capacity bond, and the reject-only throughput tripwire (§4.1).\n- **R11.2a.** This is a **plausibility bound, not execution validation.** `settle` **MUST** verify each\n  submitted `VerifiedTurn` signature and Merkle path against one `final_root`, reject duplicate or\n  out-of-range turn indices, checked-sum the submitted `g_n` values, and require that sum to equal\n  `aggregate_gn` (`verified_work_from_turns`; §12.1). This authenticates the submitted leaf values and\n  their arithmetic. It does not prove that the claimed execution occurred or that the submitted turns\n  exhaust an independently committed transcript (E.43/E.44).\n- **R11.2b.** Current-profile channel payout **MUST NOT** issue public work credit, increase reward\n  accumulators or performance-vesting work, refresh committee recency, or update calibration from a\n  receipt. This applies to cooperative, certificate, unilateral, forward, and unrecoverable-DA payout.\n  Challenge expiry alone **MUST NOT** make a receipt eligible. Future independently audited credit\n  and recovery of historical credit require the separate evidence and protocol disposition in E.44.","after":"### 11.2 Session `G_n` settlement gate\n\n- **R11.2.** Channel `settle` / `force_settle` **MUST** call `GnSink::validate_session_gn` before payout\n  or credit: a non-zero aggregate `G_n` **MUST** fit the credit domain, the miner efficiency ceiling, the\n  finalized calibration cap, the §6.1 capacity bond, and the reject-only throughput tripwire (§4.1).\n- **R11.2a.** This is a **plausibility bound, not execution validation.** `settle` **MUST** verify each\n  submitted `VerifiedTurn` signature and Merkle path against one `final_root`, reject duplicate or\n  out-of-range turn indices, checked-sum the submitted `g_n` values, and require that sum to equal\n  `aggregate_gn` (`verified_work_from_turns`; §12.1). This authenticates the submitted leaf values and\n  their arithmetic. It does not prove that the claimed execution occurred or that the submitted turns\n  exhaust an independently committed transcript (E.43/E.44).\n- **R11.2b.** Current-profile channel payout **MUST NOT** issue public work credit, increase reward\n  accumulators or performance-vesting work, refresh committee recency, or update calibration from a\n  receipt. This applies to cooperative, certificate, unilateral, forward, and unrecoverable-DA payout.\n  Challenge expiry alone **MUST NOT** make a receipt eligible for public work credit. (Private,\n  payment-denominated Miner unlock credit and Agent spend credit on Era-0 airdrop grants under §8.2 R8.7\n  are not public work credit, block-reward accumulation, or `work-vesting` (`R_p²`), and accrue after\n  finality plus [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) as governed by\n  R8.7.) Future independently audited public work credit\n  and recovery of historical credit require the separate evidence and protocol disposition in E.44."},{"name":"Section: 11.3","before":"### 11.3 Validator slashing table\n\n`pallet_validators` is the single authority for validator penalties.\n\n| Offence | Penalty | Effect | Re-entry |\n|---------|---------|--------|----------|\n| Collusion (signing a fake `G_n` proof) | [`slash_fraud_percent`](#param-slash_fraud_percent) = 100% burn | eject + blacklist | none |\n| Equivocation (conflicting blocks) | correlated (Eth2-style): lone [`slash_equivocation_lone_percent`](#param-slash_equivocation_lone_percent) = 50% (other 50% returned after 180 d), ≥⅓ correlated → 100% burn | lone: eject (re-stakeable); cartel: eject + blacklist | lone: re-stake after the 180 d return + unlock cooldown; cartel: none |\n| Evidence forgery | 100% burn | eject + blacklist | none |\n| TEE-attestation failure *(HARD-tier attestations only)* | 100% burn | eject + blacklist | none |\n| Liveness — downtime > 300 blocks | [`slash_liveness_percent`](#param-slash_liveness_percent) = 1% | jailed | `un_jail` after ≥ 1 h |\n| Extended downtime > 24 h | [`validator_extended_downtime_slash_percent`](#param-validator_extended_downtime_slash_percent) = 5% | kicked | `rejoin` with full stake top-up |\n\nCollusion/forgery/TEE stay flat 100% (evidence-backed fraud). Equivocation is the only correlated,\nrecoverable class (a lone double-sign is most often an honest failover bug). On every slash path the loss\norder (delegated-loss waterfall) **MUST** be: operator self-stake first, then native delegators pro-rata,\nthen sponsors at the fault rate.","after":"### 11.3 Validator slashing table\n\n`pallet_validators` is the single authority for validator penalties.\n\n| Offence | Penalty | Effect | Re-entry |\n|---------|---------|--------|----------|\n| Collusion (signing a fake `G_n` proof) | [`slash_fraud_percent`](#param-slash_fraud_percent) = 100% slash (to Foundation) | eject + blacklist | none |\n| Equivocation (conflicting blocks) | correlated (Eth2-style): lone [`slash_equivocation_lone_percent`](#param-slash_equivocation_lone_percent) = 50% slash (other 50% returned after 180 d), ≥⅓ correlated → 100% slash (to Foundation) | lone: eject (re-stakeable); cartel: eject + blacklist | lone: re-stake after the 180 d return + unlock cooldown; cartel: none |\n| Evidence forgery | 100% slash (to Foundation) | eject + blacklist | none |\n| TEE-attestation failure *(HARD-tier attestations only)* | 100% slash (to Foundation) | eject + blacklist | none |\n| Liveness — downtime > 300 blocks | [`slash_liveness_percent`](#param-slash_liveness_percent) = 1% | jailed | `un_jail` after ≥ 1 h |\n| Extended downtime > 24 h | [`validator_extended_downtime_slash_percent`](#param-validator_extended_downtime_slash_percent) = 5% | kicked | `rejoin` with full stake top-up |\n\nCollusion/forgery/TEE stay flat 100% (evidence-backed fraud). Equivocation is the only correlated,\nrecoverable class (a lone double-sign is most often an honest failover bug). All slashed collateral routes\n100% to `FLOPFoundationAccount` with zero burn (§9.3 R9.10). Operator stake is self-stake only (third-party\ndelegated staking is prohibited); where legacy or testnet sponsored backing (E.32) is present, the loss\norder charges operator self-stake first and sponsors thereafter at the fault rate (legacy delegator\nwaterfall entries are deprecated)."},{"name":"Section: 12.1","before":"### 12.1 Sessions — attested streaming & aggregate settlement\n\nInference settles through **`pallet_compute_channel`** — the sole inference-dispatch path (the former\nper-task 4-extrinsic RPC rail is removed). A cooperative happy path has two primary lifecycle inclusions,\n`open_channel` and `settle`; unilateral close, evidence publication, escalation, and disputes add calls.\nSettlement bytes and verification cost are not constant: `settle` carries and verifies submitted turns,\nsignatures, and Merkle paths; pairwise duplicate scanning is quadratic in submitted turn count. The\ninference stream remains off-chain, but throughput depends on encoded bytes, runtime weight, evidence\ncalls, committee load, and GPU capacity ([E.46](#appendix-e--open-specification-items)).\n\n- **R12.1a — Reserved capacity, not metered refund.** Escrow at `open_channel` **is** the payment for\n  reserved capacity; `settle` pays the reserved amount in full (**no settlement fee**). Under-use **MUST\n  NOT** be refunded. The only refund paths are a non-delivery timeout, an upheld fraud dispute, or a\n  failed/early-terminated session (R12.1d).\n- **R12.1b — Transcript.** The enclave (or, on the SOFT path, the miner session key) **MUST** sign each\n  turn's 32 B transcript-leaf hash into a running Merkle accumulator. [Appendix F.3](#f3-session-transcript-compute-channel-121)\n  is the sole leaf definition and accepted-version rule; V3 is the current TOPLOC-binding format for a\n  channel carrying a `ChannelDecodePolicies` marker. Uniqueness is `channel_id ‖ turn_index`; replay\n  protection is the monotonic counter. Before accepting output, the agent **MUST** verify the signed leaf\n  and cumulative root and counter-sign the turn with the Appendix F.3 per-turn agent ack over the leaf hash\n  and timing inputs. Settlement carries the separate agent receipt v1, which binds `channel_id`,\n  `final_root`, `aggregate_gn`, and `payable` exactly as defined in Appendix F.3. `settle` posts the final\n  root + aggregate `G_n`. These signatures prove agreement on a receipt and sum; they do not prove that the\n  output resulted from the claimed execution. The current cooperative path pays private escrow\n  immediately and issues no public work credit (R11.2b). Future audited reward eligibility and\n  recovery of historical credit after late fraud remain open in\n  [E.44](#appendix-e--open-specification-items).\n- **R12.1c — Tier-specific model binding.** A HARD-tier `open_channel` and `settle` **MUST** verify the\n  proof's measured dm-verity root against the registry (`ModelRegistryQuery::verify_measured_root`); a\n  wrong root at settle **MUST** reject. The SOFT profile has no TEE-measured root; its model/decode binding,\n  evidence predicate, value cap, and dispute path are [E.33](#appendix-e--open-specification-items).\n- **R12.1d — Failed/early close split.** On the unilateral `force_settle → finalize` path the miner keeps\n  the two-part tariff `P = BasePerTurn·n + rate_G·G_claimed` (flat per-turn payment over `n` turns plus\n  claimed reference-work converted into payment units). `P` is denominated in the escrow's base unit\n  (10⁻¹⁸ FLOP); [`channel_base_per_turn`](#param-channel_base_per_turn) and `rate_G` are each one\n  base unit. `G_n` is the whole-reference-GFLOP integer from R4.4; the rate is a tariff price, not an\n  assertion that one `G_n` equals one FLOP base unit. `force_settle` **MUST** reject with\n  `TariffExceedsEscrow` when `P > E`; it **MUST NOT** clamp `P` or create negative payout legs\n  (`pallets/pallets/compute-channel/src/lib.rs::{turn_tariff_pay,verified_work_from_turns}`). Otherwise,\n  the agent is refunded `(1−φ)·(E−P)`, and the penalty `φ·(E−P)`\n  ([`refund_penalty_phi_percent`](#param-refund_penalty_phi_percent) = 20%) **MUST** be burned/routed to\n  the Foundation — never the miner. A miner-fault non-delivery uses `φ = 0` (full refund). Conservation:\n  `P + (1−φ)(E−P) + φ(E−P) = E`. Caller restriction and tariff magnitude on this path are E.24.\n- **R12.1e — Over-use.** Handled by abort or in-place `top_up_escrow` (Lightning splice-in); the\n  aggregate-`G_n` accumulator already grows unbounded, only the escrow cap is raised.\n- **R12.1f — Disputes (fraud only).** Optimistic settlement + bisection over the transcript root: a\n  challenge resolves at a single contested turn (signature + Merkle-membership check); a non-response\n  within [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks)\n  **MUST** default to a fraud verdict → slash via the `miner-slashing` forgery path + agent refund.\n  Disputes cover **protocol fraud only** (wrong measured root, inflated `G_n` vs transcript, forged\n  signatures, non-delivery) — **never output quality.** The challenge window\n  ([`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) = 7 d) plus every bisection\n  leg, the terminal response, and one degraded extension **MUST** fit strictly inside DA retention `W`\n  (14 d), as specified by R1.2a. A force-settled transcript reference **MUST** be naturally available\n  through that worst-case end before it is pinned; a pin prevents pruning but does not extend expiry.\n  **Standing** is the session agent (its own channel) + any active validator (any channel); arbitrary\n  public challengers **MUST** be rejected before bond lock.\n- **R12.1g — Finality-stall recovery.** Deadlines **MUST** read `hp_consensus::FinalizedPrefix` and\n  economic deadlines **MUST** freeze while finality stalls. Funds **MUST NOT** release from an\n  unfinalized best head. Recovery is restored AlephBFT finality or an explicitly ratified checkpoint\n  procedure under §13.0a; unresolved channels remain frozen until that recovery establishes a finalized\n  prefix.\n- **R12.1h — Session length & re-attestation.** Trust shifts to the session enclave key attested once at\n  `open_channel`. A channel **MUST** bound blast radius by a max duration `D_max` / max turns `n_max`\n  (`channel_max_settlement_turns` caps a bundle at 1,024), and **SHOULD** re-attest every `k` turns with\n  `k ≤ min(Bond / v_turn, T_tcb / t_turn)`.\n\n**Capacity disposition.** No session-control transactions-per-block, finalized-lifecycles-per-second,\nor inclusion/finality-latency target is specified. D-0502 proposes to withdraw the former 96/128 admission and\n48/64 lifecycle figures because they were derived from call count rather than serialized size, charged\nweight, state execution, competing traffic, serving load, and network finality. Admission remains subject\nto the runtime's byte, two-dimensional weight, state, and validity gates. A future profile **MUST** reserve\nmeasured settlement/dispute headroom under congestion and satisfy E.46 before making a capacity claim.","after":"### 12.1 Sessions — attested streaming & aggregate settlement\n\nInference settles through **`pallet_compute_channel`** — the sole inference-dispatch path (the former\nper-task 4-extrinsic RPC rail is removed). A cooperative happy path has two primary lifecycle inclusions,\n`open_channel` and `settle`; unilateral close, evidence publication, escalation, and disputes add calls.\nSettlement bytes and verification cost are not constant: `settle` carries and verifies submitted turns,\nsignatures, and Merkle paths; pairwise duplicate scanning is quadratic in submitted turn count. The\ninference stream remains off-chain, but throughput depends on encoded bytes, runtime weight, evidence\ncalls, committee load, and GPU capacity ([E.46](#appendix-e--open-specification-items)).\n\n- **R12.1a — Reserved capacity and fee split.** Escrow at `open_channel` **is** the payment for\n  reserved capacity; under-use **MUST NOT** be refunded. The only refund paths are a non-delivery\n  timeout, an upheld fraud dispute, or a failed/early-terminated session (R12.1d). At settlement\n  (`settle`, `certificate_settle`, or `force_settle → finalize`), the settled `payable` amount **MUST**\n  be split: [`inference_fee_miner_share_ppt`](#param-inference_fee_miner_share_ppt) = 85% to the miner,\n  and [`inference_fee_validator_share_ppt`](#param-inference_fee_validator_share_ppt) = 15% to the\n  validator pool (D-0525). The 1% audit pool earmark\n  ([`audit_fee_split_ppm`](#param-audit_fee_split_ppm) = 10,000 ppm) **MUST** be deducted from the 15%\n  validator share to fund verification audits; the remainder of the validator leg is distributed\n  intra-pool by the R9.5 weighting, liquid on issue (R9.13, D-0518).\n- **R12.1b — Transcript.** The enclave (or, on the SOFT path, the miner session key) **MUST** sign each\n  turn's 32 B transcript-leaf hash into a running Merkle accumulator. [Appendix F.3](#f3-session-transcript-compute-channel-121)\n  is the sole leaf definition and accepted-version rule; V3 is the current TOPLOC-binding format for a\n  channel carrying a `ChannelDecodePolicies` marker. Uniqueness is `channel_id ‖ turn_index`; replay\n  protection is the monotonic counter. Before accepting output, the agent **MUST** verify the signed leaf\n  and cumulative root and counter-sign the turn with the Appendix F.3 per-turn agent ack over the leaf hash\n  and timing inputs. Settlement carries the separate agent receipt v1, which binds `channel_id`,\n  `final_root`, `aggregate_gn`, and `payable` exactly as defined in Appendix F.3. `settle` posts the final\n  root + aggregate `G_n`. These signatures prove agreement on a receipt and sum; they do not prove that the\n  output resulted from the claimed execution. The current cooperative path pays private escrow\n  immediately and issues no public work credit (R11.2b). Future audited reward eligibility and\n  recovery of historical credit after late fraud remain open in\n  [E.44](#appendix-e--open-specification-items).\n- **R12.1c — Tier-specific model binding.** A HARD-tier `open_channel` and `settle` **MUST** verify the\n  proof's measured dm-verity root against the registry (`ModelRegistryQuery::verify_measured_root`); a\n  wrong root at settle **MUST** reject. The SOFT profile has no TEE-measured root; its model/decode binding,\n  evidence predicate, value cap, and dispute path are [E.33](#appendix-e--open-specification-items).\n- **R12.1d — Failed/early close split.** On the unilateral `force_settle → finalize` path the earned\n  tariff `P = BasePerTurn·n + rate_G·G_claimed` (flat per-turn payment over `n` turns plus claimed\n  reference-work converted into payment units) forms the payable session settlement, which is split\n  85% to the miner and 15% to validators (with the 1% audit pool funded from the validator leg) under\n  R12.1a. `P` is denominated in the escrow's base unit (10⁻¹⁸ FLOP);\n  [`channel_base_per_turn`](#param-channel_base_per_turn) and `rate_G` are each one base unit. `G_n` is\n  the whole-reference-GFLOP integer from R4.4; the rate is a tariff price, not an assertion that one `G_n`\n  equals one FLOP base unit. `force_settle` **MUST** reject with `TariffExceedsEscrow` when `P > E`; it\n  **MUST NOT** clamp `P` or create negative payout legs\n  (`pallets/pallets/compute-channel/src/lib.rs::{turn_tariff_pay,verified_work_from_turns}`). Otherwise,\n  the agent is refunded `(1−φ)·(E−P)`, and the penalty `φ·(E−P)`\n  ([`refund_penalty_phi_percent`](#param-refund_penalty_phi_percent) = 20%) **MUST** be burned/routed to\n  the Foundation — never the miner. A miner-fault non-delivery uses `φ = 0` (full refund). Conservation:\n  `P + (1−φ)(E−P) + φ(E−P) = E`. Caller restriction and tariff magnitude on this path are E.24.\n- **R12.1e — Over-use.** Handled by abort or in-place `top_up_escrow` (Lightning splice-in); the\n  aggregate-`G_n` accumulator already grows unbounded, only the escrow cap is raised.\n- **R12.1f — Disputes (fraud only).** Optimistic settlement + bisection over the transcript root: a\n  challenge resolves at a single contested turn (signature + Merkle-membership check); a non-response\n  within [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks)\n  **MUST** default to a fraud verdict → slash via the `miner-slashing` forgery path + agent refund.\n  Disputes cover **protocol fraud only** (wrong measured root, inflated `G_n` vs transcript, forged\n  signatures, non-delivery) — **never output quality.** The challenge window\n  ([`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) = 7 d) plus every bisection\n  leg, the terminal response, and one degraded extension **MUST** fit strictly inside DA retention `W`\n  (14 d), as specified by R1.2a. A force-settled transcript reference **MUST** be naturally available\n  through that worst-case end before it is pinned; a pin prevents pruning but does not extend expiry.\n  **Standing** is the session agent (its own channel) + any active validator (any channel); arbitrary\n  public challengers **MUST** be rejected before bond lock.\n- **R12.1g — Finality-stall recovery.** Deadlines **MUST** read `hp_consensus::FinalizedPrefix` and\n  economic deadlines **MUST** freeze while finality stalls. Funds **MUST NOT** release from an\n  unfinalized best head. Recovery is restored AlephBFT finality or an explicitly ratified checkpoint\n  procedure under §13.0a; unresolved channels remain frozen until that recovery establishes a finalized\n  prefix.\n- **R12.1h — Session length & re-attestation.** Trust shifts to the session enclave key attested once at\n  `open_channel`. A channel **MUST** bound blast radius by a max duration `D_max` / max turns `n_max`\n  (`channel_max_settlement_turns` caps a bundle at 1,024), and **SHOULD** re-attest every `k` turns with\n  `k ≤ min(Bond / v_turn, T_tcb / t_turn)`.\n\n**Capacity disposition.** No session-control transactions-per-block, finalized-lifecycles-per-second,\nor inclusion/finality-latency target is specified. D-0502 proposes to withdraw the former 96/128 admission and\n48/64 lifecycle figures because they were derived from call count rather than serialized size, charged\nweight, state execution, competing traffic, serving load, and network finality. Admission remains subject\nto the runtime's byte, two-dimensional weight, state, and validity gates. A future profile **MUST** reserve\nmeasured settlement/dispute headroom under congestion and satisfy E.46 before making a capacity claim."},{"name":"Section: 13.2","before":"### 13.2 Validator (consensus + DA + leader duties)\n\n| ID | Failure | Detected by | Protocol response | Recovery |\n|----|---------|------------|-------------------|----------|\n| V1 | Offline (crash) | liveness tracking | 1% + jail (>300 blk, `un_jail` ≥1 h); >24 h → 5% + kick | rejoin with top-up |\n| V2 | Equivocation | offence reports → `slash(Equivocation)` | correlated: lone 50% + eject (50% returned 180 d); ≥⅓ correlated → 100% + eject + blacklist | lone re-stakeable |\n| V3 | DA shard withheld | random retrievability audits | serve-or-slash (bounded Liveness) | `is_available` false → settle blocked until re-replication |\n| V4 | DA loss beyond k | distinct failed shard audits + elapsed repair deadline | temporary unavailability extends once; unrecoverable → fail-closed refund + challenger-bond return, no fraud slash (E.31 residual: last-co-signed-prefix split) | agent made whole from escrow |\n| V5 | Collusion (co-signing fake proof) | Tier-3 independent re-execution | 100% burn + eject + blacklist | dispute wins on transcript evidence |\n| V6 | Transaction censorship | none (no inclusion monitoring) | FOCIL/EIP-7805 fork-choice-enforced inclusion list on the committee (approach set; **[GAP]** wiring) | delayed settlement |\n| V7 | Ordering games / MEV | finalized-head deadline guards + signed receipts | dispute/finalize commute at one finalized head (zero advantage); cooperative/force-settle miner-side exposure ≤ one escrow; safe broadcast requires `broadcast + maxDelay < challengeEnd` (E.24) | bounded payout selection |\n| V8 | Validator-Leader abuse (self-graded ghost tasks) | nothing on-chain validates ghost-task well-formedness | VRF-assigned tasks + commit-reveal answers (approach set; **[GAP]** wiring) | n/a (miner-side harm) |\n| V9 | Rotation gaming (wash work to survive cut) | rank keys on stake, not the gameable metric | rotation orders by **stake** subject to a min-performance floor (D-0416); floor-gaming residual | n/a |\n| V10 | Audit collusion (rubber-stamp custody) | audits are known-answer (`blake2(audit_id‖shard)`) | possession-binding makes pure rubber-stamping fail | late discovery = V4 |\n| V11 | Stake-exit timing | unbond completion blocked while a session/dispute/audit is open (D-0419); 21 d cooldown vs retention W (14 d) and the dispute lifecycle (7 d + 2 h + one 2 h extension) | margin composition and validator-side freeze are E.57; slash-lock covers the miner side (M11) | n/a |\n| V12 | Committee capture / sampling bias | BABE-VRF epoch randomness + eligible identity/weight snapshot | implemented weighted draw; no valid aggregate-stake binomial bridge for unequal weights; E.42 requires exact/adversarial capture analysis and seed-influence bound | n/a (open safety premise) |","after":"### 13.2 Validator (consensus + DA + leader duties)\n\n| ID | Failure | Detected by | Protocol response | Recovery |\n|----|---------|------------|-------------------|----------|\n| V1 | Offline (crash) | liveness tracking | 1% + jail (>300 blk, `un_jail` ≥1 h); >24 h → 5% + kick | rejoin with top-up |\n| V2 | Equivocation | offence reports → `slash(Equivocation)` | correlated: lone 50% + eject (50% returned 180 d); ≥⅓ correlated → 100% + eject + blacklist | lone re-stakeable |\n| V3 | DA shard withheld | random retrievability audits | serve-or-slash (bounded Liveness) | `is_available` false → settle blocked until re-replication |\n| V4 | DA loss beyond k | distinct failed shard audits + elapsed repair deadline | temporary unavailability extends once; unrecoverable → fail-closed refund + challenger-bond return, no fraud slash (E.31 residual: last-co-signed-prefix split) | agent made whole from escrow |\n| V5 | Collusion (co-signing fake proof) | Tier-3 independent re-execution | 100% slash (to Foundation) + eject + blacklist | dispute wins on transcript evidence |\n| V6 | Transaction censorship | none (no inclusion monitoring) | FOCIL/EIP-7805 fork-choice-enforced inclusion list on the committee (approach set; **[GAP]** wiring) | delayed settlement |\n| V7 | Ordering games / MEV | finalized-head deadline guards + signed receipts | dispute/finalize commute at one finalized head (zero advantage); cooperative/force-settle miner-side exposure ≤ one escrow; safe broadcast requires `broadcast + maxDelay < challengeEnd` (E.24) | bounded payout selection |\n| V8 | Validator-Leader abuse (self-graded ghost tasks) | nothing on-chain validates ghost-task well-formedness | VRF-assigned tasks + commit-reveal answers (approach set; **[GAP]** wiring) | n/a (miner-side harm) |\n| V9 | Rotation gaming (wash work to survive cut) | rank keys on stake, not the gameable metric | rotation orders by **stake** subject to a min-performance floor (D-0416); floor-gaming residual | n/a |\n| V10 | Audit collusion (rubber-stamp custody) | audits are known-answer (`blake2(audit_id‖shard)`) | possession-binding makes pure rubber-stamping fail | late discovery = V4 |\n| V11 | Stake-exit timing | unbond completion blocked while a session/dispute/audit is open (D-0419); 21 d cooldown vs retention W (14 d) and the R1.2a worst-case dispute lifetime (`D + (2·⌈log₂ n_max⌉ + 2)·R = 763,200` blocks = 8 d 20 h at `n_max = 1,024`, `R = 2 h`; sequential `W + 8 d 20 h = 22 d 20 h` exceeds 21 d by 1 d 20 h, whereas starting inside `W` under the §1.2 coupling `763,200 ≤ W` finishes within 14 d) | margin composition and validator-side freeze are E.57; slash-lock covers the miner side (M11) | n/a |\n| V12 | Committee capture / sampling bias | BABE-VRF epoch randomness + eligible identity/weight snapshot | implemented weighted draw; no valid aggregate-stake binomial bridge for unequal weights; E.42 requires exact/adversarial capture analysis and seed-influence bound | n/a (open safety premise) |"},{"name":"Section: 15 / Rationale & sources *(non-normative)* [after 15.7]","before":"### Rationale & sources *(non-normative)*\n\nProvenance: `D-0408` (single validator-staking system), `D-0413` (value-coupled floor), `D-0416`\n(stake-ordered rotation), `D-0437` (active-set cap), `D-0409` (flat fraud classes), `D-0419`\n(unbonding slash-lock), `D-0420` (correlated equivocation), `D-0501` (seat premise and cooperative-credit\nscope), `D-0439` (verification liveness; CPU-class validator). Grounding:\nvalidator-miner-hardware-costs.md (§2.1 reference profile\nand comparables), validator-set-diversity.md (seat-counted\nplacement bounds), miner-validator-economics.md,\nda-sovereign-validator-design.md,\nminer-capacity-stake-calibration.md,\nr2-payment-channel-sessions.md,\nsession-work-verification-gap.md,\n[prepublication-evidence.md](research/prepublication-evidence.md),\nsession-matching-orderbook-vs-agent-select.md.\nOps guide: `docs/onboarding/validator.md`. Formal:\n`FlopSpecs/Sessions.lean`,\n`formal-specs/channel/channel-settlement.qnt`. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---","after":"### Rationale & sources *(non-normative)*\n\nProvenance: `D-0408` (single validator-staking system), `D-0413` (value-coupled floor), `D-0416`\n(stake-ordered rotation), `D-0437` (active-set cap), `D-0409` (flat fraud classes), `D-0419`\n(unbonding slash-lock), `D-0420` (correlated equivocation), `D-0501` (seat premise and cooperative-credit\nscope), `D-0439` (verification liveness; CPU-class validator), `D-0529` (zero-burn slash routing to\n`FLOPFoundationAccount`), `D-0530` (operator self-stake only). Grounding:\nvalidator-miner-hardware-costs.md (§2.1 reference profile\nand comparables), validator-set-diversity.md (seat-counted\nplacement bounds), miner-validator-economics.md,\nda-sovereign-validator-design.md,\nminer-capacity-stake-calibration.md,\nr2-payment-channel-sessions.md,\nsession-work-verification-gap.md,\n[prepublication-evidence.md](research/prepublication-evidence.md),\nsession-matching-orderbook-vs-agent-select.md.\nOps guide: `docs/onboarding/validator.md`. Formal:\n`FlopSpecs/Sessions.lean`,\n`formal-specs/channel/channel-settlement.qnt`. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---"},{"name":"Section: 15.2","before":"### 15.2 Onboarding *(normative)*\n\nRegistration is self-signed and permissionless above the stake floor. `register` freezes exactly\n`effective_minimum_stake()` as self-stake and places the validator in `ValidatorQueue`, **not** directly in\n`ActiveValidators` — promotion happens only through rotation (§15.5).\n\n| Requirement | Rule |\n|-------------|------|\n| Self-stake | `≥ effective_minimum_stake() = max(`[`validator_min_stake`](#param-validator_min_stake)`, ValueCoupledStakeFloor)`; baseline [`validator_min_stake`](#param-validator_min_stake), compounding +9%/yr |\n| Self-stake ratio | self-stake **MUST** be ≥ 20% of (self + delegated) (`MinSelfStakeRatio`) |\n| Slots per entity | ≤ 5 (`MaxSlotsPerEntity`) |\n| Not blacklisted | fraud-blacklisted accounts **MUST NOT** re-register |\n| Verification liveness (committee) | last accepted verification duty (R15.4c; `LastVerifiedWork`) within `WorkRecencyWindow` = 86,400 blk (24 h); else active but out of the PoUI committee |\n\nDelegation (min 100 FLOP, ≤ [`max_delegators_per_miner`](#param-max_delegators_per_miner)-class bound)\nand commission follow §6.1.\n\nWith a 20% self-stake ratio, new native delegation and sponsored backing together are admitted only\nup to four times recorded self-stake. Since registration bonds exactly the effective minimum,\nsurplus free balance does not increase this capacity. The admission check does not preserve that\nratio after a slash reduces self-stake (Appendix H).","after":"### 15.2 Onboarding *(normative)*\n\nRegistration is self-signed and permissionless above the stake floor. `register` freezes exactly\n`effective_minimum_stake()` as self-stake and places the validator in `ValidatorQueue`, **not** directly in\n`ActiveValidators` — promotion happens only through rotation (§15.5).\n\n| Requirement | Rule |\n|-------------|------|\n| Self-stake | `≥ effective_minimum_stake() = max(MinimumValidatorStake, ValueCoupledStakeFloor)`; baseline `MinimumValidatorStake` starts at [`validator_min_stake`](#param-validator_min_stake) = 1,200,000 FLOP and compounds annually in `on_initialize(n)` at every `n > 0` with `n mod 31,536,000 = 0` (`365 × 86,400` blocks) via integer floor division `⌊old × 109 / 100⌋` ([`validator_growth_numerator`](#param-validator_growth_numerator) / [`validator_growth_denominator`](#param-validator_growth_denominator) = +9%/yr), capped at 1% of current `total_issuance` (`min(⌊old × 109 / 100⌋, ⌊0.01 × total_issuance⌋)`); `force_set_minimum_stake` and `set_value_coupled_floor` enforce the same 1%-of-`total_issuance` ceiling |\n| Self-stake ratio | operator stake is **self-stake only** (third-party delegation prohibited; legacy [`MinSelfStakeRatio`](#param-validator_min_self_stake_ratio_percent) ≥ 20% applies only if E.32 sponsored backing is enabled) |\n| Slots per entity | ≤ 5 (`MaxSlotsPerEntity`) |\n| Not blacklisted | fraud-blacklisted accounts **MUST NOT** re-register |\n| Verification liveness (committee) | last accepted verification duty (R15.4c; `LastVerifiedWork`) within [`WorkRecencyWindow`](#param-validator_work_recency_window_blocks) = 86,400 blk (24 h); else active but out of the PoUI committee |\n\nValidator and miner stakes are self-stake only (§6.1); third-party delegation (legacy\n[`max_delegators_per_miner`](#param-max_delegators_per_miner)-class bounds and operator commission) is\ndeprecated.\n\nWhere legacy or testnet sponsored backing (E.32) is enabled in the runtime, `MinSelfStakeRatio` (20%)\nbounds admitted backing to four times recorded self-stake. Since registration bonds exactly the\neffective minimum, surplus free balance does not increase this capacity, and the admission check does\nnot preserve that ratio after a slash reduces self-stake (Appendix H).\n\nWhere [`sponsored_self_stake_enabled`](#param-sponsored_self_stake_enabled) holds, active sponsored\nprincipal also counts toward the self-stake floor at queue promotion and `rejoin` (R6.1a), and a sponsor\ncan register a validator that holds no balance. Native delegation still counts only operator-owned\nstake, so a fully sponsored validator accepts none."},{"name":"Section: 15.3","before":"### 15.3 Duties & resource intensity\n\n| Duty | Cost | Enforced by |\n|------|------|-------------|\n| BABE block authoring | light CPU; latency-sensitive gossip | rewards + Liveness slash (V1) |\n| AlephBFT finality voting | light CPU; BFT vote gossip O(committee) | reward share + Equivocation slash (V2) |\n| Validator attestation (verify TEE quote → co-sign) | DCAP/dstack verify (light CPU + collateral fetch) | quorum 2/3 (§3.6); selective-attestation **[GAP]** O3 |\n| Protocol DA store-and-serve (§5.3) | Reed–Solomon rate-½ (`R=6`, k=3+3); GB-scale bandwidth | serve-or-slash audits; funded by reward share, **no per-byte fee** |\n| Retrievability / ghost-task audits | light (known-answer) | possession-binding (V3/V10) |\n| Verification duties — attest, co-sign quorums, answer audits (committee liveness, R15.4c) | light CPU | falls out of committee if no accepted duty within `WorkRecencyWindow` |\n| Sampled re-execution (TOPLOC prefill replay) | **not a validator duty** — checker lane (R3.5d) | validator verifies and co-signs the verdict |\n| Dispute adjudication / inclusion | light | censorship **[GAP]** V6 |\n\nThe one heavy leg is DA storage/serving; no validator duty requires a GPU or TEE. A production validator\n**SHOULD** provision the reference profile of\nvalidator-miner-hardware-costs.md §2.1: 8 physical cores at\n≥3.4 GHz with SMT off, 32 GB ECC RAM, 4 TB enterprise NVMe (chain state plus DA custody under §5.3\nretention), and a 1 Gbps symmetric unmetered link — the AlephBFT-class node reference plus storage.\n\nPlacement is a set-level concern, not a per-box one: because R2.3 counts Byzantine **seats**, the\nfault-domain rules in validator-set-diversity.md apply to\nproduction validators — one session key per machine, no shared-key failover, and no hosting ASN, metro,\nor operating group holding as many eligible validators as the Byzantine seats that break `3f < n`\n(R2.3) for the realized committee size — 34 against a 100-seat committee — because seats never exceed\nidentities. A tighter 10 % per-domain cap on identity count and on stake is proposed in D-0507\n(pending).","after":"### 15.3 Duties & resource intensity\n\n| Duty | Cost | Enforced by |\n|------|------|-------------|\n| BABE block authoring | light CPU; latency-sensitive gossip | rewards + Liveness slash (V1) |\n| AlephBFT finality voting | light CPU; BFT vote gossip O(committee) | reward share + Equivocation slash (V2) |\n| Validator attestation (verify TEE quote → co-sign) | DCAP/dstack verify (light CPU + collateral fetch) | quorum 2/3 (§3.6); selective-attestation **[GAP]** O3 |\n| Protocol DA store-and-serve (§5.3) | Reed–Solomon rate-½ (`R=6`, k=3+3); GB-scale bandwidth | serve-or-slash audits; funded by reward share, **no per-byte fee** |\n| Retrievability / ghost-task audits | light (known-answer) | possession-binding (V3/V10) |\n| Verification duties — attest, co-sign quorums, answer audits (committee liveness, R15.4c) | light CPU | falls out of committee if no accepted duty within `WorkRecencyWindow` |\n| Sampled re-execution (TOPLOC prefill replay) | **not a validator duty** — checker lane (R3.5d) | validator verifies and co-signs the verdict |\n| Dispute adjudication / inclusion | light | censorship **[GAP]** V6 |\n\nThe one heavy leg is DA storage/serving; no validator duty requires a GPU or TEE. A production validator\n**SHOULD** provision this reference profile: 8 physical cores at\n≥3.4 GHz with SMT off, 32 GB ECC RAM, 4 TB enterprise NVMe (chain state plus DA custody under §5.3\nretention), and a 1 Gbps symmetric unmetered link — the AlephBFT-class node reference plus storage.\n\nPlacement is a set-level concern, not a per-box one: because R2.3 counts Byzantine **seats**, the\nfollowing fault-domain rules apply to production validators — one session key per machine, no\nshared-key failover, and no hosting ASN, metro,\nor operating group holding as many eligible validators as the Byzantine seats that break `3f < n`\n(R2.3) for the realized committee size — 34 against a 100-seat committee — because seats never exceed\nidentities. A tighter 10 % per-domain cap on identity count and on stake is proposed in D-0507\n(pending)."},{"name":"Section: 15.5","before":"### 15.5 Rotation & set size\n\nRotation runs in `on_initialize` every\n[`validator_rotation_interval_blocks`](#param-validator_rotation_interval_blocks) (~30 d) plus manual\n`rotate`.\n\n- **R15.5.** Rotation **MUST** eject the bottom [`validators_to_eject`](#param-validators_to_eject) = 50\n  and promote the top [`validators_to_promote`](#param-validators_to_promote) = 50 from `ValidatorQueue`\n  whose recorded self-stake ≥ `effective_minimum_stake()`; ejected validators serve\n  [`ejection_cooldown_blocks`](#param-ejection_cooldown_blocks) (~7 d) then `rejoin` with stake topped to\n  the current minimum. Ranking **MUST** be by **stake** subject to a minimum-performance floor\n  (verification liveness per R15.4c + uptime), so padding the liveness signal does not improve rank\n  (only clearing the floor remains gameable).\n\n- **R15.5b.** The active set **MUST NOT** exceed\n  [`validator_active_set_cap`](#param-validator_active_set_cap) = **1,000**. `register` admits to\n  `ValidatorQueue`, never directly to the active set; rotation **MUST** promote from the queue only\n  while a slot is free, so the cap bounds `ActiveValidators` and never registration. Queued validators\n  hold stake and may do useful work; they are not finality-eligible until promoted.\n\nThe current implementation attempts promotion in LIFO order within the requested budget and free\nslots; stake-ordered selection remains #1713. Underfunded candidates remain queued with their bond\nand backing intact. Promotion preserves stake and commission fields and resets performance and the\njoining epoch.\n\nA queued candidate has no in-place self-stake top-up: transferring more funds does not update its\nrecorded bond, and `rejoin` applies only to extended-downtime kicks. A raised effective floor,\nincluding an annual baseline increase, can therefore defer promotion until the floor falls back or\nthe operator replaces the registration. Operators coordinating replacement first arrange native\ndelegation and sponsor unbonding, then deregister and register at the new minimum; deregistration\ndoes not enforce this backing-removal procedure. Appendix H records the missing top-up path.\n\n**Set size.** The active set is capped at **1,000**; the **finalizing committee is 100** (§15.4),\nsampled from the active set, so the two are separate bounds. Effective set size below the cap is\ngoverned by rotation throughput and the stake gate. Behaviour on an active set at or below the eject\ncount is E.56.\n\nComposition of the first active set at mainnet genesis (post-testnet ranking by verification liveness,\nplacement declaration, 10 % per-domain cap) and the move from fixed bottom-50 ejection to a\nperformance floor are proposals pending ratification:\n[D-0507](decisions/v0.5.md#d-0507--post-testnet-genesis-validator-selection-and-placement-admission),\n[D-0508](decisions/v0.5.md#d-0508--rotation-on-underperformance-floor-based-ejection-and-on-chain-performance-signal).","after":"### 15.5 Rotation & set size\n\nRotation runs in `on_initialize` every\n[`validator_rotation_interval_blocks`](#param-validator_rotation_interval_blocks) (~30 d) plus manual\n`rotate`.\n\n- **R15.5.** Rotation **MUST** eject up to [`validators_to_eject`](#param-validators_to_eject) = 50 from\n   the bottom of the active set — bounded by\n  [`validator_rotation_churn_percent`](#param-validator_rotation_churn_percent) = 10% (rounded up) and\n  truncated to preserve at least\n  [`validator_min_active_validators`](#param-validator_min_active_validators) = 4 active seats (`deregister`,\n  `jail`, and kick **MUST** likewise reject removal at or below the floor, and a proven-fault slash at the\n  floor **MUST** confiscate stake (transferred to the Foundation per R9.10) and blacklist immediately while deferring seat removal until rotation can\n  replace or shrink the set; see E.56) — and promote up to\n  [`validators_to_promote`](#param-validators_to_promote) = 50 from `ValidatorQueue` whose recorded\n  self-stake ≥ `effective_minimum_stake()`. Rotation ejection removes the validator from `ActiveValidators`\n  and thaws its self-stake freeze (the principal remains in the operator's account); re-entry goes through\n  `register` into `ValidatorQueue` after [`ejection_cooldown_blocks`](#param-ejection_cooldown_blocks)\n  (~7 d; configured in `Config`, enforcement in `register` pending), whereas `un_jail` (after\n  `MinJailBlocks` = 3,600 for liveness jail) and `rejoin` (for\n  extended-downtime kicks, topping up self-stake from free balance to `effective_minimum_stake()`) restore\n  a jailed or kicked validator directly to `ActiveValidators` while a slot below\n  [`validator_active_set_cap`](#param-validator_active_set_cap) is free. Ranking **MUST** be by **stake**\n  subject to a minimum-performance floor (verification liveness per R15.4c + uptime), so padding the\n  liveness signal does not improve rank (only clearing the floor remains gameable).\n\n- **R15.5b.** The active set **MUST NOT** exceed\n  [`validator_active_set_cap`](#param-validator_active_set_cap) = **1,000**. `register` admits to\n  `ValidatorQueue`, never directly to the active set; rotation promotion from `ValidatorQueue` and direct\n  restoration via `un_jail` or `rejoin` **MUST** admit to `ActiveValidators` only while a slot is free, so\n  the cap bounds `ActiveValidators` and never registration. Queued validators hold stake and may do useful\n  work; they are not finality-eligible until promoted.\n\nThe current implementation attempts promotion in LIFO order within the requested budget and free\nslots; stake-ordered selection remains #1713. Underfunded candidates remain queued with their bond\nand backing intact. Promotion preserves stake and commission fields and resets performance and the\njoining epoch.\n\nA queued candidate has no in-place self-stake top-up: transferring more funds does not update its\nrecorded bond, and `rejoin` applies only to extended-downtime kicks. A raised effective floor,\nincluding an annual baseline increase, can therefore defer promotion until the floor falls back or\nthe operator replaces the registration. Operators coordinating replacement first arrange any sponsor\nunbonding (native delegation is deprecated), then deregister and register at the new minimum;\nderegistration does not enforce this backing-removal procedure. Appendix H records the missing\ntop-up path.\n\n**Set size.** The active set is capped at **1,000**; the **finalizing committee is 100** (§15.4),\nsampled from the active set, so the two are separate bounds. Under D-0526 (resolving E.41 via Option (a)),\nevery active validator (up to 1,000) is a BABE block authoring authority (`MAX_ACTIVE_VALIDATORS` =\n`MaxAuthorities` = 1,000), while AlephBFT finality evaluates strictly across the 100-member PoUI committee.\nEffective set size below the cap is governed by rotation throughput, the stake gate, and the runtime\nminimum-set and churn guards ([`validator_min_active_validators`](#param-validator_min_active_validators) =\n4, [`validator_rotation_churn_percent`](#param-validator_rotation_churn_percent) = 10%,\n[`validator_min_scored_samples`](#param-validator_min_scored_samples) = 3). How that runtime floor relates\nto the launch cohort, committee-safety premise, and skip-vs-truncate policy is E.56.\n\nComposition of the first active set at mainnet genesis (post-testnet ranking by verification liveness,\nplacement declaration, 10 % per-domain cap) and the move from fixed bottom-50 ejection to a\nperformance floor are proposals pending ratification:\n[D-0507](decisions/v0.5.md#d-0507--post-testnet-genesis-validator-selection-and-placement-admission),\n[D-0508](decisions/v0.5.md#d-0508--rotation-on-underperformance-floor-based-ejection-and-on-chain-performance-signal)."},{"name":"Section: 15.6","before":"### 15.6 The validator across the session lifecycle\n\nInference streams off-chain, so ordinary validation does not re-execute every inference turn. Settlement\nstill performs work proportional to submitted turns, signatures, and Merkle paths, and sampled audits add\noff-chain re-execution by the checker lane (R3.5d), never by the validator itself. Validator touchpoints:\n\n| Session stage | Validator action |\n|---------------|------------------|\n| `open_channel` / `force_open` | author includes the tx; DA registers the ephemeral transcript `DataRef` |\n| `force_ack` wait | `AckWindow`; miner ratifies its enclave key or the agent reclaims escrow (`expire_force_open`) |\n| streaming turns (off-chain) | **none** — enclave signs leaves; the *agent* co-signs the receipt |\n| `settle` / `force_settle` | the agent's co-signed receipt authorizes private payment, with no public work credit (R11.2b); `force_settle` opens a challenge window in which validators verify and co-sign (2/3) a TOPLOC/measured-root mismatch verdict from the checker lane (R3.5d) → fraud slash; closed-channel recovery remains open (E.44) |\n| dispute (fraud only) | standing = session agent (own channel) + active validators (any channel); adjudicate the bisection; DA serve-or-slash supplies the contested leaf; non-response → fraud verdict + slash |\n\n**Two distinct co-signings:** (a) the **validator BFT attestation quorum** co-signs a proof for `G_n`\ncredit on the direct rail; (b) the **agent** co-signs each turn's receipt and the settlement receipt.\nOnly (a) is a validator duty; any re-execution behind either is the checker lane's (R3.5d). Miner and\nmodel selection is **agent-driven** (`open_channel` names the miner and pins `model_hash`); there is\nno on-chain scheduler.","after":"### 15.6 The validator across the session lifecycle\n\nInference streams off-chain, so ordinary validation does not re-execute every inference turn. Settlement\nstill performs work proportional to submitted turns, signatures, and Merkle paths, and sampled audits add\noff-chain re-execution by the checker lane (R3.5d), never by the validator itself. Validator touchpoints:\n\n| Session stage | Validator action |\n|---------------|------------------|\n| `open_channel` / `force_open` | author includes the tx; the ephemeral transcript `DataRef` is bound at `force_settle` (R1.2a, R12.1f, G.1) |\n| `force_ack` wait | `AckWindow`; miner ratifies its enclave key or the agent reclaims escrow (`expire_force_open`) |\n| streaming turns (off-chain) | **none** — enclave signs leaves; the *agent* co-signs the receipt |\n| `settle` / `force_settle` | the agent's co-signed receipt authorizes private payment, with no public work credit (R11.2b); `force_settle` opens a challenge window in which validators verify and co-sign (2/3) a TOPLOC/measured-root mismatch verdict from the checker lane (R3.5d) → fraud slash; closed-channel recovery remains open (E.44) |\n| dispute (fraud only) | standing = session agent (own channel) + active validators (any channel); adjudicate the bisection; DA serve-or-slash supplies the contested leaf; non-response → fraud verdict + slash |\n\n**Two distinct co-signings:** (a) the **validator BFT attestation quorum** co-signs a proof for `G_n`\ncredit on the direct rail; (b) the **agent** co-signs each turn's receipt and the settlement receipt.\nOnly (a) is a validator duty; any re-execution behind either is the checker lane's (R3.5d). Miner and\nmodel selection is **agent-driven** (`open_channel` names the miner and pins `model_hash`); there is\nno on-chain scheduler."},{"name":"Section: 15.7","before":"### 15.7 Slashing & recovery\n\n`pallet_validators` is the single penalty authority (§11.3 table). Fraud (Collusion / EvidenceForgery /\nTeeAttestationFailure) = 100% burn + eject + blacklist. Equivocation follows the correlated curve: a\nlone offence burns 50%, returns the other 50% after 180 d, ejects the validator, and remains\nre-stakeable; ≥⅓ correlated equivocation burns 100%, ejects, and blacklists. Liveness = 1% + jail;\nextended downtime = 5% + kick.\n[`validator_unbonding_blocks`](#param-validator_unbonding_blocks) = 21 d with a slash-lock while a\nsession/dispute/audit is open (D-0419); the cooldown exceeds the 14 d DA retention `W`, and its\ncomposition against the full dispute lifecycle is E.57.","after":"### 15.7 Slashing & recovery\n\n`pallet_validators` is the single penalty authority (§11.3 table); all slashed collateral is transferred\n100% to `FLOPFoundationAccount` with zero burn (§9.3 R9.10). Fraud (Collusion / EvidenceForgery /\nTeeAttestationFailure) = 100% slash + eject + blacklist. Equivocation follows the correlated curve: a\nlone offence slashes 50%, returns the other 50% after 180 d, ejects the validator, and remains\nre-stakeable; ≥⅓ correlated equivocation slashes 100%, ejects, and blacklists. Liveness = 1% + jail;\nextended downtime = 5% + kick.\n[`validator_unbonding_blocks`](#param-validator_unbonding_blocks) = 21 d with a slash-lock while a\nsession/dispute/audit is open (D-0419); the cooldown exceeds the 14 d DA retention `W`, and its\ncomposition against the full dispute lifecycle is E.57."},{"name":"Section: 2.3","before":"### 2.3 Safety — the three sub-proofs\n\nPoUI gates production on **stake + verified useful work**, not hashpower, so a longest-chain Nakamoto\nsafety theorem does not apply and **MUST NOT** be relied upon. Safety instead decomposes into three\nindependent sub-proofs, each in its own trust domain:\n\n1. **Committee Sybil cost.** A committee identity costs validator stake only, with no hardware,\n   calibration, or Ghost-Task term: eligibility is stake at or above `effective_minimum_stake()` (whose\n   baseline is [`validator_min_stake`](#param-validator_min_stake)) plus a recent accepted verification\n   duty (R15.4c), and the duty is an eligibility condition, not a cost. Delegated and sponsored stake\n   may count toward that floor, but only self-stake counts as an identity's Sybil capital: delegated\n   and sponsored backing need be neither the operator's own nor distinct across identities. The cost of\n   `k` identities is therefore the sum of their self-stakes, not `k · effective_minimum_stake()`. E.42\n   must bound that self-stake and bridge it and the implemented sampling to the honest-seat premise of\n   (2); a mode that seats identities without a recent duty is an E.42 exception. `MaxSlotsPerEntity` is\n   self-declared and is not a Sybil cost. Appendix H records where the deployed runtime departs from\n   this model.\n2. **BFT ordering safety under honest seats.** Given `< ⅓` Byzantine committee seats, AlephBFT atomic\n   broadcast supplies its agreement and total-order result (adopted from AlephBFT; not re-proven here).\n   The PoUI/stake gate constrains eligibility but does not by itself establish this realized seat premise.\n3. **Verification integrity.** Committee eligibility requires a recent *accepted verification duty*\n   (R15.4c — attesting, adjudicating, auditing; never proof production), and rewards/settlement are\n   gated by the tiered verification stack (§3). Subject to actual enforcement of the gate and\n   verification bridge (E.42–E.44, E.52), this constrains stake-only eligibility and unverified reward\n   credit. It does not prove honest consensus behavior.\n\nThe probabilistic bridge from eligible-set composition to the realized seat premise is unresolved\n([E.42](#appendix-e--open-specification-items)). In particular, weighted sampling of distinct identities\nwith unequal stake is not binomial sampling by aggregate attacker stake. `SelectionTailDominated` in the\nLean model is an explicit hypothesis, not a theorem about the implemented sampler. Capture analysis must\nmodel the actual eligible identities, their weights, the without-replacement draw, stake splitting, small\neligible pools, repeated epochs, and BABE-VRF seed influence.","after":"### 2.3 Safety — the three sub-proofs\n\nPoUI gates production on **stake + verified useful work**, not hashpower, so a longest-chain Nakamoto\nsafety theorem does not apply and **MUST NOT** be relied upon. Safety instead decomposes into three\nindependent sub-proofs, each in its own trust domain:\n\n1. **Committee Sybil cost.** A committee identity costs validator stake only, with no hardware,\n   calibration, or Ghost-Task term: eligibility is stake at or above `effective_minimum_stake()` (whose\n   baseline is [`validator_min_stake`](#param-validator_min_stake)) plus a recent accepted verification\n   duty (R15.4c), and the duty is an eligibility condition, not a cost. Validator and miner stakes are\n   self-stake only (third-party delegated staking is prohibited). Sponsored stake (E.32) may count\n   toward that floor, but only self-stake counts as an identity's Sybil capital: sponsored backing need\n   be neither the operator's own nor distinct across identities. The cost of `k` identities is\n   therefore the sum of their self-stakes, not `k · effective_minimum_stake()`. Where a sponsor-posted\n   bond counts as self-stake (R6.1a), the cost of sponsored identities is the sponsor's capital and\n   rests on the sponsor's admission of operators. E.42\n   must bound that self-stake and bridge it and the implemented sampling to the honest-seat premise of\n   (2); a mode that seats identities without a recent duty is an E.42 exception. `MaxSlotsPerEntity` is\n   self-declared and is not a Sybil cost. Appendix H records where the deployed runtime departs from\n   this model.\n2. **BFT ordering safety under honest seats.** Given `< ⅓` Byzantine committee seats, AlephBFT atomic\n   broadcast supplies its agreement and total-order result (adopted from AlephBFT; not re-proven here).\n   The PoUI/stake gate constrains eligibility but does not by itself establish this realized seat premise.\n3. **Verification integrity.** Committee eligibility requires a recent *accepted verification duty*\n   (R15.4c — attesting, adjudicating, auditing; never proof production), and rewards/settlement are\n   gated by the tiered verification stack (§3). Subject to actual enforcement of the gate and\n   verification bridge (E.42–E.44, E.52), this constrains stake-only eligibility and unverified reward\n   credit. It does not prove honest consensus behavior.\n\nThe probabilistic bridge from eligible-set composition to the realized seat premise is unresolved\n([E.42](#appendix-e--open-specification-items)). In particular, weighted sampling of distinct identities\nwith unequal stake is not binomial sampling by aggregate attacker stake. `SelectionTailDominated` in the\nLean model is an explicit hypothesis, not a theorem about the implemented sampler. Capture analysis must\nmodel the actual eligible identities, their weights, the without-replacement draw, stake splitting, small\neligible pools, repeated epochs, and BABE-VRF seed influence."},{"name":"Section: 5 / Rationale & sources *(non-normative)* [after 5.3]","before":"### Rationale & sources *(non-normative)*\n\nSizing target and sovereign-DA decision: `D-0402` (sovereign validator DA), `D-0412` (DA is a validator\nduty, no per-byte fee; supersedes the fee provisions of D-0402/D-0407), `D-0407` (leased model storage).\nR5.3f combines D-0407's rule that in-use leases remain stored with D-0412's publisher withdrawal and\nfull refundable-deposit rule.\nFull design da-sovereign-validator-design.md; sizing\nindexer-scaling.md, scaling-500k-agents.md,\nscaling-500m-1b-agents.md,\nr3-throughput-ceiling.md. Formal:\n`FlopSpecs/DataAvailability.lean`,\n`FlopSpecs/DaProviderRotation.lean`,\n`FlopSpecs/IndexerReorgSafety.lean`,\n`da/da-retrievability.qnt`. Review arithmetic and availability\nassumptions: [prepublication-evidence.md](research/prepublication-evidence.md). Provenance clarification:\n`D-0501`. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).","after":"### Rationale & sources *(non-normative)*\n\nSizing target and sovereign-DA decision: `D-0402` (sovereign validator DA), `D-0412` (DA is a validator\nduty, no per-byte fee; supersedes the fee provisions of D-0402/D-0407), `D-0407` (leased model storage).\n`D-0521` extends the prune pin guard to Ephemeral blobs without extending their expiry.\nR5.3f combines D-0407's rule that in-use leases remain stored with D-0412's publisher withdrawal and\nfull refundable-deposit rule.\nFull design da-sovereign-validator-design.md; sizing\nindexer-scaling.md, scaling-500k-agents.md,\nscaling-500m-1b-agents.md,\nr3-throughput-ceiling.md. Formal:\n`FlopSpecs/DataAvailability.lean`,\n`FlopSpecs/DaProviderRotation.lean`,\n`FlopSpecs/IndexerReorgSafety.lean`,\n`da/da-retrievability.qnt`. Review arithmetic and availability\nassumptions: [prepublication-evidence.md](research/prepublication-evidence.md). Provenance clarification:\n`D-0501`. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix)."},{"name":"Section: 5.3","before":"### 5.3 The verified-task footprint & sovereign DA\n\nA verified task **MUST** commit only ~32 B per blob on-chain, not the bytes. The ~2 MB `StarkProof` cap\nis a **submission call-data path** (it rides the extrinsic transiently and prunes with the block), not\npermanent storage — proofs/quotes/I-O live in DA, referenced by hash:\n\n```\ndirect-rail attestation Vec bytes/claim = compact_len(quorum_size) + 275 B × quorum_size\noff-chain (DA, by DataRef)              = proof_data, TEE quote (5–10 KB), event log (≤256 KB)\n```\n\nThe current fixed-field SCALE size is 275 B per `ValidatorAttestation`; the signed subset is 179 B.\nThe signature bundle is linear in quorum size. The source-checked SCALE fixtures include the runtime\npallet/call indices, v5 bare preamble, outer compact length, and embedded validator signatures. Under\nthe default two-thirds rule, 100 active validators require 67 signatures: the argument vector is\n18,427 B and the complete extrinsic is 18,434 B. At the supported active-set maximum of 200, 134\nsignatures produce 36,852 B and 36,859 B respectively. The seven-byte difference is two call-index\nbytes, one bare-preamble byte, and a four-byte length prefix. The finality committee is a separate set\ncapped at 100; 1,000 active validators is not a supported runtime state. No constant-size signature\naggregation is specified. These byte measurements are not divided into a throughput claim; charged\nweights, competing traffic, and finality remain separate constraints. Full fixtures and limitations:\n[prepublication evidence](research/prepublication-evidence.md).\n\n**DA requirements (sovereign, validator-hosted, FLOP-denominated).**\n\n- **R5.3a.** DA storage **MUST** use no external currency/token/network dependency; **validators are the\n  storage nodes** under stake. `pallet_da_registry` keeps only a\n  `DataRef = (commitment, provider_id, retention_class)` plus the assigned validator subset and audit\n  bookkeeping; the erasure-coded bytes (Reed–Solomon rate ½, [`da_shard_count`](#param-da_shard_count)\n  R=6, any [`da_min_replication_factor`](#param-da_min_replication_factor) k=3 reconstruct) live\n  off-chain on a deterministic stake-weighted subset (`hash(commitment) → subset`). Because the\n  publisher can influence a commitment, the assignment's anti-grinding rule, operator/failure-domain\n  diversity, repair process, and cumulative retention budget remain open in\n  [E.47](#appendix-e--open-specification-items).\n- **R5.3b — Serve-or-slash.** Retrievability audits (the Ghost-Task known-answer pattern) **MUST** slash\n  a bounded amount ([`da_serve_or_slash_percent`](#param-da_serve_or_slash_percent), Liveness class, not\n  fraud) of a non-serving validator's bond. A penalty **MUST** be re-derived from the *live* validator\n  set (never stale-slashing a rotated-out provider).\n- **R5.3c — Protocol DA duty.** Protocol-evidence and leased-model DA under this section are validator\n  **duties**, funded from the validator share of block rewards + fees; these duties **MUST NOT** charge\n  per-byte storage or retrieval fees. Serve-or-slash enforces the funded duty. Paid application objects\n  **MUST** use the separate contract in §5.4.\n- **R5.3d — Retention classes.** `Ephemeral` (≥ challenge window, then prunable) covers\n  quotes/proofs/transcripts/I-O — **no charge**, spam-bounded because such blobs are creatable only\n  through fee-bearing flows. `Leased` covers model weights + dm-verity images — a fixed term with **no\n  storage fee** but a **refundable anti-spam deposit** (`bytes × `[`da_lease_deposit_per_byte`](#param-da_lease_deposit_per_byte),\n  held under a dedicated hold reason, **returned in full** on prune or withdrawal — never revenue),\n  extendable by anyone for free (`top_up_lease`, tx fee only), pruned only after `lease_end + grace`\n  (14 d) **and** only while no consumer holds a usage **pin**. Pruning **MUST** be recoverable: the\n  dm-verity root is deterministic, so re-upload reproduces the same commitment and identity\n  (`MeasuredRoots`) survives.\n- **R5.3f — Lease withdrawal.** The publisher, and no other account, **MAY** call\n  `withdraw_lease(commitment)` for a `Leased` blob. The call **MUST** reject an unknown or non-leased\n  blob, a signer other than the publisher, or any blob with `pin_count > 0`; eligibility **MUST NOT**\n  depend on `lease_end`. For withdrawal purposes, a third-party `top_up_lease` **MUST** only extend the\n  prune horizon: it **MUST NOT** bind the publisher to that horizon or entitle the extender to a\n  refund. A successful withdrawal **MUST** remove the blob, so no further audit can be issued against\n  it, and refund the full deposit to the publisher. Withdrawal does not by itself resolve an audit\n  already issued against the blob; how such an audit resolves is open (E.47).\n- **R5.3e — Reorg-safe serving.** The off-chain indexer **MUST** serve only heights inside the AlephBFT\n  finalized prefix (a finalized block can never orphan), never the best tip.\n\nLeasing supersedes an unbounded \"persistent\" tier — model relevance is 6–12 months. Moving the TEE quote\noff the miner's HTTP server removes miner-only custody. It does not make availability independent of the\nvalidator set: registration, an unexpired record, successful spot audits, and reconstructability over the\nfull dispute lifecycle are distinct predicates. Serve-or-slash is an incentive conditional on audits and\nrepair, not an unconditional availability guarantee (E.47).","after":"### 5.3 The verified-task footprint & sovereign DA\n\nA verified task **MUST** commit only ~32 B per blob on-chain, not the bytes. The ~2 MB `StarkProof` cap\nis a **submission call-data path** (it rides the extrinsic transiently and prunes with the block), not\npermanent storage — proofs/quotes/I-O live in DA, referenced by hash:\n\n```\ndirect-rail attestation Vec bytes/claim = compact_len(quorum_size) + 275 B × quorum_size\noff-chain (DA, by DataRef)              = proof_data, TEE quote (5–10 KB), event log (≤256 KB)\n```\n\nThe current fixed-field SCALE size is 275 B per `ValidatorAttestation`; the signed subset is 179 B.\nThe signature bundle is linear in quorum size. The source-checked SCALE fixtures include the runtime\npallet/call indices, v5 bare preamble, outer compact length, and embedded validator signatures. Under\nthe default two-thirds rule, 100 active validators require 67 signatures: the argument vector is\n18,427 B and the complete extrinsic is 18,434 B. At the supported active-set maximum of 200, 134\nsignatures produce 36,852 B and 36,859 B respectively. The seven-byte difference is two call-index\nbytes, one bare-preamble byte, and a four-byte length prefix. The finality committee is a separate set\ncapped at 100; 1,000 active validators is not a supported runtime state. No constant-size signature\naggregation is specified. These byte measurements are not divided into a throughput claim; charged\nweights, competing traffic, and finality remain separate constraints. Full fixtures and limitations:\n[prepublication evidence](research/prepublication-evidence.md).\n\n**DA requirements (sovereign, validator-hosted, FLOP-denominated).**\n\n- **R5.3a.** DA storage **MUST** use no external currency/token/network dependency; **validators are the\n  storage nodes** under stake. `pallet_da_registry` keeps only a\n  `DataRef = (commitment, provider_id, retention_class)` plus the assigned validator subset and audit\n  bookkeeping; the erasure-coded bytes (Reed–Solomon rate ½, [`da_shard_count`](#param-da_shard_count)\n  R=6, any [`da_min_replication_factor`](#param-da_min_replication_factor) k=3 reconstruct) live\n  off-chain on a deterministic stake-weighted subset (`hash(commitment) → subset`). Because the\n  publisher can influence a commitment, the assignment's anti-grinding rule, operator/failure-domain\n  diversity, repair process, and cumulative retention budget remain open in\n  [E.47](#appendix-e--open-specification-items).\n- **R5.3b — Serve-or-slash.** Retrievability audits (the Ghost-Task known-answer pattern) **MUST** slash\n  a bounded amount ([`da_serve_or_slash_percent`](#param-da_serve_or_slash_percent), Liveness class, not\n  fraud) of a non-serving validator's bond. A penalty **MUST** be re-derived from the *live* validator\n  set (never stale-slashing a rotated-out provider).\n- **R5.3c — Protocol DA duty.** Protocol-evidence and leased-model DA under this section are validator\n  **duties**, funded from the validator share of block rewards + fees; these duties **MUST NOT** charge\n  per-byte storage or retrieval fees. Serve-or-slash enforces the funded duty. Paid application objects\n  **MUST** use the separate contract in §5.4.\n- **R5.3d — Retention classes.** `Ephemeral` (≥ challenge window, then prunable) covers\n  quotes/proofs/transcripts/I-O — **no charge**, spam-bounded because such blobs are creatable only\n  through fee-bearing flows. `Leased` covers model weights + dm-verity images — a fixed term with **no\n  storage fee** but a **refundable anti-spam deposit** (`bytes × `[`da_lease_deposit_per_byte`](#param-da_lease_deposit_per_byte),\n  held under a dedicated hold reason, **returned in full** on prune or withdrawal — never revenue),\n  extendable by anyone for free (`top_up_lease`, tx fee only), pruned only after `lease_end + grace`\n  (14 d). For both retention classes, pruning **MUST** reject a blob while any consumer holds a\n  usage **pin** (`pin_count > 0`); a pin **MUST NOT** extend the retention deadline or permit new\n  usage after expiry. Pruning **MUST** be recoverable: the\n  dm-verity root is deterministic, so re-upload reproduces the same commitment and identity\n  (`MeasuredRoots`) survives.\n- **R5.3f — Lease withdrawal.** The publisher, and no other account, **MAY** call\n  `withdraw_lease(commitment)` for a `Leased` blob. The call **MUST** reject an unknown or non-leased\n  blob, a signer other than the publisher, or any blob with `pin_count > 0`; eligibility **MUST NOT**\n  depend on `lease_end`. For withdrawal purposes, a third-party `top_up_lease` **MUST** only extend the\n  prune horizon: it **MUST NOT** bind the publisher to that horizon or entitle the extender to a\n  refund. A successful withdrawal **MUST** remove the blob, so no further audit can be issued against\n  it, and refund the full deposit to the publisher. Withdrawal does not by itself resolve an audit\n  already issued against the blob; how such an audit resolves is open (E.47).\n- **R5.3e — Reorg-safe serving.** The off-chain indexer **MUST** serve only heights inside the AlephBFT\n  finalized prefix (a finalized block can never orphan), never the best tip.\n\n- **R5.3g — Session evidence allocation.** Only the named miner of a funded Open channel\n  **MAY** allocate Ephemeral evidence through the composing session pallet. Allocation **MUST**\n  be bounded to one immutable activation slot per SLA turn and one final transcript. Activation\n  bytes **MUST NOT** exceed [the session activation cap](#param-channel_max_session_activation_bytes);\n  canonical FCC4 transcript bytes **MUST NOT** exceed 40 + 351 × SLA max_turns. An identical retry\n  **MUST** verify the original publisher, size, retention class and unexpired registry binding\n  without renewing expiry; a conflicting, expired or missing occupied-slot binding **MUST** reject.\n  Registration **MUST NOT** satisfy TOPLOC, proof or payment gates. Publishers **MUST** establish\n  finalized registration before assigned-provider upload and verify custody and reconstruction.\n  After proof generation, retirement **MUST** recheck exact evidence bytes, current custody and\n  natural retention through the full dispute horizon before settlement. Terminal channel closure\n  **MUST** remove allocation bookkeeping without changing the DA retention contract.\n\nLeasing supersedes an unbounded \"persistent\" tier — model relevance is 6–12 months. Moving the TEE quote\noff the miner's HTTP server removes miner-only custody. It does not make availability independent of the\nvalidator set: registration, an unexpired record, successful spot audits, and reconstructability over the\nfull dispute lifecycle are distinct predicates. Serve-or-slash is an incentive conditional on audits and\nrepair, not an unconditional availability guarantee (E.47)."},{"name":"Section: 6 / Rationale & sources *(non-normative)* [after 6.5]","before":"### Rationale & sources *(non-normative)*\n\nProvenance: `D-0513` (SS58 prefix 42 on every network; networks told apart by genesis hash, R6.5a),\n`D-0408` (single validator-staking system), `D-0413` (value-coupled stake floor), `D-0416`\n(stake-ordered rotation), `D-0417` (declarative spend-condition layer, UTXO not adopted), `D-0418`\n(capacity-proportional miner stake, provisional pending sim calibration), `D-0403` (sessions as the\nescrow primitive's first instance). Grounding:\nagent-composition-primitives.md,\nagent-token-lifecycle.md,\nmodel-selection-pricing-inference.md,\nminer-capacity-stake-calibration.md. Prior art:\nMiniscript, Simplicity, Clarity, Marlowe, Move resources, UCAN. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---","after":"### Rationale & sources *(non-normative)*\n\nProvenance: `D-0513` (SS58 prefix 42 on every network; networks told apart by genesis hash, R6.5a),\n`D-0408` (single validator-staking system), `D-0413` (value-coupled stake floor), `D-0416`\n(stake-ordered rotation), `D-0417` (declarative spend-condition layer, UTXO not adopted), `D-0418`\n(capacity-proportional miner stake, provisional pending sim calibration), `D-0403` (sessions as the\nescrow primitive's first instance), `D-0530` (operator self-stake only; deprecation of delegation and\ncommissions; 5% duration-locked community staking pool). Grounding:\nagent-composition-primitives.md,\nagent-token-lifecycle.md,\nmodel-selection-pricing-inference.md,\nminer-capacity-stake-calibration.md. The R6.2c latch and\nreset paths have a bounded model in\n`session-circuit-breaker.qnt`. An enclosing\natomic batch that fails after the tripping call rolls the latch back with it; this is accepted, since\nthe over-limit call never executes either way and a delegate gains nothing it could not get by\nstaying under the limits. Prior art:\nMiniscript, Simplicity, Clarity, Marlowe, Move resources, UCAN. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---"},{"name":"Section: 6.1","before":"### 6.1 Primitives\n\nFLOP's economic layer is **account/nonce-based Substrate** (zero UTXO). The available primitives:\n\n| Primitive | Detail |\n|-----------|--------|\n| Token transfers | `pallet_balances`; existential deposit 0.01 FLOP; dynamic fees |\n| Multisig | `pallet_multisig`; ≤100 signatories |\n| Proxy / authority delegation | `pallet_proxy`; Any / NonTransfer / Governance / Staking types |\n| Validator staking & authority set | `pallet_validators` — the **single source of truth** and the `SessionManager`/authority source. Min stake [`validator_min_stake`](#param-validator_min_stake) (compounds [`validator_growth_numerator`](#param-validator_growth_numerator)/[`validator_growth_denominator`](#param-validator_growth_denominator) = +9 %/yr) with a value-coupled floor `max(baseline, k·V_booked)`; native delegation; stake-ordered rotation with a min-performance gate. There is no `pallet_staking`. |\n| Miner staking | `pallet_miner_staking`; [`miner_unbonding_blocks`](#param-miner_unbonding_blocks) unbond, [`min_miner_self_stake`](#param-min_miner_self_stake) min self-stake, 0–[`miner_commission_cap_percent`](#param-miner_commission_cap_percent) commission |\n| Stake delegation | validators: native `pallet_validators` delegation (cap vs self-stake, commission, pro-rata); miners: `miner-staking` + `delegation-cap` (≤10× self-stake) |\n| Timelock / vesting | `pallet_vesting`, `work-vesting` (`R_p²`), `airdrop-vesting`; HTLC escrow (§10) |\n| Declarative spend-condition layer | Miniscript/Simplicity-style bounded predicates (sig · hash · timelock · threshold) on the **account** model — opcode-like composability, no UTXO script engine (§6.4) |\n\n**Capacity-proportional miner self-stake (normative).** Required miner self-stake **MUST** be linear in\ncalibrated throughput with **no cap** (a cap makes the largest miners' inflation fraud +EV):\n\n```\nrequired_self_stake(B_p) = min_miner_self_stake + miner_capacity_stake_per_gflop · B_p\n```\n\nwith [`min_miner_self_stake`](#param-min_miner_self_stake) = 10,000 FLOP and\n[`miner_capacity_stake_per_gflop`](#param-miner_capacity_stake_per_gflop) = 0.01 FLOP/(G_n/s). The\ncoefficient guards emission-inflation fraud: the realized extra reward over the dispute window `W` for a\nminer claiming `X·B_p` is `r·(X−1)·B_p·W` (linear in `B_p`), so a constant `k` tracks the security floor\n`k_min(EV) = ((1−p)/p)·(X−1)·P·W / B_total`. The onboarding form of this bound is Appendix C.1.","after":"### 6.1 Primitives\n\nFLOP's economic layer is **account/nonce-based Substrate** (zero UTXO). The available primitives:\n\n| Primitive | Detail |\n|-----------|--------|\n| Token transfers | `pallet_balances`; existential deposit 0.01 FLOP; dynamic fees |\n| Multisig | `pallet_multisig`; ≤100 signatories |\n| Proxy / authority delegation | `pallet_proxy`; Any / NonTransfer / Governance / Staking types |\n| Validator staking & authority set | `pallet_validators` — the **single source of truth** and the `SessionManager`/authority source. Min stake [`validator_min_stake`](#param-validator_min_stake) (compounds [`validator_growth_numerator`](#param-validator_growth_numerator)/[`validator_growth_denominator`](#param-validator_growth_denominator) = +9 %/yr) with a value-coupled floor `max(baseline, k·V_booked)`; self-stake only (no delegated staking); stake-ordered rotation with a min-performance gate. There is no `pallet_staking`. |\n| Miner staking | `pallet_miner_staking`; [`miner_unbonding_blocks`](#param-miner_unbonding_blocks) unbond, [`min_miner_self_stake`](#param-min_miner_self_stake) min self-stake; self-stake only (legacy commission [`miner_commission_cap_percent`](#param-miner_commission_cap_percent) and [`max_delegators_per_miner`](#param-max_delegators_per_miner) deprecated) |\n| Operator self-stake & community staking pool | operators (validators and miners): self-stake only, with no third-party stake delegation or commission cuts (`miner_staking::delegate`, `validators::delegate`, and `delegation-cap` deprecated); non-operating holders: **duration-locked community staking pool** sharing the [`staker_share_ppt`](#param-staker_share_ppt) = 5% block-reward allocation across 7 lock duration tiers without slashing risk (§9.1 R9.12, [E.40](#appendix-e--open-specification-items)) |\n| Timelock / vesting | `pallet_vesting`, `work-vesting` (`R_p²`), `airdrop-vesting`; HTLC escrow (§10) |\n| Declarative spend-condition layer | Miniscript/Simplicity-style bounded predicates (sig · hash · timelock · threshold) on the **account** model — opcode-like composability, no UTXO script engine (§6.4) |\n\n**Capacity-proportional miner self-stake (normative).** Required miner self-stake **MUST** be linear in\ncalibrated throughput with **no cap** (a cap makes the largest miners' inflation fraud +EV):\n\n```\nrequired_self_stake(B_p) = min_miner_self_stake + miner_capacity_stake_per_gflop · B_p\n```\n\nwith [`min_miner_self_stake`](#param-min_miner_self_stake) = 10,000 FLOP and\n[`miner_capacity_stake_per_gflop`](#param-miner_capacity_stake_per_gflop) = 0.01 FLOP/(G_n/s). The\ncoefficient guards emission-inflation fraud: the realized extra reward over the dispute window `W` for a\nminer claiming `X·B_p` is `r·(X−1)·B_p·W` (linear in `B_p`), so a constant `k` tracks the security floor\n`k_min(EV) = ((1−p)/p)·(X−1)·P·W / B_total`. The onboarding form of this bound is Appendix C.1.\n\n**R6.1a — Sponsored registration bonds.** A sponsor **MAY** post the whole registration bond of a miner\nor validator and later top it up (Appendix G.3). The sponsored principal **MUST** stay owned by, and\nfrozen in, the sponsor account: the operator **MUST NOT** be able to transfer it, pay fees with it, place\nit on hold or escrow, or back other stake with it. It **MUST** stay slashable while active or unbonding\nand **MUST** be refunded only to the sponsor, after the role's unbonding window has elapsed on the\nfinalized prefix. Active sponsored principal **MUST** count toward the miner self-stake requirement above\nand toward the validator effective minimum (§15.2) only on runtimes built with\n[`sponsored_self_stake_enabled`](#param-sponsored_self_stake_enabled); on every other runtime it is\nbacking only, and sponsored registration and top-up **MUST** be rejected. The slash-proceeds account\n**MUST NOT** post principal that counts as self-stake, since its slashes would pay it back; while it\nstill holds a live sponsor position from before the rule, the runtime **MUST NOT** credit any sponsored principal. Because freezes overlap rather than add, on enabled runtimes sponsor principal **MUST** be the\nsponsor account's only staking freeze: an account holding own stake, a delegation or any staking freeze\nin the other staking pallet **MUST NOT** open or grow a sponsor position, and a sponsor account **MUST\nNOT** add own stake or a delegation in either staking pallet. When a running chain first enables the\nrule, every live position whose sponsor already holds another staking freeze **MUST** be quarantined,\nand no sponsored principal credited until that scan, which runs in bounded per-block batches,\ncompletes, nor while any quarantined position remains live. On enabled runtimes a\nregistration, own or sponsored, **MUST** be rejected while sponsor positions from an earlier\nregistration of the account are live, so a slash of the new registration never reaches sponsors of the\nold one; the operator **MAY** withdraw such a position after its finalized unlock, and **MAY** start\nthe full unbond of one that outlived its registration. On enabled runtimes a jailed validator **MUST\nNOT** return to the active set below the effective minimum: `un_jail`, like `rejoin`, first restores\nits bonded self-stake from its own spare balance. On enabled\nruntimes a sponsor unbond that takes an\nactive validator below the effective minimum **MUST** return it to the queue, and **MUST** be rejected where\nthat would cross the minimum active set. On enabled runtimes an\noperator's deregistration **MUST** start the unbonding of its active sponsor positions. The validator\nself-stake ratio for native delegation **MUST** count operator-owned stake only. Chain state and events\n**MUST** report own and sponsored stake separately; a sponsored bond creates no allocation right (R8.4)."},{"name":"Section: 8 / 8.2 / Data structures [after 8.2]","before":"#### Data structures\n\nAn airdrop grant records its tier, its principal at creation, start block, and claimed amount. A Miner\ngrant also records its accrued unlock credit and the total principal slashed from it, an Agent grant\nits locked compute spend and accrued spend credit, and a channel the locked part of its escrow. The\nconversion snapshot records the ratified Era-T height, account cohort and activity, fraud and cluster\nfilters, allocation, and a binding hash.\n\nThe conversion score, validator activity basis, Validator release order, and reserve disposition\nremain open in [E.38](#appendix-e--open-specification-items).","after":"#### Data structures\n\nAn airdrop grant records its tier, its principal at creation, start block, and claimed amount. A Miner\nor Validator grant also records the total principal `S` slashed from it (and a Miner grant records its\naccrued unlock credit), an Agent grant\nits locked compute spend and accrued spend credit, and a channel the locked part of its escrow. The\nconversion snapshot records the ratified Era-T height, account cohort and activity, fraud and cluster\nfilters, allocation, and a binding hash.\n\nThe conversion score, validator activity basis, Validator release order, and reserve disposition\nremain open in [E.38](#appendix-e--open-specification-items)."},{"name":"Section: 8 / 8.2 / Requirements [after 8.2]","before":"#### Requirements\n\n- **R8.3 — Conversion supply.** Era-T activity **MUST** distribute only the existing\n  [`genesis_supply`](#param-genesis_supply): conversion **MUST NOT** create incremental emission or\n  fund an allocation twice. Each miner, validator, and agent allocation **MUST** draw only from its\n  respective [`genesis_miner_airdrop`](#param-genesis_miner_airdrop),\n  [`genesis_validator_airdrop`](#param-genesis_validator_airdrop), or\n  [`genesis_agent_airdrop`](#param-genesis_agent_airdrop) pool; cohorts **MUST NOT** cross-subsidize.\n  The [`genesis_reserve`](#param-genesis_reserve) is not an Era-T airdrop pool.\n- **R8.4 — Conversion eligibility.** A faucet grant, sponsored bond, or transferred balance **MUST NOT**\n  by itself create an allocation right; held Era-T balance and stake size **MUST NOT** be scoring terms.\n  Agent scoring **MUST** derive from settled compute-channel spend and Miner scoring from PoUI-verified\n  effective-FLOP served; completed job count and active days **MUST NOT** be scoring terms.\n  A fraud-flagged account **MUST** receive zero allocation unless its flag is overturned before the\n  genesis specification is locked; it **MUST NOT** receive partial credit while flagged.\n- **R8.5 — Snapshot.** Conversion **MUST** use Era-T activity no later than a governance-ratified,\n  finalized snapshot height. The per-account allocation and its hash **MUST** be published before the\n  genesis specification is locked; the snapshot **MUST** remain revocable and correctable until that\n  lock. The snapshot **MUST** identify each account's cohort, activity, fraud flag, and cluster identity;\n  the published allocation **MUST** bind the inputs used to filter and score each account. The finalized\n  Era-T chain state, allocation file, conversion-parameters file, and their hashes **MUST** form the\n  evidence of record.\n- **R8.6 — Grant landing.** An Era-0 airdrop allocation **MUST** enter as a funded genesis balance frozen by a\n  `pallet_airdrop_vesting` grant; creating the grant **MUST NOT** mint the same allocation again. The\n  grant tier **MUST** be Miner, Validator, or Agent, matching the account's allocation cohort.\n- **R8.7 — Unlock schedule.** A Miner grant **MUST** unlock `⌊P/4⌋` of its principal `P` at its start\n  block. The rest **MUST** unlock only against unlock credit: one FLOP of principal for each FLOP the\n  grantee account receives as the channel's miner in the payout of a compute-channel session settled\n  by `settle` (R12.1a), by certificate-backed settlement of a `CertificatePremium` channel\n  (`certificate_settle`), or by `force_settle → finalize` (R12.1d). A payout **MUST** count only once its\n  settlement block is finalized and\n  [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) have passed since it with no\n  upheld fraud dispute against the session. Block rewards, forward-availability payments, refunds,\n  penalties, and dispute bonds **MUST NOT** accrue credit. A Miner grant's unlocked amount is\n  `min(P − S, ⌊P/4⌋ + credit)`, where `P` is the grant's principal at creation, which never changes,\n  and `S` is the total principal later slashed from it (R8.8); the grant has no end block, and\n  principal not yet unlocked **MUST** stay frozen.\n  A Validator grant **MUST** stay frozen until block\n  [`halving_interval_blocks`](#param-halving_interval_blocks) (63,072,000), the first block of halving\n  era 1 (§9). From that block,\n  Validator grants **MUST** be released one per 86,400 blocks (one day), each releasing its remaining\n  principal in full on its release block, until every Validator grant is released; the window spans as\n  many days as there are Validator grants. Until the release order is fixed\n  ([E.38](#appendix-e--open-specification-items)), Validator grants **MUST NOT** be released. Releasing\n  a grant lifts only its vesting freeze: it **MUST NOT** unbond stake, and a validator in the active set\n  **MUST** keep at least [`validator_min_stake`](#param-validator_min_stake) bonded (§15).\n  Miner and Validator grants **MUST NOT** use a performance adjustment.\n  An Agent grant **MUST NOT** unlock any principal at its start block, and it has no end block. It\n  **MUST** unlock only against spend credit: one FLOP of principal for each three FLOP of its locked\n  part (R8.8) in the `payable` (Appendix F.3, the gross settlement amount before the audit earmark)\n  of a session settled by `settle`, by `certificate_settle`, or by `force_settle → finalize`. A\n  `payable` **MUST** count only once its settlement block is finalized,\n  [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) have passed since it, and\n  every fraud dispute raised against the session in that window has resolved with none upheld.\n  Locked principal spent through `agent_transfer`, refunds, the R12.1d penalty, and any other leg\n  outside the `payable` **MUST NOT** accrue credit. An Agent grant's unlocked amount is `⌊K/3⌋`, where\n  `K` is the total locked part of its credited `payable`s. Its locked compute spend `C`, the principal drawn by the R8.8\n  compute calls net of refunds returned to the grant, **MUST NOT** exceed `⌊3P/4⌋`, where `P` is its\n  principal at creation, so spend cannot consume the quarter that its credit unlocks; principal\n  neither spent nor unlocked **MUST** stay frozen.\n- **R8.8 — Claim and locked spend.** `claim_vested` **MUST** use the finalized head to calculate the\n  unlocked amount, subtract the amount already claimed, and release only a positive remainder from the\n  grant freeze. Still-locked principal of an Agent grant **MAY** be spent only through\n  `agent_transfer`, `open_channel`, `top_up_escrow`, and `force_open` for compute, within the R8.7\n  spend cap; that spend **MUST** consume vesting principal and **MUST NOT** turn it into freely\n  transferable credit. Escrow a channel draws from locked principal, at opening or by top-up, is its\n  locked part. At close the escrow **MUST** be allocated once, in this order: the `payable` draws on\n  the locked part first; a refund then draws on what remains of the locked part first and returns\n  that share to the grant as frozen principal, reducing its locked compute spend; every other leg\n  draws on the remainder. Still-locked\n  principal of a Miner grant **MAY** be bonded as that miner's own self-stake (§6.1); it stays frozen\n  while bonded and after unbonding until it unlocks. Still-locked principal of a Miner or Validator\n  grant **MUST NOT** otherwise be spent, transferred, or used for compute; slashing of bonded stake\n  applies to it. Because stake and grant freezes overlap, a slash of a grantee's bonded stake **MUST**\n  be charged first to the grant's still-frozen principal, up to the lesser of the slash and that\n  principal, and only the remainder to other balance. The grant-charged part **MUST** be added to `S`\n  and removed from the grant's freeze atomically with the slash, so the slash never fails on the grant\n  freeze.","after":"#### Requirements\n\n- **R8.3 — Conversion supply.** Era-T activity **MUST** distribute only the existing\n  [`genesis_supply`](#param-genesis_supply): conversion **MUST NOT** create incremental emission or\n  fund an allocation twice. Each miner, validator, and agent allocation **MUST** draw only from its\n  respective [`genesis_miner_airdrop`](#param-genesis_miner_airdrop),\n  [`genesis_validator_airdrop`](#param-genesis_validator_airdrop), or\n  [`genesis_agent_airdrop`](#param-genesis_agent_airdrop) pool; cohorts **MUST NOT** cross-subsidize.\n  The [`genesis_reserve`](#param-genesis_reserve) is not an Era-T airdrop pool.\n- **R8.4 — Conversion eligibility.** A faucet grant, sponsored bond, or transferred balance **MUST NOT**\n  by itself create an allocation right; held Era-T balance and stake size **MUST NOT** be scoring terms.\n  Agent scoring **MUST** derive from settled compute-channel spend and Miner scoring from PoUI-verified\n  effective-FLOP served; completed job count and active days **MUST NOT** be scoring terms.\n  A fraud-flagged account **MUST** receive zero allocation unless its flag is overturned before the\n  genesis specification is locked; it **MUST NOT** receive partial credit while flagged.\n- **R8.5 — Snapshot.** Conversion **MUST** use Era-T activity no later than a governance-ratified,\n  finalized snapshot height. The per-account allocation and its hash **MUST** be published before the\n  genesis specification is locked; the snapshot **MUST** remain revocable and correctable until that\n  lock. The snapshot **MUST** identify each account's cohort, activity, fraud flag, and cluster identity;\n  the published allocation **MUST** bind the inputs used to filter and score each account. The finalized\n  Era-T chain state, allocation file, conversion-parameters file, and their hashes **MUST** form the\n  evidence of record.\n- **R8.6 — Grant landing.** An Era-0 airdrop allocation **MUST** enter as a funded genesis balance frozen by a\n  `pallet_airdrop_vesting` grant; creating the grant **MUST NOT** mint the same allocation again. The\n  grant tier **MUST** be Miner, Validator, or Agent, matching the account's allocation cohort.\n- **R8.7 — Unlock schedule.** A Miner grant **MUST** unlock `⌊P/4⌋` of its principal `P` at its start\n  block. The rest **MUST** unlock only against unlock credit: one FLOP of principal for each FLOP the\n  grantee account receives from either of two sources. The first is its payout as the channel's miner\n  of a compute-channel session settled by `settle` (R12.1a), by certificate-backed settlement of a\n  `CertificatePremium` channel (`certificate_settle`), or by `force_settle → finalize` (R12.1d). A\n  payout **MUST** count only once its settlement block is finalized and\n  [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) have passed since it with no\n  upheld fraud dispute against the session (this payment-denominated airdrop unlock credit is governed\n  by §8.2 and is distinct from public `G_n` work credit, reward accumulators, and `work-vesting`\n  prohibited by §11.2 R11.2b). The second is its share of the miner leg of the block\n  reward ([`miner_share_ppt`](#param-miner_share_ppt), §9) as actually minted to the grantee account in\n  a block-reward distribution. Such a share **MUST** count once the distribution block is finalized.\n  Each receipt **MUST** count once. The validator, agent, and staker legs of the block reward, the\n  Labs/Foundation subsidy, transaction fees and tips, forward-availability payments, refunds,\n  penalties, and dispute bonds **MUST NOT** accrue credit. A Miner grant's unlocked amount is\n  `min(P − S, ⌊P/4⌋ + credit)`, where `P` is the grant's principal at creation, which never changes,\n  and `S` is the total principal later slashed from it (R8.8); the grant has no end block, and\n  principal not yet unlocked **MUST** stay frozen.\n  A Validator grant **MUST** stay frozen until block\n  [`halving_interval_blocks`](#param-halving_interval_blocks) (63,072,000), the first block of halving\n  era 1 (§9). From that block,\n  Validator grants **MUST** be released one per 86,400 blocks (one day), each releasing its remaining\n  principal `P − S` in full on its release block (where `P` is the grant's principal at creation and `S` is the\n  total principal later slashed from it under R8.8; its unlocked amount is `0` before its release block and\n  `P − S` from its release block onward), until every Validator grant is released; the window spans as\n  many days as there are Validator grants. Until the release order is fixed\n  ([E.38](#appendix-e--open-specification-items)), Validator grants **MUST NOT** be released. Releasing\n  a grant lifts only its vesting freeze: it **MUST NOT** unbond stake, and a validator in the active set\n  **MUST** keep at least [`validator_min_stake`](#param-validator_min_stake) bonded (§15).\n  Miner and Validator grants **MUST NOT** use a performance adjustment.\n  An Agent grant **MUST NOT** unlock any principal at its start block, and it has no end block. It\n  **MUST** unlock only against spend credit: one FLOP of principal for each three FLOP of its locked\n  part (R8.8) in the `payable` (Appendix F.3, the gross settlement amount before the audit earmark)\n  of a session settled by `settle`, by `certificate_settle`, or by `force_settle → finalize`. A\n  `payable` **MUST** count only once its settlement block is finalized,\n  [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) have passed since it, and\n  every fraud dispute raised against the session in that window has resolved with none upheld.\n  Locked principal spent through `agent_transfer`, refunds, the R12.1d penalty, and any other leg\n  outside the `payable` **MUST NOT** accrue credit. An Agent grant's unlocked amount is `⌊K/3⌋`, where\n  `K` is the total locked part of its credited `payable`s. Its locked compute spend `C`, the principal drawn by the R8.8\n  compute calls net of refunds returned to the grant, **MUST NOT** exceed `⌊3P/4⌋`, where `P` is its\n  principal at creation, so spend cannot consume the quarter that its credit unlocks; principal\n  neither spent nor unlocked **MUST** stay frozen.\n- **R8.8 — Claim and locked spend.** `claim_vested` **MUST** use the finalized head to calculate the\n  unlocked amount, subtract the amount already claimed, and release only a positive remainder from the\n  grant freeze. Still-locked principal of an Agent grant **MAY** be spent only through\n  `agent_transfer`, `open_channel`, `top_up_escrow`, and `force_open` for compute, within the R8.7\n  spend cap; that spend **MUST** consume vesting principal and **MUST NOT** turn it into freely\n  transferable credit. Escrow a channel draws from locked principal, at opening or by top-up, is its\n  locked part. At close the escrow **MUST** be allocated once, in this order: the `payable` draws on\n  the locked part first; a refund then draws on what remains of the locked part first and returns\n  that share to the grant as frozen principal, reducing its locked compute spend; every other leg\n  draws on the remainder. Still-locked\n  principal of a Miner grant **MAY** be bonded as that miner's own self-stake (§6.1), and still-locked\n  principal of a Validator grant **MAY** be bonded as that validator's own self-stake (§15.2); in either\n  case it stays frozen\n  while bonded and after unbonding until it unlocks. Still-locked principal of a Miner or Validator\n  grant **MUST NOT** otherwise be spent, transferred, or used for compute; slashing of bonded stake\n  applies to it. Because stake and grant freezes overlap, a slash of a grantee's bonded stake **MUST**\n  be charged first to the grant's still-frozen principal, up to the lesser of the slash and that\n  principal, and only the remainder to other balance. The grant-charged part **MUST** be added to `S`\n  and removed from the grant's freeze atomically with the slash, so the slash never fails on the grant\n  freeze."},{"name":"Section: 8 / Rationale & sources *(non-normative)* [after 8.2]","before":"### Rationale & sources *(non-normative)*\n\nGrounding: ghost-task-sampling-design.md (sampling,\n`GhostTaskCommitment`/`MinerExecutionEvidence`/`CheckerVerdict`, issuer/checker split + appeal),\nminer-capacity-stake-calibration.md.\nGenesis allocation and vesting: Era-T to Era-0 plan,\nSPEC-022 (the pallet's linear,\nperformance-scaled curve, superseded for Miner and Validator grants by D-0517),\nlocked compute spend; provenance: D-0421 (work-first\nallocation), D-0438 and D-0440 (current cohort pools), D-0514 (conversion supply, eligibility and\nscoring inputs, snapshot, and the fail-closed miner adjustment), D-0517 (the Miner quarter at genesis\nand earn-to-unlock credit, the Validator freeze to the first halving and daily release, and immobile\nlocked Miner and Validator principal; it supersedes D-0514's miner adjustment and narrows D-0515's\nlocked spend to Agent grants), D-0515 (grant landing, claims, and\nlocked compute spend), D-0522 (Agent spend-to-unlock: one FLOP per three of locked principal in a settled\n`payable`, the three-quarter spend cap, and locked-first payout and refund attribution). Formal, for R8.1's work-vesting grant only:\n`FlopSpecs/Vesting.lean` (`unlock_le_ratio`, whose\n`h1 : R_p ≤ 1` hypothesis is enforced by R8.1's clamp). Low-`B_p` calibration sandbagging remains\nM13's **[GAP]**. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---","after":"### Rationale & sources *(non-normative)*\n\nGrounding: ghost-task-sampling-design.md (sampling,\n`GhostTaskCommitment`/`MinerExecutionEvidence`/`CheckerVerdict`, issuer/checker split + appeal),\nminer-capacity-stake-calibration.md.\nGenesis allocation and vesting: Era-T to Era-0 plan,\nSPEC-022 (the pallet's linear,\nperformance-scaled curve, superseded for Miner and Validator grants by D-0517),\nlocked compute spend; provenance: D-0421 (work-first\nallocation), D-0438 and D-0440 (current cohort pools), D-0514 (conversion supply, eligibility and\nscoring inputs, snapshot, and the fail-closed miner adjustment), D-0517 (the Miner quarter at genesis\nand earn-to-unlock credit, the Validator freeze to the first halving and daily release, and immobile\nlocked Miner and Validator principal; it supersedes D-0514's miner adjustment and narrows D-0515's\nlocked spend to Agent grants), D-0527 (Miner unlock credit for the grantee's minted miner-leg block\nrewards alongside its settled payouts; supersedes D-0517 item 1), D-0515 (grant landing, claims, and\nlocked compute spend), D-0522 (Agent spend-to-unlock: one FLOP per three of locked principal in a settled\n`payable`, the three-quarter spend cap, and locked-first payout and refund attribution). Formal, for R8.1's work-vesting grant only:\n`FlopSpecs/Vesting.lean` (`unlock_le_ratio`, whose\n`h1 : R_p ≤ 1` hypothesis is enforced by R8.1's clamp). Low-`B_p` calibration sandbagging remains\nM13's **[GAP]**. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---"},{"name":"Section: 9","before":"## 9. Emission & Supply\n\n| Parameter | Value |\n|-----------|-------|\n| Total genesis supply | [`genesis_supply`](#param-genesis_supply) = 4,400,000,000 FLOP (no VC pre-mint, no auction) — three airdrops: [`genesis_miner_airdrop`](#param-genesis_miner_airdrop) = 1,200,000,000 · [`genesis_validator_airdrop`](#param-genesis_validator_airdrop) = 1,200,000,000 · [`genesis_agent_airdrop`](#param-genesis_agent_airdrop) = 1,200,000,000; plus the [`genesis_reserve`](#param-genesis_reserve) = 800,000,000 residual (ecosystem/incentives, not an airdrop) |\n| Era 0 block reward | [`initial_block_reward`](#param-initial_block_reward) = 96 FLOP/block (fixed per-block param; halves per schedule; no cap) |\n| Split | [`miner_share_ppt`](#param-miner_share_ppt) = 75% miners · [`validator_share_ppt`](#param-validator_share_ppt) = 10% validators · [`agent_share_ppt`](#param-agent_share_ppt) = 10% agents · [`staker_share_ppt`](#param-staker_share_ppt) = 5% stakers (era 0: 72 · 9.6 · 9.6 · 4.8 FLOP/block) |\n| Validator share | validator 10% pool, pro-rata by stake with [`finality_committee_premium_weight_ppm`](#param-finality_committee_premium_weight_ppm) = 1.1× for current finality-committee members; liquid on issue (§9.1 R9.13) |\n| Agent & staker legs | 10% + 5% of each block reward minted to protocol-derived sovereign pool accounts; distribution policy unratified ([E.40](#appendix-e--open-specification-items)) |\n| Labs/Foundation subsidy | separate mint of [`subsidy_per_block_per_recipient`](#param-subsidy_per_block_per_recipient) = 8 + 8 FLOP/block (`flop-subsidy`), halving with the reward across all 5 subsidy eras ([`subsidy_duration_blocks`](#param-subsidy_duration_blocks) = 315,360,000, ~10 years); 1,955,232,000 FLOP total |\n| First halving | block 63,072,000 (Day 730) → 48 FLOP/block |\n| Perpetual floor | [`floor_reward`](#param-floor_reward) = 3 FLOP/block from era 5 (block 315,360,000, Day 3650), forever |","after":"## 9. Emission & Supply\n\n| Parameter | Value |\n|-----------|-------|\n| Total genesis supply | [`genesis_supply`](#param-genesis_supply) = 4,400,000,000 FLOP (no VC pre-mint, no auction) — three airdrops: [`genesis_miner_airdrop`](#param-genesis_miner_airdrop) = 1,200,000,000 · [`genesis_validator_airdrop`](#param-genesis_validator_airdrop) = 1,200,000,000 · [`genesis_agent_airdrop`](#param-genesis_agent_airdrop) = 1,200,000,000; plus the [`genesis_reserve`](#param-genesis_reserve) = 800,000,000 residual (ecosystem/incentives — funds the off-chain explorer referral leaderboard, periodic referral lotteries, builder programmes, and security-disclosure rewards; not an airdrop) |\n| Era 0 block reward | [`initial_block_reward`](#param-initial_block_reward) = 96 FLOP/block (fixed per-block param; halves per schedule; no cap) |\n| Split | [`miner_share_ppt`](#param-miner_share_ppt) = 75% miners · [`validator_share_ppt`](#param-validator_share_ppt) = 10% validators · [`agent_share_ppt`](#param-agent_share_ppt) = 10% agents · [`staker_share_ppt`](#param-staker_share_ppt) = 5% stakers (era 0: 72 · 9.6 · 9.6 · 4.8 FLOP/block) |\n| Validator share | validator 10% pool, pro-rata by stake with [`finality_committee_premium_weight_ppm`](#param-finality_committee_premium_weight_ppm) = 1.1× for current finality-committee members; liquid on issue (§9.1 R9.13) |\n| Agent & staker legs | 10% agent leg + 5% duration-locked community staking pool (7 lock duration tiers, zero slashing risk; no operator delegation) minted to protocol-derived sovereign pool accounts; onward payout mechanics in [E.40](#appendix-e--open-specification-items) |\n| Labs/Foundation subsidy | separate mint of [`subsidy_per_block_per_recipient`](#param-subsidy_per_block_per_recipient) = 8 + 8 FLOP/block (`flop-subsidy`), halving with the reward across all 5 subsidy eras ([`subsidy_duration_blocks`](#param-subsidy_duration_blocks) = 315,360,000, ~10 years); 1,955,231,984 FLOP total (blocks `1..=315,359,999`, block 0 unrewarded per R9.7) |\n| First halving | block 63,072,000 (Day 730) → 48 FLOP/block |\n| Perpetual floor | [`floor_reward`](#param-floor_reward) = 3 FLOP/block from era 5 (block 315,360,000, Day 3650), forever |"},{"name":"Section: 9 / Rationale & sources *(non-normative)* [after 9.3]","before":"### Rationale & sources *(non-normative)*\n\nProvenance: `D-0513` (SS58 prefix 42 on every network, R9.8), `D-0440` (validator bond 305,505 → 1,200,000, carrying the validator cohort\n305,505,000 → 1,200,000,000 and the pool 3,500,000,000 → 4,400,000,000; supersedes D-0438's pool and\nD-0435's bond, leaves emission untouched), `D-0438` (genesis pool 2,483,460,000 → 3,500,000,000 with\nthe four cohorts re-cut; supersedes the D-0421/D-0435 pool sizes, leaves emission untouched), `D-0436` (five halvings, 3 FLOP\nfloor, 5-era subsidy — supersedes D-0421's sixth-halving\nclause and amends D-0435's subsidy schedule), `D-0435` (four-way split, halving subsidy), `D-0421`\n(work-first genesis),\n`D-0408` (validator split), `D-0410` (survival governor). Bootstrap-in-equilibrium (token seigniorage subsidizing useful inference below compute cost —\nthe Duplexia regime): Pass et al., *Economics of PoUW*, arXiv:2606.06700, with FLOP's duplex overhead\n`δ ≈ low single-digit %` (below Pearl's cuPOW ~10% reference, arXiv:2606.04819) machine-checked as\n`Duplexia.subsidy_below_cost`. Grounding:\nhalving-exodus-boundary-conditions.md,\nfee-design.md, miner-validator-economics.md,\nagent-token-economics.md,\nf2-exodus-threat-model.md,\npouw-landscape-2026.md,\ngonka-cocoon-deep-dive.md,\ndemand-bound-useful-work-certificates.md. Review demand/value-risk evidence:\n[prepublication-evidence.md](research/prepublication-evidence.md). The subsidy and participant-economics\nclaims remain conditional on external-demand, distribution, collateral-value, and concurrent-exposure\ninputs in E.8, E.35, E.38–E.40, and E.49. Provenance clarification: `D-0501`. Full model:\nTokenomics Specification. Formal:\n`tokenomics-supply.qnt`,\n`FlopSpecs.lean`,\n`FlopSpecs/HalvingBoundary.lean`. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---","after":"### Rationale & sources *(non-normative)*\n\nProvenance: `D-0513` (SS58 prefix 42 on every network, R9.8), `D-0440` (validator bond 305,505 → 1,200,000, carrying the validator cohort\n305,505,000 → 1,200,000,000 and the pool 3,500,000,000 → 4,400,000,000; supersedes D-0438's pool and\nD-0435's bond, leaves emission untouched), `D-0438` (genesis pool 2,483,460,000 → 3,500,000,000 with\nthe four cohorts re-cut; supersedes the D-0421/D-0435 pool sizes, leaves emission untouched), `D-0436` (five halvings, 3 FLOP\nfloor, 5-era subsidy — supersedes D-0421's sixth-halving\nclause and amends D-0435's subsidy schedule), `D-0435` (four-way split, halving subsidy), `D-0421`\n(work-first genesis),\n`D-0408` (validator split), `D-0410` (survival governor), `D-0529` (zero burn protocol-wide: 0% tx-fee\nburn, 0% inference-fee burn, 100% of slashes to `FLOPFoundationAccount`, superseding the interim 10%\nburn and 80/10/10 target), `D-0530` (operator self-stake only; 5% duration-locked community staking pool\nacross 7 tiers), `D-0531` (off-chain explorer referral leaderboard and periodic referral lotteries\nfunded from `genesis_reserve`, superseding the workbook's 6–10% on-chain referral commissions). Bootstrap-in-equilibrium (token seigniorage subsidizing useful inference below compute cost —\nthe Duplexia regime): Pass et al., *Economics of PoUW*, arXiv:2606.06700, with FLOP's duplex overhead\n`δ ≈ low single-digit %` (below Pearl's cuPOW ~10% reference, arXiv:2606.04819) machine-checked as\n`Duplexia.subsidy_below_cost`. Grounding:\nhalving-exodus-boundary-conditions.md,\nfee-design.md, miner-validator-economics.md,\nagent-token-economics.md,\nf2-exodus-threat-model.md,\npouw-landscape-2026.md,\ngonka-cocoon-deep-dive.md,\ndemand-bound-useful-work-certificates.md. Review demand/value-risk evidence:\n[prepublication-evidence.md](research/prepublication-evidence.md). The subsidy and participant-economics\nclaims remain conditional on external-demand, distribution, collateral-value, and concurrent-exposure\ninputs in E.8, E.35, E.38–E.40, and E.49. Provenance clarification: `D-0501`. Full model:\nTokenomics Specification. Formal:\n`tokenomics-supply.qnt`,\n`FlopSpecs.lean`,\n`FlopSpecs/HalvingBoundary.lean`. Status:\n[Appendix H](#appendix-h--conformance--implementation-status-matrix).\n\n---"},{"name":"Section: 9.1","before":"### 9.1 Requirements\n\n- **R9.1 — Block reward source.** The per-block reward **MUST** be sourced from\n  `params/flop-protocol-params.yaml` ([`initial_block_reward`](#param-initial_block_reward), mirrored to\n  `RewardInitialPerBlock`), **not** hardcoded or per-second. It follows the fixed halving schedule and is\n  **not** subject to a governance emission ceiling above it — the genesis reward *is* the bound\n  (`emission ≤ 96`).\n- **R9.2 — Halving.** Emission **MUST** halve geometrically, floored:\n  `96 → 48 → 24 → 12 → 6 → 3` after [`max_halvings`](#param-max_halvings) = 5, then\n  [`floor_reward`](#param-floor_reward) = 3 FLOP/block forever. Block rewards are liquid on issue\n  (R9.13); airdrop grants unlock under §8.2 R8.7. Cumulative emission through the halving phase (end of\n  era 5, ~year 12) is 11,920,608,000 FLOP; it reaches `2·R₀·H` = 12,109,824,000 FLOP at the end of\n  era 6 (~year 14) — **not a hard cap**; the perpetual floor then adds\n  [`floor_annual_emission`](#param-floor_annual_emission) = 94,608,000 FLOP/yr forever.\n- **R9.3 — Subsidy.** The Labs/Foundation subsidy **MUST** be a separate mint (`flop-subsidy`), on top\n  of — never part of — the block reward. Each of FLOP Labs and the FLOP Foundation **MUST** receive\n  [`subsidy_per_block_per_recipient`](#param-subsidy_per_block_per_recipient) = 8 FLOP/block in halving\n  era 0, and the rate **MUST** halve on the same 63,072,000-block boundaries as the block reward\n  (8 → 4 → 2 → 1 → 0.5 per recipient) and be exactly **0 from era 5** — the subsidy TERMINATES on the\n  same boundary where the reward FLOORS. Era 4's 0.5 FLOP is fractional in FLOP but exact in base\n  units (5 × 10¹⁷), and the implementation **MUST NOT** truncate it. Duration is\n  [`subsidy_duration_blocks`](#param-subsidy_duration_blocks) = 315,360,000 blocks (5 eras, ~10 years);\n  total minted = 63,072,000 × (16 + 8 + 4 + 2 + 1) = 1,955,232,000 FLOP.\n- **R9.4 — Genesis.** Genesis is work-first (no VC pre-mint, no auction, no team allocation).\n  [`genesis_supply`](#param-genesis_supply) = 4,400,000,000 FLOP **MUST** be allocated to exactly four\n  genesis buckets and nothing else: the three airdrops —\n  [`genesis_miner_airdrop`](#param-genesis_miner_airdrop),\n  [`genesis_validator_airdrop`](#param-genesis_validator_airdrop),\n  [`genesis_agent_airdrop`](#param-genesis_agent_airdrop) (3,600,000,000 FLOP together, 1,200,000,000\n  each) — plus the ecosystem reserve [`genesis_reserve`](#param-genesis_reserve) = 800,000,000 FLOP,\n  which is a genesis allocation but **not** an airdrop. The four **MUST** sum to `genesis_supply`\n  exactly. The validator cohort is definitionally the aggregate bond —\n  [`validator_min_stake`](#param-validator_min_stake) ×\n  [`validator_active_set_cap`](#param-validator_active_set_cap) — so, when genesis parameters are\n  chosen, a change to the bond floor moves this cohort and therefore `genesis_supply` (D-0440).\n- **R9.5 — Committee premium.** The validator 10% pool **MUST NOT** be increased by an inference\n  surcharge or a second mint. It is split inside the pool with weight\n  `stake_i × (1.1 if i ∈ current finality committee else 1.0)`, integer dust assigned deterministically\n  so payouts sum exactly to the pool. This holds unchanged under the four-way split: the agent and\n  staker legs are carved **out of the miner residual** ([`miner_share_ppt`](#param-miner_share_ppt)\n  900 → 750 ppt), never added on top, so\n  [`validator_share_ppt`](#param-validator_share_ppt) stays at 100 ppt.\n- **R9.6 — Transaction-fee split.** The tx-fee recipient split **MUST** be\n  [`tx_fee_burn_percent_live`](#param-tx_fee_burn_percent_live) = 10% burn (`BurnFees`), with the block\n  author receiving [`tx_fee_author_share_percent_live`](#param-tx_fee_author_share_percent_live) = 100%\n  of the unburned remainder (accounting as 800 ppt miner-proxy + 100 ppt validator share co-located on the\n  author until per-miner `G_n` fee attribution splits the miner share). Tips are 100% to the author. The\n  **ratified target** is 80% miners / 10% validators / 10% burn; the author-proxy accounting is the\n  interim realization. Full taxonomy: [Appendix D](#appendix-d--fee--revenue-map).\n- **R9.12 — Agent & staker legs.** The [`agent_share_ppt`](#param-agent_share_ppt) = 100 ppt and\n  [`staker_share_ppt`](#param-staker_share_ppt) = 50 ppt legs **MUST** be minted every distribution\n  period to two protocol-derived sovereign pool accounts (`PalletId`, §9.3 R9.10 shape), one per leg.\n  Onward distribution from either pool **MUST NOT** occur until its distribution policy is ratified\n  ([E.40](#appendix-e--open-specification-items)); the pools accrue and the mint is evented. The two\n  legs **MUST** be carved from the miner share, so the four legs sum to 1000 ppt with the validator\n  pool unchanged (§9.1 R9.5).\n- **R9.13 — Reward liquidity.** The miner and validator legs of every block reward, and the\n  Labs/Foundation subsidy, **MUST** be liquid on issue: the protocol **MUST NOT** auto-compound them\n  into stake, force-stake, vest, or otherwise lock them. The agent leg accrues in its sovereign pool\n  under R9.12, and that accrual is not a lock; once its distribution policy is ratified\n  ([E.40](#appendix-e--open-specification-items)), every agent-leg payout **MUST** be liquid on payment.\n  Bonding a liquid balance as stake remains the holder's choice. The staker leg's liquidity remains\n  E.40.","after":"### 9.1 Requirements\n\n- **R9.1 — Block reward source.** The per-block reward **MUST** be sourced from\n  `params/flop-protocol-params.yaml` ([`initial_block_reward`](#param-initial_block_reward), mirrored to\n  `RewardInitialPerBlock`), **not** hardcoded or per-second. It follows the fixed halving schedule and is\n  **not** subject to a governance emission ceiling above it — the genesis reward *is* the bound\n  (`emission ≤ 96`).\n- **R9.2 — Halving.** Emission **MUST** halve geometrically on block-indexed era boundaries\n  `era(b) = ⌊b / H⌋` (`H` = [`halving_interval_blocks`](#param-halving_interval_blocks) = 63,072,000),\n  floored: `96 → 48 → 24 → 12 → 6 → 3` after [`max_halvings`](#param-max_halvings) = 5, then\n  [`floor_reward`](#param-floor_reward) = 3 FLOP/block forever. A distribution period `(last, now]`\n  straddling an era boundary **MUST** price each produced block `b ∈ (last, now]` at `era(b)`'s rate.\n  Because genesis block `0` is unrewarded (R9.7), era `0` comprises `H − 1` = 63,071,999 rewarded blocks\n  (`1..=63,071,999`) and each era `e ≥ 1` comprises `H` = 63,072,000 rewarded blocks\n  (`e·H..=(e+1)·H − 1`). Block rewards are liquid on issue\n  (R9.13); airdrop grants unlock under §8.2 R8.7. Cumulative emission through the halving phase (end of\n  era 5, block `378,431,999`, ~year 12) is `R₀·H·63/32 − R₀` = 11,920,607,904 FLOP (`2·R₀·H·63/64 =\n  11,920,608,000` in the `H`-blocks-per-era closed form before subtracting unrewarded block 0); it reaches\n  `2·R₀·H − R₀` = 12,109,823,904 FLOP (`2·R₀·H = 12,109,824,000` before subtracting block 0) at the end of\n  era 6 (block `441,503,999`, ~year 14) — **not a hard cap**; the perpetual floor then adds\n  [`floor_annual_emission`](#param-floor_annual_emission) = 94,608,000 FLOP/yr forever.\n- **R9.3 — Subsidy.** The Labs/Foundation subsidy **MUST** be a separate mint (`flop-subsidy`), on top\n  of — never part of — the block reward. Each of FLOP Labs and the FLOP Foundation **MUST** receive\n  [`subsidy_per_block_per_recipient`](#param-subsidy_per_block_per_recipient) = 8 FLOP/block in halving\n  era 0, and the rate **MUST** halve on the same 63,072,000-block boundaries as the block reward\n  (`era(b) = ⌊b / H⌋`: 8 → 4 → 2 → 1 → 0.5 per recipient) and be exactly **0 from era 5** — the subsidy TERMINATES on the\n  same boundary where the reward FLOORS (`b = 315,360,000`). Era 4's 0.5 FLOP is fractional in FLOP but exact in base\n  units (5 × 10¹⁷), and the implementation **MUST NOT** truncate it. The exclusive sunset block is\n  [`subsidy_duration_blocks`](#param-subsidy_duration_blocks) = 315,360,000 (`5·H`, ~10 years); with\n  genesis block `0` unrewarded (R9.7), the subsidy mints on `315,359,999` produced blocks (`63,071,999` in\n  era 0 and `63,072,000` in each of eras 1–4), so total minted =\n  `63,072,000 × (16 + 8 + 4 + 2 + 1) − 16` = 1,955,231,984 FLOP (`1,955,232,000` in the `H`-blocks-per-era\n  closed form before subtracting unrewarded block 0).\n- **R9.4 — Genesis.** Genesis is work-first (no VC pre-mint, no auction, no team allocation).\n  [`genesis_supply`](#param-genesis_supply) = 4,400,000,000 FLOP **MUST** be allocated to exactly four\n  genesis buckets and nothing else: the three airdrops —\n  [`genesis_miner_airdrop`](#param-genesis_miner_airdrop),\n  [`genesis_validator_airdrop`](#param-genesis_validator_airdrop),\n  [`genesis_agent_airdrop`](#param-genesis_agent_airdrop) (3,600,000,000 FLOP together, 1,200,000,000\n  each) — plus the ecosystem reserve [`genesis_reserve`](#param-genesis_reserve) = 800,000,000 FLOP,\n  which is a genesis allocation but **not** an airdrop (earmarked for off-chain explorer referral leaderboard payouts, periodic referral lotteries, builder programmes, and security-disclosure rewards, superseding on-chain referral commissions). The four **MUST** sum to `genesis_supply`\n  exactly. The validator cohort is definitionally the aggregate bond —\n  [`validator_min_stake`](#param-validator_min_stake) ×\n  [`validator_active_set_cap`](#param-validator_active_set_cap) — so, when genesis parameters are\n  chosen, a change to the bond floor moves this cohort and therefore `genesis_supply` (D-0440).\n- **R9.5 — Committee premium.** The block-reward validator 10% pool\n  ([`validator_share_ppt`](#param-validator_share_ppt) = 100 ppt) **MUST NOT** be increased by an\n  emission surcharge or a second mint. (The separate 15% inference-fee validator share is an extrinsic\n  settlement fee leg, not an emission or dilution of block rewards; see [Appendix D](#appendix-d--fee--revenue-map)).\n  It is split inside the pool with weight `stake_i × (1.1 if i ∈ current finality committee else 1.0)`,\n  integer dust assigned deterministically so payouts sum exactly to the pool. This holds unchanged under\n  the four-way split: the agent and staker legs are carved **out of the miner residual**\n  ([`miner_share_ppt`](#param-miner_share_ppt) 900 → 750 ppt), never added on top, so\n  `validator_share_ppt` stays at 100 ppt.\n- **R9.6 — Transaction-fee split.** Protocol-wide fee routing **MUST** operate with zero burn:\n  [`tx_fee_burn_percent_live`](#param-tx_fee_burn_percent_live) = 0% burn (`BurnFees`), with the block\n  author receiving [`tx_fee_author_share_percent_live`](#param-tx_fee_author_share_percent_live) = 100%\n  of the transaction inclusion fee (base + encoded-length + adjusted-weight fee) and 100% of tips.\n  Inference settlement fees likewise carry 0% burn (split 85% miner / 15% validator per §12.1 R12.1a).\n  Full taxonomy: [Appendix D](#appendix-d--fee--revenue-map).\n- **R9.12 — Agent & staker legs.** The [`agent_share_ppt`](#param-agent_share_ppt) = 100 ppt and\n  [`staker_share_ppt`](#param-staker_share_ppt) = 50 ppt legs **MUST** be minted every distribution\n  period to two protocol-derived sovereign pool accounts (`PalletId`, §9.3 R9.10 shape), one per leg.\n  The [`staker_share_ppt`](#param-staker_share_ppt) = 50 ppt (5%) leg funds the duration-locked\n  community staking pool across seven lock duration tiers with no slashing risk and no validator or\n  miner intermediary. Onward distribution from either pool **MUST NOT** occur until its distribution\n  policy is ratified ([E.40](#appendix-e--open-specification-items)); the pools accrue and the mint is\n  evented. The two legs **MUST** be carved from the miner share, so the four legs sum to 1000 ppt with\n  the validator pool unchanged (§9.1 R9.5).\n- **R9.13 — Reward liquidity.** The miner and validator legs of every block reward, and the\n  Labs/Foundation subsidy, **MUST** be liquid on issue: the protocol **MUST NOT** auto-compound them\n  into stake, force-stake, vest, or otherwise lock them. The agent leg accrues in its sovereign pool\n  under R9.12, and that accrual is not a lock; once its distribution policy is ratified\n  ([E.40](#appendix-e--open-specification-items)), every agent-leg payout **MUST** be liquid on payment.\n  Bonding a liquid balance as stake remains the holder's choice. The staker leg's liquidity remains\n  E.40."},{"name":"Section: 9.3","before":"### 9.3 Genesis configuration\n\nThe consensus-critical genesis essentials (the operational deployment runbook —\n`GENESIS_AND_DESUDO_RUNBOOK` — stays separate).\n\n- **R9.7 — Supply at genesis.** Total genesis supply **MUST** be\n  [`genesis_supply`](#param-genesis_supply) = 4,400,000,000 FLOP (18 decimals), held at genesis **only**\n  by the three airdrop cohorts and the ecosystem reserve of §9.1 R9.4 — no VC pre-mint, no auction, no\n  team allocation. No block reward has been emitted at genesis; era 0 emission begins with block\n  production.\n- **R9.8 — Chain-spec constants.** Fixed at genesis and consensus-visible: **18 decimals** (base\n  unit 10⁻¹⁸ FLOP); the user-facing ticker via `TOKEN_SYMBOL` (a mainnet branding step, §14.2); the\n  **SS58 prefix** `SS58Prefix` = 42, the generic Substrate prefix, identical on every FLOP network (§6.5);\n  1 s block time; existential deposit 0.01 FLOP.\n- **R9.9 — Initial authorities.** The genesis chain spec **MUST** seed the initial validator set and its\n  session keys (BABE + AlephBFT), bootstrapping the §2 finality committee. Post-genesis the set evolves\n  **only** through §15 rotation; there is no other way to enter `ActiveValidators`.\n- **R9.10 — Protocol sovereign accounts.** The **FLOP Foundation** and **FLOP Labs** accounts are\n  protocol-derived (`PalletId` sovereign accounts; mainnet **SHOULD** bind each to a multisig). They are\n  the genesis-defined recipients/sinks for the Labs/Foundation subsidy (§9.1 R9.3), slash proceeds and the\n  delegated-loss waterfall (§11.3), and the failed-session penalty `φ` (§12.1d) — never miner revenue.\n- **R9.11 — Bootstrap origin & de-sudo (one-way).** At genesis, Root is held by `pallet_sudo` (§14.1,\n  index 50) — a public dev key on devnet, a multisig on mainnet. Governance is **not** the sole Root\n  authority until the **de-sudo handoff** neuters and removes `pallet_sudo` and routes `RawOrigin::Root`\n  to the `protocol_upgrade` track (§14.1). The production runtime **MUST NOT** expose a Sudo key or a\n  non-governance Root path after handoff. An arbitrary governance-approved `set_code` can replace these\n  guards; the claim is therefore scoped to approved runtime code (§14.1, E.50).","after":"### 9.3 Genesis configuration\n\nThe consensus-critical genesis essentials (the operational deployment runbook —\n`GENESIS_AND_DESUDO_RUNBOOK` — stays separate).\n\n- **R9.7 — Supply at genesis.** Total genesis supply **MUST** be\n  [`genesis_supply`](#param-genesis_supply) = 4,400,000,000 FLOP (18 decimals), held at genesis **only**\n  by the three airdrop cohorts and the ecosystem reserve of §9.1 R9.4 — no VC pre-mint, no auction, no\n  team allocation. No block reward has been emitted at genesis; era 0 emission begins with block\n  production.\n- **R9.8 — Chain-spec constants.** Fixed at genesis and consensus-visible: **18 decimals** (base\n  unit 10⁻¹⁸ FLOP); the user-facing ticker via `TOKEN_SYMBOL` (a mainnet branding step, §14.2); the\n  **SS58 prefix** `SS58Prefix` = 42, the generic Substrate prefix, identical on every FLOP network (§6.5);\n  1 s block time; existential deposit 0.01 FLOP.\n- **R9.9 — Initial authorities.** The genesis chain spec **MUST** seed the initial validator set and its\n  session keys (BABE + AlephBFT), bootstrapping the §2 finality committee. Post-genesis, `ActiveValidators`\n  admits validators **only** through §15 rotation promotion from `ValidatorQueue` and through `un_jail` /\n  `rejoin` restoration of jailed or extended-downtime-kicked validators within\n  [`validator_active_set_cap`](#param-validator_active_set_cap) (§15.5, §15.7).\n- **R9.10 — Protocol sovereign accounts.** The **FLOP Foundation** and **FLOP Labs** accounts are\n  protocol-derived (`PalletId` sovereign accounts; mainnet **SHOULD** bind each to a multisig). They are\n  the genesis-defined recipients/sinks for the Labs/Foundation subsidy (§9.1 R9.3), 100% of slash\n  proceeds across all fault paths (§11.3, zero burn), and the failed-session penalty `φ` (§12.1d) — never\n  miner revenue.\n- **R9.11 — Bootstrap origin & de-sudo (one-way).** At genesis, Root is held by `pallet_sudo` (§14.1,\n  index 50) — a public dev key on devnet, a multisig on mainnet. Governance is **not** the sole Root\n  authority until the **de-sudo handoff** neuters and removes `pallet_sudo` and routes `RawOrigin::Root`\n  to the `protocol_upgrade` track (§14.1). The production runtime **MUST NOT** expose a Sudo key or a\n  non-governance Root path after handoff. An arbitrary governance-approved `set_code` can replace these\n  guards; the claim is therefore scoped to approved runtime code (§14.1, E.50)."},{"name":"Section: Appendix A","before":"## Appendix A — Parameter Reference\n\nThe table below is **generated** from `params/flop-protocol-params.yaml` (the canonical machine-checked\ncontract; every value is mirrored into runtime / SDK / sim code and gated by `scripts/check_params.py`).\nRegenerate with `uv run --script scripts/gen_param_table.py`; drift fails `just verify-whitepaper`. Each\nrow is anchored `#param-<name>`, and prose links to the corresponding generated anchor. This table is the\nsingle authoritative list of the values themselves.\n\n<!-- BEGIN GENERATED: param-table (source: params/flop-protocol-params.yaml via scripts/gen_param_table.py) -->\n\nEnforced parameters (`params/flop-protocol-params.yaml`); every value below is mirrored into code and gated by `scripts/check_params.py`. Link a parameter anywhere in the spec with its generated `#param-<name>` anchor.\n\n**Genesis**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-genesis_supply\"></a>`genesis_supply` | 4_400_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Genesis (pre-emission) total supply, pinned normatively by R9.7 (§9.3). |\n| <a id=\"param-genesis_miner_airdrop\"></a>`genesis_miner_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0438 | Miner-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_validator_airdrop\"></a>`genesis_validator_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Validator-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_agent_airdrop\"></a>`genesis_agent_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0438 | Agent-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_reserve\"></a>`genesis_reserve` | 800_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Ecosystem/incentives reserve component of the genesis supply (18.18%) — KOL, referral and growth incentives. |\n| <a id=\"param-validator_min_stake\"></a>`validator_min_stake` | 1_200_000 FLOP | [§9](#9-emission--supply) | D-0440 | Baseline floor; compounds 9%/yr (MinimumValidatorStake). |\n| <a id=\"param-airdrop_vesting_duration_blocks\"></a>`airdrop_vesting_duration_blocks` | 7_776_000 blocks | [§8.2](#82-era-t-conversion-and-airdrop-vesting) | SPEC-022 | 90-day linear airdrop vesting duration at 1-second block time. |\n\n**Emission & Rewards**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-initial_block_reward\"></a>`initial_block_reward` | 96 FLOP | [§9](#9-emission--supply) | D-008 | Block reward at genesis (Era 0). |\n| <a id=\"param-halving_interval_blocks\"></a>`halving_interval_blocks` | 63_072_000 blocks | [§9](#9-emission--supply) |  | Blocks between halvings (~730 days at 1s/block). |\n| <a id=\"param-max_halvings\"></a>`max_halvings` | 5 count | [§9](#9-emission--supply) | D-0436 | Halvings before the reward floors permanently. |\n| <a id=\"param-floor_reward\"></a>`floor_reward` | 3 FLOP | [§9](#9-emission--supply) | D-0436 | Perpetual per-block reward after max_halvings (96 >> 5 = 3). |\n| <a id=\"param-miner_share_ppt\"></a>`miner_share_ppt` | 750 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Miner share of each block reward (75%; yellowpaper §9). |\n| <a id=\"param-validator_share_ppt\"></a>`validator_share_ppt` | 100 parts-per-thousand | [§9](#9-emission--supply) |  | Validator share of each block reward (10%). |\n| <a id=\"param-agent_share_ppt\"></a>`agent_share_ppt` | 100 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Agent/broker rebate share of each block reward (10%; yellowpaper §9). |\n| <a id=\"param-staker_share_ppt\"></a>`staker_share_ppt` | 50 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Community-staker share of each block reward (5%; yellowpaper §9) — all FLOP stakers other than miners and validators. |\n| <a id=\"param-reward_distribution_period_blocks\"></a>`reward_distribution_period_blocks` | 86_400 blocks | [§9](#9-emission--supply) |  | Blocks between block-rewards distributions (one day at 1 s blocks). |\n| <a id=\"param-gn_decay_factor_ppb\"></a>`gn_decay_factor_ppb` | 1_000_000_000 ppb | [§9](#9-emission--supply) |  | GnDecayFactor read when the key is absent: 1.0, i.e. |\n| <a id=\"param-finality_committee_premium_weight_ppm\"></a>`finality_committee_premium_weight_ppm` | 1_100_000 ppm | [§9](#9-emission--supply) |  | Finality-committee validator reward weight inside the validator 10% pool. |\n\n**Developer Subsidy (separate from block reward)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-subsidy_per_block_per_recipient\"></a>`subsidy_per_block_per_recipient` | 8 FLOP | [§9](#9-emission--supply) | D-0436 | ERA-0 per-block subsidy to EACH of FLOP Labs and FLOP Foundation (16 FLOP/block combined; yellowpaper §9), on top of the 96 FLOP block reward. |\n| <a id=\"param-subsidy_duration_blocks\"></a>`subsidy_duration_blocks` | 315_360_000 blocks | [§9](#9-emission--supply) | D-0436 | Subsidy minting duration (~3650 days = 10 years = 5 subsidy halving eras), after which it sunsets automatically. |\n\n**Staking & Delegation**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-min_miner_self_stake\"></a>`min_miner_self_stake` | 10_000 FLOP | [§6.1](#61-primitives) |  | Minimum self-stake to register as a miner (anti-Sybil). |\n| <a id=\"param-miner_commission_cap_percent\"></a>`miner_commission_cap_percent` | 20 percent | [§6.1](#61-primitives) |  | Maximum commission a miner may charge delegators. |\n| <a id=\"param-miner_unbonding_blocks\"></a>`miner_unbonding_blocks` | 604_800 blocks | [§6.1](#61-primitives) |  | Miner unbonding period (~7 days at 1s/block). |\n| <a id=\"param-miner_capacity_stake_per_gflop\"></a>`miner_capacity_stake_per_gflop` | VFY / 100 (= 0.01 FLOP per GFLOP/s) | [§6.1](#61-primitives) | D-0418 | Capacity-proportional miner self-stake = min_miner_self_stake + B_p * this (LINEAR, NO CAP — a cap would make the largest miners' fraud +EV; D-0418, ENG-8). 0.01 FLOP per GFLOP/s of CALIBRATED B_p (VFY/100, where VFY = 1 FLOP). |\n| <a id=\"param-miner_stake_revocation_latency_blocks\"></a>`miner_stake_revocation_latency_blocks` | 604_800 blocks | [§6.1](#61-primitives) |  | Revocation/dispute latency window used in miner stake exposure: required self-stake covers cap × this window × stake_rate. |\n| <a id=\"param-miner_stake_surge_multiplier_ppm\"></a>`miner_stake_surge_multiplier_ppm` | 1_250_000 ppm | [§6.1](#61-primitives) |  | Provisional burst-cap stake multiplier. 1_250_000 ppm = 1.25x exposure stake while a cap is still burst/audit-ratcheted. |\n| <a id=\"param-calibration_min_verified_jobs\"></a>`calibration_min_verified_jobs` | 64 jobs | [§6.1](#61-primitives) | D-0433 | D-0433 minimum independently verified jobs in the quick serving-entry burst. |\n| <a id=\"param-calibration_min_burst_blocks\"></a>`calibration_min_burst_blocks` | 600 blocks | [§6.1](#61-primitives) | D-0433 | D-0433 minimum chain-timed serving-entry burst (10 minutes at 1s blocks). |\n| <a id=\"param-calibration_min_utilization_ppm\"></a>`calibration_min_utilization_ppm` | 500_000 ppm | [§6.1](#61-primitives) |  | Sustained utilization threshold for burst acceptance. |\n| <a id=\"param-calibration_provisional_discount_ppm\"></a>`calibration_provisional_discount_ppm` | 900_000 ppm | [§6.1](#61-primitives) |  | HARD-tier provisional discount applied to attested SKU ceilings before min(empirical_burst_cap, discounted_sku_ceiling). |\n| <a id=\"param-calibration_lease_blocks\"></a>`calibration_lease_blocks` | 604_800 blocks | [§6.1](#61-primitives) | D-0433 | D-0433 renewable calibration-cap lease (7 days at 1s blocks). |\n| <a id=\"param-calibration_renewal_min_verified_jobs\"></a>`calibration_renewal_min_verified_jobs` | 8 jobs | [§6.1](#61-primitives) | D-0433 | D-0433 minimum fresh one-shot Ghost canaries for quick restart/offline/periodic cap renewal. |\n| <a id=\"param-calibration_renewal_max_age_blocks\"></a>`calibration_renewal_max_age_blocks` | 600 blocks | [§6.1](#61-primitives) |  | Maximum miner-triggered renewal window (10 minutes at 1s blocks). |\n| <a id=\"param-calibration_min_recalibration_interval_blocks\"></a>`calibration_min_recalibration_interval_blocks` | 600 blocks | [§6.1](#61-primitives) |  | Minimum interval between accepted initial calibrations (10 minutes at 1s blocks), preventing rapid cap replacement and strategic retry loops. |\n| <a id=\"param-calibration_max_gpu_inventory_entries\"></a>`calibration_max_gpu_inventory_entries` | 16 distinct SKUs | [§6.1](#61-primitives) |  | Maximum distinct attested GPU SKUs on one miner host. |\n| <a id=\"param-miner_capacity_stake_sim_per_10_gflop\"></a>`miner_capacity_stake_sim_per_10_gflop` | 0.1 FLOP per 10 GFLOP/s | [§6.1](#61-primitives) | D-0418 | Simulator mirror of miner_capacity_stake_per_gflop (D-0418). |\n\n**Compute-channel timing bounds**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-timing_max_clock_skew_ms\"></a>`timing_max_clock_skew_ms` | 250 ms | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Maximum clock skew (in ms) tolerated between miner and agent wall clocks when classifying timing as Eligible vs Ambiguous. |\n| <a id=\"param-timing_network_pad_ms\"></a>`timing_network_pad_ms` | 100 ms | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Network round-trip padding (in ms) added to the clock-skew allowance when evaluating receipt timing. |\n\n**Sessions / capacity reservations (A1 anti-spam)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-max_active_reservations_base\"></a>`max_active_reservations_base` | 4 count | [§12.2](#122-per-identity-capacity-reservation) |  | Base number of concurrent active capacity reservations per agent identity. |\n| <a id=\"param-escrow_per_reservation_slot\"></a>`escrow_per_reservation_slot` | 50 FLOP | [§12.2](#122-per-identity-capacity-reservation) |  | Escrow (in FLOP) that grants +1 additional active reservation slot beyond base. |\n| <a id=\"param-min_certificate_premium_ppm\"></a>`min_certificate_premium_ppm` | 1_500_000 ppm | [§12.2](#122-per-identity-capacity-reservation) |  | Minimum price multiple (1_500_000 = 1.5x) over the model's per-GFLOP rate for certificate-backed premium settlement (#535). certificate_settle requires escrow >= price_per_gflop * aggregate_gn * multiple, so premium-class proven work cannot pay standard-rate escrow. |\n| <a id=\"param-sampled_audit_alpha_ppm\"></a>`sampled_audit_alpha_ppm` | 50_000 ppm | [§3.5](#35-tier-3--independent-optimistic-re-execution--slashing) |  | Default α for sampled-audit certificate mode (#628 / certificate format section 9.5; yellowpaper §3.5). 50_000 = 5% of turns selected post-epoch via VRF beacon; 1_000_000 = full audit. |\n| <a id=\"param-sampled_audit_checkpoint_turns\"></a>`sampled_audit_checkpoint_turns` | 16 turns | [§3.5](#35-tier-3--independent-optimistic-re-execution--slashing) |  | KV-checkpoint interval C for sampled-audit replay (#628). |\n| <a id=\"param-audit_quantum_gn\"></a>`audit_quantum_gn` | 100_000_000 G_n | [§12.2](#122-per-identity-capacity-reservation) |  | #764 blast-radius control: the session-host / checker forces at least one audit ticket every this many G_n of served work (value quantum Q). |\n| <a id=\"param-high_value_gn_threshold\"></a>`high_value_gn_threshold` | 10_000_000 G_n | [§12.2](#122-per-identity-capacity-reservation) |  | #764 asymmetry: any single turn with G_n ≥ this is force-audited (effective α=1 for its leaf), so a sparse high-G_n turn cannot ride Bernoulli-α. MUST stay ≤ audit_quantum_gn so no unaudited turn alone fills a quantum (TRIZ P4 Asymmetry). |\n\n**Finality-stall safe mode (compute-channel)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-finality_lag_warn\"></a>`finality_lag_warn` | 30 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag above which the detector reports Lagging (alert only; finality-clocked deadlines pause naturally). |\n| <a id=\"param-finality_freeze_threshold\"></a>`finality_freeze_threshold` | 120 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag at/above which the channel enters Stalled: new finality-dependent opens are rejected fail-closed (ensure_finality_open_allowed); additive top-up/cancel paths stay open. |\n| <a id=\"param-max_finality_stall\"></a>`max_finality_stall` | 3_600 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag at/above which the chain is EscapeEligible (safe mode): restore AlephBFT finality or ratify a checkpoint recovery through the hard-fork runbook. ~1h at 1s blocks. |\n| <a id=\"param-htlc_timelock_symmetry_safety_margin_percent\"></a>`htlc_timelock_symmetry_safety_margin_percent` | 20 percent | [§10.1](#101-requirements) |  | Minimum foreign-chain HTLC safety margin as a percentage of the foreign duration, after converting it to one-second FLOP blocks. |\n| <a id=\"param-htlc_burn_share_ppt\"></a>`htlc_burn_share_ppt` | 0 ppt | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Share of a finalized post-timeout HTLC resolution burned before payout. |\n| <a id=\"param-btc_block_time_flop_blocks\"></a>`btc_block_time_flop_blocks` | 600 blocks | [§10.1](#101-requirements) |  | Average Bitcoin block interval expressed in one-second FLOP blocks. |\n\n**PoUI simulator-mode safety flag (#297 CRIT-02 / RT-C02)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-poui_allow_simulator_mode\"></a>`poui_allow_simulator_mode` | cfg!(feature = \"volta\") flag |  |  | #297: AllowSimulatorMode gates the TEE-free simulator credit path; derived from the `volta` devnet feature so production runtimes fail closed. |\n| <a id=\"param-paid_storage_enabled\"></a>`paid_storage_enabled` | cfg!(feature = \"paid-storage-unratified\") flag | [§5.4](#54-agent-memory-and-paid-data-storage) |  | Build-time gate for the unratified paid agent-storage pallet (yellowpaper §5.4, R5.4k). |\n\n**PoUI submission rate limit**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-poui_submission_window_blocks\"></a>`poui_submission_window_blocks` | 86_400 blocks | [§1.2](#12-protocol-clocks--canonical-table) |  | Block-aligned PoUI submission rate-limit window (1 day at 1 s blocks). |\n| <a id=\"param-poui_max_submissions_epoch\"></a>`poui_max_submissions_epoch` | 10 count | [§1.2](#12-protocol-clocks--canonical-table) |  | Maximum submissions per miner during each block-aligned poui_submission_window_blocks window. |\n\n**F2 supply-side governor (default OFF; governance-settable)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-governor_default_enabled\"></a>`governor_default_enabled` | false bool | [§9](#9-emission--supply) |  | Master default for both governor dampers — OFF at genesis (insurance, governance-armed). |\n| <a id=\"param-governor_emission_damping_util_floor\"></a>`governor_emission_damping_util_floor` | 0.3 fraction | [§9](#9-emission--supply) |  | Utilization below which the retention reward-boost engages (utilization-indexed, never price-indexed — anti-Terra). |\n| <a id=\"param-governor_emission_damping_max_boost\"></a>`governor_emission_damping_max_boost` | 1.5 multiplier | [§9](#9-emission--supply) |  | Hard cap on the miner-reward multiplier when the governor is armed (+50% max). |\n| <a id=\"param-governor_dynamic_burn_tier1\"></a>`governor_dynamic_burn_tier1` | 0.1 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 0–1 (era_max 1) when dynamic burn is armed. |\n| <a id=\"param-governor_dynamic_burn_tier2\"></a>`governor_dynamic_burn_tier2` | 0.15 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 2–3 (era_max 3) when dynamic burn is armed. |\n| <a id=\"param-governor_dynamic_burn_tier3\"></a>`governor_dynamic_burn_tier3` | 0.25 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 4+ (era_max 99 sentinel) when dynamic burn is armed. |\n\n**Governance**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-governance_root_track_approval\"></a>`governance_root_track_approval` | 67 percent | [§14.2](#142-fip-binding) | D-015 | Flat approval threshold (Byzantine 2/3) for the root / protocol-upgrade governance curve, encoded as APP_ROOT and used by the production protocol_upgrade track (GOV-A, yellowpaper §14.2). |\n| <a id=\"param-protocol_upgrade_support_floor\"></a>`protocol_upgrade_support_floor` | 15 percent | [§14.1](#141-requirements) | D-0415 | Turnout-floor (min_support) for the production protocol_upgrade (Root) track — 50% ceiling decaying to a 15% floor (the quorum SPEC-024 lacked). |\n\n**Consensus / finality committee**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-babe_primary_probability_denominator\"></a>`babe_primary_probability_denominator` | 50 ratio-denominator | [§15.4](#154-selection--the-poui-gated-committee) |  | BABE primary-slot probability c = 1/N, where a validator's per-slot win chance is p = 1 - (1 - c)^theta (theta = stake fraction). |\n| <a id=\"param-aleph_max_data_branch_len\"></a>`aleph_max_data_branch_len` | 30 blocks | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum blocks in one AlephBFT-ordered chain proposal — the finality throughput ceiling (finality rate ~= this / ordering latency; measured 1.66 blocks/s at the previous value of 7, implying ~4.2 s to order a proposal). |\n| <a id=\"param-aleph_max_round\"></a>`aleph_max_round` | 65_535 round | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum AlephBFT round accepted in one session. |\n| <a id=\"param-aleph_gossip_protocol_version\"></a>`aleph_gossip_protocol_version` | 5 version | [§15.4](#154-selection--the-poui-gated-committee) |  | Notification-protocol version for AlephBFT unit gossip (/flop/aleph/N). |\n| <a id=\"param-finality_committee_size\"></a>`finality_committee_size` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) | D-0437 | AlephBFT finalizing committee size: randomly sampled stake-weighted without replacement from the PoUI-gated active set off a BABE-VRF seed (#448/#848). |\n| <a id=\"param-validator_attestation_threshold\"></a>`validator_attestation_threshold` | 666_666_666 perbill-parts | [§3.6](#36-tier-4--on-chain-settlement-zk-aggregation--validator-bft-quorum) | D-0414 | BFT attestation quorum (Perbill parts 666_666_666 = 2/3), root-governable; gates the direct PoUI proof path + Ghost Tasks. yellowpaper §3.6/§13.3. |\n| <a id=\"param-attest_max_verifier_set_members\"></a>`attest_max_verifier_set_members` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum governed verifier keys stored for one attestation profile. |\n| <a id=\"param-attest_max_claim_signatures\"></a>`attest_max_claim_signatures` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum signatures accepted by the `pallet_attest` shared-claim rail; matches that rail's 100-member governed verifier-set bound and does not cap `pallet_flop_poui` `submit_validator_attestations` bundles, which are bounded by dispatch weight and block length. |\n| <a id=\"param-poui_tee_v1_profile_id\"></a>`poui_tee_v1_profile_id` | H256([4u8; 32]) profile-id | [§15.4](#154-selection--the-poui-gated-committee) |  | Governed shared-attestation profile id for PoUI TEE v1 claims. |\n| <a id=\"param-poui_tee_v1_profile_version\"></a>`poui_tee_v1_profile_version` | 1 profile-version | [§15.4](#154-selection--the-poui-gated-committee) |  | Initial profile version for PoUI TEE v1 claims. |\n\n**Validator security policy**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-validator_rotation_interval_blocks\"></a>`validator_rotation_interval_blocks` | 2_592_000 blocks | [§15.5](#155-rotation--set-size) | D-0416 | Validator-set rotation cadence (~30 d at 1s); automatic on_initialize + manual rotate. yellowpaper §15.5. |\n| <a id=\"param-validators_to_eject\"></a>`validators_to_eject` | 50 count | [§15.5](#155-rotation--set-size) |  | Requested maximum per rotation; live ejections also require scored evidence (a blacklisted seat needs none and goes first) and respect the churn percentage and minimum active set. |\n| <a id=\"param-validators_to_promote\"></a>`validators_to_promote` | 50 count | [§15.5](#155-rotation--set-size) |  | Per-rotation promote count from the queue (stake >= current minimum). yellowpaper §15.5. |\n| <a id=\"param-validator_active_set_cap\"></a>`validator_active_set_cap` | 1_000 count | [§15.5](#155-rotation--set-size) | D-0437 | Maximum active validators admitted by rotation or rejoin. yellowpaper §15.5. |\n| <a id=\"param-validator_min_active_validators\"></a>`validator_min_active_validators` | 4 count | [§15.5](#155-rotation--set-size) |  | Minimum active set preserved by rotation and every removal path. |\n| <a id=\"param-validator_rotation_churn_percent\"></a>`validator_rotation_churn_percent` | 10 percent | [§15.5](#155-rotation--set-size) |  | Maximum share of the current active set ejected in one rotation, rounded up to a whole validator. |\n| <a id=\"param-validator_min_scored_samples\"></a>`validator_min_scored_samples` | 3 count | [§15.5](#155-rotation--set-size) |  | Performance-score updates required within one rotation interval before a validator may be ejected. |\n| <a id=\"param-ejection_cooldown_blocks\"></a>`ejection_cooldown_blocks` | 604_800 blocks | [§15.5](#155-rotation--set-size) |  | Cooldown (~7 d) before an ejected validator may rejoin (stake topped to current minimum). yellowpaper §15.5. |\n| <a id=\"param-validator_unbonding_blocks\"></a>`validator_unbonding_blocks` | 1_814_400 blocks | [§13](#13-failure-semantics--actor--failure-matrix) | D-0419 | Validator stake unbonding lockup (~21 d); bounds withdraw-after-misbehavior. yellowpaper §13. |\n| <a id=\"param-validator_extended_downtime_slash_percent\"></a>`validator_extended_downtime_slash_percent` | 5 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Slash fraction for extended validator downtime (followed by removal). yellowpaper §13.2. |\n| <a id=\"param-validator_growth_numerator\"></a>`validator_growth_numerator` | 109 ratio | [§11](#11-security-invariants) | D-0413 | Numerator of the annual compounding factor on the validator minimum-stake floor (109/100 = +9%/yr). yellowpaper §11/§15.2. |\n| <a id=\"param-validator_growth_denominator\"></a>`validator_growth_denominator` | 100 ratio | [§11](#11-security-invariants) | D-0413 | Denominator paired with validator_growth_numerator (109/100 = +9%/yr). yellowpaper §11/§15.2. |\n\n**Metering tripwire**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-throughput_tripwire_gflops_per_sec\"></a>`throughput_tripwire_gflops_per_sec` | 2_000_000 G_n/s | [§4.2](#42-the-op-count-model) | D-0405 | Reject (never clamp) any claim whose implied gn*1000/latency_ms exceeds this; reject-only, governable, default-on. yellowpaper §4.2. |\n| <a id=\"param-soft_tier_spot_check_rate_ppm\"></a>`soft_tier_spot_check_rate_ppm` | 25_000 ppm | [§4.2](#42-the-op-count-model) |  | SOFT-tier channel spot-check exposure surfaced with the calibration snapshot event for quality-audit pricing. |\n\n**Compute-channel settlement**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-refund_penalty_phi_percent\"></a>`refund_penalty_phi_percent` | 20 percent | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0422 | Static D-0422 penalty fraction phi on unused escrow for ambiguous early close; penalty routes 100% to burn/Foundation, never miner. |\n| <a id=\"param-channel_max_settlement_turns\"></a>`channel_max_settlement_turns` | 1_024 count | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Hard cap on VerifiedTurns per settle/force_settle bundle, and the ceiling on an SLA's max_turns at open. |\n| <a id=\"param-channel_max_merkle_path_len\"></a>`channel_max_merkle_path_len` | 64 count | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Max Merkle authentication-path length per VerifiedTurn (proves membership in a tree of up to 2^64 leaves). |\n| <a id=\"param-channel_base_per_turn\"></a>`channel_base_per_turn` | 1 base unit (10^-18 FLOP) | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Per-turn flat fee of the two-part tariff (#719 option A): turn_pay = BasePerTurn + G_n (rate=1 in channel pay units). |\n| <a id=\"param-channel_c_turn_fixed\"></a>`channel_c_turn_fixed` | 1 base unit (10^-18 FLOP) | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Fixed per-turn cost floor that BasePerTurn must cover (#719). integrity_test asserts BasePerTurn ≥ CTurnFixed so dust turns are not net-negative for miner/network. |\n| <a id=\"param-channel_dispute_window_blocks\"></a>`channel_dispute_window_blocks` | 604_800 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | Session dispute/challenge window (7 d); integrity_test enforces <= DaEphemeralRetention (14 d). yellowpaper §12.1. |\n| <a id=\"param-channel_dispute_response_window_blocks\"></a>`channel_dispute_response_window_blocks` | 7_200 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | Time to respond to an open dispute (2 h); non-response defaults to a fraud verdict. yellowpaper §12.1. |\n| <a id=\"param-channel_toploc_escalation_window_blocks\"></a>`channel_toploc_escalation_window_blocks` | 7_200 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0431 | #754: validators' window (2 h) to resolve a middle-band TOPLOC escalation (stronger report → slash, or quorum clear) before it times out inconclusive (full agent refund, no miner pay, no slash). |\n| <a id=\"param-channel_challenger_bond\"></a>`channel_challenger_bond` | 100 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Bond a challenger posts to open a session dispute (anti-griefing). yellowpaper §12.1. |\n| <a id=\"param-slash_fraud_percent\"></a>`slash_fraud_percent` | 100 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Full-burn fault class: Collusion / EvidenceForgery / TEE-attestation failure / correlated equivocation / double-spend → 100% slash + eject + blacklist. yellowpaper §13.2. |\n| <a id=\"param-channel_audit_forfeit_slash_ppm\"></a>`channel_audit_forfeit_slash_ppm` | 1_000_000 ppm | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #844 publish-or-forfeit: audit-data liveness-forfeit slash floor, in ppm of the withheld settlement window's value. |\n| <a id=\"param-audit_fee_split_ppm\"></a>`audit_fee_split_ppm` | 10_000 ppm | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #846: ratified 1% (10_000 ppm) of the miner's settlement payment (the session-fee leg; yellowpaper §12.1) carved into the audit pool that pays validators for audit work. |\n| <a id=\"param-audit_fee_per_turn\"></a>`audit_fee_per_turn` | 1 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #846: flat fee a VRF-assigned validator claims per audit verdict from the audit pool (claim_audit_fee), gated on submitted evidence and pool solvency (no unpaid-duty path). 1 FLOP placeholder; governance may recalibrate against measured audit cost. |\n| <a id=\"param-channel_ack_window_blocks\"></a>`channel_ack_window_blocks` | 600 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Window for a named miner to force_ack a permissionless force_open before expire refunds escrow. yellowpaper §12.1, Appendix C.3. |\n| <a id=\"param-min_force_open_escrow_for_failed_ack\"></a>`min_force_open_escrow_for_failed_ack` | 0.05 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0423 | Minimum force_open escrow that makes an expired, unacked request increment the named miner's FailedAcks counter. |\n\n**Derived TOPLOC band (governance-set per model/precision; #685, #705)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-toploc_band_constants_fields\"></a>`toploc_band_constants_fields` | kappa_profile_hash structural |  |  | Per-(model, precision) derived TOPLOC band committed constants consumed by band_verdict / report_toploc_mismatch: kappa_profile_hash, band_tau_accept, band_tau_slash, challenge_k, challenge_window_w. |\n| <a id=\"param-toploc_band_tau_accept_bf16_milli\"></a>`toploc_band_tau_accept_bf16_milli` | 2_900 milli_exponent_error |  |  | Derived bf16 accept threshold τ_accept≈2.9 exponent errors in milli units (×1000). |\n| <a id=\"param-toploc_band_tau_slash_bf16_milli\"></a>`toploc_band_tau_slash_bf16_milli` | 185_600 milli_exponent_error |  |  | Derived bf16 slash threshold τ_slash≈185.6 exponent errors in milli units (×1000). |\n| <a id=\"param-toploc_band_eng29_threshold_milli\"></a>`toploc_band_eng29_threshold_milli` | 38_000 milli_exponent_error |  |  | ENG-29 empirically-deployed exponent-error threshold (38) in milli units. |\n| <a id=\"param-toploc_band_kappa_within_llama31_8b_bf16\"></a>`toploc_band_kappa_within_llama31_8b_bf16` | 4.5 dimensionless |  |  | Fitted/selected within-layer κ for Llama-3.1-8B bf16 (ENG-29). |\n\n**Model registry (decode-policy sets)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-max_decode_policies_per_model\"></a>`max_decode_policies_per_model` | 32 count |  |  | Maximum decode-policy hashes pinnable in a model's optional allowed set (BoundedDecodePolicySet = BoundedVec<H256, ConstU32<MAX_DECODE_POLICIES_PER_MODEL>>). |\n\n**Metering cert tokens-per-byte band (#871)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-tokens_per_byte_band_ppm_llama3\"></a>`tokens_per_byte_band_ppm_llama3` | 500_000 ppm | [§4](#4-effective-flop-metering) |  | Certified upper bound on honest tokens-per-byte for the Llama-3 tokenizer (ppm; 500000 = 0.5 tokens/byte) — the per-(model, tokenizer) model-registry field that caps the metering cert padding constraint (e): prompt_tokens ≤ ⌈len(input_bytes) · band/1e6⌉ and generated_tokens ≤ ⌈(len(output_bytes) + 1) · band/1e6⌉ (#871, spec whitepaper/research/metering-cert-spec.md §4). |\n\n**Metering cert circuit version + guest image-id registry (#929)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-metering_cert_circuit_version\"></a>`metering_cert_circuit_version` | 3 version |  |  | Governance-pinned circuit layout the metering cert proves against (V3 transcript leaf, #929). |\n| <a id=\"param-metering_cert_guest_image_id\"></a>`metering_cert_guest_image_id` | OptionQuery storage-default |  |  | Governance-pinned RISC0 guest image id for the metering cert (safety zone, #945). |\n\n**Transaction fees (live values)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-tx_fee_burn_percent_live\"></a>`tx_fee_burn_percent_live` | 10 percent | [§9.1](#91-requirements) |  | LIVE burn fraction of the base+length+weight tx fee (10%). |\n| <a id=\"param-tx_fee_author_share_percent_live\"></a>`tx_fee_author_share_percent_live` | 100 percent | [§9](#9-emission--supply) |  | LIVE share of the UNBURNED remainder paid to the block author (= 90% of the whole fee after 10% burn). |\n| <a id=\"param-tx_weight_to_fee\"></a>`tx_weight_to_fee` | 5_000_000 base units/weight (1 base unit = 10^-18 FLOP) | [§9.1](#91-requirements) |  | WeightToFee ConstantMultiplier; per-weight component of the base fee (effective floor: MinimumMultiplier = 1.0). yellowpaper §9.1. |\n| <a id=\"param-tx_length_to_fee\"></a>`tx_length_to_fee` | 5_000_000 base units/byte (1 base unit = 10^-18 FLOP) | [§9.1](#91-requirements) |  | LengthToFee ConstantMultiplier; per-byte component of the base fee. yellowpaper §9.1. |\n| <a id=\"param-tx_target_block_fullness_percent\"></a>`tx_target_block_fullness_percent` | 75 percent | [§9.1](#91-requirements) |  | Congestion target for the TargetedFeeAdjustment multiplier (raises the fee above the base floor as blocks fill). yellowpaper §9.1. |\n| <a id=\"param-tx_operational_fee_multiplier\"></a>`tx_operational_fee_multiplier` | 5 ratio | [§9.1](#91-requirements) |  | Surcharge multiple applied to operational-class dispatches. pallet_transaction_payment config. |\n\n**Data availability**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-da_ephemeral_retention_blocks\"></a>`da_ephemeral_retention_blocks` | 1_209_600 blocks | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0412 | Retention W (14 d) for Ephemeral DA blobs (quotes/proofs/transcripts/I-O); bounds the session challenge window. yellowpaper §5.3. |\n| <a id=\"param-da_shard_count\"></a>`da_shard_count` | 6 count | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | DA erasure-coding shard count R = 6, Reed-Solomon rate 1/2 (k = 3+3, any 3 reconstruct). yellowpaper §5.3. |\n| <a id=\"param-da_min_replication_factor\"></a>`da_min_replication_factor` | 3 count | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | DA Reed-Solomon reconstruction threshold k = 3 (any k of R shards reconstruct); hard floor for the governable da_shard_count so R < k (unreconstructable) is unreachable. yellowpaper §5.3. |\n| <a id=\"param-da_lease_deposit_per_byte\"></a>`da_lease_deposit_per_byte` | 200 FLOP per 10^9 bytes (= 2e-7 FLOP/byte) | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0412 | D-0412 refundable anti-spam deposit for leased DA (model weights): deposit = bytes × DepositPerByte, held on the publisher (never validator revenue), returned in full on prune/withdrawal. |\n\n**Agent wallet / session keys**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-agent_cap_window_blocks\"></a>`agent_cap_window_blocks` | 86_400 blocks | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Wallet and session daily spend-cap window: resets on the first spend at or after 86,400 blocks from wallet or session creation or the previous reset. |\n| <a id=\"param-agent_identity_min_stake\"></a>`agent_identity_min_stake` | 10 FLOP | [§12.3](#123-market-actor-threat-class) |  | Refundable minimum stake locked to register an agent identity: capital exposure, not an irrecoverable identity cost. yellowpaper §12.3. |\n| <a id=\"param-circuit_breaker_window\"></a>`circuit_breaker_window` | 60 blocks | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Fixed agent session-key circuit-breaker window (60 blocks): either the transaction-count or spend limb trips independently, latches until window end, and then auto-resets. yellowpaper §6.2. |\n| <a id=\"param-circuit_breaker_tx_count\"></a>`circuit_breaker_tx_count` | 100 count | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Agent session-key circuit-breaker transaction-count limb: trips at 100 txs within the window, independently of circuit_breaker_flop_cap. yellowpaper §6.2. |\n| <a id=\"param-circuit_breaker_flop_cap\"></a>`circuit_breaker_flop_cap` | 250 FLOP | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Agent session-key circuit-breaker max spend per window (60 blk / 100 tx / 250 FLOP triple). yellowpaper §6.2. |\n\n**Reference-only** — canonical documented values, single-site or not yet wired for cross-language enforcement (`enforce: false`).\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-protocol_upgrade_approval\"></a>`protocol_upgrade_approval` | 67 percent | [§14.2](#142-fip-binding) | GOV-A | Production protocol_upgrade (Root) track approval (flat BFT 2/3); live as APP_ROOT in (enforced above as governance_root_track_approval + protocol_upgrade_support_floor). |\n| <a id=\"param-protocol_upgrade_decision_period\"></a>`protocol_upgrade_decision_period` | 28 days | [§14.2](#142-fip-binding) |  | [RATIFY] deliberation window for the protocol_upgrade track. yellowpaper §14.2. |\n| <a id=\"param-protocol_upgrade_enactment_timelock\"></a>`protocol_upgrade_enactment_timelock` | 1_209_600 blocks | [§14.1](#141-requirements) |  | 14 d at 1s — Scheduler min_enactment_period (upgrade timelock). yellowpaper §14.1. |\n| <a id=\"param-fip_decision_deposit\"></a>`fip_decision_deposit` | RATIFY FLOP | [§14.2](#142-fip-binding) |  | [RATIFY] decision-deposit spam barrier for protocol_upgrade referenda (FLOP-denominated; magnitude TBD). yellowpaper §14.2. |\n| <a id=\"param-emergency_override_timelock\"></a>`emergency_override_timelock` | 259_200 blocks |  | SPEC-015 | 72 h at 1s — pallet_emergency_override break-glass timelock (root-only). |\n| <a id=\"param-emergency_override_cooldown\"></a>`emergency_override_cooldown` | 604_800 blocks |  | SPEC-015 | 7 d at 1s — minimum gap between emergency overrides. |\n| <a id=\"param-governance_vote_locking_period\"></a>`governance_vote_locking_period` | 604_800 blocks |  |  | 7 d conviction VoteLockingPeriod (pallet_conviction_voting, live).. |\n| <a id=\"param-sudo_pallet_index\"></a>`sudo_pallet_index` | 50 index | [§14.1](#141-requirements) | GOV-B | pallet_sudo — bootstrap Root through devnet/testnet; REMOVED/neutered at the mainnet-genesis handoff (GOV-B). yellowpaper §14.1. |\n| <a id=\"param-subsidy_total_per_block\"></a>`subsidy_total_per_block` | 16 FLOP | [§9](#9-emission--supply) | D-0436 | 8 Labs + 8 Foundation in halving era 0 (years 1-2), on top of the 96 FLOP reward (yellowpaper §9); halves with the reward (16 -> 8 -> 4 -> 2 -> 1 combined) and is exactly 0 from era 5, where the reward floors. |\n| <a id=\"param-emission_at_end_of_era6\"></a>`emission_at_end_of_era6` | 12_109_824_000 FLOP |  | D-0436 | 2·R₀·H = 12,109,824,000, reached exactly at end of era 6 (~year 14) under max_halvings=5 — one era earlier than the superseded maxHalvings=6 put it (hence the rename from emission_at_end_of_era7). |\n| <a id=\"param-emission_through_halving_eras\"></a>`emission_through_halving_eras` | 11_920_608_000 FLOP |  | D-0436 | R₀·H·63/32 = 63,072,000 × (96+48+24+12+6+3) = cumulative emission through the halving phase (end of era 5, ~year 12) under max_halvings=5. |\n| <a id=\"param-floor_annual_emission\"></a>`floor_annual_emission` | 94_608_000 FLOP |  | D-0436 | perpetual floor tail: 3 FLOP/block × 31,536,000 blocks/yr (= 189,216,000 FLOP/era). |\n| <a id=\"param-max_delegators_per_miner\"></a>`max_delegators_per_miner` | 10_000 count |  |  |  |\n| <a id=\"param-agent_daily_cap_autonomous\"></a>`agent_daily_cap_autonomous` | 500 FLOP | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Autonomous-agent scenario daily cap in the simulator; the runtime stores each wallet's chosen daily_cap at create_wallet rather than enforcing a global 500 FLOP constant; yellowpaper §6.2. |\n| <a id=\"param-agent_per_tx_limit\"></a>`agent_per_tx_limit` | 100 FLOP |  |  |  |\n| <a id=\"param-attestation_outage_pause_cap_blocks\"></a>`attestation_outage_pause_cap_blocks` | 14_400 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Designed-not-built 4 h cap on per-channel pauses of attestation-dependent clocks under R13.0e / O1; no runtime or pallet implementation site. yellowpaper §13.0. |\n| <a id=\"param-da_endpoint_deposit\"></a>`da_endpoint_deposit` | VFY (= 1 FLOP) |  |  | Refundable anti-spam deposit held while a validator's DA serving endpoint announcement exists in DaRegistry 1 VFY = 1 FLOP. Held under HoldReason; released in full on clear_endpoint. |\n| <a id=\"param-da_max_endpoint_bytes\"></a>`da_max_endpoint_bytes` | 256 bytes |  |  | Maximum UTF-8 byte length of a validator DA serving endpoint URL stored in DaRegistry (e.g. 'http://host:7000'). |\n| <a id=\"param-validator_stake_value_coupled_floor\"></a>`validator_stake_value_coupled_floor` | dynamic FLOP |  | D-0413 | D-0413 (C5): governance-retargeted value-coupled stake floor k·V_booked (storage ValueCoupledStakeFloor, default 0 = baseline-identical). |\n| <a id=\"param-security_kappa_extractable\"></a>`security_kappa_extractable` | 0.2 dimensionless |  | DEC-5 | ASSUMPTION — NOT a theorem; a governance/DEC-5 risk input. κ = fraction of realized value V_booked a successful AlephBFT safety break extracts; the lever the value-coupled stake floor rests on (k ≥ m·κ/(θ·N·σ·δ), linear in κ — k_threshold_scales_with_kappa). |\n| <a id=\"param-da_deposit_max_step_factor\"></a>`da_deposit_max_step_factor` | 100 ratio |  |  | pallet_da_registry MAX_DEPOSIT_STEP_FACTOR: a single set_deposit_per_byte call may move the deposit ≤100× in either direction (anti-shock; the hard floor is >0). |\n| <a id=\"param-governance_param_max_step_pct\"></a>`governance_param_max_step_pct` | 50 percent |  |  | MAX_STEP_PCT: the FORMAL-MODEL proportional per-enactment bound (100·\\|Δ\\| ≤ pct·\\|old\\|) proven invariant in Model-side rail; the runtime instantiates the same proportional FORM per-param (e.g. da_deposit_max_step_factor) with its own magnitude. |\n| <a id=\"param-da_serve_or_slash_percent\"></a>`da_serve_or_slash_percent` | 1 percent | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | Serve-or-slash Liveness bound: a validator failing a DA audit is slashed ≤1% (bounded, not fraud). yellowpaper §5.3. |\n| <a id=\"param-slash_liveness_percent\"></a>`slash_liveness_percent` | 1 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Liveness fault slash (jail > 300 blk). yellowpaper §13.2. |\n| <a id=\"param-slash_equivocation_lone_percent\"></a>`slash_equivocation_lone_percent` | 50 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0420 | Lone equivocation slash (correlated Eth2-style curve; +50% returned after 180 d, ≥1/3 correlated → 100%). yellowpaper §13.2. |\n| <a id=\"param-session_key_expiry_days\"></a>`session_key_expiry_days` | 10 days | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Target-cadence conversion of the 864,000-block session-key limit (yellowpaper §6.2): approximately 10 d at uninterrupted 1 s blocks, not a wall-clock upper bound; checked against the runtime and blocks_per_day. |\n| <a id=\"param-blackout_revoke_blocks\"></a>`blackout_revoke_blocks` | 86_400 blocks | [§8](#8-performance-locked-vesting) |  | Performance-vesting blackout: capacity < 10% for 86,400 continuous blocks (~1 d) revokes the grant (1.0× slash). yellowpaper §8. |\n| <a id=\"param-performance_score_weights\"></a>`performance_score_weights` | 40/30/20/10 percent | [§15.4](#154-selection--the-poui-gated-committee) |  | Composite validator performance score: 40% uptime + 30% block_rate + 20% accuracy + 10% latency (parts-per-10,000); the rotation-floor input. yellowpaper §15.4/§15.5. |\n\n**Cross-language names (canonical ⇄ Rust ⇄ Lean ⇄ Quint).** The same protocol value carries a different identifier per language by convention; values agree where a language pins the real (non-demo) figure. Enforced rows are value-gated against the Rust site by `check_params.py`.\n\n| Parameter | Rust (runtime) | Lean (lean-proofs) | Quint (formal-specs) |\n|-----------|----------------|--------------------------|----------------------|\n| [`genesis_supply`](#param-genesis_supply) | `FLOP_TOTAL_SUPPLY` | `HalvingBoundary.genesisSupply` | `GENESIS_MICRO` |\n| [`validator_min_stake`](#param-validator_min_stake) | `ValidatorInitialMinimumStake` | — | — |\n| [`initial_block_reward`](#param-initial_block_reward) | `RewardInitialPerBlock` | `Emission.initialReward` | `P_EMISSION_CAP` |\n| [`max_halvings`](#param-max_halvings) | `RewardMaxHalvings` | `Emission.maxHalvings` | `MAX_HALVINGS` |\n| [`floor_reward`](#param-floor_reward) | — | `Emission.floorReward` | `FLOOR_MICRO` |\n| [`miner_share_ppt`](#param-miner_share_ppt) | `MINER_SHARE_PPT` | `SettlementInt.BlockRewards.minerPpt` | — |\n| [`validator_share_ppt`](#param-validator_share_ppt) | `VALIDATOR_SHARE_PPT` | `SettlementInt.BlockRewards.validatorPpt` | — |\n| [`agent_share_ppt`](#param-agent_share_ppt) | `AGENT_SHARE_PPT` | `SettlementInt.BlockRewards.agentPpt` | — |\n| [`staker_share_ppt`](#param-staker_share_ppt) | `STAKER_SHARE_PPT` | `SettlementInt.BlockRewards.stakerPpt` | — |\n| [`reward_distribution_period_blocks`](#param-reward_distribution_period_blocks) | `RewardDistributionPeriodBlocks` | — | `PERIOD_BLOCKS` |\n| [`gn_decay_factor_ppb`](#param-gn_decay_factor_ppb) | `DEFAULT_GN_DECAY_FACTOR_PPB` | — | `DEFAULT_DECAY_PPB` |\n| [`finality_committee_premium_weight_ppm`](#param-finality_committee_premium_weight_ppm) | `FINALITY_COMMITTEE_PREMIUM_WEIGHT_PPM` | — | — |\n| [`poui_submission_window_blocks`](#param-poui_submission_window_blocks) | `PouiEpochDurationBlocks` | — | — |\n| [`poui_max_submissions_epoch`](#param-poui_max_submissions_epoch) | `PouiMaxSubmissionsPerEpoch` | — | — |\n| [`governance_root_track_approval`](#param-governance_root_track_approval) | `APP_ROOT` | — | `P_APPROVAL_FLOOR` |\n| [`babe_primary_probability_denominator`](#param-babe_primary_probability_denominator) | `PRIMARY_PROBABILITY` | — | — |\n| [`aleph_max_data_branch_len`](#param-aleph_max_data_branch_len) | `MAX_DATA_BRANCH_LEN` | — | — |\n| [`aleph_max_round`](#param-aleph_max_round) | `MAX_ROUND` | — | — |\n| [`finality_committee_size`](#param-finality_committee_size) | `AlephMaxCommittee` | — | — |\n| [`validator_attestation_threshold`](#param-validator_attestation_threshold) | `PouiDefaultValidatorAttestationThreshold` | — | — |\n| [`attest_max_verifier_set_members`](#param-attest_max_verifier_set_members) | `AttestMaxVerifierSetMembers` | — | — |\n| [`attest_max_claim_signatures`](#param-attest_max_claim_signatures) | `AttestMaxClaimSignatures` | — | — |\n| [`poui_tee_v1_profile_id`](#param-poui_tee_v1_profile_id) | `POUI_TEE_V1_PROFILE_ID` | — | — |\n| [`poui_tee_v1_profile_version`](#param-poui_tee_v1_profile_version) | `PouiTeeV1Profile` | — | — |\n| [`validator_rotation_interval_blocks`](#param-validator_rotation_interval_blocks) | `RotationIntervalBlocks` | — | — |\n| [`validators_to_eject`](#param-validators_to_eject) | `ValidatorsToEject` | — | — |\n| [`validators_to_promote`](#param-validators_to_promote) | `ValidatorsToPromote` | — | — |\n| [`validator_active_set_cap`](#param-validator_active_set_cap) | `ValidatorActiveSetCap` | — | — |\n| [`validator_min_active_validators`](#param-validator_min_active_validators) | `ValidatorMinActiveValidators` | — | — |\n| [`validator_rotation_churn_percent`](#param-validator_rotation_churn_percent) | `ValidatorRotationChurnPercent` | — | — |\n| [`validator_min_scored_samples`](#param-validator_min_scored_samples) | `ValidatorMinScoredSamples` | — | — |\n| [`ejection_cooldown_blocks`](#param-ejection_cooldown_blocks) | `EjectionCooldownBlocks` | — | — |\n| [`validator_unbonding_blocks`](#param-validator_unbonding_blocks) | `ValidatorUnbondingPeriodBlocks` | — | — |\n| [`validator_extended_downtime_slash_percent`](#param-validator_extended_downtime_slash_percent) | `ValidatorExtendedDowntimeSlash` | — | — |\n| [`validator_growth_numerator`](#param-validator_growth_numerator) | `ValidatorGrowthNumerator` | — | — |\n| [`validator_growth_denominator`](#param-validator_growth_denominator) | `ValidatorGrowthDenominator` | — | — |\n| [`throughput_tripwire_gflops_per_sec`](#param-throughput_tripwire_gflops_per_sec) | `PouiGnThroughputCeilingGflopsPerSec` | — | — |\n| [`refund_penalty_phi_percent`](#param-refund_penalty_phi_percent) | `ChannelRefundPenalty` | — | — |\n| [`channel_max_settlement_turns`](#param-channel_max_settlement_turns) | `ChannelMaxSettlementTurns` | — | — |\n| [`channel_max_merkle_path_len`](#param-channel_max_merkle_path_len) | `ChannelMaxMerklePathLen` | — | — |\n| [`channel_base_per_turn`](#param-channel_base_per_turn) | `ChannelBasePerTurn` | — | — |\n| [`channel_c_turn_fixed`](#param-channel_c_turn_fixed) | `ChannelCTurnFixed` | — | — |\n| [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) | `ChannelDisputeWindow` | — | — |\n| [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks) | `ChannelDisputeResponseWindow` | — | — |\n| [`channel_toploc_escalation_window_blocks`](#param-channel_toploc_escalation_window_blocks) | `ChannelToplocEscalationWindow` | — | — |\n| [`channel_challenger_bond`](#param-channel_challenger_bond) | `ChannelChallengerBond` | — | — |\n| [`channel_audit_forfeit_slash_ppm`](#param-channel_audit_forfeit_slash_ppm) | `ChannelAuditForfeitSlashPpm` | — | — |\n| [`audit_fee_split_ppm`](#param-audit_fee_split_ppm) | `ChannelAuditFeeSplitPpm` | — | — |\n| [`audit_fee_per_turn`](#param-audit_fee_per_turn) | `ChannelAuditFeePerTurn` | — | — |\n| [`channel_ack_window_blocks`](#param-channel_ack_window_blocks) | `ChannelAckWindow` | — | — |\n| [`min_force_open_escrow_for_failed_ack`](#param-min_force_open_escrow_for_failed_ack) | `MinForceOpenEscrowForFailedAck` | — | — |\n| [`toploc_band_tau_accept_bf16_milli`](#param-toploc_band_tau_accept_bf16_milli) | — | `ToplocBandInt.tauAcceptBf16` | — |\n| [`toploc_band_tau_slash_bf16_milli`](#param-toploc_band_tau_slash_bf16_milli) | — | `ToplocBandInt.tauSlashBf16` | — |\n| [`toploc_band_eng29_threshold_milli`](#param-toploc_band_eng29_threshold_milli) | — | `ToplocBandInt.eng29Threshold` | — |\n| [`max_decode_policies_per_model`](#param-max_decode_policies_per_model) | `MAX_DECODE_POLICIES_PER_MODEL` | — | — |\n| [`tokens_per_byte_band_ppm_llama3`](#param-tokens_per_byte_band_ppm_llama3) | — | `MeteringCertInt.tokensPerByteBandPpmLlama3` | — |\n| [`tx_fee_burn_percent_live`](#param-tx_fee_burn_percent_live) | `BurnFees` | — | — |\n| [`tx_fee_author_share_percent_live`](#param-tx_fee_author_share_percent_live) | `AllFeesToAuthor` | — | — |\n| [`tx_weight_to_fee`](#param-tx_weight_to_fee) | `TransactionPicosecondFee` | — | — |\n| [`tx_length_to_fee`](#param-tx_length_to_fee) | `TransactionByteFee` | — | — |\n| [`tx_target_block_fullness_percent`](#param-tx_target_block_fullness_percent) | `TargetBlockFullness` | — | — |\n| [`tx_operational_fee_multiplier`](#param-tx_operational_fee_multiplier) | `OperationalFeeMultiplier` | — | — |\n| [`da_ephemeral_retention_blocks`](#param-da_ephemeral_retention_blocks) | `DaEphemeralRetention` | — | — |\n| [`da_shard_count`](#param-da_shard_count) | `DaReplicationFactor` | — | — |\n| [`da_min_replication_factor`](#param-da_min_replication_factor) | `MIN_REPLICATION_FACTOR` | `k` | — |\n| [`da_lease_deposit_per_byte`](#param-da_lease_deposit_per_byte) | `DaDepositPerByte` | — | — |\n| [`agent_cap_window_blocks`](#param-agent_cap_window_blocks) | `AgentEpochLength` | — | — |\n| [`agent_identity_min_stake`](#param-agent_identity_min_stake) | `AgentIdentityMinStake` | — | — |\n| [`circuit_breaker_window`](#param-circuit_breaker_window) | `SessionKeysCircuitBreakerPeriod` | — | — |\n| [`circuit_breaker_tx_count`](#param-circuit_breaker_tx_count) | `SessionKeysCircuitBreakerMaxTxs` | — | — |\n| [`circuit_breaker_flop_cap`](#param-circuit_breaker_flop_cap) | `SessionKeysCircuitBreakerMaxSpend` | — | — |\n\n<!-- END GENERATED: param-table -->\n\n**Derived quantities & narrative constants** — structural values, formulas, and mechanism constants that are\n*not* part of the machine-checked numeric contract above (so they live here, not in the params file):\n\n| Parameter | Value | § | D-id |\n|-----------|-------|---|------|\n| Block interval / runtime length envelope | 1 s / 5 MiB maximum, 75% Normal; no measured capacity profile | [2.1](#21-requirements) / [5.2](#52-block--transaction-sizing) | D-0401, D-0502 |\n| Finality / BFT tolerance | deterministic once ordered; no latency target / strictly < ⅓ Byzantine committee seats | [2.1](#21-requirements) | D-0401, D-0501, D-0502 |\n| Committee selection | PoUI-gated: stake + recent accepted verification duty (`hp-consensus::select_committee`; R15.4c) | [2.1](#21-requirements) / [2.3](#23-safety--the-three-sub-proofs) / [15.4](#154-selection--the-poui-gated-committee) | D-0401, D-0439 |\n| Consensus engine | BABE block authoring + stake-BFT-DAG **AlephBFT finality**; `pallet_aleph` runtime **index 104** reports `LastFinalized` to `AlephFinalizedPrefix` | [2](#2-consensus) | D-0401 |\n| Miner/checker Sybil cost / identity | ≥10k FLOP base + capacity deposit + attested inventory + active renewable cap | [2.4](#24-sybil-model--miner-and-checker-identities) | D-0418, D-0433 |\n| Validator slashing | Liveness 1 % (jail > 300 blk) / extended-downtime 5 % (kick > 24 h); **Equivocation correlated** — lone 50 % (+50 % returned after 180 d) → ≥⅓ correlated 100 %; Collusion / EvidenceForgery / TEE / DoubleSpend 100 % + eject + blacklist | [11](#11-security-invariants) / [13.2](#132-validator-consensus--da--leader-duties) | D-0409, D-0420 |\n| Unbonding slash-lock | no unbond completion while a session/dispute/audit is open; unlock cooldown ≥ dispute window + resolution (miner `[LIVE]`; validator freeze and margin composition E.57) | [6.1](#61-primitives) / [13](#13-failure-semantics--actor--failure-matrix) | D-0419 |\n| Validator rotation | [`RotationIntervalBlocks`](#param-validator_rotation_interval_blocks); **stake-ordered**, gated by a verified-work + liveness **minimum-performance floor**; [eject](#param-validators_to_eject)/[promote](#param-validators_to_promote) = 50, [cooldown](#param-ejection_cooldown_blocks) ~7 d | [6.1](#61-primitives) / [13.2](#132-validator-consensus--da--leader-duties) | D-0416, D-0409 |\n| `G_n` / `F_eff` | `F_eff/10⁹`; deterministic reference-work accounting (`hp_poui::flop_meter`), distinct from physical instruction measurement | [4.1](#41-requirements) / [4.2](#42-the-op-count-model) | D-0405, D-0501 |\n| Throughput tripwire ceiling | reject if `gn·1000/latency_ms` > [**2,000,000 GFLOPS/s**](#param-throughput_tripwire_gflops_per_sec) (reject-only, never clamps `gn`; governable, default-on) | [4.2](#42-the-op-count-model) | D-0405 |\n| Heuristic (sanity only) | `2·P_active·N + 2·n_layer·n_ctx·d_attn`, ~2–3× | [4.2](#42-the-op-count-model) | D-0405 |\n| `model_hash` | measured dm-verity Merkle root (reproducible packer `[tools/modelpack]`), extended to RTMR3, registry-pinned per `(model, precision)`, fail-closed `Vk::V3` | [3.3](#33-tier-1--tee-attestation--measuring-model_hash-optional--hard-tier) | D-0404 |\n| Validator attestation quorum | [**BFT fraction, default 2/3**](#param-validator_attestation_threshold) (`ValidatorAttestationThreshold: Perbill`, root-governable); `ceil(active_count × threshold).max(1)` distinct active-validator signatures required | [3.6](#36-tier-4--on-chain-settlement-zk-aggregation--validator-bft-quorum), [13.3](#133-validator-attestation-quorum-bft-fraction) | D-0414 (supersedes D-0406) |\n| Direct-rail attestation extrinsic | 18,434 B at active=100/q=67; 36,859 B at supported max active=200/q=134; no throughput inference | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0502 |\n| Protocol DA (sovereign validator, §5.3) | [`R = 6` shards](#param-da_shard_count), Reed–Solomon **rate ½** (k=3+3, any 3 reconstruct); `Ephemeral` [retention `W` = **14 d**](#param-da_ephemeral_retention_blocks); audit deadline ~5 min; serve-or-slash bounded 1% (`Liveness`); **no per-byte DA fee** — DA is a validator duty funded by the validator reward share (D-0412) | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402, D-0412 |\n| DA leased model storage (D-0407) | default lease term **180 d**; term unit / top-up granularity **30 d**; expiry warning **30 d** before `lease_end` (one-shot, lazy); grace **14 d** (= `W`); **no storage fee** — `top_up_lease` is free (tx only); a **refundable** anti-spam deposit = `bytes × DepositPerByte` is **held** (dedicated hold reason) and **returned in full** on prune / voluntary withdrawal (D-0412); usage **pin** blocks prune; prune recoverable (deterministic root), reactivation re-locks the deposit | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0407, D-0412 |\n| Session-key expiry / caps | **≤10 d** (`SessionKeysMaxDuration = 864,000` blocks at 1 s); per-tx + daily caps; circuit breaker 60 blk / [100 tx](#param-circuit_breaker_tx_count) / [250 FLOP](#param-circuit_breaker_flop_cap) | [6.2](#62-agent-autonomy--operating-without-per-action-consensus) | — |\n| Compute channel (session settle) | 2 primary cooperative lifecycle inclusions, plus evidence/dispute calls; bytes and verification grow with turns; escrow = reserved capacity paid to the miner (no under-use refund, no settlement fee); [**dispute window 7 d**](#param-channel_dispute_window_blocks) ≤ DA `W` = 14 d; [**dispute-response window 2 h**](#param-channel_dispute_response_window_blocks); `top_up_escrow` | [12.1](#121-sessions--attested-streaming--aggregate-settlement) / [12.2](#122-per-identity-capacity-reservation) | D-0403 |\n| Tx model / composability | account + monotonic `u32` nonce (2-D lanes optional, not adopted); UTXO-native **not adopted**; opcode-like composability via a **declarative spend-condition layer** (Miniscript-style) + multisig/proxy/timelock/HTLC; UTXO side-rail = future micropayment option | [6.3](#63-transaction--state-model) / [6.4](#64-collaborative-pool--composition) | D-0401, D-0417 |\n| Calibrated host capacity | empirical timed work; HARD ≤ 90% of summed `(SKU,count)` ceiling; seven-day lease | [7](#7-hardware-calibration--drift) | D-0433 |\n| UnlockRate / Blackout | `R_p²` / <10% for 86,400 blocks → revoke | [8](#8-performance-locked-vesting) | — |\n| `T_lock` | pair-specific; default 7,200 FLOP blocks vs 3,600 s counter duration has zero unallocated inclusion budget | [10](#10-htlc-atomic-swap) | — |\n\nThe open/unset values referenced above are specified as numbered fill-in stubs in\n[Appendix E — Open Specification Items](#appendix-e--open-specification-items).\n\n---","after":"## Appendix A — Parameter Reference\n\nThe table below is **generated** from `params/flop-protocol-params.yaml` (the canonical machine-checked\ncontract; every value is mirrored into runtime / SDK / sim code and gated by `scripts/check_params.py`).\nRegenerate with `uv run --script scripts/gen_param_table.py`; drift fails `just verify-whitepaper`. Each\nrow is anchored `#param-<name>`, and prose links to the corresponding generated anchor. This table is the\nsingle authoritative list of the values themselves.\n\n<!-- BEGIN GENERATED: param-table (source: params/flop-protocol-params.yaml via scripts/gen_param_table.py) -->\n\nEnforced parameters (`params/flop-protocol-params.yaml`); every value below is mirrored into code and gated by `scripts/check_params.py`. Link a parameter anywhere in the spec with its generated `#param-<name>` anchor.\n\n**Genesis**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-genesis_supply\"></a>`genesis_supply` | 4_400_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Genesis (pre-emission) total supply, pinned normatively by R9.7 (§9.3). |\n| <a id=\"param-genesis_miner_airdrop\"></a>`genesis_miner_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0438 | Miner-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_validator_airdrop\"></a>`genesis_validator_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Validator-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_agent_airdrop\"></a>`genesis_agent_airdrop` | 1_200_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0438 | Agent-airdrop component of the genesis supply (27.27%). |\n| <a id=\"param-genesis_reserve\"></a>`genesis_reserve` | 800_000_000 FLOP | [§9.3](#93-genesis-configuration) | D-0440 | Ecosystem/incentives reserve component of the genesis supply (18.18%) — KOL, referral and growth incentives. |\n| <a id=\"param-validator_min_stake\"></a>`validator_min_stake` | 1_200_000 FLOP | [§9](#9-emission--supply) | D-0440 | Baseline floor; compounds 9%/yr (MinimumValidatorStake). |\n| <a id=\"param-airdrop_vesting_duration_blocks\"></a>`airdrop_vesting_duration_blocks` | 7_776_000 blocks | [§8.2](#82-era-t-conversion-and-airdrop-vesting) | SPEC-022 | Interim pallet schedule: 90-day linear airdrop vesting at 1-second block time, governing no ratified grant tier (§8.2). |\n\n**Emission & Rewards**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-initial_block_reward\"></a>`initial_block_reward` | 96 FLOP | [§9](#9-emission--supply) | D-008 | Block reward at genesis (Era 0). |\n| <a id=\"param-halving_interval_blocks\"></a>`halving_interval_blocks` | 63_072_000 blocks | [§9](#9-emission--supply) |  | Blocks between halvings (~730 days at 1s/block). |\n| <a id=\"param-max_halvings\"></a>`max_halvings` | 5 count | [§9](#9-emission--supply) | D-0436 | Halvings before the reward floors permanently. |\n| <a id=\"param-floor_reward\"></a>`floor_reward` | 3 FLOP | [§9](#9-emission--supply) | D-0436 | Perpetual per-block reward after max_halvings (96 >> 5 = 3). |\n| <a id=\"param-miner_share_ppt\"></a>`miner_share_ppt` | 750 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Miner share of each block reward (75%; yellowpaper §9). |\n| <a id=\"param-validator_share_ppt\"></a>`validator_share_ppt` | 100 parts-per-thousand | [§9](#9-emission--supply) |  | Validator share of each block reward (10%). |\n| <a id=\"param-agent_share_ppt\"></a>`agent_share_ppt` | 100 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Agent/broker rebate share of each block reward (10%; yellowpaper §9). |\n| <a id=\"param-staker_share_ppt\"></a>`staker_share_ppt` | 50 parts-per-thousand | [§9](#9-emission--supply) | D-0435 | Community-staker share of each block reward (5%; yellowpaper §9) — duration-locked community staking pool across seven lock duration tiers with zero slashing risk and no operator delegation (D-0530), for all FLOP stakers other than miners and validators. |\n| <a id=\"param-reward_distribution_period_blocks\"></a>`reward_distribution_period_blocks` | 86_400 blocks | [§9](#9-emission--supply) |  | Blocks between block-rewards distributions (one day at 1 s blocks). |\n| <a id=\"param-gn_decay_factor_ppb\"></a>`gn_decay_factor_ppb` | 1_000_000_000 ppb | [§9](#9-emission--supply) |  | GnDecayFactor read when the key is absent: 1.0, i.e. NO decay, so a period's miner leg is split purely by verified G_n (owner decision 2026-10-01, #2144). |\n| <a id=\"param-finality_committee_premium_weight_ppm\"></a>`finality_committee_premium_weight_ppm` | 1_100_000 ppm | [§9](#9-emission--supply) |  | Finality-committee validator reward weight inside the validator 10% pool. |\n\n**Developer Subsidy (separate from block reward)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-subsidy_per_block_per_recipient\"></a>`subsidy_per_block_per_recipient` | 8 FLOP | [§9](#9-emission--supply) | D-0436 | ERA-0 per-block subsidy to EACH of FLOP Labs and FLOP Foundation (16 FLOP/block combined; yellowpaper §9), on top of the 96 FLOP block reward. |\n| <a id=\"param-subsidy_duration_blocks\"></a>`subsidy_duration_blocks` | 315_360_000 blocks | [§9](#9-emission--supply) | D-0436 | Exclusive subsidy sunset block (~3650 days = 10 years = 5 × halving_interval_blocks), at and after which (`now >= SubsidyEndBlock`) `on_initialize` mints 0. |\n\n**Staking & Delegation**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-min_miner_self_stake\"></a>`min_miner_self_stake` | 10_000 FLOP | [§6.1](#61-primitives) |  | Minimum self-stake to register as a miner (anti-Sybil). |\n| <a id=\"param-miner_commission_cap_percent\"></a>`miner_commission_cap_percent` | 20 percent | [§6.1](#61-primitives) | D-0530 | [DEPRECATED — D-0530] Legacy maximum commission a miner could charge delegators (20%; yellowpaper §6.1). |\n| <a id=\"param-miner_unbonding_blocks\"></a>`miner_unbonding_blocks` | 604_800 blocks | [§6.1](#61-primitives) |  | Miner unbonding period (~7 days at 1s/block). |\n| <a id=\"param-miner_capacity_stake_per_gflop\"></a>`miner_capacity_stake_per_gflop` | VFY / 100 (= 0.01 FLOP per GFLOP/s) | [§6.1](#61-primitives) | D-0418 | Capacity-proportional miner self-stake = min_miner_self_stake + B_p * this (LINEAR, NO CAP — a cap would make the largest miners' fraud +EV; D-0418, ENG-8). 0.01 FLOP per GFLOP/s of CALIBRATED B_p (VFY/100, where VFY = 1 FLOP). |\n| <a id=\"param-miner_stake_revocation_latency_blocks\"></a>`miner_stake_revocation_latency_blocks` | 604_800 blocks | [§6.1](#61-primitives) |  | Revocation/dispute latency window used in miner stake exposure: required self-stake covers cap × this window × stake_rate. |\n| <a id=\"param-miner_stake_surge_multiplier_ppm\"></a>`miner_stake_surge_multiplier_ppm` | 1_250_000 ppm | [§6.1](#61-primitives) |  | Provisional burst-cap stake multiplier. 1_250_000 ppm = 1.25x exposure stake while a cap is still burst/audit-ratcheted. |\n| <a id=\"param-calibration_min_verified_jobs\"></a>`calibration_min_verified_jobs` | 64 jobs | [§7.1](#71-entry--benchmark-burst) | D-0433 | D-0433 minimum independently verified jobs in the quick serving-entry burst. |\n| <a id=\"param-calibration_min_burst_blocks\"></a>`calibration_min_burst_blocks` | 600 blocks | [§7.1](#71-entry--benchmark-burst) | D-0433 | D-0433 minimum chain-timed serving-entry burst (10 minutes at 1s blocks). yellowpaper §7.1. |\n| <a id=\"param-calibration_min_utilization_ppm\"></a>`calibration_min_utilization_ppm` | 500_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | Sustained utilization threshold for burst acceptance. |\n| <a id=\"param-calibration_provisional_discount_ppm\"></a>`calibration_provisional_discount_ppm` | 900_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | HARD-tier provisional discount applied to attested SKU ceilings before min(empirical_burst_cap, discounted_sku_ceiling). yellowpaper §7.1. |\n| <a id=\"param-calibration_lease_blocks\"></a>`calibration_lease_blocks` | 604_800 blocks | [§7.2](#72-renewable-cap) | D-0433 | D-0433 renewable calibration-cap lease (7 days at 1s blocks). |\n| <a id=\"param-calibration_renewal_min_verified_jobs\"></a>`calibration_renewal_min_verified_jobs` | 8 jobs | [§7.2](#72-renewable-cap) | D-0433 | D-0433 minimum fresh one-shot Ghost canaries for quick restart/offline/periodic cap renewal. |\n| <a id=\"param-calibration_renewal_max_age_blocks\"></a>`calibration_renewal_max_age_blocks` | 600 blocks | [§7.2](#72-renewable-cap) |  | Maximum miner-triggered renewal window (10 minutes at 1s blocks). |\n| <a id=\"param-calibration_min_recalibration_interval_blocks\"></a>`calibration_min_recalibration_interval_blocks` | 600 blocks | [§7.1](#71-entry--benchmark-burst) |  | Minimum interval between accepted initial calibrations (10 minutes at 1s blocks), preventing rapid cap replacement and strategic retry loops. |\n| <a id=\"param-calibration_max_gpu_inventory_entries\"></a>`calibration_max_gpu_inventory_entries` | 16 distinct SKUs | [§7.1](#71-entry--benchmark-burst) |  | Maximum distinct attested GPU SKUs on one miner host. |\n| <a id=\"param-miner_capacity_stake_sim_per_10_gflop\"></a>`miner_capacity_stake_sim_per_10_gflop` | 0.1 FLOP per 10 GFLOP/s | [§6.1](#61-primitives) | D-0418 | Simulator mirror of miner_capacity_stake_per_gflop (D-0418). |\n\n**Compute-channel timing bounds**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-timing_max_clock_skew_ms\"></a>`timing_max_clock_skew_ms` | 250 ms | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Maximum clock skew (in ms) tolerated between miner and agent wall clocks when classifying timing as Eligible vs Ambiguous. |\n| <a id=\"param-timing_network_pad_ms\"></a>`timing_network_pad_ms` | 100 ms | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Network round-trip padding (in ms) added to the clock-skew allowance when evaluating receipt timing. |\n\n**Sessions / capacity reservations (A1 anti-spam)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-max_active_reservations_base\"></a>`max_active_reservations_base` | 4 count | [§12.2](#122-per-identity-capacity-reservation) |  | Base number of concurrent active capacity reservations per agent identity. |\n| <a id=\"param-escrow_per_reservation_slot\"></a>`escrow_per_reservation_slot` | 50 FLOP | [§12.2](#122-per-identity-capacity-reservation) |  | Escrow (in FLOP) that grants +1 additional active reservation slot beyond base. |\n| <a id=\"param-min_certificate_premium_ppm\"></a>`min_certificate_premium_ppm` | 1_500_000 ppm | [§12.2](#122-per-identity-capacity-reservation) |  | Minimum price multiple (1_500_000 = 1.5x) over the model's per-GFLOP rate for certificate-backed premium settlement (#535). certificate_settle requires escrow >= price_per_gflop * aggregate_gn * multiple, so premium-class proven work cannot pay standard-rate escrow. |\n| <a id=\"param-sampled_audit_alpha_ppm\"></a>`sampled_audit_alpha_ppm` | 50_000 ppm | [§3.5](#35-tier-3--independent-optimistic-re-execution--slashing) |  | Default α for sampled-audit certificate mode (#628 / certificate format section 9.5; yellowpaper §3.5). 50_000 = 5% of turns selected post-epoch via VRF beacon; 1_000_000 = full audit. |\n| <a id=\"param-sampled_audit_checkpoint_turns\"></a>`sampled_audit_checkpoint_turns` | 16 turns | [§3.5](#35-tier-3--independent-optimistic-re-execution--slashing) |  | KV-checkpoint interval C for sampled-audit replay (#628). |\n| <a id=\"param-audit_quantum_gn\"></a>`audit_quantum_gn` | 100_000_000 G_n | [§12.2](#122-per-identity-capacity-reservation) |  | #764 blast-radius control: the session-host / checker forces at least one audit ticket every this many G_n of served work (value quantum Q). |\n| <a id=\"param-high_value_gn_threshold\"></a>`high_value_gn_threshold` | 10_000_000 G_n | [§12.2](#122-per-identity-capacity-reservation) |  | #764 asymmetry: any single turn with G_n ≥ this is force-audited (effective α=1 for its leaf), so a sparse high-G_n turn cannot ride Bernoulli-α. MUST stay ≤ audit_quantum_gn so no unaudited turn alone fills a quantum (TRIZ P4 Asymmetry). |\n\n**Finality-stall safe mode (compute-channel)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-finality_lag_warn\"></a>`finality_lag_warn` | 30 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag above which the detector reports Lagging (alert only; finality-clocked deadlines pause naturally). |\n| <a id=\"param-finality_freeze_threshold\"></a>`finality_freeze_threshold` | 120 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag at/above which the channel enters Stalled: new finality-dependent opens are rejected fail-closed (ensure_finality_open_allowed); additive top-up/cancel paths stay open. |\n| <a id=\"param-max_finality_stall\"></a>`max_finality_stall` | 3_600 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Finality lag at/above which the chain is EscapeEligible (safe mode): restore AlephBFT finality or ratify a checkpoint recovery through the hard-fork runbook. ~1h at 1s blocks. |\n| <a id=\"param-htlc_timelock_symmetry_safety_margin_percent\"></a>`htlc_timelock_symmetry_safety_margin_percent` | 20 percent | [§10.1](#101-requirements) |  | Minimum foreign-chain HTLC safety margin as a percentage of the foreign duration, after converting it to one-second FLOP blocks. |\n| <a id=\"param-htlc_burn_share_ppt\"></a>`htlc_burn_share_ppt` | 0 ppt | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Share of a finalized post-timeout HTLC resolution burned before payout. |\n| <a id=\"param-btc_block_time_flop_blocks\"></a>`btc_block_time_flop_blocks` | 600 blocks | [§10.1](#101-requirements) |  | Average Bitcoin block interval expressed in one-second FLOP blocks. |\n\n**PoUI simulator-mode safety flag (#297 CRIT-02 / RT-C02)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-poui_allow_simulator_mode\"></a>`poui_allow_simulator_mode` | cfg!(feature = \"volta\") flag |  |  | #297: AllowSimulatorMode gates the TEE-free simulator credit path; derived from the `volta` devnet feature so production runtimes fail closed. |\n| <a id=\"param-paid_storage_enabled\"></a>`paid_storage_enabled` | cfg!(feature = \"paid-storage-unratified\") flag | [§5.4](#54-agent-memory-and-paid-data-storage) |  | Build-time gate for the unratified paid agent-storage pallet (yellowpaper §5.4, R5.4k). |\n\n**D-0528 sponsor-owned registration bonds (devnet/testnet only)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-sponsored_self_stake_enabled\"></a>`sponsored_self_stake_enabled` | cfg!(feature = \"sponsored-self-stake\") flag |  | D-0528 | D-0528: active sponsored principal counts toward the miner capacity bond and the validator effective minimum, and sponsors may post an operator's whole registration bond (sponsor_register_miner / sponsor_register_validator). |\n\n**PoUI submission rate limit**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-poui_submission_window_blocks\"></a>`poui_submission_window_blocks` | 86_400 blocks | [§1.2](#12-protocol-clocks--canonical-table) |  | Block-aligned PoUI submission rate-limit window (1 day at 1 s blocks). |\n| <a id=\"param-poui_max_submissions_epoch\"></a>`poui_max_submissions_epoch` | 10 count | [§1.2](#12-protocol-clocks--canonical-table) |  | Maximum submissions per miner during each block-aligned poui_submission_window_blocks window. |\n\n**F2 supply-side governor (default OFF; governance-settable)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-governor_default_enabled\"></a>`governor_default_enabled` | false bool | [§9](#9-emission--supply) |  | Master default for both governor dampers — OFF at genesis (insurance, governance-armed). |\n| <a id=\"param-governor_emission_damping_util_floor\"></a>`governor_emission_damping_util_floor` | 0.3 fraction | [§9](#9-emission--supply) |  | Utilization below which the retention reward-boost engages (utilization-indexed, never price-indexed — anti-Terra). |\n| <a id=\"param-governor_emission_damping_max_boost\"></a>`governor_emission_damping_max_boost` | 1.5 multiplier | [§9](#9-emission--supply) |  | Hard cap on the miner-reward multiplier when the governor is armed (+50% max). |\n| <a id=\"param-governor_dynamic_burn_tier1\"></a>`governor_dynamic_burn_tier1` | 0.1 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 0–1 (era_max 1) when dynamic burn is armed. |\n| <a id=\"param-governor_dynamic_burn_tier2\"></a>`governor_dynamic_burn_tier2` | 0.15 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 2–3 (era_max 3) when dynamic burn is armed. |\n| <a id=\"param-governor_dynamic_burn_tier3\"></a>`governor_dynamic_burn_tier3` | 0.25 fraction | [§9](#9-emission--supply) |  | Fee-burn fraction for eras 4+ (era_max 99 sentinel) when dynamic burn is armed. |\n\n**Governance**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-governance_root_track_approval\"></a>`governance_root_track_approval` | 67 percent | [§14.2](#142-fip-binding) | D-015 | Flat approval threshold (Byzantine 2/3) for the root / protocol-upgrade governance curve, encoded as APP_ROOT and used by the production protocol_upgrade track (GOV-A, yellowpaper §14.2). |\n| <a id=\"param-protocol_upgrade_support_floor\"></a>`protocol_upgrade_support_floor` | 15 percent | [§14.2](#142-fip-binding) | D-0415 | Turnout-floor (min_support) for the production protocol_upgrade (Root) track — 50% ceiling decaying to a 15% floor (the quorum SPEC-024 lacked). |\n\n**Consensus / finality committee**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-babe_primary_probability_denominator\"></a>`babe_primary_probability_denominator` | 50 ratio-denominator | [§15.4](#154-selection--the-poui-gated-committee) |  | BABE primary-slot probability c = 1/N, where a validator's per-slot win chance is p = 1 - (1 - c)^theta (theta = stake fraction). |\n| <a id=\"param-aleph_max_data_branch_len\"></a>`aleph_max_data_branch_len` | 30 blocks | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum blocks in one AlephBFT-ordered chain proposal — the finality throughput ceiling (finality rate ~= this / ordering latency; measured 1.66 blocks/s at the previous value of 7, implying ~4.2 s to order a proposal). |\n| <a id=\"param-aleph_max_round\"></a>`aleph_max_round` | 65_535 round | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum AlephBFT round accepted in one session. |\n| <a id=\"param-aleph_gossip_protocol_version\"></a>`aleph_gossip_protocol_version` | 5 version | [§15.4](#154-selection--the-poui-gated-committee) |  | Notification-protocol version for AlephBFT unit gossip (/flop/aleph/N). |\n| <a id=\"param-finality_committee_size\"></a>`finality_committee_size` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) | D-0437 | AlephBFT finalizing committee size: randomly sampled stake-weighted without replacement from the PoUI-gated active set off a BABE-VRF seed (#448/#848). |\n| <a id=\"param-validator_attestation_threshold\"></a>`validator_attestation_threshold` | 666_666_666 perbill-parts | [§3.6](#36-tier-4--on-chain-settlement-zk-aggregation--validator-bft-quorum) | D-0414 | BFT attestation quorum (Perbill parts 666_666_666 = 2/3), root-governable; gates the direct PoUI proof path + Ghost Tasks. yellowpaper §3.6/§13.3. |\n| <a id=\"param-attest_max_verifier_set_members\"></a>`attest_max_verifier_set_members` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum governed verifier keys stored for one attestation profile. |\n| <a id=\"param-attest_max_claim_signatures\"></a>`attest_max_claim_signatures` | 100 count | [§15.4](#154-selection--the-poui-gated-committee) |  | Maximum signatures accepted by the `pallet_attest` shared-claim rail; matches that rail's 100-member governed verifier-set bound and does not cap `pallet_flop_poui` `submit_validator_attestations` bundles, which are bounded by dispatch weight and block length. |\n| <a id=\"param-poui_tee_v1_profile_id\"></a>`poui_tee_v1_profile_id` | H256([4u8; 32]) profile-id | [§15.4](#154-selection--the-poui-gated-committee) |  | Governed shared-attestation profile id for PoUI TEE v1 claims. |\n| <a id=\"param-poui_tee_v1_profile_version\"></a>`poui_tee_v1_profile_version` | 1 profile-version | [§15.4](#154-selection--the-poui-gated-committee) |  | Initial profile version for PoUI TEE v1 claims. |\n\n**Validator security policy**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-validator_rotation_interval_blocks\"></a>`validator_rotation_interval_blocks` | 2_592_000 blocks | [§15.5](#155-rotation--set-size) | D-0416 | Validator-set rotation cadence (~30 d at 1s); automatic on_initialize + manual rotate. yellowpaper §15.5. |\n| <a id=\"param-validators_to_eject\"></a>`validators_to_eject` | 50 count | [§15.5](#155-rotation--set-size) |  | Requested maximum per rotation; live ejections also require scored evidence (a blacklisted seat needs none and goes first) and respect the churn percentage and minimum active set. |\n| <a id=\"param-validators_to_promote\"></a>`validators_to_promote` | 50 count | [§15.5](#155-rotation--set-size) |  | Per-rotation promote count from the queue (stake >= current minimum). yellowpaper §15.5. |\n| <a id=\"param-validator_active_set_cap\"></a>`validator_active_set_cap` | 1_000 count | [§9.3](#93-genesis-configuration) | D-0437 | Maximum active validators in ActiveValidators (admitted by rotation promotion from ValidatorQueue or direct un_jail/rejoin restoration). yellowpaper §9.3 R9.9, §15.5. |\n| <a id=\"param-validator_min_active_validators\"></a>`validator_min_active_validators` | 4 count | [§15.5](#155-rotation--set-size) |  | Minimum active set preserved by rotation and every removal path. |\n| <a id=\"param-validator_rotation_churn_percent\"></a>`validator_rotation_churn_percent` | 10 percent | [§15.5](#155-rotation--set-size) |  | Maximum share of the current active set ejected in one rotation, rounded up to a whole validator. |\n| <a id=\"param-validator_min_scored_samples\"></a>`validator_min_scored_samples` | 3 count | [§15.5](#155-rotation--set-size) |  | Performance-score updates required within one rotation interval before a validator may be ejected. |\n| <a id=\"param-ejection_cooldown_blocks\"></a>`ejection_cooldown_blocks` | 604_800 blocks | [§15.5](#155-rotation--set-size) |  | Cooldown (~7 d) before a rotation-ejected validator (whose self-stake freeze was thawed on ejection) may re-register into ValidatorQueue at effective_minimum_stake; configured in Config, enforcement in register pending. |\n| <a id=\"param-validator_unbonding_blocks\"></a>`validator_unbonding_blocks` | 1_814_400 blocks | [§13](#13-failure-semantics--actor--failure-matrix) | D-0419 | Validator stake unbonding lockup (~21 d); bounds withdraw-after-misbehavior. yellowpaper §13. |\n| <a id=\"param-validator_extended_downtime_slash_percent\"></a>`validator_extended_downtime_slash_percent` | 5 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Slash fraction for extended validator downtime (followed by removal). yellowpaper §13.2. |\n| <a id=\"param-validator_growth_numerator\"></a>`validator_growth_numerator` | 109 ratio | [§15.2](#152-onboarding-normative) | D-0413 | Numerator of the annual compounding factor on the validator minimum-stake floor (109/100 = +9%/yr). yellowpaper §15.2. |\n| <a id=\"param-validator_growth_denominator\"></a>`validator_growth_denominator` | 100 ratio | [§15.2](#152-onboarding-normative) | D-0413 | Denominator paired with validator_growth_numerator (109/100 = +9%/yr). yellowpaper §15.2. |\n\n**Metering tripwire**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-throughput_tripwire_gflops_per_sec\"></a>`throughput_tripwire_gflops_per_sec` | 2_000_000 G_n/s | [§4.2](#42-the-op-count-model) | D-0405 | Reject (never clamp) any claim whose implied gn*1000/latency_ms exceeds this; reject-only, governable, default-on. yellowpaper §4.2. |\n| <a id=\"param-soft_tier_spot_check_rate_ppm\"></a>`soft_tier_spot_check_rate_ppm` | 25_000 ppm | [§7.1](#71-entry--benchmark-burst) |  | SOFT-tier channel spot-check exposure surfaced with the calibration snapshot event for quality-audit pricing. yellowpaper §7.1. |\n\n**Compute-channel settlement**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-refund_penalty_phi_percent\"></a>`refund_penalty_phi_percent` | 20 percent | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0422 | Static D-0422 penalty fraction phi on unused escrow for ambiguous early close; penalty routes 100% to burn/Foundation, never miner. |\n| <a id=\"param-channel_max_settlement_turns\"></a>`channel_max_settlement_turns` | 1_024 count | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Hard cap on VerifiedTurns per settle/force_settle bundle, and the ceiling on an SLA's max_turns at open. |\n| <a id=\"param-channel_max_session_activation_bytes\"></a>`channel_max_session_activation_bytes` | 65_536 bytes | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Per-activation DA allocation cap for a funded Open session. |\n| <a id=\"param-channel_max_merkle_path_len\"></a>`channel_max_merkle_path_len` | 64 count | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Max Merkle authentication-path length per VerifiedTurn (proves membership in a tree of up to 2^64 leaves). |\n| <a id=\"param-channel_base_per_turn\"></a>`channel_base_per_turn` | 1 base unit (10^-18 FLOP) | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Per-turn flat fee of the two-part tariff (#719 option A): turn_pay = BasePerTurn + G_n (rate=1 in channel pay units). |\n| <a id=\"param-channel_c_turn_fixed\"></a>`channel_c_turn_fixed` | 1 base unit (10^-18 FLOP) | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Fixed per-turn cost floor that BasePerTurn must cover (#719). integrity_test asserts BasePerTurn ≥ CTurnFixed so dust turns are not net-negative for miner/network. |\n| <a id=\"param-channel_dispute_window_blocks\"></a>`channel_dispute_window_blocks` | 604_800 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | Session dispute/challenge window (7 d); integrity_test enforces <= DaEphemeralRetention (14 d). yellowpaper §12.1. |\n| <a id=\"param-channel_dispute_response_window_blocks\"></a>`channel_dispute_response_window_blocks` | 7_200 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | Time to respond to an open dispute (2 h); non-response defaults to a fraud verdict. yellowpaper §12.1. |\n| <a id=\"param-channel_toploc_escalation_window_blocks\"></a>`channel_toploc_escalation_window_blocks` | 7_200 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0431 | #754: validators' window (2 h) to resolve a middle-band TOPLOC escalation (stronger report → slash, or quorum clear) before it times out inconclusive (full agent refund, no miner pay, no slash). |\n| <a id=\"param-channel_challenger_bond\"></a>`channel_challenger_bond` | 100 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Bond a challenger posts to open a session dispute (anti-griefing). yellowpaper §12.1. |\n| <a id=\"param-slash_fraud_percent\"></a>`slash_fraud_percent` | 100 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0529 | Full-slash fault class (100% routed to FLOPFoundationAccount, zero burn per D-0529): Collusion / EvidenceForgery / TEE-attestation failure / correlated equivocation / double-spend → 100% slash + eject + blacklist. yellowpaper §13.2. |\n| <a id=\"param-channel_audit_forfeit_slash_ppm\"></a>`channel_audit_forfeit_slash_ppm` | 1_000_000 ppm | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #844 publish-or-forfeit: audit-data liveness-forfeit slash floor, in ppm of the withheld settlement window's value. |\n| <a id=\"param-inference_fee_miner_share_ppt\"></a>`inference_fee_miner_share_ppt` | 850 parts-per-thousand | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0525 | #2702 (D-0525): Executive ruling (Shu, 2026-10-14). |\n| <a id=\"param-inference_fee_validator_share_ppt\"></a>`inference_fee_validator_share_ppt` | 150 parts-per-thousand | [§9](#9-emission--supply) | D-0525 | #2702 (D-0525): Executive ruling (Shu, 2026-10-14). |\n| <a id=\"param-audit_fee_split_ppm\"></a>`audit_fee_split_ppm` | 10_000 ppm | [§9](#9-emission--supply) | D-0403 | #846, #2702 (D-0525): ratified 1% (10_000 ppm) of the settlement payment funded out of the 15% validator fee leg into the audit pool that pays validators for audit work. |\n| <a id=\"param-audit_fee_per_turn\"></a>`audit_fee_per_turn` | 1 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0403 | #846: flat fee a VRF-assigned validator claims per audit verdict from the audit pool (claim_audit_fee), gated on submitted evidence and pool solvency (no unpaid-duty path). 1 FLOP placeholder; governance may recalibrate against measured audit cost. |\n| <a id=\"param-channel_ack_window_blocks\"></a>`channel_ack_window_blocks` | 600 blocks | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) |  | Window for a named miner to force_ack a permissionless force_open before expire refunds escrow. yellowpaper §12.1, Appendix C.3. |\n| <a id=\"param-min_force_open_escrow_for_failed_ack\"></a>`min_force_open_escrow_for_failed_ack` | 0.05 FLOP | [§12.1](#121-sessions--attested-streaming--aggregate-settlement) | D-0423 | Minimum force_open escrow that makes an expired, unacked request increment the named miner's FailedAcks counter. |\n\n**Derived TOPLOC band (governance-set per model/precision; #685, #705)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-toploc_band_constants_fields\"></a>`toploc_band_constants_fields` | kappa_profile_hash structural |  |  | Per-(model, precision) derived TOPLOC band committed constants consumed by band_verdict / report_toploc_mismatch: kappa_profile_hash, band_tau_accept, band_tau_slash, challenge_k, challenge_window_w. |\n| <a id=\"param-toploc_band_tau_accept_bf16_milli\"></a>`toploc_band_tau_accept_bf16_milli` | 2_900 milli_exponent_error |  |  | Derived bf16 accept threshold τ_accept≈2.9 exponent errors in milli units (×1000). |\n| <a id=\"param-toploc_band_tau_slash_bf16_milli\"></a>`toploc_band_tau_slash_bf16_milli` | 185_600 milli_exponent_error |  |  | Derived bf16 slash threshold τ_slash≈185.6 exponent errors in milli units (×1000). |\n| <a id=\"param-toploc_band_eng29_threshold_milli\"></a>`toploc_band_eng29_threshold_milli` | 38_000 milli_exponent_error |  |  | ENG-29 empirically-deployed exponent-error threshold (38) in milli units. |\n| <a id=\"param-toploc_band_kappa_within_llama31_8b_bf16\"></a>`toploc_band_kappa_within_llama31_8b_bf16` | 4.5 dimensionless |  |  | Fitted/selected within-layer κ for Llama-3.1-8B bf16 (ENG-29). |\n\n**Model registry (decode-policy sets)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-max_decode_policies_per_model\"></a>`max_decode_policies_per_model` | 32 count |  |  | Maximum decode-policy hashes pinnable in a model's optional allowed set (BoundedDecodePolicySet = BoundedVec<H256, ConstU32<MAX_DECODE_POLICIES_PER_MODEL>>). |\n\n**Metering cert tokens-per-byte band (#871)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-tokens_per_byte_band_ppm_llama3\"></a>`tokens_per_byte_band_ppm_llama3` | 500_000 ppm | [§4](#4-effective-flop-metering) |  | Certified upper bound on honest tokens-per-byte for the Llama-3 tokenizer (ppm; 500000 = 0.5 tokens/byte) — the per-(model, tokenizer) model-registry field that caps the metering cert padding constraint (e): prompt_tokens ≤ ⌈len(input_bytes) · band/1e6⌉ and generated_tokens ≤ ⌈(len(output_bytes) + 1) · band/1e6⌉ (#871, spec whitepaper/research/metering-cert-spec.md §4). |\n\n**Metering cert circuit version + guest image-id registry (#929)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-metering_cert_circuit_version\"></a>`metering_cert_circuit_version` | 3 version |  |  | Governance-pinned circuit layout the metering cert proves against (V3 transcript leaf, #929). |\n| <a id=\"param-metering_cert_guest_image_id\"></a>`metering_cert_guest_image_id` | OptionQuery storage-default |  |  | Governance-pinned RISC0 guest image id for the metering cert (safety zone, #945). |\n\n**Transaction fees (live values)**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-tx_fee_burn_percent_live\"></a>`tx_fee_burn_percent_live` | 0 percent | [§9.1](#91-requirements) | D-0529 | LIVE burn fraction of the base+length+weight tx fee (0%; D-0529). |\n| <a id=\"param-tx_fee_author_share_percent_live\"></a>`tx_fee_author_share_percent_live` | 100 percent | [§9](#9-emission--supply) | D-0529 | LIVE share of the transaction fee paid to the block author (= 100% of the whole fee under 0% burn, D-0529). |\n| <a id=\"param-tx_weight_to_fee\"></a>`tx_weight_to_fee` | 5_000_000 base units/weight (1 base unit = 10^-18 FLOP) | [§9.1](#91-requirements) |  | WeightToFee ConstantMultiplier; per-weight component of the base fee (effective floor: MinimumMultiplier = 1.0). yellowpaper §9.1. |\n| <a id=\"param-tx_length_to_fee\"></a>`tx_length_to_fee` | 5_000_000 base units/byte (1 base unit = 10^-18 FLOP) | [§9.1](#91-requirements) |  | LengthToFee ConstantMultiplier; per-byte component of the base fee. yellowpaper §9.1. |\n| <a id=\"param-tx_target_block_fullness_percent\"></a>`tx_target_block_fullness_percent` | 75 percent | [§9.1](#91-requirements) |  | Congestion target for the TargetedFeeAdjustment multiplier (raises the fee above the base floor as blocks fill). yellowpaper §9.1. |\n| <a id=\"param-tx_operational_fee_multiplier\"></a>`tx_operational_fee_multiplier` | 5 ratio | [§9.1](#91-requirements) |  | Surcharge multiple applied to operational-class dispatches. pallet_transaction_payment config. |\n\n**Data availability**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-da_ephemeral_retention_blocks\"></a>`da_ephemeral_retention_blocks` | 1_209_600 blocks | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0412 | Retention W (14 d) for Ephemeral DA blobs (quotes/proofs/transcripts/I-O); bounds the session challenge window. yellowpaper §5.3. |\n| <a id=\"param-da_shard_count\"></a>`da_shard_count` | 6 count | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | DA erasure-coding shard count R = 6, Reed-Solomon rate 1/2 (k = 3+3, any 3 reconstruct). yellowpaper §5.3. |\n| <a id=\"param-da_min_replication_factor\"></a>`da_min_replication_factor` | 3 count | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | DA Reed-Solomon reconstruction threshold k = 3 (any k of R shards reconstruct); hard floor for the governable da_shard_count so R < k (unreconstructable) is unreachable. yellowpaper §5.3. |\n| <a id=\"param-da_lease_deposit_per_byte\"></a>`da_lease_deposit_per_byte` | 200 FLOP per 10^9 bytes (= 2e-7 FLOP/byte) | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0412 | D-0412 refundable anti-spam deposit for leased DA (model weights): deposit = bytes × DepositPerByte, held on the publisher (never validator revenue), returned in full on prune/withdrawal. |\n\n**Agent wallet / session keys**\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-agent_cap_window_blocks\"></a>`agent_cap_window_blocks` | 86_400 blocks | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Wallet and session daily spend-cap window: resets on the first spend at or after 86,400 blocks from wallet or session creation or the previous reset. |\n| <a id=\"param-agent_identity_min_stake\"></a>`agent_identity_min_stake` | 10 FLOP | [§12.3](#123-market-actor-threat-class) |  | Refundable minimum stake locked to register an agent identity: capital exposure, not an irrecoverable identity cost. yellowpaper §12.3. |\n| <a id=\"param-circuit_breaker_window\"></a>`circuit_breaker_window` | 60 blocks | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Fixed agent session-key circuit-breaker window (60 blocks): either the transaction-count or spend limb trips independently, latches until window end, and then auto-resets. yellowpaper §6.2. |\n| <a id=\"param-circuit_breaker_tx_count\"></a>`circuit_breaker_tx_count` | 100 count | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Agent session-key circuit-breaker transaction-count limb: trips at 100 txs within the window, independently of circuit_breaker_flop_cap. yellowpaper §6.2. |\n| <a id=\"param-circuit_breaker_flop_cap\"></a>`circuit_breaker_flop_cap` | 250 FLOP | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Agent session-key circuit-breaker max spend per window (60 blk / 100 tx / 250 FLOP triple). yellowpaper §6.2. |\n\n**Reference-only** — canonical documented values, single-site or not yet wired for cross-language enforcement (`enforce: false`).\n\n| Parameter | Value | § | Decision | Description |\n|-----------|-------|---|----------|-------------|\n| <a id=\"param-validator_min_self_stake_ratio_percent\"></a>`validator_min_self_stake_ratio_percent` | 20 percent | [§15.2](#152-onboarding-normative) |  | Legacy minimum validator self-stake ratio when sponsored backing is enabled (§15.2). |\n| <a id=\"param-validator_work_recency_window_blocks\"></a>`validator_work_recency_window_blocks` | 86_400 blocks | [§15.2](#152-onboarding-normative) |  | Accepted verification-duty recency window for PoUI committee eligibility (§15.2, R15.4c). |\n| <a id=\"param-protocol_upgrade_approval\"></a>`protocol_upgrade_approval` | 67 percent | [§14.2](#142-fip-binding) | GOV-A | Production protocol_upgrade (Root) track approval (flat BFT 2/3); live as APP_ROOT in (enforced above as governance_root_track_approval + protocol_upgrade_support_floor). |\n| <a id=\"param-protocol_upgrade_decision_period\"></a>`protocol_upgrade_decision_period` | 28 days | [§14.2](#142-fip-binding) |  | [RATIFY] deliberation window for the protocol_upgrade track. yellowpaper §14.2. |\n| <a id=\"param-protocol_upgrade_enactment_timelock\"></a>`protocol_upgrade_enactment_timelock` | 1_209_600 blocks | [§14.1](#141-requirements) |  | 14 d at 1s — Scheduler min_enactment_period (upgrade timelock). yellowpaper §14.1. |\n| <a id=\"param-fip_decision_deposit\"></a>`fip_decision_deposit` | RATIFY FLOP | [§14.2](#142-fip-binding) |  | [RATIFY] decision-deposit spam barrier for protocol_upgrade referenda (FLOP-denominated; magnitude TBD). yellowpaper §14.2. |\n| <a id=\"param-emergency_override_timelock\"></a>`emergency_override_timelock` | 259_200 blocks |  | SPEC-015 | 72 h at 1s — pallet_emergency_override break-glass timelock (root-only). |\n| <a id=\"param-emergency_override_cooldown\"></a>`emergency_override_cooldown` | 604_800 blocks |  | SPEC-015 | 7 d at 1s — minimum gap between emergency overrides. |\n| <a id=\"param-governance_vote_locking_period\"></a>`governance_vote_locking_period` | 604_800 blocks |  |  | 7 d conviction VoteLockingPeriod (pallet_conviction_voting, live).. |\n| <a id=\"param-sudo_pallet_index\"></a>`sudo_pallet_index` | 50 index | [§14.1](#141-requirements) | GOV-B | pallet_sudo — bootstrap Root through devnet/testnet; REMOVED/neutered at the mainnet-genesis handoff (GOV-B). yellowpaper §14.1. |\n| <a id=\"param-subsidy_total_per_block\"></a>`subsidy_total_per_block` | 16 FLOP | [§9](#9-emission--supply) | D-0436 | 8 Labs + 8 Foundation in halving era 0 (years 1-2), on top of the 96 FLOP reward (yellowpaper §9); halves with the reward (`era(b) = ⌊b / H⌋`: 16 -> 8 -> 4 -> 2 -> 1 combined) and is exactly 0 from era 5 (`b = 315,360,000`), where the reward floors. |\n| <a id=\"param-emission_at_end_of_era6\"></a>`emission_at_end_of_era6` | 12_109_823_904 FLOP |  | D-0436 | 2·R₀·H − R₀ = 12,109,823,904 (2·R₀·H = 12,109,824,000 before subtracting unrewarded genesis block 0, R9.7), reached at the end of era 6 (block 441,503,999, ~year 14) under max_halvings=5 — one era earlier than the superseded maxHalvings=6 put it (hence the rename from emission_at_end_of_era7). |\n| <a id=\"param-emission_through_halving_eras\"></a>`emission_through_halving_eras` | 11_920_607_904 FLOP |  | D-0436 | R₀·H·63/32 − R₀ = 63,072,000 × (96+48+24+12+6+3) − 96 = 11,920,607,904 (11,920,608,000 before subtracting unrewarded genesis block 0, R9.7) = cumulative emission through the halving phase (end of era 5, block 378,431,999, ~year 12) under max_halvings=5. |\n| <a id=\"param-floor_annual_emission\"></a>`floor_annual_emission` | 94_608_000 FLOP |  | D-0436 | perpetual floor tail: 3 FLOP/block × 31,536,000 blocks/yr (= 189,216,000 FLOP/era). |\n| <a id=\"param-max_delegators_per_miner\"></a>`max_delegators_per_miner` | 10_000 count | [§6.1](#61-primitives) | D-0530 | [DEPRECATED — D-0530] Superseded by operator self-stake-only ruling (§6.1, §15.2); legacy MinerStaking.MaxDelegatorsPerMiner constant retained pending pallet cleanup. |\n| <a id=\"param-agent_daily_cap_autonomous\"></a>`agent_daily_cap_autonomous` | 500 FLOP | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Autonomous-agent scenario daily cap in the simulator; the runtime stores each wallet's chosen daily_cap at create_wallet rather than enforcing a global 500 FLOP constant; yellowpaper §6.2. |\n| <a id=\"param-agent_per_tx_limit\"></a>`agent_per_tx_limit` | 100 FLOP |  |  |  |\n| <a id=\"param-attestation_outage_pause_cap_blocks\"></a>`attestation_outage_pause_cap_blocks` | 14_400 blocks | [§13.0](#130-degraded-state-settlement-policy-normative) |  | Designed-not-built 4 h cap on per-channel pauses of attestation-dependent clocks under R13.0e / O1; no runtime or pallet implementation site. yellowpaper §13.0. |\n| <a id=\"param-da_endpoint_deposit\"></a>`da_endpoint_deposit` | VFY (= 1 FLOP) |  |  | Refundable anti-spam deposit held while a validator's DA serving endpoint announcement exists in DaRegistry 1 VFY = 1 FLOP. Held under HoldReason; released in full on clear_endpoint. |\n| <a id=\"param-da_max_endpoint_bytes\"></a>`da_max_endpoint_bytes` | 256 bytes |  |  | Maximum UTF-8 byte length of a validator DA serving endpoint URL stored in DaRegistry (e.g. 'http://host:7000'). |\n| <a id=\"param-validator_stake_value_coupled_floor\"></a>`validator_stake_value_coupled_floor` | dynamic FLOP |  | D-0413 | D-0413 (C5): governance-retargeted value-coupled stake floor k·V_booked (storage ValueCoupledStakeFloor, default 0 = baseline-identical). |\n| <a id=\"param-security_kappa_extractable\"></a>`security_kappa_extractable` | 0.2 dimensionless |  | DEC-5 | ASSUMPTION — NOT a theorem; a governance/DEC-5 risk input. κ = fraction of realized value V_booked a successful AlephBFT safety break extracts; the lever the value-coupled stake floor rests on (k ≥ m·κ/(θ·N·σ·δ), linear in κ — k_threshold_scales_with_kappa). |\n| <a id=\"param-da_deposit_max_step_factor\"></a>`da_deposit_max_step_factor` | 100 ratio |  |  | pallet_da_registry MAX_DEPOSIT_STEP_FACTOR: a single set_deposit_per_byte call may move the deposit ≤100× in either direction (anti-shock; the hard floor is >0). |\n| <a id=\"param-governance_param_max_step_pct\"></a>`governance_param_max_step_pct` | 50 percent |  |  | MAX_STEP_PCT: the FORMAL-MODEL proportional per-enactment bound (100·\\|Δ\\| ≤ pct·\\|old\\|) proven invariant in Model-side rail; the runtime instantiates the same proportional FORM per-param (e.g. da_deposit_max_step_factor) with its own magnitude. |\n| <a id=\"param-da_serve_or_slash_percent\"></a>`da_serve_or_slash_percent` | 1 percent | [§5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402 | Serve-or-slash Liveness bound: a validator failing a DA audit is slashed ≤1% (bounded, not fraud). yellowpaper §5.3. |\n| <a id=\"param-slash_liveness_percent\"></a>`slash_liveness_percent` | 1 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0409 | Liveness fault slash (jail > 300 blk). yellowpaper §13.2. |\n| <a id=\"param-slash_equivocation_lone_percent\"></a>`slash_equivocation_lone_percent` | 50 percent | [§13.2](#132-validator-consensus--da--leader-duties) | D-0420 | Lone equivocation slash (correlated Eth2-style curve; +50% returned after 180 d, ≥1/3 correlated → 100%). yellowpaper §13.2. |\n| <a id=\"param-session_key_expiry_days\"></a>`session_key_expiry_days` | 10 days | [§6.2](#62-agent-autonomy--operating-without-per-action-consensus) |  | Target-cadence conversion of the 864,000-block session-key limit (yellowpaper §6.2): approximately 10 d at uninterrupted 1 s blocks, not a wall-clock upper bound; checked against the runtime and blocks_per_day. |\n| <a id=\"param-blackout_revoke_blocks\"></a>`blackout_revoke_blocks` | 86_400 blocks | [§8](#8-performance-locked-vesting) |  | Performance-vesting blackout: capacity < 10% for 86,400 continuous blocks (~1 d) revokes the grant (1.0× slash). yellowpaper §8. |\n| <a id=\"param-performance_score_weights\"></a>`performance_score_weights` | 40/30/20/10 percent | [§15.4](#154-selection--the-poui-gated-committee) |  | Composite validator performance score: 40% uptime + 30% block_rate + 20% accuracy + 10% latency (parts-per-10,000); the rotation-floor input. yellowpaper §15.4/§15.5. |\n\n**Cross-language names (canonical ⇄ Rust ⇄ Lean ⇄ Quint).** The same protocol value carries a different identifier per language by convention; values agree where a language pins the real (non-demo) figure. Enforced rows are value-gated against the Rust site by `check_params.py`.\n\n| Parameter | Rust (runtime) | Lean (lean-proofs) | Quint (formal-specs) |\n|-----------|----------------|--------------------------|----------------------|\n| [`genesis_supply`](#param-genesis_supply) | `FLOP_TOTAL_SUPPLY` | `HalvingBoundary.genesisSupply` | `GENESIS_MICRO` |\n| [`validator_min_stake`](#param-validator_min_stake) | `ValidatorInitialMinimumStake` | — | — |\n| [`initial_block_reward`](#param-initial_block_reward) | `RewardInitialPerBlock` | `Emission.initialReward` | `P_EMISSION_CAP` |\n| [`max_halvings`](#param-max_halvings) | `RewardMaxHalvings` | `Emission.maxHalvings` | `MAX_HALVINGS` |\n| [`floor_reward`](#param-floor_reward) | — | `Emission.floorReward` | `FLOOR_MICRO` |\n| [`miner_share_ppt`](#param-miner_share_ppt) | `MINER_SHARE_PPT` | `SettlementInt.BlockRewards.minerPpt` | — |\n| [`validator_share_ppt`](#param-validator_share_ppt) | `VALIDATOR_SHARE_PPT` | `SettlementInt.BlockRewards.validatorPpt` | — |\n| [`agent_share_ppt`](#param-agent_share_ppt) | `AGENT_SHARE_PPT` | `SettlementInt.BlockRewards.agentPpt` | — |\n| [`staker_share_ppt`](#param-staker_share_ppt) | `STAKER_SHARE_PPT` | `SettlementInt.BlockRewards.stakerPpt` | — |\n| [`reward_distribution_period_blocks`](#param-reward_distribution_period_blocks) | `RewardDistributionPeriodBlocks` | — | `PERIOD_BLOCKS` |\n| [`gn_decay_factor_ppb`](#param-gn_decay_factor_ppb) | `DEFAULT_GN_DECAY_FACTOR_PPB` | — | `DEFAULT_DECAY_PPB` |\n| [`finality_committee_premium_weight_ppm`](#param-finality_committee_premium_weight_ppm) | `FINALITY_COMMITTEE_PREMIUM_WEIGHT_PPM` | — | — |\n| [`poui_submission_window_blocks`](#param-poui_submission_window_blocks) | `PouiEpochDurationBlocks` | — | — |\n| [`poui_max_submissions_epoch`](#param-poui_max_submissions_epoch) | `PouiMaxSubmissionsPerEpoch` | — | — |\n| [`governance_root_track_approval`](#param-governance_root_track_approval) | `APP_ROOT` | — | `P_APPROVAL_FLOOR` |\n| [`babe_primary_probability_denominator`](#param-babe_primary_probability_denominator) | `PRIMARY_PROBABILITY` | — | — |\n| [`aleph_max_data_branch_len`](#param-aleph_max_data_branch_len) | `MAX_DATA_BRANCH_LEN` | — | — |\n| [`aleph_max_round`](#param-aleph_max_round) | `MAX_ROUND` | — | — |\n| [`finality_committee_size`](#param-finality_committee_size) | `AlephMaxCommittee` | — | — |\n| [`validator_attestation_threshold`](#param-validator_attestation_threshold) | `PouiDefaultValidatorAttestationThreshold` | — | — |\n| [`attest_max_verifier_set_members`](#param-attest_max_verifier_set_members) | `AttestMaxVerifierSetMembers` | — | — |\n| [`attest_max_claim_signatures`](#param-attest_max_claim_signatures) | `AttestMaxClaimSignatures` | — | — |\n| [`poui_tee_v1_profile_id`](#param-poui_tee_v1_profile_id) | `POUI_TEE_V1_PROFILE_ID` | — | — |\n| [`poui_tee_v1_profile_version`](#param-poui_tee_v1_profile_version) | `PouiTeeV1Profile` | — | — |\n| [`validator_rotation_interval_blocks`](#param-validator_rotation_interval_blocks) | `RotationIntervalBlocks` | — | — |\n| [`validators_to_eject`](#param-validators_to_eject) | `ValidatorsToEject` | — | — |\n| [`validators_to_promote`](#param-validators_to_promote) | `ValidatorsToPromote` | — | — |\n| [`validator_active_set_cap`](#param-validator_active_set_cap) | `ValidatorActiveSetCap` | — | — |\n| [`validator_min_active_validators`](#param-validator_min_active_validators) | `ValidatorMinActiveValidators` | — | — |\n| [`validator_rotation_churn_percent`](#param-validator_rotation_churn_percent) | `ValidatorRotationChurnPercent` | — | — |\n| [`validator_min_scored_samples`](#param-validator_min_scored_samples) | `ValidatorMinScoredSamples` | — | — |\n| [`ejection_cooldown_blocks`](#param-ejection_cooldown_blocks) | `EjectionCooldownBlocks` | — | — |\n| [`validator_unbonding_blocks`](#param-validator_unbonding_blocks) | `ValidatorUnbondingPeriodBlocks` | — | — |\n| [`validator_extended_downtime_slash_percent`](#param-validator_extended_downtime_slash_percent) | `ValidatorExtendedDowntimeSlash` | — | — |\n| [`validator_growth_numerator`](#param-validator_growth_numerator) | `ValidatorGrowthNumerator` | — | — |\n| [`validator_growth_denominator`](#param-validator_growth_denominator) | `ValidatorGrowthDenominator` | — | — |\n| [`throughput_tripwire_gflops_per_sec`](#param-throughput_tripwire_gflops_per_sec) | `PouiGnThroughputCeilingGflopsPerSec` | — | — |\n| [`refund_penalty_phi_percent`](#param-refund_penalty_phi_percent) | `ChannelRefundPenalty` | — | — |\n| [`channel_max_settlement_turns`](#param-channel_max_settlement_turns) | `ChannelMaxSettlementTurns` | — | — |\n| [`channel_max_session_activation_bytes`](#param-channel_max_session_activation_bytes) | `ChannelMaxSessionActivationBytes` | — | — |\n| [`channel_max_merkle_path_len`](#param-channel_max_merkle_path_len) | `ChannelMaxMerklePathLen` | — | — |\n| [`channel_base_per_turn`](#param-channel_base_per_turn) | `ChannelBasePerTurn` | — | — |\n| [`channel_c_turn_fixed`](#param-channel_c_turn_fixed) | `ChannelCTurnFixed` | — | — |\n| [`channel_dispute_window_blocks`](#param-channel_dispute_window_blocks) | `ChannelDisputeWindow` | — | — |\n| [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks) | `ChannelDisputeResponseWindow` | — | — |\n| [`channel_toploc_escalation_window_blocks`](#param-channel_toploc_escalation_window_blocks) | `ChannelToplocEscalationWindow` | — | — |\n| [`channel_challenger_bond`](#param-channel_challenger_bond) | `ChannelChallengerBond` | — | — |\n| [`channel_audit_forfeit_slash_ppm`](#param-channel_audit_forfeit_slash_ppm) | `ChannelAuditForfeitSlashPpm` | — | — |\n| [`inference_fee_miner_share_ppt`](#param-inference_fee_miner_share_ppt) | `INFERENCE_FEE_MINER_SHARE_PPT` | — | — |\n| [`inference_fee_validator_share_ppt`](#param-inference_fee_validator_share_ppt) | `INFERENCE_FEE_VALIDATOR_SHARE_PPT` | — | — |\n| [`audit_fee_split_ppm`](#param-audit_fee_split_ppm) | `ChannelAuditFeeSplitPpm` | — | — |\n| [`audit_fee_per_turn`](#param-audit_fee_per_turn) | `ChannelAuditFeePerTurn` | — | — |\n| [`channel_ack_window_blocks`](#param-channel_ack_window_blocks) | `ChannelAckWindow` | — | — |\n| [`min_force_open_escrow_for_failed_ack`](#param-min_force_open_escrow_for_failed_ack) | `MinForceOpenEscrowForFailedAck` | — | — |\n| [`toploc_band_tau_accept_bf16_milli`](#param-toploc_band_tau_accept_bf16_milli) | — | `ToplocBandInt.tauAcceptBf16` | — |\n| [`toploc_band_tau_slash_bf16_milli`](#param-toploc_band_tau_slash_bf16_milli) | — | `ToplocBandInt.tauSlashBf16` | — |\n| [`toploc_band_eng29_threshold_milli`](#param-toploc_band_eng29_threshold_milli) | — | `ToplocBandInt.eng29Threshold` | — |\n| [`max_decode_policies_per_model`](#param-max_decode_policies_per_model) | `MAX_DECODE_POLICIES_PER_MODEL` | — | — |\n| [`tokens_per_byte_band_ppm_llama3`](#param-tokens_per_byte_band_ppm_llama3) | — | `MeteringCertInt.tokensPerByteBandPpmLlama3` | — |\n| [`tx_fee_burn_percent_live`](#param-tx_fee_burn_percent_live) | `BurnFees` | — | — |\n| [`tx_fee_author_share_percent_live`](#param-tx_fee_author_share_percent_live) | `AllFeesToAuthor` | — | — |\n| [`tx_weight_to_fee`](#param-tx_weight_to_fee) | `TransactionPicosecondFee` | — | — |\n| [`tx_length_to_fee`](#param-tx_length_to_fee) | `TransactionByteFee` | — | — |\n| [`tx_target_block_fullness_percent`](#param-tx_target_block_fullness_percent) | `TargetBlockFullness` | — | — |\n| [`tx_operational_fee_multiplier`](#param-tx_operational_fee_multiplier) | `OperationalFeeMultiplier` | — | — |\n| [`da_ephemeral_retention_blocks`](#param-da_ephemeral_retention_blocks) | `DaEphemeralRetention` | — | — |\n| [`da_shard_count`](#param-da_shard_count) | `DaReplicationFactor` | — | — |\n| [`da_min_replication_factor`](#param-da_min_replication_factor) | `MIN_REPLICATION_FACTOR` | `k` | — |\n| [`da_lease_deposit_per_byte`](#param-da_lease_deposit_per_byte) | `DaDepositPerByte` | — | — |\n| [`agent_cap_window_blocks`](#param-agent_cap_window_blocks) | `AgentEpochLength` | — | — |\n| [`agent_identity_min_stake`](#param-agent_identity_min_stake) | `AgentIdentityMinStake` | — | — |\n| [`circuit_breaker_window`](#param-circuit_breaker_window) | `SessionKeysCircuitBreakerPeriod` | — | — |\n| [`circuit_breaker_tx_count`](#param-circuit_breaker_tx_count) | `SessionKeysCircuitBreakerMaxTxs` | — | — |\n| [`circuit_breaker_flop_cap`](#param-circuit_breaker_flop_cap) | `SessionKeysCircuitBreakerMaxSpend` | — | — |\n| [`validator_min_self_stake_ratio_percent`](#param-validator_min_self_stake_ratio_percent) | `ValidatorMinSelfStakeRatio` | — | — |\n| [`validator_work_recency_window_blocks`](#param-validator_work_recency_window_blocks) | `ValidatorWorkRecencyWindow` | — | — |\n\n<!-- END GENERATED: param-table -->\n\n**Derived quantities & narrative constants** — structural values, formulas, and mechanism constants that are\n*not* part of the machine-checked numeric contract above (so they live here, not in the params file):\n\n| Parameter | Value | § | D-id |\n|-----------|-------|---|------|\n| Block interval / runtime length envelope | 1 s / 5 MiB maximum, 75% Normal; no measured capacity profile | [2.1](#21-requirements) / [5.2](#52-block--transaction-sizing) | D-0401, D-0502 |\n| Finality / BFT tolerance | deterministic once ordered; no latency target / strictly < ⅓ Byzantine committee seats | [2.1](#21-requirements) | D-0401, D-0501, D-0502 |\n| Committee selection | PoUI-gated: stake + recent accepted verification duty (`hp-consensus::select_committee`; R15.4c) | [2.1](#21-requirements) / [2.3](#23-safety--the-three-sub-proofs) / [15.4](#154-selection--the-poui-gated-committee) | D-0401, D-0439 |\n| Consensus engine | BABE block authoring + stake-BFT-DAG **AlephBFT finality**; `pallet_aleph` runtime **index 104** reports `LastFinalized` to `AlephFinalizedPrefix` | [2](#2-consensus) | D-0401 |\n| Miner/checker Sybil cost / identity | ≥10k FLOP base + capacity deposit + attested inventory + active renewable cap | [2.4](#24-sybil-model--miner-and-checker-identities) | D-0418, D-0433 |\n| Validator slashing | Liveness 1 % (jail > 300 blk) / extended-downtime 5 % (kick > 24 h); **Equivocation correlated** — lone 50 % (+50 % returned after 180 d) → ≥⅓ correlated 100 %; Collusion / EvidenceForgery / TEE / DoubleSpend 100 % + eject + blacklist | [11](#11-security-invariants) / [13.2](#132-validator-consensus--da--leader-duties) | D-0409, D-0420 |\n| Unbonding slash-lock | no unbond completion while a session/dispute/audit is open; unlock cooldown ≥ dispute window + resolution (miner `[LIVE]`; validator freeze and margin composition E.57) | [6.1](#61-primitives) / [13](#13-failure-semantics--actor--failure-matrix) | D-0419 |\n| Validator rotation | [`RotationIntervalBlocks`](#param-validator_rotation_interval_blocks); **stake-ordered**, gated by a verified-work + liveness **minimum-performance floor**; [eject](#param-validators_to_eject)/[promote](#param-validators_to_promote) = 50, [cooldown](#param-ejection_cooldown_blocks) ~7 d | [6.1](#61-primitives) / [13.2](#132-validator-consensus--da--leader-duties) | D-0416, D-0409 |\n| `G_n` / `F_eff` | `F_eff/10⁹`; deterministic reference-work accounting (`hp_poui::flop_meter`), distinct from physical instruction measurement | [4.1](#41-requirements) / [4.2](#42-the-op-count-model) | D-0405, D-0501 |\n| Throughput tripwire ceiling | reject if `gn·1000/latency_ms` > [**2,000,000 GFLOPS/s**](#param-throughput_tripwire_gflops_per_sec) (reject-only, never clamps `gn`; governable, default-on) | [4.2](#42-the-op-count-model) | D-0405 |\n| Heuristic (sanity only) | `2·P_active·N + 2·n_layer·n_ctx·d_attn`, ~2–3× | [4.2](#42-the-op-count-model) | D-0405 |\n| `model_hash` | measured dm-verity Merkle root (reproducible packer `[tools/modelpack]`), extended to RTMR3, registry-pinned per `(model, precision)`, fail-closed `Vk::V3` | [3.3](#33-tier-1--tee-attestation--measuring-model_hash-optional--hard-tier) | D-0404 |\n| Validator attestation quorum | [**BFT fraction, default 2/3**](#param-validator_attestation_threshold) (`ValidatorAttestationThreshold: Perbill`, root-governable); `ceil(active_count × threshold).max(1)` distinct active-validator signatures required | [3.6](#36-tier-4--on-chain-settlement-zk-aggregation--validator-bft-quorum), [13.3](#133-validator-attestation-quorum-bft-fraction) | D-0414 (supersedes D-0406) |\n| Direct-rail attestation extrinsic | 18,434 B at active=100/q=67; 36,859 B at supported max active=200/q=134; no throughput inference | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0502 |\n| Protocol DA (sovereign validator, §5.3) | [`R = 6` shards](#param-da_shard_count), Reed–Solomon **rate ½** (k=3+3, any 3 reconstruct); `Ephemeral` [retention `W` = **14 d**](#param-da_ephemeral_retention_blocks); audit deadline ~5 min; serve-or-slash bounded 1% (`Liveness`); **no per-byte DA fee** — DA is a validator duty funded by the validator reward share (D-0412) | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0402, D-0412 |\n| DA leased model storage (D-0407) | default lease term **180 d**; term unit / top-up granularity **30 d**; expiry warning **30 d** before `lease_end` (one-shot, lazy); grace **14 d** (= `W`); **no storage fee** — `top_up_lease` is free (tx only); a **refundable** anti-spam deposit = `bytes × DepositPerByte` is **held** (dedicated hold reason) and **returned in full** on prune / voluntary withdrawal (D-0412); usage **pin** blocks prune; prune recoverable (deterministic root), reactivation re-locks the deposit | [5.3](#53-the-verified-task-footprint--sovereign-da) | D-0407, D-0412 |\n| Session-key expiry / caps | **≤10 d** (`SessionKeysMaxDuration = 864,000` blocks at 1 s); per-tx + daily caps; circuit breaker 60 blk / [100 tx](#param-circuit_breaker_tx_count) / [250 FLOP](#param-circuit_breaker_flop_cap) | [6.2](#62-agent-autonomy--operating-without-per-action-consensus) | — |\n| Compute channel (session settle) | 2 primary cooperative lifecycle inclusions, plus evidence/dispute calls; bytes and verification grow with turns; escrow = reserved capacity paid to the miner (no under-use refund, no settlement fee); [**dispute window 7 d**](#param-channel_dispute_window_blocks) ≤ DA `W` = 14 d; [**dispute-response window 2 h**](#param-channel_dispute_response_window_blocks); `top_up_escrow` | [12.1](#121-sessions--attested-streaming--aggregate-settlement) / [12.2](#122-per-identity-capacity-reservation) | D-0403 |\n| Tx model / composability | account + monotonic `u32` nonce (2-D lanes optional, not adopted); UTXO-native **not adopted**; opcode-like composability via a **declarative spend-condition layer** (Miniscript-style) + multisig/proxy/timelock/HTLC; UTXO side-rail = future micropayment option | [6.3](#63-transaction--state-model) / [6.4](#64-collaborative-pool--composition) | D-0401, D-0417 |\n| Calibrated host capacity | empirical timed work; HARD ≤ 90% of summed `(SKU,count)` ceiling; seven-day lease | [7](#7-hardware-calibration--drift) | D-0433 |\n| UnlockRate / Blackout | `R_p²` / <10% for 86,400 blocks → revoke | [8](#8-performance-locked-vesting) | — |\n| `T_lock` | pair-specific; default 7,200 FLOP blocks vs 3,600 s counter duration has zero unallocated inclusion budget | [10](#10-htlc-atomic-swap) | — |\n\nThe open/unset values referenced above are specified as numbered fill-in stubs in\n[Appendix E — Open Specification Items](#appendix-e--open-specification-items).\n\n---"},{"name":"Section: Appendix B","before":"## Appendix B — Sources\n\n**Decision record (ratified positions, MADR + changelog):**\n[Decisions v0.4](decisions/v0.4.md) — `D-0401`..`D-0432` (consensus, sovereign DA, sessions, measured\n`model_hash`, measured `G_n`, validator-native attestation, governance, rotation-by-stake,\ncomposability, capacity-proportional miner stake, unbonding slash-lock, correlated equivocation, TOPLOC\nrequired, TEE-optional) + the v0.3 → v0.4 changelog.\n\n**Research corpus** (each doc carries its full citation set): the\n`whitepaper/research/` directory is the long-form grounding for every section; the\nper-section *Rationale & sources* trailers link the docs relevant to each. Cross-cluster index:\ntriz-issue-decomposition.md (papers mapped to every open issue).\nSuperseded/critical-review context:\nyellowpaper-critical-review.md (baseline audit).\nReference specs: Protocol Spec ·\nTokenomics Spec · Formal specs.\n\n**Supporting literature (2025-26 scan; full set in the TRIZ doc):**\n- *Consensus/finality* — non-PoW longest-chain (in)security arXiv:2505.14891 · PoUW security\n  arXiv:2405.19027 · deterministic BFT in a block DAG arXiv:2102.09594 · Shoal++ arXiv:2405.20488 ·\n  Lemonshark arXiv:2604.03974 · Ebb-and-Flow arXiv:2009.04987 · Aleph arXiv:1908.05156.\n- *PoUW economics* — Pass et al. equilibrium arXiv:2606.06700 · usefulness gap (Pearl cuPOW)\n  arXiv:2606.04819 · PoUW from arbitrary matmul arXiv:2504.09971.\n- *Verifiable inference* — VeriLLM arXiv:2509.24257 · SPEX arXiv:2503.18899 · EigenAI arXiv:2602.00182 ·\n  Optimistic TEE-Rollups arXiv:2512.20176 · TOPLOC arXiv:2501.16007.\n- *TEE / model integrity* — Laminator arXiv:2406.17548 · Attestable Audits arXiv:2506.23706 · NVIDIA CC\n  whitepaper · dm-verity kernel docs · Tinfoil model identity.\n- *SDC / drift* — arXiv:2502.12340 · arXiv:2605.04213 · arXiv:2604.10390.\n- *Composition* — Miniscript · Simplicity · Clarity · Marlowe · Move resources arXiv:2004.05106 · UCAN.\n- *HTLC* — MAD-HTLC arXiv:2006.12031 · He-HTLC ePrint 2022/546.\n- *Collusion* — Calvano 2020 + arXiv:2504.05335.\n\n---","after":"## Appendix B — Sources\n\n**Decision records (MADR + changelog; each entry states its status):**\n[Decisions v0.4](decisions/v0.4.md) — `D-0401`..`D-0441` (consensus, sovereign DA, sessions, measured\n`model_hash`, measured `G_n`, validator-native attestation, governance, rotation-by-stake,\ncomposability, capacity-proportional miner stake, unbonding slash-lock, correlated equivocation, TOPLOC\nrequired, TEE-optional) + the v0.3 → v0.4 changelog.\n[Decisions v0.5](decisions/v0.5.md) — `D-0501`..`D-0533` (public claim scope, wire formats,\npaid storage, validator policy, grant unlocks, reward routing, and parameter calibration).\n\n**Research corpus** (each doc carries its full citation set): the\n`whitepaper/research/` directory is the long-form grounding for every section; the\nper-section *Rationale & sources* trailers link the docs relevant to each. Cross-cluster index:\ntriz-issue-decomposition.md (papers mapped to every open issue).\nSuperseded/critical-review context:\nyellowpaper-critical-review.md (baseline audit).\nReference specs: Protocol Spec ·\nTokenomics Spec · Formal specs.\n\n**Supporting literature (2025-26 scan; full set in the TRIZ doc):**\n- *Consensus/finality* — non-PoW longest-chain (in)security arXiv:2505.14891 · PoUW security\n  arXiv:2405.19027 · deterministic BFT in a block DAG arXiv:2102.09594 · Shoal++ arXiv:2405.20488 ·\n  Lemonshark arXiv:2604.03974 · Ebb-and-Flow arXiv:2009.04987 · Aleph arXiv:1908.05156.\n- *PoUW economics* — Pass et al. equilibrium arXiv:2606.06700 · usefulness gap (Pearl cuPOW)\n  arXiv:2606.04819 · PoUW from arbitrary matmul arXiv:2504.09971.\n- *Verifiable inference* — VeriLLM arXiv:2509.24257 · SPEX arXiv:2503.18899 · EigenAI arXiv:2602.00182 ·\n  Optimistic TEE-Rollups arXiv:2512.20176 · TOPLOC arXiv:2501.16007.\n- *TEE / model integrity* — Laminator arXiv:2406.17548 · Attestable Audits arXiv:2506.23706 · NVIDIA CC\n  whitepaper · dm-verity kernel docs · Tinfoil model identity.\n- *SDC / drift* — arXiv:2502.12340 · arXiv:2605.04213 · arXiv:2604.10390.\n- *Composition* — Miniscript · Simplicity · Clarity · Marlowe · Move resources arXiv:2004.05106 · UCAN.\n- *HTLC* — MAD-HTLC arXiv:2006.12031 · He-HTLC ePrint 2022/546.\n- *Collusion* — Calvano 2020 + arXiv:2504.05335.\n\n---"},{"name":"Section: Appendix C","before":"## Appendix C — Miner Lifecycle (End-to-End)\n\nA worked walkthrough of the honest path (informative; the normative rules are §4–§8, §12). Operator\nsteps: `docs/onboarding/miner.md`.\n\n| Stage | What the miner does | Governing § |\n|-------|---------------------|-------------|\n| C.1 Onboard | Bond stake, calibrate hardware, register model availability | §6.1, §7 |\n| C.2 Go live | Advertise models; agents select miners off-chain | §12 |\n| C.3 Establish | Session opened (`open_channel` / `force_open` → `force_ack`) | §12.1 |\n| C.4 Serve | Stream turns; per-turn signature + agent co-sign | §12.1 |\n| C.5 Claim | Post final root + aggregate `G_n` + last mutual receipt | §12.1 |\n| C.6 Close | `settle` / `force_settle` → `finalize` / `timeout` / dispute | §12.1 |\n| C.7 Extend | `top_up_escrow`; duration bounded; cross-miner chaining | §12.1 |\n\n**C.1 Onboard.** Bond ≥ the capacity-proportional requirement (§6.1) via\n`miner_staking::register_miner(commission)`; unbonding is slash-locked while any session/dispute/audit is\nopen. Complete the §7 timed benchmark (SOFT: no inventory ceiling; HARD: bounded by the summed attested\n`(SKU,count)` ceiling). Deposit capacity stake before activation; the worker renews the seven-day cap\nfrom fresh canaries. Register each served model via\n`model_registry::register_miner(...)` and bind the measured dm-verity root (`set_measured_root`; §3.3).\n\n**C.2 Go live.** Sessions are agent-initiated and 1:1; an agent selects a miner off-chain\n(`model_registry::find_best_miners`) and opens a channel. On-chain discovery/reputation is future; the\nchain emits reputation signals (`FailedAcks`) for an off-chain router.\n\n**C.3 Establish.** Cooperative: after an RA-TLS handshake attests the enclave, the agent calls\n`open_channel(miner, model_hash, measured_root, decode_policy_hash, precision, enclave_key, agent_key, sla, escrow, nonce, settlement_class)`;\nescrow is reserved and **is** the price. `settlement_class` is the Appendix F.3 settlement mode fixed\nfor that channel. Permissionless `force_open(...)` implies `SettlementClass::Standard` and places the\nchannel in `PendingAck { ack_deadline = now + AckWindow }`; the named miner accepts with\n`force_ack(channel_id, enclave_key)`, where `enclave_key` is a session signing key and the pallet infers\nno TEE provenance from it. Otherwise `expire_force_open` refunds in full and records `FailedAcks` only\nwhen escrow ≥ [`min_force_open_escrow_for_failed_ack`](#param-min_force_open_escrow_for_failed_ack).\n\n**C.4 Serve.** Each turn uses the signed transcript-leaf hash and running Merkle accumulator defined solely\nin Appendix F.3; V3 is the current TOPLOC-binding format for a channel carrying a\n`ChannelDecodePolicies` marker. The agent verifies the leaf and cumulative root and counter-signs the turn\nwith the Appendix F.3 per-turn agent ack before accepting output. If the agent refuses to co-sign, the miner settles unilaterally at the\nlast mutual receipt. Re-attestation recurs every `k` turns (§12.1h).\n\n**C.5 Claim.** At close the miner posts the final root, aggregate `G_n`, and last mutual receipt in\n`settle`/`force_settle`; `GnSink::validate_session_gn` checks plausibility before payment (§11.2).\nChannel payout does not feed `WorkVesting`/`BlockRewards`, committee recency, or calibration (R11.2b).\nThe settle path re-checks the measured root against the registry.\n\n**C.6 Close.** `settle` (both signatures → immediate payout, no under-use refund); `force_settle` →\n`finalize` (challenge window 7 d ≤ `W`); `timeout` (non-delivery → full refund, `φ=0`); failed/early\nclose (three-way split, §12.1d); dispute (fraud only — bisection; non-response → fraud verdict).\n\n**C.7 Extend/chain.** `top_up_escrow` raises the reserved-capacity cap. Past `D_max`/`n_max` re-open with\na fresh handshake. Mid-session crash recovery is receipt-fenced (pay only the highest co-signed\ncumulative receipt; unacked tail bounded by `MaxUnackedGn`); recovery is a fresh reopen on another miner\nwith client-held context replay.\n\n**Grounding:** miner-capacity-stake-calibration.md,\nr2-payment-channel-sessions.md.\n\n---","after":"## Appendix C — Miner Lifecycle (End-to-End)\n\nA worked walkthrough of the honest path (informative; the normative rules are §4–§8, §12). Operator\nsteps: `docs/onboarding/miner.md`.\n\n| Stage | What the miner does | Governing § |\n|-------|---------------------|-------------|\n| C.1 Onboard | Bond stake, calibrate hardware, register model availability | §6.1, §7 |\n| C.2 Go live | Advertise models; agents select miners off-chain | §12 |\n| C.3 Establish | Session opened (`open_channel` / `force_open` → `force_ack`) | §12.1 |\n| C.4 Serve | Stream turns; per-turn signature + agent co-sign | §12.1 |\n| C.5 Claim | Post final root + aggregate `G_n` + last mutual receipt | §12.1 |\n| C.6 Close | `settle` / `force_settle` → `finalize` / `timeout` / dispute | §12.1 |\n| C.7 Extend | `top_up_escrow`; duration bounded; cross-miner chaining | §12.1 |\n\n**C.1 Onboard.** Bond ≥ the capacity-proportional self-stake requirement (§6.1) via\n`miner_staking::register_miner(commission)` (miner stake is self-stake only; the `commission` argument is\ndeprecated under D-0530); unbonding is slash-locked while any session/dispute/audit is open. Complete the §7 timed benchmark (SOFT: no inventory ceiling; HARD: bounded by the summed attested\n`(SKU,count)` ceiling). Deposit capacity stake before activation; the worker renews the seven-day cap\nfrom fresh canaries. Register each served model via\n`model_registry::register_miner(...)` and bind the measured dm-verity root (`set_measured_root`; §3.3).\n\n**C.2 Go live.** Sessions are agent-initiated and 1:1; an agent selects a miner off-chain\n(`model_registry::find_best_miners`) and opens a channel. On-chain discovery/reputation is future; the\nchain emits reputation signals (`FailedAcks`) for an off-chain router.\n\n**C.3 Establish.** Cooperative: after an RA-TLS handshake attests the enclave, the agent calls\n`open_channel(miner, model_hash, measured_root, decode_policy_hash, precision, enclave_key, agent_key, sla, escrow, nonce, settlement_class)`;\nescrow is reserved and **is** the price. `settlement_class` is the Appendix F.3 settlement mode fixed\nfor that channel. Permissionless `force_open(...)` implies `SettlementClass::Standard` and places the\nchannel in `PendingAck { ack_deadline = now + AckWindow }`; the named miner accepts with\n`force_ack(channel_id, enclave_key)`, where `enclave_key` is a session signing key and the pallet infers\nno TEE provenance from it. Otherwise `expire_force_open` refunds in full and records `FailedAcks` only\nwhen escrow ≥ [`min_force_open_escrow_for_failed_ack`](#param-min_force_open_escrow_for_failed_ack).\n\n**C.4 Serve.** Each turn uses the signed transcript-leaf hash and running Merkle accumulator defined solely\nin Appendix F.3; V3 is the current TOPLOC-binding format for a channel carrying a\n`ChannelDecodePolicies` marker. The agent verifies the leaf and cumulative root and counter-signs the turn\nwith the Appendix F.3 per-turn agent ack before accepting output. If the agent refuses to co-sign, the miner settles unilaterally at the\nlast mutual receipt. Re-attestation recurs every `k` turns (§12.1h).\n\n**C.5 Claim.** At close the miner posts the final root, aggregate `G_n`, and last mutual receipt in\n`settle`/`force_settle`; `GnSink::validate_session_gn` checks plausibility before payment (§11.2).\nChannel payout does not feed `WorkVesting`/`BlockRewards`, committee recency, or calibration (R11.2b).\nThe settle path re-checks the measured root against the registry.\n\n**C.6 Close.** `settle` (both signatures → immediate payout, no under-use refund); `force_settle` →\n`finalize` (challenge window 7 d ≤ `W`); `timeout` (non-delivery → full refund, `φ=0`); failed/early\nclose (three-way split, §12.1d); dispute (fraud only — bisection; non-response → fraud verdict).\n\n**C.7 Extend/chain.** `top_up_escrow` raises the reserved-capacity cap. Past `D_max`/`n_max` re-open with\na fresh handshake. Mid-session crash recovery is receipt-fenced (pay only the highest co-signed\ncumulative receipt; unacked tail bounded by `MaxUnackedGn`); recovery is a fresh reopen on another miner\nwith client-held context replay.\n\n**Grounding:** miner-capacity-stake-calibration.md,\nr2-payment-channel-sessions.md.\n\n---"},{"name":"Section: Appendix D","before":"## Appendix D — Fee & Revenue Map\n\nOne **payer → recipient → sink** taxonomy for every money flow (informative summary of §4.2, §5.3, §9,\n§11, §12). *Participant revenue* (miner/validator earnings) is named separately from *protocol runway*\n(Labs/Foundation subsidy) and from *refundable deposits* (never revenue). Emission is **minted**;\nfees/escrows are **transfers**; burns and Foundation receipts are **sinks**.\n\n| Flow | Payer | Recipient | Sink / burn |\n|------|-------|-----------|-------------|\n| Block-reward emission (Era 0 96 FLOP/block; floors at 3 FLOP/block from era 5) | protocol mint | miners 75% (72) · validators 10% (9.6) · agents 10% (9.6) · stakers 5% (4.8) | — |\n| Validator 10% split | (emission) | active validators by stake, 1.1× for finality-committee members, liquid on issue (R9.13) | — |\n| Agent & staker legs (10% + 5%) | (emission) | sovereign pool accounts — parked, no distribution policy ([E.40](#appendix-e--open-specification-items)) | — |\n| Protocol-runway subsidy (+16 FLOP/block era 0; halves 16 → 8 → 4 → 2 → 1 with the reward) | protocol mint | Labs 8 · Foundation 8 — *not participant revenue* | terminates Day 3650 (era 5), where the reward floors; 1,955,232,000 FLOP total |\n| Chain inclusion fee = base fee + encoded-length fee + adjusted-weight fee | tx sender | 80% miner-proxy + 10% validator share → block author (co-located until per-miner `G_n` attribution); tips 100% author | 10% burn (`BurnFees`) |\n| Session escrow settle | agent | miner (reserved capacity) | — (no settlement fee) |\n| Session under-use (measured < reserved) | — | **no refund** — escrow **is** the price | — |\n| Session non-delivery / upheld fraud | (escrow) | refund to agent | — |\n| Failed/early close penalty `φ·(E−P)` | (escrow) | — | burn / Foundation, never miner |\n| DA ephemeral (quotes/proofs/transcripts/I-O) | — (path-gated) | — | **no charge** |\n| DA leased-weights anti-spam deposit `bytes × DepositPerByte` | publisher | held, **returned in full** on prune/withdrawal — *never revenue* | — |\n| Protocol/model DA byte fee (§5.3) | — | — | **none** — validator duty funded by reward share |\n| Paid application storage (§5.4) | reservation payer | protocol-assigned validators at the epoch tariff: per-write setup after activation receipts plus fixed-term reserved capacity released per epoch against audit and checkpoint state | take-or-pay: deletion frees capacity for reuse, never refunds; remaining term transferable; separate fault remedies; no mint or service-fee burn |\n| Paid application retrieval (§5.4) | authorized reader/payer | serving validators, by payer-signed cumulative service-lane vouchers over activated writes, acknowledged bytes and requests | unused allowance refunded; no mint or service-fee burn |\n| Paid-storage metadata deposit / provider collateral | payer / validator | separate holds, never service revenue | release / objective fault disposition under E.54 |\n| Slashing proceeds (all fault paths) | slashed operator / delegator / sponsor | FLOP Foundation (`FLOPFoundationAccount`) | — (transfer) |\n| Delegated-loss waterfall | slashed operator + delegators + sponsors | operator self-stake first, then delegators pro-rata, then sponsors at the fault rate | Foundation |\n\nThe base fee converts the extrinsic base weight with `WeightToFee`; the encoded-length fee uses\n[`tx_length_to_fee`](#param-tx_length_to_fee), and the adjusted-weight fee applies the targeted fee\nmultiplier (floor 1) to `WeightToFee` of dispatch weight, using\n[`tx_weight_to_fee`](#param-tx_weight_to_fee). The tip is additional to the inclusion fee. The\n`flop-poui` inference-work price `(base+priority)·gflops/1000·precision_mult` (§4.2) is a separate\ncharge. The 80/10/10 split is the ratified target; the block-author payout above is the interim\nruntime realization (§9.1 R9.6).\n\n**Runtime-constant ⇄ SDK/explorer cross-map** and the residual indexer schema cleanup\n(`reward_distributions` `burn_share`/`treasury_share`/`staking_share` vs. the emitted\n`miner_share`+`validator_share`) are tracked as an implementation cleanup, not a protocol decision.\nProvenance: `D-0435`, `D-0408`, `D-0403`, `D-0412`, `D-0407`, `D-0409`, `D-0421`. Grounding:\nfee-design.md, miner-validator-economics.md,\nagent-token-economics.md.\n\n---","after":"## Appendix D — Fee & Revenue Map\n\nOne **payer → recipient → sink** taxonomy for every money flow (informative summary of §4.2, §5.3, §9,\n§11, §12). *Participant revenue* (miner/validator earnings) is named separately from *protocol runway*\n(Labs/Foundation subsidy) and from *refundable deposits* (never revenue). Emission is **minted**;\nfees/escrows are **transfers**; burns and Foundation receipts are **sinks**.\n\n| Flow | Payer | Recipient | Sink / burn |\n|------|-------|-----------|-------------|\n| Block-reward emission (Era 0 96 FLOP/block; floors at 3 FLOP/block from era 5) | protocol mint | miners 75% (72) · validators 10% (9.6) · agents 10% (9.6) · stakers 5% (4.8) | — |\n| Validator 10% split | (emission) | active validators by stake, 1.1× for finality-committee members, liquid on issue (R9.13) | — |\n| Agent & staker legs (10% + 5%) | (emission) | sovereign pool accounts — 10% agent pool + 5% duration-locked community staking pool (7 tiers, zero slashing risk, D-0530); onward distribution parked ([E.40](#appendix-e--open-specification-items)) | — |\n| Protocol-runway subsidy (+16 FLOP/block era 0; halves 16 → 8 → 4 → 2 → 1 with the reward) | protocol mint | Labs 8 · Foundation 8 — *not participant revenue* | terminates Day 3650 (era 5), where the reward floors; 1,955,231,984 FLOP total (`315,359,999` produced blocks `1..=315,359,999`) |\n| Chain inclusion fee = base fee + encoded-length fee + adjusted-weight fee | tx sender | 100% to block author ([`tx_fee_author_share_percent_live`](#param-tx_fee_author_share_percent_live), `AllFeesToAuthor`); tips 100% author | 0% burn ([`tx_fee_burn_percent_live`](#param-tx_fee_burn_percent_live) = 0%, `BurnFees`, D-0529) |\n| Session escrow settle | agent | miner 85% ([`inference_fee_miner_share_ppt`](#param-inference_fee_miner_share_ppt)) · validators 15% ([`inference_fee_validator_share_ppt`](#param-inference_fee_validator_share_ppt), of which [`audit_fee_split_ppm`](#param-audit_fee_split_ppm) = 1% funds the audit pool; validator remainder distributed intra-pool by R9.5 weight, liquid on issue per D-0518) | — |\n| Session under-use (measured < reserved) | — | **no refund** — escrow **is** the price | — |\n| Session non-delivery / upheld fraud | (escrow) | refund to agent | — |\n| Failed/early close penalty `φ·(E−P)` | (escrow) | — | FLOP Foundation (`FLOPFoundationAccount`, zero burn per D-0529), never miner |\n| DA ephemeral (quotes/proofs/transcripts/I-O) | — (path-gated) | — | **no charge** |\n| DA leased-weights anti-spam deposit `bytes × DepositPerByte` | publisher | held, **returned in full** on prune/withdrawal — *never revenue* | — |\n| Protocol/model DA byte fee (§5.3) | — | — | **none** — validator duty funded by reward share |\n| Paid application storage (§5.4) | reservation payer | protocol-assigned validators at the epoch tariff: per-write setup after activation receipts plus fixed-term reserved capacity released per epoch against audit and checkpoint state | take-or-pay: deletion frees capacity for reuse, never refunds; remaining term transferable; separate fault remedies; no mint or service-fee burn |\n| Paid application retrieval (§5.4) | authorized reader/payer | serving validators, by payer-signed cumulative service-lane vouchers over activated writes, acknowledged bytes and requests | unused allowance refunded; no mint or service-fee burn |\n| Paid-storage metadata deposit / provider collateral | payer / validator | separate holds, never service revenue | release / objective fault disposition under E.54 |\n| Slashing proceeds (all fault paths) | slashed operator / sponsor | FLOP Foundation (`FLOPFoundationAccount`) | 0% burn (100% transfer, D-0529) |\n| Slash loss waterfall | slashed operator (+ any E.32 sponsor backing; third-party delegation prohibited per D-0530) | operator self-stake first, then any E.32 sponsors at the fault rate | Foundation (`FLOPFoundationAccount`) |\n\nThe base fee converts the extrinsic base weight with `WeightToFee`; the encoded-length fee uses\n[`tx_length_to_fee`](#param-tx_length_to_fee), and the adjusted-weight fee applies the targeted fee\nmultiplier (floor 1) to `WeightToFee` of dispatch weight, using\n[`tx_weight_to_fee`](#param-tx_weight_to_fee). The tip is additional to the inclusion fee. The\n`flop-poui` inference-work price `(base+priority)·gflops/1000·precision_mult` (§4.2) is a separate\ncharge. Under D-0529, protocol-wide transaction-fee burn is 0% (`BurnFees = 0`) and 100% of inclusion\nfees and tips route to the block author (§9.1 R9.6).\n\n**Runtime-constant ⇄ SDK/explorer cross-map** and the residual indexer schema cleanup\n(`reward_distributions` `burn_share`/`treasury_share`/`staking_share` vs. the emitted\n`miner_share`+`validator_share`) are tracked as an implementation cleanup, not a protocol decision.\nProvenance: `D-0435`, `D-0408`, `D-0403`, `D-0412`, `D-0407`, `D-0409`, `D-0421`, `D-0529`, `D-0530`,\n`D-0531`. Grounding:\nfee-design.md, miner-validator-economics.md,\nagent-token-economics.md.\n\n---"},{"name":"Section: Appendix E","before":"## Appendix E — Open Specification Items\n\nEach unresolved value/definition/mechanism has a numbered stub: **what** must be specified, a\n**placeholder** to model against until it ratifies, its **home** section(s), and the **blocking**\ndecision/task. Tags: `[TBD]` value/definition absent · `[RATIFY]` proposed, awaiting sign-off ·\n`[PLANNED]` decided, not yet wired. To close an item: write the value into its home section, then delete\nthe stub (closed numbers are retired, not reused).\n\n**E.8 — Value-coupled floor `k` + retarget cadence `[TBD]`.** Set `k` in `effective_minimum_stake =\nmax(baseline, k·V_booked)` and its governance retarget cadence. *Placeholder:* `k ≥ m·κ/(θNσδ)`;\nslow-cadence retarget from the indexer `D₂`/`n_eff`. Home: §11, §15.2. Blocking: #556.\n\n**E.9 — Governance track magnitudes `[RATIFY]`.** Sign off the `protocol_upgrade` track values.\n*Placeholders:* `min_support` linear 50% → 15% of `ActiveIssuance`; decision period 28 d; prepare/confirm\n2 h / 24 h; decision deposit high-FLOP, magnitude TBD (the runtime currently carries 100,000 FLOP);\nenactment timelock 14 d\n([`protocol_upgrade_enactment_timelock`](#param-protocol_upgrade_enactment_timelock)) against the §1.2\nreading rule that enactment outlives the 21 d validator unbonding — sign off the value or the rule.\nHome: §14.1. Blocking: #681.\n\n**E.22 — Aggregate reservation + statistical drift + cache-aware metering `[PLANNED]` (M6/M13).**\nQuick-canary count, timed packs, lease/renewal cadence, restart supervisor, expiry, multi-GPU\nfingerprint invalidation, and deposit-before-activation are live under D-0433. Remaining: miner-wide\ncapacity reservation across overlapping channels; rolling eligible-work coverage and automatic\ndegradation downshift; canonical production fingerprint acquisition; per-SKU MLPerf plausibility\ndatasets; and a proof-bound cached-prefix witness so reused prompt prefill is not charged again.\nSPEC-026 applies ceiling rejects, co-signed EWMA rebates, reputation, and slashing only for timing\nfraud. Home: §4, §7, §13.1. Decision: D-0433. Blocking: #1822; cache witness #1153.\n\n**E.23 — Minimum-escrow / bonded-reservation economics `[TBD]` (A10).** Dust count is bounded by the\nper-identity reservation cap and the [`min_force_open_escrow_for_failed_ack`](#param-min_force_open_escrow_for_failed_ack)\nfloor, but the general pricing of a minimum escrow / bonded reservation is unspecified. Home: §13.5.\nBlocking: #440.\n\n**E.24 — Ordering-game / MEV analysis `[PARTIAL]` (V7).** Strict dispute guard vs. non-strict finalize\nguard commute at a fixed finalized head; the residual force-settle path exposure is ≤ one escrow. Binding\nsettlement mode in the signed receipt or defining protocol path priority removes the choice. The same\nchoice is open to the agent: G.1 admits `force_settle` from either party, and at the placeholder tariff\n([`channel_base_per_turn`](#param-channel_base_per_turn) and `rate_G` each one base unit) `P` is\n`n + ΣG_n` base units, so even 10¹⁰ `G_n` (tens of millions of tokens on a 70B-class model) pays\n10⁻⁸ FLOP, and an agent that declines to co-sign recovers essentially `(1−φ)·E` of a used channel\nagainst R12.1a's intent. Restricting the unilateral caller,\nbinding the settlement mode at open, or raising the tariff to a cost-covering magnitude is part of this\nitem. Operational\n`maxDelay`, FOCIL enforcement, and path-binding remain open. Home: §12.1, §13.2. Blocking: #445, #1610\n(tariff calibration).\n\n**E.27 — Session max-duration extension + re-attestation cadence wiring `[PARTIAL]`.** The cadence bound\n`k ≤ min(Bond/v_turn, T_tcb/t_turn)` is specified; in-place max-duration extension and the re-attestation\ncadence are not yet wired. Home: §12.1, Appendix C. Blocking: #682 (SPEC-025).\n\n**E.41 — Active-set cap vs. BABE authority bound `[PLANNED]`.** D-0437 ratifies\n[`validator_active_set_cap`](#param-validator_active_set_cap) = 1,000, and every promotion path enforces\nit, but `MaxAuthorities` = `MAX_ACTIVE_VALIDATORS` = **200**, and `ValidatorSessionManager::new_session`\npasses the whole `ActiveValidators` set to `pallet_session` untruncated, so an active set above 200\ncollides with the authority bound. Resolve by either (a) raising `MAX_ACTIVE_VALIDATORS` to the cap,\nmaking every active validator a BABE authority, or (b) specifying a selection rule that draws the\nauthority set as a subset of the active set — a third sampling layer alongside the §15.4 committee draw,\nand therefore consensus-critical. Also open in the same item: aligning the `ConstU32<10_000>` storage\nbound with the cap, which is a storage-layout change needing a decode-compat test. Home: §15.5, §15.4.\nDecision: D-0437. Blocking: #1393.\n\n**E.42 — Committee seat-capture model `[TBD]`.** Establish a capture bound for the implemented\nweighted-without-replacement draw over distinct eligible identities. The model must use seat count as the\nAlephBFT safety variable and cover unequal stakes, small eligible pools, stake splitting, repeated draws,\nand BABE-VRF seed influence. Retain the 40 Byzantine identities at stake 1 versus 61 honest identities at\nstake 3, drawing 100 of 101, as a regression case: Byzantine aggregate stake is `40/223 ≈ 17.94%` while every\ndraw contains 39 or 40 Byzantine seats. *Placeholder:* no aggregate-stake/binomial bridge; conformance\nrequires a separately justified strict `<⅓` Byzantine-seat premise.\nAlso specify the zero-duty bootstrap fallback, the nonempty-but-undersized duty pool, and a minimum safe\ncommittee response; an `N=100` bound cannot apply silently when the implementation returns fewer seats.\nHome: §2.3, §13.2, §15.4. Blocking: new consensus decision, exact sampler analysis, undersized/bootstrap\npolicy, and formal witness. Tracking: #848.\n\n**E.43 — End-to-end verification/error bridge `[TBD]`.** Specify and test the commitment/challenge/opening\nprotocol that connects TOPLOC's empirical detector and projection formula to settlement: activation-vector\nbinding, decode-step coverage bound to the billed `h_ids`, post-commit challenge randomness, opening verification, quantization/backend distributions,\nadaptive attacks, DA publication, audit selection, and adjudication. State conditional error terms; use a\nproduct only with justified conditional independence. *Placeholder:* artifact presence records a claim but\ndoes not establish execution correctness or a cryptographic false-accept rate. Home: §3.2–§3.5, §12.1,\nAppendix F. Blocking: protocol design, adversarial matrix, and implementation-to-proof conformance test. Tracking: #1493.\n\n**E.44 — Cooperative work-credit eligibility `[PARTIAL; future activation/recovery TBD]`.**\nThe confirmed payment-only disposition suppresses new public credit at every\ncurrent-profile channel payout, including unilateral finalization and DA void. Production-runtime\nregressions exercise a self-funded/related payer+miner coalition with ordinary SOFT keys, valid\nsignatures and plausible fabricated amounts, replay, mismatched evidence, and delayed fraud.\nSignatures, Merkle membership, and sum equality prove agreement and arithmetic, not claimed execution.\nClosed-channel reports reject; duplicate reports do not recover payment or alter reward/recency state.\nHistorical credit and issued rewards are preserved, with no implemented clawback. Future activation\nstill needs independently auditable/final execution evidence, challenge standing/deadlines, retention\nof collectible collateral, and correction/recovery of historical credit/rewards and eligibility.\nThe distinct decision ID and exact public bundle await owner approval. Home: §3.6, §9, §11.2, §12.1,\n§15.6. Tracking: #1494. Private evidence: runtime observations.\n\n**E.45 — Effective-challenge incentive model `[TBD]`.** Define players, utilities, challenger rewards and\ncosts, coalition/bribery behavior, exposure horizon, collectible collateral, and miner-wide reservation\nacross concurrent channels. Expand `p_effective` into availability, selection, inclusion, correct\nadjudication, and collection events, with each factor conditioned on all prior events and without an\nindependence or Markov assumption. *Placeholder:*\n`total_profitable_exposure < p_effective × collectible_penalty` is a conditional risk-neutral deterrence\nbudget, not a unique-equilibrium or zero-fraud theorem. Home: §3.5, §6.1, §11.3, §12.2. Blocking:\naggregate reservation E.22 plus a ratified payoff model. Tracking: #1495.\n\n**E.46 — Direct/session capacity evidence `[PENDING; PARTIAL EVIDENCE]`.** This mechanism remains open.\nInternal source-checked fixtures reproduce exact SCALE bytes for supported direct active-set/quorum sizes\nand cooperative/unilateral settlement over turn/path limits, a duplicate-last bundle, TOPLOC evidence\npublication, and dispute calls. It includes runtime pallet/call indices, v5 bare and v4 signed framing,\nsignature/extension fields, compact length prefixes, DA references, hashes, configured Normal/Operational\nenvelopes, and charged weights. The direct weight is an identified unbenchmarked stub; session weights do\nnot parameterize path length or duplicate scanning. The runtime-benchmark build now compiles in every\nruntime flavour, but no benchmark run, dedicated `flop-poui` weights or runtime hash is claimed. No\ndisclosed network matrix or raw log exists. Detailed failure diagnostics and their reproducer remain\nprivate while the mechanism is pending; the public summary records only the fixtures' bounded scope and\nlimitations. D-0502 proposes withdrawing the 125,000 B, 96/128 transaction, 48/64 lifecycle, and\nsub-second-finality figures from the v0.5 profile; ratification is pending. Home: §2.2, §5.2–§5.3, §12.1,\n§15.6; evidence: [prepublication-evidence.md](research/prepublication-evidence.md). Blocking: run the\nruntime benchmarks, generate dedicated weights, and run the recorded\ncommittee/topology/loss/load/co-load/fault matrix with negative and recovery outcomes. Tracking: #1496.\n\n**E.47 — DA availability and anti-grinding model `[TBD]`.** Specify commitment-assignment anti-grinding\n(paid-storage provider assignment already draws delayed BABE randomness after open, §5.4; protocol-DA\nassignment is still seeded by the commitment), operator and failure-domain diversity, publisher limits,\naudit/repair timing, repair bandwidth, an upper bound on `lease_end` under free third-party top-up, the\nresolution of an audit still outstanding when its blob is withdrawn or pruned, and the cumulative\nstorage/retention budget across the full session+challenge lifecycle. Distinguish registry freshness,\naudit success, and actual reconstruction. *Placeholder:* validator DA removes miner-only custody;\navailability remains conditional on the stated threshold and repair assumptions. Home: §3.5, §5.3, §13.0,\nAppendix F. Blocking: failure model, grinding analysis, and lifecycle recovery test. Tracking: #1497.\n\n**E.48 — Cross-chain HTLC pair conformance `[TBD]`.** Specify the exact chain and asset identifiers,\nparticipant/recipient and hashlock binding, preimage owner/reveal path, timeout orientation and margins,\nper-leg finality and timely-inclusion assumptions, relayer failure recovery, and the fee/inclusion premise\nrequired by `HtlcIncentives::collusion_deterred`. Closure evidence must exercise both legs under the\nratified profile and record timestamps, finality identifiers, and hashed raw RPC/log inputs. *Placeholder:*\nFLOP-leg conservation and mutually exclusive redeem/refund are supported; the initial-publication\ndisposition for every implemented pair/direction is **target-only**, with cross-leg loss/stall\ncounterexamples preserved in the pair evidence. Pair conformance\nremains **PENDING** and must not be presented as a deployed guarantee. Home: §10. Blocking:\nchain-pair design, implementation, and closure evidence. Tracking: #1498.\n\n**E.49 — Independent-demand and value-at-risk model `[TBD]`.** Model miner+agent+validator coalitions,\nself-dealing genuine work, reward recycling, subsidy cliffs, audit outage, adverse FLOP price, attacker\nownership/control concentration, and aggregate exposure in external assets. Separate protocol-authorized\ndemand from economically independent demand and legitimate bootstrapping from profitable wash demand.\n*Placeholder:* no external-demand inference from a co-signed paid receipt; value-coupled security remains\nconditional on E.8/E.35 and unresolved genesis/reward distributions E.38–E.40. Home: §9, §11, §12.3,\n§15. Blocking: coalition payoff simulation and disclosed input distributions. Tracking: #1824.\n\n**E.50 — Arbitrary runtime-upgrade scope `[TBD]`.** Define the approved-code/social-governance assumption\nfor Root `set_code`, including review, publication, voter verification, emergency handling, and what claims\nsurvive arbitrary bytecode replacement. *Placeholder:* current-runtime parameter guards, de-sudo state,\nand formal update invariants apply only to the approved runtime and modeled calls. Home: §9.3, §14.\nBlocking: governance threat model and upgrade-review policy. Tracking: #1499.\n\n**E.51 — Canonical wire-format operational binding `[PARTIAL]`.** The byte formats, strict decoders,\ndomain/version tags, explicit leaf dispatch, and cross-language vectors are fixed. Remaining: production\ntask producers and validator/oracle consumers must derive `task_hash` v1 from the deployment genesis,\nagent, nonce, model, payload, and commit inputs and reject a caller-supplied mismatch; resumed pre-E.51\nchannels and stored checkpoints must retain their legacy receipt profile while new channels remain v1-only.\nR3.1's presence gate is the channel-level `submit_toploc_evidence` record (F.6), checked at\n`settle`/`force_settle` regardless of leaf version; a V2 leaf under a decode-policy marker satisfies\npresence but not per-turn binding. SDK hosts refuse a TOPLOC-bearing V2 leaf (#1404); whether the\nruntime keeps accepting V2 under a pinned policy is decision #1594.\n*Placeholder:* the direct rail treats `task_hash` as an opaque H256, and receipt selection is safe only when\nthe channel's profile marker survives the entire resume/checkpoint path. Home: §3.6, §12.1, Appendix F.\nBlocking: producer-to-validator wiring and cross-version resume-to-settlement tests. Tracking: #1500.\n\n**E.52 — Verification-liveness gate wiring `[PLANNED]`.** R15.4c is ratified (D-0439) but the runtime\nstill refreshes `LastVerifiedWork` from prover credit (`ValidatorWorkRecorder` on `OnProofVerified`, with\n`who` = the miner) and from nothing else; no duty is protocol-issued (`issue_audit` and ghost tasks are\nroot-only) and no validator attestation client exists. Wire the accepted-duty writers (attestation-bundle\nsigners, TOPLOC/escalation quorum signers, DA audit responses, validator dispute openings), remove the\nprover adapter, make the rotation floor read the same signal, add the per-window known-answer challenge\nissuance (fixture set in runtime/genesis; `da_registry::issue_audit` cannot serve it — it rejects when no\nblob exists) and its parameter, and record the storage-naming choice (a rename is a storage-key change:\ndecode-compat test).\n*Placeholder:* until wired, the committee behaves as the zero-duty bootstrap fallback of E.42 (stake-only),\nand a validator that also mines is the only one that passes the gate. Home: §2.3, §15.2–§15.5, Appendix H.\nBlocking: #1552 (runtime), #1554 (attestation client).\n\n**E.53 — Re-execution checker lane `[PLANNED]`.** R3.5d is ratified (D-0439) but the shipped TOPLOC\nchecker has each *validator* re-run prefill (`toploc-checker.ts` GPU executor; `report_toploc_mismatch`\nquorum over validator-recomputed distances). Specify and wire the checker registry keyed to calibrated\nminer identity (attested hardware fingerprint + capacity stake, §2.4) and its bond, stake-weighted VRF\nassignment of three fingerprint-distinct checkers per sampled or challenged turn (capture ≤ `q³`),\nre-challenge of a unanimous accept with a disjoint draw and bond forfeiture on overturn, the verdict fields carried\nby `report_toploc_mismatch(_claim)` (assignment proof, bond reference, signed distance over the\ncommitment), the validator-side verification before co-signing, escalation on any non-unanimous or\nunavailable result (§12.1), the OPTIONAL TEE-attested verdict tier, and checker payment through\n`claim_audit_fee` bound to the assignment. Also open: whether the verdict must commit to a recomputed\nvalue, since `q³` bounds seat capture but not the acceptance rate of a checker whose verdict does not\ndepend on re-execution (yellowpaper#3), and whether pairwise-distinct fingerprints are the whole of\nR3.5d's \"distinct operators\" (yellowpaper#13). *Placeholder:* validators re-execute; no bond or independence\namong checkers. Home: §3.5, §12.1, §15.6, Appendix F/G. Blocking: #1553.\n\n**E.55 — Canonical pre-session quote/discovery contract `[PLANNED]`.** Define a versioned, signed\noff-chain compute-channel quote and a public `quote → open_channel → receipt` conformance fixture.\nHome: the Rust and TypeScript compute-channel SDK interfaces, with their wire binding in Appendix F.\nThe existing `StandingOffer` / `SessionOffer` v1/v2 binds the miner, model hash, precision, minimum\nescrow, service bounds, capacity hint, expiry, nonce, and optional forward terms; it is an opening offer,\nnot a reproducible cross-provider cost quote. The fuller contract must also bind the meter profile,\ninput/context/output and cache assumptions, verification/settlement tier, expected `G_n`, reserved escrow\nand expected payable in an explicit base unit, transaction fee, and any external display conversion.\nUntil those fields have a canonical mapping, routers preserve source units and decline cross-provider\nranking. Blocking: #1597 (reproducible long-context `G_n`) and #1586 (reservation price formation).\nTracking: #1825.\n\n**E.56 — Small-set rotation ejection guard `[TBD]`.** R15.5 ejects a fixed\n[`validators_to_eject`](#param-validators_to_eject) = 50 per rotation with no active-set floor. On an\nactive set of at most 50 with an empty or under-staked `ValidatorQueue`, the first rotation empties\n`ActiveValidators`; block authoring continues on stale authorities while the finality committee, drawn\nfrom the active set (§15.4), empties. The launch cohort is 20–50 seats (D-0507). Specify the minimum-set\nguard on every removal path (rotation, jail, kick) and whether an ejection that would breach it is\nskipped or truncated. *Placeholder:* rotation is modelled as unsafe on any active set at or below the\neject count, and a deployment keeps the set above it; no conformance claim for rotation on sets of at\nmost 50. Home: §15.5. Blocking: D-0508 ratification (which carries the guard) or a separate consensus\ndecision, plus the pallet change. Tracking: #1727.\n\n**E.57 — Validator unbonding vs dispute lifecycle `[TBD]`.** State one right-hand side for the validator\nstake-exit bound and make §15.7, V11 and Appendix I agree with it and with the runtime. D-0419 ratifies\nfreeze-while-open for all stake; the validator-side freeze is not wired, and the margin as V11 composed\nit (retention `W` 14 d plus a 7 d challenge window, 2 h response and one 2 h R13.0b extension = 21 d\n4 h) exceeds [`validator_unbonding_blocks`](#param-validator_unbonding_blocks) = 21 d by up to 4 h,\nwhile the §1.2 coupling (challenge + response + extension ≤ `W`) bounds the lifecycle by `W` when it\nstarts inside retention. Define the validator \"dispute lifecycle\" (attestation bundle, DA audit,\nmismatch quorum) and its start clock. *Placeholder:* the validator relies on the 21 d cooldown; no\nunbond-during-dispute conformance claim on the validator side. Home: §1.2, §13.2 V11, §15.7,\nAppendix I. Blocking: a decision choosing freeze (pallet change) or margin (value or composition),\nrecorded as a D-id superseding D-0419's validator leg. Tracking: #1607.\n\n**E.31 — DA-loss terminal settlement split `[TBD]`.** Resolve whether D-0430's full-refund rule\nremains in force or a separately justified \"pay last co-signed cumulative receipt, refund the\nunverifiable tail\" rule supersedes it, including the evidence predicate, work-credit and forward-channel\ndisposition. *Placeholder:* full escrow refund on terminal unrecoverable DA. Home: §13.0, §13.2.\nBlocking: #1948.\n\n**E.32 — Sponsored stake refund semantics `[PARTIAL]`.** Base refundable sponsored stake landed. Still\nopen: whether sponsored stake can satisfy self-stake, sponsor refund authority, reward ownership (the\nruntime records an operator-or-sponsor reward policy per position), per-sponsor/operator caps,\ntestnet-only flags, disclosure. The slash waterfall is fixed in §11.3. *Placeholder:* sponsor-owned\nprincipal is slashable backing; refund only after role unbonding + finalized prefix; mainnet does not\ncount sponsor stake as self-stake without a ratified decision. Home: §11, §15, Appendix C/D. Blocking:\n#683.\n\n**E.33 — SOFT-tier (non-TEE) miner class `[TBD]`.** Define the non-TEE assurance tier end to end: entry\n(verified calibration burst + stake, no TEE/SKU evidence), settlement (miner session-key turn signatures\n+ agent receipt in place of enclave signatures), dispute resolution (validator quorum over checker-lane\nre-execution, R3.5d, instead of enclave-sig proof), spot-check rate, per-miner demand-floor **exclusion** (no hardware\nidentity ⇒ per-miner floor payments are Sybil-farmable), and pricing disclosure to agents. *Placeholder:*\nSOFT = discounted provisional cap + surge multiplier ≥ 1 +\n[`soft_tier_spot_check_rate_ppm`](#param-soft_tier_spot_check_rate_ppm); HARD =\n`min(empirical, discounted SKU)` when TEE evidence exists. **This item is the load-bearing dependency of\nthe ratified TEE-optional reframe (`D-0432`, §3.2 R3.2): the SOFT tier is admitted as first-class but its\nsettlement/dispute path is not yet fully specified.** Home: §3.2, §4, §7, §12, §13. Blocking: #650.\n\n**E.34 — Work-certificate workload classes beyond LLM `[PARTIAL]`.** Class-aware `G_n` metering\n(LLM/diffusion/world-model/policy-control + class-adjusted tripwire ceilings) landed. Still open:\nper-class certificate coverage and verification choice, freezing `workload_class` on the cert wire\nbeyond v1's LLM/GEMM-only value. The premium settlement floor ≥ 1.5× landed in #535.\n*Placeholder:* non-LLM classes launch TEE + sampled-audit replay; GEMM sum-check is the premium inline\noption. Home: §4, §7. Tracking: #1944 (including the cert-wire class binding).\n\n**E.35 — Validator-stake bidirectional retarget and aggregate κ `[TBD]`.** Define the stake-floor\n*reduction* mechanism (bounded step, TWAP window, hysteresis, hard floor at the CoCVoC baseline,\nannouncement/grace ≥ unbonding) and whether κ_cc and the aggregate stake-to-secured-value target (~20%)\nunify into one ratified κ. *Placeholder:* no down-retarget; base floor ratified at 1,200,000 FLOP (D-0440; the CoCVoC\nrequirement is ≈1,163,309 FLOP). Home: §11. Blocking: #556.\n\n**E.36 — External-work attestor classes `[TBD]`.** Define market-grade attestor sets for escrow-settled\noff-chain work (data curation, PR review, API SLA): registry shape, set-version pinning at escrow\ncreation, mandatory timeout arms, assurance labeling (market-grade never presented as protocol-grade).\nHome: §13, Appendix D. Blocking: #637.\n\n**E.37 — Attested-transport privacy posture (CVE-2026-33697) `[TBD]`.** Relay attacks on attested TLS\nbreak evidence↔channel binding; settlement integrity is unaffected (money moves only against the\non-chain-committed enclave key's signatures) but session confidentiality and the `open_channel`\nrendezvous inherit exposure. *Placeholder:* no session-privacy claims beyond TEE memory encryption;\nrendezvous treated as untrusted transport. Home: §12, §13. Blocking: #1823.\n\n**E.38 — Unresolved conversion and release policy `[RATIFY]`.** §8.2 specifies the decided genesis\nallocation and airdrop path. *Placeholder:* ratify conversion score caps and sublinear aggregation,\nthe accounting identity and owner-signed spend rules, verifiable-demand and maintained-duration gates,\nthe validator cohort's activity basis, and whether activity under-counts can be appealed. Fix the\nValidator release order of R8.7; until it is fixed, no Validator grant releases. Decide the\ndisposition of Miner and Agent principal that never unlocks. Whether a fraud verdict upheld after the\ndispute window reverses unlock or spend credit follows E.44. Residual risk: once its quarter is liquid,\na miner can buy inference from itself through an agent it controls and unlock the rest at about the\n1% audit earmark, roughly 0.75% of principal; an agent can likewise pay a miner it controls from\nlocked principal, receive about 99% of it back as that miner's payout, and unlock a further third of\nthe spend. No runtime common-control rule binds either (see E.49). Decide the\nunallocated-remainder disposition, publication of operator-held filter inputs, and the\n[`genesis_reserve`](#param-genesis_reserve) release controller. Home: §8.2, §9.3. Blocking: #257,\n#1175, #1354, #1357.\n\n**E.54 — Paid agent-storage activation profile `[RATIFY]`.** Fix the §5.4 canonical wire widths/order,\nmessage domains and cross-language vectors; ciphertext/chunk/erasure/key-wrapping suites; capability,\nrevocation, lane-close and key-recovery boundaries; the funding-pinned lane claim window\n`lane_claim_window_blocks` and its residual post-close budget exposure; custody/audit proofs with unpredictable challenges,\nselection/standing and objective fault adjudication; activation, service, challenge, repair and terminal\nretention windows; collateral reservation, encoding of slot/tranche budgets, slash/compensation disposition; and\ncapacity, object/request/credit limits with benchmark-backed tariff economics. The profile **MUST**\nseparate client encryption obligations from validator-checkable envelope predicates, and pin per-write\nsetup entitlement, the setup-fee floor (when `F` = 0 is admissible given R5.4e's one-time-work\ncoverage), encoding and bounds for R5.4f's per-slot/tranche position accumulators and historical\nentitlements, take-or-pay reservations with capacity reuse and\ntransfer semantics, reservation cardinality per payer (one active reservation or one per term, and\nwhether terms may overlap; §1.1 vs F.7), fixed service-lane tariffs with advanced request fees, the\nhead quorum and whether any two head quorums of one provider group must share a signer (`2q > n`),\nsequencer deadline and failover order, checkpoint cadence and grace, the audit-rate\ninequality `p_a × c_r ≥ c_s` and any one-time shard-derivation proof at object activation, bond\nnetting against held-back earnings, and separate fault remedies. The rounding and replacement\nentitlement rule is fixed by R5.4e/f; no tariff, bond or audit-rate value is ratified here. It **MUST**\npin aggregate attempted-work/traffic/credit accounting, retry bounds, restart behavior, monotonic-time\nreplenishment and protected protocol reserves, including failed admission and repair paths. *Placeholder:* paid storage disabled (outside the R5.4q development-network scope, D-0512); no numerical launch rates, compensation\nguarantee, or continuous-availability claim. The activation profile **MUST** enumerate each new\nprotocol limit's name, unit, allowed range, consumer, governance mutability, and existing-deal behavior.\nThe E.54 profile **MUST** constrain its permitted activation, challenge and funded-request timing so\nthat, for every lane close boundary `C`, the funding-pinned `lane_claim_window_blocks` `W` covers the\nmaximum remaining setup-entitlement maturity and every funded-request deadline affecting that lane's\nclaims. Each such entitlement **MUST** become redeemable, and each such deadline **MUST** expire, no\nlater than `C + W`, accounting for sequential delays and inclusive/exclusive boundary rules. A profile\nor admission permitting an obligation beyond that deadline **MUST** be rejected; missing bounds\n**MUST NOT** be treated as zero.\nProfile qualification and admission **MUST** establish, under protocol-permitted finality behavior,\nat least one actual runtime dispatch opportunity after all entitlement prerequisites complete and\nwhile known finalized height remains at or below the unchanged deadline. Unsupported or missing\nbounds **MUST** reject qualification/admission, and affected work **MUST NOT** be enabled before\nthat qualification, including on development networks. This establishes redemption validity, not\nguaranteed transaction inclusion; maturity-time arithmetic alone **MUST NOT** be claimed to exclude\na finality jump across the entire redemption interval.\nRatified numerical protocol limits **MUST** enter the canonical parameter YAML, generated Appendix A,\nand caller-consumption checks together with their implementations. The profile **MUST** fix the\nepoch tariff's electorate (capacity-declaring validators), stake weights, median aggregation and ties,\nmissing votes, the per-epoch step bound, any governance floor/ceiling, the demand-headroom tripwire\nand its epoch count, the response to sustained over-supply, update boundaries and immutable versions, with strategic-vote, cartel and\nunder-supply analysis against measured provider costs; binding prices are the epoch tariff under\nR5.4e. Accepted tariff versions\n**MUST** remain versioned reservation inputs; hardware costs, token conversion assumptions, and demand/margin\nestimates **MUST** remain operator/simulator inputs. Home: §5.4, F.7, G.4. Decision: D-0506. Blocking: profile ratification,\neconomic/adversarial evidence, E.47 placement/repair evidence, and an end-to-end implementation witness.\nTracking: #1564, #1565, #1566, #1567, #1568, #1569; Lean, Quint and simulation evidence landed in\n#2397, #2142 and #2152.\n\n**E.40 — Agent & staker leg distribution `[TBD]`.** Specify how the\n[`agent_share_ppt`](#param-agent_share_ppt) (10%) and [`staker_share_ppt`](#param-staker_share_ppt) (5%)\npools are paid out: the eligible set (the staker leg is defined as all FLOP stakers **other than** miners\nand validators), the pro-rata basis (agents: verified inference spend, unconfirmed), cadence, dust\nhandling, and, for the staker leg, whether payouts are liquid on issue (agent-leg payouts are liquid\nunder R9.13). The agent leg must also choose its accounting unit\n(owner account, delegate key, or registered agent identity), whether owner-signed spend outside the §6.2\ndelegate caps counts (yellowpaper#31), and its spend\nbasis: escrow-settled reserved value or work-settled `Σ G_n` over\nco-signed, TOPLOC-carrying turns\n(yellowpaper#32). Per-identity accounting makes\nidentity count the reward lever, so per-identity credits need verifiable-demand gating. Until this\nratifies both legs accrue in sovereign pool accounts and are never distributed (§9.1 R9.12).\n*Placeholder:* pro-rata by stake for the staker leg; the agent accounting unit and spend basis remain\nunconfirmed, with both escrow-settled and work-settled bases open. Home: §9. Blocking: #1350, #1351.\n\n---","after":"## Appendix E — Open Specification Items\n\nEach unresolved value/definition/mechanism has a numbered stub: **what** must be specified, a\n**placeholder** to model against until it ratifies, its **home** section(s), and the **blocking**\ndecision/task. Tags: `[TBD]` value/definition absent · `[RATIFY]` proposed, awaiting sign-off ·\n`[PLANNED]` decided, not yet wired. To close an item: write the value into its home section, then delete\nthe stub (closed numbers are retired, not reused).\n\n**E.8 — Value-coupled floor `k` + retarget cadence `[TBD]`.** Set `k` in `effective_minimum_stake =\nmax(baseline, k·V_booked)` and its governance retarget cadence. *Placeholder:* `k ≥ m·κ/(θNσδ)`;\nslow-cadence retarget from the indexer `D₂`/`n_eff`. Home: §11, §15.2. Blocking: #556.\n\n**E.9 — Governance track magnitudes `[RATIFY]`.** Sign off the `protocol_upgrade` track values.\n*Placeholders:* `min_support` linear 50% → 15% of `ActiveIssuance`; decision period 28 d; prepare/confirm\n2 h / 24 h; decision deposit high-FLOP, magnitude TBD (the runtime currently carries 100,000 FLOP);\nenactment timelock 14 d\n([`protocol_upgrade_enactment_timelock`](#param-protocol_upgrade_enactment_timelock)) against the §1.2\nreading rule that enactment outlives the 21 d validator unbonding — sign off the value or the rule.\nHome: §14.1. Blocking: #681.\n\n**E.22 — Aggregate reservation + statistical drift + cache-aware metering `[PLANNED]` (M6/M13).**\nQuick-canary count, timed packs, lease/renewal cadence, restart supervisor, expiry, multi-GPU\nfingerprint invalidation, and deposit-before-activation are live under D-0433. Remaining: miner-wide\ncapacity reservation across overlapping channels; rolling eligible-work coverage and automatic\ndegradation downshift; canonical production fingerprint acquisition; per-SKU MLPerf plausibility\ndatasets; and a proof-bound cached-prefix witness so reused prompt prefill is not charged again.\nSPEC-026 applies ceiling rejects, co-signed EWMA rebates, reputation, and slashing only for timing\nfraud. Home: §4, §7, §13.1. Decision: D-0433. Blocking: #1822; cache witness #1153.\n\n**E.23 — Minimum-escrow / bonded-reservation economics `[TBD]` (A10).** Dust count is bounded by the\nper-identity reservation cap and the [`min_force_open_escrow_for_failed_ack`](#param-min_force_open_escrow_for_failed_ack)\nfloor, but the general pricing of a minimum escrow / bonded reservation is unspecified. Home: §13.5.\nBlocking: #440.\n\n**E.24 — Ordering-game / MEV analysis `[PARTIAL]` (V7).** Strict dispute guard vs. non-strict finalize\nguard commute at a fixed finalized head; the residual force-settle path exposure is ≤ one escrow. Binding\nsettlement mode in the signed receipt or defining protocol path priority removes the choice. The same\nchoice is open to the agent: G.1 admits `force_settle` from either party, and at the placeholder tariff\n([`channel_base_per_turn`](#param-channel_base_per_turn) and `rate_G` each one base unit) `P` is\n`n + ΣG_n` base units, so even 10¹⁰ `G_n` (tens of millions of tokens on a 70B-class model) pays\n10⁻⁸ FLOP, and an agent that declines to co-sign recovers essentially `(1−φ)·E` of a used channel\nagainst R12.1a's intent. Restricting the unilateral caller,\nbinding the settlement mode at open, or raising the tariff to a cost-covering magnitude is part of this\nitem. Operational\n`maxDelay`, FOCIL enforcement, and path-binding remain open. Home: §12.1, §13.2. Blocking: #445, #1610\n(tariff calibration).\n\n**E.27 — Session max-duration extension + re-attestation cadence wiring `[PARTIAL]`.** The cadence bound\n`k ≤ min(Bond/v_turn, T_tcb/t_turn)` is specified; in-place max-duration extension and the re-attestation\ncadence are not yet wired. Home: §12.1, Appendix C. Blocking: #682 (SPEC-025).\n\n**E.41 — Active-set cap vs. BABE authority bound `[RESOLVED]`.** D-0437 ratifies\n[`validator_active_set_cap`](#param-validator_active_set_cap) = 1,000. Resolved via Option (a) (D-0526):\n`MAX_ACTIVE_VALIDATORS` and `MaxAuthorities` are raised to 1,000 so every active validator is a BABE\nblock authoring authority. AlephBFT finality remains sub-sampled to the 100-member PoUI-gated committee\n([`finality_committee_size`](#param-finality_committee_size) = 100, `AlephMaxCommittee` = 100).\nStorage bound for `ActiveValidators` is aligned from `ConstU32<10_000>` to `ConstU32<1_000>` with\ndecode-compat verified against prior SCALE encoding. Home: §15.5, §15.4. Decisions: D-0437, D-0526. Closed: #1393.\n\n**E.42 — Committee seat-capture model `[TBD]`.** Establish a capture bound for the implemented\nweighted-without-replacement draw over distinct eligible identities. The model must use seat count as the\nAlephBFT safety variable and cover unequal stakes, small eligible pools, stake splitting, repeated draws,\nand BABE-VRF seed influence. Retain the 40 Byzantine identities at stake 1 versus 61 honest identities at\nstake 3, drawing 100 of 101, as a regression case: Byzantine aggregate stake is `40/223 ≈ 17.94%` while every\ndraw contains 39 or 40 Byzantine seats. *Placeholder:* no aggregate-stake/binomial bridge; conformance\nrequires a separately justified strict `<⅓` Byzantine-seat premise.\nAlso specify the zero-duty bootstrap fallback, the nonempty-but-undersized duty pool, and a minimum safe\ncommittee response; an `N=100` bound cannot apply silently when the implementation returns fewer seats.\nHome: §2.3, §13.2, §15.4. Blocking: new consensus decision, exact sampler analysis, undersized/bootstrap\npolicy, and formal witness. Tracking: #848.\n\n**E.43 — End-to-end verification/error bridge `[TBD]`.** Specify and test the commitment/challenge/opening\nprotocol that connects TOPLOC's empirical detector and projection formula to settlement: activation-vector\nbinding, decode-step coverage bound to the billed `h_ids`, post-commit challenge randomness, opening verification, quantization/backend distributions,\nadaptive attacks, DA publication, audit selection, and adjudication. State conditional error terms; use a\nproduct only with justified conditional independence. *Placeholder:* artifact presence records a claim but\ndoes not establish execution correctness or a cryptographic false-accept rate. Home: §3.2–§3.5, §12.1,\nAppendix F. Blocking: protocol design, adversarial matrix, and implementation-to-proof conformance test. Tracking: #1493.\n\n**E.44 — Cooperative work-credit eligibility `[PARTIAL; future activation/recovery TBD]`.**\nThe confirmed payment-only disposition suppresses new public credit at every\ncurrent-profile channel payout, including unilateral finalization and DA void. Production-runtime\nregressions exercise a self-funded/related payer+miner coalition with ordinary SOFT keys, valid\nsignatures and plausible fabricated amounts, replay, mismatched evidence, and delayed fraud.\nSignatures, Merkle membership, and sum equality prove agreement and arithmetic, not claimed execution.\nClosed-channel reports reject; duplicate reports do not recover payment or alter reward/recency state.\nHistorical credit and issued rewards are preserved, with no implemented clawback. Future activation\nstill needs independently auditable/final execution evidence, challenge standing/deadlines, retention\nof collectible collateral, and correction/recovery of historical credit/rewards and eligibility.\nThe distinct decision ID and exact public bundle await owner approval. Home: §3.6, §9, §11.2, §12.1,\n§15.6. Tracking: #2375; #1494's payment-only containment is completed. Private evidence: runtime observations.\n\n**E.45 — Effective-challenge incentive model `[TBD]`.** Define players, utilities, challenger rewards and\ncosts, coalition/bribery behavior, exposure horizon, collectible collateral, and miner-wide reservation\nacross concurrent channels. Expand `p_effective` into availability, selection, inclusion, correct\nadjudication, and collection events, with each factor conditioned on all prior events and without an\nindependence or Markov assumption. *Placeholder:*\n`total_profitable_exposure < p_effective × collectible_penalty` is a conditional risk-neutral deterrence\nbudget, not a unique-equilibrium or zero-fraud theorem. Home: §3.5, §6.1, §11.3, §12.2. Blocking:\naggregate reservation E.22 plus a ratified payoff model. Tracking: #1495.\n\n**E.46 — Direct/session capacity evidence `[PENDING; PARTIAL EVIDENCE]`.** This mechanism remains open.\nInternal source-checked fixtures reproduce exact SCALE bytes for supported direct active-set/quorum sizes\nand cooperative/unilateral settlement over turn/path limits, a duplicate-last bundle, TOPLOC evidence\npublication, and dispute calls. It includes runtime pallet/call indices, v5 bare and v4 signed framing,\nsignature/extension fields, compact length prefixes, DA references, hashes, configured Normal/Operational\nenvelopes, and charged weights. The direct weight is an identified unbenchmarked stub; session weights do\nnot parameterize path length or duplicate scanning. The runtime-benchmark build now compiles in every\nruntime flavour, but no benchmark run, dedicated `flop-poui` weights or runtime hash is claimed. No\ndisclosed network matrix or raw log exists. Detailed failure diagnostics and their reproducer remain\nprivate while the mechanism is pending; the public summary records only the fixtures' bounded scope and\nlimitations. D-0502 proposes withdrawing the 125,000 B, 96/128 transaction, 48/64 lifecycle, and\nsub-second-finality figures from the v0.5 profile; ratification is pending. Home: §2.2, §5.2–§5.3, §12.1,\n§15.6; evidence: [prepublication-evidence.md](research/prepublication-evidence.md). Blocking: run the\nruntime benchmarks, generate dedicated weights, and run the recorded\ncommittee/topology/loss/load/co-load/fault matrix with negative and recovery outcomes. Tracking: #1496.\n\n**E.47 — DA availability and anti-grinding model `[TBD]`.** Specify commitment-assignment anti-grinding\n(paid-storage provider assignment already draws delayed BABE randomness after open, §5.4; protocol-DA\nassignment is still seeded by the commitment), operator and failure-domain diversity, publisher limits,\naudit/repair timing, repair bandwidth, an upper bound on `lease_end` under free third-party top-up, the\nresolution of an audit still outstanding when its blob is withdrawn or pruned, and the cumulative\nstorage/retention budget across the full session+challenge lifecycle. Distinguish registry freshness,\naudit success, and actual reconstruction. *Placeholder:* validator DA removes miner-only custody;\navailability remains conditional on the stated threshold and repair assumptions. Home: §3.5, §5.3, §13.0,\nAppendix F. Blocking: failure model, grinding analysis, and lifecycle recovery test. Tracking: #1497.\n\n**E.48 — Cross-chain HTLC pair conformance `[TBD]`.** Specify the exact chain and asset identifiers,\nparticipant/recipient and hashlock binding, preimage owner/reveal path, timeout orientation and margins,\nper-leg finality and timely-inclusion assumptions, relayer failure recovery, and the fee/inclusion premise\nrequired by `HtlcIncentives::collusion_deterred`. Closure evidence must exercise both legs under the\nratified profile and record timestamps, finality identifiers, and hashed raw RPC/log inputs. *Placeholder:*\nFLOP-leg conservation and mutually exclusive redeem/refund are supported; the initial-publication\ndisposition for every implemented pair/direction is **target-only**, with cross-leg loss/stall\ncounterexamples preserved in the pair evidence. Pair conformance\nremains **PENDING** and must not be presented as a deployed guarantee. Home: §10. Blocking:\nchain-pair design, implementation, and closure evidence. Tracking: #1498.\n\n**E.49 — Independent-demand and value-at-risk model `[TBD]`.** Model miner+agent+validator coalitions,\nself-dealing genuine work, reward recycling, subsidy cliffs, audit outage, adverse FLOP price, attacker\nownership/control concentration, and aggregate exposure in external assets. Separate protocol-authorized\ndemand from economically independent demand and legitimate bootstrapping from profitable wash demand.\n*Placeholder:* no external-demand inference from a co-signed paid receipt; value-coupled security remains\nconditional on E.8/E.35 and unresolved genesis/reward distributions E.38–E.40. Home: §9, §11, §12.3,\n§15. Blocking: coalition payoff simulation and disclosed input distributions. Tracking: #1824.\n\n**E.50 — Arbitrary runtime-upgrade scope `[TBD]`.** Define the approved-code/social-governance assumption\nfor Root `set_code`, including review, publication, voter verification, emergency handling, and what claims\nsurvive arbitrary bytecode replacement. *Placeholder:* current-runtime parameter guards, de-sudo state,\nand formal update invariants apply only to the approved runtime and modeled calls. Home: §9.3, §14.\nBlocking: governance threat model and upgrade-review policy. Tracking: #1499.\n\n**E.51 — Canonical wire-format operational binding `[PARTIAL]`.** The byte formats, strict decoders,\ndomain/version tags, explicit leaf dispatch, and cross-language vectors are fixed. Remaining: production\ntask producers and validator/oracle consumers must derive `task_hash` v1 from the deployment genesis,\nagent, nonce, model, payload, and commit inputs and reject a caller-supplied mismatch; resumed pre-E.51\nchannels and stored checkpoints must retain their legacy receipt profile while new channels remain v1-only.\nR3.1's presence gate is the channel-level `submit_toploc_evidence` record (F.6), checked at\n`settle`/`force_settle` regardless of leaf version; a V2 leaf under a decode-policy marker satisfies\npresence but not per-turn binding. SDK hosts refuse a TOPLOC-bearing V2 leaf (#1404); whether the\nruntime keeps accepting V2 under a pinned policy is decision #1594.\n*Placeholder:* the direct rail treats `task_hash` as an opaque H256, and receipt selection is safe only when\nthe channel's profile marker survives the entire resume/checkpoint path. Home: §3.6, §12.1, Appendix F.\nBlocking: producer-to-validator wiring and cross-version resume-to-settlement tests. Tracking: #1500.\n\n**E.52 — Verification-liveness gate wiring `[PLANNED]`.** R15.4c is ratified (D-0439) but the runtime\nstill refreshes `LastVerifiedWork` from prover credit (`ValidatorWorkRecorder` on `OnProofVerified`, with\n`who` = the miner) and from nothing else; no duty is protocol-issued (`issue_audit` and ghost tasks are\nroot-only) and no validator attestation client exists. Wire the accepted-duty writers (attestation-bundle\nsigners, TOPLOC/escalation quorum signers, DA audit responses, validator dispute openings), remove the\nprover adapter, make the rotation floor read the same signal, add the per-window known-answer challenge\nissuance (fixture set in runtime/genesis; `da_registry::issue_audit` cannot serve it — it rejects when no\nblob exists) and its parameter, and record the storage-naming choice (a rename is a storage-key change:\ndecode-compat test).\n*Placeholder:* until wired, the committee behaves as the zero-duty bootstrap fallback of E.42 (stake-only),\nand a validator that also mines is the only one that passes the gate. Home: §2.3, §15.2–§15.5, Appendix H.\nBlocking: #1552 (runtime), #1554 (attestation client).\n\n**E.53 — Re-execution checker lane `[PLANNED]`.** R3.5d is ratified (D-0439) but the shipped TOPLOC\nchecker has each *validator* re-run prefill (`toploc-checker.ts` GPU executor; `report_toploc_mismatch`\nquorum over validator-recomputed distances). Specify and wire the checker registry keyed to calibrated\nminer identity (attested hardware fingerprint + capacity stake, §2.4) and its bond, stake-weighted VRF\nassignment of three fingerprint-distinct checkers per sampled or challenged turn (capture ≤ `q³`),\nre-challenge of a unanimous accept with a disjoint draw and bond forfeiture on overturn, the verdict fields carried\nby `report_toploc_mismatch(_claim)` (assignment proof, bond reference, signed distance over the\ncommitment), the validator-side verification before co-signing, escalation on any non-unanimous or\nunavailable result (§12.1), the OPTIONAL TEE-attested verdict tier, and checker payment through\n`claim_audit_fee` bound to the assignment. Also open: whether the verdict must commit to a recomputed\nvalue, since `q³` bounds seat capture but not the acceptance rate of a checker whose verdict does not\ndepend on re-execution (yellowpaper#3), and whether pairwise-distinct fingerprints are the whole of\nR3.5d's \"distinct operators\" (yellowpaper#13). *Placeholder:* validators re-execute; no bond or independence\namong checkers. Home: §3.5, §12.1, §15.6, Appendix F/G. Blocking: #1553.\n\n**E.55 — Canonical pre-session quote/discovery contract `[PLANNED]`.** Define a versioned, signed\noff-chain compute-channel quote and a public `quote → open_channel → receipt` conformance fixture.\nHome: the Rust and TypeScript compute-channel SDK interfaces, with their wire binding in Appendix F.\nThe existing `StandingOffer` / `SessionOffer` v1/v2 binds the miner, model hash, precision, minimum\nescrow, service bounds, capacity hint, expiry, nonce, and optional forward terms; it is an opening offer,\nnot a reproducible cross-provider cost quote. The fuller contract must also bind the meter profile,\ninput/context/output and cache assumptions, verification/settlement tier, expected `G_n`, reserved escrow\nand expected payable in an explicit base unit, transaction fee, and any external display conversion.\nUntil those fields have a canonical mapping, routers preserve source units and decline cross-provider\nranking. Blocking: #1597 (reproducible long-context `G_n`) and #1586 (reservation price formation).\nTracking: #1825.\n\n**E.56 — Small-set rotation ejection guard `[PARTIAL; policy TBD]`.** Runtime containment is implemented:\n`pallet_validators` enforces [`validator_min_active_validators`](#param-validator_min_active_validators) =\n4 on voluntary deregistration, jail, kick, and rotation (`ensure_can_remove_from_active`), caps rotation\nejection by [`validators_to_eject`](#param-validators_to_eject) = 50,\n[`validator_rotation_churn_percent`](#param-validator_rotation_churn_percent) = 10%, and\n[`validator_min_scored_samples`](#param-validator_min_scored_samples) = 3, and slashes/blacklists a proven\nfault at the floor immediately while deferring seat removal until rotation promotes replacements. Open:\nthe floor's relation to the seeded launch cohort (20–50 seats, D-0507), to E.42's committee-safety\npremise, and whether an ejection batch that reaches the floor is skipped or truncated under the ratified\nrotation policy (D-0508). *Placeholder:* the 4-validator floor is a non-drain guard, not an `N=100`\ncommittee-safety proof. Home: §15.5. Blocking: D-0508 ratification and E.42 alignment. Tracking: #1792,\n#1711; containment #1727 completed.\n\n**E.57 — Validator unbonding vs dispute lifecycle `[TBD]`.** State one right-hand side for the validator\nstake-exit bound and make §15.7, V11 and Appendix I agree with it and with the runtime. D-0419 ratifies\nfreeze-while-open for all stake; the validator-side freeze is not wired, and under R1.2a's multi-round\nbisection worst-case dispute lifetime `D + (2·⌈log₂ n_max⌉ + 2)·R = 763,200` blocks (`8 d 20 h` at\n`n_max = 1,024`, `R = 2 h`; replacing the superseded single-turn `7 d + 2 h + 2 h = 7 d 4 h` bound),\nsequential composition with DA retention `W` (`14 d` = `1,209,600` blocks) gives `W + 8 d 20 h = 22 d 20 h`\n(`1,972,800` blocks), which exceeds [`validator_unbonding_blocks`](#param-validator_unbonding_blocks) =\n`21 d` (`1,814,400` blocks) by `1 d 20 h` (`158,400` blocks), whereas the §1.2 coupling (`763,200 ≤ W`)\nbounds the lifecycle by `W` (`14 d < 21 d`) when it starts inside retention. Define the validator\n\"dispute lifecycle\" (attestation bundle, DA audit, mismatch quorum) and its start clock. *Placeholder:*\nthe validator relies on the 21 d cooldown; no unbond-during-dispute conformance claim on the validator\nside. Home: §1.2, §13.2 V11, §15.7, Appendix I. Blocking: a decision choosing freeze (pallet change) or\nmargin (value or composition), recorded as a D-id superseding D-0419's validator leg. Tracking: #1607.\n\n**E.31 — DA-loss terminal settlement split `[TBD]`.** Resolve whether D-0430's full-refund rule\nremains in force or a separately justified \"pay last co-signed cumulative receipt, refund the\nunverifiable tail\" rule supersedes it, including the evidence predicate, work-credit and forward-channel\ndisposition. *Placeholder:* full escrow refund on terminal unrecoverable DA. Home: §13.0, §13.2.\nBlocking: #1948.\n\n**E.32 — Sponsored stake refund semantics `[PARTIAL]`.** D-0530 prohibits third-party delegated staking\ninto validators or miners (operator stake is self-stake only), leaving only institutional/Foundation\nsponsored stake (`SponsorPosition`) in scope here. Ratified for devnet and testnet (R6.1a): a\nsponsor-owned, stake-only bond that counts as self-stake on runtimes with\n[`sponsored_self_stake_enabled`](#param-sponsored_self_stake_enabled), refunded only to the sponsor after\nthe role unbonding window on the finalized prefix, reward routing per the recorded position policy, and\nown and sponsored stake disclosed separately. Still open for mainnet: whether sponsored stake can ever\nsatisfy self-stake, per-sponsor and per-operator caps, and slash collectibility when the sponsor holds its\nfrozen principal under another pallet's fungible hold (holds overlap freezes; the same gap applies to\nself-stake and delegator freezes). Such a slash fails atomically, and the dispatch that needs it fails\nwith it: a channel `finalize` that forfeits audit stake cannot complete until the hold is released. The slash waterfall is fixed in §11.3. *Placeholder:* mainnet does not\ncount sponsor stake as self-stake. Home: §6.1, §11, §15, Appendix C/D. Blocking: #683 (mainnet).\n\n**E.33 — SOFT-tier (non-TEE) miner class `[TBD]`.** Define the non-TEE assurance tier end to end: entry\n(verified calibration burst + stake, no TEE/SKU evidence), settlement (miner session-key turn signatures\n+ agent receipt in place of enclave signatures), dispute resolution (validator quorum over checker-lane\nre-execution, R3.5d, instead of enclave-sig proof), spot-check rate, per-miner demand-floor **exclusion** (no hardware\nidentity ⇒ per-miner floor payments are Sybil-farmable), and pricing disclosure to agents. *Placeholder:*\nSOFT = discounted provisional cap + surge multiplier ≥ 1 +\n[`soft_tier_spot_check_rate_ppm`](#param-soft_tier_spot_check_rate_ppm); HARD =\n`min(empirical, discounted SKU)` when TEE evidence exists. **This item is the load-bearing dependency of\nthe ratified TEE-optional reframe (`D-0432`, §3.2 R3.2): the SOFT tier is admitted as first-class but its\nsettlement/dispute path is not yet fully specified.** Home: §3.2, §4, §7, §12, §13. Blocking: #650.\n\n**E.34 — Work-certificate workload classes beyond LLM `[PARTIAL]`.** Class-aware `G_n` metering\n(LLM/diffusion/world-model/policy-control + class-adjusted tripwire ceilings) landed. Still open:\nper-class certificate coverage and verification choice, freezing `workload_class` on the cert wire\nbeyond v1's LLM/GEMM-only value. The premium settlement floor ≥ 1.5× landed in #535.\n*Placeholder:* non-LLM classes launch TEE + sampled-audit replay; GEMM sum-check is the premium inline\noption. Home: §4, §7. Tracking: #1944 (including the cert-wire class binding).\n\n**E.35 — Validator-stake bidirectional retarget and aggregate κ `[TBD]`.** Define the stake-floor\n*reduction* mechanism (bounded step, TWAP window, hysteresis, hard floor at the CoCVoC baseline,\nannouncement/grace ≥ unbonding) and whether κ_cc and the aggregate stake-to-secured-value target (~20%)\nunify into one ratified κ. *Placeholder:* no down-retarget; base floor ratified at 1,200,000 FLOP (D-0440; the CoCVoC\nrequirement is ≈1,163,309 FLOP). Home: §11. Blocking: #556.\n\n**E.36 — External-work attestor classes `[TBD]`.** Define market-grade attestor sets for escrow-settled\noff-chain work (data curation, PR review, API SLA): registry shape, set-version pinning at escrow\ncreation, mandatory timeout arms, assurance labeling (market-grade never presented as protocol-grade).\nHome: §13, Appendix D. Blocking: #637.\n\n**E.37 — Attested-transport privacy posture (CVE-2026-33697) `[TBD]`.** Relay attacks on attested TLS\nbreak evidence↔channel binding; settlement integrity is unaffected (money moves only against the\non-chain-committed enclave key's signatures) but session confidentiality and the `open_channel`\nrendezvous inherit exposure. *Placeholder:* no session-privacy claims beyond TEE memory encryption;\nrendezvous treated as untrusted transport. Home: §12, §13. Blocking: #1823.\n\n**E.38 — Unresolved conversion and release policy `[RATIFY]`.** §8.2 specifies the decided genesis\nallocation and airdrop path. *Placeholder:* ratify conversion score caps and sublinear aggregation,\nthe accounting identity and owner-signed spend rules, verifiable-demand and maintained-duration gates,\nthe validator cohort's activity basis, and whether activity under-counts can be appealed. Fix the\nValidator release order of R8.7; until it is fixed, no Validator grant releases. Decide the\ndisposition of Miner and Agent principal that never unlocks. Whether a fraud verdict upheld after the\ndispute window reverses unlock or spend credit follows E.44. Residual risk: once its quarter is liquid,\na miner can buy inference from itself through an agent it controls and unlock the rest at the 15%\nvalidator fee leg (of which 1% funds the audit pool; D-0525), roughly 11.25% of principal; an agent can\nlikewise pay a miner it controls from locked principal, receive about 85% of it back as that miner's\npayout, and unlock a further third of the spend. No runtime common-control rule binds either (see E.49). Under\nD-0531 (#1358), the workbook's legacy on-chain referral commission model (6–10%) is superseded by a\npublic explorer leaderboard and periodic referral lotteries funded from\n[`genesis_reserve`](#param-genesis_reserve) = 800,000,000 FLOP and settled off-chain. Decide the\nunallocated-remainder disposition, publication of operator-held filter inputs, and the\n[`genesis_reserve`](#param-genesis_reserve) release controller. Home: §8.2, §9.3. Blocking: #257,\n#1175, #1354, #1357, #1358.\n\n**E.54 — Paid agent-storage activation profile `[RATIFY]`.** Fix the §5.4 canonical wire widths/order,\nmessage domains and cross-language vectors; ciphertext/chunk/erasure/key-wrapping suites; capability,\nrevocation, lane-close and key-recovery boundaries; the funding-pinned lane claim window\n`lane_claim_window_blocks` and its residual post-close budget exposure; custody/audit proofs with unpredictable challenges,\nselection/standing and objective fault adjudication; activation, service, challenge, repair and terminal\nretention windows; collateral reservation, encoding of slot/tranche budgets, slash/compensation disposition; and\ncapacity, object/request/credit limits with benchmark-backed tariff economics. The profile **MUST**\nseparate client encryption obligations from validator-checkable envelope predicates, and pin per-write\nsetup entitlement, the setup-fee floor (when `F` = 0 is admissible given R5.4e's one-time-work\ncoverage), encoding and bounds for R5.4f's per-slot/tranche position accumulators and historical\nentitlements, take-or-pay reservations with capacity reuse and\ntransfer semantics, reservation cardinality per payer (one active reservation or one per term, and\nwhether terms may overlap; §1.1 vs F.7), fixed service-lane tariffs with advanced request fees, the\nhead quorum and whether any two head quorums of one provider group must share a signer (`2q > n`),\nsequencer deadline and failover order, checkpoint cadence and grace, the audit-rate\ninequality `p_a × c_r ≥ c_s` and any one-time shard-derivation proof at object activation, bond\nnetting against held-back earnings, and separate fault remedies. The rounding and replacement\nentitlement rule is fixed by R5.4e/f; no tariff, bond or audit-rate value is ratified here. It **MUST**\npin aggregate attempted-work/traffic/credit accounting, retry bounds, restart behavior, monotonic-time\nreplenishment and protected protocol reserves, including failed admission and repair paths. *Placeholder:* paid storage disabled (outside the R5.4q development-network scope, D-0512); no numerical launch rates, compensation\nguarantee, or continuous-availability claim. The activation profile **MUST** enumerate each new\nprotocol limit's name, unit, allowed range, consumer, governance mutability, and existing-deal behavior.\nThe E.54 profile **MUST** constrain its permitted activation, challenge and funded-request timing so\nthat, for every lane close boundary `C`, the funding-pinned `lane_claim_window_blocks` `W` covers the\nmaximum remaining setup-entitlement maturity and every funded-request deadline affecting that lane's\nclaims. Each such entitlement **MUST** become redeemable, and each such deadline **MUST** expire, no\nlater than `C + W`, accounting for sequential delays and inclusive/exclusive boundary rules. A profile\nor admission permitting an obligation beyond that deadline **MUST** be rejected; missing bounds\n**MUST NOT** be treated as zero.\nProfile qualification and admission **MUST** establish, under protocol-permitted finality behavior,\nat least one actual runtime dispatch opportunity after all entitlement prerequisites complete and\nwhile known finalized height remains at or below the unchanged deadline. Unsupported or missing\nbounds **MUST** reject qualification/admission, and affected work **MUST NOT** be enabled before\nthat qualification, including on development networks. This establishes redemption validity, not\nguaranteed transaction inclusion; maturity-time arithmetic alone **MUST NOT** be claimed to exclude\na finality jump across the entire redemption interval.\nRatified numerical protocol limits **MUST** enter the canonical parameter YAML, generated Appendix A,\nand caller-consumption checks together with their implementations. The profile **MUST** fix the\nepoch tariff's electorate (capacity-declaring validators), stake weights, median aggregation and ties,\nmissing votes, the per-epoch step bound, any governance floor/ceiling, the demand-headroom tripwire\nand its epoch count, the response to sustained over-supply, update boundaries and immutable versions, with strategic-vote, cartel and\nunder-supply analysis against measured provider costs; binding prices are the epoch tariff under\nR5.4e. Accepted tariff versions\n**MUST** remain versioned reservation inputs; hardware costs, token conversion assumptions, and demand/margin\nestimates **MUST** remain operator/simulator inputs. Home: §5.4, F.7, G.4. Decision: D-0506. Blocking: profile ratification,\neconomic/adversarial evidence, E.47 placement/repair evidence, and an end-to-end implementation witness.\nTracking: #1564, #1565, #1566, #1567, #1568, #1569; Lean, Quint and simulation evidence landed in\n#2397, #2142 and #2152.\n\n**E.40 — Agent & staker leg distribution `[TBD]`.** Specify how the\n[`agent_share_ppt`](#param-agent_share_ppt) (10%) and [`staker_share_ppt`](#param-staker_share_ppt) (5%)\npools are paid out: under D-0530, the 5% [`staker_share_ppt`](#param-staker_share_ppt) leg is allocated to\nthe **duration-locked community staking pool** across seven lock duration tiers with zero slashing risk and\nno validator or miner intermediary (exact tier weights and claim distribution mechanics remain E.40); the\neligible set for the agent leg and its pro-rata basis (agents: verified inference spend, unconfirmed),\ncadence, dust handling, and, for the staker leg, whether payouts are liquid on issue (agent-leg payouts are\nliquid under R9.13). The agent leg must also choose its accounting unit (owner account, delegate key, or\nregistered agent identity), whether owner-signed spend outside the §6.2 delegate caps counts\n(yellowpaper#31), and its spend basis: escrow-settled reserved value or work-settled `Σ G_n` over\nco-signed, TOPLOC-carrying turns (yellowpaper#32). Per-identity accounting makes identity count the reward\nlever, so per-identity credits need verifiable-demand gating. Until this ratifies both legs accrue in\nsovereign pool accounts and are never distributed (§9.1 R9.12). *Placeholder:* duration-locked community\nstaking pool across 7 tiers for the staker leg; the agent accounting unit and spend basis remain\nunconfirmed, with both escrow-settled and work-settled bases open. Home: §9. Blocking: #1350, #1351.\n\n---"},{"name":"Section: Appendix I","before":"## Appendix I — Runtime Composition\n\nThe `construct_runtime!` inventory (source: `pallets/runtime/zkverify/src/lib.rs`). **Pallet indices are\nconsensus- and encoding-critical:** they prefix every dispatch and storage key, so an index change is a\nbreaking runtime upgrade requiring a migration (§14.1). Indices are stable identifiers, not a sequence —\ngaps are intentional (removed pallets are not reused). This appendix is normative for the index values.\n\n**Core / system**\n\n| Idx | Pallet | Role |\n|----:|--------|------|\n| 0 | `frame_system` | base runtime |\n| 1 · 2 | `scheduler` · `preimage` | governance enactment / timelock / large-call storage (§14) |\n| 3 | `timestamp` | block time |\n| 4 | `balances` | token accounts; existential deposit (§6.5) |\n| 5 | `transaction_payment` | fee model (§4.2, §9) |\n\n**Consensus**\n\n| Idx | Pallet | Role |\n|----:|--------|------|\n| 6 | `authorship` | block author note |\n| 8 · 9 | `offences` · `session_historical` | offence reports / historical session proofs (slashing, §11) |\n| 10 · 11 · 13 | `babe` · `session` · `authority_discovery` | BABE authoring; session keys; peer discovery (§2) |\n| 104 | `aleph` | AlephBFT committee snapshot + `LastFinalized` → `FinalizedPrefix` (§2, §15.4) |\n\n*Removed (D-0408): `pallet_staking` (was 7) and `bags_list` (was 19) — `validators` (96) is the sole\nauthority source (§6.1).*\n\n**Governance & utility**\n\n| Idx | Pallet | Role |\n|----:|--------|------|\n| 14 | `treasury` | on-chain treasury (§14) |\n| 15 · 16 · 17 | `conviction_voting` · `referenda` · `custom_origins` | OpenGov (§14.1–§14.2) |\n| 25 · 26 | `bounties` · `child_bounties` | treasury bounties |\n| 30–33 | `utility` · `multisig` · `proxy` · `identity` | batching; multisig (§6.1); proxy delegation (§6.1); identity |\n| 99 · 105 | `emergency_override` · `emergency_pause` | break-glass + circuit breaker (§14.1 R14.6) |\n\n**Bootstrap (removed at mainnet genesis handoff)**\n\n| Idx | Pallet | Role |\n|----:|--------|------|\n| 50 | `sudo` | bootstrap Root; **neutered + removed** at de-sudo (§14.1 R14.3/R14.5) |\n| 51 | `vesting` | generic vesting; removable once vesting completes |\n\n**FLOP protocol**\n\n| Idx | Pallet | Role · spec § |\n|----:|--------|---------------|\n| 81 | `aggregate` | verified-statement Merkle roots for cross-chain dispatch (§3.6) |\n| 83 · 84 | `token_claim` · `crl` | airdrop claims · certificate revocation |\n| 85 | `has_station` | HTLC + predicate escrow (§10) |\n| 86 | `flop_poui` | PoUI proof verification, validator attestation, `flop_meter` (§3.6, §4) |\n| 87 | `hw_calibration` | aggregate host calibration cap + renewable lease (§7) |\n| 88 · 91 | `work_vesting` · `airdrop_vesting` | `R_p²` performance vesting (§8) · airdrop vesting (§9) |\n| 89 | `synthetic_tasks` | Ghost Tasks — liveness + correctness canary (§8.1) |\n| 90 | `attest` | shared attestation-profile registry (§3.6) |\n| 92 · 93 | `block_rewards` · `flop_subsidy` | emission split (§9) · era-0 Labs/Foundation subsidy (§9) |\n| 94 · 95 · 106 | `session_keys` · `agent_wallet` · `agent_identity` | agent delegation + caps + circuit breaker (§6.2) |\n| 96 · 97 · 98 · 100 | `validators` · `miner_staking` · `delegation_cap` · `miner_slashing` | validator authority + rotation + slashing (§15); miner stake + delegation cap + slashing (§6.1, §11) |\n| 101 · 102 · 103 | `model_registry` · `da_registry` · `compute_channel` | measured roots + decode-policy pins (§3.3); sovereign DA (§5.3); sessions (§12) |\n| 107 | `metering_verifier` | metering-certificate verification (§4, E.34) |\n\n**Settlement verifiers** (`160–170`) — **zkVerify aggregation, not inference proofs** (§3.6):\n`common` (160), `groth16` (161), `risc0` (162), `ultraplonk` (163), `plonky2` (165), `fflonk` (166),\n`sp1` (167), `ultrahonk` (168), `ezkl` (169), `tee` (170).","after":"## Appendix I — Runtime Composition\n\nThe `construct_runtime!` inventory (source: `pallets/runtime/zkverify/src/lib.rs`). **Pallet indices are\nconsensus- and encoding-critical:** they prefix every dispatch and storage key, so an index change is a\nbreaking runtime upgrade requiring a migration (§14.1). Indices are stable identifiers, not a sequence —\ngaps are intentional (removed pallets are not reused). This appendix is normative for the index values.\n\n**Core / system**\n\n| Idx | Pallet | Role |\n|----:|--------|------|\n| 0 | `frame_system` | base runtime |\n| 1 · 2 | `scheduler` · `preimage` | governance enactment / timelock / large-call storage (§14) |\n| 3 | `timestamp` | block time |\n| 4 | `balances` | token accounts; existential deposit (§6.5) |\n| 5 | `transaction_payment` | fee model (§4.2, §9) |\n\n**Consensus**\n\n| Idx | Pallet | Role |\n|----:|--------|------|\n| 6 | `authorship` | block author note |\n| 8 · 9 | `offences` · `session_historical` | offence reports / historical session proofs (slashing, §11) |\n| 10 · 11 · 13 | `babe` · `session` · `authority_discovery` | BABE authoring; session keys; peer discovery (§2) |\n| 104 | `aleph` | AlephBFT committee snapshot + `LastFinalized` → `FinalizedPrefix` (§2, §15.4) |\n\n*Removed (D-0408): `pallet_staking` (was 7) and `bags_list` (was 19) — `validators` (96) is the sole\nauthority source (§6.1).*\n\n**Governance & utility**\n\n| Idx | Pallet | Role |\n|----:|--------|------|\n| 14 | `treasury` | on-chain treasury (§14) |\n| 15 · 16 · 17 | `conviction_voting` · `referenda` · `custom_origins` | OpenGov (§14.1–§14.2) |\n| 25 · 26 | `bounties` · `child_bounties` | treasury bounties |\n| 30–33 | `utility` · `multisig` · `proxy` · `identity` | batching; multisig (§6.1); proxy delegation (§6.1); identity |\n| 99 · 105 | `emergency_override` · `emergency_pause` | break-glass + circuit breaker (§14.1 R14.6) |\n\n**Bootstrap (removed at mainnet genesis handoff)**\n\n| Idx | Pallet | Role |\n|----:|--------|------|\n| 50 | `sudo` | bootstrap Root; **neutered + removed** at de-sudo (§14.1 R14.3/R14.5) |\n| 51 | `vesting` | generic vesting; removable once vesting completes |\n\n**FLOP protocol**\n\n| Idx | Pallet | Role · spec § |\n|----:|--------|---------------|\n| 81 | `aggregate` | verified-statement Merkle roots for cross-chain dispatch (§3.6) |\n| 83 · 84 | `token_claim` · `crl` | airdrop claims · certificate revocation |\n| 85 | `has_station` | HTLC + predicate escrow (§10) |\n| 86 | `flop_poui` | PoUI proof verification, validator attestation, `flop_meter` (§3.6, §4) |\n| 87 | `hw_calibration` | aggregate host calibration cap + renewable lease (§7) |\n| 88 · 91 | `work_vesting` · `airdrop_vesting` | `R_p²` performance vesting (§8) · airdrop vesting (§8.2) |\n| 89 | `synthetic_tasks` | Ghost Tasks — liveness + correctness canary (§8.1) |\n| 90 | `attest` | shared attestation-profile registry (§3.6) |\n| 92 · 93 | `block_rewards` · `flop_subsidy` | emission split (§9) · era-0 Labs/Foundation subsidy (§9) |\n| 94 · 95 · 106 | `session_keys` · `agent_wallet` · `agent_identity` | agent delegation + caps + circuit breaker (§6.2) |\n| 96 · 97 · 98 · 100 | `validators` · `miner_staking` · `delegation_cap` · `miner_slashing` | validator authority + rotation + slashing (§15); miner self-stake + slashing (§6.1, §11; `delegation_cap` and `miner_staking::delegate` deprecated per D-0530) |\n| 101 · 102 · 103 | `model_registry` · `da_registry` · `compute_channel` | measured roots + decode-policy pins (§3.3); sovereign DA (§5.3); sessions (§12) |\n| 107 | `metering_verifier` | metering-certificate verification (§4, E.34) |\n\n**Settlement verifiers** (`160–170`) — **zkVerify aggregation, not inference proofs** (§3.6):\n`common` (160), `groth16` (161), `risc0` (162), `ultraplonk` (163), `plonky2` (165), `fflonk` (166),\n`sp1` (167), `ultrahonk` (168), `ezkl` (169), `tee` (170)."},{"name":"Section: F.3","before":"### F.3 Session transcript (compute-channel, §12.1)\n\n| Structure | Fields | Constraint |\n|-----------|--------|-----------|\n| `SettlementClass` | `Standard=0`, `CertificatePremium=1` | selected and fixed by `open_channel`; `force_open` implies `Standard`; `CertificatePremium` enables certificate-backed settlement; unknown tags reject under F.0 |\n| `TranscriptLeafVersion` | `V0=0`, `V1=1`, `V2=2`, `V3=3` | mandatory SCALE enum at the start of every current settlement/dispute turn container; unknown tags reject; verifier selects exactly one preimage and never retries |\n| `VerifiedTurn` | ordered: `leaf_version`, `turn_index:u32`, `h_in:H256`, `h_out:H256`, `g_n:u128`, `decode_policy_hash:H256`, `h_ids:H256`, `toploc_commitment_hash:H256`, `miner_recv_ms:u64`, `miner_done_ms:u64`, `latency_ms:u64`, `enclave_sig:[u8;64]`, `merkle_path:Vec<(H256,bool)>` | SCALE size `269 + compact_len(L) + 33L` B for path length `L` |\n| `h_ids` v1 | `prompt_ids:u32[]`, `generated_ids:u32[]` | `blake2_256(prompt_count:u32LE ‖ prompt_ids:u32LE… ‖ generated_count:u32LE ‖ generated_ids:u32LE…)`; both counts are fixed-width `u32LE`, not SCALE `Compact`; each token ID is `u32LE` |\n| V3 leaf | `blake2_256(channel_id ‖ turn_index:u32LE ‖ h_in ‖ h_out ‖ g_n:u128LE ‖ decode_policy_hash ‖ h_ids ‖ toploc_commitment_hash ‖ miner_recv_ms:u64LE ‖ miner_done_ms:u64LE ‖ latency_ms:u64LE)` | 236 B preimage; signature is over the 32 B leaf hash; `h_ids` MUST be non-zero in FCC4 |\n| V2 leaf | V3 without `h_ids` and `toploc_commitment_hash` | 172 B preimage; binds decode policy but does not claim V3 token-ID/TOPLOC binding (#1404) |\n| V1 leaf | V2 without `decode_policy_hash` | 140 B preimage; legacy only where the channel has no `ChannelDecodePolicies` marker (#686) |\n| V0 leaf | V1 without the three timing fields | 116 B preimage; legacy only where the channel has no `ChannelDecodePolicies` marker |\n| Merkle path | each item `(sibling_hash:H256, sibling_is_left:bool)`; node = `blake2_256(left ‖ right)` | leaf order is turn order; left is first; an odd last node is duplicated; empty root is `00×32`; single-leaf root is the leaf; node has no prefix because its 64 B preimage is length-disjoint from every leaf preimage |\n| per-turn agent ack | sr25519 under the channel's agent key over `channel_id ‖ turn_index:u32LE ‖ leaf_hash ‖ agent_send_ms:u64LE ‖ agent_recv_ms:u64LE` | counter-signs the leaf hash and both timing inputs; distinct from agent receipt v1; implemented by `turn_ack_message` in `sdk/typescript/src/compute-channel/transcript.ts` and `sdk/rust-compute-channel/src/transcript.rs` |\n| agent receipt v1 | sr25519 over `\"FLOP/COMPUTE_CHANNEL/RECEIPT\" ‖ 01 ‖ channel_id ‖ final_root ‖ aggregate_gn:u128LE ‖ payable:u128LE` | authorizes the exact channel, root, aggregate, and settlement amount; `payable` is a `u128LE` count of 10⁻¹⁸ FLOP base units and is the gross receipt-bound settlement amount before audit and forward adjustments, derived as full reserved escrow for cooperative `settle`, the R12.1d tariff `P` for `force_settle`, or the stored `contract_payment` override for a forward channel (R12.1i); the net transfer to the miner is `payable` less the audit earmark, and a forward channel additionally refunds unearned availability to the buyer; current channels only |\n| `aggregate_gn` check | checked sum of distinct submitted `VerifiedTurn.g_n` after signature/path verification (`verified_work_from_turns`) | MUST equal `aggregate_gn`; arithmetic/authentication only (§11.2 R11.2a) |\n| bundle bounds | ≤ [`channel_max_settlement_turns`](#param-channel_max_settlement_turns) turns; path ≤ [`channel_max_merkle_path_len`](#param-channel_max_merkle_path_len) | — |\n| `ChallengeWindowExtensions` | `channel_id:H256 → extensions:u8` | per-channel degraded DA deadline-extension count, at most 1 (R13.0b); the sole extension adds [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks) to the live challenge or response deadline and is cleared when the channel closes |\n\n`SettlementClass` selects settlement semantics; it is not the HARD/SOFT assurance tier. The latter is\na separate miner-calibration snapshot captured at cooperative `open_channel` or permissionless\n`force_ack`. The `enclave_key` argument supplied on either path is a session signing key; the pallet\ndoes not verify or imply TEE provenance for that key.\n\n**R12.1i — Receipt `payable`.** Verification **MUST** derive the agent receipt v1 `payable` from\nchannel state and the settlement path, as the row above defines it.\n\n**Accepted-version cutoff.** A present `ChannelDecodePolicies[channel_id]` accepts only explicitly tagged\nV2/V3 leaves and requires an equal policy hash; an absent marker (a channel opened before policy binding)\naccepts explicit V0–V3. `ChannelWireProfiles[channel_id]=1` requires receipt v1; an absent marker accepts\nonly the historical untagged 96 B receipt preimage, and an unknown value fails closed. New opens write the\ndecode-policy and wire-profile markers. Existing channel\nrecords and amounts are not rewritten. V2 remains an explicitly lower evidence format and **MUST NOT** be\nreported as V3/TOPLOC-bound assurance. SDK hosts refuse a TOPLOC-bearing V2 leaf (#1404); removing the\nruntime's remaining acceptance or adding a binding is decision #1594.\n\n**R12.1j — Per-channel decode policy.** At open, `ChannelDecodePolicies[channel_id]` pins one\n`decode_policy_hash`. That hash **MUST** be identical across every V2/V3 turn under the `channel_id` and\n**MUST NOT** vary by turn, regardless of how many agents participate in the pipeline.\n\n**DA transcript container.** Current SDKs emit `FCC4 ‖ channel_id:H256 ‖ turn_count:u32LE`, followed by each\nturn as `leaf_version:u8 ‖ turn_index:u32LE ‖ h_in ‖ h_out ‖ g_n:u128LE ‖ has_policy:u8 [‖ policy_hash] ‖\nh_ids:H256 ‖ toploc_hash:H256 ‖ recv:u64LE ‖ done:u64LE ‖ latency:u64LE ‖ enclave_sig:[u8;64] ‖ has_ack:u8\n[‖ send:u64LE ‖ receive:u64LE ‖ agent_sig:[u8;64]]`, where `agent_sig` signs `channel_id ‖\nturn_index:u32LE ‖ leaf_hash ‖ send:u64LE ‖ receive:u64LE` under the channel's agent key. `has_*` is\nexactly 0/1. FCC4 version/field consistency\nis fail-closed: V0/V1 have no policy and zero V3 fields; V2 has a policy and zero V3 fields; V3 has a policy\nand non-zero `h_ids`. Decoders consume exactly the declared turns and reject trailing/truncated bytes. Rust/TS\nmay read historical unprefixed/FCC2/FCC3 blobs only to migrate them into an explicit in-memory leaf version;\nthey never make an on-chain version choice from signature success.","after":"### F.3 Session transcript (compute-channel, §12.1)\n\n| Structure | Fields | Constraint |\n|-----------|--------|-----------|\n| `SettlementClass` | `Standard=0`, `CertificatePremium=1` | selected and fixed by `open_channel`; `force_open` implies `Standard`; `CertificatePremium` enables certificate-backed settlement; unknown tags reject under F.0 |\n| `SessionEvidenceSlot` | `Activation(u32)=0`, `Transcript=1` | immutable per-channel DA allocation; activation index below SLA max_turns; unknown tags reject |\n| `TranscriptLeafVersion` | `V0=0`, `V1=1`, `V2=2`, `V3=3` | mandatory SCALE enum at the start of every current settlement/dispute turn container; unknown tags reject; verifier selects exactly one preimage and never retries |\n| `VerifiedTurn` | ordered: `leaf_version`, `turn_index:u32`, `h_in:H256`, `h_out:H256`, `g_n:u128`, `decode_policy_hash:H256`, `h_ids:H256`, `toploc_commitment_hash:H256`, `miner_recv_ms:u64`, `miner_done_ms:u64`, `latency_ms:u64`, `enclave_sig:[u8;64]`, `merkle_path:Vec<(H256,bool)>` | SCALE size `269 + compact_len(L) + 33L` B for path length `L` |\n| `h_ids` v1 | `prompt_ids:u32[]`, `generated_ids:u32[]` | `blake2_256(prompt_count:u32LE ‖ prompt_ids:u32LE… ‖ generated_count:u32LE ‖ generated_ids:u32LE…)`; both counts are fixed-width `u32LE`, not SCALE `Compact`; each token ID is `u32LE` |\n| V3 leaf | `blake2_256(channel_id ‖ turn_index:u32LE ‖ h_in ‖ h_out ‖ g_n:u128LE ‖ decode_policy_hash ‖ h_ids ‖ toploc_commitment_hash ‖ miner_recv_ms:u64LE ‖ miner_done_ms:u64LE ‖ latency_ms:u64LE)` | 236 B preimage; signature is over the 32 B leaf hash; `h_ids` MUST be non-zero in FCC4 |\n| V2 leaf | V3 without `h_ids` and `toploc_commitment_hash` | 172 B preimage; binds decode policy but does not claim V3 token-ID/TOPLOC binding (#1404) |\n| V1 leaf | V2 without `decode_policy_hash` | 140 B preimage; legacy only where the channel has no `ChannelDecodePolicies` marker (#686) |\n| V0 leaf | V1 without the three timing fields | 116 B preimage; legacy only where the channel has no `ChannelDecodePolicies` marker |\n| Merkle path | each item `(sibling_hash:H256, sibling_is_left:bool)`; node = `blake2_256(left ‖ right)` | leaf order is turn order; left is first; an odd last node is duplicated; empty root is `00×32`; single-leaf root is the leaf; node has no prefix because its 64 B preimage is length-disjoint from every leaf preimage |\n| per-turn agent ack | sr25519 under the channel's agent key over `channel_id ‖ turn_index:u32LE ‖ leaf_hash ‖ agent_send_ms:u64LE ‖ agent_recv_ms:u64LE` | counter-signs the leaf hash and both timing inputs; distinct from agent receipt v1; implemented by `turn_ack_message` in `sdk/typescript/src/compute-channel/transcript.ts` and `sdk/rust-compute-channel/src/transcript.rs` |\n| agent receipt v1 | sr25519 over `\"FLOP/COMPUTE_CHANNEL/RECEIPT\" ‖ 01 ‖ channel_id ‖ final_root ‖ aggregate_gn:u128LE ‖ payable:u128LE` | authorizes the exact channel, root, aggregate, and settlement amount; `payable` is a `u128LE` count of 10⁻¹⁸ FLOP base units and is the gross receipt-bound settlement amount, derived as full reserved escrow for cooperative `settle`, the R12.1d tariff `P` for `force_settle`, or the stored `contract_payment` override for a forward channel (R12.1i); at settlement, `payable` is split 85% to the miner ([`inference_fee_miner_share_ppt`](#param-inference_fee_miner_share_ppt)) and 15% to validators ([`inference_fee_validator_share_ppt`](#param-inference_fee_validator_share_ppt)), from which the 1% audit earmark ([`audit_fee_split_ppm`](#param-audit_fee_split_ppm)) is funded (D-0525), and a forward channel additionally refunds unearned availability to the buyer; current channels only |\n| `aggregate_gn` check | checked sum of distinct submitted `VerifiedTurn.g_n` after signature/path verification (`verified_work_from_turns`) | MUST equal `aggregate_gn`; arithmetic/authentication only (§11.2 R11.2a) |\n| bundle bounds | ≤ [`channel_max_settlement_turns`](#param-channel_max_settlement_turns) turns; path ≤ [`channel_max_merkle_path_len`](#param-channel_max_merkle_path_len) | — |\n| `ChallengeWindowExtensions` | `channel_id:H256 → extensions:u8` | per-channel degraded DA deadline-extension count, at most 1 (R13.0b); the sole extension adds [`channel_dispute_response_window_blocks`](#param-channel_dispute_response_window_blocks) to the live challenge or response deadline and is cleared when the channel closes |\n\n`SettlementClass` selects settlement semantics; it is not the HARD/SOFT assurance tier. The latter is\na separate miner-calibration snapshot captured at cooperative `open_channel` or permissionless\n`force_ack`. The `enclave_key` argument supplied on either path is a session signing key; the pallet\ndoes not verify or imply TEE provenance for that key.\n\n**R12.1i — Receipt `payable`.** Verification **MUST** derive the agent receipt v1 `payable` from\nchannel state and the settlement path, as the row above defines it.\n\n**Accepted-version cutoff.** A present `ChannelDecodePolicies[channel_id]` accepts only explicitly tagged\nV2/V3 leaves and requires an equal policy hash; an absent marker (a channel opened before policy binding)\naccepts explicit V0–V3. `ChannelWireProfiles[channel_id]=1` requires receipt v1; an absent marker accepts\nonly the historical untagged 96 B receipt preimage, and an unknown value fails closed. New opens write the\ndecode-policy and wire-profile markers. Existing channel\nrecords and amounts are not rewritten. V2 remains an explicitly lower evidence format and **MUST NOT** be\nreported as V3/TOPLOC-bound assurance. SDK hosts refuse a TOPLOC-bearing V2 leaf (#1404); removing the\nruntime's remaining acceptance or adding a binding is decision #1594.\n\n**R12.1j — Per-channel decode policy.** At open, `ChannelDecodePolicies[channel_id]` pins one\n`decode_policy_hash`. That hash **MUST** be identical across every V2/V3 turn under the `channel_id` and\n**MUST NOT** vary by turn, regardless of how many agents participate in the pipeline.\n\n**DA transcript container.** Current SDKs emit `FCC4 ‖ channel_id:H256 ‖ turn_count:u32LE`, followed by each\nturn as `leaf_version:u8 ‖ turn_index:u32LE ‖ h_in ‖ h_out ‖ g_n:u128LE ‖ has_policy:u8 [‖ policy_hash] ‖\nh_ids:H256 ‖ toploc_hash:H256 ‖ recv:u64LE ‖ done:u64LE ‖ latency:u64LE ‖ enclave_sig:[u8;64] ‖ has_ack:u8\n[‖ send:u64LE ‖ receive:u64LE ‖ agent_sig:[u8;64]]`, where `agent_sig` signs `channel_id ‖\nturn_index:u32LE ‖ leaf_hash ‖ send:u64LE ‖ receive:u64LE` under the channel's agent key. `has_*` is\nexactly 0/1. FCC4 version/field consistency\nis fail-closed: V0/V1 have no policy and zero V3 fields; V2 has a policy and zero V3 fields; V3 has a policy\nand non-zero `h_ids`. Decoders consume exactly the declared turns and reject trailing/truncated bytes. Rust/TS\nmay read historical unprefixed/FCC2/FCC3 blobs only to migrate them into an explicit in-memory leaf version;\nthey never make an on-chain version choice from signature success."},{"name":"Section: G.1","before":"### G.1 Compute channel — `pallet_compute_channel` (sole inference-dispatch path, §12.1)\n\n| Extrinsic | Origin | Effect | Key errors |\n|-----------|--------|--------|-----------|\n| `open_channel(miner, model_hash, measured_root, decode_policy_hash, precision, enclave_key, agent_key, sla, escrow, nonce, settlement_class)` | agent (signed) | reserve escrow; fix Appendix F.3 `SettlementClass`; snapshot the miner-calibration assurance tier; verify measured root vs. registry; state → `Open` | root mismatch; reservation-cap exceeded; expired lease |\n| `force_open(miner, model_hash, measured_root, decode_policy_hash, precision, agent_key, sla, escrow, nonce)` | agent (signed) | fix `SettlementClass::Standard`; state → `PendingAck { ack_deadline }`; no session signing key bound | reservation-cap exceeded |\n| `force_ack(channel_id, enclave_key)` | named miner (signed) | bind the provenance-neutral session signing key; snapshot the miner-calibration assurance tier; state → `Open` | not the named miner; window elapsed |\n| `expire_force_open(channel_id)` | anyone (signed) | refund escrow in full; `FailedAcks += 1` if escrow ≥ floor | still within ack window |\n| `top_up_escrow(channel_id, amount)` | agent (signed) | raise reserved-capacity cap (splice-in) | channel not `Open` |\n| `settle(channel_id, final_root, aggregate_gn, claimed_measured_root, agent_receipt_sig, transcript_ref, verified_turns)` | miner (signed); agent bilaterally signs receipt | verify versioned receipt, every explicitly versioned turn signature/path, distinct indices, checked aggregate, calibration/`GnSink`, measured root, required TOPLOC record, and no open escalation; immediate private reserved-escrow payout; no public work credit (R11.2b/E.44) | `BadReceiptSignature`; `UnsupportedLeafVersion`; `AggregateGnMismatch`; `TooManySettlementTurns`; `MerklePathTooLong`; `GnTripwireRejected`; root/TOPLOC/escalation errors |\n| `force_settle(channel_id, final_root, aggregate_gn, claimed_measured_root, agent_receipt_sig, transcript_ref, verified_turns)` | miner or agent (signed) | verify the same receipt/turn/claim gates; compute two-part tariff `P`; open challenge window | receipt/turn/root/claim errors; rejects `P > E` with `TariffExceedsEscrow` (R12.1d) |\n| `finalize(channel_id)` | anyone (signed) | after the challenge window, pay `P` → miner, `(1−φ)(E−P)` → agent, `φ(E−P)` → burn/Foundation; `P` is in the escrow's base unit (10⁻¹⁸ FLOP), with `channel_base_per_turn = rate_G = 1` base unit | window not elapsed; open dispute |\n| `timeout(channel_id)` | anyone (signed) | non-delivery → full refund (`φ=0`) | not past `max_duration` |\n| `open_dispute(channel_id, contested_turn)` | session agent or active validator | lock [`channel_challenger_bond`](#param-channel_challenger_bond); contest one settled turn, which the miner answers with `respond_dispute` | `NoDisputeStanding`; `DisputeTurnNotSettled`; `DisputeExists`; window elapsed; transcript unavailable |\n| `open_bisection_dispute(channel_id, n_turns)` | session agent or active validator | lock the challenger bond; `n_turns` equals the settled power-of-two leaf count (2 to `MaxSettlementTurns`); begin midpoint rounds over the whole bundle | `BisectionBadTurnCount`; `DisputeTurnNotSettled`; standing and window errors as `open_dispute` |\n| `respond_bisection(channel_id, left_root, right_root)` | named miner (signed) | open the two child roots, whose hash equals the interval's parent root; reset the response window | `NotAParty`; `BisectionNotAwaitingResponse`; `BisectionBadChildRoots`; window elapsed |\n| `challenge_bisection(channel_id, choose_left)` | the dispute's challenger | pick the left or right half; once one turn remains, the miner answers with `respond_dispute` | `NotAParty`; `BisectionNotAwaitingChallenge`; `BisectionRoundCap`; window elapsed |\n| `respond_dispute(channel_id, leaf_version, turn_index, h_in, h_out, g_n, decode_policy_hash, h_ids, toploc_commitment_hash, miner_recv_ms, miner_done_ms, latency_ms, enclave_sig, merkle_path)` | miner (signed) | select exactly one Appendix F leaf preimage; verify signature + Merkle membership | unsupported version; bad signature/path; window elapsed → fraud default |\n| `report_toploc_mismatch(channel_id, evidence)` | active validator | quorum-judged activation mismatch → forgery slash | uncalibrated cell (fail-closed inert) |","after":"### G.1 Compute channel — `pallet_compute_channel` (sole inference-dispatch path, §12.1)\n\n| Extrinsic | Origin | Effect | Key errors |\n|-----------|--------|--------|-----------|\n| `open_channel(miner, model_hash, measured_root, decode_policy_hash, precision, enclave_key, agent_key, sla, escrow, nonce, settlement_class)` | agent (signed) | reserve escrow; fix Appendix F.3 `SettlementClass`; snapshot the miner-calibration assurance tier; verify measured root vs. registry; state → `Open` | root mismatch; reservation-cap exceeded; expired lease |\n| `force_open(miner, model_hash, measured_root, decode_policy_hash, precision, agent_key, sla, escrow, nonce)` | agent (signed) | fix `SettlementClass::Standard`; state → `PendingAck { ack_deadline }`; no session signing key bound | reservation-cap exceeded |\n| `force_ack(channel_id, enclave_key)` | named miner (signed) | bind the provenance-neutral session signing key; snapshot the miner-calibration assurance tier; state → `Open` | not the named miner; window elapsed |\n| `register_session_evidence(channel_id, slot, commitment, size_bytes:u32)` | named miner (signed) | funded Open channel only; allocate bounded Ephemeral DA via R5.3g; identical retry preserves expiry; emit SessionEvidenceRegistered only for a new slot | NotAParty; BadState; ZeroToplocCommitment; VerifiedTurnOutOfBounds; SessionEvidenceTooLarge; SessionEvidenceConflict; registry errors |\n| `expire_force_open(channel_id)` | anyone (signed) | refund escrow in full; `FailedAcks += 1` if escrow ≥ floor | still within ack window |\n| `top_up_escrow(channel_id, amount)` | agent (signed) | raise reserved-capacity cap (splice-in) | channel not `Open` |\n| `settle(channel_id, final_root, aggregate_gn, claimed_measured_root, agent_receipt_sig, transcript_ref, verified_turns)` | miner (signed); agent bilaterally signs receipt | verify versioned receipt, every explicitly versioned turn signature/path, distinct indices, checked aggregate, calibration/`GnSink`, measured root, required TOPLOC record, and no open escalation; immediate private reserved-escrow payout; no public work credit (R11.2b/E.44) | `BadReceiptSignature`; `UnsupportedLeafVersion`; `AggregateGnMismatch`; `TooManySettlementTurns`; `MerklePathTooLong`; `GnTripwireRejected`; root/TOPLOC/escalation errors |\n| `force_settle(channel_id, final_root, aggregate_gn, claimed_measured_root, agent_receipt_sig, transcript_ref, verified_turns)` | miner or agent (signed) | verify the same receipt/turn/claim gates; compute two-part tariff `P`; open challenge window | receipt/turn/root/claim errors; rejects `P > E` with `TariffExceedsEscrow` (R12.1d) |\n| `finalize(channel_id)` | anyone (signed) | after the challenge window, pay `P` → miner, `(1−φ)(E−P)` → agent, `φ(E−P)` → burn/Foundation; `P` is in the escrow's base unit (10⁻¹⁸ FLOP), with `channel_base_per_turn = rate_G = 1` base unit | window not elapsed; open dispute |\n| `timeout(channel_id)` | anyone (signed) | non-delivery → full refund (`φ=0`) | not past `max_duration` |\n| `open_dispute(channel_id, contested_turn)` | session agent or active validator | lock [`channel_challenger_bond`](#param-channel_challenger_bond); contest one settled turn, which the miner answers with `respond_dispute` | `NoDisputeStanding`; `DisputeTurnNotSettled`; `DisputeExists`; window elapsed; transcript unavailable |\n| `open_bisection_dispute(channel_id, n_turns)` | session agent or active validator | lock the challenger bond; `n_turns` equals the settled power-of-two leaf count (2 to `MaxSettlementTurns`); begin midpoint rounds over the whole bundle | `BisectionBadTurnCount`; `DisputeTurnNotSettled`; standing and window errors as `open_dispute` |\n| `respond_bisection(channel_id, left_root, right_root)` | named miner (signed) | open the two child roots, whose hash equals the interval's parent root; reset the response window | `NotAParty`; `BisectionNotAwaitingResponse`; `BisectionBadChildRoots`; window elapsed |\n| `challenge_bisection(channel_id, choose_left)` | the dispute's challenger | pick the left or right half; once one turn remains, the miner answers with `respond_dispute` | `NotAParty`; `BisectionNotAwaitingChallenge`; `BisectionRoundCap`; window elapsed |\n| `respond_dispute(channel_id, leaf_version, turn_index, h_in, h_out, g_n, decode_policy_hash, h_ids, toploc_commitment_hash, miner_recv_ms, miner_done_ms, latency_ms, enclave_sig, merkle_path)` | miner (signed) | select exactly one Appendix F leaf preimage; verify signature + Merkle membership | unsupported version; bad signature/path; window elapsed → fraud default |\n| `report_toploc_mismatch(channel_id, evidence)` | active validator | quorum-judged activation mismatch → forgery slash | uncalibrated cell (fail-closed inert) |"},{"name":"Section: G.3","before":"### G.3 Staking, calibration, vesting, DA, HTLC\n\n| Extrinsic | Pallet | Effect |\n|-----------|--------|--------|\n| `register_miner(commission)` / unbond | `miner_staking` | bond ≥ capacity-proportional requirement (§6.1); slash-locked unbond |\n| `register` / `rotate` / `do_slash` | `validators` | self-stake register → queue; stake-ordered rotation; single slash authority |\n| `accept_benchmark_burst(...)` / `renew_benchmark_cap(...)` | `hw_calibration` | stake-backed aggregate cap / lease renewal |\n| `claim_vested()` | `airdrop_vesting`; beneficiary (signed) | use the finalized head; require an existing grant and positive unlocked amount above `claimed`; reduce the grant freeze and emit `AirdropClaimed`; errors `NoGrant`, `NothingToClaim` |\n| `update_miner_performance(miner, mainnet_performance)` | `airdrop_vesting`; Root | require a Miner grant, a testnet baseline, and positive mainnet score; update the score and emit `MinerPerformanceUpdated`; errors `NoGrant`, `InvalidPerformanceScore` |\n| `record_attested_gpu_inventory(...)` / `record_hardware_fingerprint(...)` | `hw_calibration` | identity binding; change invalidates |\n| `batch_issue_calibration_jobs(...)` | `synthetic_tasks` | issuer-selected timed one-shot pack |\n| `create_grant(miner, amount)` | `work_vesting` | Root only; require the miner's non-zero finalized §7 calibration baseline and snapshot it as `B_p` (R8.1) |\n| `force_create_grant(miner, amount, pledge_baseline)` | `work_vesting` | Root only; explicitly bypass the finalized calibration-baseline check with a non-zero caller-supplied `B_p` (R8.1) |\n| `register_miner(model_hash, gpu_model, vram_gb, tee_type)` / `set_measured_root` | `model_registry` | model availability + measured dm-verity root |\n| DA register / audit / `top_up_lease` / `withdraw_lease(commitment)` | `da_registry` | `DataRef` commitment; serve-or-slash audit; free lease top-up; `withdraw_lease`: publisher (signed); requires an existing `Leased` blob, matching publisher, and `pin_count == 0`, with no `lease_end` condition; removes the blob (no further audits can be issued) and refunds the full deposit to the publisher; does not cancel an audit issued before withdrawal (E.47); errors `UnknownBlob`, `NotLeased`, `NotPublisher`, `BlobPinned`; emits `LeaseWithdrawn`, `LeaseDepositRefunded` |\n| `create/redeem/refund_htlc`, `create_cross_chain_htlc`, `relay_preimage`, `register_relayer` | `has-station` | HTLC lifecycle (§10); permissioned relayer |\n| session-key / agent-wallet delegation, caps, revoke | `session_keys` / `agent_wallet` | §6.2 delegated autonomy |\n\n---","after":"### G.3 Staking, calibration, vesting, DA, HTLC\n\n| Extrinsic | Pallet | Effect |\n|-----------|--------|--------|\n| `register_miner(commission)` / unbond *(commission, `delegate`, and `set_commission` deprecated, D-0530)* | `miner_staking` | self-stake bond ≥ capacity-proportional requirement (§6.1); slash-locked unbond |\n| `register` / `rotate` / `un_jail` / `rejoin` / `do_slash` | `validators` | `register` freezes `effective_minimum_stake()` and queues in `ValidatorQueue`; `rotate` promotes from `ValidatorQueue` to `ActiveValidators` and ejects/thaws; `un_jail` (after `MinJailBlocks` = 3,600 for liveness jail) and `rejoin` (for extended-downtime kicks, topping up self-stake to `effective_minimum_stake()`) restore directly to `ActiveValidators` while below `ActiveSetCap` = 1,000; single slash authority |\n| `sponsor_register_miner(miner, amount, commission, reward_policy)` / `sponsor_top_up(position_id, amount)` | `miner_staking`; sponsor (signed) | R6.1a; rejected unless [`sponsored_self_stake_enabled`](#param-sponsored_self_stake_enabled) (`SponsoredSelfStakeDisabled`). Register: `register_miner`'s admission checks, `amount ≥ required_self_stake_for(miner)`, sponsor backing beyond its existing staking freezes and index room; records own stake 0 plus an Active sponsor position frozen at the sponsor; emits `MinerRegistered{self_stake: 0}` then `SponsorPositionCreated`. Top-up grows the caller's Active position (`SponsorPositionToppedUp`). Release: `sponsor_unbond` → `sponsor_withdraw`; `deregister_miner` unbonds every Active position unless the miner is busy. The slash-proceeds account is rejected as sponsor here and, on enabled runtimes, in `sponsor_miner`. On enabled runtimes the sponsor may hold no other staking freeze in either staking pallet, here and in `sponsor_miner`, and a sponsor account cannot then `register_miner`, `top_up_self_stake` or `delegate` (`SponsorStakeOverlap`). `register_miner` and this call wait until the account's positions from an earlier registration are withdrawn (`StaleSponsorPositions`); the operator may withdraw them after the finalized unlock and fully unbond an orphaned one. A quarantine from the activation scan (`LegacyOverlapCount`) suspends all sponsored credit. Errors `InsufficientSelfStake`, `InvalidSponsorAmount`, `TooManySponsorPositions`, `NotSponsor`, `InvalidSponsorPositionStatus`, `SponsorIsSlashProceedsAccount`, `SponsorStakeOverlap` |\n| `sponsor_register_validator(validator, amount, reward_policy)` / `sponsor_top_up(position_id, amount)` | `validators`; sponsor (signed) | R6.1a; same gate. Register: `register`'s admission checks, `amount ≥ effective_minimum_stake()`, no active sponsorship left from an earlier registration (`StaleSponsorPositions`); queued like `register`; emits `ValidatorRegistered{self_stake: 0}` then `SponsorPositionCreated`. Top-up as for miners. `deregister` unbonds every Active position. The slash-proceeds account is rejected as sponsor here and, on enabled runtimes, in `sponsor_validator`. The same one-staking-freeze rule applies, with `register`, `rejoin` and `delegate` as the own-stake paths (`SponsorStakeOverlap`). On enabled runtimes `sponsor_unbond` moves an active validator it takes below the effective minimum back to the queue (`MinimumActiveValidators` at the floor) |\n| `accept_benchmark_burst(...)` / `renew_benchmark_cap(...)` | `hw_calibration` | stake-backed aggregate cap / lease renewal |\n| `claim_vested()` | `airdrop_vesting`; beneficiary (signed) | use the finalized head; require an existing grant and positive unlocked amount above `claimed`; reduce the grant freeze and emit `AirdropClaimed`; errors `NoGrant`, `NothingToClaim` |\n| `record_attested_gpu_inventory(...)` / `record_hardware_fingerprint(...)` | `hw_calibration` | identity binding; change invalidates |\n| `batch_issue_calibration_jobs(...)` | `synthetic_tasks` | issuer-selected timed one-shot pack |\n| `create_grant(miner, amount)` | `work_vesting` | Root only; require the miner's non-zero finalized §7 calibration baseline and snapshot it as `B_p` (R8.1) |\n| `force_create_grant(miner, amount, pledge_baseline)` | `work_vesting` | Root only; explicitly bypass the finalized calibration-baseline check with a non-zero caller-supplied `B_p` (R8.1) |\n| `register_miner(model_hash, gpu_model, vram_gb, tee_type)` / `set_measured_root` | `model_registry` | model availability + measured dm-verity root |\n| DA register / audit / `top_up_lease` / `withdraw_lease(commitment)` | `da_registry` | `DataRef` commitment; serve-or-slash audit; free lease top-up; `withdraw_lease`: publisher (signed); requires an existing `Leased` blob, matching publisher, and `pin_count == 0`, with no `lease_end` condition; removes the blob (no further audits can be issued) and refunds the full deposit to the publisher; does not cancel an audit issued before withdrawal (E.47); errors `UnknownBlob`, `NotLeased`, `NotPublisher`, `BlobPinned`; emits `LeaseWithdrawn`, `LeaseDepositRefunded` |\n| `create/redeem/refund_htlc`, `create_cross_chain_htlc`, `relay_preimage`, `register_relayer` | `has-station` | HTLC lifecycle (§10); permissioned relayer |\n| session-key / agent-wallet delegation, caps, revoke | `session_keys` / `agent_wallet` | §6.2 delegated autonomy |\n\n---"},{"name":"Section: H.1","before":"### H.1 Core protocol\n\n| Requirement / mechanism | § | Status |\n|-------------------------|---|--------|\n| Public claim evidence | §0 | PENDING: private Lean/Quint bundle reproduced under named hypotheses; public source/run bundle awaits a software-license grant; implementation refinement and empirical evidence remain open |\n| BABE authoring + AlephBFT finality (1 s blocks) | §2 | LIVE |\n| Per-rotation VRF committee sampling | §2.3, §15.4 | LIVE draw; ≤100 pool returns all; stake-only fallback drops recency whenever no active validator clears both the stake floor and recency (including every recent-work validator below the floor); capture/min-size proof GAP (E.42) |\n| Verification-liveness committee gate (R2.4, R15.4c) | §2.3, §15.4 | PLANNED: recency still written from prover credit only (`ValidatorWorkRecorder` credits the submitter of a verified PoUI proof); no protocol-issued duties; no attestation client (E.52). Until wired, only an account that also mines passes recency, paying the miner capacity bond and credit cap (§2.4), so the §2.3 stake-only committee cost does not yet hold |\n| Committee Sybil capital: self-stake vs backing | §2.3, §15.2 | GAP: the committee gate compares `total_stake` (self + delegated + sponsored) with `effective_minimum_stake()`, and that backing is not locked as distinct capital (`delegate` freezes without a balance check; `sponsor_validator` checks each tranche with `reducible_balance(.., Force)`, which ignores existing freezes; freezes overlap rather than add). Self-stake is floor-checked at `register`/`rejoin` and from the recorded bond at queue promotion; `MinSelfStakeRatio` is checked only when backing is added, and a liveness slash charges self-stake first while `un_jail` restores without a re-check (E.42) |\n| Queued validator self-stake top-up | §15.2, §15.5 | GAP: `register` bonds exactly the effective minimum; extra free balance does not increase recorded self-stake. `rejoin` tops up only extended-downtime-kicked validators, so a queued candidate below a raised floor remains deferred until the floor falls or registration is replaced. Backing admission is bounded by recorded self-stake |\n| Three safety sub-proofs | §2.3 | GAP: seat-capture/undersized/bootstrap bridge open (E.42) |\n| GHOSTDAG/PoW fork removed; GRANDPA removed | §2 | LIVE |","after":"### H.1 Core protocol\n\n| Requirement / mechanism | § | Status |\n|-------------------------|---|--------|\n| Public claim evidence | §0 | PENDING: private Lean/Quint bundle reproduced under named hypotheses; public source/run bundle awaits a software-license grant; implementation refinement and empirical evidence remain open |\n| BABE authoring + AlephBFT finality (1 s blocks) | §2 | LIVE |\n| Per-rotation VRF committee sampling | §2.3, §15.4 | LIVE draw; ≤100 pool returns all; stake-only fallback drops recency whenever no active validator clears both the stake floor and recency (including every recent-work validator below the floor); capture/min-size proof GAP (E.42) |\n| Verification-liveness committee gate (R2.4, R15.4c) | §2.3, §15.4 | PLANNED: recency still written from prover credit only (`ValidatorWorkRecorder` credits the submitter of a verified PoUI proof); no protocol-issued duties; no attestation client (E.52). Until wired, only an account that also mines passes recency, paying the miner capacity bond and credit cap (§2.4), so the §2.3 stake-only committee cost does not yet hold |\n| Committee Sybil capital: self-stake vs backing | §2.3, §15.2 | PARTIAL: D-0530 prohibits third-party delegated staking (self-stake only), while the runtime still exposes legacy `delegate` / `sponsor_validator` paths pending cleanup. The committee gate compares `total_stake` (self + delegated + sponsored) with `effective_minimum_stake()`. That backing is now distinct capital: every miner-staking and validators admission requires the account's balance to cover all of its staking positions, and one shared stake-ledger freeze holds their sum, because freezes overlap rather than add. An account that already owed more than it held before that freeze stays fully frozen but under-backed until topped up. GAP: self-stake is floor-checked at `register`/`rejoin` and from the recorded bond at queue promotion; `MinSelfStakeRatio` is checked only when backing is added, and a liveness slash charges self-stake first while `un_jail` restores without a re-check except on D-0528-enabled builds, where it restores the bonded floor like `rejoin` (E.42) |\n| Queued validator self-stake top-up | §15.2, §15.5 | GAP: `register` bonds exactly the effective minimum; extra free balance does not increase recorded self-stake. `rejoin` tops up only extended-downtime-kicked validators, so a queued candidate below a raised floor remains deferred until the floor falls or registration is replaced. Backing admission is bounded by recorded self-stake |\n| Sponsored registration bonds (R6.1a) | §6.1, §15.2 | PARTIAL: source landed; on by build feature in the devnet (`volta`) and `testnet` runtimes (the feature alone is a compile error; CI checks the default-feature mainnet node reports it off); the sponsor's own fungible holds can still overlap its frozen principal (E.32) |\n| Three safety sub-proofs | §2.3 | GAP: seat-capture/undersized/bootstrap bridge open (E.42) |\n| GHOSTDAG/PoW fork removed; GRANDPA removed | §2 | LIVE |"},{"name":"Section: H.4","before":"### H.4 Primitives, calibration, vesting, emission (§6–§9)\n\n| Requirement / mechanism | Status |\n|-------------------------|--------|\n| balances/multisig/proxy/staking/delegation/vesting | LIVE |\n| Capacity-proportional miner self-stake (linear, no cap) | LIVE (value provisional) |\n| Declarative spend-condition layer; N-party escrow; capabilities | PARTIAL |\n| Agent session keys + caps + circuit breaker | LIVE (breaker trip latch PARTIAL: rolled back with the rejected call, R6.2c) |\n| 10-minute benchmark entry (SOFT/HARD), deposit-first | LIVE |\n| Multi-GPU `(SKU,count)` inventory + aggregate HARD ceiling | LIVE |\n| Seven-day lease; restart/expiry renewal supervisor | LIVE |\n| Timed issuer-selected calibration packs | LIVE |\n| Legacy three-phase dyno | REMOVED |\n| Statistical rolling degradation/downshift | PLANNED |\n| Drift: EWMA/control charts + MLPerf ceiling | PLANNED |\n| Performance-locked vesting `R_p²` + blackout | LIVE (Root `force_create_grant` bypasses the §7 baseline) |\n| Era-T conversion snapshot and per-cohort allocation (§8.2) | PARTIAL (cohort pools enforced; completed-job and active-day weights removed, as R8.4 requires; score caps and aggregation open in E.38) |\n| Genesis airdrop funding and grants (§8.2) | PARTIAL (genesis bridge absent; existing grant calls mint) |\n| Airdrop claims, unlock schedule, and locked compute spend (§8.2 R8.7, R8.8) | PARTIAL (claims use finality and locked compute spend is wired; the pallet still vests every tier linearly with the retired miner performance adjustment and `update_miner_performance`, and lets any tier spend locked principal; no genesis quarter, earn-to-unlock credit, or Validator freeze and daily release; no Agent spend credit or spend cap, and compute-channel refunds re-freeze up to the locked principal a channel drew, without applying R8.8's payable-first draw. Miner self-stake over a still-frozen grant rides on overlapping `AirdropVesting` and `MinerSelfStake` freezes, but `miner-slashing` and `validators` lower only their own stake freeze before transferring proceeds, so a slash that reaches frozen grant principal fails today) |\n| Ghost Tasks: encrypted issuance + known-answer correctness canary | LIVE |\n| Emission/halving/subsidy/committee premium | LIVE |\n| Reward liquidity on issue (§9.1 R9.13) | LIVE (validator earnings and sponsored-stake payouts are liquid, like the miner leg and the Labs/Foundation subsidy; earnings do not grow stake or its freeze. The agent and staker legs accrue in pool accounts until E.40 ratifies their distribution. The +9%/year baseline, capped at 1% of issuance, and `max(baseline, ValueCoupledStakeFloor)` eligibility floor remain independent: unchanged stake can fall below the growing floor) |\n| Tx-fee split (10 burn / 90 author live; 80/10/10 target) | PARTIAL |\n| Survival governor (both dampers) | PARTIAL (default OFF) |","after":"### H.4 Primitives, calibration, vesting, emission (§6–§9)\n\n| Requirement / mechanism | Status |\n|-------------------------|--------|\n| balances/multisig/proxy/staking/vesting (operator delegation deprecated per D-0530) | LIVE |\n| Capacity-proportional miner self-stake (linear, no cap) | LIVE (value provisional) |\n| Declarative spend-condition layer; N-party escrow; capabilities | PARTIAL |\n| Agent session keys + caps + circuit breaker | LIVE (R6.2c latch survives the tripping call; an enclosing atomic batch that fails later still rolls it back) |\n| 10-minute benchmark entry (SOFT/HARD), deposit-first | LIVE |\n| Multi-GPU `(SKU,count)` inventory + aggregate HARD ceiling | LIVE |\n| Seven-day lease; restart/expiry renewal supervisor | LIVE |\n| Timed issuer-selected calibration packs | LIVE |\n| Legacy three-phase dyno | REMOVED |\n| Statistical rolling degradation/downshift | PLANNED |\n| Drift: EWMA/control charts + MLPerf ceiling | PLANNED |\n| Performance-locked vesting `R_p²` + blackout | LIVE (Root `force_create_grant` bypasses the §7 baseline) |\n| Era-T conversion snapshot and per-cohort allocation (§8.2) | PARTIAL (cohort pools enforced; completed-job and active-day weights removed, as R8.4 requires; score caps and aggregation open in E.38) |\n| Genesis airdrop funding and grants (§8.2) | PARTIAL (genesis bridge absent; existing grant calls mint) |\n| Airdrop claims, unlock schedule, and locked compute spend (§8.2 R8.7, R8.8) | PARTIAL (claims use finality and locked compute spend is wired; the pallet still vests every tier linearly with the retired miner performance adjustment and `update_miner_performance`, and lets any tier spend locked principal; no genesis quarter, earn-to-unlock credit, or Validator freeze and daily release; no Agent spend credit or spend cap, and compute-channel refunds re-freeze up to the locked principal a channel drew and revert the close if they cannot. Miner self-stake over a still-frozen grant rides on overlapping `AirdropVesting` and `MinerSelfStake` freezes, but `miner-slashing` and `validators` lower only their own stake freeze before transferring proceeds, so a slash that reaches frozen grant principal fails today) |\n| Ghost Tasks: encrypted issuance + known-answer correctness canary | LIVE |\n| Emission/halving/subsidy/committee premium | LIVE |\n| Reward liquidity on issue (§9.1 R9.13) | LIVE (validator earnings and sponsored-stake payouts are liquid, like the miner leg and the Labs/Foundation subsidy; earnings do not grow stake or its freeze. The agent and staker legs accrue in pool accounts until E.40 ratifies their distribution. The +9%/year baseline, capped at 1% of issuance, and `max(baseline, ValueCoupledStakeFloor)` eligibility floor remain independent: unchanged stake can fall below the growing floor) |\n| Tx-fee split (0% burn / 100% author, R9.6) | LIVE |\n| Survival governor (both dampers) | PARTIAL (default OFF) |"},{"name":"Section: H.5","before":"### H.5 HTLC, invariants, sessions, governance, validators (§10–§15)\n\n| Requirement / mechanism | Status |\n|-------------------------|--------|\n| FLOP-leg HTLC create/redeem/refund; cross-chain pair profiles | LIVE local mechanics; all implemented pair directions target-only — conformance PENDING E.48 |\n| Finality-safe FLOP refund; permissioned FLOP relayer gate | LIVE local mechanics; pair-level binding/finality PENDING E.48 |\n| Agent-economics invariants (INV-02, INV-S01 session nonce, INV-M06 payout atomicity) | LIVE for INV-02 and INV-S01; INV-M06 PARTIAL (the burn leg's result is not checked); `fail_task` removed with the per-task path |\n| INV-S03 pallet allowlist; INV-S05 immediate revocation | LIVE: direct calls checked; known runtime dispatch wrappers rejected for every session; revocation immediate |\n| Session `G_n` plausibility gate + authenticated submitted-turn sum | LIVE arithmetic/authentication; execution guarantee GAP (E.43/E.44) |\n| Current-profile channel payment without public work credit (R11.2b) | LIVE payment-only; future audited credit and historical recovery OPEN (E.44) |\n| Sessions: cooperative path has 2 primary inclusions; variable turn/path/evidence cost; reserved capacity | LIVE mechanics; capacity mechanism PENDING; serialized bytes PARTIAL; withdrawal PROPOSED (ratification pending); benchmark/network GAP (E.44/E.46) |\n| Terminal DA-loss settlement (R13.0c / V4) | GAP: receipt payout in code conflicts with D-0430 full-refund rule; a missing tariff now rejects (`SettlementTariffMissing`) except for a pre-v2 legacy channel, which the migration flag converts once |\n| Failed/early-close three-way split (`φ`) | LIVE |\n| Dispute standing (agent + validators) | LIVE |\n| Recursive dispute bisection beyond single turn | LIVE: on-chain midpoint rounds over complete power-of-two settled bundles; other bundles use single-turn `open_dispute` |\n| Market-actor collusion detector + mechanism perturbation (R12.3) | PARTIAL: off-chain detector and dry-run perturbation canary LIVE; mechanism action open |\n| Attestation-outage scoped pause (R13.0e / O1) | PLANNED: designed, not built |\n| Session re-attestation cadence + max-duration extension | PLANNED |\n| Per-task path removal | LIVE |\n| OpenGov + `protocol_upgrade` (Root) track; Foundation submit gate; de-sudo | LIVE (de-sudo genesis-time) |\n| Validator onboarding/duties/rotation | LIVE (stake-ordering PARTIAL; small-set ejection open, E.56) |\n| Validator slashing table | LIVE (correlated equivocation curve PARTIAL) |\n| V6 censorship (FOCIL); V8 ghost-task accountability; O3 attestation reputation; P3 provenance; A8 account recovery | PLANNED |\n| Committee-sampling composition machine-check; PQ crypto | PARTIAL/OOS: committee gate predicate proved, including the bootstrap fallback; seat-capture composition PLANNED (E.42); quantum out of scope |\n| Session capacity units (R11.2) | PARTIAL: source landed (elapsed-time bound; pre-open finality lag excluded); runtime qualification and deployment pending; the value-audit planner is SDK-only, with no production caller yet |\n\n**Regenerating the evidence-coverage matrix.** The per-section research/Lean/Quint/Julia backing is\ngenerated separately into [`yellowpaper-coverage.md`](yellowpaper-coverage.md) via\n`just yellowpaper-regen`.\n\n**Per-requirement attribution.** A finer, requirement-level map (each `R-id` → its Lean theorem / Quint\ninvariant / Rust code path) is kept in the companion index\n[`yellowpaper-attribution.md`](yellowpaper-attribution.md). It is non-normative and lives outside the\nspec by design — it exposes proof-artifact and code-path detail the normative body omits.\n\n---","after":"### H.5 HTLC, invariants, sessions, governance, validators (§10–§15)\n\n| Requirement / mechanism | Status |\n|-------------------------|--------|\n| FLOP-leg HTLC create/redeem/refund; cross-chain pair profiles | LIVE local mechanics; all implemented pair directions target-only — conformance PENDING E.48 |\n| Finality-safe FLOP refund; permissioned FLOP relayer gate | LIVE local mechanics; pair-level binding/finality PENDING E.48 |\n| Agent-economics invariants (INV-02, INV-S01 session nonce, INV-M06 payout atomicity) | LIVE for INV-02, INV-S01 and INV-M06; `fail_task` removed with the per-task path |\n| INV-S03 pallet allowlist; INV-S05 immediate revocation | LIVE: direct calls checked; known runtime dispatch wrappers rejected for every session; revocation immediate |\n| Session `G_n` plausibility gate + authenticated submitted-turn sum | LIVE arithmetic/authentication; execution guarantee GAP (E.43/E.44) |\n| Current-profile channel payment without public work credit (R11.2b) | LIVE payment-only; future audited credit and historical recovery OPEN (E.44) |\n| Sessions: cooperative path has 2 primary inclusions; variable turn/path/evidence cost; reserved capacity; 85/15 fee split | LIVE mechanics; 85/15 fee split RATIFIED (D-0525, #2702); capacity mechanism PENDING; serialized bytes PARTIAL; withdrawal PROPOSED (ratification pending); benchmark/network GAP (E.44/E.46) |\n| Terminal DA-loss settlement (R13.0c / V4) | GAP: receipt payout in code conflicts with D-0430 full-refund rule; a missing tariff now rejects (`SettlementTariffMissing`) except for a pre-v2 legacy channel, which the migration flag converts once |\n| Failed/early-close three-way split (`φ`) | LIVE |\n| Dispute standing (agent + validators) | LIVE |\n| Recursive dispute bisection beyond single turn | LIVE: on-chain midpoint rounds over complete power-of-two settled bundles; other bundles use single-turn `open_dispute` |\n| Market-actor collusion detector + mechanism perturbation (R12.3) | PARTIAL: off-chain detector and dry-run perturbation canary LIVE; mechanism action open |\n| Attestation-outage scoped pause (R13.0e / O1) | PLANNED: designed, not built |\n| Session re-attestation cadence + max-duration extension | PLANNED |\n| Per-task path removal | LIVE |\n| OpenGov + `protocol_upgrade` (Root) track; Foundation submit gate; de-sudo | LIVE (de-sudo genesis-time) |\n| Validator onboarding/duties/rotation | LIVE (stake-ordering PARTIAL; runtime minimum-set guard and bounded ejection implemented; floor/bootstrap/batch policy PENDING E.56/E.42) |\n| Validator slashing table | LIVE (correlated equivocation curve PARTIAL) |\n| V6 censorship (FOCIL); V8 ghost-task accountability; O3 attestation reputation; P3 provenance; A8 account recovery | PLANNED |\n| Committee-sampling composition machine-check; PQ crypto | PARTIAL/OOS: committee gate predicate proved, including the bootstrap fallback; seat-capture composition PLANNED (E.42); quantum out of scope |\n| Session capacity units (R11.2) | PARTIAL: source landed (elapsed-time bound; pre-open finality lag excluded); runtime qualification and deployment pending; the value-audit planner is SDK-only, with no production caller yet |\n\n**Regenerating the evidence-coverage matrix.** The per-section research/Lean/Quint/Julia backing is\ngenerated separately into [`yellowpaper-coverage.md`](yellowpaper-coverage.md) via\n`just yellowpaper-regen`.\n\n**Per-requirement attribution.** A finer, requirement-level map (each `R-id` → its Lean theorem / Quint\ninvariant / Rust code path) is kept in the companion index\n[`yellowpaper-attribution.md`](yellowpaper-attribution.md). It is non-normative and lives outside the\nspec by design — it exposes proof-artifact and code-path detail the normative body omits.\n\n---"},{"name":"Section: preamble","before":"<!-- Published mirror of the FLOP yellowpaper — generated by scripts/publish_yellowpaper.py from flop-labs/flop-core@5e6e24279. Do not edit here. -->\n> **Published mirror — 0.5.0 (draft)** (source `flop-core@5e6e24279`). This file is generated; corrections are made upstream and re-published. Three publish-time transforms are applied to the spec: Appendix H's `Code path · tracker` column is removed, local links are retargeted to published paths/anchors or flattened when their file is unpublished, and machine-readable `<!-- cite: -->` gate comments are stripped. No normative text is altered. Tracker references of the form `#NNN` point at FLOP's internal engineering tracker, not at issues in this repository. Feedback: open an issue.\n\n<div class=\"cover\">\n  <p class=\"kicker\">FLOP Network · Yellow Paper</p>\n  <h1 class=\"mission\">Normative specification of the <em>FLOP protocol</em>.</h1>\n  <div class=\"meta\">\n    <span>Version<b>0.5.0 (draft)</b></span>\n    <span>Status<b>Implementation spec — iterating</b></span>\n    <span>Updated<b>2026-09-24</b></span>\n  </div>\n</div>\n\n> The **implementation specification** of the FLOP Network: notation, message and storage formats,\n> extrinsic interfaces, state machines, algorithms, and protocol invariants. This is the authoritative\n> reference an implementer builds against. It is the math/spec companion to the\n> Whitepaper (conceptual) and Litepaper (overview).\n>\n> **How to read this document — see [§0](#0-conformance--reading-guide) first.** The section bodies are\n> **normative** and describe the *target protocol* using RFC 2119 keywords (**MUST**/**SHOULD**/**MAY**).\n> Everything an implementer needs to satisfy conformance lives in the numbered sections and in\n> Appendices A (parameters), F (message & storage formats), and G (extrinsic index). Everything that is\n> *not* a requirement — design rationale, decision provenance, prior art, formal-proof citations — is\n> confined to the **Rationale & sources** trailer at the end of each section, and to Appendix B.\n> **Implementation status** (what is built vs. designed) is *not* carried in the normative body; it lives\n> in one place, the [Conformance & Status Matrix (Appendix H)](#appendix-h--conformance--implementation-status-matrix).\n> **Unresolved values/mechanisms** are numbered stubs in\n> [Appendix E — Open Specification Items](#appendix-e--open-specification-items); the body references a\n> stub rather than restating an open debate.\n>\n> **Decision provenance.** Ratified positions are recorded once in\n> [`decisions/v0.4.md`](decisions/v0.4.md) (`D-04xx`, MADR-shaped, immutable once merged, superseded by\n> ID in later versions). Where a normative rule cites a `D-id`, the citation is *provenance only* — the\n> rule itself is stated in full in the body; the reader never needs the decision record to implement.\n\n---","after":"<!-- Published mirror of the FLOP yellowpaper — generated by scripts/publish_yellowpaper.py from flop-labs/flop-core@4e2b00890. Do not edit here. -->\n> **Published mirror — 0.5.0 (draft)** (source `flop-core@4e2b00890`). This file is generated; corrections are made upstream and re-published. Three publish-time transforms are applied to the spec: Appendix H's `Code path · tracker` column is removed, local links are retargeted to published paths/anchors or flattened when their file is unpublished, and machine-readable `<!-- cite: -->` gate comments are stripped. No normative text is altered. Tracker references of the form `#NNN` point at FLOP's internal engineering tracker, not at issues in this repository. Feedback: open an issue.\n\n<div class=\"cover\">\n  <p class=\"kicker\">FLOP Network · Yellow Paper</p>\n  <h1 class=\"mission\">Normative specification of the <em>FLOP protocol</em>.</h1>\n  <div class=\"meta\">\n    <span>Version<b>0.5.0 (draft)</b></span>\n    <span>Status<b>Implementation spec — iterating</b></span>\n    <span>Updated<b>2026-09-24</b></span>\n  </div>\n</div>\n\n> The **implementation specification** of the FLOP Network: notation, message and storage formats,\n> extrinsic interfaces, state machines, algorithms, and protocol invariants. This is the authoritative\n> reference an implementer builds against. It is the math/spec companion to the\n> Whitepaper (conceptual) and Litepaper (overview).\n>\n> **How to read this document — see [§0](#0-conformance--reading-guide) first.** The section bodies are\n> **normative** and describe the *target protocol* using RFC 2119 keywords (**MUST**/**SHOULD**/**MAY**).\n> Everything an implementer needs to satisfy conformance lives in the numbered sections and in\n> Appendices A (parameters), F (message & storage formats), and G (extrinsic index). Everything that is\n> *not* a requirement — design rationale, decision provenance, prior art, formal-proof citations — is\n> confined to the **Rationale & sources** trailer at the end of each section, and to Appendix B.\n> **Implementation status** (what is built vs. designed) is *not* carried in the normative body; it lives\n> in one place, the [Conformance & Status Matrix (Appendix H)](#appendix-h--conformance--implementation-status-matrix).\n> **Unresolved values/mechanisms** are numbered stubs in\n> [Appendix E — Open Specification Items](#appendix-e--open-specification-items); the body references a\n> stub rather than restating an open debate.\n>\n> **Decision provenance.** Ratified positions are recorded once in\n> [`decisions/v0.4.md`](decisions/v0.4.md) (`D-04xx`, MADR-shaped, immutable once merged, superseded by\n> ID in later versions). Where a normative rule cites a `D-id`, the citation is *provenance only* — the\n> rule itself is stated in full in the body; the reader never needs the decision record to implement.\n\n---"}],"links":[{"label":"Before","url":"https://github.com/flop-labs/yellowpaper/blob/70e691c758e53eed17a016a02b0a2ae1200d3744/yellowpaper.md"},{"label":"After","url":"https://github.com/flop-labs/yellowpaper/blob/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/yellowpaper.md"},{"label":"Git comparison","url":"https://github.com/flop-labs/yellowpaper/compare/70e691c758e53eed17a016a02b0a2ae1200d3744...5730f4b6cf56fa88bb93bbda272dc449b2f77b17"}]}],"gaps":[{"source":"https://github.com/zkasuran/flop-lab/blob/879a08a/packages/recorder/test/fixtures/seed/index.json","measuredAt":"2026-11-05T21:24:20.273Z","kind":"runtime","reason":"No explicit runtime specVersion in the supplied recorder index. Snapshot schema and quote versions are not runtime versions."}],"recordings":[{"source":"https://api.github.com/repos/flop-labs/yellowpaper/commits?path=yellowpaper.md&per_page=3","measuredAt":"2026-11-06T03:27:23.825Z"},{"source":"https://api.github.com/repos/flop-labs/yellowpaper/compare/70e691c758e53eed17a016a02b0a2ae1200d3744...56410c67b11292e707d32ef32e9c4ff9c02e28c7","measuredAt":"2026-11-06T03:27:24.482Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/70e691c758e53eed17a016a02b0a2ae1200d3744/yellowpaper.md","measuredAt":"2026-11-06T03:27:24.923Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/70e691c758e53eed17a016a02b0a2ae1200d3744/CHANGELOG.md","measuredAt":"2026-11-06T03:27:25.293Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/70e691c758e53eed17a016a02b0a2ae1200d3744/decisions/v0.5.md","measuredAt":"2026-11-06T03:27:25.814Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/yellowpaper.md","measuredAt":"2026-11-06T03:27:26.368Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/CHANGELOG.md","measuredAt":"2026-11-06T03:27:26.823Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/5730f4b6cf56fa88bb93bbda272dc449b2f77b17/decisions/v0.5.md","measuredAt":"2026-11-06T03:27:27.315Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/56410c67b11292e707d32ef32e9c4ff9c02e28c7/yellowpaper.md","measuredAt":"2026-11-06T03:27:27.841Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/56410c67b11292e707d32ef32e9c4ff9c02e28c7/CHANGELOG.md","measuredAt":"2026-11-06T03:27:28.272Z"},{"source":"https://raw.githubusercontent.com/flop-labs/yellowpaper/56410c67b11292e707d32ef32e9c4ff9c02e28c7/decisions/v0.5.md","measuredAt":"2026-11-06T03:27:28.824Z"},{"source":"https://registry.npmjs.org/@flop-labs/client","measuredAt":"2026-11-06T03:27:29.646Z"},{"source":"https://registry.npmjs.org/@flop-labs/contracts","measuredAt":"2026-11-06T03:27:30.263Z"},{"source":"https://registry.npmjs.org/@flop-labs/sdk","measuredAt":"2026-11-06T03:27:30.848Z"},{"source":"https://registry.npmjs.org/@flop-labs/cli","measuredAt":"2026-11-06T03:27:31.418Z"},{"source":"https://registry.npmjs.org/@flop-labs/pi","measuredAt":"2026-11-06T03:27:32.209Z"},{"source":"https://pypi.org/pypi/flop-sdk/json","measuredAt":"2026-11-06T03:27:32.507Z"},{"source":"https://docs.flop.network/docs/sdk-references","measuredAt":"2026-11-06T03:27:33.218Z"},{"source":"https://docs.flop.network/docs/protocol-parameters","measuredAt":"2026-11-06T03:27:33.291Z"},{"source":"https://docs.flop.network/docs/agent-integration","measuredAt":"2026-11-06T03:27:33.788Z"}]}