[Перевод] Как уничтожить биткоины
Мы знаем, как создать биткоины, но вот как их можно уничтожить?
Сжечь биткоины — значит, сделать так, чтобы их нельзя было потратить. Этому можно придумать несколько применений — к примеру, быстро запустить новую криптовалюту (как сделали в Counterparty) или немного поднять стоимость оставшейся части биткоинов, уменьшив количество доступных. В этой статье мы опишем три метода для сжигания биткоинов.
Простейший метод
Очень легко сжечь биткоины, отправив их на фиктивный адрес. К счастью, у пользователей Bitcoin шанс нечаянно сжечь биткоины таким способом чрезвычайно мал, поскольку в адресе присутствует 4-байтовая контрольная сумма, предотвращающая опечатки (на bitcoin wiki есть подробная инструкция по созданию биткоин-адресов).
Именно поэтому для создания фиктивного биткоин-адреса нужно потратить немного усилий, а не просто ударить пару раз по клавиатуре. Для создания адреса используется hash160, он может принимать любые значения, и это значение превращается в первые символы адреса (а последние обозначают контрольную сумму).
Известные примеры фиктивных адресов:
• 1BitcoinEaterAddressDontSendf59kuE (получено 2,10556692 BTC),
• 1CounterpartyXXXXXXXXXXXXXXXUWLpVr (2 130,84717717 BTC),
• 1111111111111111111114oLvT2 (43.2884582 BTC), в этом адресе закодирован минимально возможный hash160,
• 1QLbz7JHiBTspS962RLKV8GndWFwi5j6Qr (0.01159201 BTC), в этом адресе закодирован максимально возможный hash160.
Отправляя биткоины на такой адрес вы их почти наверняка сжигаете, но доказать это нельзя, поскольку для такого адреса в принципе может существовать приватный ключ. Однако, поиск такого ключа может отнять больше энергии, чем будет сгенерировано нашей Солнечной системой за всё время её жизни.
Осмысленный метод
Уже довольно долгое время пользователи Bitcoin включают в блокчейн различные данные, будь то доказательство авторских прав на документ, подтверждение личности, обеспечение контрактов или цифровое представление реальных активов.
В 2013 году был представлен простой способ добавления данных в любую биткоин-транзакцию. Доселе некорректная инструкция OP_RETURN была сделана стандартной, и пользователь обрёл возможность добавления до 40 байт данных в транзакцию.
До стандартизации этот тип вывода данных в блокчейн был непростой задачей, и включал в себя использование множества фиктивных адресов, кодирующих произвольные данные. Введение стандарта упростило процесс и позволило узлам Bitcoin забыть сложный способ и ограничить разбухание блокчейна.
С момента его введения на выводы через OP_RETURN было потрачено уже 3,66 BTC, и количество таких выводов только растёт, что говорит о растущем количестве способов разнообразного использования блокчейна.
Однозначный метод
И хотя предыдущие методы довольно эффективные, они не уничтожают биткоины. Их всё ещё можно видеть в блокчейне, просто нельзя потратить. Однако существует способ эффективно уничтожить биткоины, удалив их из блокчейна.
Делая свой сайт со статистикой по транзакциям биткоинов, я принимал меры для того, чтобы не пропустить данные ни одной транзакции, и чтобы данные в базе были непротиворечивыми. Я подсчитал количество существующих битконов как сумму биткоинов, хранящихся в непотраченных, но подтверждённых выводах. Если всё правильно, эта сумма должна совпасть с количеством существующих биткоинов (это число можно подсчитать, только зная количество блоков в основной цепочке блокчейна).
Однако я обнаружил, что 10,19768818 BTC куда-то пропали. Сначала я думал, что я пропустил какие-то транзакции или что у меня в коде была ошибка. Разбираясь с этим я увидел, что я был прав: 1031 не получили награду, которая им предназначалась. Награда за блок — это комбинация созданных монет (50 BTC в самом начале существования Bitcoin, уполовинивающиеся каждые 210 000 блоков), и комиссий, содержащихся в транзакциях блоков.
Это несоответствие могло возникнуть из-за того, что майнеры упустили несколько комиссий за транзакции, или же излишняя комиссия была уплачена за coinbase-транзакцию, и не была включена в выходное значение транзакции майнера, или же это было сделано намеренно, кто знает.
Первый такой блок датирован 18 мая 2011 года, а последний появлялся 15 августа 2015 (в нём не хватало всего одного сатоси, а намайнили его при помощи CoiniumServ). Большую часть этих блоков намайнили в период с января 2012 по март 2013.
Несколько пулов майнили блоки и не забирали награду. Согласно Blocktrail API, больше половины этих блоков намайнили EclipseMC и Eligius. Интересно, что эти два пула начали майнить их одновременно — возможно, они использовали один и тот же софт. Однако EclipseMC закончил майнить в сентябре 2012 года, а Eligius — в январе 2013. Другие пулы, вроде Slush или P2Pool тоже намайнили такие блоки, но совсем мало.
Пропавшие биткоины пропали навсегда. Отправка биткоинов на фиктивные адреса или трата на неподходящие для этого выводы не приводит к их исчезновению — их можно наблюдать в блокчейне. А если не запрашивать всю награду за блок, биткоины на самом деле исчезают — их нельзя увидеть в блокчейне. Единственная проверка величины награды за блок состоит в том (судя по исходникам bitcoind), что она не должна превышать максимальное значение — получаются, что уничтожить можно всю награду полностью, включая и сгенерённые монеты.
Заключение
Есть и другие способы сжигания биткоинов (к примеру, использование нестандартных некорректных скриптов), но самые распространённые — это фиктивные адреса и скрипты OP_RETURN. И хотя это неподкреплённые доказательствами рассуждения, мне было очень интересно узнать, какие пулы использовали одинаковый софт, просто изучив блокчейн.