【问题标题】:hyperledger sawtooth submit transaction error "Tried to get unauthorized address" with status invalid超级账本锯齿提交交易错误“试图获取未经授权的地址”,状态无效
【发布时间】:2020-03-23 10:57:19
【问题描述】:

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

我正在使用 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()

然后我做了与文档中相同的过程,当我检查该交易的状态时,它给了我以下响应。

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

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

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

【问题讨论】:

标签: blockchain hyperledger hyperledger-sawtooth


【解决方案1】:

将 [] 等空数组设置为 inputsoutputs 不是一种选择。这意味着您不允许通过事务处理器读取和写入任何地址。但是,您可以在inputsoutputs 中设置部分地址。例如,您可以为inputsoutputs 设置1cf126,您的代码将开始工作。

设置部分地址将使您的 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 个索引的其余字符

希望这可以澄清。另外,请参考上面的 Merkle-Radix 定义,它有关于如何计算地址的详细信息。这取决于 Transaction Family 的实现者。

【讨论】:

    猜你喜欢
    • 2019-07-06
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多