Пример работы подтверждения транзакции в PoF‑блокчейне (на базе GLC)
Шаг 1. Подготовка транзакции
Алиса (кошелёк: A):
- Имеет баланс: 100 GLC.
- Желает перевести: 10 GLC на адрес Боба (B).
- Устанавливает комиссию: 0,1 GLC.
Формирование транзакции:
json
{ "tx_id": "a1b2c3...", "sender": "A", "receiver": "B", "amount": 10.0, "fee": 0.1, "timestamp": 1735678920, "signature": "sig_A_ed25519..." }Алиса подписывает транзакцию своим приватным ключом и рассылает в P2P‑сеть.
Шаг 2. Проверка нодами и запуск раунда PoF
Ноды (включая ноду Алисы) получают транзакцию:
- Проверяют подпись (signature).
- Убеждаются, что у A достаточно средств (100 ≥ 10 + 0,1).
- Добавляют транзакцию в локальный tx_pool.
Автозапуск раунда PoF:
- Как только транзакция попадает в tx_pool, ноды инициируют новый раунд консенсуса.
- Для участия в раунде нода должна:Иметь минимальный баланс GLC (например, 1 GLC).Быть онлайн и готова к VRF‑вычислениям.Отправить ready_signal в сеть.
- Иметь минимальный баланс GLC (например, 1 GLC).
- Быть онлайн и готова к VRF‑вычислениям.
- Отправить ready_signal в сеть.
Шаг 3. Выбор валидатора через VRF
Фаза 1. Генерация vrf_seedНоды собирают:
- хэш последней транзакции в tx_pool (tx_id);
- текущее время (UTC, округлённое до секунды);
- случайное число из P2P‑сети (медиана последних 3 сообщений).
Итоговый vrf_seed = hash(tx_id + timestamp + p2p_random).
Фаза 2. VRF‑вычислениеКаждая нода‑кандидат выполняет:
pythonvrf_output = VRF_sign(private_key, vrf_seed) # 256‑bit число broadcast({"pubkey": pk, "vrf_output": vrf_output})
Фаза 3. Определение победителяНоды сравнивают vrf_output всех кандидатов. Побеждает нода с минимальным значением (например, 0×0000abcd...).
Шаг 4. Формирование и подтверждение блока
Победитель (нода X):
- Собирает все транзакции из tx_pool (в т. ч. транзакцию Алисы).
- Формирует блок:
json{ "block_height": 12345, "prev_hash": "last_block_hash...", "vrf_seed": "vrf_seed_value", "winner_pubkey": "X_pubkey", "transactions": [ { "tx_id": "a1b2c3...", "sender": "A", "receiver": "B", "amount": 10.0, "fee": 0.1 } ], "merkle_root": "merkle_hash...", "timestamp": 1735678930, "signature": "sig_X_ed25519..." }
- Рассылает блок в сеть.
Ноды проверяют блок:
- Корректность VRF: VRF_verify(X_pubkey, vrf_seed, vrf_output).
- Подпись блока (signature).
- Целостность транзакций (merkle_root).
- Отсутствие двойных трат.
Если проверка пройдена, блок добавляется в цепочку.
Шаг 5. Обновление балансов и уведомление пользователей
После подтверждения блока:
- Баланс Алисы обновляется:100 → (100 − 10 − 0,1) = 89,9 GLC.
- Баланс Боба обновляется:0 → 0 + 10 = 10 GLC.
- Комиссия (0,1 GLC) распределяется (например, в фонд сети или валидатору).
Ноды синхронизируют состояние:
- Обновляют локальную базу балансов.
- Очищают tx_pool от подтверждённых транзакций.
- Рассылают уведомление: «Транзакция a1b2c3... подтверждена в блоке 12345».
Особенности работы при 1 участнике
Если в сети только нода Алисы (остальные оффлайн):
- Алиса отправляет транзакцию сама себе (или на другой свой адрес).
- Её нода:автоматически запускает раунд PoF;генерирует vrf_seed;вычисляет vrf_output для себя;становится валидатором (т. к. других кандидатов нет);формирует блок с транзакцией;подтверждает его локально.
- автоматически запускает раунд PoF;
- генерирует vrf_seed;
- вычисляет vrf_output для себя;
- становится валидатором (т. к. других кандидатов нет);
- формирует блок с транзакцией;
- подтверждает его локально.
- Блок записывается в локальную цепочку.
- При подключении других нод:нода Алисы рассылает блок;остальные ноды проверяют его и синхронизируют состояние.
- нода Алисы рассылает блок;
- остальные ноды проверяют его и синхронизируют состояние.
Ключевые гарантии системы
- Децентрализация:Любой держатель GLC (с мин. балансом) может стать валидатором.Нет «центрального сервера».
- Любой держатель GLC (с мин. балансом) может стать валидатором.
- Нет «центрального сервера».
- Безопасность:VRF исключает подделку выбора валидатора.Подписи защищают от подмены транзакций.
- VRF исключает подделку выбора валидатора.
- Подписи защищают от подмены транзакций.
- Живучесть:Сеть работает даже при 1 активной ноде.Транзакции не теряются — они ждут подтверждения в tx_pool.
- Сеть работает даже при 1 активной ноде.
- Транзакции не теряются — они ждут подтверждения в tx_pool.
- Прозрачность:Все изменения блокчейна хранятся на всех нодах.Любой участник может проверить историю блоков и балансов.
- Все изменения блокчейна хранятся на всех нодах.
- Любой участник может проверить историю блоков и балансов.
Итог
Схема работы:
- Пользователь отправляет транзакцию → ноды добавляют её в tx_pool.
- Автоматически запускается раунд PoF → ноды вычисляют VRF.
- Победитель формирует блок → ноды проверяют и подтверждают.
- Балансы обновляются → изменения синхронизируются между всеми узлами.
Преимущества:
- Минимальные требования к нодам.
- Мгновенная финализация при одном валидаторе.
- Полная прозрачность и децентрализация.