Подсчет сложности раунда добычи блока, если добыча ведется на нескольких распределенных серверах (вариант 1)
В майнинговом пуле, где добыча блока ведётся на нескольких распределённых серверах одновременно, подсчёт общей сложности раунда требует учета всех шар (shares), отправленных майнерами в пул, с учётом их сложности. Вот пошаговое объяснение, как это сделать:
1. Определение общей сложности раунда
Общая сложность раунда — это сумма сложностей всех валидных шар, отправленных майнерами в пул в процессе поиска одного блока.
Основные понятия:
- Шара (share): Частичное решение задачи, отправляемое майнером в пул. Оно соответствует сложности ниже установленного порога (target difficulty), который задаёт пул.
- Сложность шары: Это сложность задачи, которую решает майнер, измеряемая в относительных единицах (по сравнению с базовым «порогом» сложности).
- Целевая сложность блока: Это сложность, которую нужно достичь, чтобы найти полноценный блок (обычно она гораздо выше сложности шары).
2. Учет всех шар
Каждый распределённый сервер должен:
- Принимать шары от подключённых к нему майнеров.
- Проверять валидность шар (сравнивать хеш с порогом сложности пула).
- Фиксировать сложность каждой принятой шары.
Сложности шар:
- Сложность шары зависит от настройки пула (например, для майнеров с низкой мощностью устанавливается низкая сложность).
- Обычно сложность выражается как множитель базовой сложности:
Например, сложность 1 соответствует базовому уровню, а сложность 1024 означает, что шара в 1024 раза сложнее базовой.
3. Сбор данных с распределённых серверов
Каждый сервер должен периодически:
- Подсчитывать сумму сложностей всех валидных шар, принятых за текущий раунд.
- Отправлять эти данные в центральный узел или хранилище.
Пример:
- Сервер 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. Окончание раунда
Раунд завершается, когда одна из шар достигает сложности, достаточной для нахождения блока (соответствующей целевой сложности блока). После этого:
- Пул проверяет, какой из майнеров предоставил «победную» шару.
- Подсчёт общей сложности раунда фиксируется для распределения награды.
6. Периодический пересчёт сложности
Для равномерного распределения работы между майнерами:
- Сложность шар может динамически меняться (т.н. Dynamic Difficulty Adjustment):
- Мощным майнерам назначается высокая сложность (чтобы они реже отправляли шары).
- Слабым майнерам назначается низкая сложность.
7. Технические аспекты реализации
1. Хранилище данных:
- Используйте централизованную базу данных для хранения статистики по всем шарам.
- Пример структуры:
- Поля: ID майнера, ID сервера, сложность шары, время получения.
2. Распределение работы:
- Серверы должны быть синхронизированы и регулярно отправлять статистику на центральный узел.
3. Периодическая агрегация:
- Централизованный сервер может собирать данные каждые несколько секунд для оперативного подсчёта.
Итоговая формула:
Recommended Posts
Плата за транзакции и их влияние на майнинг
19.04.2022