智能合约不是自动执行的;它们的执行完全取决于在区块链网络上进行的链上交易,作为触发函数调用的行动号召。然而,手动执行智能合约也有缺点,例如潜在的安全风险、不必要的延迟以及人为错误的可能性。

本文探讨了智能合约自动化的核心概念,并回顾了各种智能合约自动化工具的优缺点。此外,本指南还演示了流行的智能合约自动化工具使用的流程:Chainlink Keepers、Gelato Network和OpenZeppelin Defender。

跳跃前进:

  • 先决条件

  • 了解智能合约自动化

  • 链环守护者

    • 演示:使用 Chainlink Keepers 自动化智能合约

  • 冰淇淋网络

    • 演示:使用 Gelato 自动化智能合约

  • OpenZeppelin Defender

    • 演示:使用 OpenZeppelin Defender 自动化智能合约

  • 使用 Chainlink Keepers、Gelato 和 OpenZeppelin Defender 的优缺点

先决条件

要继续阅读本文,请确保您具备以下条件:

  • 已安装MetaMask

  • OpenZeppelin Defender帐户设置

  • 混音在线IDE

  • Rinkeby测试网络(或Goerli)

  • Solidity和 JavaScript 编程语言的基础知识

了解智能合约自动化

在智能合约自动化出现之前,开发人员使用集中式服务器来实现各种手动流程,例如基于时间的执行、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 functionif ((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 兼容的方法。

现在,导航到Remix 菜单按钮(从顶部开始的第三个按钮)并单击Compile按钮(带有绿色验证标记)来编译合约:

要继续,您需要使用一些ERC-677 LINK 代币来为您的维护提供资金。使用 Faucets 连接您的 Rinkeby 测试网络并在 chainlink 上获得一些测试网络 LINK 代币:

选择Injected Web3作为环境,并选择Rinkeby 测试网络。苹果版ios追剧看片神器,伪装上架支持投屏画质最低1080P,免费秒播放高清无广告!然后,点击发送请求,将 20 个测试 LINK 和 0.1 个测试 ETH 发送到您的钱包。

接下来,通过传递 30 秒作为间隔来部署合约。单击Deploy后,MetaMask 应该会打开,要求您确认交易。


超过 20 万开发人员使用 LogRocket 来创造更好的数字体验了解更多 →


在您的 MetaMask 钱包中单击确认:

现在您可以查看已部署的合约地址:

接下来,导航到 Chainlink Keepers 并通过选择Time-based trigger 选项并输入部署的智能合约的地址来注册部署的智能合约:

从 Remix IDE 复制合约的 ABI 并将其粘贴到ABI字段中:

现在,在Function Input字段中输入您的合约地址:

指定 Chainlink Keepers 维护您的智能合约的时间表。在Cron 表达式字段中,指示应每 15 分钟执行一次维护。

接下来,通过在以下字段中输入适当的信息来提供维护的详细信息:维护名称、气体限制、 LINK 代币的起始余额和您的电子邮件地址。然后,点击注册维护:

而已!Chainlink Keepers 已成功注册您的智能合约以进行自动维护。

冰淇淋网络

Gelato Network 是一个去中心化的机器人网络,可在所有 EVM 区块链上自动执行智能合约。Gelato 易于使用的架构为 DeFi 应用程序提供了可靠的接口。

演示:使用 Gelato 自动化智能合约

要使用 Gelato Network 自动执行智能合约,请执行以下步骤:

  1. 在实现计数器的 Remix IDE 上创建新的智能合约

  2. 编译并部署智能合约到 Rinkeby 测试网络

  3. 将您的 MetaMask 钱包连接到 Gelato 网络并进行存款

  4. 使用已部署的合约地址和一些配置在 Gelato 上创建一个任务

让我们开始吧!

在您的 Remix IDE 上,创建一个gelato文件夹,其中包含一个GelatoContract.sol文件,该文件定义了一个函数,该函数根据以下条件递增一个计数器变量:

// 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 incrementCounter() external {if ((block.timestamp - lastTimeStamp) > interval ) {lastTimeStamp = block.timestamp;counter = counter + 1;}}
}

编译合约并导航到Gelato Network。从顶部右侧下拉列表中选择 Rinkeby 网络。然后,连接你的钱包:

接下来,点击Funds并添加 0.1 ETH 的存款:

单击“存款”后,MetaMask 将打开。单击确认,您的屏幕上会出现一条消息,指示交易成功。

接下来,一些 ETH 将被添加到您的余额中。

现在,返回 Remix IDE 并以 30 秒的间隔在 Rinkeby 测试网络上部署您的合约。


来自 LogRocket 的更多精彩文章:

  • 不要错过来自 LogRocket 的精选时事通讯The Replay

  • 了解LogRocket 的 Galileo 如何消除噪音以主动解决应用程序中的问题

  • 使用 React 的 useEffect优化应用程序的性能

  • 在多个 Node 版本之间切换

  • 了解如何使用 AnimXYZ 为您的 React 应用程序制作动画

  • 探索 Tauri,一个用于构建二进制文件的新框架

  • 比较NestJS 与 Express.js


通过传递已部署的合约地址并将合约的 ABI 粘贴到ABI字段中来创建新任务。

然后,incrementCounter()从要自动下拉的功能中选择功能。

为 Gelato 选择五分钟的频率来自动执行您的智能合约。然后,选中立即开始复选框以指示 Gelato 在您创建任务后立即执行您的智能合约。

选择任务的支付方式,点击创建任务,在 MetaMask 上确认您的交易。

在您的 Remix IDE 上,如果您单击counter,您会注意到它增加了 1 并且将继续每五分钟增加一次:

好的,您已成功在 Gelato 上为您的智能合约设置自动化!

OpenZeppelin Defender

OpenZeppelin 是一种用于构建安全分散应用程序的流行工具。Defender 是一款 OpenZeppelin 产品,旨在实现安全的智能合约自动化,并支持第 1 层区块链、第 2 层区块链和侧链。

OpenZeppelin Defender 提供以下与智能合约自动化相关的功能:

  • 管理员:启用智能合约流程的透明管理,例如访问控制(对资产的管理权限)、升级(修复遇到的错误或应用新服务)和暂停(使用暂停功能)

  • Relay:允许创建 Relayers(外部拥有的账户),轻松保护您的私有 API 密钥,用于签署、管理(发送)您的交易,以及执行汽油价格上限等政策

  • Autotasks:连接到 Relayers,允许在 JavaScript 中编写和调度代码脚本,这些脚本将在外部 Web API 或第三方服务的帮助下定期在智能合约上运行

  • Sentinel:监控您的智能合约的交易,并根据指定的条件、功能或事件提供有关交易的通知

  • 顾问:帮助您了解最新的安全最佳实践,包括实施智能合约开发、监控、操作和测试的安全程序

演示:使用 OpenZeppelin Defender 自动化智能合约

现在,让我们使用上述功能通过 OpenZeppelin Defender 自动化智能合约。

首先,在您的 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 incrementCounter() external {if ((block.timestamp - lastTimeStamp) > interval ) {lastTimeStamp = block.timestamp;counter = counter + 1;}}
}

将合约部署到 Rinkeby 测试网络并在 MetaMask 上确认您的交易。然后,执行以下步骤:

第 1 步:创建中继器

导航到OpenZeppelin Defender Relay 仪表板并通过提供Name并选择Network创建您的 Relayer :

创建中继器后,您的 ETH 地址、API 密钥和密钥将显示在您的屏幕上。复制您的密钥,将其保存在安全的地方,然后复制您的 ETH 地址。

接下来,通过将您的地址粘贴到Rinkeby 水龙头中,用一些 ETH 为您的中继者地址提供资金。然后,请参阅您的 Relayer 以确认 ETH 已发送到您的 OpenZepplin 帐户:

第 2 步:创建自动任务

接下来,在Defender Autotask 仪表板中创建一个 Autotask ,它将连接到您刚刚创建的 Relayer。

单击添加第一个自动任务;您可以选择通过计划或 HTTP 请求触发任务。对于此演示,选择Schedule ,为Runs Every timeframe选择两分钟,然后在Connect to a relayer 字段中添加您的 Relayer 名称。

现在,传递 JavaScript 代码片段,它使用ethers.js和defender-relay-client来导出 aDefenderRelaySigner并DefenderRelayProvider用于签名和发送交易。

以下代码片段调用并执行incrementCounter()您的智能合约中定义的函数:

const { DefenderRelaySigner, DefenderRelayProvider } = require('defender-relay-client');
const { ethers } = require("ethers");
const ABI = [`function incrementCounter() external`];
​
const ADDRESS = '0xC1C23C07eC405e7dfD0Cc4B12b1883b6638FB077'
​
async function main(signer) {const contract = new ethers.Contract(ADDRESS, ABI, signer);await contract.incrementCounter();console.log('Incremented counter by 1');
}
​
exports.handler = async function(params) {const provider = new DefenderRelayProvider(params);const signer = new DefenderRelaySigner(params, provider, { speed: 'fast' })console.log(`Using relayer ${await signer.getAddress()}`);await main(signer);
}openzepp

点击自动任务。然后,将上述代码段复制并粘贴到仪表板的代码部分:

单击创建按钮,Autotask 将incrementFunction()每隔两分钟自动执行一次,并使用您的中继器中的 ETH 余额。

Autotask 开始运行后,检查 Remix IDE 上的计数器。两分钟后,它应该增加一。

使用 Chainlink Keepers、Gelato 和 OpenZeppelin Defender 的优缺点

Chainlink Keepers、Gelato Network 和 OpenZeppelin Defender 都是智能合约自动化的不错选择。在为您的项目选择智能合约自动化工具时,请记住以下一些权衡。

智能合约自动化工具 优点 缺点
链环守护者 – 在多个区块链网络上运行 – 提供全面的文档 – 需要 LINK 代币 (ERC-677) 来支付网络 – 智能合约必须与 Chainlink Keepers 兼容 – LINK 代币使用 ERC-677 代币标准,不能直接在 BNB 链和 Polygon 等非以太坊区块链上使用(MATIC)直到它们被桥接和交换
冰淇淋网络 – 提供两种支付智能合约自动化的选项 – 支持众多区块链网络 – 易于使用的架构 - 任务创建后无法编辑
OpenZeppelin Defender – 支持多个区块链网络 – 通过指定的通知模式(例如电子邮件)提供有关交易的快速通知 – 提供一种透明的方式来轻松管理任务 – 与其他智能合约自动化工具相比,使用更复杂

结论

启用许多智能合约功能的自动化可以节省时间并提高安全性。在本文中,我们回顾了一些流行的智能合约自动化工具(Chainlink Keepers、Gelato Network 和 OpenZeppelin Defender),讨论了它们的优缺点,并演示了如何使用每种工具自动化智能合约

智能合约自动化工具:示例指南相关推荐

  1. 智能合约扫描工具Mythril、Solium(新版改名ethlint)、Slither

    差生文具多,菜鸟琢磨工具多. Mythril 简介: Mythril是一个以太坊官方推荐的智能合约安全分析工具,使用符合执行来检测智能合约中的各种安全漏洞.在remix和truffle等IDE里都有集 ...

  2. 以太坊智能合约 —— 最佳安全开发指南

    原文出处: https://github.com/ConsenSys/smart-contract-best-practices/blob/master/README-zh.md#%E4%BB%A5% ...

  3. slither——区块链智能合约静态分析工具

    一.概述 Slither是一个用Python 3编写的智能合约静态分析框架(源码),提供如下功能: 自动化漏洞检测.提供超30多项的漏洞检查模型,模型列表详见:https://github.com/c ...

  4. AE Studio:Aeternity生态未来的智能合约开发工具

    你需要如何开始进行开发呢?只需要保持好奇心和学习aeternity生态系统的热情即可. æternity加密基金会宣布推出一款全新简单易用,支持Sophia智能合约语言的成开发环境(Web-IDE). ...

  5. 以太坊智能合约Hello World示例程序

    简介 以太坊(Ethereum)是一提供个智能合约(smart contract)功能的公共区块链(BlockChain)平台. 本文介绍了一个简单的以太坊智能合约的开发过程. 开发环境 在以太坊上开 ...

  6. 什么是智能合约?新手入门指南

    智能合约,也称为数字合约,在计算机网络中使用区块链技术来履行预编程的合约当合同的条件得到满足时,智能合同就会执行,例如向合同的一方发送付款. 智能合约之所以具有吸引力有多种原因: 不信任.由于智能合约 ...

  7. 分享实录|区块链技术与智能合约入门(开发实例)

    2019独角兽企业重金招聘Python工程师标准>>> 1 什么是区块链 1.1白话讲解区块链 现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链? 前几天和 ...

  8. BCH智能合约进程持续推进 新方案接连被推出

    BCH的智能合约方案呈现出百花盛开之势. 自今年5月份比特币现金升级以来,BCH将智能合约作为其发展的一个分支.在过去的这几个月中,BCH社区中已经发布了很多智能合约的方案,如虫洞Wormhole,B ...

  9. 这些智能合约漏洞,可能会影响你的账户安全!

    摘要:区块链联盟链智能合约形式化验证揭秘,解释了我们为什么要对区块链上的智能合约进行形式化验证,以及形式化验证的分类和业界针对每种分类所推出的形式化验证工具,最后作者描述了一下目前形式化验证的种种方法 ...

最新文章

  1. html5小趣味知识点系列(一)autofocus
  2. tensorflow cuda 对应版本
  3. python sanic加速_python微服务sanic 使用异步zipkin(2) - 一步步创建Sanic插件: sanic-zipin...
  4. MySQL锁阻塞分析
  5. Windows 服务(附服务开发辅助工具)
  6. Spring Security 中取得 RememberMe 的 cookie 值
  7. PAT_B_1039_Java(20分)
  8. 全志A33-编译uboot
  9. 倦怠和枯燥_如何不断学习(不倦怠)
  10. java float什么类型数据类型_Java中的Float和double数据类型
  11. matlab图像分类器,[转载]两种图像分类算法和matlab源代码
  12. 怎么设置电脑屏幕一直亮着_电脑屏幕分辨率的调节方法
  13. 第Q题:聪明的木匠(队列解答)=======一位老木匠需要将一根长的木棒切成N段...
  14. Bootstarp daterangepicker 日期控件
  15. 中山c 语言培训中心,中山英语口语培训中心
  16. Web自动化漏洞检测工具:Xray
  17. ZNS : 解决传统SSD问题的高性能存储栈设计(fs-->io-->device)
  18. Liteos-A任务调度之OsTaskStackInit函数
  19. Sentinel-2 (哨兵2号) 数据批量下载教程 [python]
  20. 中科院总共有多少计算机研究所?

热门文章

  1. android百度地图定位文字表述,Android studio 百度地图开发(8)地图已标记POI点和搜索POI点的获取和利用...
  2. 二、《云原生 | Kubernetes篇》Kubernetes学习-K8S安装篇-Kubeadm安装高可用K8S集群--生产环境
  3. 03比对与 bam 文件格式
  4. 硬盘的Smart信息说明
  5. CSS浮动-5.1浮动比较重要-使用folat属性来设置元素的浮动-left-right-none
  6. Java程序占用 CPU 过高怎么排查
  7. 【UVM基础】两种启动 sequence 的方式
  8. dlut1216-位运算(异或)水题
  9. 什么是延时直播?自定义配置延时直播
  10. (详细)华为畅享6S DIG-AL00的usb调试模式在哪里打开的教程