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

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

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


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

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

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

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

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

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

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

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

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

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

Каждый сервер должен периодически отправлять данные каждой шары в центральный узел или хранилище. Это должно происходить относительно часто (раз в секунду или несколько секунд). Отправка должна осуществляться пакетом, сразу по несколько шар, чтобы избежать перегрузки центрального сервера запросами.

 


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

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

  • Шары, присланные всеми серверами, записываются в хранилище.

 


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

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

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

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

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

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

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

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

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

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

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

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

  • Централизованный сервер может подсчитывать текущую наработанную сложность каждые несколько секунд для отображения процесса «добычи» в реальном времени.

 

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

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