Author

Topic: Двойная трата (Double spending) в Electrum (Read 469 times)

legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
Подниму тему. Я тут недавно узнал, что, оказывается, в консоли Electrum можно выполнить команду удаления транзакции из истории кошелька. Это сильно упрощает всю методику - не нужны никакие внешние json-редакторы, и вообще не нужны никакие манипуляции с файлом кошелька.

Пункты 1.1, 1.2, 1.5 - 2 больше не нужны. Их заменяем на:

2. Переходим на вкладку "Консоль" (если ее нет, то нажимаем в меню "Вид" - "Показать Консоль"). В консоли даем команду:
Code:
wallet.remove_transaction("txid")
, где txid - идентификатор транзакции, сохраненный в пункте 1.4.
Всё, нажимаем "F5", чтобы обновить отображаемые данные и убеждаемся, что транзакция исчезла.
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
Quote
Не люблю онлайновые сервисы если есть альтернатива на своем компе. Почему не notepad ++ ?
Я тоже не люблю ). Сам под виндой пользуюсь JSONedit (упоминал о нем). Если и Notepad++ (он тоже только для windows, как я понимаю) отображает json-файл в виде дерева и позволяет удалять ветви целиком, то почему бы нет? Я не разбирался, видимо, там плагин нужно какой-то ставить. (?)
Выбрал этот онлайн-редактор из-за универсальности, из-за того, что он работает и в винде, и в макоси, и в линуксе, с открытым кодом, да и не совсем онлайн - работает локально в браузере при отключенном интернете. Но действительно, наверное, лучше не грузить туда файл незапароленного кошелька (хотя иметь на онлайн-компе назапароленный программный кошелек - уже большая ошибка и глупость, поэтому вряд ли это распространено). Про пароль добавил уточнение в текст, спасибо, что навели на мысль.

Quote
Зы, добавил инструкцию в Лучшие инструкции по крипте на форуме, раздел Разное.
Как вам угодно, мне все равно.
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
резерв
legendary
Activity: 1848
Merit: 2033
Crypto Swap Exchange
Всем привет!

Решил поделиться с сообществом техникой выполнения двойной траты (double spend) при помощи Electrum, которой сам неоднократно пользовался, и которую считаю самой удобной и простой (из трёх мне известных). Когда-то увидел статью на стимит, тут будет ее пересказ с небольшими моими изменениями. Надеюсь, кому-то это будет интересно ).

Нам потребуется замечательная программа биткоин-клиент Electrum и какой-нибудь редактор json-файлов типа JSONedit или https://jsoneditoronline.org/ (я буду использовать второй, так как он работает на любых платформах).
Нужно сразу уточнить, что у меня всегда получалась двойная трата транзакций с RBF-флагом, сейчас во многих клиентах он стоит по умолчанию. Но если ваша транзакция без RBF-флага, то даблспенд работать скорее всего не будет (впрочем не уверен, возможно с большой комиссией и такая пройдет, надо проверять).

Если вы пользовались другим биткоин-клиентом, то просто импортируйте необходимые приватные ключи в Electrum.
 
Также обязательным условием является отключенное шифрование файла кошелька, если у вас этот файл зашифрован, то эту опцию необходимо отключить в меню "Кошелек - Пароль" (пароль оставить, снять галочку с "Зашифрованный файл кошелька").

Итак, приступим ).

Исходные данные - у нас в Electrum есть неподтвержденная транзакция, которую нам нужно изменить. Если бы нам нужно было просто увеличить комиссию для прохождения зависшей транзакции, мы бы просто нажали правую кнопку мыши на транзакции во вкладке истории и выбрали пункт "Увеличить комиссию". Здесь мы будем решать более сложную задачу - изменим получателя средств.


1. Первое, что нам нужно сделать, это обмануть Electrum. Необходимо, чтобы он на время "забыл" о существовании неподтвержденной транзакции. Для этого из файла кошелька удаляем все упоминания о ней.

1.1 Делаем копию файла кошелька (на случай, если где-то ошибемся)


1.2 Открываем в браузере редактор https://jsoneditoronline.org/ .

1.3 Отключаем связь клиента с интернетом. Это можно сделать разными способами - изменить настройки Electrum, средствами операционной системы или физическим отключением - не важно, главное, чтобы в правом нижнем углу загорелся красный кружок.

1.4 Двойной щелчок мыши в окне истории по транзакции открывает окно, из верхнего поля которого копипастим куда-нибудь в блокнот идентификатор транзакции и строчку из поля "Ввод". Также смотрим и запоминаем/записываем, с какой комиссией была отправлена транзакция.


1.5 Закрываем Electrum (!)

1.6 В json-редакторе открываем файл кошелька, в поле поиска вставляем идентификатор транзакции и удаляем все ветки, где он упоминается (обычно это 7 мест). Здесь важно не удалить ничего лишнего и в то же время ничего не оставить.


1.7 Сохраняем файл вместо старого. Обратите внимание, редакторы часто любят добавлять расширение, в данном случае json, Electrum расширение по умолчанию не использует, хотя и не запрещает. Просто если будет, например default_wallet и default_wallet.json, то это будет два разных кошелька.



2. Открываем Electrum. Если все было сделано правильно, то кошелек откроется без ошибок, и мы обнаружим, что из истории транзакций та неподтвержденная транзакция исчезла.


2.1 Готовим новую транзакцию обычным способом - вставляем адрес получателя, сумму перевода и комиссию (важно - уплачиваемая комиссия должна быть выше той, которую мы запоминали в п.1.4. Нажимаем кнопку "Предпросмотр". Здесь нужно все проверить и убедиться, что в поле "Ввод" присутствует та строчка, которую мы сохранили в п.1.4. Если ее там нет, то двойной траты не получится, поэтому нужно принять меры, чтобы она там появилась (вкратце - для этого из вкладки "Монеты" нужно потратить этот вход принудительно, подробнее потом добавлю, если кому-то это понадобится).


2.2. Нажимаем кнопку "Подписать" и вводим там пароль или жмем кнопку аппаратного кошелька, в общем, как обычно ). После нажимаем "Экспортировать" и сохраняем файл с подписанной транзакцией куда-нибудь. В принципе, можно и не сохранять, а просто нажать на "Копировать", но так надежнее.

2.3 Только теперь подключаем Electrum к интернету. Когда все засинхронизирутся, обнаруживаем, что старая транзакция восстановилась. Не пугаемся, так и должно быть. Нажимаем в меню "Инструменты - Загрузить транзакцию - Из файла (если просто копировали, то "из текста")" и выбираем сохраненный в предыдущем пункте файл (если копировали в буфер, то вставляем).


2.4 Нажимаем кнопку "Разослать" и всё, дело сделано ).


Может показаться, что это сложно, но на самом деле вся процедура занимает меньше 5 минут. Рекомендую сначала потренироваться на кошках в тестнете.


 
Jump to: