是否可以从Ledger Nano S Ethereum钱包中导出Xpub Key

时间:2018-03-19 08:07:42

标签: ethereum cryptocurrency hardware-wallet ledger-nano-s xpub

我需要向我的客户提供付款ETH地址,以便存入其账户。我想使用HD ETH钱包,我现在正在使用Ledger Nano S.但Ledger只向我显示了1个接收地址,所以我需要ETH钱包的XPub来生成许多地址,以便分发给用户。

如果Ledger支持HD,我该如何导出XPub?如果分类帐不支持,哪个钱包可以用于此目的。

任何建议。

1 个答案:

答案 0 :(得分:3)

您无法使用默认的比特币或以太坊应用直接从分类帐nano导出xpub。

但是您可以使用可以从分类帐中提取的数据构建xpub。

您需要的是您感兴趣的bip32路径的公钥和链码以及该路径的的公钥。

在以太坊应用中你会使用getaddress(目前对m / 44/60',m / 44' / 61'以及m / 44' / 1'及以下此应用程序(我有一个问题here希望删除该限制。)在比特币应用程序中,您将使用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])