区块池区块链的库。

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方法需要一个网络identifierbegin_epochversion。方法首先将此自定义配置插入到本地网络数据库中,这将允许您在其他应用程序中使用自定义配置。自动对焦然后该方法将自定义配置存储在内存中。

注意: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上向我发送消息。


学分

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

推荐PyPI第三方库


热门话题
当JUnit测试失败时,java会显示一条用户友好的消息   java着色器不渲染到窗口   java CXF DOSGi正在忽略注释   我想把这行JAVA改成kotlin   java如果我想在ArrayQue中提供null,我该怎么做   java如何在Springboot中为线程调度命名   java如何将使用者<String>传递给方法   java如何在GWT中检查正则表达式的时间戳?   将Mongodb与Java连接时,在类路径上找不到SLF4J   使用Java创建数组数组   java Hibernate获取对象并另存为外键   java应用程序在打开活动时崩溃   java如何从AlarmManager BroadcastReceiver调用MainActivity方法?   Executor服务中的java不确定任务   JavaSpringMVC本地主机工作应用程序在Heroku部署后返回错误404   当精灵与加速计一起旋转时,java将精灵弹离墙壁   Java:可以创建一个带有“变量”字段的类吗?   java OpenGL空指针异常   使用servlet登录facebook时出现java错误   Android Studio中的java Junit