MoneroKon D2 - Выступление Джетро Грасси

23/06/2019

Слон в пуле

Джетро является разработчиком Monero, разработчиком майнинг-пулов, разработчиком инструментальных средств и концепций и активно делится своим опытом, связанным с Monero, на Stack Exchange.

Аннотация

Майнинг-пулы стали де-факто способом майнинга криптовалют. Тем не менее несколько удивляет, что в области, где децентрализация и противодействие цензурированию считаются очень важными факторами, майнинг-пулы в том виде, в котором они существуют сегодня, стали обычным делом. Эту презентацию я начну с общей информации по майнингу и пулам, затем перейду к реальным опасностям, которые представляют собой майнинг-пулы для сети в целом, а также к тем преимуществам, которые обеспечивают индивидуальные майнеры, используемые в пулах. Начиная с перенаправления хеш-мощности на форки и заканчивая кражей долей — в этом выступлении будет рассказано о том, как недобросовестные операторы пулов могут пользоваться централизованной мощностью, а также о способах, при помощи которых майнеры могут обнаружить такое зловредное поведение. А закончим мы обзором альтернативных вариантов реализации майнинг-пулов с точки зрения их сильных и слабых сторон.

Стенограмма:

О’Кей, уверен, всем доводилось слышать выражение о «слоне в комнате», то есть о чём-то абсолютно очевидном. Я делаю эту оговорку просто, чтобы начать и обыграть данное выражение. Итак, я полагаю, что все мы здесь, в этой комнате, пришли в мир криптовалют, преследуя некоторые фундаментальные цели, которые сейчас показаны на экране: децентрализация, противодействие цензурированию, устранение фактора доверия, открытость и анонимность. Эти фундаментальные аспекты на данный момент являются причиной нашего участия в формировании удивительного мира. И есть одна вещь, которая вызывает у меня досаду и является при этом фундаментальной частью всей экосистемы, и я, конечно, говорю о майнинге. Итак, майнинг является фундаментальной составляющей работы криптовалют, тем не менее, с того момента как всё начиналось, с первых дней существования Bitcoin, мы стали свидетелями появления майнинг-пулов и множества связанных с ними вопросов.

Перед тем как мы перейдём непосредственно к принципам работы пулов, давайте вспомним и расскажем тем, кто только собирается заняться майнингом, как это работает. Рассмотрим пару фундаментальных моментов. Итак, транзакция: Элис хочет отправить Бобу некоторую сумму денег. Как мы знаем, деньги не будут переданы напрямую с компьютера Элис на компьютер Боба. На самом деле, транзакция будет транслирована в сеть и распространится среди других узлов сети. Они, по сути, добавляют её в пул транзакций. Здесь, на рисунке, транзакция, проводимая от Элис к Бобу, показана жёлто-оранжевым, и она находится в пуле транзакций, чтобы каждый узел мог увидеть её.

О’Кей, если один из этих узлов является майнером, что он делает? Он захватывает из пула столько транзакций, сколько может, чтобы создать то, что называется шаблоном блока. В этом примере он взял все, но очевидно, что в пуле могут находиться тысячи и тысячи транзакций, что возвращает нас к разговору об Articmines, майнер выбирает транзакции таким образом, чтобы на него не был наложен штраф за размер блока, поэтому обычно выбираются не все транзакции подряд. Как я уже сказал, из транзакций создаются шаблоны блоков, и это показано зелёной транзакцией внизу. Она называется coinbase-транзакцией, то есть, когда блок будет вычислен, майнер получит комиссии с других транзакций, а также coinbase-вознаграждение. Шаблон блока сжимается до так называемого массива данных хеширования блока, и это именно то, что вычисляет майнер, согласно тому, что сказал Говард, происходит неэффективный цикл, который майнер проходит до тех пор, пока не будет найден нонс-победитель, который будет добавлен в шаблон блока, который будет разослан всей остальной сети в надежде, что именно этот майнер нашёл его первым, а не кто-то другой, и если это окажется действительно так, он получит coinbase-вознаграждение, и это будет называться соло-майнингом.

А теперь о майнинг-пулах. Подобным образом у нас имеется ряд транзакций в пуле транзакций. Снова у нас есть жёлтая транзакция Элис и Боба. Теперь в этом примере сервер пула мы обозначим как красный компьютер, он будет делать то же, что и соло-майнер, то есть будет собирать транзакции, и, как я уже говорил, в этом случае берутся все транзакции, но их могло бы быть гораздо больше, и в этом заключается одна из проблем, связанных с майнинг-пулами, к которой я ещё вернусь. Итак, они берут эти транзакции и создают шаблон блока, добавляют собственную coinbase-транзакцию в этот шаблон, сокращают его до массива данных хеширования блока, и в рамках этого сценария сервер пула не работает с массивом данных хеширования блока, а распределяет его среди майнеров, входящих в пул. Эти майнеры получают массив данных хеширования блока. По сути, они получают собственные массивы данных хеширования блока, но это уже детали, которые не относятся к теме этого выступления. В ответ майнеры отправляют серверу нонс и хеш, которые были ими получены в результате.

Здесь важно то, что майнеры вообще не видят шаблона блока. Они понятия не имеют, какие транзакции входят в этот шаблон. Когда пул получает один из множества ответов от майнеров, входящих в него, он, очевидно, должен подтвердить его, и не забывайте, что результаты, получаемые от майнеров, входящих в пул, имеют сложность, которая меньше глобальной сложности, но один из них прохеширует этот массив данных хеширования, и если это действительно произойдёт, и полученный в результате хеш будет соответствовать глобальной сложности, то сервер пула сможет добавить нонс в шаблон блока и распространить его в остальной сети, пул получит выплату, а затем, конечно же, ответственность пула будет заключаться в распределении вознаграждения среди отдельных майнеров согласно их вкладу. Таким образом, в чём здесь заключаются основные проблемы. Ну, очевидно, нам приходится доверять пулу. Прежде всего, как майнерам нам приходится верить в то, что выплата будет честной и справедливой. На Reddit вы найдёте массу людей, которые жалуются на различные пулы, жалуются на то, что пул не выплатил им справедливую долю. Первые пулы срезали доли так, что сами получали большую выгоду.

Что касается всех остальных, нас, остальной части сети, нам приходится верить в то, что эти пулы являются честными участниками, но почему нам приходится оказывать такое доверие? Ну, нам приходится именно доверять, верить в то, что пулы честны, потому что они явно централизованы. Только они контролируют создание шаблона блока. Только они выбирают транзакции. Нам приходится верить в то, что они не проведут атаки, подобной атаке 51%, поскольку, будем честными, распределение пула не так уж и высоко. То есть множество раз случалось так, что один или два конкурирующих пула могли контролировать 51% хешрейта. Фактически совсем недавно перед нашим последним, не этим последним форком, а предпоследним форком, существовал вполне реальный риск, связанный с тем, что пул мог контролировать 51% хешрейта.

Ещё одна незаметная вещь в данном случае заключается в том, что нам приходится доверять тому, что майнинг происходит в правильном блокчейне. Не забывайте о том, что майнеры, работающие в пуле, понятия не имеют об этом, поскольку они хешируют, используя правильный алгоритм, а форков Monero точно с тем же алгоритмом хеширования может быть множество. Им и нам приходится верить в то, что пул выдаёт массивы данных хеширования блоков, принадлежащие именно блокчейну Monero. Мне бы не хотелось, чтобы майнеры занимались майнингом в каком-то из форков Monero. Сами майнеры могут иметь значительные инвестиции в Monero, и хотелось бы быть уверенными в том, что они помогают сети Monero, и здесь критически важна возможность цензурирования транзакций. Ни майнеры, ни мы, ни кто-либо ещё не может с уверенностью сказать, происходит цензурирование или нет. На самом деле, совсем недавно выяснилась пара вещей. Не помню точно, какая это была валюта, по-моему, это была ZCash или Zcoin. Одна из них. Выяснилось, что пул цензурировал некоторые транзакции. Так что это действительно фундаментальный вопрос.

Но почему мы пользуемся ими? Почему мы пользуемся этими пулами? Ну, с точки зрения майнеров, всё сводится к вариантности выплат, в конечном счёте неважно, занимаетесь ли вы соло-майнингом или делаете это в пуле, в конечном счёте вы получите выплату, вопрос в том, насколько часто это будет происходить. Если вам нужен регулярный доход, то майнинг через пул — это просто великолепно. Такой способ так же прост, поскольку не приходится создавать узел. Люди буквально не хотят связываться с проблемами, так как просто установить майнер на свой компьютер и указать на пул невероятно просто. Вам не нужно знать ничего, вы просто следуете руководству, состоящему из трёх предложений, которое публикуется на веб-сайте каждого пула, и вы можете начать майнинг буквально за несколько секунд. Другим фактором, безусловно, является зрелость подхода. Майнинг посредством пулов известен практически с момента появления Bitcoin, и тот вид майнинга через пул, который мы имеем на сегодняшний день, проверен и заслуживает доверия. То есть я хочу сказать, что это очень зрелое решение, но критическим моментом здесь является недостаточное количество имеющихся на сегодня альтернатив.

Лично я выделяю P2Pool среди всех остальных. Это одна из ранних реализаций пула для майнинга Bitcoin, и он крайне децентрализован, то есть у него вообще отсутствует какое-либо централизованное управление. Он работает, по сути, как и любой другой майнер, используя узел, узел P2Pool. Также этот пул имеет собственный узел Bitcoin, создаёт собственные шаблоны блоков, а майнинг представляет собой P2P запрос доли в блокчейне, то есть, по сути, все занимаются соло-майнингом, но с более низкой сложностью и с распределением среди других участников P2Pool. Очевидно, что одной из великолепных вещей, в случае с этим пулом, является то, что создаваемая coinbase-транзакция также предполагает выплату остальным участникам. Но и в случае с P2Pool есть пара недостатков, и наиболее очевидным из них является наличие дополнительных P2P издержек. Вам не только приходится создавать собственный P2P узел Bitcoin, вы также создаёте узел P2Pool. Также для узла P2Pool характерен высокий трафик, поскольку вы занимаетесь майнингом с меньшей сложностью, создавая блоки каждые 30 секунд, а не каждые две минуты. Таким образом, сетевой трафик увеличивается. Также есть издержки, связанные с консенсусом, так как меньшее время блока создаёт некоторые проблемы. Как я уже упоминал, существуют издержки, связанные с необходимостью создания полного узла. Также существует проблема плохого распределения сложности, впрочем, характерная для всех используемых на сегодняшний день пулов. Вы можете майнить со скоростью 50 хешей в секунду или со скоростью 50 мегахешей в секунду, но будете получать справедливую выплату, соответствующую вашему вкладу. К сожалению, в случае с P2Pool, всё немного сложнее, и все участники получают примерно одинаково, обладая приблизительно одним хешрейтом.

И ещё один важный момент — наличие только одного варианта реализации. Я потратил много времени в поисках другого. У меня ушло, пожалуй, шесть месяцев на попытку создания такого пула для Monero, который я мог бы представить вам сегодня. Но всё меняется. Многие говорили мне, что у меня возникнут проблемы с консенсусом, а я только отнекивался. У меня всё было разложено по полочкам, я всё продумал. Это не проблема, но теперь я уверен, что следовало послушать smooth и Говарда, но вместо этого я потратил полгода своей жизни. Чудесно.

Более приемлемый подход к хешированию был предложен Мэтом Королло, разработчиком Bitcoin. Он взглянул на эту проблему под несколько иным углом. То есть подошёл к той же самой проблеме, но с иной точки зрения. То есть посчитал, что несколько странно и даже, если честно, безумно иметь в нашей экосистеме криптовалют майнинг через пулы в том виде, в котором он существует сейчас. Абсолютно безумно. И, безусловно, эта проблема более характерна для Bitcoin, он предложил протокол, который позволил бы решить эту проблему в случае с Bitcoin. Он предложил, по сути, разделить две части майнинга посредством пула, разделить работу и выплаты. Для этого необходимо использовать то, что он назвал «контроллером». А я называю это прокси-сервером, то есть это очень похоже на то, что на данный момент делают прокси-серверы узлов. В основном это создание шаблонов блоков. Великолепно, таким образом, мы решаем вопрос цензурирования транзакций.

Тем не менее он также заменяет Stratum, некоторым очень не нравится, что Stratum не задокументирован. Это всё сделано наспех, но если честно, на мой взгляд, в случае с такими простыми протоколами, люди всё немного изменяют под себя. А что у нас не задокументировано? То есть я хочу сказать, что нет ничего, что реально не требовало бы замены. Но одной из замечательных задуманных им вещей стало то, что он придумал очень гибкий протокол, предусматривающий целый ряд различных способов работы, позволяющий переключать экосистему в соответствии с различными способами. Я не буду углубляться, но практически всё, связанное с улучшением хеширования, работает на экосистему Bitcoin. Это касается ASIC-майнеров. Тут возникает пара проблем, и первая, я не знаю, следил ли кто-то за этим, об этом писали в прессе, но его раскритиковала пара других разработчиков Bitcoin, что, на мой взгляд, было довольно нечестно, поскольку, даже несмотря на то, что улучшение хеширования не решает всех проблем, как это происходит в случае с P2Pool с точки зрения децентрализации, но это решает одну из проблем, которую я, пожалуй, считаю самой важной проблемой, проблему цензурирования. Логика централизованных выплат сохраняется, майнерам по-прежнему приходится доверять пулу, но они получают честную долю, так как coinbase выплачивает пулу напрямую.

Отказ от Stratum, учитывая, как пулы работают сегодня, значительно усложняет ситуацию. И всякий раз, когда вы что-то усложняете, это касается не только изменений в пулах, это также касается майнеров, программного обеспечения, которое они используют. Речь идёт также и о фактических узлах Bitcoin. Так что тут мы говорим о значительном ряде изменений, которые необходимо внести сверх улучшения протокола хеширования. Менее важный факт заключается в том, что на данный момент всё это было ещё недостаточно протестировано, и очевидно, что нам не хотелось бы перейти на что-то совершенно неизвестное. Мне бы хотелось добавить, что поскольку, как мне кажется, любые изменения, в частности, в случае с Bitcoin, где речь идёт о больших деньгах. И как я уже тоже говорил множество раз, всё сильно смещено в направлении сценария использования ASIC, и мне не надо напоминать, что ASIC не создают полных узлов, ASIC недостаточно умны для того, чтобы выбирать те транзакции, которые войдут в шаблон блока. Схема ASIC просто получает что-то для хеширования, хеширует это и возвращает результат. Вот и всё, что делает ASIC.

И вот, что мне удалось выяснить за месяцы мучений с консенсусом P2Pool, которого, как я считаю, нам необходимо добиться. Я определённо собираюсь реализовать это в пуле, автором которого являюсь, и в майнере, над которым сейчас работаю. Это расширение Stratum, если взять Stratum в том виде, в котором он сейчас работает. Он не требует больших изменений, а лишь то, что я собираюсь предложить вам. Всё, что нужно, это чтобы пул отправлял coinbase-транзакцию в Stratum. А в настоящее время он отправляет массив данных хеширования блока, но теперь он будет отправлять только coinbase-транзакцию. Затем ваш майнер возьмёт coinbase-транзакцию и создаст собственный шаблон блока точно так же, как это делает соло-майнер. Но там, где в подобной ситуации соло-майнер добавляет собственную coinbase-транзакцию, будет браться coinbase-транзакция, предоставленная пулом. Ох, я приукрасил одну вещь в отношении coinbase-транзакции, которая отсылается обратно. В идеале это должна быть coinbase-транзакция с множеством выходов. На данный момент, после того как я поработал над P2Pool, coinbase осуществляет только одну выплату. Я сделал патч для Monero, который позволит создавать множество выплат и coinbase-транзакций.

И это очень важно с точки зрения проведения аудита. Итак, пул отправляет майнеру coinbase-транзакцию, и майнер создаёт шаблон блока, создаёт собственный массив данных хеширования блока и майнит его со сложностью, ожидаемой пулом, или же с той, с которой майнер сам решит его хешировать. И что критически важно, майнер может передать этот блок сюда, майнер не обязан отправлять созданный им блок обратно пулу, поскольку это создаёт другую проблему. Если вы отправляете блок обратно пулу, то вам приходится доверять ему, то есть быть уверенным в том, что пул передаст его. Таким образом, по существу, вы даёте майнеру максимально возможное количество полномочий, что мы, к счастью, можем себе позволить, так как в нашем случае далеко не все наши майнеры используют ASIC, они работают с машин под Windows или Mac, или Linux, и не важно, используют ли они при этом двадцать GPU или же нагружают свой CPU, мы делаем это с компьютеров, поэтому мы можем создавать полные узлы, что обеспечивает более высокий уровень контроля.

Также критически важно, если задуматься, то, что изменения, необходимые для этого, ничтожны. Они действительно совсем невелики. Таким образом, безусловно, остаётся та же проблема, что и в случае с улучшенным хешированием Мэта — нам по-прежнему приходится доверять пулу при распределении долей. Это позволяет создавать coinbase-транзакцию с множеством выходов, но в конечном счёте, если остаётся единственная вещь, вызывающая беспокойство, которая заключается в том, что пул контролирует распределение долей, очевидно, майнеры смогут определить, как ведут себя пулы в этом отношении. Все знают, майнингом чего они занимаются. Все наблюдают сетевой майнинг. Все видят, как происходит майнинг в пуле и могут всё вычислить сами, и это происходило в прошлом, по сути, в первые дни с пулами, когда майнеры могли задаться вопросам, почему при скорости в три мегахеша они не получают надлежащей выплаты. Вы можете сами определить это. Так что это не проблема. Самой большой проблемой является то, что теперь майнерам будет нужен доступ к узлам. Мне неизвестно, сколько людей являются действующими майнерами, но я могу сказать, основываясь на собственном опыте взаимодействия с нашими каналами на Reddit и Stack Exchange, что большинство майнеров находятся в игре исключительно из-за денег, поэтому есть необходимость запуска ими полных узлов, должен я вам сказать. Ну, это просто прекрасно, безусловно, но в реальности некоторые майнеры начнут жаловаться, и это представляет собой проблему. Но я думаю, что наилучшим способом развития является именно то, что я собираюсь реализовать в ближайшие пару недель. И я надеюсь, что и некоторые другие пулы последуют этим путём, так как, несмотря на то, что это не идеальный вариант, он решает пару действительно критически важных вопросов.

Итак, вопросы?

Вопрос из зала: Вы видели, как Grin использует Stratum-сервер с каждым полным узлом?

Ответ: Да, да.

Вопрос из зала: Что вы думаете об этом?

Ответ: Да, есть множество интересных способов, множество, то есть мне бы хотелось, чтобы у каждого была возможность заниматься соло-майнингом, однако…

Вопрос из зала: Это как бы вы являетесь собственным пулом, вы занимаетесь соло-майнингом, но это не так. Некоторые средние майнеры могли бы, мне кажется, поскольку создание Stratum, собственного Stratum-сервера это такая заноза в заднице, я слышал, многие оставили эти попытки. Как вы видите решение? Stratum с полными узлами Monero?

Ответ: Да, это определённо, определённо один из вопросов. Есть также конкурирующий форк, который только что добавил то, что вы описываете, порт майнингового Stratum-сервера. Они называют это сервером пула для соединения с их фактическим узлом. То есть я сомневаюсь, что это решит достаточное количество проблем, и нам надо рассмотреть все причины, по которым используют майнинг-пулы, и если мы сможем внести минимальные изменения в существующую экосистему, то избавимся от некоторых действительно больших проблем. Мне кажется, это наиболее чувствительный подход, это единственный способ достичь того, чтобы многие майнеры обновили свой подход к майнингу. Буквально, если единственным изменением, которое им придётся сделать, будет запуск полного узла, то, как по мне, это будет великолепно.

Вопрос из зала: Вопрос. Мне интересно, я полагаю, вам известно о Bitcoin и об API функции, создающей шаблон блока. Она появилась довольно давно, и она позволяет майнерам заполнять блоки транзакциями, правильно? И, насколько мне известно, никто не использует её, так как майнеры совершенно апатичны, и у них нет желания запускать полные узлы в принципе. Поэтому мне интересно, чего вы ожидаете? Вы ожидаете, что майнеры Monero поведут себя иначе, чем все остальные, чем майнеры Bitcoin, при реализации подобного дополнения?

Ответ: Monero использует ту же самую функцию для создания шаблонов блоков. Так работает соло-майнинг, и эту функцию используют все пулы. Они используют одну и ту же функцию, Bitcoin и Monero создают шаблон блока, чтобы в соответствии с ним происходил майнинг. Проблема состоит в том, что вы можете обойти его, вы можете создать собственный шаблон блока. Вы можете выбрать собственные транзакции, которые войдут в шаблон блока, и это одна из проблем, связанных с пулами.

Ответ: Я немного сбился, но да, вы сказали о том, что майнеру придётся запускать собственный полный узел при реализации моего сценария расширенного протокола Stratum, когда пул не создаёт шаблона блока. Это единственная проблема, которую мы пытаемся решить, и состоит она в том, что пул создаёт шаблон блока.

Вопрос из зала: Если бы теоретически нашёлся какой-то экстремальный способ заставить заниматься соло-майнингом в сети на уровне консенсуса, как если бы приходилось использовать свой приватный ключ для подписания транзакции или что-то в этом роде, то есть я имею в виду, если бы удалось принудить людей не использовать майнинг-пулы, вас бы заинтересовало это?

Ответ: Ха! Ни вам, ни мне не нравятся какие-либо экстремальные действия. Я бы сказал, что экосистема майнинга важна, она является большой частью криптовалютного мира, это одна из частей треугольника, и я считаю важным наличие соответствующего рынка, и им нужен майнинг посредством пулов, О’Кей. Да, мне бы понравилось это. Если бы каждый участник сети Monero занимался майнингом, если бы майнинг происходил через каждый кошелёк, а в идеале каждый пользователь стал бы майнером. О, да, это было бы просто фантастикой. Но реальность такова, что мы далеки от этого, в нашей экосистеме есть сегмент, занимаемый майнерами, и нам необходимо наблюдать за ними, и давайте заниматься именно этим и вовлекать их в экосистему. Но делать это нужно ответственно. Вот, что я хочу сказать.

Вопрос из зала: Короткий вопрос. Как только вы реализуете свой пул, будет ли он публичным, чтобы каждый мог заниматься в нём майнингом? И что касается coinbase-выплат с множеством выходов. Как я понимаю, в Monero существует ограничение — 16 выходов на транзакцию. Изменится ли это, или вы сделаете coinbase-транзакции с множеством выходов?

Ответ: Нет. Это действительно интересный вопрос, поскольку я сам раздумывал над этим ранее. Проблема в том, как пулы будут осуществлять выплаты? Я пришёл к этому вопросу, когда работал над P2Pool, и я не помню, кто именно на IRC спросил, не будет ли простым решением, чтобы майнеры ожидали достижения определённого порога перед тем, как получат выплату. Поэтому в патче с coinbase-транзакциями, который я сделал, который я использовал при тестировании P2Pool, как вы сказали, использовалось только 16 выходов. Но пул работает так, что он ожидает, пока X, ну, 16 майнеров, не достигнут определённого порога, и затем он осуществляет выплату. Таким образом, вы никогда не получите выплаты, пока не достигнете определённого порога, шестнадцати в данном случае, да.

Перевод: Mr. Pickles
Редактирование: Agent LvM
Коррекция: Kukima