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

news2024/11/17 14:30:10

 

 

 963034f17590412b808770f619144970.png

 苏泽

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

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


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

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

 


正文

目录

预言机概念

起源

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

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

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

Chainlink到底是什么

混智能合约

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

了解Chainlink架构

怎么使用?

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

Remix

FISCO BICOS

FISCO BCOS的功能:

如何进行选择

合约如何与现实链接

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

敬请期待  求三连~


 

预言机概念

预言机的英文为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上或通过web3js、web3py、ethers等库调用。合约也可以写成与区块链上的其他合约交互。

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

ac4f6f37b9e84171ab8972b85f62302c.png

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

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

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

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

Remix

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

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

c385afd629c8407a89dc097c6a4468d2.png

FISCO BICOS

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的使用 以及对接具体项目的实战示例

敬请期待  求三连~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1521969.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年【危险化学品经营单位主要负责人】新版试题及危险化学品经营单位主要负责人复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【危险化学品经营单位主要负责人】新版试题及危险化学品经营单位主要负责人复审考试&#xff0c;包含危险化学品经营单位主要负责人新版试题答案和解析及危险化学品经营单位主要负责人复审考试练习。安全生产模…

Kubernetes operator系列:webhook 知识学习

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Kubernetes operator学习 系列文章&#xff0c;本节会对 kubernetes webhook 知识进行学习 本文的所有代码&#xff0c;都存储于github代码库&#xff1a;https://github.com/graham924/share-code-operator-st…

说下你对TCP以及TCP三次握手四次挥手的理解?

参考自简单理解TCP三次握手四次挥手 什么是TCP协议&#xff1f; TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接&a…

【Python】进阶学习:基于Numpy实现按指定维度拼接两个数组

【Python】进阶学习&#xff1a;基于Numpy实现按指定维度拼接两个数组 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希…

无限自动出兵-入门版【war3地图编辑器】

文章目录 1、创建单位和地区2、新事件开端3、动作3.1、创建单位3.2、选取单位3.2.1、发布指令 4、最终 1、创建单位和地区 2、新事件开端 创建新的触发器→新事件开端→时间→时间周期事件 3、动作 3.1、创建单位 3.2、选取单位 单位组→选取单位组内单位做动作 矩形区域内的…

idea中database的一些用法

1、查看表结构 方法1&#xff0c;右键&#xff0c;选这个 方法2 双击表后&#xff0c;看到数据&#xff0c;点DDL 方法3 写SQL时&#xff0c;把鼠标放在表名上&#xff0c;可以快速查看表结构 2、表生成对应的实体类 表中右键&#xff0c;选择这2个&#xff0c;选择生成的路…

STM32-Flash闪存

简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过闪存存储器接口&#xff08;外设&#xff09;可以对程序存储器和选项字节进行擦除和编程。 读写Flash的用途 1.利用程序存储器的剩余空间来保存掉电不丢失的用户数据。 2.通过在程序中…

win下 VirtualBox 自动启动脚本脚本

文章目录 一、找到VBoxManage二、测试脚本1、打开cmd2、输入命令 (直接把上面找到的VBoxManage.exe 拖入到cmd中&#xff0c;这样就不用输入路径了)3、效果展示 比如虚拟机中的系统名称叫“centos-mini” 三、设置自动启动脚本1、复制刚才测试好的命令到新建文本中2、修改文本名…

【嵌入式实践】【芝麻】【硬件篇-4】从0到1给电动车添加指纹锁:IO电路简单介绍

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

【MatLab】之:Simulink安装

一、内容简介 本文介绍如何在 MatLab 中安装 Simulink 仿真工具包。 二、所需原材料 MatLab R2020b&#xff08;教学使用&#xff09; 三、安装步骤 1. 点击菜单中的“附加功能”&#xff0c;进入附加功能管理器&#xff1a; 2. 在左侧的“按类别筛选”下选择Using Simulin…

代码随想录算法训练营第day23|669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

目录 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 669. 修剪二叉搜索树 力扣题目链接 (opens new window) 给定一个二叉搜索树&#xff0c;同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[L,…

vue2语法-简略版

内容不全&#xff0c;发现看官方文档效果更好。 介绍 — Vue.js API — Vue.js 二、Vue指令 2.1 内容渲染指令 v-text&#xff0c;v-html 内容渲染指令用来辅助开发者渲染DOM元素的文本内容&#xff0c;常用的内容渲染指令有如下2个&#xff1a; v-text&#xff08;类似in…

一文全面了解向量数据库

1. 什么是向量数据库&#xff1f;** 首先&#xff0c;我们需要理解什么是向量&#xff1f; 向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点&#xff0c;例如一个词或一张图片&#xff0c;由描述其许多特性的值的集合组成。这些变量有时被称为“…

Linux内核--基本概念/基本结构和组件

提示&#xff1a;本系列文章重点学习Linux内核 Linux内核--基本概念/基本结构和组件 简介一、基础概念1.六项工作内容2.根文件系统&#xff08;Root File System&#xff09;&#xff1a;3.交叉编译&#xff08;Cross-Compilation&#xff09;&#xff1a;4.设备树&#xff08;…

释放人工智能的力量:GPU服务器托管和高电机柜托管的关键作用

随着人工智能技术的不断发展&#xff0c;GPU服务器托管和高电机柜托管也变得愈发重要。这些技术在人工智能领域发挥着关键作用&#xff0c;为AI算法的训练和推理提供了强大的计算支持。 GPU服务器托管是指将GPU服务器放置在专门的数据中心中&#xff0c;通过云服务提供商提供的…

【敬伟ps教程】制图操作

文章目录 一寸照片制作自动生成全景照片服装操控变形内容识别比例调图画笔高级设置复制技术一寸照片制作 一寸照片规格: 2.5cm*3.5cm 1、新建文档 2、将照片拖拽至2.5*3.5cm文档中,调整至合适大小(人像的面部居中在文档中),可以使用自由变换(Ctrl+T)来调整,按住 Alt 等…

flutter 开发app可以做的事情

热更新文件/图片 预览组件/文件上传分片/动态多语言/兼容web缓存管理页面动画封装公用组件库日志系统/日志规范/错误定位低代码实现/探索/落地网络延迟脚本字体包优化web 页面浏览器刷新没有历史路径&#xff0c;导致报错选择多语言之后&#xff0c;退出再次进入&#xff0c;没…

Tiktok在线网页版和Tiktok安卓解锁版教程(Tiktok免登录国内直接看)

TikTok和抖音作为众所周知的一对兄弟&#xff0c;所开创的市场前景不可估量。它们不仅颠覆了很多传统认知&#xff0c;也直接让更多人接受了这些新奇事物。然而&#xff0c;TikTok的版本受限于国外&#xff0c;需要特定网络环境&#xff0c;一旦识别为国内&#xff0c;将无法使…

pytorch 入门基础知识二(Pytorch 02)

一 微积分 1.1 导数和微分 微分就是求导&#xff1a; %matplotlib inline import numpy as np from matplotlib_inline import backend_inline from d2l import torch as d2l def f(x):return 3 * x ** 2 - 4 * x 定义&#xff1a; 然后求 f(x) 在 x 1 时的导数&#xff…

数据结构:基于数组实现简单的数据缓存区(简单队列)

1 前言 在我们使用CAN或者以太网调试时&#xff0c;经常需要缓存最近n次收到的数据&#xff0c;以便于我们对数据进行分析。 实现这一想法我们很容易就会想到队列&#xff0c;队列就是一种先进先出的数据结构&#xff0c;之前在《数据结构&#xff1a;基于数组的环形队列&…