我阅读了以下also帖子,以及关于智能合同和外部服务器(任何涉及套接字的任何内容)的Ethereum/Solidity论坛上的几个线程:
我理解这个想法是维护确定性代码,访问外部服务器违反了这个约定。我还了解到,当涉及到智能合同代码进行套接字调用时,它会造成安全或物流问题。
有人能告诉我你将如何处理以下情况吗?
假设smart合同涉及资产的转让,如房地产契据或所有权,在满足智能契约的条件之前,由代管机构持有。
假设合同中途发现地契是欺诈性的。我无法理解的是,如何编写一个不与外部服务器交互的智能契约,从而在履行合同之前检查执行过程中的无效状态?
我听说过人们提到了神谕,但我还没有看到一份描述如何处理我刚才描述的真实生活环境的具体方法的文档。更抽象地说,在智能契约的执行过程中发生的任何实际情况都会使事务无效。有人用技术吗?
发布于 2017-12-16 07:02:16
合同本身只能使用区块链+事务的数据。完全是决定性的。但是,您可以在契约中有特殊的受信任地址,该地址将允许将数据放入合同中。
因此,一些可信的离链进程检查它想要的任何条件(在您的例子中是欺诈),将这些数据发送给链上的契约,然后由契约处理。人们把这种过程命名为甲骨文。
从开发人员的角度来看,它看起来像是契约中的一个新方法,它接受一些数据:
function takeOracleData(uint newImportantExternalValue) {
require(msg.sender == trustedOracleAddress);
storedImportantExternalValue = newImportantExternalValue;
}
然后您只需要使用存储的值作为一些真实世界的数据。现在您需要定期给takeOracleData
打电话。因此,您只需创建一个进程(例如python脚本),它将获取新数据并每10分钟调用一次函数。就这样。
这里是甲骨文的一个示例,正在观察新的合同事件。
https://ethereum.stackexchange.com/questions/33526
复制相似问题