Можно ли экспортировать ключ Xpub из кошелька Ledger Nano S Ethereum?

Мне нужно предоставить адрес ETH платежа моим клиентам для внесения депозита ETH в их аккаунты. Я хочу использовать для этого кошелек HD ETH и теперь я использую Ledger Nano S. Но Ledger показывает мне только 1 адрес приема, поэтому мне нужен XPub кошелька ETH для генерации большого количества адресов из него для раздачи пользователям.

Если Ledger поддерживает HD, как я могу экспортировать XPub? Я бухгалтерскую книгу не поддерживает, какой кошелек можно использовать для этой цели.

Какие-либо предложения.

1 ответ

Вы не можете экспортировать xpub напрямую из бухгалтерской книги nano с приложениями по умолчанию биткойн или ethereum.

Но вы можете создать xpub, используя данные, которые вы можете извлечь из книги.

Вам нужен открытый ключ и цепной код для интересующего вас пути bip32 и открытый ключ родителя этого пути.

В приложении ethereum вы бы использовали getaddress (в настоящее время существует ограничение для m / 44/60 ', m / 44' / 61 'и m/44'/1'и ниже для этого приложения (у меня есть проблема здесь Надеюсь, это ограничение будет снято.) В приложении биткойн вы бы использовали getwalletpublickey. В приложении биткойн нет ограничений на пути bip32.

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

#!/usr/bin/env python

import sys
import binascii
from bitcoin import bin_hash160
from bitcoin import bip32_serialize
from bitcoin import compress

def main(parent_pubkey, pubkey, chaincode, depth, index, network):
    if (network.lower() == "main"):
        network_bytes = b'\x04\x88\xb2\x1e'
    elif (network.lower() == "test"):
        network_bytes = b'\x04\x35\x87\xcf'
    else:
        sys.exit("network must be either main or test")

    compressed_pubkey_bytes = binascii.unhexlify(compress(pubkey))
    fingerprint_bytes =  bin_hash160(binascii.unhexlify(compress(parent_pubkey)))[:4]
    chaincode_bytes = binascii.unhexlify(chaincode)

    deserialized = (network_bytes, int(depth), fingerprint_bytes, int(index), chaincode_bytes, compressed_pubkey_bytes)
    xpub = bip32_serialize(deserialized)
    print(xpub)

if __name__ == '__main__':
    if (len(sys.argv) < 7):
        sys.exit("USAGE: generate_xpub PARENT_PUBLICKEY PUBLICKEY CHAINCODE DEPTH INDEX (MAIN|TEST)")
    main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6])
Другие вопросы по тегам