---
title: "AlchemyのNotify APIとSDKで年間300万ドル以上を削減した方法"
description: "Alchemy の Notify API と SDK を使い、効率的な運用により年間300万ドル以上を削減した方法を紹介します。"
---

## 目からウロコの最適化

web3で開発する以上、分散型アプリケーションのテストは避けて通れません。しかし実際のネットワーク上でのテストには多額の費用がかかります。そこでweb3のビルダーは[Goerliなどのtestnet](https://www.alchemy.com/overviews/what-are-testnets)を利用し、testnetトークンを使って無料でトランザクションや動作検証を行っています。

testnetトークンを入手するにはfaucetが必要です。faucetはビルダーに無料のtestnetトークンを「垂らす」重要なサービスで、GoerliやMumbaiといったtestnet上での開発を支えています。

Alchemyは、web3を10億人に届けることをミッションとしており、特にこうしたビルダーを対象としています。そこで私たちは、開発者がより簡単に開発できるよう、あらゆる開発者に前例のないtestnetトークンへのアクセスを提供しつつ、web3における開発をシンプルにし普及させるfaucetを構築しました。

2021年以降、[Goerli Faucet](https://goerlifaucet.com/)と[Mumbai Faucet](https://mumbaifaucet.com/)を運用してきました（廃止済みのRinkeby Faucetも含む）。これまでに300万回以上、開発者にtestnetトークンを送付しています。

現在、GoerliとMumbaiのfaucetは非常に多くのトラフィックを処理しており、その運用にはAlchemyだけで年間数百万ドルのコストがかかっています。しかし最近、私たちは300倍のコスト削減を実現し、年間300万ドル以上を節約することに成功しました。

どうやって実現したのか。

Alchemy NotifyとAlchemy SDK――自社製品を使うことで、です。

faucetをどのように最適化したか、以下で解説します👇 同じ手法を使って、あなたのアプリも最適化してみてください。

## 問題：過剰な（そして高コストな）JSON-RPC呼び出し

私たちのfaucetの運用方法には、主に次の2つの問題がありました。

1. getTransactionReceipt呼び出しが過剰であったこと
1. レガシーなweb3ライブラリを使用していたこと

faucetリクエストの日々の量を考えると、ノードへの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)を連続して呼び出していました。1件のユーザーリクエストに対して、`getTransactionReceipt`を何度も呼び出す必要が生じることも珍しくありませんでした。

faucetのトラフィックが平常時であり、かつレガシーなweb3ライブラリのバグがなければ、この方式は非常に無駄が多いものの、法外なコストにはならなかったはずです。

ユーザーがfaucetからトークンをリクエストするたびに、平均して`getTransactionReceipt`への呼び出しを約16回送信していたことになります。

### 2. レガシーなWeb3ライブラリを使用していたこと

私たちのサービスは、気づかないうちにバグを抱えたレガシーなweb3ライブラリを使用していました。トランザクションの成功を確認した後も、システムはノードの呼び出しを継続してしまい、結果として`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呼び出しを削減するために実施した主な解決策は、次の2つです。

1. getTransactionReceipt呼び出しを、Alchemy NotifyのWebhook通知に置き換えた
1. レガシーなweb3ライブラリをAlchemy SDKに置き換えた

### 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`呼び出しの必要回数を指数関数的に増加させていたバグを、実質的に解消しました。

## **年間コスト削減額**

このシンプルな2つの変更によって、チームは年間300万ドル以上のコストを削減できました。faucetの運用にかかる年間総コストは、約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プロダクトの運用を不必要に高コストで、煩雑で、時間のかかるものにしてしまう問題を解決するために設計されています。

これらは非常に簡単にセットアップでき、コストと時間の削減によって、バックエンドインフラを心配する代わりに、フロントエンドのコアビジネスに時間とお金を注げるようになります。
