実際のお金を使わずにエージェントの支払いをテストしてください。
Swap your API key for a sk_test_ key - that alone puts you on Base Sepolia. Fund the agent's wallet from the public Base Sepolia USDC faucet, make a real test payment with payments.create (test funds, no real money), and tunnel your local webhook through ngrok. The response shapes match live, so a flow that passes in test passes in production. Exercise the failure paths, not just the happy one.
始める前に。
- ライブ(または少なくともライブに近い)での動作する統合 - add-payments-to-agentを参照してください。
- ダッシュボードからの
sk_test_APIキーと一致するテスト署名秘密。 - ngrok (または任意のHTTPSトンネル) を使用して開発時のWebhook配信を行います。
- 別の開発環境 - 異なる環境変数、異なるデータベース(または少なくとも異なるテーブル)、異なるWebhook URL。
- Webhookパターンガイドに対する快適さ - このガイドは、テスト用のハンドラーがあることを前提としています。
テストキーに切り替えます。
sk_test_キーはBase Sepoliaで取引され、sk_live_キーはBaseメインネットで取引されます。プレフィックスがネットワークを選択します - 別のネットワーク環境変数はなく、テストキーはメインネットの資金を移動できません。したがって、開発環境で変更するのはキー(およびテストWebhookシークレット)だけです。
# .env.development
# A sk_test_ key picks Base Sepolia automatically - there is no network env var.
BLOCKCHAIN0X_API_KEY=sk_test_01J9...
BLOCKCHAIN0X_WEBHOOK_SECRET=... # the test webhook's secret, from the dashboardファウセットからエージェントのウォレットに資金を提供します。
テストUSDCには金銭的価値はありませんが、ライブUSDCのように振る舞います:同じレスポンス形状、同じ残高追跡。これをミントするSDK呼び出しはありません - エージェントのウォレットアドレスに対して、公開されたBase Sepolia USDCファウセットから資金を提供します。ダッシュボードまたはエージェントの公開ページでアドレスを見つけ(またはSDKでエージェントを読み取って)、それをファウセットに貼り付けてください。
import { createClient } from "@blockchain0x/node";
const client = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! }); // sk_test_
// Look up the agent; its wallet address is shown in the dashboard and on the
// agent's public page. Fund THAT address from the Base Sepolia USDC faucet -
// there is no SDK call that mints test funds.
const agent = await client.agents.get("agt_123");
console.log(agent.id);from blockchain0x import Client
client = Client() # reads BLOCKCHAIN0X_API_KEY (sk_test_)
# The agent's wallet address is in the dashboard / on its public page.
# Paste it into the public Base Sepolia USDC faucet to fund it.
agent = client.agents.get("agt_123")
print(agent["id"])実際のテスト支払いを行う。
ウォレットに資金が供給されたら、sk_test_キーでpayments.createを呼び出します。これはテスト資金を使用したBase Sepoliaでの実際の転送であり、mainnetと同様にpayment.received webhookが発火します - したがって、実際のコードパスを実行し、シミュレーションではありません。トンネルされたハンドラーにイベントが到着するのを見てください。
// On a sk_test_ key this is a REAL transfer on Base Sepolia (test funds, no
// real money). It fires the payment.received webhook just like mainnet does.
const tx = await client.payments.create({
agentId: "agt_123",
to: "0xRecipientOnSepolia",
amountWei: "10000", // 0.01 USDC
});
console.log(tx); // watch payment.received arrive at your webhooktx = client.payments.create(body={
"agentId": "agt_123",
"to": "0xRecipientOnSepolia",
"amountWei": "10000", # 0.01 USDC
})
print(tx) # watch payment.received arrive at your webhook最低限の運用シナリオは3つです:着地する支払い(ハッピーパス、payment.received)、決して着地しない支払い(Webhookを無効なURLに向け、調整スイープがスタックしたジョブをキャッチすることを確認します - これはほとんどのチームが無視するパスです)、およびWebhookの再試行(最初に500を強制し、2回目に200を返し、次に冪等性が重複作業をスキップしたことを確認します)。
Webhookをローカルハンドラーにトンネリングします。
テスト支払いは、テストWebhookのために設定した任意のURLに実際のWebhookを送信します。ローカル開発のために、ラップトップにHTTPSトンネルを提供してください。ngrokが最も簡単なオプションです; どのリバーストンネルツールでも機能します。
# Tunnel your local webhook endpoint to a public HTTPS URL.
$ ngrok http 3000
# Forwarding https://abc123.ngrok.app -> http://localhost:3000
# Paste the URL in the dashboard under Webhooks for your test
# environment - test and live keep separate webhook config.テストと本番では別々のキーとWebhook設定を使用するため、実際のエンドポイントを指す本番環境を維持しつつ、ローカルトンネルがテストイベントを処理できます。
誤設定されたキーで迅速に失敗する。
テスト/ライブキーに関する最も一般的なプロダクションインシデントは静かです:デプロイがテストキーで行われ、支払いは通過せず、アラートは次の営業日以降にのみ発火します。これをブート時にブロックします:envとキーのプレフィックスが一致しない場合は起動を拒否します。
// Fail fast if test/live get mixed up.
const apiKey = process.env.BLOCKCHAIN0X_API_KEY!;
const env = process.env.NODE_ENV;
if (env === "production" && apiKey.startsWith("sk_test_")) {
throw new Error("Test key in production environment - aborting boot.");
}
if (env !== "production" && apiKey.startsWith("sk_live_")) {
throw new Error("Live key in non-production environment - aborting boot.");
}import os, sys
api_key = os.environ["BLOCKCHAIN0X_API_KEY"]
env = os.environ.get("ENV", "development")
if env == "production" and api_key.startswith("sk_test_"):
sys.exit("Test key in production environment - aborting boot.")
if env != "production" and api_key.startswith("sk_live_"):
sys.exit("Live key in non-production environment - aborting boot.")後で問題を引き起こす5つのテストミス。
Base Sepoliaを忘れることはそれ自体がチェーンです
sk_test_キーはBase Sepoliaで取引され、Baseメインネットではありません。ブロックエクスプローラー、ウォレットアドレス、ガストークンはすべて別々です。一般的な混乱は、実際のBaseアドレスをテストにコピーし、それが失敗するのを見てAPIが壊れていると思うことです。エージェントのウォレットアドレスにBase Sepolia USDCファウセットから資金を供給し、そのチェーンに存在するアドレスに支払います。
失敗パスをテストしていません
ほとんどのチームはハッピーパスをテストします - payment.receivedを発火させる支払い - その後、出荷して後で未払いのパスが壊れていることに気づきます。これを実行してください:Webhookを無効なURLにポイントして、調整スイープがスタックしたジョブをキャッチすることを確認し、ハンドラーから500を強制し、再試行が冪等であることを確認し、payments.createの503(チェーンアダプターが接続されていない)が処理されていることを確認します。テスト環境は安価ですが、本番のデバッグは高価です。
ウェブフックURLが本番環境でngrokを指し続けています
キーのプレフィックスを切り替えるのは覚えやすいですが、Webhook URLを更新するのは忘れやすいです。URLがまだノートパソコンのngrokトンネルを指している状態で本番環境に移行すると、最初の本番支払いが無効なWebhookを発火させます。Webhook URLの変更をデプロイチェックリストの一部として扱い、一度限りの設定として扱わないでください。
テストネットのタイミングをライブタイミングのプロキシとして信頼する
Base SepoliaはBaseメインネットと同じように動作しません - ブロックのタイミングと混雑が異なります。テストネットを使用してメインネットのスループットを負荷テストしないでください。また、テストネットのレイテンシが本番環境で見るものと同じであると仮定しないでください。実際の数値が必要な場合は、sk_live_キーを使用して少額のメインネットスモークテストを実行してください。
共有データベースにテストフィクスチャを残す
開発環境と本番環境がデータベースを共有している場合(共有しないでください)、テストイベントは本番イベントと同じテーブルに入ってしまい、冪等性の重複排除が壊れます(イベントIDのプレフィックスは異なりますが、行は実際のものです)。最低限、環境ごとにwebhook_eventsテーブルを分離してください。より良いのは、DBを完全に分けることです。これは、一度痛い目に遭うまで過剰に思えるルールの一つです。
テストループが開発サイクルに入ったら。
健全なテストループが整っていると、残りの作業は主に強化です:負荷下での信頼できるWebhook処理、最終的なセキュリティチェックリスト、および以前の支払いプロバイダーからの移行です。
開発者が最も尋ねるwebhookパターン
ライブにする前にエージェントウォレットを保護してください
エージェント駆動のAPIアクセスのためにStripeからBlockchain0xに移行する
docs.blockchain0x.comに完全なリファレンスがあります。テストネットの詳細: Baseチェーン用語集。製品表面: Payment API。