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预言机节点是否能够失常工作啦。