Я сделал кусок программного обеспечения, которое
* Извлекает закрытый ключ данного адреса с dumpprivkey команды
* Декодирует закрытый ключ в соответствии с Бумажник Формат импорта
* Дает закрытый ключ OpenSSL (на основании того, что делает исходный код Bitcoin), и получает соответствующий открытый ключ
* Кодирует открытый ключ к Bitcoin адрес
* Проверяет данные и полученные Bitcoin адреса являются одинаковыми.
Это отлично работает для некоторых клавиш, но не для других. Дальнейшие исследования показали, что он работает для ключей, сгенерированных старой версией BOTG (импортируемой в Bitcoin-Qt), и не для ключей, генерируемых Bitcoin-Qt самих (версия 0.8.6). Адреса, по которым она работает есть закрытый ключ (который возвращается dumpprivkey), который начинается с «5», а когда он не работает, он начинает с «L». Я читал, что те, которые начинаются с «L» соответствует "Сжатые открытые ключи", Так что, вероятно, что вызывает проблему.
Обратите внимание, что мой код не генерирует никаких ошибок: он просто вернул адрес, который отличался от оригинала. Среди прочего, это означает, что номер версии в формате закрытого ключа является то же самое.
Я не мог найти хорошую документацию о том, как перейти от закрытого ключа к открытому ключу, либо для сжатого или несжатых ключей, так что я буду использовать исходный код Bitcoin снова, чтобы помочь мне. Я был бы признателен, если кто-то может задокументировать (также, на всякий случай, если я не могу понять его из кода). По-видимому, просто говоря, "это закрытый ключ, и это ECDSA кривая вы должны использовать" недостаточно.