---
title: "我们如何借助 Alchemy 的 Notify API 和 SDK 每年节省超过 300 万美元"
description: "了解我们如何借助 Alchemy 的 Notify API 和 SDK 实现高效运营，每年节省超过 300 万美元。"
---

## 被我们忽视的重大优化

如果你在 web3 领域构建应用,就需要测试你的去中心化应用。但在真实网络上交易的成本很高。所以 web3 开发者会使用[像 Goerli 这样的测试网](https://www.alchemy.com/overviews/what-are-testnets),在那里可以免费使用测试网代币来交易和验证行为。

要获得测试网代币,你需要水龙头。水龙头是一项关键服务,它向开发者“滴灌”免费的测试网代币,让他们能够在 Goerli 或 Mumbai 这样的测试网上构建应用。

在 Alchemy,我们的使命是将 web3 带给十亿用户,尤其是这些开发者。因此我们构建了水龙头,让开发者更容易构建应用,为所有开发者提供前所未有的测试网代币获取渠道,同时简化并推广 web3 开发。

自 2021 年起,我们运营了 [Goerli Faucet](https://goerlifaucet.com/) 和 [Mumbai Faucet](https://mumbaifaucet.com/)(以及已弃用的 Rinkeby Faucet),向开发者发放测试网代币超过 300 万次!

目前 Goerli 和 Mumbai 水龙头承载的流量非常大,以至于运营这些水龙头每年要花费 Alchemy 数百万美元。但我们最近发现了一个 300 倍的成本节省方案,每年总共节省超过 300 万美元。

你可能会问,是怎么做到的?

答案是使用 Alchemy Notify 和 Alchemy SDK……我们自己的产品……就在我们眼皮底下。

阅读下文 👇 了解我们是如何优化水龙头的。你也可以用我们的方法来优化你自己的应用。

## 问题:过多(且昂贵)的 JSON-RPC 调用

我们运营水龙头的方式存在两个主要问题:

1. 过多的 getTransactionReceipt 调用
1. 使用了一个过时的 web3 库

考虑到每日水龙头请求量,对我们节点的 RPC 调用总数很快就累积起来了。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Metric", dataType: "object" },
      { key: "2", width: 200, title: "Value", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p><strong>Faucet requests</strong><br/><em>User requests to the faucet</em></p>", tooltip: "", icon: "" },
        "2": { title: "<p>26k requests / day</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p><strong>Transaction requests</strong><br/><em>Our calls to getTransactionReceipt</em></p>", tooltip: "", icon: "" },
        "2": { title: "<p>305 million requests / day</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p><strong>Cost</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>$3 million</p>", tooltip: "", icon: "" },
        id: 2,
      },
    ],
  }}
/>

下面我们分别来看这两个问题。

### 1. 没有通知系统来确认交易上链

每次用户请求 Goerli ETH(GETH)或 Mumbai MATIC 时,我们都会连续调用 [`getTransactionReceipt`](https://www.alchemy.com/docs/chains/ethereum/ethereum-api-endpoints/eth-get-transaction-receipt),直到交易被确认上链为止,通常单次用户请求就需要对 `getTransactionReceipt` 进行多次调用。

在正常的水龙头流量下,如果没有那个过时 web3 库的 bug,这种模式虽然很不合理,但代价还不至于过高。

平均而言,每次用户从水龙头请求代币,我们大约会向 `getTransactionReceipt` 发送 16 次调用。

### 2. 使用了过时的 Web3 库

我们的服务使用了一个过时的 web3 库,而我们并不知道它有一个 bug。即使在确认交易成功之后,系统仍会继续调用我们的节点,这大幅增加了对 `getTransactionReceipt` 的(不必要的)调用总数。

<VideoCta
  title="查看 Alchemy 控制台实际运行效果"
  description="30 分钟引导演示：现场演示控制台中的每个工具。"
  ctaHref="/resources/dashboard-demo"
  thumbnail={{
    src: "https://media.alchemy.com/alchemy-dashboard-demo-thumbnail.png",
    alt: "Alchemy Dashboard Demo",
  }}
/>

## 解决方案:Alchemy Notify 和 Alchemy SDK

我们实施的两个主要解决方案,减少了对节点的昂贵 JSON-RPC 调用:

1. 用 Alchemy Notify 的 webhook 通知取代 getTransactionReceipt 调用
1. 用 Alchemy SDK 取代过时的 web3 库

### 1. 迁移到 Alchemy Notify

我们不再调用原始的 `getTransactionReceipt` 方法,而是开始使用 Alchemy Notify 的 webhook,[在交易上链或被丢弃时实时获取通知](https://www.alchemy.com/docs/reference/notify-api-quickstart)。无需任何出站调用,当用户成功收到 GETH 时,通知会直接发送给我们。

### 2. 升级到 Alchemy SDK

我们[将过时的 web3 库迁移到了 Alchemy SDK](https://www.alchemy.com/docs/alchemy-quickstart-guide),从根本上修复了导致所需 `getTransactionReceipt` 调用数量呈指数级增长的 bug。

## **年化成本节省**

这两项简单的改动为我们团队节省了超过 300 万美元的年化成本。运营我们的水龙头,总年成本降至约 560 美元。🤯

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Metric", dataType: "object" },
      { key: "2", width: 200, title: "Value", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Faucet requests<br/><em>Sent from users to the faucet</em></p>", tooltip: "", icon: "" },
        "2": { title: "<p>26k requests / day</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Transaction requests<br/><em>Us calling getTransactionReceipt</em></p>", tooltip: "", icon: "" },
        "2": { title: "<p>0 / day</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p><strong>Total Cost</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p><strong>$560</strong></p>", tooltip: "", icon: "" },
        id: 2,
      },
    ],
  }}
/>

### 这对你的项目意味着什么

[Alchemy Notify](https://www.alchemy.com/notify) 和 [Alchemy SDK](https://www.alchemy.com/sdk) 这样的产品,就是为了解决那些让运营 web3 产品变得不必要地昂贵、繁琐和耗时的问题而设计的。

它们的设置非常简单,带来的成本和时间节省将确保你有足够的时间和资金专注于前端核心业务,而不必为后端基础设施担忧。
