Как вернуть потерянные активы в сети Lightning из-за сбоя диска.

blacktrader

Наш человек
Член команды
Администратор
Если у вас есть опыт использования Lightning Network до прочтения этой статьи, вы, вероятно, знаете, что существует реальная возможность потерять ваши биткоины, если что-то пойдет не так (например, с оборудованием).

Это связано с решением о разработке протокола и недавним введением резервного копирования статических каналов (SCB).
Несмотря на то, что SCB великолепны, работают так, как рекламируется, и дадут в будущем многим пользователям безопасность, остается много людей, тестирующих Lightning Network, которые не читают предупреждения и не знают, что SCB вообще существуют.

Ко мне недавно обратились два человека независимо друг от друга, которые удалили свои системы и хотели переустановить все, думая, что они будут в безопасности, имея только мнемонику из 24 слов. Они не сделали резервную копию своего файла channel.backup, содержащего SCB, и потеряли бы все биткоины, которые использовали для открытия своих каналов. Поэтому я решил попытаться помочь им вернуть свои активы.

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

Чтобы не дать вам ложной надежды, вот условия, которые необходимо выполнить, чтобы это стало возможным:
  1. Вы использовали LND. Данный метод может быть перенесен в другие реализации, но в настоящее время он работает только для LND.
  2. Удаленный узел, с которым вы открыли канал, все еще находится в сети с тем же открытым ключом, и его можно найти на 1ml.com. Это важно. Если другой узел не подключен к сети и/или также пострадал от потери данных, то не существует способа восстановления, извините.
  3. У вас есть 24 слова кошелька LND, которое вы получили при настройке.
  4. Вы точно знаете, с какого канала (каналов) вы хотите вернуть средства. И каналы тоже можно увидеть на 1ml.com (следовательно, нет частных каналов).
  5. Прошло немного времени с тех пор, как система потерпела крах. Я не уверен, что это важно, но думаю, что чем дольше вы не восстанавливаете канал с удаленным узлом, тем более вероятно, что они просто «забыли» информацию, которая нам нужна.
Если вы можете ответить на все это положительно, то есть надежда и имеет смысл попробовать это руководство. Будет сложно технически и может не сработать. Возможно, мне также нужно немного подправить код. Пожалуйста, напишите мне в Lightning Network Community Slack, если вам нужна помощь.

Я также могу попытаться вернуть средства для вас, но тогда мне нужно будет взимать 20% восстановленных сатоши, потому что это довольно трудоемкая работа. И вам нужно будет передать мне фразу из 24 слов, чтобы я смог это сделать.

Итак, начнем. Для этого вам понадобятся следующие вещи:
  1. Все, что вам нужно для компиляции LND (git, make, go).
  2. bitcoind или btcd, полный узел для подключения к LND. Он также должен работать под Neutrino, но текущая версия LND пока не поддерживает Neutrino в сети.
  3. My Cryptography Toolkit. Помните, что ввод конфиденциальной информации, такой как ваши 24 слова или xprv, на любом сайте в интернете может привести к ее перехвату. Вы должны использовать автономную версию на защищенном и автономном компьютере, если это возможно.
Теперь, когда у нас все настроено, вот что вам нужно сделать:

Клонируйте и соберите мою модифицированную версию LND (на основе 0.7.1-beta-rc2).
Код:
$ git clone git@github.com:guggero/lnd.git
$ git checkout fund-recovery
$ make && make install
Запустите следующую команду и посмотрите на параметры.
Код:
$ lnwallet fakechanbackup --help
NAME:
   lnwallet fakechanbackup - Fake a channel backup file to attempt fund recovery.
USAGE:
   lnwallet fakechanbackup [command options] [arguments...]
DESCRIPTION:
  If for any reason a node suffers from data loss and there is no
  channel.backup for one or more channels, then the funds in the channel
  would theoretically be lost forever.
  If the remote node is still online and still knows about the channel,
  there is hope.
  We can initiate DLP (Data Loss Protocol) and ask the remote node to
  force-close the channel and to provide us with the per_commit_point that
  is needed to derive the private key for our part of the force-close
  transaction output.
  But to initiate DLP, we would need to have a channel.backup file.
  Fortunately, if we have enough information about the channel, we can
  create a faked/skeleton channel.backup file that at least lets us
  talk to the other node and ask them to do their part.
  Then we can later brute-force the private key for the transaction
  output of our part of the funds (see bruteforce command).
OPTIONS:
   --root_key value          BIP32 extended root key
   --remote_node_info value  information about the remote node in the format pubkey@host:port
   --funding_txid value      the txid of the channel's funding transaction
   --output_index value      the output index for the funding output of the funding transaction (default: 0)
   --short_channel_id value  the short channel ID in the format blockheight:transactionindex:outputindex
   --capacity value          the channel's capacity (default: 0)
Корневой ключ получите, используя Cryptography Toolkit. Перейдите на вкладку «aezeed Cipher Seed Scheme» в меню LND. Во втором блоке введите мнемонику из 24 слов и парольную фразу (если она установлена). Это должно дать вам ключ корневого узла HD (начинается с xprv…).

Другая информация вы возьмете с 1ml.com. Как только вы получите всю информацию, это должно создать файл с именем fake.backup, который содержит минимальные данные для инициализации протокола потери данных (DLP) с удаленным узлом.

Запустите измененную версию LND и создайте новый кошелек.
ВНИМАНИЕ: Это перезапишет любой существующий файл кошелька и/или channel.backup в вашей папке LND по умолчанию. Поэтому, пожалуйста, сделайте это на другом компьютере или создайте резервную копию вашего текущего узла LND, прежде чем попытаетесь это сделать!

В окне терминала 1 вы обычно запускаете LND и подключаете его к полному узлу биткоина (мануал для этого нужно поискать в интернете).
Вам не нужно больше ничего делать в этом окне, просто запустите процесс. Но как только процесс восстановления пройдет успешно, в этом окне появится очень важное сообщение журнала. Вам это понадобится, это очень важно!
В окне терминала 2 выполните следующую команду:
Код:
lncli create --multi_file ./fake.backup
Он спросит вас, есть ли у вас ключевая фраза, и вы должны ответить «да»! Введите 24 слова (и пароль, если нужно), чтобы заново настроить кошелек.
Как только команда завершится, следуйте информации в окне терминала 1. LND синхронизирует всю цепочку, ищет балансировки внутри цепочки и, наконец, пытается подключиться к удаленному узлу, который мы указали в поддельном файле SCB.

После запуска Протокла Потери Данных в файле журнала LND должны появиться следующие выходные данные:
Код:
------------------------------------------
Received last commit point from remote node!
Secret: xxxxxxxxxxxxxxxxxxxxxxxx, Commit Point: yyyyyyyyyyyyyyyyyyyy
------------------------------------------
Если вы видите это, отлично!

Для следующего шага вам понадобится значение «Commit Point».
Сохраните это где-нибудь!
Теперь все, что мы можем сделать, это ждать и надеяться, что удаленный узел принудительно закроет канал. Это вернет наш баланс канала обратно в цепочку. Но, к сожалению, не по адресу, который по умолчанию смотрит кошелек, а по специальному, подправленному адресу. Этот адрес представляет собой комбинацию ключа в нашем кошельке (полученного из начального числа) и полученной нами «точки фиксации». Без «точки фиксации» (которую знает ТОЛЬКО удаленный узел) мы никогда бы не смогли рассчитать закрытый ключ, который может потратить остаток, который теперь возвращается в цепочку.

Теперь, чтобы восстановить закрытый ключ для адреса, на котором теперь должна находиться наша часть баланса канала, нам сначала нужно выяснить адрес, к которому был заблокирован вывод транзакции принудительного закрытия. Для этого проще всего, если мы посмотрим на транзакцию финансирования канала (найденную на 1ml.com, мы использовали это на предыдущем шаге) в проводнике блоков, например, blockstream.info. Теперь мы должны увидеть, что эта сделка финансирования была проведена. Если это не так, то удаленный узел еще не закрыл принудительно канал. Там может быть способ приблизиться к владельцу узла и попросить его принудительно закрыть вручную.
Как только мы увидим транзакцию по расходам, мы узнаем адрес, на который пошли наши средства. Он должен быть короче обоих адресов, обычно это второй выход.
Теперь, когда у нас есть оба параметра, которые нам нужны для принудительного применения закрытого ключа, мы можем запустить последнюю команду. Корневой ключ такой же, какой мы использовали в первой команде.
Код:
$ lnwallet bruteforce --help
NAME:
   lnwallet bruteforce - Brute force a private key for a force-closed channel payout address.
USAGE:
   lnwallet bruteforce [command options] root-key per_commit_point payout-address
DESCRIPTION:
  After successfully retrieving the remote node's last per_commit_point
  and instructing it to force-close a channel, the private key that
  corresponds to the tweaked no-delay output of our channel balance needs
  to be calculated. This command goes through the first few thousand
  keys from the seed that could have been used for this.
If the command fails, either the per_commit_point does not belong to
  the given address or the seed/root key was wrong.
OPTIONS:
   --root_key value          BIP32 extended root key
   --per_commit_point value  recovered per_commit_point of remote node for our no-delay output
   --payout_address value    address to brute force private key for
Если нам повезет, мы должны получить сообщение, которое гласит: «Нам повезло!». Затем следует шестнадцатеричное представление закрытого ключа. Если это так, вы можете импортировать этот закрытый ключ в любой кошелек и вывести средства (преобразовать его в формат WIF с помощью моего инструмента). Отлично, вы только что вернули свои деньги!

Если вы не получите секретный ключ, есть целый список причин, по которым можно было пойти не так. Не стесняйтесь связаться со мной, может быть, есть что-то, что мы можем сделать.

Я рад за любые отзывы, которые я получаю по этому руководству. Моя цель - помочь как можно большему количеству людей вернуть потерянные средства! Даже если это сделает биткоин менее дефицитным.

Автор Oliver Gugger
 
Последнее редактирование модератором:

Онлайн статистика

Пользователи онлайн
1
Гости онлайн
69
Всего посетителей
70

Статистика форума

Темы
1 646
Сообщения
53 511
Пользователи
9 184
Новый пользователь
BoldikuFFs

Мы в социальных сетях

Вверх Снизу