Utility curves for IGN beyond gas with dollar inputs labelled; the proving price as the forgone subsidy (1 / network hash) against Boundless's published rate; the adopted job floor overprices the market above about USD 0.014 per IGN; a ten-year security budget with the measured 5090 row (sustained hash USD 24.8 per GH/s-day against USD 281 rented, so the 20-day 34 percent weight attack costs 11.8x the honest fleet at every price); sim/economy re-run with the eleven measured cards under eight stresses (T1 to T5 hold; a ten-day prover refusal strands 547,570 IGN a day of pool credit in the escrow with no rule to return it); the dev fee, the signalling game, and the twelve-row table of what Kaspa, Monero, Ethereum and the zk rollups did (rusty-kaspa cited by file and line). Models: sim/horizon/economy-and-utility/ (utility.py, stress.py, security_budget_10y.py, signal_game.py, devfee.py, results/). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
62 lines
3.3 KiB
Python
62 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Horizon lane 4, task 4: the Ember dev fee in dollars, by the share of miners who keep it on.
|
|
|
|
python3 devfee.py > devfee_out.md
|
|
|
|
Rule (docs/design/miner-dev-fee.md, measured 4 Oct 2026): one block template in 100 is requested with the dev payout address
|
|
(template counter, exact), default on, `--dev-fee 0` or the app switch turns it off; the fee block keeps the user's vote key and
|
|
UTXO address, only the execution-layer payout (`IGNA`) moves. So the fee is 1% of the producer subsidy and of the producer's
|
|
80% tip share for the templates it takes; the pool share (20%) is untouched (the proving payout is per record, not per template).
|
|
|
|
Precedents (approximate, from memory; none cloned): T-Rex 1% (not switchable), lolMiner 0.7 to 1.5% by algorithm (not switchable),
|
|
PhoenixMiner 0.65% (not switchable), TeamRedMiner 0.75 to 2.5% (not switchable), NBMiner 1 to 2% (not switchable); ethminer and
|
|
the open-source Kaspa miners 0%. NiceHash is a marketplace, not a dev fee: it takes 2% of the buyer's payment on its own
|
|
exchange (approximate). On Ethereum the closed-source fee miners held the large majority of GPU hash over ethminer, approximate,
|
|
because they were faster; nobody measured the opt-out share because none offered one.
|
|
"""
|
|
|
|
RAMP_LOSS = 37_000_000
|
|
PRICES = [0.005, 0.02, 0.10]
|
|
SHARES = [0.20, 0.50, 0.80, 1.00]
|
|
|
|
|
|
def emission(year):
|
|
h = (year - 1) // 2
|
|
e = 1_000_000_000 / (2 ** h)
|
|
if year == 1:
|
|
e -= RAMP_LOSS
|
|
return e
|
|
|
|
|
|
def usd(x):
|
|
return f"{x:,.0f}"
|
|
|
|
|
|
def main():
|
|
print("# The Ember dev fee in dollars (generated by devfee.py)\n")
|
|
print("Fee = 1% x 80% of emission (the producer share) x the share of hash on Ember with the fee on. Tips are left out (under 0.01% of emission in every lane scenario). Every price is an input.\n")
|
|
print("| Year | Emission, M IGN | Price | Fee at 20% on | at 50% | at 80% | at 100% | 100% as a share of funding.md's unfunded USD 220,000 to 310,000 |")
|
|
print("|---|---|---|---|---|---|---|---|")
|
|
for y in (1, 2, 3, 4, 5, 7, 10):
|
|
for p in PRICES:
|
|
e = emission(y)
|
|
f = 0.01 * 0.8 * e * p
|
|
cells = [usd(f * s) for s in SHARES]
|
|
print(f"| {y} | {e / 1e6:,.0f} | {p} | " + " | ".join(cells) + f" | {f / 265_000 * 100:.0f}% |")
|
|
print()
|
|
print("## What a miner pays\n")
|
|
print("| Tier | Hash (measured, prover-tiers) | Blocks a month at 100 GH/s network | Fee blocks a month | Fee at USD 0.02 a month | Switch |")
|
|
print("|---|---|---|---|---|---|")
|
|
for name, mhs in [("home 8 GB (4060 Ti 8)", 19.07), ("home 12 GB (4070)", 24.99), ("home 16 GB (4060 Ti 16)", 17.58), ("home 24 GB (4090)", 52.25), ("home 32 GB (5090)", 98.48), ("rig 8x 4090", 8 * 52.25), ("pool user (any)", 0)]:
|
|
if mhs == 0:
|
|
print(f"| {name} | n/a | the pool's | the pool's: a pool on Ember pays 1% of its templates, a pool on its own software 0% | passed through or absorbed by the pool's fee | the pool's choice, not the user's |")
|
|
continue
|
|
blocks = mhs / 100_000 * 86400 * 30.44
|
|
fee_blocks = blocks / 100
|
|
fee_usd = fee_blocks * 31.688 * 0.8 * 0.02
|
|
print(f"| {name} | {mhs:.2f} MH/s | {blocks:,.1f} | {fee_blocks:.2f} | {fee_usd:,.2f} | Settings switch or `--dev-fee 0`; HiveOS `DEV_FEE=0` |")
|
|
print()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|