Где определено и как обеспечивается ограничение эмиссии в 21 миллион биткойнов?

0 1

Джеймсон Лопп, разработчик Bitcoin Core, о том, как именно в протоколе Биткойна обеспечивается предсказуемый график эмиссии BTC.

Если вы посвятили изучению Биткойна больше пары минут, то, вероятно, уже в курсе, что объем предложения BTC предсказуем и ограничен 21 миллионом единиц. Строго говоря, лимит составляет 2.099.999.997.690.000 сатоши: на уровне протокола всё рассчитывается в наименьших единицах.

Но как именно определяется это ограничение и что мешает его нарушить?

Можно предположить, что это фундаментальное ограничение должно быть прописано в уайтпейпер Биткойна… Но его там нет, как и многих других важных аспектов протокола. Пуристам оригинального уайтпейпер Накамото стоит иметь в виду, что в нем не описываются, в частности:

  • multisig;
  • майнинговые пулы;
  • ограничение эмиссии в 21 млн BTC;
  • GPU- и ASIC-майнинг;
  • 10-минутный интервал между блоками;
  • генерация HD-адресов;
  • лучшая цепочка определяется по совокупному PoW, а не по длине;
  • и многое, многое другое…
  • Но прочесть уайтпейпер, конечно, важно всё равно. По ссылке доступны переводы на все основные языки мира и даже больше.

    Возможно, кто-то из вас даже пытался найти явное определение лимита в реализации Bitcoin Core? Поиском по «21000000» в github-репозитории можно обнаружить определение константы MAX_MONEY, но это тоже не то.

    Где же тогда прописан этот лимит эмиссии? Реализация его не так прямолинейна, как можно было бы подумать.

    Неявное ограничение

    @lopp: Распространено заблуждение о том, что Биткойн должен регулярно проверять, что общий объем его предложения остается ниже 21 миллиона монет.

    На самом деле код Bitcoin Core содержит ровно 0 таких явных проверок предложения BTC. Почему? Постоянно суммировать более 75 млн UTXO было бы чрезвычайно ресурсозатратно. Поэтому ограничение в 21 млн BTC реализовано неявно.

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

    : https://twitter.com/anilsaidso

    Это всё равно что сказать:

    50 * 210000
    + 25 * 210000
    + 12,5 * 210000

    + 0,00000002 * 210000
    + 0,00000001 * 210000
    = 20999999,9769

    Реализации Биткойна контролируют объем новой эмиссии, проверяя, что каждый блок не создает биткойнов больше разрешенной субсидии на блок. Эта строка кода суммирует общее значение выхода coinbase-транзакции (первой транзакции в блоке, единственной, в которой разрешается создание новых монет).

    Вы можете заметить, что к разрешенной субсидии на блок здесь прибавляется также сумма комиссий за транзакции в блоке. Почему? Потому что эти комиссии не являются новыми биткойнами: они уже существовали и выплачиваются майнеру отправителями транзакций. Равно корректно было бы проверять, что выход coinbase-транзакции за вычетом комиссий за транзакции в блоке меньше или равен разрешенной субсидии на блок.

    Как определяется кривая эмиссии в протоколе Биткойна? Всего пятью строками кода, две из которых предназначены для покрытия пограничных случаев и будут срабатывать только при высоте блока от 13 440 000 и более, то есть примерно с 2265 года. О логике, лежащей в основе этой проверки на строке 1157, можно прочесть в BIP-042.

    Для любой заданной высоты блока можно легко рассчитать положение этого блока на кривой эмиссии / в геометрической прогрессии. Всё, что для этого нужно знать, это сколько произошло халвингов (строка 1155), а затем разделить первоначальную сумму субсидии (50 BTC) надвое соответствующее количество раз, что и выполняется в операции битового сдвига на строке 1162.

    Помимо субсидии на блок, необходимо также предотвратить непреднамеренную инфляцию предложения в остальных транзакциях, помимо coinbase.

    Первый способ обеспечить такую проверку — это убедиться, что входы каждой транзакции действительно существуют и могут расходоваться. В Bitcoin Core соответствующую проверку можно найти в функции CheckTxInputs.

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

    Мы также выполняем проверку входов на неотрицательные значения и переполнение. Любой из этих случаев привел бы к созданию новых денег; в ранние дни Биткойна, кстати, был эпизод с переполнением, приведший именно к этому!

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

    Таковы критические проверки для предотвращения произвольного увеличения предложения BTC. Существуют еще дополнительные механизмы (регулировка сложности) для контроля скорости эмиссии с точки зрения человеческого времени. Интересующиеся могут обратиться к соответствующим статьям (англ.) автора: Bitcoin’s Timestamp Security и Bitcoin’s Block Time Variance.

    Явная проверка

    Как я уже говорил выше, суммировать общее предложение биткойнов всякий раз, когда мы хотим убедиться в соблюдении связанных с эмиссией правил протокола, было бы довольно ресурсозатратным решением. Однако более явную проверку выполнить возможно: достаточно просто суммировать значения всех непотраченных выходов транзакций (UTXO).

    В Bitcoin Core предусмотрена удобная сервисная функция для аудита общей денежной массы. Называется gettxoutsetinfo.

    По состоянию на 9 июля существует ~83,8 млн UTXO, так что выполнение этой операции может занять минуту или две в зависимости от оборудования, на котором запущена ваша нода.

    Моя нода, поставляющая данные для statoshi.info, запускает эту функцию после каждого нового блока, который она обрабатывает. Возвращаемое функцией количество монет затем сохраняется базе данных и используется для построения этого графика.

    Вот, собственно, и всё. Денежная масса Биткойна одновременно тривиально предсказуема и легко поддается проверке. И тысяча слов, которые вы сейчас прочитали, описывают всего дюжину строк кода.

    FAQ

    Есть еще несколько очень распространенных вопросов относительно денежной массы Биткойна.

    Можно ли изменить ограничение эмиссии в 21 млн BTC?

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

  • Что такое Bitcoin Core?
  • Who Controls Bitcoin Core? Understanding how the focal point of Bitcoin development operates
  • Can Bitcoin’s Hard Cap of 21 Million Be Changed? | River Learn — Bitcoin Basics
  • Почему 21 миллион, а не ______?

    Вопрос: Почему Сатоши установил порог в 21 000 000 BTC?

    Ответ: Ограничивающим фактором является максимальное значение 64-битного целого числа (18.446.744.073.709.551.615), а 21.000.000 BTC представляет собой 2.100.000.000.000.000 сатоши.

    Что произойдет, когда будут «добыты» все 21 миллион биткойнов?

    Майнеры получают не только новые биткойны, но и комиссии за транзакции. Субсидия на блок (block subsidy) получила свое название не просто так: выпуск новых монет предназначен только для того, чтобы помочь запустить систему, пока объем транзакций невелик. Рост распространения и принятия Биткойна предполагает увеличение и спроса на пространство блока, а с ним и комиссий за транзакции. Читайте также:

  • What Will Happen to Bitcoin After All 21 Million are Mined? — Decrypt
  • Сколько биткойнов на самом деле существует и сколько потеряно?

    Сумму всех существующих UTXO посчитать довольно легко, однако более глубокое исследование показывает, что часть из них никогда не будут созданы, часть доказуемо не поддаются расходованию и часть нерасходуемы предположительно (но не наверняка). У CoinMetrics был отличный пост с анализом предполагаемого оборотного предложения BTC (правда, от 2019 года).

    : https://coinmetrics.substack.com/p/coin-metrics-state-of-the-network-d2e

     

    Источник: bitnovosti.com

    Оставьте ответ

    Ваш электронный адрес не будет опубликован.