Bitcoin Core 0.13.0 разрабатывали около ста участников, что заняло у них примерно пять месяцев. В то время, как большая часть усилий разработчиков была сосредоточена на Segregated Witness, что потребует небольшого изменения ПО, Bitcoin Core 0.13.0 по сравнению с Bitcoin Core 0.12.0 имет дюжину важных новшеств. Приведём список наиболее существенных изменений.
«Ребёнок платит за родителя»
Число транзакций в сети биткоина долгое время постоянно росло. В результате растёт заполнение блоков, и майнерам приходится брать более высокие комиссии за то, чтобы включить транзакции в блоки. Транзакции, которые не имеют достаточных комиссий, включаются в блоки с опозданием или они могут вообще не войти в блок. Это оказалось существенной проблемой, особенно в период так называемых «стресс тестов» сети, когда пиковое количество транзакций привело к существенным задержкам в работе.
Отдельные пользователи могут решить данную проблему путём повышения комиссий за свои транзакции, что делает обработку их транзакций более приоритетной для майнеров. Это возможно осуществить, даже если транзакция уже отправлена, используя выборочную замену комиссии (Opt-in Replace-by-Fee, RBF); однако пока не многие программы кошельков поддерживают эту опцию. Кроме того, RBF является опцией, доступной только отправителю транзакции. До настоящего времени у получателя не было возможности доплатить комиссию за транзакцию, чтобы ускорить подтверждение сделки.
Данную проблему эффективно решает уловка под названием «Ребёнок платит за родителя» (Child Pays for Parent, CPFP). CPFP является набором правил, который используют майнеры для того, чтобы выбирать, какие именно транзакции включать в блок. При помощи CPFP, майнеры не обязательно выбирают самую выгодную и проверенную транзакцию, но могут выбрать наиболее выгодный для них набор транзакций. Другими словами: они могут выбрать транзакцию с низкой комиссией, если последующая транзакция, связанная с ней, предложит более высокую комиссию. Тогда майнеры включают обе транзакции одновременно.
На практике это значит, что получатель комиссии с низкой транзакцией может «приложить» транзакцию с высокой комиссией, потратив часть своих монет. В результате, получатель не будет долго ждать подтверждения сделки, а майнер сможет увеличить свои доходы.
Поддержка компактных блоков
Одноранговый протокол Биткоина в настоящее время несколько не эффективен. Узлы отправляют друг другу большинство данных транзакции дважды: один раз это транзакция, первоначально отправленная по сети и второй раз как часть блока, когда транзакция подтверждена.
У этого есть некоторые недостатки. Отправка данных транзакции дважды требует большего количества пропускной способности, чем это действительно нужно. Это повышает стоимость функционирования сети Биткоина. Во-вторых (что, возможно, ещё более важно) передача новых блоков нескольким узлам может вызывать пиковые перегрузки пропускной способности.
Но самое важное здесь то, что замедляется распространение блоков по сети. Медленное распространение блоков в свою очередь приводит к выживанию более крупных пулов, что делает майнинг биткоина в целом более централизованным.
Компактные блоки (BIP 152), которые разработал один из авторов Bitcoin Core и Blockstream Мэтт Коралло, предназначены для того, чтобы уменьшить избыточность передачи данных. Когда новый блок находится, узлы первоначально сообщают очень компактный хэш данных транзакции. Поскольку узлы уже получили полные данные по транзакции, когда их первоначально переслали по сети, они могут использовать эти хэши, чтобы выяснить, какие операции включены в блок и восстановить блок самостоятельно.
Конечно, эта уловка не является панацеей. Если узел не получил транзакцию перед тем, как получить хэш, узел не сможет выбрать транзакцию. К тому же, в некоторых случаях неправильная транзакция может дать правильный хэш, обманув узел, который поверит, что это правильная транзакция — пока не попытается восстановить блок и не увидит её ошибочность.
И в том, и в другом случае проблема не критична, поскольку узел всегда может уточнить нужные ему данные транзакции. Даже если в блок будет только несколько полных транзакций, компактные блоки передадутся по сети гораздо быстрее, и потребуют значительно меньшего количества пропускной способности.
Иерархическая детерминированная генерация ключей
До настоящего времени Bitcoin Core генерировало новую и абсолютно случайную пару с закрытым ключом и открытым ключом для каждого нового адреса биткоина. Это важно для безопасности и конфиденциальности, но представляет некоторые сложности для пользователей. Чтобы защитить все закрытые ключи от потери, они должны регулярно делать резервные копии.
Кто-нибудь может пояснить чайнику куда конкретно нужно нажать в Core, чтобы отменить/отправить заново неподтвержденную транзакцию? Желательно с учетом того, что Core на MacOs.