
如何使用Chainlink Keepers实现智能合约执行的自动化
Chainlink 2022春季黑客松已于4月22日拉开帷幕! 欢迎注册!请查看此页面以了解更多信息:
智能合约不能自己执行,这意味着它们需要一个外部拥有账户、预言机或合约来启动它们自己的功能。这给许多dApp带来了问题,比如这类dApp要求合约在固定时间间隔(如每24小时),或者满足预定条件(如以太坊达到特定价格),或者依据某种计算(如贷款被计算为抵押不足)执行。
在过去,开发者会创建并维护他们自己的中心化脚本或者手动触发智能合约的执行以解决问题。然而,这实际上破坏了构建去中心化区块链应用程序的目的,并且如果中心化脚本或手动触发过程失败,就会出现停机的可能。
在本教程中,你将学习如何使用Chainlink Keepers这种可靠的和去中心化的方式自动执行智能合约。
为什么每个智能合约开发者都应该使用去中心化的自动化方案?
Chainlink Keepers解锁了一种新形式的去中心化智能合约自动化方案,使开发者能够改变他们构建和维护dApp的方式。去中心化智能合约自动化有三个主要好处。
首先,有必要消除运行中存在的任何中心化故障点。Chainlink Keepers由Keeper节点组成的去中心化网络驱动–这与目前通过Chainlink Data Feeds守护DeFi数百亿价值的超可靠节点相同,消除了单点故障。
其次,开发者不需要投入时间和资源来创建链上监控和合约执行的脚本,只需要创建一个与Keeper兼容的合约并注册,就可以集成优化的Chainlink Keepers基础设施。这节省了时间,也减少了DevOps的工作量,使开发者能够专注于编写更多优秀的代码。
最后,通过使用Chainlink Keepers,开发者可以增强其协议的安全性。
开发者不再需要冒险从中心化服务器发起交易时暴露自己私钥的风险–Chainlink Keeper网络上的节点将签署链上交易。
开始使用Chainlink Keepers
你可以通过两个步骤用Chainlink Keepers自动化你的智能合约:
-
创建并部署一个与Keeper兼容的合约
https://docs.chain.link/docs/chainlink-keepers/compatible-contracts/
-
在Chainlink Keepers应用程序上注册该合约,以创建一个Upkeep
在这些步骤完成后,Chainlink Keepers将按照任务描述执行Upkeep工作,而不需要任何进一步的输入。
如果你是Solidity的新手,我们建议在继续之前先学习一些初级教程。
这个教程特别全面和有用。我们现在将向你展示如何使你的合约与Keeper兼容。如果你更喜欢观看有关该主题的视频,请观看我们的视频教程:https://www.youtube.com/watch?v=-Wkw5JVQGUo)
如何编写与Keeper兼容的合约与Keeper兼容的合约有一个checkUpkeep函数和一个performUpkeep函数,并具有Chainlink Keepers所要求的必要输入和输出。为了防止错误,我们将在指定我们的checkUpkeep和performUpkeep函数应该做什么之前使用Keeper兼容的接口。
导入与Keeper兼容的接口
首先,将KeeperCompatibleInterface导入你的合约。
// SPDX-License-Identifier: MITpragma solidity ^0.8.0;// KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and// ./interfaces/KeeperCompatibleInterface.solimport "@chainlink/contracts/src/v0.8/KeeperCompatible.sol";
这个接口有两个函数:
checkUpkeep函数
Chainlink Keepers使用一个去中心化的网络,在每个区块中以安全和低成本的方式在链下监控checkUpkeep函数,然后在满足预定的条件时启动链上交易,执行智能合约功能。
function checkUpkeep( bytes calldata checkData) external returns ( bool upkeepNeeded, bytes memory performData );
checkUpkeep函数需要一个名为checkData的字节参数,该参数在Keepers应用程序上注册Upkeep(https://keepers.chain.link/new)
时被设置。这个值是可选的,可以在你的代码逻辑中使用,用于确定checkUpkeep是否返回true。
checkUpkeep返回一个名为upkeepNeeded的布尔值。当为真时,这将调用performUpkeep。它还返回字节格式的performData(可选的附加数据),如果需要Upkeep,Keeper应该调用performUpkeep。要了解更多信息,请参见开发者文档:
https://docs.chain.link/docs/chainlink-keepers/compatible-contracts/#performdata
performUpkeep函数
如果你的checkUpkeep的链下模拟确认预定义条件满足(upkeepNeeded == true from checkUpkeep),Keeper将向区块链广播一个交易,并将performData作为输入执行performUpkeep函数。
function performUpkeep( bytes calldata performData) external;
轮流的节点选择过程可以防止节点之间的gas价格拍卖竞争,并能稳定你的合约自动化的成本。
下面是一个来自Chainlink Keepers用户Entropyfi的合约实例片段,checkUpkeep检查Entropyfi预测游戏是否要到期结算。
/*** @dev chainlink keeper checkUpkeep function to constantly check whether we need function call**/function checkUpkeep(bytes calldata checkData) external override returns (bool upkeepNeeded, bytes memory performData) { PoolStatus currState = status.currState; uint256 lastUpdateTimestamp = status.lastUpdateTimestamp; uint256 durationOfGame = status.durationOfGame; uint256 durationOfBidding = status.durationOfBidding; if (currState == PoolStatus.Accepting && block.timestamp > lastUpdateTimestamp.add(durationOfBidding)) { upkeepNeeded = true; } else if (currState == PoolStatus.Locked && block.timestamp > lastUpdateTimestamp.add(durationOfGame)) { upkeepNeeded = true; } else { upkeepNeeded = false; } performData = checkData;}
Chainlink Keepers将不断调用checkUpkeep函数,如果upkeepNeeded为真,那么节点将执行执行performUpkeep函数。
/*** @dev once checkUpKeep been triggered, keeper will call performUpKeep**/function performUpkeep(bytes calldata performData) external override { PoolStatus currState = status.currState; uint256 lastUpdateTimestamp = status.lastUpdateTimestamp; uint256 durationOfGame = status.durationOfGame; uint256 durationOfBidding = status.durationOfBidding; if (currState == PoolStatus.Accepting && block.timestamp > lastUpdateTimestamp.add(durationOfBidding)) { startGame(); } if (currState == PoolStatus.Locked && block.timestamp > lastUpdateTimestamp.add(durationOfGame)) { endGame(); } performData;}
从一些示例代码开始
无论你是创建一个新的合约,还是已经部署了一个包含需要自动化的函数的合约,在Chainlink Keepers开发者文档中都有一些指南可以帮助你开始。
从这里的合约示例开始。下面的例子代表了一个简单的计数器合约。
// SPDX-License-Identifier: MITpragma solidity ^0.7.0;// KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and// KeeperCompatible.sol imports the functions from both ./KeeperBase.sol and// ./interfaces/KeeperCompatibleInterface.sol// ./interfaces/KeeperCompatibleInterface.solimport "@chainlink/contracts/src/v0.7/KeeperCompatible.sol";contract Counter is KeeperCompatibleInterface { /** * Public counter variable */ uint public counter; /** * Use an interval in seconds and a timestamp to slow execution of Upkeep */ uint public immutable interval; uint public lastTimeStamp; constructor(uint updateInterval) { interval = updateInterval; lastTimeStamp = block.timestamp; counter = 0; } function checkUpkeep(bytes calldata /* checkData */) external override returns (bool upkeepNeeded, bytes memory /* performData */) { upkeepNeeded = (block.timestamp – lastTimeStamp) > interval; // We don't use the checkData in this example. The checkData is defined when the Upkeep was registered. } function performUpkeep(bytes calldata /* performData */) external override { //We highly recommend revalidating the upkeep in the performUpkeep function if ((block.timestamp – lastTimeStamp) > interval ) { lastTimeStamp = block.timestamp; counter = counter + 1; } // We don't use the performData in this example. The performData is generated by the Keeper's call to your checkUpkeep function }}
Chainlink Keepers可以监控任何链上或链下条件的状态,如时间的流逝(如是否过去了24小时?)或某种计算(如贷款是否被计算为抵押不足?) 一旦条件得到满足,Chainlink Keepers就会在链上提交一个交易,以触发该函数的执行。
你也可以使用Chainlink Keepers的实用合约,比如EthBalanceMonitor合约或这些例子。
如何将你的合约注册为网络上的Upkeep
完成与Keeper兼容的合约后,就可以在Chainlink Keepers应用程序中点击“注册新的Upkeep”。
关于如何注册的详细步骤指南,请参阅Chainlink开发者文档:
https://docs.chain.link/docs/chainlink-keepers/register-upkeep/
重要提示(对于非以太坊链):你的Upkeep必须用ERC-677标准的LINK(而不是ERC-20,这在许多桥上是通用的)进行充值。可以使用PegSwap来将你的LINK转换为与ERC-677兼容的版本。
注册和批准后,你可以添加额外的资金,并在Chainlink Keepers应用程序上看到你的Upkeep的所有细节。
今天就开始用起来吧
现在你知道用Chainlink Keepers自动化你的智能合约是多么容易了,你可以开始集成Keepers并解锁大量的用例,如DEX限价单、跨链NFT铸造、重新调整和重新平衡通证等等。
比推快讯
更多 >>- 内地虚拟币骗局杀到香港,逾百港人受骗警拘 4 人
- 财新:钱峰雷与旗下恒峰国际等多家公司涉嫌在⾹港向公众销售未经⾹港证监会认可的集体投资计划
- 当前主流 CEX、DEX 资金费率显示市场回归中性态势
- 过去两周超 30 万枚以太坊从交易平台中被提出
- 港媒:某本地女子投资加密货币 10 年仍遭连环诈骗,损失高达 400 万港元
- ETH/BTC 汇率上涨突破 0.03,近三月涨幅达 70%
- AguilaTrades 以太坊空单浮盈超 150 万美元,比特币空单浮亏 35 万美元
- 消息人士:香港此次稳定币发行商牌照将以类似邀请制进行
- FTX 债权人代表:巴哈马或受英国/欧盟规则的约束,需额外批准
- 过去 24 小时 CEX 净流出 3,713.31 枚比特币
- OOKC 向 Giants Protocol 战略投资 500 万美元,以支持其全球 RWA 扩张
- Camp Network 首次首尔线下见面会将于 7 月 26 日举办
- 某巨鲸/机构近 2 日买入 18,557 枚 ETH,均价 3,451 美元
- 数据:过去 7 天 USDC 流通量约增加 18 亿枚
- ZachXBT 质疑 Pepe 创作者 NFT 项目行动迟缓,黑客已将资金转入 MEXC
- 首轮质押破 7400 万,Lair Finance 强势启动 AVS Round 2
- 某鲸鱼地址昨日顶部平仓 DOGE 多单,今日再次抄底做多
- Perena 推出合规稳定币 USD',全面适配《GENIUS 法案》要求
- Binance:至少拥有 160 分的 Alpha 用户可申领 900 枚 ESPORTS 空投
- Binance 新一期 Alpha(TAKER)空投数据:77%账户已卖出,单号收益 44 美元
- 以太坊现货 ETF 昨日总净流入 4.02 亿美元,持续 11 日净流入
- James Wynn:错过了做空机会,将等到 PUMP 完全触底再考虑入场
- 7743 枚 BTC 从 Coinbase 转出,价值超 9.16 亿美元
- James Wynn 转空为多开设 25 倍 ETH 多单,仓位价值 1460 万美元
- 某鲸鱼地址过去 10 分钟买入 4772 枚 ETH,均价 3581 美元
- RootData:ALT 将于一周后解锁价值约 867 万美元的代币
- World Liberty Financial 战略购入约 40,000 美元等值 BANK,用于支持 Lorenzo Protocol 项目发展
- XION 上线 Kaito Yapper 排行榜,开放 10 万枚 XION 代币奖励池
- 21Shares 向美 SEC 申请两只加密指数 ETF
- 两个新建地址从 Kraken 提取 22,434 枚 ETH,价值约 7.95 亿美元
- Plasma:XPL 公售启动仅 1 天,社区已超额认购 211%
- 数据:过去 24 小时全网爆仓 8.19 亿美元,多单爆仓 5.46 亿美元,空单爆仓 2.73 亿美元
- 2 个新建地址共计从 Binance 提币 1000 枚 BTC
- 巨鲸 AguilaTrades 持仓总市值达 2.94 亿美元,ETH 空单大幅浮盈
- 5.06 万枚 ETH 于 6 小时前从 HTX 流入至 Binance
- James Wynn:BTC.D 回升,山寨币季节或将暂缓
- 2 个新钱包从 Kraken 提取了 24,252 枚 ETH,价值约 8609 万美元
- 数据:非营利性开发组织 Argot Collective 在 6 小时前再次出售 600 枚 ETH
- SharpLink Gaming 在 2 小时前再度购进 4904 枚 ETH,目前累计浮盈 2.6 亿美元
- 富达 FETH 昨日净流出 4540 万美元,FBTC 净流出 1790 万美元
- 某巨鲸/机构 10 小时前再度买入 19,550 枚 ETH,目前持仓约浮盈 4134 万美元
- 加密恐慌与贪婪指数升至 74,市场贪婪情绪维持
- Tether CEO:将确保 USDT 符合《GENIUS 法案》规定,但仍计划推出专门针对美国的稳定币
- SharpLink Gaming 再增持 19,084 枚 ETH
- 美股收盘:三大股指涨跌不一,Circle 跌 4.71%,Coinbase 涨 2.2%
- Sharplink Gaming 计划发行 50 亿美元股票以购入 ETH
- Ether.fi 将上线 HyperLiquid 生态,推出 beHYPE 质押代币
- 黑客持续侦察 TeleMessage 漏洞,已有多起攻击尝试
- 分析:GENIUS 法案禁收益型稳定币,将利好以太坊 DeFi
- 加密交易所 Bullish 向纽交所申请上市
比推专栏
更多 >>观点
比推热门文章
- 内地虚拟币骗局杀到香港,逾百港人受骗警拘 4 人
- 财新:钱峰雷与旗下恒峰国际等多家公司涉嫌在⾹港向公众销售未经⾹港证监会认可的集体投资计划
- 当前主流 CEX、DEX 资金费率显示市场回归中性态势
- 过去两周超 30 万枚以太坊从交易平台中被提出
- 港媒:某本地女子投资加密货币 10 年仍遭连环诈骗,损失高达 400 万港元
- ETH/BTC 汇率上涨突破 0.03,近三月涨幅达 70%
- AguilaTrades 以太坊空单浮盈超 150 万美元,比特币空单浮亏 35 万美元
- 消息人士:香港此次稳定币发行商牌照将以类似邀请制进行
- FTX 债权人代表:巴哈马或受英国/欧盟规则的约束,需额外批准
- 过去 24 小时 CEX 净流出 3,713.31 枚比特币