跳转到主要内容

BIP32密钥推导方案的Python实现

项目描述

PyPI version Build Status codecov.io

hdwallets

BIP32规范的分层确定性钱包的基本实现。

基于https://github.com/darosior/python-bip32的一个分支,有一些显著的变化

  • 移除了对base58的依赖。所有接口都输入和输出原始字节,而不是base58字符串。
  • coincurve依赖项替换为ecdsa
  • 分发类型信息 (PEP 561)

使用方法

>>> import base58
>>> from hdwallets import BIP32, HARDENED_INDEX
>>> bip32 = BIP32.from_seed(bytes.fromhex("01"))
# Specify the derivation path as a list ...
>>> bip32.get_xpriv_from_path([1, HARDENED_INDEX, 9998])
b"\x04\x88\xad\xe4\x037\x01)\x0f\x00\x00'\x0e7\xf9\xe7)\x8dCJ\x8b\xfb\xc2j#\xeb\xc0++\xdf}I\x80\xdfr\xef6\xad0\xf7K\x0ceE\xea\x00\xb3D8\x0b\x0e\xf4-\x9a\xe6\x91\xe9\x82\xe8\xbf\x9a\x97\x15\xfe?\x17\xdc[\xf7\xc5\xfb?\xbezaz\\\xb9"
# ... Or in usual m/the/path/
>>> bip32.get_xpriv_from_path("m/1/0'/9998")
b"\x04\x88\xad\xe4\x037\x01)\x0f\x00\x00'\x0e7\xf9\xe7)\x8dCJ\x8b\xfb\xc2j#\xeb\xc0++\xdf}I\x80\xdfr\xef6\xad0\xf7K\x0ceE\xea\x00\xb3D8\x0b\x0e\xf4-\x9a\xe6\x91\xe9\x82\xe8\xbf\x9a\x97\x15\xfe?\x17\xdc[\xf7\xc5\xfb?\xbezaz\\\xb9"
>>> bip32.get_xpub_from_path([HARDENED_INDEX, 42])
b"\x04\x88\xb2\x1e\x02\x11\xd4\xbb(\x00\x00\x00*\xaf?\xc3\x1bb)\x1d\x9e$\x91\xda\xc2b\x8e\x1fm\x7f6\x8c(\x8e'2.\x99-\xf2\xa1\x83\xd7F\x18\x03bB\xb0\xe5\x0b\xb8$\x97\xf0\xf3\xe47\xea\xd6\xd4\xa0\xe3~-#\xbf\t\xf5\x19\xb7\xd1\x06b\xb0\xac\xc5\xd4"
# You can also use "h" or "H" to signal for hardened derivation
>>> bip32.get_xpub_from_path("m/0h/42")
b"\x04\x88\xb2\x1e\x02\x11\xd4\xbb(\x00\x00\x00*\xaf?\xc3\x1bb)\x1d\x9e$\x91\xda\xc2b\x8e\x1fm\x7f6\x8c(\x8e'2.\x99-\xf2\xa1\x83\xd7F\x18\x03bB\xb0\xe5\x0b\xb8$\x97\xf0\xf3\xe47\xea\xd6\xd4\xa0\xe3~-#\xbf\t\xf5\x19\xb7\xd1\x06b\xb0\xac\xc5\xd4"
# You can use pubkey-only derivation
>>> bip32 = BIP32.from_xpub(base58.b58decode_check("xpub6AKC3u8URPxDojLnFtNdEPFkNsXxHfgRhySvVfEJy9SVvQAn14XQjAoFY48mpjgutJNfA54GbYYRpR26tFEJHTHhfiiZZ2wdBBzydVp12yU"))
>>> bip32.get_xpub_from_path([42, 43])
b'\x04\x88\xb2\x1e\x04\xf4p\xd4>\x00\x00\x00+h\xcf\xc2\xd1\xbe\x0c\\-:\x9fpDy\\x\xd5E\xc1\x988\xb1\xe2X\xd1\xba\xb1\xeac\x96\xb04\x8f\x02\xaf?<\xbe>\x92\xcc\xc1fq~\xa9\xcd\xcb\x10\xd5\x15]K\xd6\x10+\xdb\xa8\xb4\xedo\xd2hc\xf9x'
>>> bip32.get_xpub_from_path("m/42/43")
b'\x04\x88\xb2\x1e\x04\xf4p\xd4>\x00\x00\x00+h\xcf\xc2\xd1\xbe\x0c\\-:\x9fpDy\\x\xd5E\xc1\x988\xb1\xe2X\xd1\xba\xb1\xeac\x96\xb04\x8f\x02\xaf?<\xbe>\x92\xcc\xc1fq~\xa9\xcd\xcb\x10\xd5\x15]K\xd6\x10+\xdb\xa8\xb4\xedo\xd2hc\xf9x'
>>> bip32.get_pubkey_from_path("m/1/1/1/1/1/1/1/1/1/1/1")
b'\x02\x0c\xac\n\xa8\x06\x96C\x8e\x9b\xcf\x83]\x0c\rCm\x06\x1c\xe9T\xealo\xa2\xdf\x195\xebZ\x9b\xb8\x9e'

安装

pip install hdwallets

接口

以下所有公钥都是压缩的。

以下所有 path 都是表示每个深度的密钥索引的整数列表。

BIP32

from_seed(seed)

staticmethod

从原始种子(作为 bytes)实例化。请参阅 bip-0032的主密钥生成

from_xpriv(xpriv)

staticmethod

使用编码的序列化扩展私钥(作为 str)作为主密钥实例化。

from_xpub(xpub)

staticmethod

使用编码的序列化扩展公钥(作为 str)作为主密钥实例化。

您只能导出未硬编码的公钥。

get_extended_privkey_from_path(path)

返回指向路径的私钥的 (chaincode (bytes), privkey (bytes))

get_privkey_from_path(path)

返回指向路径的私钥的 privkey (bytes)

get_extended_pubkey_from_path(path)

返回指向路径的公钥的 (chaincode (bytes), pubkey (bytes))

注意,如果路径不包含索引 >= HARDENED_INDEX,则不需要提供主私钥。

get_pubkey_from_path(path)

返回指向路径的公钥的 pubkey (bytes)

注意,如果路径不包含索引 >= HARDENED_INDEX,则不需要提供主私钥。

get_xpriv_from_path(path)

返回指向给定路径的序列化和编码的扩展私钥的 xpriv (str)

get_xpub_from_path(path)

返回指向给定路径的序列化和编码的扩展公钥的 xpub (str)

注意,如果路径不包含索引 >= HARDENED_INDEX,则不需要提供主私钥。

get_master_xpriv(path)

相当于 get_xpriv_from_path([])

get_master_xpub(path)

相当于 get_xpub_from_path([])

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

hdwallets-0.1.2.tar.gz (10.4 kB 查看散列)

上传时间

构建分发

hdwallets-0.1.2-py3-none-any.whl (8.6 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面