关于智能合约:Chainlink节点部署教程

42次阅读

共计 4043 个字符,预计需要花费 11 分钟才能阅读完成。

Chainlink 节点部署教程

本文次要参考 Chainlink 官网文档(https://docs.chain.link/docs/running-a-chainlink-node)编写,如果您能够浏览英文,举荐您间接浏览官网文档。

装置必须组件

服务器环境 Ubuntu1804,咱们以 Ropsten 测试网为例,以太坊主网的搭建只需批改相干配置选项即可。

Docker 装置参考文档

https://docs.docker.com/engine/install/ubuntu/

将以后用户增加至 docker 用户组

sudo usermod -aG docker $USER
exit
# 从新登录

PostgresSQL

Chainlink Node 在 0.8 版本之后将 PostgresSQL 作为惟一的存储选项。PostgresSQL 数据库能够是本人搭建的,也能够是云服务商提供的,只有能够提供数据库的拜访接口即可。

本地装置参考:

https://www.postgresql.org/download/linux/ubuntu/

以太坊客户端

Chainlink 节点通过与以太坊客户端节点连贯,通过连贯的以太坊客户端来获取链上的用户预言机申请,通过提交交易将获取到的数据写入到链上。所以 Chainlink 节点必须要依附一个以太坊客户端节点能力发挥作用。您能够本人搭建以太坊客户端节点,也能够抉择以太坊 RPC 服务提供方的服务,只须要一个 WebSocket 链接提供给 Chainlink 节点即可。

Chainlink 的文档中(https://docs.chain.link/docs/run-an-ethereum-client)提供了搭建本地以太坊客户端节点的办法,也提供了几个内部以太坊 API 服务供您抉择。因为以太坊客户端节点对硬件要求比拟高,本文中咱们抉择 infura 提供的收费 API 来作为 Chainlink 节点的以太坊客户端抉择。

部署 Chainlink 节点

创立 Chainlink 目录

Ropsten: mkdir ~/.chainlink-ropsten

配置环境变量

Ropsten:

echo "ROOT=/chainlink
LOG_LEVEL=debug
ETH_CHAIN_ID=3
MIN_OUTGOING_CONFIRMATIONS=2
LINK_CONTRACT_ADDRESS=0x20fE562d797A42Dcb3399062AE9546cd06f63280
CHAINLINK_TLS_PORT=0
SECURE_COOKIES=false
GAS_UPDATER_ENABLED=true
ALLOW_ORIGINS=*
ETH_URL=wss://ropsten.infura.io/ws/v3/<your-api-key>
DATABASE_URL=postgresql://postgres:password@localhost:5432/postgres
DATABASE_TIMEOUT=0" > ~/.chainlink-ropsten/.env

MIN_OUTGOING_CONFIRMATIONS : 节点收回交易所须要的最小确认块数,在达到最小确认块数之前,同一个 run 不会开始下一个工作。如果不设置,默认值为 12。

LINK_CONTRACT_ADDRESS : LINK token 的发行地址,这里有测试网和主网的 LINK 发行地址,您能够依据本人的网络进行配置。如果不进行配置,默认是主网的 LINK 发行地址。

GAS_UPDATER_ENABLED : 如果设置为 true,节点会在提交事务失败时进步 gas 费用从新提交。默认为 false。

ETH_URL : 以太坊客户端 WebSocket RPC 接口地址。您能够抉择自建以太坊客户端,也能够抉择第三方服务,只有提供 WebSocket 协定的 RPC 接口地址即可。

DATABASE_URL : Chainlink 节点须要应用 PostgresSQL 数据库来进行一些数据的长久化存储。同样您能够抉择自建数据库或应用第三方数据库服务,只须要提供数据库地址能够让节点读写数据即可。

DATABASE_TIMEOUT:数据库连贯超时等待时间。默认 500ms。

启动节点

cd ~/.chainlink-ropsten && docker run -p 6688:6688 -v ~/.chainlink-ropsten:/chainlink -it --env-file=.env smartcontract/chainlink local n

首次启动会首先要求管理员输出一个明码,这个明码是节点账户的 keystore 明码,这个明码必须牢记,失落的话没有方法找回,并且私钥所治理的资金也会失落。每次启动都会要求管理员输出这个明码,以解锁 keystore。节点须要通过 keystore 的私钥来签订交易,提交到区块链上。

接下来还会要求节点管理员输出一对邮箱账户和明码,用于登录节点治理页面。

测试节点

登录浏览器治理页面

浏览器中关上 ip:6688 地址,就能看到 Chainlink 节点治理页面的登录入口。用咱们在启动节点时填入的邮箱账户和明码,就能够登录到治理界面中了。

咱们先去到 **Configuration** 标签页,会发现有一个ACCOUNT_ADDRESS 字段,这个 address 就是咱们在首次启动节点时候设置 keystore 明码的私钥所对应的地址,在节点提供服务之前,须要向这个地址转入 ETH,用于提交交易。

因为咱们应用的是 Ropsten 测试网络,所以咱们能够把这个地址复制到 Ropsten faucet 中,获取测试 ETH。如果您是服务于以太主网上的利用,须要您想这个账户地址手动转入 ETH。

创立 oracle 合约

Oracle 合约是 Chainlink 节点在区块链上的桥头堡,它与用户合约间接进行沟通,接管用户的预言机申请,将申请后果通过用户注册的回调函数,写入到用户的合约中。

Oracle 合约无需本人编写,咱们间接部署 Chainlink 开源的 Oracle 合约代码即可。如果用 remix 部署,只需新建一个蕴含上面两行代码的文件即可:

pragma solidity 0.6.6;

import "https://github.com/smartcontractkit/chainlink/evm-contracts/src/v0.6/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 服务的可用性。

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 = 0x5F66a231a29CE1513dc6c16407fDCe9D0aEE2cB0;
    // 填入咱们刚刚创立的地址
        jobId = "4b9b6e7d89154a8d855affed3985aafd";
    // 领取给 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 预言机节点是否能够失常工作啦。

退出 Chainlink 开发者社区

正文完
 0