为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
就可以构建任何容易符合标准的事务。在
默认情况下,已经定义了以下事务。在
bounty.BountyTransaction
bounty.AssertionTransaction
bounty.VoteTransaction
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"}
- 项目
标签: