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 $USERexit# 从新登录

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=/chainlinkLOG_LEVEL=debugETH_CHAIN_ID=3MIN_OUTGOING_CONFIRMATIONS=2LINK_CONTRACT_ADDRESS=0x20fE562d797A42Dcb3399062AE9546cd06f63280CHAINLINK_TLS_PORT=0SECURE_COOKIES=falseGAS_UPDATER_ENABLED=trueALLOW_ORIGINS=*ETH_URL=wss://ropsten.infura.io/ws/v3/<your-api-key>DATABASE_URL=postgresql://postgres:password@localhost:5432/postgresDATABASE_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开发者社区