python生成比特币bitcoin私钥公钥地址
BTC突破70500美元,续刷历史新高之际,俺是即没钱,也没资格交易;更不想高位接盘。只好写个代码吧:
from bitcoin import * # 私钥 my_private_key = random_key() # 公钥 my_public_key = privtopub(my_private_key) # 地址 my_bitcoin_address = pubtoaddr(my_public_key) print(f"Private Key: {my_private_key}") print(f"Public Key: {my_public_key}") print(f"Address: {my_bitcoin_address}")
试了几次,上述代码生成的地址都是以 1 开头的。(补充:要得到类似的私钥和地址,也可以直接从 https://www.bitaddress.org/ 上生成,并且这个网页是单文件,可以另存为本地文件,然后离线使用)
那么要生成以3 开头 或以bc1开头的地址怎么办呢?
文心一言提示用bit库,但给出的代码却不能运行
参考bit库文档写出如下代码,生成了以3开头的地址:
from bit import Key # 私钥 my_private_key = Key() # 公钥 #You will also never use this directly. #This value is only used internally to derive your address and #is needed in the construction of every transaction. my_public_key = my_private_key.public_key # 地址 # my_bitcoin_address = my_private_key.address my_bitcoin_address = my_private_key.segwit_address print(f"Private Key: {my_private_key}") print(f"Public Key: {my_public_key}") print(f"Address: {my_bitcoin_address}")
另外,要生成 多重签名的隔离见证地址,文心一言提示用 bitcoinlib库,然而给出的代码仍不可用
于是在pypi上搜索一下,找到比较新的库 bitcoin-utils https://pypi.org/project/bitcoin-utils/
再找了一个 https://github.hscsec.cn/ ,从上面搜索 bitcoin-utils 并下载BitcoinUtilities.pdf 但是English挺费劲,
参考Sample,以下代码生成的还是1开头的地址:
# Copyright (C) 2018-2022 The python-bitcoin-utils developers # # This file is part of python-bitcoin-utils # # It is subject to the license terms in the LICENSE file found in the top-level # directory of this distribution. # # No part of python-bitcoin-utils, including this file, may be copied, # modified, propagated, or distributed except according to the terms contained # in the LICENSE file. from bitcoinutils.setup import setup from bitcoinutils.keys import PrivateKey, PublicKey def main(): # always remember to setup the network setup("mainnet") # create a private key (deterministically) priv = PrivateKey(secret_exponent=1) # compressed is the default print("\nPrivate key WIF:", priv.to_wif(compressed=True)) # could also instantiate from existing WIF key # priv = PrivateKey.from_wif('KwDiBf89qGgbjEhKnhxjUh7LrciVRzI3qYjgd9m7Rfu73SvHnOwn') # get the public key pub = priv.get_public_key() # compressed is the default print("Public key:", pub.to_hex(compressed=True)) # get address from public key address = pub.get_address() # print the address and hash160 - default is compressed address print("Address:", address.to_string()) print("Hash160:", address.to_hash160()) print("\n--------------------------------------\n") # sign a message with the private key and verify it message = "The test!" signature = priv.sign_message(message) assert signature is not None print("The message to sign:", message) print("The signature is:", signature) if PublicKey.verify_message(address.to_string(), signature, message): print("The signature is valid!") else: print("The signature is NOT valid!") if __name__ == "__main__": main()
引用一下别人的内容:===============================
Mainnet, testnet, regtest——它们是啥意思?
Mainnet(主网)是作为官方版本使用的网络,所有真实的交易都发生在这个网络上
Testnet(测试网),一个与主网具有几乎相同规则的网络(一些操作码在mainnet上是禁止的,而在Testnet上取消了这个限制)。
Regtest是一个私有的区块链,它具有与testnet相同的规则和地址格式,但是没有要连接到的全局p2p网络。
由于mainnet币有价值,而testnet/regtest币没有价值,所以它们由不同的前缀来区分。Mainnet地址以“1”、“3”或“bc1”开头,testnet/regtest地址以“m”、“n”、“2”或“tb1”开头。记住,testnet/regtest地址没有值,所以了解它们之间的区别很重要!钱包可以检测出其中的差别,但也有一些情况下,人们也会被人用testnet的币忽悠!
我们将使用regtest,因为我们可以轻松地创建自己的区块链,并且可以使用一个方便的命令在不挖掘硬件的情况下挖掘块。
图形化的比特币核心客户端Bitcoin-qt也能在视觉上区分不同的网络,以帮助您识别其运行的模式。当您第一次安装Bitcoin -qt时,它将运行在使用熟悉的橙色比特币符号的mainnet上。Testnet使用绿色,regtest使用蓝色。
=============更多内容请参考原文 https://www.elecfans.com/blockchain/894596.html ======================
试着生成取bc1开头的地址,将上面代码中设为 mainnet ,即: setup("mainnet") ,而不是 Testnet 或 Regtest
然后,将 address = pub.get_address() 这句改为:address = pub.get_segwit_address()
可以生成bc1开头的地址了,但代码中address.to_hash160()这句就不能用了,提示: AttributeError: 'P2wpkhAddress' object has no attribute 'to_hash160'
同时运行结果也变为:The signature is NOT valid!
参考:https://blog.csdn.net/iCloudEnd/article/details/93675389
https://blog.csdn.net/wypeng2010/article/details/89332833
https://pypi.org/project/bit/
https://ofek.dev/bit/
https://www.elecfans.com/blockchain/894596.html
https://zhuanlan.zhihu.com/p/673293772
https://zhuanlan.zhihu.com/p/34085839
https://blog.csdn.net/vohyeah/article/details/80704478
https://www.blockchain.com/explorer/assets/BTC