> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tenderly.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Web3 Actions 简介

> 部署接入链上事件的自定义 JS/TS 函数，构建主动监控、无服务器 dapp 后端和服务集成。

<Note>
  Web3 Actions 在付费套餐中提供。如需为您的账户启用，请 [联系我们的销售团队](https://tenderly.co/contact-us)。
</Note>

### 什么是 Web3 Actions？

Web3 Actions 是面向智能合约和链上事件的可编程钩子。它们也可以充当您 dapp 的无服务器后端。Web3 Action 是运行在 Tenderly 基础设施上的普通 TypeScript/JavaScript 函数。

Web3 Action 附带用于持久化数据的键值存储，以及用于管理 API 密钥等敏感信息的 secrets 管理。您可以将 Web3 Actions 视为构建 Web3 版 IFTTT/Zapier 自动化的基础设施，让您能够将智能合约、链上事件、dapp 前端、API 和其他服务黏合在一起。

根据您定义的触发规则，外部链上或链下事件将触发您的 Web3 Action，您的 JavaScript/TypeScript 代码会立即处理该事件。Web3 Actions 可以以 **parallel 模式**（默认）或 **sequential 模式** 运行。

在 Parallel 模式下，actions 会以无特定顺序执行（与触发时间相比）。在 sequential 模式下，actions 会按照触发的先后顺序执行。

借助 Web3 Actions，您可以构建及时了解非平凡事件的系统。这样，您可以在 UX 和交互性方面改进 dapp，并通过您可以收集或通过通知分享的信息深度增强项目。

以下是一些 Web3 Actions 的用例，供您感受其可能性：

* **关注重要事务**：为合约发出的事件构建实时（近实时）、数据丰富的通知系统，通过 Discord、Slack 或 Telegram 发送消息，或将其写入数据库。
* **区块被打包时**：监控链上资产或 gas 价格的变化，构建自定义分析和自动化。然后将数据发送到外部 API。
* **暴露 webhook**：通过暴露处理用户输入的 webhook 增强您的 dapp。
* **周期性自动化**：使用 [Tenderly simulations](/simulator-ui/overview#simulating-a-transaction) 定期模拟事务执行，并将结果发送到 Slack，甚至将事务发送到链上以实现自动化。

如需更多灵感，请查看 [Web3 Actions 和不同事件的用例](/monitoring/web3-actions/introduction#use-cases-for-web3-actions-and-different-events) 部分。

<Note>
  Web3 Actions 受到限速。当前的 Web3 Actions 执行使用速率限制为
  每用户每 5 分钟 100 次执行。超出部分将被跳过。
</Note>

### 快速入门指南

按照这些指南快速开始通过浏览器或命令行工具构建 Web3 Actions。

设置 Web3 Actions 需要您为函数编写 JavaScript 代码。使用 Tenderly CLI 构建 Web3 Actions 时需要在 [yaml 配置文件](/monitoring/web3-actions/references/project-structure#the-tenderlyyaml-file-structure) 中定义触发器。所定义的触发器和 yaml 配置将成为您项目代码库不可分割的一部分。

* [通过 Tenderly Dashboard 部署 Web3 Actions](/monitoring/web3-actions/tutorials/deploy-via-dashboard)：了解如何直接在浏览器中设置并部署 Web3 Actions。
* [通过 Tenderly CLI 部署 Web3 Actions](/monitoring/web3-actions/tutorials/deploy-via-cli)：了解如何安装 Tenderly CLI，使用 YAML 配置定义触发器，并通过命令行设置和部署 Web3 Actions。

<Note>
  要设置由与事务相关的事件触发的 Web3 Actions，您必须使用基于
  CLI 的方式。
</Note>

<Card title="CLI 备忘单" href="" />

### 理解 Web3 Actions

简而言之，Web3 Actions 指示 Tenderly 监听特定的外部事件，并在事件发生时运行您的代码。

您需要提供与预定义外部事件相关的 **触发器规范**。Web3 Action 可以在每几个区块被打包时触发（block 触发器）、在相关事务被执行时触发（transaction 触发器）、通过它暴露的 webhook 触发（webhook 触发器），或者按特定时间间隔触发（periodic 触发器）。

当事件发生时，Tenderly 会执行您的自定义代码（函数）。此时，监控成为主动的。例如，您可以将数据发送到外部 API、写入数据库、通过消息服务发送推送通知或数据丰富的消息，甚至向区块链发送新的事务。

让我们熟悉 Web3 Actions 的三个核心元素： **函数**、 **事件** 和 **触发器规范**。

<Frame caption="Web3 Actions 的组成元素">
  <img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Tenderly_W3A_Illustration-03.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=680ed19b4222ae6781d7246518a5b4e9" alt="The elements of Web3 Actions" width="3433" height="1407" data-path="images/Tenderly_W3A_Illustration-03.webp" />
</Frame>

**函数（Functions）：** 您希望在指定的外部事件发生时执行的自定义 JavaScript 或 TypeScript 代码。函数可以直接在浏览器中通过 Tenderly Dashboard 编写，也可以使用 CLI（在 npm 项目中）编写。无论哪种情况，函数必须是定义文件的具名导出。

**事件（Events）：** 预定义外部事件的实例，您可以通过配置触发器来监听它们。函数将事件对象作为参数接收，使函数代码能够获取有关事件的数据。支持的事件包括：

* **Block：** 每次区块被打包时运行一个函数。
* **Periodic：** 按特定间隔运行一个函数。
* **Webhook：** 通过 HTTP 调用 Web3 Action。
* **Transaction：** 对匹配特定过滤条件的合约事务作出响应。

**触发器规范：** 描述 Web3 Action 应监听的外部事件的架构或模式。

在构建 Web3 Action 时，您需要将触发器规范关联到您希望运行的函数。当 Tenderly 检测到触发器中指定的事件时，就会执行您的自定义代码（函数）。

了解如何配置 [Web3 Action 函数、事件和触发器](/monitoring/web3-actions/references/functions-events-triggers)。

#### Web3 Actions 实用工具

**错误报告：** Tenderly Dashboard 中的概览页面，您可以在其中查找 Web3 Action 执行期间发生的错误和事件，并重新执行失败的执行。了解更多 [Web3 Actions 中的错误处理](/monitoring/web3-actions/references/error-reporting)。

**Secrets：** 存储敏感数据（例如 API 密钥）的位置，可从您的代码中调用。这些信息存储在 Tenderly Dashboard 中，且只能从代码中读取。

**Storage：** 项目范围的键值存储，可用于在连续运行之间持久化数据。您可以通过 Tenderly Dashboard 读写 Storage。了解如何 [管理 Secrets 和使用 Web3 Actions Storage](/monitoring/web3-actions/references/context)。

<Frame caption="Web3 Action Storage 和 Secrets">
  <img src="https://mintcdn.com/tenderly/XsEZlaGXYskrtN68/images/Tenderly_W3A_Illustration.webp?fit=max&auto=format&n=XsEZlaGXYskrtN68&q=85&s=e894cbe4c6c6c4f92002541ce8c8712a" alt="Web3 Action Storage and Secrets" width="3433" height="2363" data-path="images/Tenderly_W3A_Illustration.webp" />
</Frame>

#### 本地开发和测试支持

为了在编写 Web3 Action 函数时快速迭代，请了解 `@tenderly/actions-test` npm 包如何为 action 函数代码提供 [测试和本地开发支持](/monitoring/web3-actions/references/local-development)。

### Web3 Actions 和不同事件的用例

以下是每种事件类型的简要概览和示例用例。

🧾 **Transaction 事件：** 监听匹配给定条件的事务事件，例如成功或失败的事务、价值转账、事务使用的特定 gas 数量、发出的事件等等。了解 [Transaction 事件](/monitoring/web3-actions/references/functions-events-triggers#transaction-event)。

示例用例：

* 在事务发生时收集特定数据并将其存储在 Tenderly Storage 中。
* 通过 HTTP 将事务数据发送到其他（Web2 或 Web3）服务。
* 通过您的通信渠道（例如 Discord）发送有关想要或不希望的事务的数据丰富的通知。
* 从 Web3 Action 本身向链上发送事务。

🔢 **Block 事件：** 监听所选网络上区块被打包时的事件。了解 [Block 事件](/monitoring/web3-actions/references/functions-events-triggers#block-event)。

示例用例：

* 监控链上资产的变化以构建自定义分析和自动化。
* 每隔几个区块被打包监控一次智能合约的变化，并在满足条件时运行自动化。
* 监控 gas 价格并自动化您的操作。

🪝 **Webhook 事件：** 监听 **当** HTTP 请求发送到 Webhook URL 时的事件（action 暴露一个 WebHook）。了解 [Webhook 事件](/monitoring/web3-actions/references/functions-events-triggers#webhook-event)。

示例用例：

* 构建处理 dapp 用户输入的无服务器后端。
* 检索您其他 Web3 Actions 收集的有关事务或特定智能合约变化的数据。
* 您的 CI 可以调用 webhook 来清理或准备其他 Tenderly 资源，例如 [您用于测试的 Virtual Environments](/virtual-environments/overview)。

🕖 **Periodic 事件：** 监听表示您指定的时间间隔或 CRON 表达式所对应的事件。了解 [Periodic 事件](/monitoring/web3-actions/references/functions-events-triggers#periodic-event)。

示例用例：

* 定期发送带有从网络收集的自定义数据和/或在 Web3 Action Storage 中聚合数据的通知。
* 模拟 DAO 提案并向 Discord 发送投票提醒。
* 使用 Tenderly simulations 模拟事务执行，并将结果发送到 Slack，和/或将事务发送到链上以实现自动化。
* 定期清理 Tenderly 基础设施（例如，在继续 simulations 之前，将 Fork 指向 Mainnet 的最新区块）。

### Web3 Actions 教程

如果您希望获得完整的教程，这里有一个逐步指南，用于监控链上井字棋游戏，包含所有相关说明，从部署游戏合约到落子后显示棋盘。

<Card title="如何处理链上事件" href="" />

如需了解如何构建 Web3 Action，在 Uniswap 交易对创建时向 Discord 发送消息，并使用 Axios 获取一些数据，请点击此处：

<Card title="如何在新 Uniswap 池创建时向 Discord 发送消息" href="" />

要在 Tenderly Web3 Action 中部署您自己的简易 Oracle，请查看此教程：

<Card title="如何构建自定义 Oracle" href="" />

如需了解 Web3 Action 如何使用 Virtual Environments 模拟提交到多签钱包的事务，并将模拟结果作为 Discord 消息发送，请尝试以下教程：

<Card title="Web3 Actions + 多签钱包" href="" />

### 资源

您可以在此处找到有关主要构建模块和配套工具的所有相关信息：

查找关于 Web3 Actions 项目结构以及 **tenderly.yaml** 配置文件总体布局的详细信息：

<Card title="项目结构" href="" />

查找有关 Web3 Actions 核心组件以及在 **tenderly.yaml** 中编写触发器配置的详细信息：

<Card title="Action 函数、事件和触发器" href="" />

了解如何使用 Storage 和 Secrets：

<Card title="上下文：Gateway、Storage、Secrets" href="" />

了解 Web3 Actions 本地开发和测试的工具：

<Card title="本地开发和测试" href="" />

了解在 Tenderly Dashboard 中检查和处理 Web3 Actions 失败执行的实用工具：

<Card title="错误报告" href="" />

了解如何操作 Web3 Actions：停止、升级和手动运行 Web3 Actions：

<Card title="停止、升级和手动运行 Web3 Actions" href="" />
