Шпионский майнинг это вовсе не скрытый майнинг монеро на веб-сайтах, как можно было бы подумать. Это абсолютно легальный, но очень вредный для всех заработок на сети. Но для того, чтобы подобраться к корню этого понятия, нам нужно для начала разобраться, как вообще добываются блоки.
Каждый блок состоит из некоторого количества информации: список всех транзакций, время создания, адрес награды нашедшему майнеру ( так называемая coinbase-транзакция) и хэш предыдущего блока. В любой блок может включаться произвольное количество информации, не больше лимита (к примеру, 1 Мб в Биткойне, 32 Мб в Биткойн Кэше, динамический лимит в Эфириуме). Это значит, что блок может не содержать вообще ни одной чужой транзакции! Все, что нужно блоку, чтобы быть принятым сетью - хэш, то есть криптографическая сумма всех данных предыдущего блока, и coinbase-транзакция, то есть вознаграждение майнеру за нахождение этого блока. То есть, единственное, что нужно для нахождения блока, это хэш предыдущего. И тут мы переходим к шпионскому майнингу.
Майнинг-пулы работают на максимизацию своей прибыли. То есть, их задача - найти как можно больше блоков, получив максимальное вознаграждение за минимальное количество времени. Найдя блок, они сразу принимаются за следующий, так как у них есть нужный хэш, что даёт им преимущество перед конкурентами - ведь те ещё ищут старый. У них есть возможность даже "придержать" блок для себя, но чем больше проходит времени, тем больше шансов, что кто-то тоже найдёт этот блок и опубликует его первым. Если пул большой, он может позволить себе маленькую задержку, это называется "эгоистичный майнинг" (selfish mining). В любом случае, имея информацию о всех данных в своём новом блоке, он отсылает хэш своим участникам, чтобы они начали работу над следующим, ещё до того, как блок отослан в сеть. И он попадает в руки не только настоящим участникам, но и тем, кто состоит в пуле именно для сбора хэшей, как шпион - и передаёт в конкурентные пулы. Дальше начинается самое интересное.
Для нахождения следующего блока нужен хэш предыдущего, но также нужно и видеть содержимое предыдущего, чтобы не добавить уже включённые в блок транзакции и не совершить двойную трату одних и тех же средств. То есть, нужно дождаться опубликования блока и посмотреть транзакции. Но можно легально обойти это! Если пул нашёл хэш нового блока, он может сделать его пустым. Нет транзакций - нет риска двойной траты и нет риска, что сеть отвергнет блок. Награда за нахождение блока в любом случае получена, упущены лишь комиссии за транзакции, но ими можно пренебречь.
В 2016 году этим грешило большое количество Биткойн-пулов. На июль 2017 в блокчейне BTC было 87000 пустых блоков. Antpool, F2Pool и BTC.com майнили до 2% пустых блоков, а Antpool ещё и включал в блок меньше транзакций для ускорения обсчёта. Сейчас в Биткойне этого куда меньше, хотя Antpool иногда добывает пустые блоки (12 штук только за 5 октября), но майнеры-шпионы орудуют в сети Эфира.
Особенно отличился небольшой пул Etherdig. За 75 дней он намайнил 1250 блоков, на 836 тысяч долларов, и ни один из них не содержал транзакций. Другой, уже упомянутый выше пул F2Pool, который контролирует 13% сети, также начал майнить пустые блоки. После того, как это всплыло наружу, они перестали производить блоки без транзакций, а Etherdig вообще объявил о приостановке для реорганизации.
Плохо ли то, что это позволяется? Из-за децентрализованной натуры публичных блокчейнов такое поведение не может быть запрещено, это в рамках правил. То, что в пустые блоки не включаются транзакции, конечно, не приносит пользы, так как транзакции копятся в очереди, а сложность майнинга все равно повышается. Тем не менее, из-за постепенного снижения награды за каждый блок постепенно такая деятельность сойдёт на нет, так как будет выгоднее собирать награду за включение транзакций, чем просто за майнинг блоков.