Hyperledger Chaincode外部服务调用

Hit*_*uch 5 go hyperledger

是否可以通过chaincode进行外部服务调用?例如,如果我需要使用公共API查找当前汇率或今天的温度,如何从链码中进行调用?

如果允许外部调用,则每个节点都有可能提供不同的输出(不确定性行为)。那么如何达成共识?

Kim*_*Kim 4

来自不同来源的两个资产更新总是有机会以不同的顺序到达两个背书者。这将创建不匹配的读/写集。如果背书策略要求所有背书者实现相同的 r/w 集,这可能会导致两者失败。添加对外部数据的读取可能会由于任何数量的瞬时问题而发生变化或失败,只会加剧这个问题。

但无论哪种背书策略生效,这些更改都将被正确处理,因为只有背书的读/写集才会被提交。

现在,如果您决定从链码写入外部数据库,那么所有的赌注都会被取消。由于同一块中的密钥冲突而导致的最后一刻失败(fabric v1 要求针对相同密钥的更新永远不会一起处理,因此必须进行流程控制)将导致事务永远无法提交。

当发生这种情况时,外部写入应该回滚,但链代码早已执行完毕,因此整个数据集现在已损坏。这是不可能的。

然而,如果有人决定尝试命运并构建一个复杂的系统,其中链代码更新外部数据,只要交易 ID 是更新的日志条目的一部分,就可以检测到故障并回滚更新。这个解决方案非常脆弱,如果你尝试它,你可能会后悔:-)