После того как стало известно о форке BitcoinCash, производители аппаратных кошельков заявили, что поддержат ту монету, у которой будет более длинная цепочка блоков. В этой схватке победил Bitcoin Cash ABC, который ныне в интерфейсах отображается просто как Bitcoin Cash. Вторая монета называется BitcoinCashSV, которая становится доступна в различных интерфейсах только при ручной установке адреса ноды. Я решил об этом упомянуть, чтобы избежать дальнейшей понятийной путаницы.

Особенностью данного форка является опасность применения атаки повторного воспроизведения транзакции (Replay Attack). Благодаря этому можно взять код транзакции из блокчейна ABC и транслировать его в блокчейн SV и наоборот. Другими словами, при отправке одной монеты существует опасность, что в другой ветке блокчейна будет создана точно такая же транзакция.

Какую опасность это представляет?

Во многих случаях можно просто потерять монеты Bitcoin Cash SV . Например:

  • отправка Bitcoin Cash на какой – нибудь сервис, обменник или биржу (которая не поддерживает данный форк);
  • покупка в интернете;
  • перевод средств другому лицу.

Во всех этих случаях вы переведете не только монеты основной цепочки Bitcoin Cash (ABC), но и монеты Bitcoin Cash SV. Все это произойдет из-за вышеупомянутой уязвимости.

Кто осуществляет эту атаку?

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

Напрашивается очевидный вопрос – Как обойти эту уязвимость? Рассмотрим три варианта обхода Replay Attack.

1. Смешать монеты

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

Важно понимать:

  • Можно смешивать BTC-ABC с BTC-ABC или BTC-SV с BTC-SV. Результат будет одинаковый – разъединение монет и как следствие обход атаки двойного воспроизведения.
  • Если ваши монеты содержатся на разных кошельках, счетах и адресах, то вам предстоит проделать эту процедуру с каждым адресом. Очевидная мысль – объединить все монеты на одном адресе и только потом перейти к смешиванию. Другая опция – это смешать монеты с одним вашим адресом и далее уже самостоятельно смешать монеты с другими адресами.
Смешивание монет имеет один существенный недостаток – возможный подрыв конфиденциальности, так как все ваши активы и история транзакций станут видны владельцу пыли. Это и есть так называемая атака пылью (Dust attack).

2. Использование Locktime

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

BitcoinABC имеет более длинную цепочку, чем BitcoinSV. На момент написания статьи высота блока первой цепи равна 566 658, а второй 566 580. Эта разница в 78 блок позволяет с помощью метки Locktime отправить транзакцию в основном блокчейне (ABC). Не стоит переживать, в BitcoinSV такая транзакция будет отклонена из-за недостаточной высоты блока. Пока транзакция в первой сети будет подтверждаться, мы можем совершить транзакцию в блокчейне SV.

Используем Locktime с аппаратным кошельком Trezor.

Сначала нам необходимо узнать текущие номера блоков обоих блокчейнов. Для этого можно воспользоваться родными обозревателями от SatoshiLabs:

Bitcoin Cash ABC - https://bch2.trezor.io/blocks

Bitcoin Cash SV - https://bchsv1.trezor.io/blocks

Видно, что текущая высота блока BitcoinCash (ABC) имеет значение 566 658, и это значение мы будем использовать в качестве метки. Переходим в интерфейс Trezor.io во вкладку “Отправить” и заполняем адрес, сумму и комиссию. В дополнительных условиях выбираем опцию “Добавить время блокировки” (в английском интерфейсе Add locktime).

Отправляем транзакцию и подтверждаем действия на аппаратном кошельке. Теперь у нас есть время в 78 блоков (13 часов) для совершения транзакции в блокчейне SV. Выполняем следующие действия:

Мы вручную установили адрес узла BCHSV, чему свидетельствует значение Custom backend в области выбора криптовалюты. Нам достаточно перевести средства из одного адреса на другой, чтобы окончательно разделить монеты. Важно, чтобы транзакция отличалась от транзакции, совершенной в основной сети, конфигурацией выходов (1, 2, 3 или просто другой адрес) или комиссией.

После транзакций в обоих сетях не будет лишним проверить по адресу ВХОДА (INPUT) какие ВЫХОДЫ (OUTPUTS) мы сформировали, они должны отличаться. Это и будет подтверждением успешного разделения монет. С этого момента к нашим средствам нельзя будет применить Replay Attack.

Используем Locktime с аппаратными кошельками Ledger Nano S, KeepKey.

Оригинальные интерфейсы Ledger Live и Keepkey Client не позволяют совершать транзакции с меткой Locktime. Поэтому мы воспользуемся кошельком ElectronCash, который можно скачать на официальном сайте разработчиков. Важно понимать, что только версии 3.3.2 и ниже поддерживают работу с обоими ветками блокчейна. Особенность работы данного кошелька заключается в том, что метка locktime проставляется автоматически в каждой транзакции. Это означает, что нам достаточно просто сделать транзакцию в блокчейне ABC (длинная цепочка) и после этого совершить другую в блокчейне SV.

Устанавливаем интеграцию ElectronCash с Ledger Nano S.

После интеграции отобразится обычный интерфейс с логотипом аппаратного кошелька в нижнем правом углу. Первое, что следует сделать, это отправить транзакцию в блокчейне ABC, далее у нас будет тот же промежуток примерно в 78 блоков, в течение которого нужно будет совершить вторую транзакцию в блокчейне SV. Для переключения между блокчейнами нам пригодятся популярные адреса узлов. Начнем с Bitcoin Cash ABC:

  • bch.imaginary.cash 50002
  • electron.jochen-hoenicke.de 51002
  • blackie.c3-soft.com 50002

Теперь нужно повторить тоже самое и с BitcoinCash SV. Желательно сделать так, чтобы транзакция отличалась выходом или комиссией. Популярные узлы сети BcashSV

  • sv.electrumx.cash 50002
  • electroncash.cascharia.com 50002
  • satoshi.vision.cash 50002
  • sv1.hsmiths.com 60004

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

Bitcoin Cash ABC - https://bch2.trezor.io/blocks

Bitcoin Cash SV - https://bchsv1.trezor.io/blocks

3. Использование Checkdatasig

Во втором способе мы использовали команду Locktime из – за разницы в высоте блоков обоих блокчейнов. А здесь мы используем команду, которую возможно применить только на клиентах, поддерживающих BitcoinCashABC. Любые попытки отправить транзакцию с командой Checkdatasig в блокчейн BitcoinCashSV будут отклонятся узлами сети. Кстати, команда Checkdatasig и была одной из причин, из-за которых возникли разногласия между разработчиками BitcoinCash.

Checkdatasig – это команда, которая позволяет импортировать и проверять произвольные сообщения вне блокчейна. Разработчики рассчитывает, что эта возможность впоследствии может значительно расширить область применения BCHABC в различных сферах жизни.

Для использования команды нам потребуется скачать специальный клиент ElectronCash с версией 3.3.1CS, который доступен на официально сайте разработчиков – https://electroncash.org/nov2018.html. Нам нужно будет создать горячий кошелек с новой мнемонической фразой, прислать на ее адрес небольшую сумму и отправить ее обратно на свой кошелек с командой Checkdatasig. Приступаем к первому этапу.

Создаем разовый кошелек

Интегрируем аппаратный кошелек с ElectronCash 3.3.1.CS

Отправляем транзакцию с Checkdatasig

В горячем кошельке открываем инструмент Coin Splitting.

Подводим итоги

Мы рассмотрели три популярных способа безопасного заявления монеты BitcoinCashSV. Небольшая обратная связь про каждый из способов.

  • Смешивание монет – самый простой способ, не требующего никаких дополнительных знаний и действий. Существенный недостаток – это потеря конфиденциальности.
  • Команда Locktime – в этом способе вы разъединяете монеты в рамках своего кошелька, что обеспечивает полную конфиденциальность. Пользователям кошельков Trezor можно пройти весь процесс в оригинальном интерфейсе Trezor.io, а владельцам Ledger Nano S и Keepkey необходима будет интеграция с горячим кошельком ElectronCash.
  • Команда Checkdatasig – еще один альтернативный способ безопасного разъединения монет через специальную версию ElectronCash. Преимущества данного способа в том, что после проведения первой транзакции, нет необходимости проводить вторую.

Напоследок я хотел бы предложить несколько рекомендаций для владельцев криптовалют на случаи форка:

  • Не спешите с действиями, дождитесь, пока ситуацию с форком прокомментируют эксперты.
  • Получите как можно больше информации о форке на крупнейших площадках – bitcointalk, stackexchange, reddit.
  • Дождитесь, пока не выйдет достаточное количество туториалов и выберите из них подходящий вам.
  • Первые транзакции совершайте с незначительными суммами.
Любое копирование материалов допустимо со ссылкой на данную страницу!

    Подпишитесь на рассылку

    Свежие новости из мира криптовалюты, блокчейна, обзоры аппаратных кошельков

    Похожие статьи Перейти в блог