Почему пулы скрывают от вас Stale шары?
2/15/2023
Криптекс не скрывает потери из-за отклоненных шар. Другие пулы могут это делать.
Довольно смешно иногда читать: “А у пула N 0% реджектов”.
Смешно, потому что так не может быть. Почему? Разбираемся!
Виды решений и их отличия
Видеокарта обрабатывает работу → отправляет решения → пул проверяет решения:
Share accepted (шара принята) — все хорошо, пул принял решение и оно будет оплачено.
Rejected share (шара отклонена) — с решением что-то не так, и пул его отклоняет:
- Invalid share — неверное решение. Видеокарта посчитала задачу неверно (2+2=5). Обычно, такое решение отсеивается ещё на этапе проверке компьютером и не отправляется на пул. На правильно настроенной видеокарте неверных решений практически не бывает.
- Stale share — “старое”, “несвежее”, “запоздалое”, “неактуальное” решение. Это решение, которое пришло на пул слишком поздно, так как пул уже выдал другую задачу для поиска другого блока.
- Duplicate share — решение-дубликат. По какой-то причине, видеокарта дважды посчитала и отправила одно и то же решение. Два одинаковых решения пул не примет. Решение, которое поступает на пул позже, отмечается как duplicate и не оплачивается.
Чаще всего Stale и Duplicate — результат сетевых задержек и проблем с интернет соединением.
Почему 0% Rejected shares — это обман?
Пул выдает всем пользователям задачи по поиску решения для одного и того же блока, причем решение зависит от случайных чисел (хеш функция). Для нахождения криптовалютного блока выделено определённое время, заданное разработчиками монеты.
Когда видеокарта находит решение — она отправляет это решение пулу. И тут появляются две возможности:
- Ваша карта нашла шару в заданный период поиска блока. Отлично, эта шара принимается, share accepted!
- Ваша карта нашла шару, когда блок уже сформирован. Ваша карта не смогла найти решение в отведенное время, но через пару секунд все-таки обнаружила его и послала на пул. Эта шара имеет шанс породить Uncle block. То есть она еще не совсем потеряна. Но пул её обязан отметить stale.
Шара, которая не вписывается в отведённое на поиска блока время (Block time) — рискует породить Uncle Block.
Понятие Uncle Block есть только у Ethereum-based монет (ETH, ETHW, ETHF, ETC, UBQ). В остальных монетах, такие блоки называются Orphan Block. Такие блоки вообще не приносят прибыли ни пулу, ни майнерам.
Stale shares у вас будут, и чем больше задержка сети (чем позже видеокарта получит работу) — тем их будет больше.
Даже если проблем с сетью нет — майнер может отправить шару для блока уже после того, как блок был найден. Шара становится stale и годится максимум для Uncle блока.
В итоге получается, что реджекты из пункта 2 избежать нельзя.
Поиск блока и награда за блок
Рассмотрим процесс на примере сети Ethereum Classic ETC (для разных монет условия будут разными).
Исходные данные:
- Время на поиск блока — 13,3 секунды.
- Награда за блок (на момент написания) — 2.56 ETC + награда за Uncle блок. Награда за блок снижается на 20% каждые 5 000 000 блоков, согласно протоколу монеты ETC. На момент написания, награда за Uncle блок составляет около 0,08 ETC.
- Если пул нашел блок позже другого пула — его блок становится Uncle-блоком.
Расчёт награды за блок и uncle блок можно найти в этой статье разработчиков: https://ethereumclassic.org/blog/2018-02-22-rewards
Время блока
Время блока — это время, за которое вы должны отправить шару и пул примет её для формирования блока. Это промежуток времени отведённый для шары, чтобы стать accepted.
Майнеры, которые участвовали в создании блоков, получают дополнительную награду с Uncle блоков.
- Если шара отправлена в рамках времени, заданного на поиск Block 1 (в среднем 13,3 секунды) — она учитывается для нахождения Block 1.
- Если шара для Block 1 отправлена после того, как Block 1 был найден — она не используется, но может участвовать в создании Uncle Block 1 первого, или второго порядка.
13,3 с — среднее время на поиск блока. То есть если первый блок найден за 20 секунд, второй за 10 секунд, третий за 9 секунд то среднее время время блока будет 13 секунд.
Шара, время которой больше 60 секунд, с вероятностью близкой к 100%, должна стать stale (rejected), так как пул не сможет использовать такую шару для формирования блока. Она может подойти максимум для Uncle блока.
На картинке ниже, можно увидеть распределение вероятности блоков. Вертикальная шкала — вероятность нахождения блока (0.0 — 0%, 1.0 — 100%), а горизонтальная — время блока в секундах.
График позаимствован со статьи https://github.com/rolandkofler/blocktime
Блокчейн один, пулов много, майнеров ещё больше. Один блок могут добывать несколько пулов и тысячи майнеров одновременно. Майнер может подключится в любой момент, и даже если шара отправлена быстро (15 мс), она имеет шанс стать частью Uncle блока. Сам блок уже найден, но эта шара предназначалась ему.
Награду за блок получает тот пул и те майнеры, которые нашли блок.
Пул, который имеет больше stale шар имеет меньше полноценных блоков и больше участвует в создании Uncle блоков, а значит пул зарабатывает меньше и майнеры, которые майнят на нём зарабатывают меньше.
Награда за Uncle блок
Uncle-блоки — это действительные блоки, созданные майнером практически в то же время, когда другой майнер уже добыл успешный блок. Uncle-блоки появляются из-за задержки в сети и формируются из stale шар.
Награда за Uncle блок зависит от количества присоединённых Uncle блоков, а также от количества самих блоков на текущий момент. Uncle блок оплачивается за счет вновь созданных блоков. Каждый новый блок может включать не более двух Uncle блоков. Награда за каждый Uncle блок составляет 1/32 от базовой награды за блок, или 3,125% от награды за блок.
Для чего пулы скрывают stale шары?
- Репутация пула: пул хорошо выглядит в глазах майнеров. Не видно проблемы — значит, её и нет вообще.
- Плюсы для майнеров с плохим соединением: они получают награду, несмотря на сетевые проблемы (по сути — незаслуженно).
- Плюсы для майнеров с хорошим соединением: Никаких!
Что плохого в сокрытии stale шар?
В сокрытии stale или любых других rejected шар нет ничего хорошего. От этого страдают все: пул, майнеры с проблемами и майнеры, у которых проблем нет.
Скрывая stale шары — пул лишает вас честного заработка!
- Минусы для пулов: снижается общая доходность. Из-за стейлов снижается количество находимых блоков, за которые майнеры получают 100% прибыли. Увеличивается количество Uncle-блоков, за которые майнеры получают лишь 3% прибыли.
- Минусы для майнеров с плохим соединением: они не знают о наличии проблемы и ничего с ней не делают. Они неосознанно снижают общую доходность пула для себя и для остальных. Проблема копится и когда-нибудь выйдет боком.
- Но больше всех страдают майнеры, у которых проблем НЕТ:
- Майнеры, у которых проблем нет майнят “и за себя и за того парня” — делятся своей наградой с теми, кто майнит со стейлами.
- Они никак не влияют на ситуацию — с их стороны всё нормально.
Что теряют майнеры? Сколько это в деньгах?
Увеличение количества stale шар приводит к пропорциональному увеличению количества Uncle блоков и уменьшению нормальных блоков. Между stale шарами и Uncle блоками существует прямая зависимость. Если у пользователя на пуле 50% stale шар — то у него будет 50% награды от Uncle блоков, а не от нормального блока.
- Вознаграждение за uncle block 1 = 3% от нормального.
- Вознаграждение за uncle block 2 = 3% от нормального.
Если предположить, что на пуле 5% майнеров, которые генерируют только стейл шары (которые порождают uncle block), то потери составляют:
- uncle block 1:
(100-3)*0,05 = 4,85%
- uncle block 2:
(100-3)*0,05 = 4,85%
Суммарная потеря составит 9,7%
- Пул продолжает оплачивать комиссии за транзакции, которые так же стоят денег.
- Пул убытки нести не будет, потому свои убытки переложит на плечи пользователей.
Неужели всё так плохо?
Существуют пулы, на который можно майнить stale шарами 24/7, и более того — получить выплату! Зачастую, такие пулы даже не будут смотреть, из-за чего эти стейлы.
Можно создать искусственную задержку интернет соединения, скажем, в 120 секунд, и отправлять шары. Пул со спокойной душой отметит их как принятые.
Время нахождения блока всё такое-же — 13.3 секунды.
- PPS пулы, которые платят за каждую найденную шару, просто обязаны отмечать такие шары, так как любое отклонение от нормы (любые шары, кроме share accepted) напрямую влияют на доход майнера.
- PPLNS пулы могут скрыть стейл шару, прикрывшись “низкой удачей на пуле”.
Если вы майните 100% стейлами в обоих случаях, пул знает об этом и показывает их. Более того — продолжает платит деньги!
Это говорит только об одном: недостачу пул покроет из кармана майнеров, у которых всё хорошо.
Работали 2 два ремонтника: Саша и Петя. Саша работал честно, а Петя не делал ничего. Пришёл начальник работу принимать, и заплатил им поровну. Начальник говорит, что видит только сделанную работу, а что так было “несделано” его не волнует. Работали вдвоём? Значит вдвоём оплату и получаете.
“Как же так? Это же не честно!” — верно, не честно, но это плата за умышленное, или неумышленное сокрытие стейлов.
Что делать, если у меня плохое интернет соединение. Я могу это исправить?
- Разгрузите интернет канал. Качаете торрент? Ограничьте скорость и количество одновременных подключений. Если это не поможет — попробуйте вообще закрыть торрент. Смотрите Ютуб? Возможно, стоит понизить качество картинки? Это разгрузит канал и улучшит соединение.
- Отключите все возможные ограничители в виде антивируса или файрволла.
- Отключите VPN или Proxy. Интернет через VPN или Proxy почти всегда хуже прямого соединения.
- Замените подключение на прямое проводное LAN подключение, если пользуетесь Wi-Fi роутером или мобильным интернетом. Wi-Fi всегда будет хуже, чем проводной интернет, так как на него влияет множество факторов: помехи радио эфира, перегруженность канала, качество Wi-Fi роутера, качество Wi-Fi приёмника, и даже работающая микроволновка (микроволновка работает в том же частотном диапазоне, что и Wi-Fi, разница только в мощности сигнала).
Больше советов в нашей статье “Как избавиться от отклонённых шар?”