(15)Chainlink Automation(定时任务) 详细介绍及用法

Chainlink Automation 详细介绍

1. 什么是 Chainlink Automation?

Chainlink Automation 是 Chainlink 提供的一个去中心化服务,专门用于自动化执行智能合约的链上操作。它允许开发者基于时间或特定条件(如链上或链下事件)触发智能合约的功能,而无需手动干预。

Chainlink Automation 的核心价值在于:

  • 去中心化执行:由多个 Chainlink 节点共同完成任务,避免单点故障。
  • 高度可靠:基于 Chainlink 的预言机网络,确保任务执行的准确性和安全性。
  • 灵活触发:支持基于时间、区块高度、链下事件等多种触发条件。

2. Chainlink Automation 的核心组件

2.1 任务(Job)

任务是 Chainlink Automation 的核心概念。一个任务定义了:

  • 触发条件:何时执行任务(例如,每隔 24 小时,或当某个链上事件发生时)。
  • 执行逻辑:调用哪个智能合约的哪个函数,并传递什么参数。
2.2 触发器(Trigger)

触发器是任务的启动条件,分为两种类型:

  • 基于时间的触发器:例如,每隔一定时间(如每天、每小时)执行一次。
  • 基于事件的触发器:例如,当某个链上状态(如价格波动)或链下事件(如 API 数据变化)满足条件时触发。
2.3 执行节点(Execution Nodes)

Chainlink 的去中心化节点网络负责监控触发条件,并在条件满足时执行任务。这些节点会验证执行结果,确保一致性和正确性。


3. Chainlink Automation 的工作原理

  1. 任务注册

    • 开发者在 Chainlink Automation 上注册一个任务,定义触发条件和执行逻辑。
    • 任务可以绑定到一个或多个智能合约。
  2. 监控触发条件

    • Chainlink 节点持续监控区块链状态和链下数据,等待触发条件满足。
  3. 任务执行

    • 当触发条件满足时,Chainlink 节点会调用智能合约的指定函数,并传递所需参数。
  4. 结果验证

    • 多个 Chainlink 节点会验证执行结果,确保一致性和正确性。
    • 验证通过后,结果会被写入区块链。

4. Chainlink Automation 的使用场景

4.1 DeFi(去中心化金融)
  • 自动清算:当抵押物价值低于阈值时,自动触发清算。
  • 利率更新:定期更新借贷平台的利率。
  • 奖励分配:自动发放流动性挖矿奖励。
4.2 NFT(非同质化代币)
  • 空投:根据条件自动向用户发放 NFT。
  • 元数据更新:定期更新 NFT 的元数据。
  • 版税分配:自动分配 NFT 交易的版税。
4.3 游戏
  • 状态更新:定期更新游戏内状态(如玩家等级、奖励)。
  • 事件触发:当游戏内事件发生时,自动执行相关操作。
4.4 供应链
  • 物流更新:根据物流状态自动更新智能合约。
  • 支付触发:当货物到达目的地时,自动触发支付。

5. 如何使用 Chainlink Automation

以下是使用 Chainlink Automation 的详细步骤:

5.1 准备工作
  1. 安装依赖

    • 使用 Hardhat 或 Truffle 等开发框架。
    • 安装 Chainlink 的智能合约库:
      npm install @chainlink/contracts
      
  2. 获取测试网 LINK 代币

    • 在 Chainlink 测试网(如 Kovan 或 Goerli)上获取 LINK 代币,用于支付 Automation 费用。
5.2 编写智能合约

以下是一个简单的智能合约示例,用于定期更新一个状态变量:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;import "@chainlink/contracts/src/v0.8/AutomationCompatible.sol";contract Counter is AutomationCompatibleInterface {uint public counter;uint public interval;uint public lastTimeStamp;constructor(uint updateInterval) {interval = updateInterval;lastTimeStamp = block.timestamp;}function checkUpkeep(bytes calldata /* checkData */) external view override returns (bool upkeepNeeded, bytes memory /* performData */) {upkeepNeeded = (block.timestamp - lastTimeStamp) > interval;}function performUpkeep(bytes calldata /* performData */) external override {require((block.timestamp - lastTimeStamp) > interval, "Not enough time passed");lastTimeStamp = block.timestamp;counter++;}
}
5.3 部署合约
  1. 使用 Hardhat 或 Truffle 部署合约到测试网。
  2. 记录合约地址。
5.4 注册 Automation 任务
  1. 登录 Chainlink Automation 控制台。
  2. 创建一个新任务:
    • 设置触发条件(例如,每隔 24 小时)。
    • 绑定到部署的合约地址。
    • 指定调用的函数(如 performUpkeep)。
  3. 支付 LINK 代币作为任务执行的费用。
5.5 监控任务
  • 在 Chainlink Automation 控制台中查看任务状态和执行历史。
  • 确保任务按预期执行。

6. 示例:DeFi 自动清算

以下是一个 DeFi 自动清算的示例:

6.1 智能合约
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;import "@chainlink/contracts/src/v0.8/AutomationCompatible.sol";contract AutoLiquidation is AutomationCompatibleInterface {mapping(address => uint) public collateral;mapping(address => uint) public debt;uint public liquidationThreshold = 150; // 150%function checkUpkeep(bytes calldata /* checkData */) external view override returns (bool upkeepNeeded, bytes memory /* performData */) {address[] memory users = getAllUsers();for (uint i = 0; i < users.length; i++) {uint collateralValue = getCollateralValue(users[i]);uint debtValue = debt[users[i]];if (collateralValue * 100 / debtValue < liquidationThreshold) {upkeepNeeded = true;break;}}}function performUpkeep(bytes calldata /* performData */) external override {address[] memory users = getAllUsers();for (uint i = 0; i < users.length; i++) {uint collateralValue = getCollateralValue(users[i]);uint debtValue = debt[users[i]];if (collateralValue * 100 / debtValue < liquidationThreshold) {liquidate(users[i]);}}}function liquidate(address user) internal {// 清算逻辑}function getAllUsers() internal pure returns (address[] memory) {// 返回所有用户地址}function getCollateralValue(address user) internal view returns (uint) {// 返回抵押物价值}
}
6.2 注册任务
  • 在 Chainlink Automation 控制台中注册任务,设置触发条件为“当抵押物价值低于阈值时”。
  • 绑定到 AutoLiquidation 合约的 performUpkeep 函数。

7. 总结

Chainlink Automation 是一个强大的工具,可以帮助开发者自动化智能合约的执行。通过去中心化的方式,它确保了任务的高效、可靠和安全执行。无论是 DeFi、NFT 还是供应链管理,Chainlink Automation 都能显著提升智能合约的自动化能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

校验收货地址是否超出配送范围实战3(day09)

优化用户下单功能&#xff0c;加入校验逻辑&#xff0c;如果用户的收货地址距离商家门店超出配送范围&#xff08;配送范围为5公里内&#xff09;&#xff0c;则下单失败。 提示&#xff1a; ​ 1. 基于百度地图开放平台实现&#xff08;https://lbsyun.baidu.com/&#xff09…

Linux系统下速通stm32的clion开发环境配置

陆陆续续搞这个已经很久了。 因为自己新电脑是linux系统无法使用keil&#xff0c;一开始想使用vscode里的eide但感觉不太好用&#xff1b;后面想直接使用cudeide但又不想妥协&#xff0c;想趁着这个机会把linux上的其他单片机开发配置也搞明白&#xff1b;而且非常想搞懂cmake…

leetcode_3092. 最高频率的 ID

https://leetcode.cn/problems/most-frequent-ids/description/ 看到这个数据范围 最极端情况 如果nums全为一个数 并且数量取到最大 那么范围是10的10次方 需要longlong储存 这题主要运用了哈希表配合multiset实现 哈希表主要用作存储某个数的出现次数 mst则用于记录出现次…

【深度学习】 自动微分

自动微分 正如上节所说&#xff0c;求导是几乎所有深度学习优化算法的关键步骤。 虽然求导的计算很简单&#xff0c;只需要一些基本的微积分。 但对于复杂的模型&#xff0c;手工进行更新是一件很痛苦的事情&#xff08;而且经常容易出错&#xff09;。 深度学习框架通过自动…

如何把jupyter的一个.ipynb文件的多个单元格cell合并为1个cell

1 jupyter的一个.ipynb文件的多个单元格cell合并为1个cell 步骤 1&#xff1a;打开 your_notebook.ipynb 文件 启动 Jupyter Notebook。 导航到你的工作目录&#xff08;例如 F:\main&#xff09;。 打开 your_notebook.ipynb 文件。 步骤 2&#xff1a;选择所有单元格 点击…

集成Sleuth实现链路追踪

文章目录 1.新增sunrays-common-cloud模块1.在sunrays-framework下创建2.pom.xml3.查看是否被sunrays-framework管理 2.创建common-cloud-sleuth-starter1.目录结构2.pom.xml3.sunrays-dependencies指定cloud版本4.SleuthAutoConfiguration.java5.spring.factories 3.创建commo…

WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建

WPF基础 | 初探 WPF&#xff1a;理解其核心架构与开发环境搭建 一、前言二、WPF 核心架构2.1 核心组件2.2 布局系统2.3 数据绑定机制2.4 事件处理机制 三、WPF 开发环境搭建3.1 安装 Visual Studio3.2 创建第一个 WPF 应用程序 结束语优质源码分享 WPF基础 | 初探 WPF&#xff…

字节跳动自研HTTP开源框架Hertz简介附使用示例

字节跳动自研 HTTP 框架 Hertz Hertz 是字节跳动自研的高性能 HTTP 框架&#xff0c;专为高并发、低延迟的场景设计。它基于 Go 语言开发&#xff0c;结合了字节跳动在微服务架构中的实践经验&#xff0c;旨在提供更高效的 HTTP 服务开发体验。 1. 背景介绍 随着字节跳动业务…

实战演示:利用ChatGPT高效撰写论文

在当今学术界&#xff0c;撰写论文是一项必不可少的技能。然而&#xff0c;许多研究人员和学生在写作过程中常常感到困惑和压力。幸运的是&#xff0c;人工智能的快速发展为我们提供了新的工具&#xff0c;其中ChatGPT便是一个优秀的选择。本文将通过易创AI创作平台&#xff0c…

在线可编辑Excel

1. Handsontable 特点&#xff1a; 提供了类似 Excel 的表格编辑体验&#xff0c;包括单元格样式、公式计算、数据验证等功能。 支持多种插件&#xff0c;如筛选、排序、合并单元格等。 轻量级且易于集成到现有项目中。 具备强大的自定义能力&#xff0c;可以调整外观和行为…

spring-springboot -springcloud

目录 spring: 动态代理: spring的生命周期(bean的生命周期): SpringMvc的生命周期: SpringBoot: 自动装配: 自动装配流程: Spring中常用的注解&#xff1a; Spring Boot中常用的注解&#xff1a; SpringCloud: 1. 注册中心: 2. gateway(网关): 3. Ribbon(负载均…

DAY9,递归实现计算 :1 + 1/3 - 1/5 + 1/7 - 1/9 + .... 1/n 的值

题目 用递归实现计算 :1 1/3 - 1/5 1/7 - 1/9 .... 1/n 的值&#xff0c;n通过键盘输入 思路 递进阶段&#xff1a;n、...... 、9、7、5、3、1 函数出口&#xff1a;递进到1 开始返回&#xff1b;函数返回值视为“总和” 回归阶段&#xff1a;对当前n取倒数&#xff1b;“总…

Formality:不可读(unread)的概念

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482https://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中有时会遇到不可读(unread)这个概念&#xff0c;本文就将对此…

【27】Word:徐雅雯-艺术史文章❗

目录 题目​ NO1.2 NO3 NO4 NO5 NO6.7 NO8.9 NO10.11 注意&#xff1a;修改样式的字体颜色/字号&#xff0c;若中英文一致&#xff0c;选择所有脚本。格式相似的文本→检查多选/漏选格式刷F4重复上一步操作请❗每一步检查和保存 题目 NO1.2 F12另存为布局→行号布局…

关于ARM和汇编语言

一图流 ARM 计算机组成 输入设备 输出设备 存储设备 运算器 控制器 处理器读取内存程序执行的过程 取指阶段&#xff1a;控制器器通过地址总线向存储器发送想要获取的指令的地址编号&#xff0c;存储器将指定的指令发送给处理器 译码阶段&#xff1a;控制器对指令进行分…

PyTorch使用教程(9)-使用profiler进行模型性能分析

1、简介 PyTorch Profiler是一个内置的性能分析工具&#xff0c;可以帮助开发者定位计算资源&#xff08;如CPU、GPU&#xff09;的瓶颈&#xff0c;从而更好地优化PyTorch程序。通过捕获和分析GPU的计算、内存和带宽利用情况&#xff0c;能够有效识别并解决性能瓶颈。 2、原…

2025-01-22 Unity Editor 1 —— MenuItem 入门

文章目录 1 Editor 文件夹2 MenuItem3 使用示例3.1 打开网址3.2 打开文件夹3.3 Menu Toggle3.4 Menu 代码复用3.5 MenuItem 激活与失活4 代码示例 1 Editor 文件夹 ​ Editor 文件夹是 Unity 中的特殊文件夹&#xff0c;Unity 中所有编辑器相关的脚本都需要放置在其中&#xf…

docker 安装 mysql 详解

在平常的开发工作中&#xff0c;我们经常需要用到 mysql 数据库。那么在docker容器中&#xff0c;应该怎么安装mysql数据库呢。简单来说&#xff0c;第一步&#xff1a;拉取镜像&#xff1b;第二步&#xff1a;创建挂载目录并设置 my.conf&#xff1b;第三步&#xff1a;启动容…

linux-samba服务配置与应用

1.了解samba的配置文件 2.熟悉samba服务的实例 以前我们在windows上共享文件的话&#xff0c;只需右击要共享的文件夹&#xff0c;然后选择共享相关的选项设置即可&#xff0c;然后如何实现windows和linux的文件共享呢&#xff0c;这就涉及到了samba服务&#xff0c;这个软件…

Spring Boot 整合 Redis 步骤详解

文章目录 1. 引言2. 添加依赖3. 配置 Redis 连接信息4. 创建 Redis 操作服务类5. 使用 RedisTemplate 或 ReactiveRedisTemplate6. 测试 Redis 功能7. 注意事项8. 总结 Redis 是一个高性能的键值存储系统&#xff0c;常用于缓存、消息队列等多种场景。将 Redis 与 Spring Boot …