Oracle

作者: Jisen | 来源:发表于2018-08-24 15:47 被阅读0次

一部预言机可以视为是与一个预言者(oracle)相连接的图灵机。在区块链中,预言机为智能合约打开了外部世界的大门,使得智能合约可以将真实世界的信息作为合约执行的条件。

目前大部分项目都是通过第三方服务oraclize.it部署预言机。Oraclize服务允许智能合同从外部环境访问数据。

下图描述了Oraclize的机制:

image

它使用TLSNotary来实现它的serivce信任值,并预取网络中所有节点的真实世界数据以达成一致,这不能用Ethereum智能合约完成。

ETH

docs.oraclize/Ethereum

  • 如果当前正在使用私有链,为了使用Oraclize服务,必须先安装ethereum-bridge。它是一个日志侦听器,侦听来自私有链的oraclize查询,并连接到oraclize服务。
  • 将oraclize服务的智能合约文件oraclizeAPI_0.4.sol下载到自己工作目录的truffle合约文件夹,并将该文件重命名为usingOraclize。在自己的合约中调用该合约:
import "./usingOraclize.sol";
  • 启动testrpc
  • 通过以下命令启动Ethereum-bridge:
node bridge -H localhost:8545 -a 1
  • tag -a 定义了用于部署oraclize合约的帐户。它会给你一个OAR地址。
OAR=OraclizeAddrResolverI(0x5049063e4a7704ac155e4f1f42a4954bbef5bbde);
  • 使用新的地址解析器来更新您的智能合约构造函数。
  • 在Oraclize服务中,必须向Oraclize智能合约发送查询。Oraclize接收你的查询并发出相应的请求。一旦服务接收到来自API的数据,他们就会在智能合约中调用回调函数,这样就可以访问和处理所请求的数据。
pragma solidity ^0.4.16;
import "./usingOraclize.sol";  //Importing Oraclize
contract TestOraclizeCall is usingOraclize {
     uint public price;
     event Log(string text);
     //Constructor
     function TestOraclizeCall() {

         OAR = OraclizeAddrResolverI(0x5049063e4a7704ac155e4f1f42a4954bbef5bbde);

     }
     function __callback(bytes32 _myid, string _result) {

          require (msg.sender == oraclize_cbAddress());

          Log(_result);

          price = parseInt(_result, 2);

       }

     function update() payable {
        oraclize_query("URL","json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD");
     }
}

比如上面代码用于查询当前ETH的USD价格,oraclize_query函数被用于调用第三方API。__callback函数,第一个参数是请求的id。第二个参数是请求的结果。

注意必须使用truffle来编译和运行合同。

扩展链接

相关文章

网友评论

    本文标题:Oracle

    本文链接:https://www.haomeiwen.com/subject/yutiiftx.html