Используя Python: создайте закрытый ключ по моему выбору, затем сгенерируйте открытый ключ и адрес

Я ищу простую, удобную в использовании биткойн-библиотеку для Python.

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

Я просмотрел криптоинструменты на github, которые выглядели многообещающими и простыми в использовании, но они не принимали шестнадцатеричное значение, не кратное 2. Я знаю, что это звучит странно, но я хочу иметь возможность вводить шестнадцатеричное значение. значение, как c12, и заставить его работать, как ожидалось (если мне не нужно вводить 0c12, и это будет работать, с отброшенным начальным нулем). Я ожидаю, что когда я введу 0cfa721d, это будет интерпретировано как прямой порядок байтов.

bitcoinlib выглядит многообещающе, но меня это сбивает с толку, и я пробовал пару часов, но не знал, как получить то, что я хочу.

  1. Введите закрытый ключ в шестнадцатеричном формате
  2. Получить ключ паба в формате hash160, сжатый
  3. Получите адрес 1Btc... также.

Интересно, это строгое математическое соотношение? Например, может ли быть произвольное или бесконечное количество открытых ключей от закрытого ключа? Есть ли способ убедиться, что я получу публичный ключ, который хочу, из закрытого ключа? Я хочу протестировать известные закрытые ключи с помощью сгенерированного публичного ключа и адреса BTC, которые соответствуют известным закрытым ключам и адресам, поэтому я могу попытаться выяснить, как кто бы ни сгенерировал эти адреса из вариантов закрытых ключей, я могу попытаться воспроизвести и сделать то же самое. сам.

Спасибо за любую помощь или предложения.

Привет, автор криптоинструментов здесь. Причина, по которой он не принимает шестнадцатеричные числа с нечетными цифрами, заключается в том, что он будет хранить закрытый ключ внутри как объект байтов Python, а метод bytes.fromhex требует полных байтов. Я посмотрю на это. В качестве обходного пути вы можете просто дополнить нулем, если он имеет нечетное количество цифр. 0x0cfa721d точно такой же, как 0xcfa721d. Другие функции есть, просто сделайтеmyprivatekey.to_public().to_address('P2PKH', compressed=True)

Ответы (1)

Для этого очень упрощенного случая вы можете взглянуть на https://github.com/circulosmeos/bitcoin-in-tiny-pieces .

Каждая операция закодирована для простоты понимания, изолирована в другом файле, но их легко объединить или использовать непосредственно из командной строки: например:

$ echo 0x01 | ./bitcoin-public-from-private.py | ./bitcoin-address-from-public-key.py

И на вопрос:

Например, может ли быть произвольное или бесконечное количество открытых ключей от закрытого ключа?

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

Это в самом простом случае, не считая более сложных случаев, появившихся позже в биткойнах (таких как HD-ключи и т. д.)...

Эй, спасибо! Я разветвил ваш репозиторий по адресу github.com/jamesyoungdigital/bitcoin-in-tiny-pieces.git , чтобы добавить новый небольшой инструмент, который проверяет баланс адресов мозгового кошелька. У меня не было большого успеха со сценарием оболочки. Теперь это зависит от моего форка pybitcointools.git, который очень прост в использовании и почти ни от чего не зависит. Надеюсь, вам понравятся небольшие дополнения! :)
Рад, что оказался полезным! Что касается сценария оболочки, просто откройте вопрос, и я посмотрю: он будет работать без нареканий!
Звезда дана! Я хотел бы дать еще несколько, но мне не разрешают, ха-ха. :-) С помощью скрипта оболочки я пытаюсь так: ./bitcoin-test-address-balance.sh satoshi, но вывод всегда: ... 2 .... n и, насколько я могу судить, никогда не заканчивается . Проблема, похоже, заключается в скрипте Python баланса адресов, строки с 62 по 64, когда возникает исключение. URL-адрес должен использовать {} для интерполяции. Пожалуйста, посмотрите мой запрос на вытягивание. Спасибо! :-)
Привет, Джеймс, я думаю, что исключение поймано правильно: дело в том, что blockchain.info иногда отбрасывает петицию, вероятно, из-за большого трафика: в этом случае скрипт спит от 1 до n минут между попытками: как это делается для запуска в партиями, это не считается проблемой :-o, но спасибо за внимание!