Алгоритм перехода от seed к 20 (или более) адресам

В настоящее время я читаю исходный код Electrum, чтобы понять, как перейти от семени (12 слов) к адресам (в обычном формате). Есть ли у кого-то общая картина этого процесса?

Точнее, я ищу код Python (автономный, запускаемый из Electrum), который может это сделать.

  1. Возьмите семя s(можно 12 слов из словаря на 2048 слов, но не обязательно)

  2. Предположим, что sэто действительное начальное число (т.е. is_new_seed(s)это Trueозначает, что bh2u(hmac_sha_512(b"Seed version", s.encode('utf8')))оно имеет префикс '01'); код для is_new_seed здесь.

  3. Для нашей цели (получить адреса) мы должны сначала создать закрытый ключ из s? Как?

или

  1. Должны ли мы создать главный открытый ключ из s? Как?

  2. Учитывая 3. или 4., как создать 20 первых публичных адресов?


Пример ввода: s = 'x8'(да, это допустимый (небезопасный, потому что слишком простой) сид, вы можете попробовать его в Electrum — создайте кошелек из существующего сид )

Пример вывода:

1LNvv5h6QHoYv1nJcqrp13T2TBkD2sUGn1
1P6rnf6VUfSUUWES6wTyjfx9dTFqXdrjLM
1AQ6TNtD2eEdQjwpVpkPSdcvJiiLKziKZz
...
Вы имеете в виду вот так, но Python? bitcoin.stackexchange.com/questions/63715/…
Не совсем @fredsben, на выходе должны быть (общедоступные) адреса, а не закрытые ключи. Или, может быть, эти адреса можно легко вывести из ключей pvt?
Я думаю, что этот инструмент показывает закрытые ключи, открытые ключи и адреса. Закрытые ключи генерируются из семени. Публичные ключи генерируются из закрытых ключей. Адреса генерируются из открытых ключей. Так что да, адреса можно вывести из закрытых ключей.

Ответы (1)

Electrum использует BIP 32 для перехода от начального значения к закрытым и открытым ключам. Затем из этих ключей получаются адреса. Публичные ключи также получаются из закрытых ключей, за исключением кошельков только для просмотра.

Полная спецификация BIP 32 доступна здесь .