基于eth测试网搭建Chainlink节点
Posted cuiran
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于eth测试网搭建Chainlink节点相关的知识,希望对你有一定的参考价值。
基于ETH测试网搭建Chainlink节点
本文主要参考 Chainlink 官方文档(https://docs.chain.link/docs/running-a-chainlink-node) ,但是搭建过程中有些问题,文档也没有给出,因此写下此文进行一些记录。
所需环境及组件
操作是基于Mac,如果用其他系统操作也类似。主要依赖组件有Docker环境、PostgresSQL、以太测试网等,后面会将如何搭建Chainlink节点过程进行记录。
Docker 安装
Mac下是直接安装的Docker文件,其他环境可参考官网
安装完成输入docker version 输出信息表示安装成功
Client: Docker Engine - Community
Cloud integration: 1.0.1
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 16:58:31 2020
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:07:04 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
PostgresSQL 安装
Chainlink Node 在 0.8 版本之后将 PostgresSQL 作为唯一的存储选项。PostgresSQL 数据库可以是自己搭建的,也可以是云服务商提供的,只要可以提供数据库的访问接口即可。
这里采用的是基于docker 安装.具体可以参考:
docker run --name postgres2 -e POSTGRES_PASSWORD=password -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres
以太坊测试环境
本文直接使用的 https://infura.io/ 进行测试,测试网可以选择Ropsten和kovan
部署Chainlink 节点
创建Chainlink 目录
- Ropsten
创建目录
mkdir ~/.chainlink-ropsten
配置环境变量
ROOT=/chainlink
LOG_LEVEL=debug
ETH_CHAIN_ID=3
ETH_URL=wss://ropsten.infura.io/ws/v3/自己的id
MIN_OUTGOING_CONFIRMATIONS=2
MIN_INCOMING_CONFIRMATIONS=0
LINK_CONTRACT_ADDRESS=0x20fE562d797A42Dcb3399062AE9546cd06f63280
CHAINLINK_TLS_PORT=0
SECURE_COOKIES=false
GAS_UPDATER_ENABLED=true
DATABASE_URL=postgresql://postgres:password@172.17.0.2:5432/db_chainlink?sslmode=disable
ALLOW_ORIGINS=*
- Kovan
创建目录
mkdir ~/.chainlink-kovan
配置环境变量
ROOT=/chainlink
LOG_LEVEL=debug
ETH_CHAIN_ID=42
ETH_URL=wss://kovan.infura.io/ws/v3/自己的id
MIN_OUTGOING_CONFIRMATIONS=2
MIN_INCOMING_CONFIRMATIONS=0
LINK_CONTRACT_ADDRESS=0xa36085F69e2889c224210F603D836748e7dC0088
CHAINLINK_TLS_PORT=0
SECURE_COOKIES=false
GAS_UPDATER_ENABLED=true
DATABASE_URL=postgresql://postgres:password@172.17.0.2:5432/db_chainlink?sslmode=disable
ALLOW_ORIGINS=*
启动节点
这里选择的是基于Kovan环境启动Chainlink节点,若想选择Ropsten环境只需改下命令中的对应参数即可。
sudo docker run --name chainlink -p 6688:6688 -v ~/.chainlink-kovan:/chainlink -it --env-file=.env smartcontract/chainlink local n
首次启动会首先要求管理员输入一个密码,这个密码是节点账户的 keystore 密码,这个密码必须牢记,丢失的话没有办法找回,并且私钥所管理的资金也会丢失。每次启动都会要求管理员输入这个密码,以解锁 keystore。节点需要通过 keystore 的私钥来签署交易,提交到区块链上。
接下来还会要求节点管理员输入一对邮箱账户和密码,用于登录节点管理页面。
节点测试
登陆管理界面
浏览器中打开 ip:6688 地址,就能看到 Chainlink 节点管理页面的登录入口。用我们在启动节点时填入的邮箱账户和密码,就可以登录到管理界面中了。
我们先去到 Configuration 标签页,会发现有一个 ACCOUNT_ADDRESS 字段,这个 address 就是我们在首次启动节点时候设置 keystore 密码的私钥所对应的地址,在节点提供服务之前,需要向这个地址转入 ETH,用于提交交易。
由于我们使用的是 Kovan 测试网络,我们可以使用MetaMask 给这个账户地址转入测试ETH。
创建 Oracle 合约
Oracle 合约是 Chainlink 节点在区块链上的桥头堡,它与用户合约直接进行沟通,接收用户的预言机请求,将请求结果通过用户注册的回调函数,写入到用户的合约中。
Oracle 合约无需自己编写,我们直接部署 Chainlink 开源的 Oracle 合约代码即可。如果用 remix 部署,只需新建一个包含下面两行代码的文件即可:
pragma solidity 0.4.24;
import "https://github.com/smartcontractkit/chainlink/evm-contracts/src/v0.4/Oracle.sol";
需要注意的是,Oracle 合约会暂时接受用户发起 Chainlink 请求是所支付的 LINK 费用,所以请务必妥善保存合约 owner 的私钥。
部署好 Oracle 合约之后,需要将开放权限给节点的地址,允许节点可以提交事务。如图所示:
创建 Jobs
按照官网提供例子,在节点中添加 Job(作业)。打开节点管理界面的 Jobs 标签页,点击 New Job 添加新的 Job,将每个类型的 Job 的 JSON 拷贝到文本框中,用刚刚部署好的 Oracle 合约地址,替换 JSON 中的 YOUR_ORACLE_CONTRACT_ADDRESS 字段。每创建成功一个 Job,都会生成一个 Job ID,在 Jobs 标签页可以找到所有的 Jobs。
测试Chainlink节点是否可用
通过remix 对节点进行测试
pragma solidity ^0.6.0;
import "https://raw.githubusercontent.com/smartcontractkit/chainlink/develop/evm-contracts/src/v0.6/ChainlinkClient.sol";
contract APIConsumer is ChainlinkClient
uint256 public ethereumPrice;
address private oracle;
bytes32 private jobId;
uint256 private fee;
constructor() public
setPublicChainlinkToken();
// 填入我们刚刚部署好的oracle地址
oracle = 0x0f6b361eAe488e7fdbeFF164AcD5Bae04c144574;
// 填入我们刚刚创建的地址
jobId = "01f4b9afcad747408dd0d58913b79d56";
// 支付给Oracle的最小费用,可用在Configuration页面MINIMUM_CONTRACT_PAYMENT字段查看到
fee = 1 * 10 ** 18; // 1 LINK
function requestEthereumPrice() public returns (bytes32 requestId)
Chainlink.Request memory request = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
// 设置所要请求的API地址
request.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");
// API返回结果的解析路径
request.add("path", "USD");
// 为去除小数点将结果乘以的倍数
request.addInt("times", 100);
// 发送请求
return sendChainlinkRequestTo(oracle, request, fee);
function fulfill(bytes32 _requestId, uint256 _price) public recordChainlinkFulfillment(_requestId)
ethereumPrice = _price;
部署好用户合约之后,向用户合约转入 LINK,调用 requestEthereumPrice 方法,就可以测试我们的 Chainlink 预言机节点是否可以正常工作啦。
同时,通过节点平台可以查看到交易列表
以上是关于基于eth测试网搭建Chainlink节点的主要内容,如果未能解决你的问题,请参考以下文章
Chainlink 商品 [黄金、白银、石油] 价格为测试网智能合约提供信息