montana/Русский/Экономика/банк_времени/код/beeple_benchmark.py

386 lines
17 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
"""
beeple_benchmark.py — Генезис цены времени Montana
Источник: Christie's Auction, 12 марта 2021
Работа: Beeple "Everydays: The First 5000 Days"
Цена: $69,346,250
Время работы: 5000 дней
Формула: $69,346,250 ÷ 5000 дней ÷ 86400 секунд = $0.160523726(851)̅
Это GENESIS цены времени — первая публичная фиксация стоимости секунды.
"""
from decimal import Decimal, getcontext
from datetime import datetime, timezone
from typing import Dict
# Высокая точность для бесконечной дроби
getcontext().prec = 50
# ═══════════════════════════════════════════════════════════════════════════════
# GENESIS CONSTANTS
# ═══════════════════════════════════════════════════════════════════════════════
# Аукцион Christie's
BEEPLE_SALE_USD = Decimal("69346250") # $69,346,250
BEEPLE_DAYS = Decimal("5000") # 5000 дней работы
SECONDS_PER_DAY = Decimal("86400") # 24 * 60 * 60
# ═══════════════════════════════════════════════════════════════════════════════
# GENESIS TRANSACTION (ФИНАЛЬНАЯ)
# ═══════════════════════════════════════════════════════════════════════════════
#
# Хронология:
# 1. 2021-02-16 05:58:01 UTC — Минт NFT (Token ID #40913)
# 2. 2021-03-11 15:00:00 UTC — Закрытие аукциона Christie's
# 3. 2021-03-13 03:58:XX UTC — Передача в escrow MakersPlace
# 4. 2021-03-13 05:16:XX UTC — ФИНАЛЬНАЯ передача к MetaKovan ← GENESIS
#
# Книга Монтана: "12.03.2021 05:16:XX UTC — генезис цены времени"
# (формат DD.MM.YYYY, но фактически 13 марта по UTC)
# GENESIS = финальная транзакция передачи NFT к покупателю MetaKovan
# Etherscan: Mar-13-2021 04:16:33 AM UTC
GENESIS_TIMESTAMP = "2021-03-13T04:16:33+00:00"
GENESIS_DATE = "2021-03-13"
GENESIS_TIME_UTC = "04:16:33"
# Ethereum transaction data
ETHEREUM_TX_MINT = "0x84760768c527794ede901f97973385bfc1bf2e297f7ed16f523f75412ae772b3"
ETHEREUM_TX_ESCROW = "0xa342e9de61c34900883218fe52bc9931daa1a10b6f48c506f2253c279b15e5bf"
ETHEREUM_TX_FINAL = "0x01d0967faaaf95f3e19164803a1cf1a2f96644ebfababb2b810d41a72f502d49" # GENESIS
TOKEN_ID = 40913
BEEPLE_WALLET = "0xc6b0562605D35eE710138402B878ffe6F2E23807"
MAKERSPLACE_CONTRACT = "0x2a46f2ffd99e19a89476e2f62270e0a35bbf0756"
MAKERSPLACE_ESCROW = "0x58bf1fbeac9596fc20d87d346423d7d108c5361a"
METAKOVAN_WALLET = "0x8bb37fb0f0462bb3fc8995cf17721f8e4a399629"
# Хронология
# 1. 2021-02-16 05:58:01 UTC — Минт NFT
# 2. 2021-02-25 — Открытие аукциона Christie's
# 3. 2021-03-11 15:00 EST — Закрытие аукциона ($69,346,250)
# 4. 2021-03-13 03:58:XX UTC — Beeple → MakersPlace escrow
# 5. 2021-03-13 04:16:33 UTC — MakersPlace → MetaKovan (GENESIS)
NFT_MINTED_DATE = "2021-02-16"
NFT_MINTED_TIMESTAMP = "2021-02-16T05:58:01+00:00"
AUCTION_OPEN_DATE = "2021-02-25"
AUCTION_CLOSE_DATE = "2021-03-11"
FINAL_TRANSFER_DATE = "2021-03-13"
FINAL_TRANSFER_TIMESTAMP = "2021-03-13T04:16:33+00:00" # GENESIS
# Покупатель
BUYER_PSEUDONYM = "MetaKovan"
BUYER_NAME = "Vignesh Sundaresan"
BUYER_PROJECT = "Metapurse"
BUYER_COUNTRY = "Singapore"
# Характеристики NFT
NFT_DIMENSIONS = "21,069 x 21,069 pixels"
NFT_SIZE_BYTES = 319_168_313 # ~319 MB
NFT_TITLE = "Everydays: The First 5000 Days"
NFT_ARTIST = "Beeple (Mike Winkelmann)"
# Расчёт цены секунды
PRICE_PER_DAY = BEEPLE_SALE_USD / BEEPLE_DAYS
PRICE_PER_SECOND = BEEPLE_SALE_USD / (BEEPLE_DAYS * SECONDS_PER_DAY)
# Округлённое значение для UI
PRICE_PER_SECOND_ROUNDED = Decimal("0.16")
# ═══════════════════════════════════════════════════════════════════════════════
# GENESIS EXCHANGE RATES (12.03.2021)
# ═══════════════════════════════════════════════════════════════════════════════
# Курсы валют на момент GENESIS транзакции (13.03.2021 04:16:33 UTC)
# Формат: 1 USD = X валюты (для фиата), или 1 крипто = X USD (для крипто)
GENESIS_RATES_FIAT = {
# Основные мировые валюты
"USD": ("$", "US Dollar", Decimal("1.0")),
"EUR": ("", "Euro", Decimal("0.84")),
"GBP": ("£", "British Pound", Decimal("0.72")),
"JPY": ("¥", "Japanese Yen", Decimal("108.50")),
"CHF": ("Fr", "Swiss Franc", Decimal("0.93")),
# СНГ
"RUB": ("", "Russian Ruble", Decimal("73.50")),
"UAH": ("", "Ukrainian Hryvnia", Decimal("27.80")),
"KZT": ("", "Kazakh Tenge", Decimal("420.00")),
"BYN": ("Br", "Belarusian Ruble", Decimal("2.60")),
"AMD": ("֏", "Armenian Dram", Decimal("522.00")),
"GEL": ("", "Georgian Lari", Decimal("3.30")),
"AZN": ("", "Azerbaijani Manat", Decimal("1.70")),
"UZS": ("сўм", "Uzbek Som", Decimal("10500.00")),
# Азия
"CNY": ("¥", "Chinese Yuan", Decimal("6.50")),
"HKD": ("HK$", "Hong Kong Dollar", Decimal("7.76")),
"TWD": ("NT$", "Taiwan Dollar", Decimal("28.50")),
"KRW": ("", "South Korean Won", Decimal("1130.00")),
"SGD": ("S$", "Singapore Dollar", Decimal("1.34")),
"INR": ("", "Indian Rupee", Decimal("72.50")),
"THB": ("฿", "Thai Baht", Decimal("30.50")),
"VND": ("", "Vietnamese Dong", Decimal("23000.00")),
"IDR": ("Rp", "Indonesian Rupiah", Decimal("14400.00")),
"MYR": ("RM", "Malaysian Ringgit", Decimal("4.10")),
"PHP": ("", "Philippine Peso", Decimal("48.50")),
# Ближний Восток
"AED": ("د.إ", "UAE Dirham", Decimal("3.67")),
"SAR": ("", "Saudi Riyal", Decimal("3.75")),
"ILS": ("", "Israeli Shekel", Decimal("3.30")),
"TRY": ("", "Turkish Lira", Decimal("7.50")),
# Америка
"CAD": ("C$", "Canadian Dollar", Decimal("1.26")),
"MXN": ("$", "Mexican Peso", Decimal("20.90")),
"BRL": ("R$", "Brazilian Real", Decimal("5.60")),
"ARS": ("$", "Argentine Peso", Decimal("90.50")),
"CLP": ("$", "Chilean Peso", Decimal("720.00")),
"COP": ("$", "Colombian Peso", Decimal("3650.00")),
"PEN": ("S/", "Peruvian Sol", Decimal("3.65")),
# Океания
"AUD": ("A$", "Australian Dollar", Decimal("1.30")),
"NZD": ("NZ$", "New Zealand Dollar", Decimal("1.40")),
# Африка
"ZAR": ("R", "South African Rand", Decimal("15.10")),
"NGN": ("", "Nigerian Naira", Decimal("380.00")),
"EGP": ("", "Egyptian Pound", Decimal("15.70")),
# Европа (не EUR)
"PLN": ("", "Polish Zloty", Decimal("3.85")),
"CZK": ("", "Czech Koruna", Decimal("22.00")),
"SEK": ("kr", "Swedish Krona", Decimal("8.50")),
"NOK": ("kr", "Norwegian Krone", Decimal("8.55")),
"DKK": ("kr", "Danish Krone", Decimal("6.25")),
"HUF": ("Ft", "Hungarian Forint", Decimal("305.00")),
"RON": ("lei", "Romanian Leu", Decimal("4.10")),
}
GENESIS_RATES_CRYPTO = {
# Цена в USD на 12.03.2021
"BTC": ("", "Bitcoin", Decimal("57500")),
"ETH": ("Ξ", "Ethereum", Decimal("1820")),
"SOL": ("", "Solana", Decimal("14.50")),
"BNB": ("BNB", "Binance Coin", Decimal("265")),
"ADA": ("", "Cardano", Decimal("1.15")),
"DOT": ("DOT", "Polkadot", Decimal("36.50")),
"XRP": ("XRP", "Ripple", Decimal("0.45")),
"DOGE": ("Ð", "Dogecoin", Decimal("0.055")),
"LTC": ("Ł", "Litecoin", Decimal("195")),
"LINK": ("LINK", "Chainlink", Decimal("28.50")),
}
# Расчёт цены секунды во всех валютах
SECOND_PRICE_ALL = {}
# Фиат: price_per_second * exchange_rate
for code, (symbol, name, rate) in GENESIS_RATES_FIAT.items():
SECOND_PRICE_ALL[code] = {
"symbol": symbol,
"name": name,
"price": PRICE_PER_SECOND * rate,
"rate": rate,
"type": "fiat"
}
# Крипто: price_per_second / crypto_price_usd
for code, (symbol, name, price_usd) in GENESIS_RATES_CRYPTO.items():
SECOND_PRICE_ALL[code] = {
"symbol": symbol,
"name": name,
"price": PRICE_PER_SECOND / price_usd,
"rate": price_usd,
"type": "crypto"
}
# ═══════════════════════════════════════════════════════════════════════════════
# BEEPLE BENCHMARK
# ═══════════════════════════════════════════════════════════════════════════════
class BeepleBenchmark:
"""
Генезис цены времени из аукциона Beeple.
Книга Монтана, Глава 03:
> "$0.16 за секунду было установлено публично.
> На глазах у всех. Никто не заметил."
"""
def __init__(self):
self.sale_usd = BEEPLE_SALE_USD
self.days = BEEPLE_DAYS
self.genesis_time = datetime.fromisoformat(GENESIS_TIMESTAMP)
def get_price_per_second(self, precision: int = 20) -> Decimal:
"""
Цена секунды с заданной точностью.
Returns:
Decimal: $0.160523726851851851851...
"""
getcontext().prec = precision + 10
return self.sale_usd / (self.days * SECONDS_PER_DAY)
def get_price_per_day(self) -> Decimal:
"""Цена дня работы."""
return self.sale_usd / self.days # $13,869.25
def get_price_per_hour(self) -> Decimal:
"""Цена часа работы."""
return self.get_price_per_day() / Decimal("24") # $577.89
def get_price_per_minute(self) -> Decimal:
"""Цена минуты работы."""
return self.get_price_per_hour() / Decimal("60") # $9.63
def seconds_since_genesis(self) -> int:
"""Секунды с момента генезиса."""
now = datetime.now(timezone.utc)
delta = now - self.genesis_time
return int(delta.total_seconds())
def value_of_time(self, seconds: int) -> Dict[str, Decimal]:
"""
Стоимость времени во ВСЕХ валютах (genesis rates 12.03.2021).
Args:
seconds: Количество секунд
Returns:
Dict с ценами в USD, RUB, EUR, CNY, BTC, ETH и др.
"""
result = {"seconds": Decimal(seconds)}
for currency, price_per_sec in SECOND_PRICE_ALL.items():
result[currency] = price_per_sec * Decimal(seconds)
return result
def get_all_second_prices(self) -> Dict[str, Decimal]:
"""Цена 1 секунды во всех валютах на момент genesis."""
return SECOND_PRICE_ALL.copy()
def get_btc_price_per_second(self) -> Decimal:
"""Цена секунды в Bitcoin (genesis rate)."""
return SECOND_PRICE_ALL["BTC"]
def get_eth_price_per_second(self) -> Decimal:
"""Цена секунды в Ethereum (genesis rate)."""
return SECOND_PRICE_ALL["ETH"]
def format_price(self) -> str:
"""Человекочитаемый формат цены."""
price = self.get_price_per_second(precision=15)
return f"${price:.12f}/sec (repeating 851)"
def get_genesis_info(self) -> Dict:
"""Полная информация о генезисе цены времени."""
return {
"event": "Christie's Auction - Beeple Everydays: The First 5000 Days",
"genesis_timestamp": GENESIS_TIMESTAMP,
"genesis_date": GENESIS_DATE,
"genesis_time_utc": GENESIS_TIME_UTC,
"sale_usd": float(self.sale_usd),
"sale_eth": 42329.453,
"days_of_work": int(self.days),
"price_per_second_usd": float(self.get_price_per_second()),
"price_per_second_rounded": 0.16,
"formula": "$69,346,250 ÷ 5000 days ÷ 86400 sec = $0.160523726(851)̅",
# Ethereum data
"ethereum_tx_final": ETHEREUM_TX_FINAL,
"token_id": TOKEN_ID,
"from_wallet": MAKERSPLACE_ESCROW,
"to_wallet": METAKOVAN_WALLET,
# Участники
"artist": NFT_ARTIST,
"buyer": f"{BUYER_NAME} ({BUYER_PSEUDONYM})",
"buyer_project": BUYER_PROJECT,
"auction_house": "Christie's",
"book_reference": "Книга Монтана, Глава 03. Поток"
}
# ═══════════════════════════════════════════════════════════════════════════════
# CONVENIENCE FUNCTIONS
# ═══════════════════════════════════════════════════════════════════════════════
def get_second_price() -> Decimal:
"""Быстрый доступ к цене секунды."""
return PRICE_PER_SECOND
def get_second_price_rounded() -> Decimal:
"""Округлённая цена для UI."""
return PRICE_PER_SECOND_ROUNDED
def calculate_time_value(seconds: int) -> Decimal:
"""Стоимость N секунд в USD."""
return PRICE_PER_SECOND * Decimal(seconds)
# ═══════════════════════════════════════════════════════════════════════════════
# DEMO
# ═══════════════════════════════════════════════════════════════════════════════
if __name__ == "__main__":
benchmark = BeepleBenchmark()
print("=" * 60)
print("BEEPLE BENCHMARK — Genesis цены времени")
print("=" * 60)
info = benchmark.get_genesis_info()
print(f"\nСобытие: {info['event']}")
print(f"Дата: {info['date']}")
print(f"Сумма: ${info['sale_usd']:,.0f}")
print(f"Дней работы: {info['days_of_work']}")
print(f"\n--- ЦЕНА 1 СЕКУНДЫ (Genesis 12.03.2021) ---")
prices = benchmark.get_all_second_prices()
print("\nФиат:")
print(f" USD: ${float(prices['USD']):.12f}")
print(f" RUB: ₽{float(prices['RUB']):.6f}")
print(f" EUR: €{float(prices['EUR']):.6f}")
print(f" GBP: £{float(prices['GBP']):.6f}")
print(f" CNY: ¥{float(prices['CNY']):.6f}")
print(f" JPY: ¥{float(prices['JPY']):.4f}")
print("\nКрипто:")
print(f" BTC: ₿{float(prices['BTC']):.10f} (при BTC=$57,500)")
print(f" ETH: Ξ{float(prices['ETH']):.8f} (при ETH=$1,820)")
print(f" SOL: ◎{float(prices['SOL']):.6f} (при SOL=$14.50)")
print(f"\n--- ЦЕНА ВРЕМЕНИ USD ---")
print(f"За секунду: {benchmark.format_price()}")
print(f"За минуту: ${benchmark.get_price_per_minute():.2f}")
print(f"За час: ${benchmark.get_price_per_hour():.2f}")
print(f"За день: ${benchmark.get_price_per_day():.2f}")
print(f"\n--- ПРИМЕР: 1 час твоего времени ---")
hour_value = benchmark.value_of_time(3600)
print(f" USD: ${float(hour_value['USD']):.2f}")
print(f" RUB: ₽{float(hour_value['RUB']):.2f}")
print(f" BTC: ₿{float(hour_value['BTC']):.8f}")
print(f" ETH: Ξ{float(hour_value['ETH']):.6f}")
print(f"\n--- СЕКУНД С ГЕНЕЗИСА ---")
print(f"{benchmark.seconds_since_genesis():,} секунд")
print("\n" + "=" * 60)
print("Книга Монтана: 'Никто не заметил. Ты заметил.'")
print("=" * 60)