跳至内容
0%

如何在 Optimism 上使用 webhook

Alchemy team headshot

作者 Alchemy

发布于 2022年8月11日3 分钟阅读

如果你希望自己的 web3 应用能与第三方应用或服务通信,你会喜欢上 webhook。在本教程中,我们将学习如何在 Optimism 上设置和使用 webhook,然后演示如何为 Optimism 上 ETH 的收发设置 Slack 自动通知。

什么是 webhook?

Webhook 是 web3 开发者用来让第三方应用或服务在事件发生时与应用通信的工具。相比通过 API 持续轮询节点来检查某个状态是否发生变化,这种技术效率更高,因为 webhook 可以让服务器在事件发生时主动向应用推送通知。

Alchemy webhooks 在提升用户体验、提高 web3 应用和服务的参与度方面有很大潜力,比如在 Discord 频道中追踪 NFT 销售,或将钱包活动发送到 Slack 频道。

哪些 Optimism 事件可以通过 webhook 追踪?

通过 Alchemy webhooks,我们可以接收三种类型的 Optimism 事件通知:

  1. Mined transactions - 交易完成
  2. Dropped transactions - 交易失败或从 mempool 中被丢弃
  3. Address Activity - 代币被接收或转移

在本教程中,我们将追踪 Address Activity 事件,接收 Optimism 上 ETH 收发的 Slack 通知。

如何设置 Optimism webhook

以下是设置 Optimism webhook 并将通知自动发送到 Slack 的 10 个步骤。这一流程同样适用于 Zapier 支持的许多其他第三方平台,比如 Discord、Twitter 等!

1. 创建一个 Ethereum 钱包

我们需要一个 Ethereum 钱包来收发交易。本教程使用 MetaMask,一个基于浏览器的数字资产钱包,用于管理 Ethereum 账户。下载 MetaMask 并创建一个免费账户。

2. 登录 Alchemy

为了方便操作,注册一个免费的 Alchemy 开发者账户,这样你就可以与 Ethereum 链通信,而无需自己运行节点。

3. 创建 API 密钥

接下来,创建一个新应用以生成 API 密钥,并连接到 Optimism 测试网络

在 Alchemy Dashboard 中,将鼠标悬停在导航栏的 Apps 上,点击 Create App,进入 Create App 页面。

Alchemy 控制台:创建新应用以生成 Optimism API 密钥

为你的应用命名(我们选择了 "optimism_webhooks"),并写一段简短的描述。

接下来,为你的链选择 Optimism,为网络选择 Optimism Goerli

然后,点击 Create app

现在,点击 Apps 下新创建的应用链接,再点击 Add to Wallet

此时你应该已经在 Metamask 上连接到了 Optimism Goerli 测试网!

Alchemy 控制台:新建的 Optimism Goerli 应用及 Add to Wallet 按钮

4. 从 Goerli faucet 获取测试网 ETH

要将智能合约部署到 Optimism 测试网络,需要从 Goerli faucet 获取 ETH

首先,将 MetaMask 的网络切换为 Ethereum Goerli,然后点击 Claim

之后,你应该会在 Goerli 测试网的 MetaMask 账户中看到 0.05 ETH。

5. 将 Goerli ETH 桥接到 Optimism-Goerli 测试网

目前还没有公开的桥用于将 Goerli ETH 转移到 Optimism,但可以使用 Cast from Foundry(一个用于 Ethereum 应用开发的工具包)来完成。

使用以下代码片段:

cast send --legacy --rpc-url=$ALCHEMY-OPT-GOERLI-ENDPOINT --value=0.001ether --private-key= 0x636Af16bf2f682dD3109e60102b8E1A089FedAa8

现在你已经在 Opt-Goerli 测试网上拥有了 Goerli ETH。

6. 创建一个 zap 和一个 Optimism webhook URL

现在,创建你的 Zapier 账户,如果你已经有 Zapier 账户,直接登录即可。

接下来,在 dashboard 左上角点击 Create Zap

现在我们要创建 webhook URL,用于将 webhook 响应从 Alchemy 发送到 Zapier。

Trigger 下,搜索并选择 Webhooks by Zapier 作为应用事件/触发器。

对于 Trigger Event,选择 Catch Hook,因为 Zapier 会等待 Alchemy 的 address activity webhook 在每次转账发生时将事件数据发送到该 URL。

点击 Continue 进入 Set up trigger 部分,并复制 Custom Webhook URL

Zapier Zap 编辑器:从 Catch Hook 触发器复制自定义 webhook URL

7A. 创建一个 Optimism webhook

现在,我们需要创建 address activity webhook 来追踪转账事件,并将数据发送到 Zapier 的 webhook URL。

我们将演示两种设置 webhook 的方式:第一种是在 dashboard 的 Notify 标签页中操作,第二种是通过 Alchemy 的 Notify API 以编程方式实现(推荐用于处理 10 个以上地址的 address activity webhook)。

  1. 确认你在 Alchemy dashboard 左上角处于 Ethereum + L2 生态系统中
  2. 进入 Notify 标签页,在 Address Activity 部分点击 + Create Webhook 按钮
  3. Chain 选择为 Optimism
  4. Network 选择为 Goerli
  5. 粘贴你在上一步从 Zapier 复制的 webhook URL
  6. 将你的 MetaMask 钱包地址粘贴到 Ethereum Addresses 部分。

注意:如果你想在确认创建前测试 Alchemy webhook 是否成功向 Zapier 的 webhook URL 发送请求,可以点击 webhook URL 旁边的 Test Webhook。如果你已经创建了 webhook 但想再次测试,可以点击 webhook 旁边的三个点,选择 Send Test Notification

现在,返回 Zapier,进入 Test trigger 部分,点击 Test trigger

如果你看到 "We found a request message",恭喜你!

7B. 使用 notify API 创建 Optimism webhook

如果你想为多个 Optimism 地址创建 webhook,可以使用 Notify API。首先,从 Notify dashboard 右上角的 AUTH TOKEN 按钮处复制你的 Alchemy 身份验证令牌(X-Alchemy-Token)。

Alchemy 控制台:Notify API 的 Auth Token 复制位置

然后,进入命令行并输入以下内容:

*curl https://dashboard.alchemy.com/api/create-webhook \

*-X POST \

*-H "X-Alchemy-Token":"your-X-Alchemy-Token" \

-d '\{"network":"OPT_KOVAN","webhook_type":"ADDRESS_ACTIVITY","webhook_url":"your-Zapier-Webhook-URL", "addresses":["your-Ethereum-Address"]\}'``

记得使用你自己的 your-X-Alchemy-Tokenyour-Zapier-Webhook-URLyour-Ethereum-Address(也就是你粘贴的钱包地址),你可以按需添加任意数量的 Ethereum 地址来追踪它们的转账事件。

刷新之后,你应该会在 Notify dashboard 中看到新创建的 address activity webhook,以及你指定的所有参数。

8. 在 zapier 中解析 Optimism webhook 响应

针对 Alchemy 的 webhook 响应,我们需要在 Zapier 中解析它,以创建一个动作:每当我们的 Optimism 地址成功发送交易时发出提醒。

Action 部分,选择右侧的 Filter 选项。

Filter setup & testing 中,我们希望当 Event Activity From Address(你也可以直接搜索 fromAddress)(Text) Exactly matches 我们的 Optimism 地址时(将其粘贴到最后一个文本字段中)才继续。

如果你点击 Continue 后看到 "Your Zap would not have continued",不用担心!因为测试通知并非来自该钱包,出现这条消息是正常的。

Zapier 过滤器设置:将 webhook 的 fromAddress 与 Optimism 钱包地址匹配

9. 将你的 Optimism webhook 与 slack 集成

首先,让我们创建一个 Slack 账户和工作区。在 Slack 上创建一个账户,如果你已经有账户则直接登录。然后创建一个新的工作区。我们将其命名为 Optimism Wallet Alerts,你也可以发挥自己的创意!

处理发送代币的提醒

接下来,我们希望在我们的钱包作为转账事件的发送方时发送一条消息。

  1. 点击底部的 "+"
  2. 在新的 Action 部分中搜索并选择 Slack
  3. 对于 Action Event,选择 Send Channel Message
  4. 点击 Continue 后,登录你的 Slack 账户
  5. Set up action 部分填写用于发送消息的字段
  6. 选择你想让提醒发送到的频道(我们选择的是 Optimism-Wallet-Alerts)。

在消息文本中,你可以自由发挥,选择想要发送的字段和值。

我们选择了以下字段:

Zapier Slack 操作:为 Optimism 代币转账提醒选择的消息字段

其他部分保持默认选项即可。

点击 continue,然后点击 test and continue

如果没有报错弹出,说明一切正常!这时你的账户应该已经收到一条 Slack 消息。现在,发布这个 Zap。

恭喜!现在,每当你的 Optimism 钱包发出一笔交易,我们的 Zap 就会发送一条详细描述该交易的消息。

你也可以在 Zapier dashboard 的 Zap History 页面查看该 Zap 的运行详情。

10. 发送消息以处理 Optimism 上的代币接收

我们还希望在钱包作为 Optimism 交易接收方时发送提醒。

首先,编辑 continue only if 动作。

点击 Filter Setup & Testing,按下 "+ or" 按钮,填入 Event Activity To Address(你也可以直接搜索 fromAddress)以及 (Text) Exactly matches 我们的 Optimism 地址(粘贴到最后一个文本字段中)。

很好,现在当钱包作为接收方时,我们的 Zap 也会运行!

接下来,让我们在 Only continue if…Send Channel Message in Slack 这两个动作之间创建一个 Code by Zapier 动作。

你可以选择 Run PythonRun Javascript。我们将选择后者,但逻辑对 Python 同样适用。

点击 Continue 后,我们将按如下方式在 Set up action 中设置输入数据:

Code by Zapier 操作:设置 JavaScript 步骤的输入数据

我们之所以要再次解析 webhook 响应,是因为目前的通知只针对钱包发送 ETH 的情况编写。因此,我们需要为钱包接收 ETH 的情况进行定制。

在代码块中,粘贴以下代码(阅读注释以了解每一行的含义):

// Since JavaScript is case-sensitive, we will be comparing addresses in upper case const address = "Wallet-Address".toUpperCase\(\); // Define Account 1 \(Our wallet\) let account\_1 = ""; // Define Account 2 \(the user our wallet is sending to / receiving from\) let account\_2 = ""; // Define to use "to" or "from" in message let t\_or\_f = ""; let f\_or\_t = ""; if \(inputData.fromAddress.toUpperCase\(\) == address\) \{ // If Wallet is sending, then it is the fromAddress account\_1 = inputData.fromAddress; account\_2 = inputData.toAddress; t\_or\_f = "from"; f\_or\_t = "to"; \} else if \(inputData.toAddress.toUpperCase\(\) == address\) \{ // If Wallet is receiving, then it is the toAddress account\_1 = inputData.toAddress; account\_2 = inputData.fromAddress; t\_or\_f = "to"; f\_or\_t = "from"; \} // Output the fields to be used in email output = \[\{account\_1: account\_1, account\_2: account\_2, t\_or\_f: t\_or\_f, f\_or\_t: f\_or\_t\}\];

同样,记得将 Wallet-Address 替换为你的 MetaMask 钱包地址。测试该动作时,如果没有为输出变量赋任何值,不必担心。

最后,进入 Send Channel Message in Slack 动作,点击 Set up action 部分。

现在,我们将用 Javascript 代码生成的更灵活的输出,替换消息文本中来自 webhook 响应的通用字段,这些输出会根据我们钱包是发送还是接收代币而有所不同:

Slack 的 Send Channel Message 操作,点击 Set up action 部分

点击 Continue 并测试该动作,然后发布!

恭喜!你已经完成了 Optimism webhook 的创建!

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。