分类帐锯齿提交事务错误“试图获取未经授权的地址”,状态无效

问题描述 投票:1回答:1

在这里提出了相同的问题-> Sawtooth Transaction error: "Tried to set unauthorized address",我尝试了该答案。但是这个答案对我不起作用。

我正在使用Hyperleder锯齿docker来启动我的服务。我在本文档中所做的完全相同,该文档由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()

然后,我执行了与文档中相同的过程,当我检查该交易的状态时,将得到以下响应。

enter image description here

然后我检查了锯齿服务器的日志,如下所示。

enter image description here

然后在此处(Sawtooth Transaction error: "Tried to set unauthorized address")看到相同问题的答案后,我尝试将inputsoutputs数组作为空数组,例如[]。但是回应是一样的。

我的docker-compose文件包含以下容器

enter image description here

blockchain hyperledger hyperledger-sawtooth
1个回答
1
投票

不能将[[]设置为inputsoutputs等空数组。这意味着您不允许通过事务处理器进行任何地址的读写操作。但是,您可以在inputsoutputs中设置部分地址。例如,您可以同时为1cf126inputs设置outputs,您的代码将开始工作。

设置部分地址将使您的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,则必须计算其地址并将其放置在inputsoutputs中。注释地址的计算可以使客户和特定交易族的TP保持一致。 intkey的实现方式是将以下两个连接起来

  1. Sha512(intkey)-十六进制表示形式的前6个字符
  2. Sha512(foo)-第64个索引中的其余字符

对于foo

参考:https://github.com/hyperledger/sawtooth-sdk-rust/blob/190861a14046122ce6ecd684908c3d7a877e26ca/examples/intkey_rust/src/handler.rs#L175

[如果是test,将是]的串联>

  1. Sha512(intkey)-十六进制表示形式的前6个字符
  2. Sha512(test)-第64个索引中的其余字符
  3. 希望这可以澄清。另外,请参考上面的Merkle-Radix定义,其中包含有关如何计算地址的详细信息。它取决于交易系列的实现者。

© www.soinside.com 2019 - 2024. All rights reserved.