与许多区块链解决方案(例如:以太坊,Corda)不同,Fabric的代言架构意味着智能合约不必是确定性的和沙盒化的:唯一重要的是代言人同意读/写设置。
从this SO answer开始,链码执行可以与外界进行通信。
如果验证逻辑很复杂和/或依赖于世界状态之外的数据,是否可以调用例如WebService来执行它?
此外:假设一个链代码策略强制组织Org1支持所有事务,那么我们应该能够编写一个链代码来检查执行上下文,如果它由Org1执行则只调用验证Web服务并拒绝该事务或根据WS调用的结果继续进行。这是对的吗?
答案 0 :(得分:1)
如果验证逻辑很复杂和/或依赖于世界状态之外的数据,是否可以调用例如WebService来执行它?
虽然从技术上讲,可以提供VSCC(验证系统Chaincode)的自定义实现,但我强烈建议您不要这样做,因为这可能会导致不确定的结果。
例如,如果由于某种原因,peer1在peer2无法访问Web服务的情况下,您拥有外部Web服务和两个对等方验证此服务的交易,验证结果将有所不同。因此,您应该非常小心,尽可能避免在进行验证时调用外部系统,或者考虑将外部Web服务作为链代码执行流程的一部分来调用。
此外:假设一个链代码策略强制组织Org1支持所有事务,那么我们应该能够编写一个链代码来检查执行上下文,如果它由Org1执行则只调用验证Web服务并拒绝该事务或根据WS调用的结果继续进行。这是对的吗?
默认验证系统链代码注意确保每当满足认可政策时,因此在您的示例中,如果事务未被Org1认可,则它将被无效。
答案 1 :(得分:0)
在我看来,认可政策在所有代言同行中验证了世界各州,以便所有组织的同行就世界国家达成一致。
您所指的不是认可政策,而是智能合约中的逻辑。它应该可以在任何链代码实现中,但如果您使用Hyperledger Composer进行链代码实现,那么从他们的文档中可以看出它可以:
Runtime API是所有交易的可用API 功能。它允许访问API - 构建和发出查询 - 发出事件 - 获取所有类型的注册表 - 获取最新信息 参与者 - 让序列化程序从JavaScript创建资源 对象 - 发布HTTP REST调用
根据最后一部分post HTTP REST
来电,你应该能够逻辑拒绝任何交易'