コンテンツへスキップ
0%

AlchemyのNotify APIとSDKで年間300万ドル以上を削減した方法

目からウロコの最適化

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

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

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

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

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

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

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

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

問題:過剰な(そして高コストな)JSON-RPC呼び出し

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

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

faucetリクエストの日々の量を考えると、ノードへのRPC呼び出しの総数はあっという間に膨れ上がりました。

Metric
Value

Faucet requests
User requests to the faucet

26k requests / day

Transaction requests
Our calls to getTransactionReceipt

305 million requests / day

Cost

$3 million

それぞれの問題を詳しく見ていきます。

1. マイニング済みトランザクションを確認する通知システムがなかった

ユーザーがGoerli ETH(GETH)またはMumbai MATICをリクエストするたびに、トランザクションがマイニングされて確認されるまで、私たちはgetTransactionReceiptを連続して呼び出していました。1件のユーザーリクエストに対して、getTransactionReceiptを何度も呼び出す必要が生じることも珍しくありませんでした。

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

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

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

私たちのサービスは、気づかないうちにバグを抱えたレガシーなweb3ライブラリを使用していました。トランザクションの成功を確認した後も、システムはノードの呼び出しを継続してしまい、結果としてgetTransactionReceiptへの(不要な)呼び出しの総数を大幅に増加させていました。

Alchemy Dashboard Demo
Free video demo

Alchemyダッシュボードの実演を見る

30分のガイド付きウォークスルー:ダッシュボードの全ツールをライブで実演

Watch the demo

解決策:Alchemy NotifyとAlchemy SDK

ノードへの高コストなJSON-RPC呼び出しを削減するために実施した主な解決策は、次の2つです。

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

1. Alchemy Notifyへの移行

私たちは、生のgetTransactionReceiptメソッドの呼び出しをやめ、Alchemy NotifyのWebhookを使ってトランザクションがマイニングまたはドロップされた際にリアルタイムで通知を受け取るようにしました。外部への呼び出しをゼロにしたことで、ユーザーがGETHを正常に受け取った際、通知が直接こちらに送られてくるようになりました。

2. Alchemy SDKへのアップグレード

私たちはレガシーなweb3ライブラリからAlchemy SDKへ移行し、getTransactionReceipt呼び出しの必要回数を指数関数的に増加させていたバグを、実質的に解消しました。

年間コスト削減額

このシンプルな2つの変更によって、チームは年間300万ドル以上のコストを削減できました。faucetの運用にかかる年間総コストは、約560ドルまで削減されています。🤯

Metric
Value

Faucet requests
Sent from users to the faucet

26k requests / day

Transaction requests
Us calling getTransactionReceipt

0 / day

Total Cost

$560

あなたのプロジェクトにとっての意味

Alchemy NotifyやAlchemy SDKのような製品は、web3プロダクトの運用を不必要に高コストで、煩雑で、時間のかかるものにしてしまう問題を解決するために設計されています。

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

背景グラデーション

ブロックチェーンの力を形に

Alchemyは、最も強力なweb3開発者向けプロダクトとツールに、リソース、コミュニティ、そして頼れるサポートを組み合わせています。