比特币高清纸质钱包实现。

btc-hd-wallet的Python项目详细描述


安装

  1. 为您的操作系统安装python3.6或更高版本
  2. install吉特
  3. 安装btc_hd_钱包:

a.)通过皮皮 pip install btc_hd_wallet

b.)来源

# clone btc-hd-wallet repository
git clone https://github.com/scgbckbone/btc-hd-wallet.git
# change directory to project rootcd btc-hd-wallet
# create virtual environment
python3 -m venv btc-hd-wallet
# activate virtual environmentsource btc-hd-wallet/bin/activate
# upgrade pip, setuptools and wheel (optional)
pip install -U pip setuptools wheel
# install project
python setup.py install
# run unittests (optional)
python setup.py test

基本钱包

^{pr2}$

纸质钱包

frombtc_hd_walletimportPaperWalletw=PaperWallet.new_wallet()# to display paper wallet in consolew.pprint()# get python dictionary repsresentation of paper walltejson_dct=w.generate()# get json serialized string representation of paper walletjson_str=w.json(indent=4)# wasabi import file format (inspired by ColdCard)file_path="/home/john/wasabi0.json"w.export_wasabi(file_path=file_path)

私钥和公钥

frombtc_hd_walletimportPrivateKey,PublicKey# initialize private key object from secret exponentsk=PrivateKey(sec_exp=61513215313213513843213)# from wif formatsk=PrivateKey.from_wif("KxNH4NuQoDJjA9LwvHXn5KBTDPSG9YeoA7RBed2LwLRNqd1Tc4Wv")# from byte sequencesk=PrivateKey.parse(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15&X\xc0\xe3\xee\\\r$bU\x18')# secret exponentsecret_exponent=sk.sec_exp# to wifwif_str=sk.wif(testnet=False)# to bytessk_bytes=bytes(sk)# to access corresponding public keypk=sk.K# RIPEMD160(SHA256) of public keyh160=pk.h160()# p2pkh testnet addressp2pkh=pk.address(addr_type="p2pkh",testnet=True)# p2wpkh address (p2wpkh is default 'addr_type')p2wpkh=pk.address()# SEC encoding (bytes)sec=pk.sec()# elliptic curve pointpoint=pk.point# public key can also be parsed from secsec_str="030975d7fc3e27bcb3d37dd83a84f5ae2f48cec392e781e35ec849142bcc6e2cce"pk=PublicKey.parse(bytes.fromhex(sec_str))# or from ecdsa Point or PointJacobipk=PublicKey.from_point(point)

Bip39相关方法

frombtc_hd_walletimport(bip39_seed_from_mnemonic,mnemonic_from_entropy_bits,mnemonic_from_entropy)# mnemonic from number of entropy bits (allowed entropy bits 128,160,192,224,256)menmonic=mnemonic_from_entropy_bits(entropy_bits=256)# mnemonic from entropy hexmnemonic=mnemonic_from_entropy("0a84d45bb74a0d80c144f9ad765c3b9edc40a8dbb5c053c0930ef040992036d2")# create bip39 seed from mnemonicseed=bip39_seed_from_mnemonic(mnemonic=mnemonic)# or with optional passwordseed=bip39_seed_from_mnemonic(mnemonic=mnemonic,password="secret")

脚本

fromioimportBytesIOfrombtc_hd_walletimportBaseWalletfrombtc_hd_walletimport(Script,p2wsh_script,p2wpkh_script,p2sh_script,p2pkh_script)# you can parse script hexscript_hex="1976a9148ca70d5eda840e9fb5d38234ae948dfad1d266d788ac"script=Script.parse(BytesIO(bytes.fromhex(script_hex)))str(script)>OP_DUPOP_HASH1608ca70d5eda840e9fb5d38234ae948dfad1d266d7OP_EQUALVERIFYOP_CHECKSIG# script can be raw serializedscript.raw_serialize()# or it can be serialized with length prependedscript.serialize()# or creating script pubkeys from walletw=BaseWallet.new_wallet()# derive some child node to use (I'll go with bip84)node=w.by_path("m/84'/0'/100'/0/0")hash160_pub_key=node.public_key.h160()script=p2wpkh_script(hash160_pub_key)str(script)>OP_08ca70d5eda840e9fb5d38234ae948dfad1d266d7

Bip85型

frombtc_hd_walletimportBIP85DeterministicEntropyxprv="xprv9s21ZrQH143K2n9ryKS5EXxvQaNSbCxrVHSUigxG9ywY6GVQYsrk6n8e9j6m9z9LvBULFnSyjcLFxbG6WtXoeYRF19f1FY23nni39XSLPWm"# create new deterministic entropy object from extended private keybip85=BIP85DeterministicEntropy.from_xprv(xprv=xprv)# bip39 mnemonicbip85.bip39_mnemonic(word_count=24,index=0)>liftboostvaguevanishoccurstampeagletwicekitepausesunnyexecutedefygrocerymercyassistvolumeventuresubjectanalystfiscallectureconnectbunkerbip85.bip39_mnemonic(word_count=12,index=0)>goodbravehuntlicensedeliverconductmoredutchdonkeygreenskillgaugebip85.bip39_mnemonic(word_count=15,index=1)>vesselnervebuzzwifegoodskisockwalnutcrewtowardteamvastdynamicparadecandy# wallet import format (WIF)bip85.wif(index=0)>'KyxeP1pijLmtKZv8ry7d3tbNsq3XDeGgN99Mqi2Gn2Kx6WwPr2wC'bip85.wif(index=1)>'KxsrnifkxsZTBeP52VxHzZGawyUSULBi1trHrJhU7ndQxkTXguFJ'# extended private key (XPRV)bip85.xprv(index=0)>'xprv9s21ZrQH143K2SrZ37WGmQ4TcqHbcAxy7tfuoVNZBxnd7huX6XuD2UZBUuXVfrZjjtw5X3B9JgUvoVegVALTeTXWsiUSK9F4FWXFZLfZVzV'bip85.xprv(index=1)>'xprv9s21ZrQH143K4RPx2iS7FecFHCUiC4CA2x4PqY6rtqjgqpxqWNcTxK88oRDyiZf8WiTLA6GWwR7BSoFkjjNSEx4wAgGq7nnxukd2FJP7AKH'# hexbip85.hex(index=0)>'78ebebfc701429f60ab4540168950c8fc9db5d275324545e7512f9e23b1fcd42'bip85.hex(num_bytes=64,index=0)>'2205163efb2ae4e78609b4a7410e9a4856f673b04dd0af7ce9851a9f2f7883c854f76a3e1cf639c217adde4956604dcdd853104dfcb93751856e3e13dcb9ab35'# bip85 is also available in BaseWallet class as its attributefrombtc_hd_wallet.base_walletimportBaseWalletw=BaseWallet.new_wallet()type(w.bip85)==BIP85DeterministicEntropy>True

文件

Sphinx文档位于docs子目录中。 从那里运行make html从docstring创建html文档。 文档html可在docs/build/html/index.html中找到

从属关系:狮身人面像

pip install Sphinx

路线图:

这个项目正在进行中

  1. 支持bip32、bip44、bip49、bip84、slip132(P2SH中的多签名P2WSH、多签名P2WSH)的基本高清纸质钱包生成器
  2. 储存
  3. 网络通话
  4. (待定)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Cassandra DB的javascript查询结果   java定时器任务调度   java在TLS上实现LDAP   为什么在浏览器中滚动会使java小程序闪烁?   未使用轮询器和serviceactivator提取java pubsub消息   java风暴多线程问题   java计算平均成绩   java将字符串添加到另一个类的数组列表中   文件Java路径如何转换为例如InputStream   java更改JComboBox的字体颜色   java inthttp:具有可轮询请求通道的inboundgateway   使用继承在Java中运行swing Base和扩展windows   java ivysettings。xml:添加本地maven路径   java如何将参数自定义视图传递给activity类   java延迟加载无法在Hibernate中使用一对一映射   当文件以“file:/”开头时,Java无法识别该文件   需要java正则表达式帮助,使用反斜杠   片段中的java GWT参数