Разрушаем миф о том, что Zcash имеет скрытую эмиссию

Вообще мифов вокруг Zcash множество.

По-крайней мере, мне известно о существовании следующих мифов:

Если знаете другой FUD (отталкивающая негативная информация, не подкреплённая фактами), то пишите в комментариях.

Итак. Миф о том что Zcash имеет скрытую эмиссию существует очень давно. Зародился он потому, что множество бирж, соревнуясь за звание самой крутого обмена, завышали заявленные объёмы торгов. В результате возникала ситуация из-за которой суточный объём торгов, указанный на популярном CoinMarketCap иногда кратно превышал известную эмиссию. Многие пользователи возмущались в таком духе: «Как такое возможно? Наверняка монет больше чем есть на самом деле, но их не видно!». На самом деле количество монет в экранированном пуле мы также можем проверить, но об этом позже.

Кстати, с этим CMC-сервисом постоянно возникают какие-то непонятки, которые также подкрепляют данный миф. Даже сейчас на сервисе отображается, что эмитировано 60% всех монет от максимального количества (12,576,287.50 ZEC):

Но это не так!

Перехожу на любимый проводник Blockchair в раздел Zcash который учитывает правильную сумму всех эмитированных монет путём прямого подсчёта по каждому блоку цепочки.

Правильное количество монет на блоке 1 378 678 соответствует указанным 11,538 тыс. Zcash.

Давайте это проверим самостоятельно:

Первый период:

Медленный старт

В начале эмиссии Zcash в течение первых 20 000 блоков (включая нулевой генезис-блок) было добыто 125 000 ZEC вместо ожидаемых 250 000.  Это было сделано для минимизации последствий ошибок при запуске сети, которых по факту не было

Второй период:

до обновления Blossom каждый новый блок создавались 12,5 монет.

Blossom был активирован на высоте блока 653 600

Считаем 653 600 — 20 000 = 633 600 и умножаем 12,5 = 7 920 000 Zcash

Третий период:

от активации Blossom до первого халвинга Zcash на высоте 1 046 400

весь этот период чеканились 6,25 монет на блок

считаем: 1 046 400 — 653 600 = 392 800 х 6,25 = 2 455 000

Для проверки числа монет на момент халвинга суммируем: 125 000 + 7 920 000 + 2 455 000 = 10,5 млн. монет, как и положено. Вы можете проверить любой блок из указанного периода, REWARD всегда будет правильный.

Четвёртый период:

от блока халвинга до искомого блока № 1 378 678 прошло 332 278 блоков с вознаграждением по 3,125 ZEC

и получается было добыто 1 038 368,75 монет

прибавляем к ним 10 500 000 и получаем 🥁 11 538 368,75

Ну вот даже Blockchair считает не совсем верно. Почему то меньше на 366 ZEC. Но меньше не больше :))

если найдёте ошибку в моих расчётах, пишите в комментариях.

однако..

CoinMarketCap завышает количество циркулирующих монет Zcash на целый миллион!

Как такое возможно?

Дело в том, что CoinMarketCap и многие другие сервисы, которые гордо называют себя проводниками, не берут данные напрямую из блокчейнов криптовалют, поскольку это бы сильно перегружало систему из-за большого количества запросов из всевозможных источников, вместо этого программисты время от времени синхронизируют цифры и исправляют формулы расчёта. Таким образом, если в алгоритме эмиссии произошли какие либо изменения, например, изменилось время блока, то формулу расчёта необходимо корректировать.

Откуда я это знаю? Просто такая ситуация уже была. 12-го декабря 2019 года было активировано обновление Zcash Blossom. Время блока было сокращено в два раза с 1,5 минуты до 75 секунд. Вместе с этим было скорректировано вознаграждение майнеров за найденные блоки с 12.5 ZEC до 6.25 ZEC за один блок в целях соответствия эмиссии необходимому темпу. Через некоторое время я обнаружил, что CoinMarketCap не внёс полноценные изменения в свой расчёт, добавив в формулу лишь сокращение времени блока. В результате чего, отображаемая расчётная эмиссия с этого моменты была двух-кратно завышена. Как только я это обнаружил, то сообщил об этом разработчикам.

В апреле 2020 года ошибка была исправлена:

Как видите, это реальная ситуация. Текущее «задвоение» эмиссии Zcash на CMC, вы не поверите, но длится с самого халвинга (18 ноября 2020 года). Причём все кому надо давно в теме 🤷🏻‍♂️

Рассматриваемый миф многократно усилился после появления данной новости: «Разработчики Zcash сообщили об устранении критической уязвимости в 2018 году»:

«Уязвимость имела отношение исключительно к созданию несуществующих монет и никак не затрагивала приватность пользователей. До ее устранения атакующий мог создавать поддельные монеты Zcash, оставаясь при этом незамеченным… Уязвимость была полностью устранена, и никаких действий со стороны пользователей Zcash не требуется», — говорится в сообщении.

В данной статье также уточняется:

«Также разработчики отмечают, что обнаружение уязвимости требовало продвинутого уровня технических и криптографических знаний, которыми обладают немногие.

«Она существовала несколько лет, но не была выявлена многочисленными экспертами-криптографами, учеными, сторонними аудиторами и сторонними командами разработчиков, которые запускали новые проекты на базе Zcash».

После обнаружения уязвимости Electric Coin Company приняла «исключительные меры», чтобы минимизировать возможность ее эксплуатации, а также уведомила о ее существовании команды других криптовалют, использующих протокол zk-SNARKS, включая Horizen и Komodo.

В комментарии Fortune CEO Electric Coin Company Зуко Уилкокс добавил, что разработчики отказались от контакта с создателями Bitcoin Private, проекта, который пользуется весьма неоднозначной репутацией, из-за предположительного использования скрытого премайна.

«Мы не хотели раскрывать информацию прочим лицам до того момента, пока не будут защищены крупнейшие по капитализации криптовалюты», — сказал Уилкокс.»

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

Мы знаем о том что скрытой эмиссии не существовало с гарантированной надёжностью.

У Zcash два типа монет: прозрачные и экранированные. С количеством прозрачных монет нет никаких проблем. Как и в любом другом прозрачном блокчейне алгоритм, встроенный в проводники имеет возможность просканировать каждый существующий прозрачный адрес и путём сложения определить их количество. Но как быть с экранированным пулом монет?

Ещё до того, как было объявлено об обнаружении бага, разработчики серьёзно озадачились этим вопросом. И для тотальной инвентаризации существующих монет в экранированном пуле было решено при последующем обновлении сделать единый механизм — турникет, миновать который не существовало бы возможности.

Итак, старый экранированный пул «Sprout» потенциально мог содержать лишние монеты, которые могли быть созданы сверх-умными злоумышленниками при эксплуатации обнаруженного бага. Новый обновлённый пул с улучшенными характеристиками скорости транзакций «Sapling» на момент запуска не содержал ни одной монеты. Задача была в том, чтобы не дать проникнуть лишним монетам из старого пула в новый. И для этого был создан турникет. Подробное описание спецификации данного турникета здесь.

Первоначально турникет был встроен в единственный на тот момент существующий официальный кошелёк, поддерживающий экранированные адреса и транзакции:

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

О необходимости провести монеты из старого пула в новый, кошелёк сообщал при запуске.

Когда количество монет, прошедших через турникет достигло примерно 85% от нормы, следующее обновление кошелька перестало поддерживать данный турникет, а выпущенное обязательное обновление для нод, сделало старые версии кошельков более не совместимыми с новыми нодами. Старые ноды перестали коннектиться с новыми. Таким образом, двери обмена были закрыты и остался лишь один замороченный способ перевести средства из старого пула в новый — с помощью инструмента миграции.

Благодаря всем этим хитростям сегодня мы достоверно знаем сколько монет могли попасть из старого пула в новый пул. И это значение не превысило максимально возможное. Наоборот, мы знаем, что на текущий момент в старом пуле находится примерно 29 тысяч забытых монет, которые хозяева по каким то причинам не вывели из старого экранированного пула. Скорее всего после следующего обновления они уже никогда не смогут это сделать. Судя по этому твитту, можно сделать вывод, что при каждом значительном обновлении разработчики будут использовать подобные турникеты:

Кстати в этой большой Twitter-ветке разработчики дали исчерпывающие ответы на все вопросы, которые могли возникнуть у сомневающихся пользователей. Вы также можете задавать вопросы инженерам команды.

Надеюсь и мне удалось дать вам необходимые ответы и доказать что скрытая эмиссия Zcash — это миф.

Комментировать статью:

Ваш адрес email не будет опубликован. Обязательные поля помечены *

4 × один =