运行 命令一次全部抛出错误,而 运行 命令一个接一个是可以的
Running commands all at once throws error while running commands one after another is ok
我创建了一个链码并将其部署在 the test network 上。我从命令行调用事务。
peer chaincode invoke -C mychannel -n basic -c '{"function":"createStore","Args":["1","Target","Weyburn","false"]}'
peer chaincode invoke -C mychannel -n basic -c '{"function":"createCashDesk","Args":["1","1","false"]}'
peer chaincode invoke -C mychannel -n basic -c '{"function":"openStore","Args":["1"]}'
peer chaincode invoke -C mychannel -n basic -c '{"function":"openCashDesk","Args":["1"]}'
如果我一次 运行 这四个命令,用“&”连接它们,最后一个命令会抛出错误。
如果我 运行 一个接一个地执行命令,等待几秒钟直到我看到命令输出,所有命令 运行 都没有错误。
我该如何调试这个问题?
我怀疑存在一些同步或挖掘问题。难不成第三个命令returns输出的时候,数据没有完全同步,导致第四个命令进入bad state然后失败?
当我开发以太坊链码时,我需要打开另一个终端并不断挖掘新区块以提交以太坊链码调用。
在 Hyperledger Fabric 中,如何停止挖矿以使交易请求在网络中保持待处理状态?
我建议将 --waitForEvent
添加到每个调用命令,否则您不会等待交易提交到账本,因此后续调用可能看不到先前调用的结果
你应该post错误。
在这种情况下,我假设您正在尝试读取一些尚未提交的值。当块未提交时,世界状态不会更新。因此,嵌入到块中的交易不会在世界状态中更新。执行已被模拟,但世界状态尚未更新。因此,您正在尝试读取一个尚不存在的值。
您可以等待事务提交,然后再对同一文档进行下一个操作。使用 NodeJS SDK,这是这样执行的:https://hyperledger.github.io/fabric-sdk-node/release-2.2/tutorial-transaction-commit-events.html.
peer
命令仅用于“播放”。不完全确定,但我认为当 peer
命令 returns 时,事务已经提交。但是您正在使用 &
在后台启动命令,因此您不会等待 return.
的命令
另一个相关错误可能是 MVCC_READ_CONFLICT
关于同一块中相同文档的交易。该文档可能存在,但您的同行在尝试提交时检测到 readsets/writesets 中的版本不匹配并且 return 出现错误。
编辑
如 david_k 建议指定 --waitForEvent
并使用 &&
而非 &
连接命令,以提供快速解决方案。无论如何,请始终考虑我之前告诉你的话。
我创建了一个链码并将其部署在 the test network 上。我从命令行调用事务。
peer chaincode invoke -C mychannel -n basic -c '{"function":"createStore","Args":["1","Target","Weyburn","false"]}'
peer chaincode invoke -C mychannel -n basic -c '{"function":"createCashDesk","Args":["1","1","false"]}'
peer chaincode invoke -C mychannel -n basic -c '{"function":"openStore","Args":["1"]}'
peer chaincode invoke -C mychannel -n basic -c '{"function":"openCashDesk","Args":["1"]}'
如果我一次 运行 这四个命令,用“&”连接它们,最后一个命令会抛出错误。
如果我 运行 一个接一个地执行命令,等待几秒钟直到我看到命令输出,所有命令 运行 都没有错误。
我该如何调试这个问题?
我怀疑存在一些同步或挖掘问题。难不成第三个命令returns输出的时候,数据没有完全同步,导致第四个命令进入bad state然后失败?
当我开发以太坊链码时,我需要打开另一个终端并不断挖掘新区块以提交以太坊链码调用。
在 Hyperledger Fabric 中,如何停止挖矿以使交易请求在网络中保持待处理状态?
我建议将 --waitForEvent
添加到每个调用命令,否则您不会等待交易提交到账本,因此后续调用可能看不到先前调用的结果
你应该post错误。
在这种情况下,我假设您正在尝试读取一些尚未提交的值。当块未提交时,世界状态不会更新。因此,嵌入到块中的交易不会在世界状态中更新。执行已被模拟,但世界状态尚未更新。因此,您正在尝试读取一个尚不存在的值。
您可以等待事务提交,然后再对同一文档进行下一个操作。使用 NodeJS SDK,这是这样执行的:https://hyperledger.github.io/fabric-sdk-node/release-2.2/tutorial-transaction-commit-events.html.
peer
命令仅用于“播放”。不完全确定,但我认为当 peer
命令 returns 时,事务已经提交。但是您正在使用 &
在后台启动命令,因此您不会等待 return.
另一个相关错误可能是 MVCC_READ_CONFLICT
关于同一块中相同文档的交易。该文档可能存在,但您的同行在尝试提交时检测到 readsets/writesets 中的版本不匹配并且 return 出现错误。
编辑
如 david_k 建议指定 --waitForEvent
并使用 &&
而非 &
连接命令,以提供快速解决方案。无论如何,请始终考虑我之前告诉你的话。