区块链预言机 Chainlink 测试环境部署与使用/探索区块链预言机的实现原理_预言机如何使用-程序员宅基地

技术标签: 区块链  

Chainlink

  • 什么是预言机:在区块链领域,预言机被认为是可以为区块链智能合约提供外部数据源的系统。

  • Oraclize项目:中心化预言机。

  • Chainlink项目:非中心化预言机。

  • 部署步骤

    1. 部署以太坊节点 或者 获取一个可以被访问的以太坊ws连接地址。
    2. 部署postgresql数据库 或者 获取一个可以被被访问的postgres数据库地址账户密码。
    3. 部署chanlink节点。
  • 部署方式

    • docker
  • 使用的以太坊网络

    • Rinkeby

一 部署postgres

docker run --name chainlink_postgres -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD=password -d postgres

二 部署以太坊节点

  • 笔者是通过在第三方平台 https://infura.io/ 注册账户,获取访问以太坊节点ws接口权限,如下所示。
    • wss://rinkeby.infura.io/ws/v3/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

三 部署chainlink节点

  1. 配置 vi /tmp/.env

    # 以太坊Rinkeby网络的配置
    ROOT=/tank1/chainlink
    LOG_LEVEL=debug
    ETH_URL=wss://rinkeby.infura.io/ws/v3/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    ETH_CHAIN_ID=4
    MIN_OUTGOING_CONFIRMATIONS=2 # 节点发出交易所需要的最小确认块数,在达到最小确认块数之前,同一个run不会开始下一个任务。如果不设置,默认值为12。
    MIN_INCOMING_CONFIRMATIONS=0
    LINK_CONTRACT_ADDRESS=0x01BE23585060835E02B77ef475b0Cc51aA1e0709 # LINK token的发行地址,这里是公链网络上的LINK智能合约发行地址,您可以根据自己的网络进行配置。如果不进行配置,默认是以太坊主网上的LINK智能合约代币发行地址。
    GAS_UPDATER_ENABLED=true # 如果设置为true,节点会在提交事务失败时提高gas费用重新提交。默认为false。
    
    # CHAINLINK_DEV=true
    CHAINLINK_TLS_PORT=0
    SECURE_COOKIES=false
    
    #TLS_CERT_PATH=/chainlink/tls/server.crt
    #TLS_KEY_PATH=/chainlink/tls/server.key
    
    ALLOW_ORIGINS=*
    DATABASE_URL=postgresql://postgres:[email protected]:5432/postgres?sslmode=disable
    #DATABASE_URL=postgresql://postgres:password@postgres:5432/postgres?sslmode=disable
    DATABASE_TIMEOUT=500 # 数据库连接超时等待时间。默认500ms
    
  2. 启动

    screen -S chainlink_docker
    docker run --name chainlink_node --network host -v ~/.chainlink-rinkeby:/chainlink -it --env-file=/tmp/.env smartcontract/chainlink local n
    # Ctr+a 按下后再按下d 退出screen前台
    
  3. 转一些ETH进Chainlink节点的以太坊地址上,笔者转了0.5个。Chainlink节点获取外部数据后,调用预言机合约时需要支付一定的以太坊手续费。

    • 笔者部署的Chainlink节点的以太坊地址 0x5Bd3C7bF84B38279Da7b819eBc9f52bdE98fa0A3

四 部署预言机合约

  1. 游览器打开链接,部署预言机合约

    • https://remix.ethereum.org/#url=https://docs.chain.link/samples/NodeOperators/Oracle.sol
  2. 选择部署的合约 @chainlink/contracts/src/v0.6/Oracle.sol

    • 输入参数
      • _LINK: 此参数为以太坊网络上的ChainLink Token合约的地址 0x01BE23585060835E02B77ef475b0Cc51aA1e0709
    • 笔者部署成功得到预言机合约的地址 0xd58531FE83c33633CA7f1dc80506ECD62d93af00
  3. 执行 setFulfillmentPermission 函数

    • 输入参数
      • _node: Chainlink节点web界面配置里的ACCOUNT_ADDRESS参数值
      • _allowed: true

五 在chainlink节点web界面创建Job

  • http://IP:6688/jobs

  • address为需要监听的预言机合约地址,0为监听链上所有的合约。触发器监听到此预言机合约的事件,来触发tasks的执行。

    • 更改address为预言机的合约地址。
{
    
    "name": "Get > Bytes32",
    "initiators": [
        {
    
            "type": "runlog",
            "params": {
     "address": "0xd58531FE83c33633CA7f1dc80506ECD62d93af00" }
         }
    ],
    "tasks": [
        {
     "type": "httpget" }, 
        {
     "type": "jsonparse" }, 
        {
     "type": "ethbytes32" }, 
        {
     "type": "ethtx" }
    ]
}

六 部署业务合约

  1. 游览器打开链接,部署业务合约

    • https://remix.ethereum.org/#url=https://docs.chain.link/samples/APIRequests/ATestnetConsumer.sol
  2. 选择部署的合约 ATestnetConsumer.sol

    • 笔者部署成功后得到业务合约地址 0x3aEe4b05C117D48241AdbaEc05b1DA9fC49200B1
  3. 转一些LINK到业务合约地址上,笔者转了2个。当执行的函数需要调用预言机合约时,业务合约需要支付一定的LINK给预言机合约。

  4. 执行 currentPrice 函数

  5. 执行 requestEthereumPrice 函数

    • 输入参数
      • _oracle: 预言机合约地址 0xd58531FE83c33633CA7f1dc80506ECD62d93af00
      • _jobId: chainnode节点web界面创建的Job的Id 9758979aff2c4b7fad1450318f27bc1c
  6. 执行成功

    • 在以太坊游览器上https://rinkeby.etherscan.io/address/0x3aEe4b05C117D48241AdbaEc05b1DA9fC49200B1,可以看到业务合约转了一些LINK给预言机合约。
    • 在chainlink节点的web界面上http://39.173.177.198:6688/runs 可以看到相关的执行情况。
      在这里插入图片描述
  7. 执行 currentPrice 函数,可以发现返回值发生了变化。

七 报错

  • 症状:Chainlinl节点web界面job运行状态的报错
    Pending Outgoing Confirmations
    
  • 原因:没有给Chainlink的节点账户充ETH,它没有足够的ETH支付gas费用,预言机节点需要调用Oracle合约的函数,需要支付gas费。

八 总结

  • 数据流
    1. 用户:调用自己编写的业务合约的某个函数获取指定的数据。输入 预言机合约地址 和 JobID 。
    2. 业务合约:调用Chainlink节点运营商部署的预言机合约。
    3. 预言机合约:事件被触发,输出日志。
    4. Chainlink节点:监听智能合约公链网络日志。监听到特定的日志后,根据 JobID 执行任务。
    5. Chainlink节点:Job被执行,Job根据编写好的规则去执行指定的Bridge。(Chainlink节点内置了一些Bridge)
    6. Chainlink节点:Bridge根据URL请求数据。
    7. Chainlink节点:Bridge获取数据后,Chainlink节点调用预言机合约,返回数据进链上。
    8. 预言机合约:调用用户的业务合约,将数据返回给业务合约。
  • 主网如何保证数据的真实性
    • 每个Chainlink节点都需要进行LINK的质押。
    • 当从区块链外部世界获取数据的事件被触发时,Chainlink网络系统会让一批Chainlink节点都去请求外部世界指定的数据,通过数据间的对比等机制,来验证数据的真实性,Chainlink节点的可靠性。
      在这里插入图片描述
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IMPlove/article/details/123059072

智能推荐

matlab版本对应的MinGW版本_matlab对应mingw-程序员宅基地

文章浏览阅读669次。截止到2023年11月6日,matlab对应的MinGW-w64 GCC编译器的版本,更新到matlabR2023b。_matlab对应mingw

数学建模--三维图像绘制的Python实现_python画三维立体图-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏22次。数学建模--三维图像绘制的Python实现_python画三维立体图

ESP32-网络开发实例-扫描可用WiFi网络及WiFi信号强度检测_esp32 wifi信号强度-程序员宅基地

文章浏览阅读3.5k次。扫描可用WiFi网络及WiFi信号强度检测NodeMCU-32S 最强的ESP32 开发板非盗版或副厂的CH340 WiFi 蓝牙ESP-32 可用Arduino IDEESP32-S 是一款通用型WiFi-BT-BLE MCU模组,功能强大,用途广泛,可以用于低功耗传感器网络和要求极高的任务,例如语音编码、音频流和MP3解码等。此款模组的核心是ESP32芯片,具有可扩展、自适应的特点。两个CPU核可以被单独控制或上电。时钟频率的调节范围为80 MHz到240 MHz。用户可以切断CPU的电源,利用低_esp32 wifi信号强度

STM32片上外设时钟使能、失能和复位的区别-程序员宅基地

文章浏览阅读4.1k次,点赞5次,收藏28次。置顶/星标公众号,不错过每一条消息! 今天分享的关于时钟知识,可能很多人没有在意过。这也是之前有朋友问过的问题,这里就简单给大家普及一下吧。1RCC时钟说明在STM..._时钟复位和时钟使能

最强下载器idm_idm_v6.38.7.2-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏6次。下载:IDM v6.38.7.2 中文绿色特别版https://eli08.118pan.com/b1064872密码:ye79下载: IDM 6.39.7.3https://eli08.118pan.com/b1064872密码:ye79下载好后先点击绿化,然后在点击后缀exe文件进入软件后设置一下这里要改为:softxm;netdisk这里最好设置为4这要就差不多了..._idm_v6.38.7.2

随便推点

kali linux学习(永恒之蓝)_linux永恒之蓝-程序员宅基地

文章浏览阅读6.4k次,点赞15次,收藏138次。写在之前永恒之蓝是2017年4月14日晚,黑客团体Shadow Brokers(影子经纪人)公布一大批网络攻击工具,其中包含“永恒之蓝”工具,“永恒之蓝”利用Windows系统的SMB漏洞可以获取系统最高权限。5月12日,不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒,英国、俄罗斯、整个欧洲以及中国国内多个高校校内网、大型企业内网和政府机构专网中招,被勒索支付高额赎金才能解密恢复文件。准备工作pc:windows7(未安装补丁)和kali linux寻找目标靶机ifconig#查看本机_linux永恒之蓝

SCAU高级语言程序设计--实验5 循环结构(一)(1)_scau高级语言程序设计实验5-程序员宅基地

文章浏览阅读361次。SCAU高级语言程序设计--实验5 循环结构(一)(1)一、堂上限时习题1、计算阶乘题目:输入正整数n(n<12),计算n!(注n!=1*2*3*...*n)思路:循环乘而已int main(){ int m,i,sum=1; scanf("%d", &m); if (m > 0&&m < 12){ for (i = 1; i <= m; i++){ sum *= i; } printf("%d\n", sum);_scau高级语言程序设计实验5

Python数据可视化 Pyecharts 制作 Tree 树图_python制作树状图发亮-程序员宅基地

文章浏览阅读3.9w次。大家好,我是Mr数据杨。想象一下,郭嘉、周瑜等众多智谋之士正在用它们来描绘三国的战略图。首先树图,就如同三国的地图,详尽地描绘了数据间的关系,而基本设置,就如同划分各地的界限,确定领土边际可以通过基本设置确定树图的总体规格。坐标轴设置就像是绘制地图上的经纬线,以确定战略点的具体位置。通过精确的坐标轴可以清晰地找到每个数据点,洞察数据之间的关系。树图选项可以让个性化的展示信息,就像诸葛亮设下诸多兵法阵型,变化无穷。根据需求可以选择不同的树图选项,为数据展现提供多样的视觉效果。_python制作树状图发亮

高通安卓Q显示屏不同角度旋转竖屏横屏切换_高通副屏旋转-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏12次。由于项目需要,使用了竖屏当横屏用,所以需要将系统显示旋转90度,我们目前平台是基于高通QCM6125安卓10.0系统。为了方便以后其他角度的旋转,添加了persist.panel.orientation 属性来控制角度。开机动画frameworks/base/cmds/bootanimation/BootAnimation.cpp@@ -279,11 +279,36 @@ status_t BootAnimation::readyToRun() { if (status) _高通副屏旋转

鸿蒙系统电视能装APP吗,简单一招,无师自通!教你在智能电视上安装第三方APP软件!...-程序员宅基地

文章浏览阅读4.6k次。如今智能电视也能使用大部分手机APP,但不少电视自带的应用商城是搜索不到你想要的APP的,这时候必须通过“特殊手段”才能达到目的,这篇文章笔点酷玩不罗嗦,给大家介绍非常简单的一招,在99%的智能电视系统上都能成功实现安装第三方APP的目的!这个办法的第一个难点在于手机与电视互联,简单讲只需手机下载一个第三方软件,名字叫做“悟空遥控器”,这个APP已经出品多年,其他相关功能的APP都没有它好用,它的..._鸿蒙电视怎么下载app

reportng之测试报告升级美化-程序员宅基地

文章浏览阅读120次。背景:偶然看到一个人的自动化框架的测试报告好漂亮,心痒痒,今天弄了一下午,还是不行,结果到现在就现在,我特么成功了,不为什么Mark一下:本地化修改获取源码,修改reportng.properties文件,reportng.properties中的内容是键值对,修改后面的值为中文即可。其他视情况做改变。passed=通过修改测试结果顺序需要修改TestResultCompa..._reportng测试报告美化

推荐文章

热门文章

相关标签