Электрум 2.0: стандартизация без BIP39/32 сильно усложняет ситуацию. Почему?

Electrum 2.0 вызывает у меня некоторое разочарование, поскольку он кажется нестандартной реализацией BIP32/BIP39 (HD-кошельки, мнемоническое семя соответственно). Рассматриваемый кошелек представляет собой кошелек с мультиподписью 2 из 2 (все P2SH), при этом второй расширенный открытый ключ создается в pybitcointools с использованием

bip32_privtopub( bip32_master_key( sha256("a password") ) ),

затем импортирован в Электрум.

Учитывая начальное число из 13 слов, которое само по себе является нестандартным, поскольку последнее слово является контрольной суммой, оказалось невозможным экспортировать xprivключ из Electrum.

Как мнемоническое семя преобразуется в расширенный закрытый ключ стандарта BIP32 (если сам клиент этого не позволит)? : EDIT1 : с большим трудом см. мой ответ ниже

(ПЕРЕФОКУСИРОВАНО) ВОПРОС : *почему Электрум:

  • отклониться от BIP0039?
  • сделать невозможным экспорт главного закрытого ключа BIP32 ?
  • вернуть частично подписанные шестнадцатеричные Tx P2SH, которые искажены?

Ответы (4)

Существует альтернативный способ извлечения основного расширенного закрытого ключа (xprv): в консоли Electrum просто введите следующее:

wallet.get_master_private_key('x/', gui.password_dialog())

Или для главного закрытого ключа кошелька, созданного с помощью Electrum 1.x, это:

wallet.get_seed(gui.password_dialog())

Предупреждение

Никогда не вводите свой пароль или закрытый ключ в консоль. Другими словами, не делайте этого:

wallet.get_seed('my-password')

Все, что вы вводите в консоль, временно хранится в файле вашего кошелька в незашифрованном виде , чтобы функция истории команд (доступная через стрелку вверх) работала.

Где ты это нашел?! Хорошо сделано!
Спасибо! Кто-то на Bitcointalk спрашивал, как это сделать сегодня, и я решил немного покопаться в источнике Electrum, чтобы посмотреть, смогу ли я найти лучший способ сделать это, прежде чем ответить. Впоследствии имело смысл обновить этот ответ и избавиться от не очень безопасного метода, который был здесь раньше.
wallet.get_master_private_key('x/', None)без пароля FWIW, не""

Томас Фёгтлин, разработчик Electrum, объясняет аргументацию в первые 10 минут этого интервью. Я думаю, что он также разместил то же самое в списке рассылки разработчиков биткойнов некоторое время назад.

https://letstalkbitcoin.com/blog/post/epicenter-bitcoin-69-thomas-voegtlin-electrum-spv-wallets-and-bitcoin-aliases

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

Примечание. Июль 2017 г., Electrum v2.8.3... теперь команда:

getmasterprivate()

Диалоговое окно пароля появится автоматически ;)

Привет, HCP, добро пожаловать в Bitcoin.SE, и спасибо за обновление! Обычно мы пытаемся полностью ответить на вопрос в каждом ответе, поэтому, если бы вы могли добавить немного больше объяснений, было бы здорово. Если вы просто хотите обновить небольшую часть существующего ответа, вы также можете предложить его отредактировать.

Я только что нашел это в /r/Bitcoin: , так что, видимо, для этого есть exe, но я не совсем игра, так как загрузка ссылки была помечена хромом.

Оказывается, Электрум использует: m/0/0для адресов кошельков и m/1/0для адресов сдачи.

РЕДАКТИРОВАТЬ: был отправлен запрос на получение кода, который извлекает корневое семя из семенной фразы Electrum 2.0:

def electrumv2_extract_seed(words, password=''):
    """Takes Electrum v2.0 13 word mnemonic string and returns seed. Only works on English for now"""
    # clean-up unicode characters
    mnemonic = words[:]
    try:
        mnemonic = unicodedata.normalize('NFC', unicode(' '.join(words.lower().strip().split()))).encode('utf-8') # a string of 13 words
    except Exception as e:
        raise Exception(str(e))
    rootseed = pbkdf2.PBKDF2(str(mnemonic), str('electrum' + password), 2048,  macmodule=hmac, digestmodule=hashlib.sha512).read(64)
    return rootseed

def electrumv2_mnemonic_to_mprivkey(words, password=''):
    return bip32_master_key(electrumv2_extract_seed(words, password=''))

Это для использования с pybitcointools , как from bitcoin import *в Python 2.7 .