Ethereum 是否可以从Ledger Nano的以太坊钱包导出Xpub密钥

Ethereum 是否可以从Ledger Nano的以太坊钱包导出Xpub密钥,ethereum,cryptocurrency,hardware-wallet,ledger-nano-s,xpub,Ethereum,Cryptocurrency,Hardware Wallet,Ledger Nano S,Xpub,我需要给我的客户提供支付ETH地址,以便将其存入ETH账户。我想使用高清ETH钱包,我现在正在使用Ledger Nano S。但账本只显示了1个接收地址,所以我需要ETH钱包的XPub,以便从中生成多个地址并分发给用户 如果账本支持HD,如何导出XPub?如果分类账不支持,哪个钱包可用于此目的 任何建议。您不能使用默认的比特币或以太坊应用程序直接从分类账导出xpub 但是,您可以使用从分类账中提取的数据来构造xpub 您需要的是感兴趣的bip32路径的公钥和链码,以及该路径的父路径的公钥 在您将

我需要给我的客户提供支付ETH地址,以便将其存入ETH账户。我想使用高清ETH钱包,我现在正在使用Ledger Nano S。但账本只显示了1个接收地址,所以我需要ETH钱包的XPub,以便从中生成多个地址并分发给用户

如果账本支持HD,如何导出XPub?如果分类账不支持,哪个钱包可用于此目的


任何建议。

您不能使用默认的比特币或以太坊应用程序直接从分类账导出xpub

但是,您可以使用从分类账中提取的数据来构造xpub

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

在您将使用的以太坊应用程序中(目前此应用程序对m/44/60',m/44'/61',和m/44'/1'及以下有限制(我有一个问题希望删除该限制)。在您将使用的比特币应用程序中。比特币应用程序中没有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])
!/usr/bin/env python
导入系统
导入binascii
从比特币导入bin_hash160
从比特币导入bip32_序列化
从比特币导入压缩
def main(父项_pubkey、pubkey、链码、深度、索引、网络):
如果(network.lower()=“main”):
网络字节=b'\x04\x88\xb2\x1e'
elif(network.lower()=“test”):
网络字节=b'\x04\x35\x87\xcf'
其他:
系统退出(“网络必须是主网络或测试网络”)
compressed_pubkey_bytes=binascii.unhexlify(压缩(pubkey))
fingerprint_bytes=bin_hash160(binascii.unhexlify(compress(parent_pubkey)))[:4]
chaincode_bytes=binascii.unhexlify(chaincode)
反序列化=(网络字节、int(深度)、指纹字节、int(索引)、链码字节、压缩字节)
xpub=bip32_序列化(反序列化)
打印(xpub)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
如果(len(sys.argv)<7):
sys.exit(“用法:生成\u xpub PARENT\u公钥公钥链码深度索引(MAIN | TEST)”)
main(sys.argv[1]、sys.argv[2]、sys.argv[3]、sys.argv[4]、sys.argv[5]、sys.argv[6])

或者,您可以使用任何节点的公钥和链码,并在m处假装这是一个新的主公钥(将指纹设置为0x00000000,深度设置为0)。这将为您提供一个有效的xpub,您可以从中派生新地址,您只需记住将路径转换回实际的bip32路径,以便稍后进行签名。