247 lines
9.5 KiB
Python
247 lines
9.5 KiB
Python
|
|
#!/usr/bin/env python3
|
|||
|
|
"""
|
|||
|
|
demurrage_protocol.py — Переворот логистических штрафов Montana
|
|||
|
|
|
|||
|
|
Книга Монтана, Глава 04:
|
|||
|
|
> "Одна механика. Разные знаки. Логистика наказывает за потерю времени.
|
|||
|
|
> Montana вознаграждает за использование времени."
|
|||
|
|
> "Платишь если медлишь."
|
|||
|
|
|
|||
|
|
Demurrage — плата за простой судна.
|
|||
|
|
Montana Protocol переворачивает эту механику:
|
|||
|
|
- Логистика: время = штраф (−)
|
|||
|
|
- Montana: время = награда (+)
|
|||
|
|
|
|||
|
|
Рынок: $14-16 трлн/год (90% мировой торговли по объёму)
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from dataclasses import dataclass
|
|||
|
|
from datetime import datetime, timezone, timedelta
|
|||
|
|
from decimal import Decimal
|
|||
|
|
from typing import Dict, List, Optional
|
|||
|
|
from enum import Enum
|
|||
|
|
|
|||
|
|
|
|||
|
|
class TimeDirection(Enum):
|
|||
|
|
"""Направление времени в экономике."""
|
|||
|
|
NEGATIVE = "negative" # Логистика: время = штраф
|
|||
|
|
POSITIVE = "positive" # Montana: время = награда
|
|||
|
|
|
|||
|
|
|
|||
|
|
@dataclass
|
|||
|
|
class DemurrageEvent:
|
|||
|
|
"""Событие демерджа (простой судна)."""
|
|||
|
|
vessel_id: str # ID судна
|
|||
|
|
port: str # Порт
|
|||
|
|
planned_days: Decimal # Плановое время (дни)
|
|||
|
|
actual_days: Decimal # Фактическое время (дни)
|
|||
|
|
rate_per_day: Decimal # Ставка за день ($)
|
|||
|
|
timestamp: str # Когда зафиксировано
|
|||
|
|
|
|||
|
|
@property
|
|||
|
|
def delay_days(self) -> Decimal:
|
|||
|
|
"""Задержка в днях."""
|
|||
|
|
return max(Decimal("0"), self.actual_days - self.planned_days)
|
|||
|
|
|
|||
|
|
@property
|
|||
|
|
def delay_seconds(self) -> int:
|
|||
|
|
"""Задержка в секундах."""
|
|||
|
|
return int(self.delay_days * 86400)
|
|||
|
|
|
|||
|
|
@property
|
|||
|
|
def traditional_cost(self) -> Decimal:
|
|||
|
|
"""Традиционный расчёт: штраф (−)."""
|
|||
|
|
return self.delay_days * self.rate_per_day
|
|||
|
|
|
|||
|
|
@property
|
|||
|
|
def montana_reward(self) -> Decimal:
|
|||
|
|
"""Montana расчёт: награда (+) в Ɉ."""
|
|||
|
|
# 1 секунда = 1 Ɉ (при текущем halving)
|
|||
|
|
return Decimal(self.delay_seconds)
|
|||
|
|
|
|||
|
|
|
|||
|
|
@dataclass
|
|||
|
|
class FlipResult:
|
|||
|
|
"""Результат переворота штраф → награда."""
|
|||
|
|
traditional: Decimal # Штраф в $ (−)
|
|||
|
|
montana: Decimal # Награда в Ɉ (+)
|
|||
|
|
direction_flip: str # "negative → positive"
|
|||
|
|
efficiency: Decimal # Эффективность переворота
|
|||
|
|
|
|||
|
|
|
|||
|
|
class DemurrageProtocol:
|
|||
|
|
"""
|
|||
|
|
Протокол переворота демерджа.
|
|||
|
|
|
|||
|
|
Книга Монтана:
|
|||
|
|
> "Переход от (−) к (+) — это не новая идея. Это переворот существующей."
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
# Типичные ставки демерджа по типам судов
|
|||
|
|
TYPICAL_RATES = {
|
|||
|
|
"bulk_carrier": Decimal("15000"), # Балкер: $15,000/день
|
|||
|
|
"container_ship": Decimal("50000"), # Контейнеровоз: $50,000/день
|
|||
|
|
"tanker": Decimal("30000"), # Танкер: $30,000/день
|
|||
|
|
"general_cargo": Decimal("10000"), # Генеральный груз: $10,000/день
|
|||
|
|
"reefer": Decimal("25000"), # Рефрижератор: $25,000/день
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Крупнейшие порты мира
|
|||
|
|
MAJOR_PORTS = [
|
|||
|
|
"Shanghai", "Singapore", "Ningbo-Zhoushan", "Shenzhen",
|
|||
|
|
"Guangzhou", "Busan", "Hong Kong", "Qingdao",
|
|||
|
|
"Rotterdam", "Dubai", "Los Angeles", "Hamburg"
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
def __init__(self):
|
|||
|
|
self.events: List[DemurrageEvent] = []
|
|||
|
|
self.total_flipped_usd = Decimal("0")
|
|||
|
|
self.total_minted_juno = Decimal("0")
|
|||
|
|
|
|||
|
|
def record_event(
|
|||
|
|
self,
|
|||
|
|
vessel_id: str,
|
|||
|
|
port: str,
|
|||
|
|
planned_days: float,
|
|||
|
|
actual_days: float,
|
|||
|
|
rate_per_day: float,
|
|||
|
|
vessel_type: str = "general_cargo"
|
|||
|
|
) -> DemurrageEvent:
|
|||
|
|
"""
|
|||
|
|
Записать событие демерджа.
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
vessel_id: ID судна
|
|||
|
|
port: Порт
|
|||
|
|
planned_days: Плановое время
|
|||
|
|
actual_days: Фактическое время
|
|||
|
|
rate_per_day: Ставка за день
|
|||
|
|
vessel_type: Тип судна
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
DemurrageEvent
|
|||
|
|
"""
|
|||
|
|
event = DemurrageEvent(
|
|||
|
|
vessel_id=vessel_id,
|
|||
|
|
port=port,
|
|||
|
|
planned_days=Decimal(str(planned_days)),
|
|||
|
|
actual_days=Decimal(str(actual_days)),
|
|||
|
|
rate_per_day=Decimal(str(rate_per_day)),
|
|||
|
|
timestamp=datetime.now(timezone.utc).isoformat()
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
self.events.append(event)
|
|||
|
|
return event
|
|||
|
|
|
|||
|
|
def flip(self, event: DemurrageEvent) -> FlipResult:
|
|||
|
|
"""
|
|||
|
|
Перевернуть штраф в награду.
|
|||
|
|
|
|||
|
|
Логистика: delay × rate = штраф ($)
|
|||
|
|
Montana: delay_seconds = награда (Ɉ)
|
|||
|
|
|
|||
|
|
Args:
|
|||
|
|
event: Событие демерджа
|
|||
|
|
|
|||
|
|
Returns:
|
|||
|
|
FlipResult с обоими расчётами
|
|||
|
|
"""
|
|||
|
|
traditional = event.traditional_cost
|
|||
|
|
montana = event.montana_reward
|
|||
|
|
|
|||
|
|
# Эффективность: сколько Ɉ за каждый $ штрафа
|
|||
|
|
efficiency = montana / traditional if traditional > 0 else Decimal("0")
|
|||
|
|
|
|||
|
|
self.total_flipped_usd += traditional
|
|||
|
|
self.total_minted_juno += montana
|
|||
|
|
|
|||
|
|
return FlipResult(
|
|||
|
|
traditional=traditional,
|
|||
|
|
montana=montana,
|
|||
|
|
direction_flip="(−) → (+)",
|
|||
|
|
efficiency=efficiency
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
def get_market_stats(self) -> Dict:
|
|||
|
|
"""Статистика рынка морской логистики."""
|
|||
|
|
return {
|
|||
|
|
"market_size_usd": "$14-16 trillion/year",
|
|||
|
|
"world_trade_by_volume": "90%",
|
|||
|
|
"typical_demurrage_rates": {
|
|||
|
|
k: f"${v:,}/day" for k, v in self.TYPICAL_RATES.items()
|
|||
|
|
},
|
|||
|
|
"major_ports": self.MAJOR_PORTS,
|
|||
|
|
"total_events_recorded": len(self.events),
|
|||
|
|
"total_flipped_usd": float(self.total_flipped_usd),
|
|||
|
|
"total_minted_juno": float(self.total_minted_juno)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
def estimate_market_flip(self) -> Dict:
|
|||
|
|
"""
|
|||
|
|
Оценка потенциала переворота рынка.
|
|||
|
|
|
|||
|
|
Если 1% рынка демерджа перевернуть в Montana:
|
|||
|
|
"""
|
|||
|
|
# Консервативная оценка: 5% от $15 трлн = $750 млрд в демердже
|
|||
|
|
demurrage_market = Decimal("750000000000") # $750B
|
|||
|
|
flip_1_percent = demurrage_market * Decimal("0.01")
|
|||
|
|
|
|||
|
|
# Средний демердж = $30,000/день = $0.35/секунда
|
|||
|
|
avg_rate_per_second = Decimal("30000") / Decimal("86400")
|
|||
|
|
|
|||
|
|
# При перевороте: $ → Ɉ (1 секунда = 1 Ɉ)
|
|||
|
|
potential_juno = flip_1_percent / avg_rate_per_second
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
"estimated_demurrage_market": "$750B/year",
|
|||
|
|
"flip_1_percent": f"${flip_1_percent / Decimal('1000000000'):.1f}B",
|
|||
|
|
"potential_juno_minted": f"{potential_juno:,.0f} Ɉ",
|
|||
|
|
"note": "1% market flip = massive Ɉ liquidity"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|||
|
|
# DEMO
|
|||
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
protocol = DemurrageProtocol()
|
|||
|
|
|
|||
|
|
print("=" * 60)
|
|||
|
|
print("DEMURRAGE PROTOCOL — Переворот штрафов")
|
|||
|
|
print("=" * 60)
|
|||
|
|
print("\n'Платишь если медлишь.' → 'Получаешь если присутствуешь.'")
|
|||
|
|
|
|||
|
|
# Пример: судно задержалось на 2 дня
|
|||
|
|
event = protocol.record_event(
|
|||
|
|
vessel_id="BULK-001",
|
|||
|
|
port="Rotterdam",
|
|||
|
|
planned_days=5,
|
|||
|
|
actual_days=7,
|
|||
|
|
rate_per_day=15000,
|
|||
|
|
vessel_type="bulk_carrier"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
print(f"\n--- СОБЫТИЕ ДЕМЕРДЖА ---")
|
|||
|
|
print(f"Судно: {event.vessel_id}")
|
|||
|
|
print(f"Порт: {event.port}")
|
|||
|
|
print(f"План: {event.planned_days} дней")
|
|||
|
|
print(f"Факт: {event.actual_days} дней")
|
|||
|
|
print(f"Задержка: {event.delay_days} дней ({event.delay_seconds:,} секунд)")
|
|||
|
|
|
|||
|
|
print(f"\n--- ПЕРЕВОРОТ ---")
|
|||
|
|
result = protocol.flip(event)
|
|||
|
|
print(f"Традиционно (−): ${result.traditional:,.2f} штраф")
|
|||
|
|
print(f"Montana (+): {result.montana:,.0f} Ɉ награда")
|
|||
|
|
print(f"Направление: {result.direction_flip}")
|
|||
|
|
|
|||
|
|
print(f"\n--- ПОТЕНЦИАЛ РЫНКА ---")
|
|||
|
|
potential = protocol.estimate_market_flip()
|
|||
|
|
print(f"Рынок демерджа: {potential['estimated_demurrage_market']}")
|
|||
|
|
print(f"1% переворот: {potential['flip_1_percent']}")
|
|||
|
|
print(f"Потенциал Ɉ: {potential['potential_juno_minted']}")
|
|||
|
|
|
|||
|
|
print("\n" + "=" * 60)
|
|||
|
|
print("'Логистика наказывает. Montana вознаграждает.'")
|
|||
|
|
print("=" * 60)
|