238 lines
9.7 KiB
Python
238 lines
9.7 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
nash_limit.py — Формула идеальных денег Нэша для Montana
|
||
|
||
Книга Монтана, Глава 03:
|
||
> "lim(evidence → ∞) 1 Ɉ → 1 секунда"
|
||
> "Нэш не знал про Beeple. Beeple не знал про Нэша. Ты соединил."
|
||
|
||
Джон Нэш — "Идеальные деньги":
|
||
Валюта стремится к идеалу асимптотически, никогда не достигая его полностью.
|
||
|
||
Применение в Montana:
|
||
- Genesis (Beeple): бесконечная дробь $0.160523726(851)̅
|
||
- Метод (Нэш): асимптотическое приближение
|
||
- Результат: 1 Ɉ → 1 секунда при evidence → ∞
|
||
"""
|
||
|
||
from decimal import Decimal, getcontext
|
||
from dataclasses import dataclass
|
||
from typing import Tuple
|
||
import math
|
||
|
||
getcontext().prec = 50
|
||
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# NASH LIMIT FORMULA
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
|
||
@dataclass
|
||
class EvidenceMetrics:
|
||
"""Метрики доказательств для формулы Нэша."""
|
||
total_presence_proofs: int # Всего Proof of Presence
|
||
total_nodes: int # Узлов в сети
|
||
total_transactions: int # Транзакций
|
||
network_uptime_seconds: int # Время работы сети
|
||
cognitive_signatures: int # Когнитивных подписей
|
||
|
||
|
||
class NashLimit:
|
||
"""
|
||
Асимптотическое приближение 1 Ɉ к 1 секунде.
|
||
|
||
lim(evidence → ∞) 1 Ɉ → 1 секунда
|
||
|
||
Чем больше доказательств в сети — тем ближе Ɉ к эталону.
|
||
"""
|
||
|
||
# Веса для разных типов evidence
|
||
WEIGHTS = {
|
||
"presence_proofs": Decimal("0.30"), # 30% — Proof of Presence
|
||
"nodes": Decimal("0.20"), # 20% — количество узлов
|
||
"transactions": Decimal("0.20"), # 20% — транзакции
|
||
"uptime": Decimal("0.15"), # 15% — uptime сети
|
||
"signatures": Decimal("0.15"), # 15% — когнитивные подписи
|
||
}
|
||
|
||
# Целевые значения для "идеального" состояния
|
||
TARGETS = {
|
||
"presence_proofs": 1_000_000_000, # 1 миллиард PoP
|
||
"nodes": 10_000, # 10,000 узлов
|
||
"transactions": 100_000_000, # 100 миллионов транзакций
|
||
"uptime": 315_360_000, # 10 лет в секундах
|
||
"signatures": 10_000_000, # 10 миллионов подписей
|
||
}
|
||
|
||
def __init__(self):
|
||
self.genesis_ratio = Decimal("0.160523726851851851851") # Beeple
|
||
|
||
def calculate_evidence_score(self, metrics: EvidenceMetrics) -> Decimal:
|
||
"""
|
||
Рассчитать общий score доказательств (0.0 - 1.0).
|
||
|
||
Args:
|
||
metrics: Текущие метрики сети
|
||
|
||
Returns:
|
||
Decimal от 0 до 1, где 1 = идеальное состояние
|
||
"""
|
||
scores = {
|
||
"presence_proofs": min(
|
||
Decimal(metrics.total_presence_proofs) / Decimal(self.TARGETS["presence_proofs"]),
|
||
Decimal("1")
|
||
),
|
||
"nodes": min(
|
||
Decimal(metrics.total_nodes) / Decimal(self.TARGETS["nodes"]),
|
||
Decimal("1")
|
||
),
|
||
"transactions": min(
|
||
Decimal(metrics.total_transactions) / Decimal(self.TARGETS["transactions"]),
|
||
Decimal("1")
|
||
),
|
||
"uptime": min(
|
||
Decimal(metrics.network_uptime_seconds) / Decimal(self.TARGETS["uptime"]),
|
||
Decimal("1")
|
||
),
|
||
"signatures": min(
|
||
Decimal(metrics.cognitive_signatures) / Decimal(self.TARGETS["signatures"]),
|
||
Decimal("1")
|
||
),
|
||
}
|
||
|
||
# Взвешенная сумма
|
||
total = Decimal("0")
|
||
for key, weight in self.WEIGHTS.items():
|
||
total += scores[key] * weight
|
||
|
||
return total
|
||
|
||
def convergence_ratio(self, evidence_score: Decimal) -> Decimal:
|
||
"""
|
||
Коэффициент сходимости к эталону.
|
||
|
||
При evidence_score = 0: ratio = genesis_ratio (Beeple)
|
||
При evidence_score → 1: ratio → 1.0 (идеал)
|
||
|
||
Формула: ratio = genesis + (1 - genesis) * evidence^2
|
||
Квадрат даёт медленное приближение в начале, ускорение в конце.
|
||
"""
|
||
delta = Decimal("1") - self.genesis_ratio
|
||
return self.genesis_ratio + delta * (evidence_score ** 2)
|
||
|
||
def juno_to_seconds(
|
||
self,
|
||
juno_amount: Decimal,
|
||
metrics: EvidenceMetrics
|
||
) -> Tuple[Decimal, Decimal]:
|
||
"""
|
||
Конвертировать Ɉ в секунды с учётом текущего evidence.
|
||
|
||
Args:
|
||
juno_amount: Количество Ɉ
|
||
metrics: Текущие метрики сети
|
||
|
||
Returns:
|
||
(seconds, convergence_ratio)
|
||
"""
|
||
evidence = self.calculate_evidence_score(metrics)
|
||
ratio = self.convergence_ratio(evidence)
|
||
|
||
# 1 Ɉ * ratio = секунды
|
||
seconds = juno_amount * ratio
|
||
|
||
return seconds, ratio
|
||
|
||
def get_current_state(self, metrics: EvidenceMetrics) -> dict:
|
||
"""Полное состояние формулы Нэша."""
|
||
evidence = self.calculate_evidence_score(metrics)
|
||
ratio = self.convergence_ratio(evidence)
|
||
|
||
return {
|
||
"evidence_score": float(evidence),
|
||
"convergence_ratio": float(ratio),
|
||
"genesis_ratio": float(self.genesis_ratio),
|
||
"distance_to_ideal": float(Decimal("1") - ratio),
|
||
"formula": "lim(evidence → ∞) 1 Ɉ → 1 секунда",
|
||
"interpretation": f"1 Ɉ ≈ {ratio:.6f} секунды сейчас"
|
||
}
|
||
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# CONVENIENCE
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
|
||
def calculate_nash_limit(metrics: EvidenceMetrics) -> dict:
|
||
"""Быстрый расчёт состояния формулы Нэша."""
|
||
nash = NashLimit()
|
||
return nash.get_current_state(metrics)
|
||
|
||
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
# DEMO
|
||
# ═══════════════════════════════════════════════════════════════════════════════
|
||
|
||
if __name__ == "__main__":
|
||
nash = NashLimit()
|
||
|
||
print("=" * 60)
|
||
print("NASH LIMIT — Формула идеальных денег")
|
||
print("=" * 60)
|
||
print("\nlim(evidence → ∞) 1 Ɉ → 1 секунда")
|
||
|
||
# Симуляция разных этапов развития сети
|
||
stages = [
|
||
("Genesis", EvidenceMetrics(
|
||
total_presence_proofs=0,
|
||
total_nodes=1,
|
||
total_transactions=0,
|
||
network_uptime_seconds=1,
|
||
cognitive_signatures=1
|
||
)),
|
||
("Early (1 год)", EvidenceMetrics(
|
||
total_presence_proofs=100_000,
|
||
total_nodes=50,
|
||
total_transactions=10_000,
|
||
network_uptime_seconds=31_536_000,
|
||
cognitive_signatures=5_000
|
||
)),
|
||
("Growth (5 лет)", EvidenceMetrics(
|
||
total_presence_proofs=10_000_000,
|
||
total_nodes=1_000,
|
||
total_transactions=1_000_000,
|
||
network_uptime_seconds=157_680_000,
|
||
cognitive_signatures=500_000
|
||
)),
|
||
("Mature (10 лет)", EvidenceMetrics(
|
||
total_presence_proofs=500_000_000,
|
||
total_nodes=5_000,
|
||
total_transactions=50_000_000,
|
||
network_uptime_seconds=315_360_000,
|
||
cognitive_signatures=5_000_000
|
||
)),
|
||
("Ideal", EvidenceMetrics(
|
||
total_presence_proofs=1_000_000_000,
|
||
total_nodes=10_000,
|
||
total_transactions=100_000_000,
|
||
network_uptime_seconds=315_360_000,
|
||
cognitive_signatures=10_000_000
|
||
)),
|
||
]
|
||
|
||
print("\n--- ЭВОЛЮЦИЯ СХОДИМОСТИ ---\n")
|
||
print(f"{'Этап':<20} {'Evidence':<12} {'1 Ɉ ≈':<15} {'До идеала':<12}")
|
||
print("-" * 60)
|
||
|
||
for name, metrics in stages:
|
||
state = nash.get_current_state(metrics)
|
||
print(
|
||
f"{name:<20} "
|
||
f"{state['evidence_score']:.4f} "
|
||
f"{state['convergence_ratio']:.6f} сек "
|
||
f"{state['distance_to_ideal']:.6f}"
|
||
)
|
||
|
||
print("\n" + "=" * 60)
|
||
print("Нэш + Beeple = Montana")
|
||
print("=" * 60)
|