Код Bitcoin Core 0.13.0 отмечен как готовый к релизу. Это значит, что в ближайшие несколько дней ожидается выпуск тринадцатой версии официального клиента Биткоина, в котором должны быть внедрены несколько важных обновлений согласно двухлетнему плану масштабирования сети.
Разработки Bitcoin Core 0.13.0 продолжались около пяти месяцев, в них участвовало около 100 человек. Несмотря на то, что этот процесс совпал с разработками решения Segregated Witness, на которое было потрачены значительные усилия, по сравнению с Bitcoin Core 0.12, клиент Bitcoin Core 0.13.0 содержит около дюжины очень весомых изменений.
Самые важные обновления в этой версии:
Child Pays for Parent
С течением времени количество транзакций в сети Биткоин растёт. В результате заполняется всё больше блоков, и для включения транзакций в блок майнерам приходится устанавливать более высокие комиссионные. На подтверждение транзакций с недостаточно высокими комиссионными уходит больше времени, а иногда они и вовсе не подтверждаются. Это довольно проблематично, особенно в периоды проведения так называемых «стресс-тестов», сопровождающихся всплесками общего количества транзакций в сети и значительными задержками прохождения платежей по сети.
Индивидуальные пользователи могут решить эту проблему, включая в свои транзакции более высокие комиссионные и тем самым мотивируя майнеров отдавать таким транзакциям приоритет. Сейчас, при помощи функции Replace-by-Fee (RBF), это возможно даже после отправки транзакции Но данную опцию поддерживают далеко не все кошельки. Вплоть до настоящего момента у получателя не было возможности повысить комиссию входящей транзакции, чтобы ускорить её подтверждение.
Эта проблема эффективно решается при помощи приёма под названием «Child Pays for Parent» (CPFP) («Ребёнок платит за родителя»). Метод CPFP используется майнерами для выбора транзакций, включаемых в блок.
Применяя CPFP, майнеры выбирают не самые высокооплачиваемые (и валидные) транзакции, а отдают предпочтение наиболее выгодным. Другими словами: они выберут транзакцию с низкой комиссией, если соответствующая транзакция, которая полагается на транзакцию с низкой комиссией, предлагает достаточные для компенсации комиссионные. В таком случае, майнер получает обе комиссии одновременно.
На практике это означает, что получатель транзакции с низкой комиссией может «прикрепить» транзакцию с высокой комиссией, потратив одинаковое количество монет. Мотивированный новой транзакцией с высокой комиссией, майнер будет включать в блок весь комплект транзакций. Таким образом, получателю не нужно будет ждать подтверждения, тогда как майнер увеличит свой доход.
Поддержка "компактных блоков"
В данный момент пиринговый протокол Биткоина нельзя назвать эффективным. Узлы отправляют друг другу большинство данных транзакции дважды: первый раз в качестве транзакции, при её первоначальной отправке в сеть, и второй раз - в качестве части блока при подтверждении транзакции.
Это несёт в себе определённые недостатки. Во-первых, на двойное отправление данных транзакции требуется больше сетевого трафика, что повышает стоимость оперирования узлом Bitcoin Core. Во-вторых, сопровождение новых блоков одновременно в несколько пиров может привести к значительным скачкам выходного трафика. Теоретически, это увеличивает интенсивность использования интернета при каждом обнаружении нового блока, что доставляет неудобство пользователям.
И, наверное, ещё важнее то, что это может затормозить распространение блоков в сети. В свою очередь, медленное распространение блоков может благоприятствовать крупным пулам майнинга, тем самым стимулируя более централизованный ландшафт майнинга.
Решение под названием Compact Blocks (компактные блоки, BIP 152), предложенное разработчиком Bitcoin Core и Blockstream Мэттом Коралло (Matt Corallo), создано в целях уменьшения избыточной передачи данных. При обнаружении нового блока узлы сети сначала только передают очень компактные хеши данных транзакции. После того, как узлы получат полный объём данных транзакции, они могут использовать эти хеши для вычисления того, какие транзакции включены в блок, и самостоятельно реконструировать блок.
Однако этот приём срабатывает не всегда. Если узел не получил начальную транзакцию до получения хешей, то, конечно, этот узел не сможет выбрать транзакцию. К тому же, в редких случаях, ошибочная транзакция может хешировать в правильный хеш, и узел будет считать, что он получил правильную транзакцию до тех пор, пока не начнёт реконструировать блок и не обнаружит ошибку.
И в том, и в другом случае в конечном итоге узел просто требует специальных данных транзакции. Компактные блоки, имея даже всего несколько полных транзакций, перемещаются по сети намного быстрее, и требуют гораздо меньше пропускной способности.
Иерархически детерминированная генерация ключа
До настоящего времени узлы Bitcoin Core генерировали новую, абсолютно случайную пару ключей (открытый и закрытый) для каждого адреса Биткоин. Несмотря на то, что это повышает безопасность и конфиденциальность, иногда это не очень удобно для пользователей. Чтобы защитить все закрытые ключи от утери, необходимо регулярно проводить резервное копирование.
Эту проблему решает иерархическая детерминированная (HD) генерация ключа (BIP 32) - криптографический метод, разработанный в 2012-2013 годах программистами Bitcoin Core Грегори Максвеллом (Gregory Maxwell) и Питером Вюлле (Pieter Wuille), совместно с разработчиком Armory Аланом Райнером (Alan Reiner). Используя HD-генерацию ключа, Bitcoin Core создаёт совершенно новую пару ключей для каждого нового адреса, однако все эти ключи производятся от одного инициатора, состоящего из 12 слов. Пока пользователи помнят эту ключевую фразу, они могут повторно генерировать все закрытые ключи, получая доступ к своим средствам.
Следует отметить, что HD-генерация ключа - совсем не новое решение в мире криптовалюты. Многие кошельки поддерживают эту опцию уже несколько лет. До настоящего момента она просто отсутствовала в полном клиенте Биткоина.
Эксплуатация и безопасность
И, конечно, Bitcoin Core 0.13.0 содержит внушительный список обновлений в плане эксплуатации и безопасности. Если описывать их все, вам не хватит терпения дочитать статью, попробуем рассказать вкратце.
- Увеличена кэш-память базы данных, что позволяет узлам ускорить валидацию транзакций.
- Клиент командной строки Биткоина теперь позволяет пользователям набирать кодовые фразы и другую конфиденциальную информацию в интерактивном режиме, что также повышает безопасность, поскольку информация не сохраняется в обычном тексте.
- Программное обеспечение обновлено для использования C++ 11 и Python 3 - более новых версии языков программирования.
- Двоичные файлы ARM (микропроцессорной архитектуры, в основном применяющейся в мобильных устройствах) для Linux теперь также являются частью релиза, поэтому пользователям не нужно компилировать их для себя.
- Данные, определяющие, какие транзакции в пуле памяти полагаются друг на друга (в том числе, при использовании с CPFP) можно связывать с внешними программами.
- Узлы в сети могут запросить получение только транзакций, соответствующих определенному порогу комиссионных, что помогает предотвратить атаки DoS.
- И, наконец, внедрено множество мелких изменений в пиринговый протокол удаленного вызова процедур (RPC) и протоколы системы передачи сообщений (ZMQ).