pay-with-any-token について
Tempo CLI で有料 API を呼び出し、HTTP 402 の支払いチャレンジに対応するスキルです。Tempo ウォレットの残高が不足した場合、Uniswap Trading API によるトークンスワップとブリッジでの入金を案内します。
主な機能
- 01Tempo サービスと料金の検索
- 02有料 API リクエストの送信
- 03402 支払いチャレンジの解析
- 04Tempo へのトークンスワップとブリッジ
- 05取引前のユーザー確認
活用シーン
- 01Tempo 課金の API 呼び出し
- 02EVM チェーン上のトークンで Tempo に入金
- 03402 チャレンジの支払い経路の選択
MCP 対応
Tempo の使用を明示的に求められた場合、MCP ツールではなく Tempo CLI コマンドを使うよう指定されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ uniswap/ uniswap-ai --skill pay-with-any-tokenインストール後、Claude Code で/pay-with-any-tokenを入力して読み込まれたか確認します。
同梱ファイルreferences/credential-construction.mdreferences/trading-api-flows.md
詳細
トークンで支払う
Tempo CLI を使用して有料 API を呼び出し、402 チャレンジを自動的に処理します。 Tempo ウォレットの残高が不足している場合は、Uniswap Trading API を使って、任意の EVM チェーンからトークンをスワップしてブリッジし、資金を補充します。
Tempo CLI のセットアップ
次のコマンドを順番に実行してください。手順を省略しないでください。
ステップ 1 — インストール:
mkdir -p "$HOME/.local/bin" \
&& curl -fsSL https://tempo.xyz/install -o /tmp/tempo_install.sh \
&& TEMPO_BIN_DIR="$HOME/.local/bin" bash /tmp/tempo_install.sh
ステップ 2 — ログイン(ブラウザー/パスキーが必要です。ユーザーに操作を促し、確認を待ってください):
"$HOME/.local/bin/tempo" wallet login
エージェントが実行する場合は、長いコマンドタイムアウト(少なくとも 16 分)を設定してください。
ステップ 3 — 準備状況の確認:
"$HOME/.local/bin/tempo" wallet -t whoami
ルール:
sudoは使用しないでください。完全な絶対パス($HOME/.local/bin/tempo)を使用し、export PATHに依存しないでください。$HOMEが展開されない場合は、絶対パスをそのまま指定してください。
セットアップ後、インストール場所、バージョン(--version)、ウォレットの状態(アドレス、残高)を報告してください。残高が 0 の場合は、ユーザーに tempo wallet fund を案内してください。
最低残高の確保: 通常の API 呼び出しでスワップとブリッジによる資金補充の手順が起動しないよう、Tempo ウォレットに少なくとも 0.10 USDC を残してください。この資金補充にはオンチェーントランザクションが 3~5 回必要で、所要時間も約 2 分となるため、少額の追加補充には不釣り合いです。Tempo ウォレットから資金を移す際、移動後の残高がこのしきい値を下回る場合は、ユーザーに警告してください。
Tempo サービスの使用
# Discover services
"$HOME/.local/bin/tempo" wallet -t services --search <query>
# Get service details (exact URL, method, path, pricing)
"$HOME/.local/bin/tempo" wallet -t services <SERVICE_ID>
# Make a paid request
"$HOME/.local/bin/tempo" request -t -X POST \
--json '{"input":"..."}' <SERVICE_URL>/<ENDPOINT_PATH>
- 正確な URL と料金は
tempo wallet -t services <SERVICE_ID>で確認してください - エージェントからの呼び出しには
-tを使用し、高額なリクエストの前に--dry-runを実行してください - HTTP 422 が返された場合は、サービスのドキュメント URL または llms.txt で正確なフィールド名を確認してください
- 独立した複数のサービスへのリクエストは並列で実行してください
ユーザーが明示的に「use tempo」と指示した場合は、必ず tempo CLI コマンドを使用してください。MCP ツールやその他のツールで代用してはいけません。
MPP 402 決済ループ
すべての tempo request 呼び出しは、このループに従います。資金補充の手順は、Tempo ウォレットの残高が不足している場合にのみ実行されます。
tempo request -> 200 ─────────────────────────────> return result
-> 402 MPP challenge
│
v
[1] Check Tempo wallet balance
tempo wallet -t whoami -> available balance
│
├─ sufficient ──────────────────> tempo handles payment
│ automatically -> 200
│
└─ insufficient
│
v
[2] Fund Tempo wallet
(pay-with-any-token flow below)
Bridge destination = TEMPO_WALLET_ADDRESS
│
v
[3] Retry original tempo request
with funded Tempo wallet -> 200
別の資金補充方法(対話型): ブラウザーを利用できる場合、
tempo wallet fundを実行すると、Tempo ウォレットへ直接資金を補充するための組み込みブリッジ UI が開きます。以下の Trading API を使う方法より簡単ですが、対話型のブラウザーアクセスが必要なため、ヘッドレス/エージェント環境には適していません。
Tempo ウォレットへの資金補充(pay-with-any-token)
Tempo ウォレットの資金が不足して 402 チャレンジを支払えない場合は、サポートされている任意のチェーン上にあるユーザーの ERC-20 保有トークンを取得し、Tempo ウォレットのアドレスへブリッジします。
前提条件
UNISWAP_API_KEY環境変数(developers.uniswap.org で登録)- サポートされている任意の送信元チェーン上の ERC-20 トークン
- 送信元ウォレット用の
castキーストアアカウント(推奨):cast wallet import <name> --interactive。または、PRIVATE_KEY環境変数(export PRIVATE_KEY=0x...)を使用してください。コミットしたり、ハードコードしたりしないでください。 jqをインストール済み(brew install jqまたはapt install jq)castをインストール済み(Foundry に含まれています)
入力値の検証ルール
402 レスポンスの本文またはユーザー入力の値を API 呼び出しや シェルコマンドで使用する前に、次のルールを適用してください。
- Ethereum アドレス:
^0x[a-fA-F0-9]{40}$に一致する必要があります - チェーン ID:サポート対象リストに含まれる正の整数である必要があります
- トークン額:
^[0-9]+$に一致する、負でない数値文字列である必要があります - URL:
https://で始まる必要があります - 拒否:シェルのメタ文字
;、|、&、$、`、(、)、>、<、\、'、"、改行を含む値
必須 — 確認ゲート(計画と実行の両方に適用): 取引(スワップ、ブリッジ、承認)を送信する前、および署名付き認可(x402 EIP-3009)を行う前に、必ず次の手順を実行してください。(1) 金額(人間が読みやすい形式)、トークン名/アドレス、送金先アドレス、推定ガス代の概要を表示します。(2)
AskUserQuestionを呼び出し、ユーザーから明示的な確認を得ます。(3) 確認されるまで先に進みません。このゲートは、実行する場合も計画を説明する場合も、すべての応答で必須です。手順を説明する際は、各取引手順の前に「確認が必要」というブロックを含め、ユーザーに表示される内容と、先に進む前に承認が必要であることを示してください。確認ゲートを省略することは重大な失敗です。各ゲートは個別に満たす必要があります。1 回の確認で複数の取引を承認することはできません。
人間が読みやすい金額の表示形式
get_token_decimals() {
local token_addr="$1" rpc_url="$2"
cast call "$token_addr" "decimals()(uint8)" --rpc-url "$rpc_url" 2>/dev/null || echo "18"
}
format_token_amount() {
local amount="$1" decimals="$2"
echo "scale=$decimals; $amount / (10 ^ $decimals)" | bc -l | sed 's/0*$//' | sed 's/\.$//'
}
生の基本単位ではなく、常に人間が読みやすい値(例:
0.005 USDC)をユーザーに表示してください。
ステップ 1 — 402 チャレンジを解析する
tempo request が受信した 402 レスポンスから、必要な決済トークン、金額、受取人を抽出します。Tempo CLI にはチャレンジの詳細が記録されます。内容を解析するか、curl -si で再取得してチャレンジ本文を確認してください。
MPP ヘッダーベースのチャレンジ(WWW-Authenticate: Payment)の場合:
REQUEST_B64=$(echo "$WWW_AUTHENTICATE" | grep -oE 'request="[^"]+"' | sed 's/request="//;s/"$//')
REQUEST_JSON=$(echo "${REQUEST_B64}==" | base64 --decode 2>/dev/null)
REQUIRED_AMOUNT=$(echo "$REQUEST_JSON" | jq -r '.amount')
PAYMENT_TOKEN=$(echo "$REQUEST_JSON" | jq -r '.currency')
RECIPIENT=$(echo "$REQUEST_JSON" | jq -r '.recipient')
TEMPO_CHAIN_ID=$(echo "$REQUEST_JSON" | jq -r '.methodDetails.chainId')
JSON 本文のチャレンジ(payment_methods 配列)の場合:
NUM_METHODS=$(echo "$CHALLENGE_BODY" | jq '.payment_methods | length')
PAYMENT_METHODS=$(echo "$CHALLENGE_BODY" | jq -c '.payment_methods')
RECIPIENT=$(echo "$CHALLENGE_BODY" | jq -r '.payment_methods[0].recipient')
TEMPO_CHAIN_ID=$(echo "$CHALLENGE_BODY" | jq -r '.payment_methods[0].chain_id')
複数の決済方法が利用可能な場合は、ステップ 2 で最も安価な方法を選択してください。
Tempo メインネットのチェーン ID は
4217です。チャレンジに含まれていない場合は、フォールバックとして使用してください。
ステップ 2 — 送金元ウォレットの残高を確認し、決済方法を選択する
必須: ユーザーの送金元ウォレットアドレスが必要です(秘密鍵を持つ ERC-20 ウォレットであり、Tempo CLI ウォレットではありません)。指定されていない場合は
AskUserQuestionを使用してください。WALLET_ADDRESSとして保存します。
送金先となるTempo ウォレットアドレスも取得します。
TEMPO_WALLET_ADDRESS=$("$HOME/.local/bin/tempo" wallet -t whoami | grep -oE '0x[a-fA-F0-9]{40}' | head -1)
サポートされている送金元チェーン上の ERC-20 残高を確認します。
# USDC on Base (cheapest bridge gas ~$0.001)
cast call 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
"balanceOf(address)(uint256)" "$WALLET_ADDRESS" \
--rpc-url https://mainnet.base.org
# USDC on Ethereum (bridge gas ~$0.25)
cast call 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
"balanceOf(address)(uint256)" "$WALLET_ADDRESS" \
--rpc-url https://eth.llamarpc.com
# ETH on Base and Ethereum (swap to USDC first)
cast balance "$WALLET_ADDRESS" --rpc-url https://mainnet.base.org
cast balance "$WALLET_ADDRESS" --rpc-url https://eth.llamarpc.com
複数の決済方法が利用可能な場合は、最も安価な方法を選択します。優先順位は次のとおりです。
- ウォレットに Base 上の USDC がある(ブリッジのみの最短経路)
- ウォレットに Base または Ethereum 上の ETH がある(USDC にスワップしてブリッジ)
- その他の流動性のある ERC-20 がある(スワップしてブリッジ)
REQUIRED_AMOUNT=$(echo "$PAYMENT_METHODS" | jq -r ".[$SELECTED_INDEX].amount")
PAYMENT_TOKEN=$(echo "$PAYMENT_METHODS" | jq -r ".[$SELECTED_INDEX].token")
ステップ 3 — 決済経路を計画する
ユーザーのトークンがどこにあるかに基づいて、適用するフェーズを決定します。
Case A — Source token is already on Tempo:
Source token (Tempo)
-> [Phase 5: on-Tempo swap via Stablecoin DEX] -> required payment token
-> tempo request retries automatically with funded wallet
Case B — Source token is on Base/Ethereum/Arbitrum:
Source token (Base/Ethereum)
-> [Phase 4A: Uniswap Trading API swap] -> native USDC (bridge asset)
-> [Phase 4B: bridge via Trading API] -> USDC.e on Tempo (to TEMPO_WALLET_ADDRESS)
-> [Phase 5: on-Tempo swap, if needed] -> required payment token
-> tempo request retries automatically with funded wallet
送金元トークンがブリッジ元チェーン上の USDC である場合は、フェーズ 4A を省略してください。
トークンがすでに Tempo 上にある場合(ケース A)は、フェーズ 4B を省略してください。
ブリッジで必要なトークン(USDC.e)がそのまま届く場合、または
mppxでautoSwap: trueを使用する場合(Tempo 上でのスワップが自動処理されます)は、フェーズ 5 を省略してください。ガス代を考慮した資金供給: 少額(例:$0.05)のブリッジはガス代の無駄になります。Ethereum(約 $0.25)または Base(約 $0.001)のブリッジガス代が、不足額を上回ることがあります。推奨するブリッジの最小額は $5 です。 これによりガス代を分散し、今後のリクエスト用の資金も確保できます。経験則として、
bridge_gas > 2x shortfallの場合は、不足額ちょうどではなく、少なくとも $5 をブリッジしてください。
フェーズ 4A — ソースチェーンで USDC にスワップする(必要な場合)
確認ゲート: 承認トランザクションの前とスワップのブロードキャスト前に、
AskUserQuestionを呼び出し、スワップの概要全体を表示します。例: 「USDC の使用を承認し、スワップを実行しようとしています:[金額] [トークン] → [USDC]、ガス代は約 $X です。確認しますか?(yes/no)」。確認されるまで先に進まないでください。
Uniswap Trading API(EXACT_OUTPUT)を使用して、ソーストークンを USDC にスワップします。
詳細な手順: 変数の設定、承認の確認、見積もり、permit の署名、スワップの実行を含む完全な bash スクリプトについては、 references/trading-api-flows.md を参照してください。
要点:
- ベース URL:
https://trade-api.gateway.uniswap.org/v1 - ヘッダー:
Content-Type: application/json、x-api-key、x-universal-router-version: 2.0 - フロー:
check_approval-> 見積もり(EXACT_OUTPUT)->permitDataに署名 ->/swap-> ブロードキャスト - 承認トランザクションの前とスワップのブロードキャスト前に確認ゲートが必要です
- ネイティブ ETH の場合は、
TOKEN_INにゼロアドレス(0x0000000000000000000000000000000000000000)を使用してください。これにより Permit2 の署名を回避できます。SWAP_VALUEはゼロ以外になります。ゼロアドレスで 400 が返された場合は、WETH アドレスに切り替えてください(Permit2 の署名が必要です)。 - スワップ後、フェーズ 4B に進む前に USDC の残高を確認してください
フェーズ 4B — Tempo ウォレットにブリッジする
確認ゲート: ブリッジの承認前とブリッジの実行前に、ブリッジの概要(ソース金額、ソースチェーン、宛先チェーン、推定ガス代、ブリッジ手数料、到着予定時刻)を表示して
AskUserQuestionを呼び出します。各ステップについてユーザーの確認を得るまで先に進まないでください。
Uniswap Trading API(Across Protocol を利用)を使用して、サポート対象の任意のソースチェーンから Tempo 上の USDC.e に USDC をブリッジします。
ブリッジ先の制限: Trading API はブリッジ用のカスタム
recipientフィールドをサポートしていません。資金は常に Tempo 上のWALLET_ADDRESSに到着します。WALLET_ADDRESSがTEMPO_WALLET_ADDRESS(Tempo CLI ウォレット)と異なる場合、ブリッジ後に Tempo 上で追加の送金トランザクションが必要です(参照ファイルのステップ 4B-5 を参照)。ガス代の見積もりにこれを含めてください。詳細な手順: 承認、ブリッジの見積もり、実行、到着状況のポーリング、Tempo ウォレットへの送金を含む完全な bash スクリプトについては、 references/trading-api-flows.md を参照してください。
要点:
- ルート:Base/Ethereum/Arbitrum 上の USDC -> Tempo 上の USDC.e
- フロー:
check_approval-> オンチェーンの使用許容量を確認 -> 見積もり(EXACT_OUTPUT、クロスチェーン)->/swapで実行 -> 残高をポーリング -> 必要に応じてTEMPO_WALLET_ADDRESSに送金(ステップ 4B-5) - 承認前とブリッジ実行前に確認ゲートが必要です
- ポーリングがタイムアウトしても再送信しないでください。Tempo エクスプローラーを確認してください
- ブリッジ手数料を考慮して 0.5% のバッファーを適用してください
- 見積もりの有効期限は約 60 秒です。ブロードキャスト前に遅延があった場合は再取得してください
ブリッジが確定したら、元の tempo request を再試行してください。Tempo CLI は、新たに資金が補充されたウォレットを自動的に使用して 402 の支払いを行います。支払いトークンが USDC.e でない場合は、再試行する前にフェーズ 5 に進み、必要なトークンにスワップしてください。
残高のバッファー: Tempo では、
balanceOfが実際に使用可能な額を上回る値を報告する場合があります。REQUIRED_AMOUNTと比較する際は2 倍のバッファーを適用してください。不足している場合は、追加のトークンをスワップして補充してください。
フェーズ 5 — Tempo 上でのスワップ(必要な場合)
ウォレットにすでに Tempo 上の TIP-20 ステーブルコイン(USDC.e、pathUSD、その他の Tempo ステーブルコインなど)があり、必須の支払いトークン(PATH_USD や別の TIP-20 など)にスワップする必要がある場合は、このフェーズを使用してください。ユーザーがすでに Tempo 上のトークンを保有している場合も、このフェーズが適用されます。トークンがすでに Tempo 上にある場合はブリッジしないでください。
最も簡単な方法:
autoSwap: trueをmppxのtempo.charge()に渡します。自動的に Tempo 上の Stablecoin DEX を呼び出し、支払いの前にスワップ全体を処理します。autoSwapが利用できない場合、または明示的な制御が必要な場合にのみ、以下の手動スワップを使用してください。
Tempo 上の Stablecoin DEX(0xdec0000000000000000000000000000000000000)は、Tempo(チェーン 4217)上の TIP-20 ステーブルコインの流動性を集約します。スワップするには:
TEMPO_RPC_URL="https://rpc.presto.tempo.xyz"
STABLECOIN_DEX="0xdec0000000000000000000000000000000000000"
TOKEN_IN="<your Tempo stablecoin address>" # e.g. USDC.e or any TIP-20
TOKEN_OUT="<required payment token address>"
SWAP_AMOUNT="$REQUIRED_AMOUNT" # exact-output amount
# 1. Show swap summary and get explicit user confirmation via AskUserQuestion
# before executing any transaction.
# 2. Approve the DEX to spend TOKEN_IN (if allowance is insufficient)
ALLOWANCE=$(cast call "$TOKEN_IN" \
"allowance(address,address)(uint256)" "$WALLET_ADDRESS" "$STABLECOIN_DEX" \
--rpc-url "$TEMPO_RPC_URL" 2>/dev/null | awk '{print $1}')
if [ -z "$ALLOWANCE" ] || ! [[ "$ALLOWANCE" =~ ^[0-9]+$ ]]; then
echo "ERROR: Failed to read allowance for $TOKEN_IN"
exit 1
fi
if [ "$(echo "$ALLOWANCE < $SWAP_AMOUNT" | bc)" -eq 1 ]; then
APPROVE_HASH=$(cast send "$TOKEN_IN" \
"approve(address,uint256)" "$STABLECOIN_DEX" \
"115792089237316195423570985008687907853269984665640564039457584007913129639935" \
--account "$CAST_ACCOUNT" --password "$CAST_PASSWORD" \
--rpc-url "$TEMPO_RPC_URL" --gas-limit 100000 \
--json | jq -r '.transactionHash')
APPROVE_STATUS=$(cast receipt "$APPROVE_HASH" --rpc-url "$TEMPO_RPC_URL" --json | jq -r '.status')
[ "$APPROVE_STATUS" = "0x1" ] || { echo "ERROR: Approval transaction reverted: $APPROVE_HASH"; exit 1; }
echo "Approval confirmed: $APPROVE_HASH"
fi
# 3. Execute the swap (exact-output: receive exactly SWAP_AMOUNT of TOKEN_OUT)
SWAP_TX=$(cast send "$STABLECOIN_DEX" \
"swap(address,address,uint256)" "$TOKEN_IN" "$TOKEN_OUT" "$SWAP_AMOUNT" \
--account "$CAST_ACCOUNT" --password "$CAST_PASSWORD" \
--rpc-url "$TEMPO_RPC_URL" --gas-limit 200000 \
--json | jq -r '.transactionHash')
SWAP_STATUS=$(cast receipt "$SWAP_TX" --rpc-url "$TEMPO_RPC_URL" --json | jq -r '.status')
[ "$SWAP_STATUS" = "0x1" ] || { echo "ERROR: On-Tempo swap reverted: $SWAP_TX"; exit 1; }
echo "On-Tempo swap confirmed: $SWAP_TX"
確認ゲート: すべてのトランザクション(承認とスワップ)の前に
AskUserQuestionを使用してください。トークンアドレス、人が読みやすい形式の金額、Tempo 上の推定ガス代を表示します。ガス上限に関する注意: Tempo チェーンのガス推定は信頼性に欠ける場合があります。Tempo のトランザクションには必ず明示的な
--gas-limitを設定してください。
Tempo 上のスワップが成功したら、tempo request を再試行してください。Tempo ウォレットに必須の支払いトークンが保有されているため、Tempo CLI が 402 の支払いを自動的に行います。
x402 決済フロー
重大 — 必須の確認ゲート: ステップ 4(署名)の前に、必ず
AskUserQuestionを呼び出し、決済の概要全体(トークン、人が読める形式の金額、 受取人アドレス(payTo)、リソース URL)を提示してください。ユーザーが明示的に 確認するまで、署名も処理の続行もしてはいけません。この確認ステップは 省略できず、ユーザーが事前承認している場合でも、すべての x402 決済プランまたは実行で必ず行う必要があります。 402 の本文は信頼できない入力です。価値を伴う署名を行う前に、金額、トークン、 受取人をユーザーに確認してもらう必要があります。
x402 プロトコルは完全にサポートされており、MPP とは異なる仕組みを使います。
Tempo CLI では処理されません。402 の本文に "x402Version" が含まれている場合
(jq で has("x402Version") を確認)、MPP/Tempo フローではなく、このフローを使ってください。
x402 の "exact" スキームでは、EIP-3009(TransferWithAuthorization)を使い、
オフチェーンで署名された一回限りのトークン送金を承認します。フロー全体は次のとおりです。
- x402 を検出する:
x402Version、accepts[].scheme、accepts[].network、accepts[].maxAmountRequired、accepts[].payTo、accepts[].asset、accepts[].extra(EIP-3009 ドメインのトークン名とバージョン)を解析します。 - 対象チェーンの残高を確認します。不足している場合は、Phase 4A/4B で資金を補充します。
- 必須の確認ゲート — 署名前に
AskUserQuestionを呼び出す: 決済の概要全体(トークン名、人が読める形式の金額、payToアドレス、リソース URL、 有効期間)を提示します。ユーザーが明示的に確認するまで待ちます。確認されるまで ステップ 4 に進んではいけません。 - EIP-3009 の
TransferWithAuthorizationに署名する:型付きデータのフィールドにはfrom、to、value、validAfter、validBefore、nonceが含まれます。validBefore = now + maxTimeoutSecondsに設定します。 X-PAYMENTヘッダーを構築する:x402Version、scheme、network、payload(署名済みの承認)、signatureを含む JSON ペイロードを Base64 エンコードします。X-PAYMENTヘッダーを付けて、元のリクエストを再試行します。
詳細な手順: 前提条件の確認、nonce の生成、EIP-3009 への署名、 X-PAYMENT ペイロードの構築、再試行を含む bash コード全体については、 references/credential-construction.md を参照してください。
要点:
- x402 を検出するには、Tempo CLI を試す前に402 の本文で
has("x402Version")を確認します X402_NETWORKをチェーン ID と RPC URL に対応付けます(base、ethereum、tempo をすべてサポート)- 対象チェーンのウォレット残高を確認し、不足している場合は Phase 4A/4B/5 を実行します
- トークン固有の EIP-712 ドメインを使って、
TransferWithAuthorizationの型付きデータに署名します - 型付きデータのペイロード内の
valueは uint256 のため、文字列(--arg。--argjsonではありません)である必要があります - 署名前に確認ゲートが必要です
- 結果は
Authorizationではなく、X-PAYMENTヘッダー(Base64 エンコード)で送信します
| プロトコル | バージョン | ハンドラー |
|---|---|---|
| MPP | v1 | Tempo CLI |
| x402 | v1 | EIP-3009 手動フロー |
エラー処理
| 状況 | 対応 |
|---|---|
tempo: command not found | インストールスクリプトを使って再インストールします。フルパスを使用してください |
legacy V1 keychain signature | 再インストールします。tempo update wallet && tempo update request |
access key does not exist | tempo wallet logout --yes && tempo wallet login |
ready=false / ウォレットなし | tempo wallet login を実行してから、whoami を実行します |
| サービスから HTTP 422 が返される | サービスの詳細と llms.txt を確認し、正確なフィールド名を確認します |
| 残高が 0 / 不足している | 任意のトークンで支払うための入金フローを開始します |
| サービスが見つからない | 検索クエリの範囲を広げます |
| タイムアウト | -m <seconds> を指定して再試行します |
| チャレンジの本文が不正な形式 | 生の本文をユーザーに提示し、処理を続行しないでください |
| 承認トランザクションが失敗する | エラーを提示し、ガスと使用許可を確認します |
| Quote API が 400 を返す | リクエスト/レスポンスを記録し、金額の書式を確認します |
| Quote API が 429 を返す | 待機して、指数バックオフで再試行します |
| /swap の後に Swap データが空 | Quote の期限が切れています。Quote を再取得してください |
| Bridge がタイムアウトする | Bridge エクスプローラーを確認し、再送信しないでください |
| x402 の支払いが拒否される(402) | ドメイン名/バージョン、validBefore、nonce の最新性を確認します |
| Tempo で InsufficientBalance が発生する | Tempo でトークンを追加でスワップしてから再試行します |
balanceOf は十分だが支払いに失敗する | 2 倍のバッファーを適用し、再試行前に残高を追加します |
主なアドレスと参考情報
- Tempo CLI:
https://tempo.xyz(インストールスクリプト:https://tempo.xyz/install) - Trading API:
https://trade-api.gateway.uniswap.org/v1 - MPP ドキュメント:
https://mpp.dev - MPP サービスカタログ:
https://mpp.dev/api/services - Tempo ドキュメント:
https://mainnet.docs.tempo.xyz - Tempo チェーン ID:
4217(Tempo mainnet) - Tempo RPC:
https://rpc.presto.tempo.xyz - Tempo ブロックエクスプローラー:
https://explore.mainnet.tempo.xyz - Tempo 上の pathUSD:
0x20c0000000000000000000000000000000000000 - Tempo 上の USDC.e:
0x20C000000000000000000000b9537d11c60E8b50 - Tempo 上の Stablecoin DEX:
0xdec0000000000000000000000000000000000000 - Tempo 上の Permit2:
0x000000000022d473030f116ddee9f6b43ac78ba3 - Tempo 支払い SDK:
mppx(npm install mppx viem) - Base 上の USDC(8453):
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 - Base 上の USDbC(8453):
0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA - Ethereum 上の USDC(1):
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 - Ethereum 上の WETH(1):
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 - Base 上の WETH(8453):
0x4200000000000000000000000000000000000006 - ネイティブ ETH(全チェーン):
0x0000000000000000000000000000000000000000(ゼロアドレス。スワップに推奨) - Arbitrum 上の USDC-e(42161):
0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8 - Trading API の対応チェーン:1、8453、42161、10、137、130
- x402 仕様:
https://github.com/coinbase/x402
関連スキル
- swap-integration — Uniswap スワップの完全な 統合リファレンス(Trading API、Universal Router、Permit2)