Можно ли экспортировать ключ 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])