Если говорить о событиях этой недели, то стоит особо отметить GreenAddress – первый криптовалютный кошелек, который подключил поддержку новой опции replace-by-fee. При помощи этой функции пользователи могут увеличить комиссию за свои транзакции, кликнув на специальную кнопку. Опция пользуется популярностью у некоторых пользователей, так как она увеличивает вероятность включения транзакции в блок.

Это может помочь транзакции «освободиться» в случае сильной перегрузки сети, и помогает развитию рынка комиссионных. Другие пользователи относятся к такому свойству с сомнением и даже критикой, опасаясь, что функция replace-by-fee может негативно повлиять на надежность неподтвержденных транзакций, так как в некоторых случаях появляется возможность возврата платежей. 

Для тестирования функции несколько недель назад GreenAddress предоставил журналисту Эрону ван Вирдуму (Aaron van Wirdum) ее предварительную версию. Эксперимент позволил понять, какие сегменты экосистемы Биткоина готовы к использованию replace-by-fee, а какие – нет. 

Приведенные ниже результаты основаны на примере личного опыта и не являются официальным научным анализом.

Green Address с точки зрения отправителя

Прежде всего, конечно же, GreenAddress был протестирован с точки зрения отправителя (тестирование проводилось в версии кошелька с расширением Chrome).

Начиная с выходных, опция GreenAddress replace-by-fee была включена по умолчанию. Пользователям, которые не хотят применять эту функцию, необходимо отключить её в разделе «Настройки». При включённой функции каждая отправляемая из кошелька транзакция помечается флагом replace-by-fee. Так узлы сети и майнеры понимают, что данную транзакцию можно заменить конкурирующей транзакцией с более высокой комиссией.

После отправки первой транзакции replace-by-fee, автор был автоматически перенаправлен к экрану «Транзакции», в котором отображаются все предыдущие транзакции кошелька. Под транзакцией replace-by-fee (всё ещё неподтвержденной) появилась подпись «повысить комиссию».

Несмотря на то, что оригинальная опция replace-by-fee, например, аналогичная такой функции в Bitcoin Core, позволяет замену любой неподтвержденной транзакции (даже если это означает, что неподтвержденные транзакции «отменяются»), пользователи GreenAddress имеют возможность только повторно отправить биткоины из тех же самых входов в те же самые выходы, но с более высокой комиссией. Это позволяет пользователю «повысить» транзакцию и увеличивает вероятность, что она будет включена в блок.

После нажатия на кнопку «повысить комиссию» открывается мини-меню. В верхней части меню отображается информация о времени подтверждения транзакции. Меню позволяет повысить комиссию в 1.5, 2 или 3 раза.

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

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

Что делают пулы

Самого по себе ПО кошелька недостаточно для замены транзакции (или повышения комиссии). В действительности, активность функции replace-by-fee в сети Биткоина зависит от майнеров.

Несколько тестовых транзакций показали, что большинство майнеров в настоящее время не поддерживают политику replace-by-fee. Все крупные китайские пулы - AntPool, F2Pool, BTCC и BW.com, а также KnCMiner – абсолютно игнорируют повышенные транзакции. На данный момент они составляют более 75% мощности сети.

Другие пулы всё же применяют replace-by-fee, предположительно, оригинальную версию. К таким пулам относятся BitFury, SlushPool, BitClub и CKPool, составляющие около 20% всей мощности хэширования. (Оставшиеся 5% контролируются пулами или майнерами, каждый из которых имеет менее 1% мощности).

Что же это означает?

Несмотря на то, что 20% могут показаться не очень большой цифрой, на самом деле это не так плохо, если учитывать основную цель функции replace-by-fee: «повышение» комиссии для гарантии подтверждения транзакции. 

Конечно, при применении политики replace-by-fee только 20% мощности сети, существует только 20-процентная вероятность того, что именно следующий майнер подхватит повышенную транзакцию. Однако, с другой стороны, вероятность того, что повышенная транзакция будет включена в блок в в течение часа, составляет 3 из 4. И более чем вероятно, что она будет включена в блок в течение нескольких часов.

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

Между тем, пользователи, которые хотят использовать replace-by-fee для возврата неподтвержденных транзакций, имеют только 20% вероятность успешного результата.

Безопасность кошелька

Пользователи, злонамеренно возвращающие неподтвержденные транзакции, подводят нас к следующему моменту. Чтобы рассчитать подобные риски, ПО кошельков может предупреждать пользователей о принимающей стороне транзакции, если транзакция помечена флагом, как возможная для замены. 

Однако из всех протестированных кошельков такой флаг имеют только Mycelium (в Android) и, конечно же, GreenAddress (приложение Chrome). Оба эти кошелька отчетливо демонстрируют транзакции, возможные для replace-by-fee, предоставляя пользователям возможность, при желании, не принимать такую транзакцию до её подтверждения.

Что интересно, клиент Bitcoin Core не помечает входящие оригинальные транзакции replace-by-fee, так же как и его форки Bitcoin Classic, Bitcoin XT и Bitcoin Unlimited. Эти кошельки просто отображают и оригинальные, и заменяемые транзакции как неподтвержденные. Конечно, только до тех пор, пока одна из этих транзакций не будет включена в блок, и в этот момент подтверждённая транзакция отображается как подтвержденная, а конфликтующая транзакция отклоняется. 

Кошлеьки Blockchain, Bither, Blocktrail, Breadwallet, Coinbase, Copay и Electrum никак не отмечают транзакции с возможностью замены. Blocktrail, Bither и Breadwallet просто демонстрируют и оригинальные, и повышенные транзакции как две разные входящие транзакции, тогда как Copay и Coinbase их просто игнорируют. Что касается Electrum, здесь всё зависит от того, к какому серверу Electrum присоединено ПО кошелька, однако в большинстве случаев он отображает самую последнюю транзакцию. На вопрос, почему их ПО не помечает транзакции replace-by-fee, разработчики Bitcoin Core и Electrum отвечают, что неподтвержденным транзакциям нельзя доверять, а система отметок флагами может сформировать у пользователей ошибочное представление о безопасности. Незадолго до публикации данной статьи разработчики Bitcoin Core дали понять, что RBF-уведомление всё-таки скоро будет добавлено. 

BitcoinWallet (Android) применяет другую стратегию: он вовсе не отображает отмеченные транзакции replace-by-fee, если и до тех пор пока у них не будет хотя бы одного подтверждения.

Платежные операторы

Автор протестировал два крупных платежных оператора: BitPay и Coinbase. На этот раз он не пытался заменить («повысить») транзакцию. Он просто хотел посмотреть, как они работают с флагом. Возможно, это никого не удивит, но руководитель BitPay Стивен Пэр (Stephen Pair) поддерживает оригинальную функцию replace-by-fee – похоже, что данная компания без проблем работает с платежами replace-by-fee.

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

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

Что касается Coinbase, они недостаточно хорошо обработали первую транзакцию replace-by-fee: отправленный несколько недель назад платеж за RedditGold совсем не был признан. Ни до включения, ни после включения в блок. В конечном итоге, заказ был отменён.

Тем не менее, судя по второй попытке, после этого Coinbase оптимизировала свой сервис: пожертвование в Wikimedia получило моментальное подтверждение. Более того, на экране появилось сообщение о том, что подтверждения пришлось ждать из-за низкой комиссии. Неправильная причина, но правильный сервис.

Обозреватели блокчейна

В конце тестирования автор решил проверить, как разные обозреватели блокчейна работают с оригинальными транзакциями replace-by-fee.

Первый обозреватель, Blocktrail, четко визуализирует транзакции replace-by-fee. Это единственный из обозревателей, который не только помечает транзакции с возможностью двойных трат, но также и предупреждает пользователей об обнаружении конфликтующей транзакции. И, как только такая транзакция включается в блок, становится ясно, что замененная транзакция имела двойную трату и не подтвердится.

Blockchain.info не помечает заменяемые транзакции, а только показывает, что транзакция не подтверждена. Только после того, как конфликтующая транзакция отправлена, Blockchain.info отображает надпись, предупреждающую пользователей о возможности двойной траты, о возможности replace-by-fee никак не упоминается. После включения конфликтующей транзакции в блок, Blockchain.info не отправляет никаких дополнительных предупреждений; все выглядит так, как будто все еще имеется небольшой шанс на подтверждение транзакции.

Что касается других обозревателей... Аналогично Blockchain.info, Blockcypher не использует флаг replace-by-fee, однако он отображает предупреждение о двойной трате после отправки второй транзакции. Обозреватели блокчейна с открытым исходным кодом BitPayinsight.bitpay.com, bitcoinchain.com и chain.so отображают только первоначальную транзакцию, не имеющую флага replace-by-fee.