315 lines
8.7 KiB
Markdown
315 lines
8.7 KiB
Markdown
|
|
# ПРОТОКОЛ 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
|
|||
|
|
金元Ɉ
|
|||
|
|
```
|