首页 > 解决方案 > Hyperledger Sawtooth 数据权限

问题描述

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

标签: blockchainhyperledgerhyperledger-sawtooth

解决方案


有可能的。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 是否正在更新。如果是这样,则读取您之前存储的设置密钥。检查公钥是否与交易请求标头中的公钥匹配。


推荐阅读