blockchain - 超级账本锯齿提交交易错误“试图获取未经授权的地址”,状态无效
问题描述
在这里提出了同样的问题-> Sawtooth 交易错误:“试图设置未经授权的地址”,我尝试了这个答案。但是那个答案对我不起作用。
我正在使用 hyperleder 锯齿 docker compose 来启动我的服务。我在 hyperledger-sawtooth -> https://sawtooth.hyperledger.org/docs/core/releases/1.0/_autogen/sdk_submit_tutorial_js.html#create-the-transaction-header提供的本文档中做的事情完全相同
我的有效载荷是
const payload = {
Verb: 'set',
Name: 'test',
Value: 32
}
我的交易标头是
const transactionHeaderBytes = protobuf.TransactionHeader.encode({
familyName: 'intkey',
familyVersion: '1.0',
inputs: ['1cf1266e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7'],
outputs: ['1cf1266e282c41be5e4254d8820772c5518a2c5a8c0c7f7eda19594a7eb539453e1ed7'],
nonce: (Math.random() * 10 ** 18).toString(36),
signerPublicKey: signer.getPublicKey().asHex(),
batcherPublicKey: signer.getPublicKey().asHex(),
dependencies: [],
payloadSha512: createHash('sha512').update(payloadBytes).digest('hex')
}).finish()
然后我做了与文档中相同的过程,当我检查该交易的状态时,它给了我以下响应。
然后我检查了锯齿服务器的日志,它看起来像下面这样。
然后在这里看到相同问题的答案(锯齿交易错误:“试图设置未经授权的地址”inputs
)后,我尝试outputs
将数组作为空数组,如 []。但反应是一样的。
我的 docker-compose 文件包含以下容器
解决方案
将 [] 之类的空数组设置为inputs
andoutputs
不是一种选择。这意味着您不允许通过事务处理器读取和写入任何地址。inputs
但是,您可以在和中设置部分地址outputs
。例如,您可以1cf126
同时设置inputs
andoutputs
并且您的代码将开始工作。
设置部分地址将使您的 TP 能够读取和/或写入您的地址指向的子树下的任何叶节点。请参阅https://sawtooth.hyperledger.org/docs/core/releases/1.0/architecture/global_state.html?#radix-merkle-tree-overview部分以了解其工作原理。
文档中给出的示例是针对intkey
交易族的,输入是
const payload = {
Verb: 'set',
Name: 'foo',
Value: 32
}
但是,如果您想设置test
而不是foo
then ,则必须计算它的地址并将其放入inputs
and中outputs
。注意地址计算是您在客户端和特定交易系列的 TP 之间保持一致的东西。它的方法intkey
是连接以下两个
- Sha512(
intkey
) - 十六进制表示的前 6 个字符 - Sha512(
foo
) - 来自第 64 个索引的其余字符
为foo
.
在test
这种情况下,将串联
- Sha512(
intkey
) - 十六进制表示的前 6 个字符 - Sha512(
test
) - 来自第 64 个索引的其余字符
希望这可以澄清。另外,请参考上面的 Merkle-Radix 定义,它有关于如何计算地址的详细信息。这取决于 Transaction Family 的实施者。
推荐阅读
- python-3.x - Poetry install 与来自 git 的软件包一起崩溃
- javascript - 关于 Ember 中的自定义构建
- node.js - 将 mongoose.Types.ObjectId() 与多台缩放机器一起使用(重复问题?)
- python-3.x - python3.3 上的烧瓶:“TypeError:AST 标识符必须是 str 类型”
- swiftui - 使用锚点定位视图
- python-3.x - 如何在不使用 Tkinter 删除任务栏中的图标的情况下摆脱标题栏?
- python - tkinter 中的下一个和后退按钮
- javascript - 如何获取事件处理程序的返回值?
- java - Websocket颤振连接
- rest - 在使用 REST 模板 Spring Boot 时在响应中处理法语字符