超级账本锯齿数据渗透

时间:2020-01-11 23:15:25

标签: blockchain hyperledger hyperledger-sawtooth

所以我一直在为下一个项目研究Hyperledger Sawtooth,我想问一下是否有可能基于区块链的状态创建权限。例如,对于交易族IntegerKey,我只希望一个特定的用户更改变量 X 的值。

1 个答案:

答案 0 :(得分:2)

有可能。 IntegerKey的事务处理程序中的智能合约逻辑应验证特定用户(您打算)是否正在更新变量X的值。

开箱即用的identity-tp将帮助您限制对可以执行IntegerKey事务的客户端的访问。此外,它还将帮助您限制仅在网络上运行允许的事务族。但是,当涉及到特定变量时,则取决于您决定以全局状态存储值的方式。一旦决定了在全局状态下存储变量的方式,就可以选择使用验证逻辑来​​检查交易是否确实由合适的人发送。

您可以利用TpProcessRequest中发送的事务标头。这就是您在事务处理程序的apply()方法中看到的内容。您可以从交易标头中获得批处理者和交易签名者的公钥信息。

以下说明了在Go中执行此操作的方法:

对于Go SDK,https://github.com/hyperledger/sawtooth-sdk-go/blob/727bba445a90dbcc5eb730fb20bf85084874d090/processor/handler.go#L65是将上下文传递到事务处理程序的apply()方法的方式。请注意请求https://github.com/hyperledger/sawtooth-sdk-go/blob/8422a911dbc13e735f3acbcc593914521468697d/protos/processor.proto#L82中的标头参数。请注意签名者的公共密钥信息https://github.com/hyperledger/sawtooth-sdk-go/blob/8422a911dbc13e735f3acbcc593914521468697d/protos/transaction.proto#L54

假设您使用settings-tp,并存储自己的设置密钥,以了解每个值的允许用户。如果是变量X,则类似于settings.variable.X=[List of <PUBLIC_KEY_OF_USER_INTENDED_FOR_X>]。在事务处理程序中,您可以查看是否正在更新变量X。如果是这样,则读取您之前存储的设置密钥。检查公钥是否与交易请求标头中的公钥匹配。