Chainlink(预言机)讲解:基础知识总结 到底什么是预言机本篇带你解析

举报
苏泽天下无双 发表于 2024/03/17 22:58:43 2024/03/17
【摘要】 ​  苏泽大家好 这里是苏泽 一个钟爱区块链技术的后端开发者本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~前面的专栏带大家熟悉了 区块链的基本组成 、共识机制、智能合约、最小信任机制 以及EVM等知识 如遇不懂的概念或名词全部可以在前面的文章找到解释哦区块链专栏:http://t.csdnimg.cn/CCnWE预言机概念预言机的英文为Ora...




 963034f17590412b808770f619144970.png

 苏泽

大家好 这里是苏泽 一个钟爱区块链技术的后端开发者

本篇专栏 ←持续记录本人自学两年走过无数弯路的智能合约学习笔记和经验总结 如果喜欢拜托三连支持~


前面的专栏带大家熟悉了 区块链的基本组成 、共识机制、智能合约、最小信任机制 以及EVM等知识 如遇不懂的概念或名词全部可以在前面的文章找到解释哦

区块链专栏:http://t.csdnimg.cn/CCnWE


预言机概念

预言机的英文为Oracle,和著名的数据库服务提供商Oracle(甲骨文)重名,但是两者除了名字相同以为并没有任何关系。Oracle这个单词是什么意思,下面是我在vocabulary.com上查到的Oracle的含义:

Back in ancient times, an oracle was someone who offered advice or a prophecy thought to have come directly from a divine source. In modern usage, any good source of information can be called an oracle.

中文的大概意思是:在古代,oracle是一个提出建议或预言的人,他的建议或预言被认为是直接来自于神。在现代用法中,任何好的信息来源都可以称为oracle

起源

计算机领域内的预言机一词,最早是图灵提出的。(没错 正是在下的博客名“图灵重生我名苏泽”的那个图灵,计算机之父)

图灵在图灵机(Turing Machine)的基础上,加入了一个称为预言者(oracle)的黑盒,组成了预言机(Oracle Machine)。

所谓预言者,是一个可以回答特定问题集合的实体。即它可以向图灵机系统内部输入信息,帮助图灵机完成运算。

以太坊的智能合约是“图灵完备(Turing Complete)”的,某种意义上可以看做一个图灵机,所以以太坊的设计者借鉴这个概念,把向“图灵完备的智能合约”这个图灵机输入信息的也被称为预言机oracle。

也就是说 一方向他输入信息 他就会回答对应的问题

所以,预言机是连接智能合约与区块链外部世界的中间件(middleware),是区块链重要的基础设施,它的作用是为区块链上的智能合约(Smart Contract)提供数据信息的。

c22f968f86a44999b9981515dddb7abf.png


Chainlink到底是什么

在认识他之前  我们必须先认识 混智能合约  智能合约我说过http://t.csdnimg.cn/cbhUm 那混智能合约是怎么回事呢?

混智能合约


智能合约可以连接到现实世界的资产市场价格,以产生强大的应用程序。将智能合约与链下数据和服务安全地连接起来,使它们成为混合智能合约。这是使用预言机完成的。

bef9b95e76ed4741a61414442f9c6d23.png

Chainlink使用其去中心化的预言机网络将智能合约与外部数据连接起来。Chainlink API请求由预言机1:1处理。

也就是说,预言机有的 Chainlink都会有 而且封装的更好 供我们使用

了解Chainlink架构

052b28259e7f4a44a1660f5cbf5a54a2.png

  1. 首先,Chainlink 使用其去中心化预言机网络,将智能合约与外部数据连接起来。每一个Chainlink API的请求都由一个预言机处理。
  2. 而后他会聚合来自多个方面的数据预言机。通过链上聚合,数据从去中心化的 独立的网络预言机 节点。该架构应用于Chainlink Data Feeds ,从而可以聚合资产价格数据等数据。

e66f27643a1c4de482117f95b67927f7.png

在《精通以太坊(Matering Ethereum)》一书中,提出了三种预言机的设计模式,分别是

  • 立即读取(immediate-read)
  • 发布/订阅(publish–subscribe)
  • 请求/响应(request–response)

而基于LINK ERC677 token完成的预言机功能,就属于其中的请求/响应模式。这是一种较为复杂的模式,上图中展示的是一个不含有聚合过程的简单请求/相应流程。

236dad547bda4e85bce20995786135c9.png


怎么使用?

在了解到如何使用之前我们得先知道如何进行部署

部署智能合约 是将代码推送到的过程blockchain ,此时它驻留在链上地址。一旦部署,代码就无法更改,并且被称为不可变的

只要知道地址,它的功能就可以通过接口、在Etherscan上或通过web3jsweb3pyethers等库调用。合约也可以写成与区块链上的其他合约交互。

智能合约如何使用预言机?

ac4f6f37b9e84171ab8972b85f62302c.png

  1. 部署Chainlink预言机合约:首先,需要在区块链上部署Chainlink预言机合约。这个合约将负责与链下数据源进行通信,并将数据传递给智能合约。

  2. 配置预言机合约:在部署预言机合约后,需要配置它与链下数据源的连接。这包括设置数据源的地址、API密钥等信息,以便预言机可以正确地获取数据。

  3. 编写智能合约:在智能合约中,需要引入Chainlink的预言机合约(类似Java引入依赖,python引入库一样的道理),并定义一个函数来调用预言机获取数据。这个函数将使用预言机合约提供的接口来请求数据,并将数据返回给智能合约。

  4. 处理返回的数据:一旦预言机获取到数据,它将通过回调函数将数据返回给智能合约。智能合约可以在回调函数中对数据进行处理,例如验证数据的有效性、更新合约状态等。

Remix

Remix是一个网络IDE(集成开发环境) 也就是 你敲代码(编写合约的地方)

用于在浏览器中创建、运行和调试智能合约。它是由以太坊基金会开发和维护的。Remix允许Solidity开发人员在没有开发机器的情况下编写智能合约 ,因为所需的一切都包含在网络界面中。它简化了已部署的合约的交互方式,不需要命令行界面。Remix 也支持样例合约。这意味着Remix,可以从Github加载代码。

c385afd629c8407a89dc097c6a4468d2.png

FISCO BICO

FISCO BCOS是一个基于区块链技术的开源平台,它可以用于构建企业级的区块链应用。

32e64737dd624141ac2edf427ea45f8a.png

FISCO BCOS的功能:

  1. 智能合约:FISCO BCOS支持编写智能合约,智能合约是一种在区块链上执行的自动化合约。可以使用Solidity等编程语言编写智能合约,然后部署到FISCO BCOS网络中。
  2. 链上数据存储:FISCO BCOS提供了分布式存储功能,可以将数据存储在区块链上,确保数据的不可篡改性和透明性。
  3. 交易处理:FISCO BCOS支持高并发的交易处理,可以满足企业级应用的需求。
  4. 身份认证:FISCO BCOS提供了身份认证功能,可以确保参与区块链网络的各方的身份安全和可信度。
  5. 隐私保护:FISCO BCOS支持隐私保护功能,可以对交易和数据进行加密和隐私保护,确保敏感信息不被泄露。

a74694de0c264f41bf5448b30d39e764.png

如何进行选择

FISCO BCOS和Remix是两个与智能合约开发相关的工具。下面将介绍它们的选择和使用。

FISCO BCOS是一个联盟链平台,它支持Solidity作为智能合约开发语言。Solidity是一门面向区块链平台设计的编程语言,具有广泛的影响力和社区支持。如果你需要直接的构建一个企业级的项目,或是你目前手上已经有了一些项目。你需要把区块链集成进来,那么选择使用FISCO BCOS作为区块链平台是一个很好的选择。

Remix是一个在线的Solidity集成开发环境(IDE),它提供了编写、编译、部署和调试智能合约的功能。通过Remix,你可以直接在浏览器中编写和测试智能合约,无需安装任何开发环境。如果你想快速上手Solidity并进行智能合约的开发和测试,Remix是一个很好的选择。


合约如何与现实链接

合约可以在Remix或是FISCO BICOS上面进行 编写 测试 但是如何让你的合约与项目进行交互呢?

使用Solidity引入Chainlink并使用其API查询现实世界信息的例子,例如查询天气(当然了,实际的业务大概是查询某某币的市值之类的操作而非那么无聊,这里只是简单举个例子):

  1. 创建Truffle项目:

    • 打开终端并创建一个新的文件夹,例如MyChainlinkWeather
    • 进入该文件夹并运行truffle init命令以初始化Truffle项目。
  2. 安装Chainlink开发库:

    • 在终端中进入项目文件夹,并运行npm install @chainlink/contracts --save命令以安装Chainlink开发库。
  3. 创建用户合约:

在项目的contracts目录中创建一个新的Solidity合约文件,例如WeatherContract.sol

  • 在合约文件中导入Chainlink相关的库和合约
  • pragma solidity ^0.8.0;
    
    import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol";
    import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
  • 创建一个合约,继承自ChainlinkClient合约,并设置构造函数:
contract WeatherContract is ChainlinkClient {
    address private oracle;
    bytes32 private jobId;
    uint256 private fee;
    string public weather;

    constructor() {
        setPublicChainlinkToken();
        oracle = 0x0000000000000000000000000000000000000000; // 设置你选择的Chainlink Oracle地址
        jobId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // 设置你选择的Job ID
        fee = 0.1 * 10 ** 18; // 设置你愿意支付的LINK费用
    }
}
  • 写个函数获取天气的
function requestWeather() public {
    Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
    request.add("url", "https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q=YOUR_LOCATION");
    request.add("path", "current.condition.text");
    sendChainlinkRequestTo(oracle, request, fee);
}

function fulfill(bytes32 _requestId, bytes32 _weather) public recordChainlinkFulfillment(_requestId) {
    weather = bytes32ToString(_weather);
}

function bytes32ToString(bytes32 _bytes32) private pure returns (string memory) {
    bytes memory bytesArray = new bytes(32);
    for (uint256 i; i < 32; i++) {
        bytesArray[i] = _bytes32[i];
    }
    return string(bytesArray);
}
  • 部署合约到以太坊网络:

    • 配置Truffle的网络设置,例如Ropsten测试网络。
    • 运行truffle migrate --network ropsten命令将合约部署到Ropsten测试网络。
  • 调用合约获取天气信息:

    • 在Truffle控制台或使用Web3.js等工具中,调用合约的requestWeather函数来发起Chainlink请求并获取天气信息。

此外 如果你要将在链上的数据 跟你的项目相结合的时候 可能就要用到FISCO BICOS,使用他的sdk  

后期会专门讲解 solidity(编写智能合约的主要流行语言)、FISCO BICOS的使用 以及对接具体项目的实战示例

敬请期待  求三连~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。