montana/Русский/Бот/ПРОТОКОЛ_TIME_BANK.md

315 lines
8.7 KiB
Markdown
Raw Permalink 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.

# ПРОТОКОЛ TIME_BANK v3.0 — Банк Времени Montana
## Версия: 3.0
## Дата: 2026-01-20
## Автор: Alejandro Montana
---
## 1. ГЛАВНЫЙ ПРИНЦИП
**ПРИСУТСТВИЕ = ВЗАИМОДЕЙСТВИЕ**
> Пока ты общаешься с Юноной — ты присутствуешь.
> Пока узел работает — Атлант присутствует.
>
> **1 Ɉ = 1 секунда доказанного присутствия.**
---
## 2. ДВА ТИПА ПРИСУТСТВИЯ
### 2.1 Пользователь (Telegram)
```
Присутствие = Взаимодействие с ботом
Сообщение/Команда/Кнопка → activity(telegram_id) → +1 Ɉ/сек
```
**Активность:**
- Отправил сообщение → присутствует
- Вызвал команду → присутствует
- Нажал кнопку → присутствует
- Молчит > 1 минуты (τ₁) → пауза
**Код в боте:**
```python
# Каждое взаимодействие = присутствие
time_bank.activity(str(user_id), "telegram")
```
### 2.2 Атлант (Сервер/Узел)
```
Атлант ВСЕГДА присутствует (пока работает)
Старт бота → atlant_presence_loop() → +1 Ɉ/сек (постоянно)
```
**Логика:**
- Атлант = сервер, на котором работает бот
- Пока бот работает → Атлант присутствует
- Пинг каждые 60 сек поддерживает активность
**Код в боте:**
```python
async def atlant_presence_loop():
atlant_address = f"atlant_{node_name}"
time_bank.start(atlant_address, "atlant")
while _is_polling:
time_bank.activity(atlant_address, "atlant")
await asyncio.sleep(60)
time_bank.end(atlant_address)
```
---
## 3. ВРЕМЕННЫЕ КООРДИНАТЫ
### Иерархия времени Montana
| Уровень | Интервал | Описание |
|---------|----------|----------|
| τ₁ | 1 минута | Подпись присутствия (ML-DSA-65) |
| τ₂ (T2) | 10 минут | Слайс, подтверждение баланса |
| τ₃ | 14 дней | Checkpoint |
| τ₄ | 4 года | Epoch, Халвинг ÷2 |
### T2 — Основной цикл
```
[0 сек] ─────────────────────────── [600 сек]
T2 = 10 минут
Pending секунды ─── ПОДТВЕРЖДЕНИЕ ──→ Баланс
(в кэше) (в БД)
```
**Каждые 10 минут:**
1. Все накопленные `t2_seconds` конвертируются в баланс
2. Баланс записывается в БД
3. Счётчик `t2_seconds` сбрасывается
---
## 4. МЕХАНИЗМ НАЧИСЛЕНИЯ
### 4.1 Поток данных
```
Пользователь Атлант
│ │
│ сообщение работает
▼ ▼
activity(tg_id) activity(atlant_id)
│ │
└──────────┬──────────────────────┘
┌─────────────┐
│ PresenceCache │
│ entries[addr] │
│ t2_seconds++ │
└──────┬──────┘
│ каждую секунду (_tick)
│ если активен < 3 мин
┌─────────────┐
│ T2 (10 мин) │
│ _finalize_t2 │
└──────┬──────┘
┌─────────────┐
│ DB │
│ balance += N │
└─────────────┘
```
### 4.2 Код начисления (time_bank.py)
```python
def _tick(self):
"""Каждую секунду"""
for address, entry in self.presence.all().items():
inactive = now - entry["last_activity"]
if inactive < INACTIVITY_LIMIT_SEC: # < 3 мин
entry["presence_seconds"] += 1
entry["t2_seconds"] += 1
else:
entry["is_active"] = False # Пауза
def _finalize_t2(self):
"""Каждые 10 минут"""
for address, entry in self.presence.all().items():
if entry["t2_seconds"] > 0:
coins = int(entry["t2_seconds"] * halving_coefficient)
self.db.credit(address, coins)
entry["t2_seconds"] = 0
```
---
## 5. КОНСТАНТЫ ПРОТОКОЛА
```python
class Protocol:
VERSION = "3.0"
# Время
INACTIVITY_LIMIT_SEC = 1 * 60 # τ₁ = 1 минута без активности = пауза
T2_DURATION_SEC = 10 * 60 # 10 минут = слайс
TAU3_DURATION_SEC = 14 * 24 * 3600 # 14 дней = checkpoint
TAU4_DURATION_SEC = 4 * 365 * 86400 # 4 года = epoch
# Начисление
COINS_PER_SECOND = 1 # 1 секунда = 1 Ɉ
# Сеть
NODES_COUNT = 5 # 5 узлов Montana
```
---
## 6. ХАЛВИНГ
**Эмиссия делится на 2 каждые τ₄ (4 года)**
| Epoch (τ₄) | Годы | Коэффициент | 1 сек = |
|------------|------|-------------|---------|
| 0 | 0-4 | 1.0 | 1 Ɉ |
| 1 | 4-8 | 0.5 | 0.5 Ɉ |
| 2 | 8-12 | 0.25 | 0.25 Ɉ |
| 3 | 12-16 | 0.125 | 0.125 Ɉ |
```python
def halving_coefficient(tau4_count: int) -> float:
return 1.0 / (2 ** tau4_count)
```
---
## 7. БАЛАНС В БОТЕ
### Команда /balance
```
Ɉ
**Твой кошелек Montana**
**Адрес:** `123456789`
_(твой Telegram ID — адрес кошелька и ключ)_
💰 **Баланс:** 1200 Ɉ
⏳ **Накапливается:** +45 Ɉ
─────────────────────────
💎 **Всего:** 1245 Ɉ
⏱ Следующее подтверждение через 7:32
```
**Два типа баланса:**
- `confirmed` — подтверждённый (в БД)
- `pending` — накапливается в текущем T2 (в кэше)
---
## 8. АДРЕСА
### Типы адресов
| Тип | Формат | Пример |
|-----|--------|--------|
| Пользователь | Telegram ID | `8552053404` |
| Атлант | `atlant_{node_name}` | `atlant_amsterdam` |
| Узел | `mt + SHA256(pubkey)[:40]` | `mt1a2b3c4d...` |
---
## 9. КРИПТОГРАФИЯ
### ML-DSA-65 Presence Proof
Каждую τ₁ (1 минуту) узел подписывает доказательство присутствия:
```
MONTANA_PRESENCE_V1:{timestamp}:{prev_hash}:{pubkey}:{t2_index}
```
**Цепочка proofs:**
```
Proof #1 → hash₁
Proof #2 (prev=hash₁) → hash₂
Proof #3 (prev=hash₂) → hash₃
```
---
## 10. СТАТИСТИКА /stats
```
Ɉ
**📊 Montana Protocol — Статистика**
**⏱ Временные Координаты**
├ τ₂ (текущий slice): #1234
├ τ₃ (checkpoints): #5
├ τ₄ (epoch): #0
└ Год Montana: 0
**💰 Эмиссия**
├ Коэффициент халвинга: 1.0×
└ 1 секунда присутствия = 1 Ɉ
**🌐 Сеть**
├ Активное присутствие: 3
Всего кошельков: 15
```
---
## 11. ФИЛОСОФИЯ
> **Время — единственный ресурс, распределённый одинаково между всеми.**
>
> 24 часа у каждого. Montana оцифровывает это присутствие.
>
> Присутствие = Взаимодействие.
> Атлант = Сервер, который держит сеть.
>
> **1 Ɉ = 1 секунда твоей жизни, доказанной присутствием.**
---
## 12. СТАТУС РЕАЛИЗАЦИИ
```
✅ v3.0 — PRODUCTION
├ Присутствие пользователей (Telegram)
├ Присутствие Атлантов (серверы)
├ T2 подтверждение (10 мин)
├ Халвинг (4 года)
├ ML-DSA-65 Presence Proof
└ SQLite хранилище
```
---
**Подпись протокола:**
```
ПРОТОКОЛ: TIME_BANK v3.0
ДАТА: 2026-01-20
АВТОР: Alejandro Montana
СТАТУС: MAINNET PRODUCTION
金元Ɉ
```