为PolySwarm侧链构建和签署事务的库

polyswarm-transaction的Python项目详细描述


polyswarm事务

事务模块,用于为数据库支持的侧链生成、签名和验证事务

交易

结构

{"name":"<module>:<class>","from":"<public key checksum address>","data":{}}

事务由三部分组成:name、from和data

该名称定义要调用的事务。 服务器端可以使用它并验证它是否可以执行请求的事务。在

from字段是一个以太坊地址,它告诉我们消息是谁发送的。 这个地址是用签名确认的,所以我们可以绝对确定是谁发送了这笔交易。在

数据字段是传递给指定事务的参数。在

签名

为了与现有的ERC20令牌保持兼容,签名方案大量使用现有的web3工具。 密钥都是以太坊的公私secp256k1密钥对,它使用keccak作为散列函数。在

当我们准备签名时,我们将python字典输出为json字符串,并保存该字符串。 这个字符串允许我们确保在传输过程中维护订单,这在加载json时无法完成。 然后使用keccak对字符串进行哈希处理,用户的私钥可以对哈希消息进行签名。在

使用

这个库的主要用例是定义传输事务的协议。 通过简单地重写Transaction就可以构建任何容易符合标准的事务。在

默认情况下,已经定义了以下事务。在

  1. bounty.BountyTransaction
  2. bounty.AssertionTransaction
  3. bounty.VoteTransaction
  4. nectar.WithdrawalTransaction

还定义了一个transaction.CustomTransaction接受data_body 你可以手工制作测试。在

使用sign()方法,这些事务将转换为json字符串和签名。 此签名可以通过ecrecover上的ecrecover方法进行验证

生成事务

^{pr2}$

验证签名交易

frompolyswarmtransactionimportSignedTransactionfrompolyswarmtransaction.bountyimportBountyTransactionfromdjango.httpimportHttpResponsedefbounty_view():data=request.POST.dict()signed=SignedTransaction(**data)# Public key is verified during recoveryaddress=signed.ecrecover()try:bounty_transaction=signed.transaction()except(UnsupportedTransactionError,ValueError,ValidationError,WrongSignatureError,InvalidSignatureError):returnHttpResponse('',400)ifnotisinstance(bounty_transaction,BountyTransaction):returnHttpResponse('',400)do_work(address,bounty_transaction)

从CLI

出于测试目的,可以从命令行对任意JSON有效负载进行签名。 在签名之前,它们都将封装在CustomTransaction中。在

密码应通过-p/--password提供,或将在/dev/tty上请求

有效负载应该是JSON,您可以从STDIN管道发送它:

$echo'"DEADBEEF"'| python -m polyswarmtransaction /path/to/keyfile -p mypassword
{"raw_transaction": "{\"name\": \"polyswarmtransaction.transaction:CustomTransaction\", \"from\": \"0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8\", \"data\": \"DEADBEEF\"}", "signature": "0x182195b3f7734ff2bb54545f29c3a961885c95bed4b989d7e9866dacd07090f258cffe8b9e39fb97435cd10d0f4131e7de59b76fce3ce7e3aa70874da39c949600"}

负载也可以通过--payload选项从文件中提供。 文件仍然需要包含有效的JSON。在

$ python -m polyswarmtransaction /path/to/keyfile --payload path/to/payload.json -p mypassword
{"raw_transaction": "{\"name\": \"polyswarmtransaction.transaction:CustomTransaction\", \"from\": \"0x05328f171b8c1463eaFDACCA478D9EE6a1d923F8\", \"data\": ... \"}", "signature": "0x6ff71bfc58aa72bf4c8b0388c44d5151456a52eb1f1bc6f4825034cb96d0f2a90aa10afb3dd7aada15799bfb7a25f342e3e04ec02830807fde9222ad385ef6e700"}

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

推荐PyPI第三方库


热门话题
JFrame中的Java多线程   java Servlet异常映射   java无法从输出流读取   swing Java带来的小程序GUI问题   java什么原因导致错误“'void'类型此处不允许”以及如何修复它?   Java选择器select(长)与selectNow的区别   java自定义arraylist<mygames>获得不同   java Icepdf注释让页面消失   java反向整数数组   java I在生成同步“无法解析配置的所有依赖项”时遇到此错误:app:debugRuntimeClasspath   多个虚拟机上的java线程访问单个DB实例上的表,有时会导致性能低下和异常   swing更改Java中的默认按钮,使其看起来“更好”   java慢速MQ主题订阅。并行化不能提高性能   java运行Boggle Solver需要一个多小时。我的代码怎么了?   数据库中的java循环与应用程序中的java循环   正则表达式匹配${123…456}并在Java中提取2个数字?   java如何制作我们软件的试用版   Java内存参数计算   从另一个类调用方法时出现java问题