229 / 736JNP

Job Negotiation

Майнить вместе, но выбирать содержимое блока самостоятельно

Анна майнит в пуле — группе, которая совместно учитывает работу и распределяет вознаграждения. Но она не хочет, чтобы оператор всегда выбирал за неё ещё и список транзакций. Например, ей нужно включить действительный платёж, пропущенный в выданном шаблоне. Шаблон — это проект будущего блока: в нём, помимо прочего, указано, какие транзакции должны в него войти. Job Negotiation разделяет эти вопросы: майнер может предлагать содержимое блока и при этом сохранять участие в общих выплатах. Для этого нужна поддержка программы и другой стороны. Собственный выбор не даёт права обходить правила Bitcoin.

Job Negotiation — согласование между майнером и пулом собственного задания для майнинга. Stratum V2 задаёт правила обмена данными между майнинговыми устройствами и пулом. Job Declaration Protocol — его часть для собственных предложений, работающая вместе с передачей шаблонов и заданий. Цель — дать возможность выбирать транзакции, пока пул продолжает учитывать работу и платить вознаграждения. Важна реальная конфигурация, а не только название соединения.

Анна переходит на Stratum V2, но список транзакций по-прежнему получает от пула. Противоречия нет. Mining Protocol, часть для передачи работы и результатов, может действовать без Job Declaration и Template Distribution. Последняя поставляет шаблоны блоков, а Job Declaration занимается собственными предложениями. Чтобы Анна могла выбирать, нужны и эти роли, и поддерживающий их пул. Более современный способ передачи сам по себе не говорит, кто определяет содержимое блока в сети Bitcoin. [1] [4]

Выбранные платежи не могут заполнить блок настолько, что его транзакция вознаграждения coinbase уже не поместится. Поэтому поставщик шаблона, Template Provider, должен знать нужный резерв. На стороне Анны работает программа JDC, сокращённо Job Declarator Client. Она выясняет требования используемых пулов и отправляет их поставщику шаблона в сообщении с данными CoinbaseOutputConstraints. Резервируют место для данных и sigops — операции проверки подписей, учитываемые в лимите блока. Иначе дополнительные выходы coinbase, записи о назначении средств, могли бы превысить лимиты блока. При самостоятельном выборе транзакций нужно с самого начала учитывать, будет ли весь блок соответствовать правилам. [3]

В режиме Full-Template JDC отправляет DeclareMiningJob серверу JDS — Job Declarator Server на стороне пула или службы, которой пул доверяет. Сообщение перечисляет идентификаторы выбранных транзакций. Если серверу не хватает одной из этих транзакций, он может запросить данные через ProvideMissingTransactions. Анна таким образом делится сведениями для проверки своего выбора. Подтверждение декларации и последующее принятие собственного задания пулом — два отдельных шага. Первое успешное сообщение ещё не завершает всё согласование. [2]

В режиме Coinbase-only JDC не раскрывает набор транзакций, а DeclareMiningJob не используется. Пул оценивает доход по предоставленной coinbase. Это скрывает выбор Анны от пула, но само по себе не доказывает соответствие скрытых транзакций правилам или настоящий размер их комиссий. Спецификация прямо описывает этот риск. Меньше переданных данных означает и другие возможности проверки; название режима не гарантирует, что все условия вознаграждения надлежащим образом подтверждены. Эта конфиденциальность касается проекта во время майнинга. Если Анна найдёт действительный блок и распространит его по сети, его транзакции станут видимыми. [2]

В техническом обмене встречается несколько похожих обозначений. JDS выдаёт mining_job_token, на который клиент ссылается в SetCustomMiningJob. Приняв задание, пул возвращает SetCustomMiningJob.Success со своим job_id. У токена и job_id разные роли: первый связывает согласование предложения, второй обозначает работу при подаче результатов. Это похоже на номер заявки и номер одобренного заказа. Если их перепутать, пул не сможет отнести результат к правильному принятому заданию. [1]

Ожидание каждого сетевого шага напрасно задерживало бы оборудование. Получив нужный токен и шаблон, клиент может начать оптимистичный майнинг до SetCustomMiningJob.Success. Найденные shares — частичные результаты, подтверждающие работу по цели пула, — сохраняются до подтверждения. После принятия задания их можно отправить с выданным идентификатором. Работающая машина поэтому ещё не доказывает, что пул принял или засчитал эту работу. Начало вычислений и согласие вознаграждать задание — разные моменты. [1] [2]

Если Анна получает SetCustomMiningJob.Error или не дожидается ответа за разумное время, спецификация рекомендует другой пул либо самостоятельный майнинг. Устойчивость зависит от работающего fallback — подготовленного запасного пути. Если программа незаметно перейдёт на исходный шаблон отказавшего пула, она сможет продолжить работу, но потеряет выбор Анны. Поэтому важно понимать, что система действительно делает при отказе. Описанная протоколом возможность не доказывает, что её поддерживает каждый сервис. [1] [4]

Анна хочет выбирать транзакции и сохранять общие выплаты. Её JDC должен назначить сумму определённому выходу пула в coinbase, чтобы выполнить условия этих вознаграждений. Если она направляет часть дохода в другое место, пул может пропорционально уменьшить оплату этой работы. Job Declaration не создаёт автоматической прямой выплаты майнеру и не устраняет правила учёта сервиса. Он прежде всего меняет то, кто может предлагать содержимое блока; правила проверки блоков и распределение дохода следует рассматривать отдельно. [2]

Для полной картины прочитайте эту статью вместе с Stratum V2, getblocktemplate, Mining Pool, Block Template, Bitcoin. На эту статью также ссылаются Stratum V2, Mining Pool Centralization.

DOC · 001Stratum V2 — Mining Protocol and Custom JobsСпецификация DOC · 002Stratum V2 — Job Declaration ProtocolСпецификация DOC · 003Stratum V2 — Template Distribution ProtocolСпецификация DOC · 004SRI — Pool and miner application rolesПервичный источник
Обновлено: Сначала источники · Не является инвестиционной рекомендацией