IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Подсчет сложности раунда добычи блока, если добыча ведется на нескольких распределенных серверах (вариант 1)

В майнинговом пуле, где добыча блока ведётся на нескольких распределённых серверах одновременно, подсчёт общей сложности раунда требует учета всех шар (shares), отправленных майнерами в пул, с учётом их сложности. Вот пошаговое объяснение, как это сделать:


1. Определение общей сложности раунда

Общая сложность раунда — это сумма сложностей всех валидных шар, отправленных майнерами в пул в процессе поиска одного блока.

Основные понятия:

  • Шара (share): Частичное решение задачи, отправляемое майнером в пул. Оно соответствует сложности ниже установленного порога (target difficulty), который задаёт пул.
  • Сложность шары: Это сложность задачи, которую решает майнер, измеряемая в относительных единицах (по сравнению с базовым «порогом» сложности).
  • Целевая сложность блока: Это сложность, которую нужно достичь, чтобы найти полноценный блок (обычно она гораздо выше сложности шары).

2. Учет всех шар

Каждый распределённый сервер должен:

  • Принимать шары от подключённых к нему майнеров.
  • Проверять валидность шар (сравнивать хеш с порогом сложности пула).
  • Фиксировать сложность каждой принятой шары.

Сложности шар:

  • Сложность шары зависит от настройки пула (например, для майнеров с низкой мощностью устанавливается низкая сложность).
  • Обычно сложность выражается как множитель базовой сложности:
    Например, сложность 1 соответствует базовому уровню, а сложность 1024 означает, что шара в 1024 раза сложнее базовой.

3. Сбор данных с распределённых серверов

Каждый сервер должен периодически:

  1. Подсчитывать сумму сложностей всех валидных шар, принятых за текущий раунд.
  2. Отправлять эти данные в центральный узел или хранилище.

Пример:

  • Сервер 1 принял 100 шар со сложностью 1 и 50 шар со сложностью 2.
    Общая сложность на сервере 1 = 100×1+50×2=200.
  • Сервер 2 принял 80 шар со сложностью 1.
    Общая сложность на сервере 2 = 80×1=.

4. Централизованный подсчёт

На уровне центрального узла (или управляющего сервера пула):

  • Сложности, подсчитанные на каждом сервере, суммируются.

Пример:

Если данные с серверов таковы:

  • Сервер 1: 200
  • Сервер 2: 80

То общая сложность раунда = 200+80=.


5. Окончание раунда

Раунд завершается, когда одна из шар достигает сложности, достаточной для нахождения блока (соответствующей целевой сложности блока). После этого:

  1. Пул проверяет, какой из майнеров предоставил «победную» шару.
  2. Подсчёт общей сложности раунда фиксируется для распределения награды.

6. Периодический пересчёт сложности

Для равномерного распределения работы между майнерами:

  • Сложность шар может динамически меняться (т.н. Dynamic Difficulty Adjustment):
    • Мощным майнерам назначается высокая сложность (чтобы они реже отправляли шары).
    • Слабым майнерам назначается низкая сложность.

7. Технические аспекты реализации

1. Хранилище данных:

  • Используйте централизованную базу данных для хранения статистики по всем шарам.
  • Пример структуры:
    • Поля: ID майнера, ID сервера, сложность шары, время получения.

2. Распределение работы:

  • Серверы должны быть синхронизированы и регулярно отправлять статистику на центральный узел.

3. Периодическая агрегация:

  • Централизованный сервер может собирать данные каждые несколько секунд для оперативного подсчёта.

Итоговая формула:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *