区块池区块链的库。
bpl-lib的Python项目详细描述
bpl库
A simple Python package for the Blockpool Blockchain
这是一个易于使用的python包,用于与区块池区块链交互。这个包提供了BPL-JS提供的大部分功能
功能
地址
- [X]来自_secret
- [X]来自公共密钥
- []来自_private_key
- [X]验证
网络
- [X]使用
- [X]使用自定义
- [X]开始新纪元
- [X]获取U版本
交易实体
- [X]生成
- [X]获取ID
- [X]获取哈希值
- [X]符号
- [X]第二个符号
- [X]到U字节
- [X]到“dict”
- [X]来自“dict”
- [X]确认
- [X]秒确认
交易类型
- [X]转账交易
- [X]投票事务
- [X]二次签名交易
- [X]多重签名交易
- [X]委托交易
- [X]IPFS事务
时间
- [X]获取时间
- [X]获取实时信息
- [X]获取插槽编号
- [X]获取插槽时间
安装
python -m pip install --no-cache-dir --index-url https://test.pypi.org/simple/ bpl-lib
注意:包已上载到test.pypi。因此,某些依赖项可能无法安装(例如Base58)。如果发生这种情况,请使用:
pip install base58 pip install ecdsa
然后
python -m pip install --no-cache-dir --index-url https://test.pypi.org/simple/ bpl-lib
用法
bpl库中有6个子包:
bpl_lib.address
bpl_lib.crypto
bpl_lib.helpers
bpl_lib.network
bpl_lib.time
bpl_lib.transactions
地址
生成地址
目前有两种生成地址的方法:
from_public_key
from_secret
注意:地址依赖于网络的version
,因此要生成地址,必须首先选择一个网络(请参阅网络部分)。
来自公共密钥
从给定的公钥生成唯一的块池地址:
frombpl_lib.addressimportAddressfrombpl_lib.networkimportNetworkNetwork.use("mainnet")public_key="03aacac6c98daaf3d433fe90e9295ce380916946f850bcdc6f6880ae6503ca1e40"address=Address.from_public_key(public_key)print(address)
打印:
b'AdzCBJt2F2Q2RYL7vnp96QhTeGdDZNZGeJ'
来自“秘密”
要从给定的机密密码短语生成唯一的块池地址,请执行以下操作:
frombpl_lib.addressimportAddressfrombpl_lib.networkimportNetworkNetwork.use("mainnet")address=Address.from_secret("secret passphrase")print(address)
打印:
b'AdzCBJt2F2Q2RYL7vnp96QhTeGdDZNZGeJ'
验证
注意:地址依赖于网络的version
,因此要验证地址,必须首先选择一个网络(请参阅网络部分)。
frombpl_lib.addressimportAddressfrombpl_lib.networkimportNetworkNetwork.use("mainnet")address="AdzCBJt2F2Q2RYL7vnp96QhTeGdDZNZGeJ"is_valid=Address.validate(address)print(is_valid)
打印:
True
密码学
生成键
frombpl_lib.cryptoimportKeyskeys=Keys("secret passphrase").to_dict()print(keys)
打印:
{"public_key":"03aacac6c98daaf3d433fe90e9295ce380916946f850bcdc6f6880ae6503ca1e40","private_key":"b6a2b12beb4179538bfb42423cce2e98ccdebcc684145ba977f2f80630eb278e"}
签名
frombpl_lib.cryptoimportSignature,sha256message=sha256("message".encode())signature=Signature("secret passphrase").sign(message)["signature"]print(signature)
打印:
"30440220622b8edf8fc5cf4522a13489a9b710b1bf94b6e37722d2278a0069ae3c67088b0220206e202dcad8e4ee2100716ce0d2c7d08a685f983c21dfbccdd6ecec50268b6f"
哈希
crypto
子包还提供了常见的散列算法,如:
sha1(bytes)
sha256(bytes)
ripemd160(bytes)
hash160(bytes)
hash256(bytes)
助手
helpers包包含有用的内容和类:
TRANSACTION_TYPE
-包含所有6个事务类型的枚举类TRANSACTION_FEES
-交易费用取决于TRANSACTION_TYPE
NETWORKS_DB
-网络数据库文件位置
网络
网络子包是网络配置的接口。networks子包使用本地sqlite数据库,该数据库存储网络标识符、开始纪元时间和网络版本。这些设置/字段是地址和时间戳等计算所必需的。
使用网络
当前有两种方法允许客户端使用网络:
use
use_custom
使用
use
方法需要网络identifier
,并查询本地网络数据库以获取指定的配置。然后,该方法将配置存储在内存中。
frombpl_lib.networkimportNetworkNetwork.use("mainnet")print(Network.get_begin_epoch())print(Network.get_version())
打印:
"2017-03-21 13:00:00"23
使用自定义
use_custom
方法需要一个网络identifier
、begin_epoch
和version
。方法首先将此自定义配置插入到本地网络数据库中,这将允许您在其他应用程序中使用自定义配置。自动对焦然后该方法将自定义配置存储在内存中。
注意:identifier
用作数据库中的主键,这意味着网络的标识符必须是唯一的。如果标识符不唯一,则引发BPLNetworkException
。
fromdatetimeimportdatetimefrombpl_lib.networkimportNetworkidentifier="test_use_custom_method"begin_epoch=datetime.strptime("2018-07-25 15:30:00","%Y-%m-%d %H:%M:%S")version=0x19Network.use_custom(identifier,begin_epoch,version)print(Network.get_begin_epoch())print(Network.get_version())
打印:
"2018-07-25 15:30:00"25
访问当前配置
将网络配置加载到内存中后,可以通过Network
接口访问两个设置:
begin_epoch
version
访问开始时间
要访问begin_epoch
,必须使用Network.get_begin_epoch
方法。
frombpl_lib.networkimportNetworkNetwork.use("testnet")print(Network.get_begin_epoch())
打印:
"2017-03-21 13:00:00"
访问版本
要访问version
,必须使用Network.get_version
方法。
frombpl_lib.networkimportNetworkNetwork.use("testnet")print(Network.get_version())
打印:
82
时间
时间子包包含4种方法:
get_time
-返回区块链的时间戳get_real_time
-将区块链时间戳转换为日期时间get_slot_number
-将区块链时间戳转换为槽号get_slot_time
-将槽号转换为区块链时间戳
获取时间
get_time
方法将DateTime对象转换为区块链时间戳。该方法有一个可选参数time
。如果未提供time
,则将使用当前时间。(请参见代码)
frombpl_lib.timeimportTimeprint(Time.get_time())
打印:
42429391
获取实时信息
get_real_time
方法将区块链时间戳转换为DateTime对象。该方法有一个可选参数timestamp
。如果未提供timestamp
,则将使用当前时间戳。(请参见代码)
frombpl_lib.timeimportTimeprint(Time.get_real_time(42429391))
打印:
"2018-07-25 14:56:31"
获取插槽号
get_slot_number
方法将区块链时间戳转换为槽号。该方法有一个可选参数timestamp
。如果未提供timestamp
,则将使用当前时间戳。(请参见代码)
frombpl_lib.timeimportTimeprint(Time.get_slot_number())
打印:
5303721
获取插槽时间
get_slot_time
方法将时隙号转换为区块链时间戳。该方法有一个可选参数slot_number
。如果未提供slot_number
,则将使用当前插槽号。(请参见代码)
frombpl_lib.timeimportTimeprint(Time.get_slot_time(5303721))
打印:
42429768
交易
每个事务都是从事务实体构建的(请参见功能)。目前有两种构建bpl事务的方法:
Transaction.generate
Transaction.from_dict
使用generate生成事务
Transaction.generate
自动计算事务的时间戳,因此在生成事务之前必须选择网络。(请参见网络)
frombpl_lib.transactions.TransferimportTransferfrombpl_lib.networkimportNetworkNetwork.use("mainnet")transaction=Transfer.generate("BCU4rocsgw2GNihtnzAgFzRfx7XebZRpRi",1000,"passphrase")print(transaction.to_dict())
打印:
{'recipientId':'BCU4rocsgw2GNihtnzAgFzRfx7XebZRpRi','senderPublicKey':'02e012f0a7cac12a74bdc17d844cbc9f637177b470019c32a53cef94c7a56e2ea9','type':"<TRANSACTION_TYPE.TRANSFER: 0>",'id':'9bfa3aee9ed984f856c6268b0b03dd908d3541c4c94f614fdae5c66c587560b2','asset':{},'venderField':None,'fee':10000000,'signature':'3045022100faf1e2bb7388caf0ba4ca26d6bddf9ea39197365d369f63efe271ad183745a77022047865c97baa925369ee099594010f7e7912772febbb83bcb9512f9b2759ac97d','timestamp':42430405,'amount':1000,'signSignature':None}
要查看如何构建每个事务,请参阅代码中的文档。
安全或错误
如果发现此包中存在安全漏洞或错误,请通过电子邮件me或在BPL discord上向我发送消息。