diff --git a/docs/AUDIT_PREP.md b/docs/AUDIT_PREP.md index f5a8343..a2d35ef 100644 --- a/docs/AUDIT_PREP.md +++ b/docs/AUDIT_PREP.md @@ -20,7 +20,7 @@ Mainnet must use freshly generated program keypairs (see `docs/launch/MAINNET_DE - Audit probability from `verification_percent` - Tolerance band 0.05 operating point and within-band damage budget - `slash_bounty_bps` reporter share on forfeit -- Zero-fraud treasury burn projection (~8.15% of rewards at p=0.1) +- Zero-fraud treasury burn projection (~8.15% of rewards at p=0.1 with 1.35x reward margin) ## Attachments for the auditor diff --git a/docs/TOKENOMICS.md b/docs/TOKENOMICS.md index 2cba2d0..2a1e951 100644 --- a/docs/TOKENOMICS.md +++ b/docs/TOKENOMICS.md @@ -5,13 +5,6 @@ Issue #6. Design consistent with the economic model already coded in engineering and product design document. It is not a legal opinion. Issue #5 (counsel review) gates any public token offer. -## Token - -The ticker is **$LEVI**. The name is set; the mainnet launch is deliberately -sequenced after a credible public run demonstrates the bonded training economy -working end to end, not before. A token with no proven protocol behind it has -nothing to price. - ## Design goals 1. Pay for accepted learning work (Proof of Gradient), not for raw hash power. @@ -39,7 +32,7 @@ From `genesis_parameters()` and `calibration_table()`: | Preset | Round cost (H100) | Round reward (1.35x) | Bond at p=0.1 | Expected catch rounds | |---|---|---|---|---| -| 125M proof | $0.0120 | $0.0162 | $0.146 | 10 | +| 125M proof | $0.0120 | $0.0162 | $0.15 | 10 | | 1B genesis | $0.240 | $0.324 | $2.91 | 10 | | 7B scale | $3.36 | $4.53 | $40.79 | 10 | @@ -61,6 +54,9 @@ be sized for it. ## Supply sketch (pre-legal, adjustable) Working totals for modelling only. Counsel may require structural change. +These percentages live only in this document. Round economics in +`economy.py` and `docs/assets/tokenomics.json` are bond/reward/audit math, not +supply allocation. | Allocation | Share | Vesting | Purpose | |---|---|---|---| @@ -71,6 +67,11 @@ Working totals for modelling only. Counsel may require structural change. | Early contributors / community | 10% | TGE unlock + short vest | Genesis participants, bug bounties | | Liquidity / market making | 5% | At TGE under multisig policy | CEX/DEX depth if pursued | +Total 100%. The +10% team allocation was taken entirely from the training +rewards endowment (45% to 35%). Training rewards remain the largest single +bucket (35% > 25%), so the thesis that the network that trains the model owns +the primary share of emission still holds. + Emission is not a fixed block subsidy. Each run configures epoch earning rates on the coordinator; the treasury tops up the run vault. Unused endowment stays unminted or locked, never inflated ad hoc. diff --git a/docs/assets/tokenomics.json b/docs/assets/tokenomics.json index 5a4a42c..7fe5fb5 100644 --- a/docs/assets/tokenomics.json +++ b/docs/assets/tokenomics.json @@ -161,5 +161,6 @@ } ], "slash_bounty_fraction_default": 0.5, - "slash_bounty_bps_default": 5000 + "slash_bounty_bps_default": 5000, + "reward_margin": 1.35 } diff --git a/sim/leviathan_sim/economy.py b/sim/leviathan_sim/economy.py index 01e2536..43e2172 100644 --- a/sim/leviathan_sim/economy.py +++ b/sim/leviathan_sim/economy.py @@ -57,9 +57,6 @@ def break_even_bond(audit_probability: float, reward_per_round: float) -> float: return reward_per_round * (1.0 - audit_probability) / audit_probability -REWARD_COST_MULTIPLIER = 1.35 - - @dataclass(frozen=True) class RunPreset: label: str @@ -85,11 +82,15 @@ def h100_round_cost_usd( return seconds / 3600.0 * usd_per_gpu_hour +REWARD_MARGIN = 1.35 +AUDIT_FEE_MULTIPLIER = 1.1 + + def calibration_table(audit_probabilities: list[float]) -> list[dict]: rows = [] for preset in PRESETS: cost = h100_round_cost_usd(preset) - reward = REWARD_COST_MULTIPLIER * cost + reward = REWARD_MARGIN * cost for p in audit_probabilities: rows.append( { @@ -107,15 +108,12 @@ def calibration_table(audit_probabilities: list[float]) -> list[dict]: def audit_burn_projection( audit_probabilities: list[float], n_workers: int = 100, - fee_multiplier: float = 1.1, + fee_multiplier: float = AUDIT_FEE_MULTIPLIER, ) -> list[dict]: - """Zero-fraud equilibrium: with nobody to slash, verifier income is pure - treasury burn. A replay audit redoes one contribution's compute, so the fee - floor is the per-contribution H100 cost times a verifier margin.""" rows = [] for preset in PRESETS: cost = h100_round_cost_usd(preset) - reward = REWARD_COST_MULTIPLIER * cost + reward = REWARD_MARGIN * cost for p in audit_probabilities: fee = fee_multiplier * cost burn = p * n_workers * fee @@ -135,13 +133,9 @@ def audit_burn_projection( def genesis_parameters(audit_probability: float = 0.1, band: float = 0.05) -> dict: - """The published operating point for the Genesis Run testnet, derived from - the same (1-p)/p discipline as the calibration table. Values are per worker - per the 1B preset; testnet bonds use these numbers denominated in the - testnet collateral mint.""" preset = next(p for p in PRESETS if p.params_billion == 1.0) cost = h100_round_cost_usd(preset) - reward = REWARD_COST_MULTIPLIER * cost + reward = REWARD_MARGIN * cost return { "preset": preset.label, "audit_probability": audit_probability, @@ -150,5 +144,7 @@ def genesis_parameters(audit_probability: float = 0.1, band: float = 0.05) -> di "bond_usd": break_even_bond(audit_probability, reward), "bond_rounds_of_reward": (1.0 - audit_probability) / audit_probability, "expected_rounds_to_catch": 1.0 / audit_probability, - "audit_burn_share_of_rewards": audit_probability * 1.1 / REWARD_COST_MULTIPLIER, + "audit_burn_share_of_rewards": ( + audit_probability * AUDIT_FEE_MULTIPLIER / REWARD_MARGIN + ), } diff --git a/sim/tests/test_economy.py b/sim/tests/test_economy.py index b07aaf3..f61bae9 100644 --- a/sim/tests/test_economy.py +++ b/sim/tests/test_economy.py @@ -1,5 +1,4 @@ from leviathan_sim.economy import ( - REWARD_COST_MULTIPLIER, EconomyConfig, StakeLedger, audit_burn_projection, @@ -50,7 +49,7 @@ def test_calibration_bond_scales_with_reward(): def test_zero_fraud_burn_share_is_preset_independent(): rows = audit_burn_projection([0.1]) - expected = 0.1 * 1.1 / REWARD_COST_MULTIPLIER + expected = 0.1 * 1.1 / 1.35 for row in rows: assert abs(row["burn_share_of_rewards"] - expected) < 1e-9 assert row["treasury_burn_per_round_usd"] > 0.0