跳至内容
0%

如何在 Optimism 上使用 webhook

Alchemy team headshot

作者 Alchemy

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

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

什么是 webhook?

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

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

webhook 可以追踪哪些 Optimism 事件?

通过 Alchemy webhook,我们可以接收三类 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 key

接下来,创建一个新的 app 来生成 API key,并连接到 Optimism 测试网络。

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

Alchemy 控制台:创建新 App 以生成 Optimism API key

给你的 app 命名(我们用了 “optimism_webhooks”),并写一段简短描述。

接下来,在 chain 中选择 Optimism,在 network 中选择 Optimism Sepolia。

然后点击 Create app。

现在,点击 Apps 下新创建的 app 链接,然后点击 Add to Wallet。

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

4. 从 Sepolia faucet 获取测试网 ETH

要将你的智能合约部署到 Optimism 测试网络,需要从 Alchemy 的 Sepolia faucet 获取 ETH。

首先,把 MetaMask 的网络切换为 Ethereum Sepolia。在 faucet 页面,粘贴你的钱包地址并申请测试 ETH。

然后,你应该能在 MetaMask 账户的 Sepolia 网络中看到测试 ETH。

5. 获取 OP Sepolia ETH

最快的方式是使用 Alchemy 的 Optimism Sepolia faucet。你也可以通过 Superchain Bridges UI 把 Sepolia ETH 跨链到 OP Sepolia。

一旦你的钱包中有了 OP Sepolia ETH,就可以继续进行 webhook 设置了。

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

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

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

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

在 Trigger 下,搜索并选择 Webhooks by Zapier 作为 app event/trigger。

对于 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 中通过 Alchemy 的 Notify tab,第二种是通过 Alchemy 的 Notify API 以编程方式实现(如果要处理 10 个以上地址的 address activity webhook,推荐使用这种方式)。

  1. 确认你处于 Alchemy dashboard 左上角的 Ethereum + L2 ecosystem 中
  2. 进入 Notify tab,在 Address Activity 部分点击 + Create Webhook 按钮
  3. 将 Chain 选择为 Optimism
  4. 将 Network 选择为 Sepolia
  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_SEPOLIA","webhook_type":"ADDRESS_ACTIVITY","webhook_url":"your-Zapier-Webhook-URL", "addresses":["your-Ethereum-Address"]\}'``

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

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

8. 在 zapier 中解析 Optimism webhook 响应

有了 Alchemy 的 webhook 响应之后,我们需要在 Zapier 中解析它,创建一个 action,在我们的 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 这个 action。

点击 Filter Setup & Testing,按下 “+ or” 按钮,填入 Event Activity To Address(或者直接搜索 fromAddress)和 (Text) Exactly matches 我们的 Optimism 地址(粘贴到最后一个文本框中)。

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

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

你可以选择 Run Python 或 Run 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 = \[\{account\_1: account\_1, account\_2: account\_2, t\_or\_f: t\_or\_f, f\_or\_t: f\_or\_t\}\];

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

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

我们现在把消息文本中来自 webhook 响应的通用字段,替换为来自我们 Javascript 代码的更具动态性的输出,这些输出会根据钱包是发送还是接收代币而自动调整:

在 Slack 操作中选择 Send Channel Message,然后点击 Set up action 部分

点击 Continue 并测试你的 action。然后发布!

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

Background gradient

构建区块链应用

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