blockchain - Hyperledger Sawtooth 数据权限
问题描述
所以我一直在为我的下一个项目研究 Hyperledger Sawtooth,我想问问是否可以根据区块链的状态创建权限。例如,对于 Transaction Family IntegerKey,我只希望一个特定的用户更改变量X的值。
解决方案
有可能的。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 是否正在更新。如果是这样,则读取您之前存储的设置密钥。检查公钥是否与交易请求标头中的公钥匹配。
推荐阅读
- javascript - 用 Cypress 验证类似的 JSON 结构?
- arrays - C中指针数组的重新分配
- c++ - C ++ getpid()与系统调用(39)?
- python - 使用 pgp 私钥解密音频文件 | Python
- maven - 无法从 gradle build 中选择 maven 本地 maven 存储库文件
- c++ - OpenGL 对象没有正确缩放
- c# - 当该方法没有符号信息时,如何使用 Roslyn 获取被调用方法的包含命名空间?
- android - 构建 APK 时出错:算法 HmacPBESHA256 不可用
- azure - 在运行 nUnitTest 的 Azure Dev Ops 上 Vs 测试失败并出现 3 个错误
- c++ - 如何在 Qt 项目文件中定义可重用的文件夹路径?