在智能合约自动化出现之前,开发人员使用集中式服务器来实现各种手动流程,例如基于时间的执行、DevOps任务、链下计算和清算。
手动流程增加了智能合约的安全风险,因为它们给分散的应用程序引入了中心故障点。此外,通常由手动流程导致的网络拥塞可能会延迟交易的执行,从而使用户资金面临风险。
智能合约自动化使我们能够自动化多个Web3功能,例如收益农业、跨链NFT铸造、游戏等。
现在我们对智能合约自动化有了一个概述,让我们回顾一些流行的智能合约自动化工具并了解它们是如何工作的。
链环守护者
Chainlink Keepers是一款智能合约自动化工具,可在以太坊、BNB链和Polygon等多个区块链上运行。Glary Utilities pro专业解锁版,Windows全能系统优化清理增强工具,一键优化!该工具使外部拥有的账户能够对智能合约中的预定条件进行检查,然后根据时间间隔触发和执行交易。
例如,开发人员可以通过监控Keepers网络的状况来注册智能合约以进行自动维护。随后,节点在Keepers网络上执行链下计算,直到满足智能合约中定义的条件。
如果不满足智能合约条件,则计算返回值false,节点继续工作。如果满足智能合约条件,则计算返回值true,并且Keepers网络触发合约执行。
Chainlink Keepers提供了许多好处:
易于集成:Chainlink Keepers的用户友好文档包含操作指南,可帮助开发人员加快集成速度
安全性和可靠性:Chainlink Keepers的去中心化特性通过降低与中心化服务器相关的安全风险,为应用程序提供了一个安全的框架。Chainlink Keepers使用透明池进行运营,有助于在开发人员和DAO之间建立信任
成本效率:Chainlink Keepers的基础设施提供了优化成本并提高与执行智能合约相关的Gas费用稳定性的功能
提高生产力:Chainlink Keepers处理对智能合约进行检查的链下计算,让开发人员有更多时间专注于构建DApp
演示:使用Chainlink Keepers自动化智能合约
让我们研究如何使用Chainlink Keepers自动化智能合约。我们将使用基于Remix在线IDE构建并部署到Rinkeby测试网络的Solidity合约。网页更新提醒插件,监控任何网页可自定义规则通知,监控并记录网页内容变化!智能合约将实现Chainlink Keepers GitHub存储库中定义的接口。
为了与Chainlink Keepers兼容,我们的智能合约必须包含以下两种方法:
checkUpKeep():此方法对基于时间间隔执行的智能合约进行链下计算;该方法返回一个布尔值,告诉网络是否需要维护
performUpKeep():该方法接受方法返回的消息checkUpKeep()作为参数。接下来,它会触发Chainlink Keepers对智能合约进行维护。然后,它执行一些链上计算来重新验证checkUpKeep()方法的结果,以确认需要维护
首先,添加以下代码以在您的Remix IDE中创建一个简单的计数器合约:
//SPDX-License-Identifier:MIT
pragma solidity^0.8.7;
contract Counter{
uint public counter;
uint public immutable interval;
uint public lastTimeStamp;
constructor(uint updateInterval){
interval=updateInterval;
lastTimeStamp=block.timestamp;
counter=0;
}
function checkUpkeep(bytes calldata/checkData/)external view 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{
//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
}
}
该合约有一个公共变量counter,当新区块与最后一个区块之间的差异大于一个区间时,该变量会加一。然后,它实现了两种与Keepers兼容的方法。