Главное Авторские колонки Вакансии Вопросы
125 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Пример работы подтверждения транзакции в PoF‑блокчейне (на базе GLC)

Рассмотрим сценарий, где пользователь Алиса отправляет 10 GLC пользователю Боб. Сеть состоит из лёгких нод; даже при единственном активном участнике система остаётся работоспособной.
Мнение автора может не совпадать с мнением редакции


Шаг 1. Подготовка транзакции

Алиса (кошелёк: A):

  1. Имеет баланс: 100 GLC.
  2. Желает перевести: 10 GLC на адрес Боба (B).
  3. Устанавливает комиссию: 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

Ноды (включая ноду Алисы) получают транзакцию:

  1. Проверяют подпись (signature).
  2. Убеждаются, что у A достаточно средств (100 ≥ 10 + 0,1).
  3. Добавляют транзакцию в локальный tx_pool.

Автозапуск раунда PoF:

  1. Как только транзакция попадает в tx_pool, ноды инициируют новый раунд консенсуса.
  2. Для участия в раунде нода должна:Иметь минимальный баланс GLC (например, 1 GLC).Быть онлайн и готова к VRF‑вычислениям.Отправить ready_signal в сеть.
  3. Иметь минимальный баланс GLC (например, 1 GLC).
  4. Быть онлайн и готова к VRF‑вычислениям.
  5. Отправить ready_signal в сеть.

Шаг 3. Выбор валидатора через VRF

Фаза 1. Генерация vrf_seedНоды собирают:

  1. хэш последней транзакции в tx_pool (tx_id);
  2. текущее время (UTC, округлённое до секунды);
  3. случайное число из 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):

  1. Собирает все транзакции из tx_pool (в т. ч. транзакцию Алисы).
  2. Формирует блок:

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..." }

  1. Рассылает блок в сеть.

Ноды проверяют блок:

  1. Корректность VRF: VRF_verify(X_pubkey, vrf_seed, vrf_output).
  2. Подпись блока (signature).
  3. Целостность транзакций (merkle_root).
  4. Отсутствие двойных трат.

Если проверка пройдена, блок добавляется в цепочку.

Шаг 5. Обновление балансов и уведомление пользователей

После подтверждения блока:

  1. Баланс Алисы обновляется:100 → (100 − 10 − 0,1) = 89,9 GLC.
  2. Баланс Боба обновляется:0 → 0 + 10 = 10 GLC.
  3. Комиссия (0,1 GLC) распределяется (например, в фонд сети или валидатору).

Ноды синхронизируют состояние:

  1. Обновляют локальную базу балансов.
  2. Очищают tx_pool от подтверждённых транзакций.
  3. Рассылают уведомление: «Транзакция a1b2c3... подтверждена в блоке 12345».

Особенности работы при 1 участнике

Если в сети только нода Алисы (остальные оффлайн):

  1. Алиса отправляет транзакцию сама себе (или на другой свой адрес).
  2. Её нода:автоматически запускает раунд PoF;генерирует vrf_seed;вычисляет vrf_output для себя;становится валидатором (т. к. других кандидатов нет);формирует блок с транзакцией;подтверждает его локально.
  3. автоматически запускает раунд PoF;
  4. генерирует vrf_seed;
  5. вычисляет vrf_output для себя;
  6. становится валидатором (т. к. других кандидатов нет);
  7. формирует блок с транзакцией;
  8. подтверждает его локально.
  9. Блок записывается в локальную цепочку.
  10. При подключении других нод:нода Алисы рассылает блок;остальные ноды проверяют его и синхронизируют состояние.
  11. нода Алисы рассылает блок;
  12. остальные ноды проверяют его и синхронизируют состояние.

Ключевые гарантии системы

  1. Децентрализация:Любой держатель GLC (с мин. балансом) может стать валидатором.Нет «центрального сервера».
  2. Любой держатель GLC (с мин. балансом) может стать валидатором.
  3. Нет «центрального сервера».
  4. Безопасность:VRF исключает подделку выбора валидатора.Подписи защищают от подмены транзакций.
  5. VRF исключает подделку выбора валидатора.
  6. Подписи защищают от подмены транзакций.
  7. Живучесть:Сеть работает даже при 1 активной ноде.Транзакции не теряются — они ждут подтверждения в tx_pool.
  8. Сеть работает даже при 1 активной ноде.
  9. Транзакции не теряются — они ждут подтверждения в tx_pool.
  10. Прозрачность:Все изменения блокчейна хранятся на всех нодах.Любой участник может проверить историю блоков и балансов.
  11. Все изменения блокчейна хранятся на всех нодах.
  12. Любой участник может проверить историю блоков и балансов.

Итог

Схема работы:

  1. Пользователь отправляет транзакцию → ноды добавляют её в tx_pool.
  2. Автоматически запускается раунд PoF → ноды вычисляют VRF.
  3. Победитель формирует блок → ноды проверяют и подтверждают.
  4. Балансы обновляются → изменения синхронизируются между всеми узлами.

Преимущества:

  1. Минимальные требования к нодам.
  2. Мгновенная финализация при одном валидаторе.
  3. Полная прозрачность и децентрализация.

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.