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