После 2 лет простоя я пытаюсь восстановить полную биткойн-ноду, одновременно меняя платформы и обновляясь до текущей версии. Все работает, кроме кошелька. Наличие кошелька приводит к сбою нового узла (segfault). Узел работает, когда отсутствует wallet.dat или указан параметр -disablewallet. Мне на самом деле не нужно, чтобы этот кошелек был полностью импортирован, просто чтобы получить связанный с ним биткойн на адрес, контролируемый новым узлом.
Я прочитал этот отчет о проблеме , в котором обвиняется версия файлов библиотеки berkley db. Я скомпилировал биткойн-ядро локально со старыми библиотеками BDB, предоставленными в соответствии bitcoin/contrib/install_db4.sh
с этим отчетом о проблеме, и получил тот же результат. Дело в том, что поскольку (на самом деле) платформа Windows не обеспечивает реализацию BDB, я понятия не имею, какие заголовки правильны для файла кошелька, сгенерированного ядром биткойнов Windows.
Я хочу избежать удаления и повторной загрузки всего блокчейна. Однажды я запустил, -disablewallet -assumevalid=0
чтобы проверить всю цепочку блоков. Я сохраняю резервные копии всех файлов до обновления, если это помогает.
GDB отследить pastebin . Обратите внимание, что этот запуск был только подмножеством параметров cli, с которыми я обычно запускаю, в частности, отсутствует информация о rpc.
Старая установка:
Новый узел:
Есть ли способ импортировать старый/другой формат файла wallet.dat в новый узел? Возможно, есть способ извлечь информацию о секретном ключе из указанного старого файла, чтобы ее можно было импортировать вручную? Могло ли программное обеспечение старого узла создать и отправить транзакцию со всем содержимым старого кошелька на новый адрес без предварительной полной синхронизации ? Возможно ли, чтобы старая версия ядра биткойна могла полностью синхронизироваться с современной цепочкой блоков?
e: забыл упомянуть: файл журнала ошибок db /mnt/data/blockchains/btc/blockchain/db.log
пуст и сохраняет дату последнего изменения с момента первого запуска исходного узла в середине 2017 года.
e2: после перевода кошелька в базу данных версии 4.8, как предложил @PieterWuille, узел переиндексировал и напечатал несколько строк, например
2021-02-18T23:58:08Z [default wallet] Submitting wtx f7b5 to mempool for relay
но после нескольких дней работы он индексировался до высоты блока чуть менее 500000, а затем снова segfault.
Я наконец получил это. Вот краткое резюме для будущего искателя:
Обратите внимание, что файл, созданный на шаге 2, не зашифрован и содержит ваши закрытые ключи, поэтому обращайтесь с ним осторожно. Хотя я ждал, пока новый узел завершит синхронизацию, я сомневаюсь, что это действительно требование. Я не разрешал старому узлу синхронизировать больше нескольких блоков.
Питер Уилле
Питер Уилле
Питер Уилле
мемта
Питер Уилле
walletpassphrase
RPC (или, если вы используете графический интерфейс, он просто спросит вас, когда это необходимо).мемта
мемта