pay-with-app について
pay-with-appは、X Layer上のOKX Agent Payments Protocol(APP)を通じて、exact方式のHTTP 402決済を行うスキルです。チャレンジとウォレット残高を確認し、同一チェーンでの資金調達にUniswap Trading APIを利用して、EIP-3009認可に署名してリクエストを再試行します。
主な機能
- 01APP決済チャレンジの解析と検証
- 02X Layer上のx402 v1 exact方式に対応
- 03ウォレット残高と必要な資産の確認
- 04Uniswap Trading APIによる同一チェーンでの資金調達
- 05EIP-3009認可への署名とX-PAYMENT付き再試行
活用シーン
- 01X Layer上のAPP対応HTTP 402リクエストの支払い
- 02必要な決済資産をウォレットが保有するか確認
- 03支払い前にX Layerで必要な資産へスワップ
- 04外部で資金をブリッジした後の決済再開
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ uniswap/ uniswap-ai --skill pay-with-appインストール後、Claude Code で/pay-with-appを入力して読み込まれたか確認します。
同梱ファイルreferences/app-x402-flow.mdreferences/funding-x-layer.md
詳細
Pay With APP(X Layer上のOKX Agent Payments Protocol)
X Layer(チェーン196)上で稼働するOKXの**Agent Payments Protocol(APP)**が発行するHTTP 402チャレンジに対応します。APPのPay Per Use(OKX製品名:Instant Payment)はx402に対応しています。支払いを受けるサーバーが支払い要件を含むHTTP 402を返し、支払いを行う側がEIP-3009のTransferWithAuthorizationにオフチェーンで署名し、OKXのファシリテーターがオンチェーンで送金を検証して決済します。X Layerでは、支払いを行う側にガス代はかかりません。
このスキルは、次の一連の処理を行います。
- ネットワークがX Layer(チェーン196)に解決される402チャレンジを検出します
- 支払いを行うウォレットに要求されたアセット(通常はUSDT0)があることを確認します
- 残高が不足している場合、Uniswap Trading API経由でルーティングし、X Layer上のUSDT0へブリッジします
- EIP-3009の認証に署名します
X-PAYMENTペイロードを構築し、元のリクエストを再試行します
OKXは、X Layer上でUniswapを特集DEXレールとして、2026-04-29にAPPをローンチします。このスキルのバージョン(v1.0.0)が対応するのは、exactスキーム(Pay Per Use、OKX製品名:Instant Payment)のみです。その他のx402スキーム(upto、batch-settlement)や、OKXが提供するAPP製品の機能(エスクロー、セッション、バッチ/Batch Payment)は、このバージョンの対象外です。このスキルは、exact以外のスキームを適切に拒否します。
応答時のプロトコル名について。 ユーザーに回答する際は、プロトコルを明示的に**OKX Agent Payments Protocol(APP)**と呼び、単に「x402」とだけ呼ばないでください。APPはOKXの製品/プロトコルの提供形態であり、x402はその基盤となるワイヤ仕様です。「APP / x402」「x402を基盤とするOKXのAgent Payments Protocol(APP)」のように表現するか、いったん紹介した後は単に「APP」と呼んでください。X Layer上の402チャレンジを、APPの名前を示さずに「x402チャレンジ」と呼ばないでください。ユーザーがこのスキルを指定して呼び出したのは、加盟店がAPPに対応しているためであり、回答でもユーザーが探しているのはその名前です。
前提条件
PRIVATE_KEY環境変数(export PRIVATE_KEY=0x...)。秘密鍵をコミットしたり、ハードコードしたりしないでください。UNISWAP_API_KEY環境変数(developers.uniswap.orgで登録してください)。ウォレットにクロスチェーンルーティング経由で資金を用意する必要がある場合のみ必須です。jqとcast(Foundry)がインストールされていること。- Node 18+(LTS)。references/app-x402-flow.mdのステップ4では、
viemを使ってEIP-3009の型付きデータ署名を生成します。 viem(npm)。ユーザーの作業ディレクトリからパッケージを利用できない場合、このスキルはAskUserQuestionを通じてユーザーに確認してから、キャッシュされたスクラッチディレクトリ~/.cache/uniswap-pay-with-app/signer/にnpm install viemを実行します。このインストールでは、合計約5 MBのパッケージが約13個追加されます。ユーザーが拒否した場合、このスキルは署名を行う前に正常に停止します。キャッシュは実行間で保持されるため、以後の呼び出しではインストールは不要です。
入力値の検証ルール
402レスポンス本文、ユーザー、その他の外部ソースから取得した値をAPI呼び出しやシェルコマンドで使用する前に、次のルールに従ってください。
- Ethereumアドレスのフィールド(例:
asset、payTo、WALLET_ADDRESS):正規のチェックには正規表現^0x[a-fA-F0-9]{40}$を使用します。この正規表現に一致しない値は拒否してください。正規表現に一致するアドレスフィールドはシェルへの展開に安全なため、以下のメタ文字ルールは適用されません。 - チェーンID:サポート対象のリストに含まれる正の整数でなければなりません。
- トークン量:
^[0-9]+$に一致する、0以上の数値文字列でなければなりません。 - URL:
https://で始まらなければなりません。 - 自由記述フィールド(例:
description、extra.name、extra.version、EIP-712ドメインの構築に使う値、またはユーザーに表示する値):シェルのメタ文字である;、|、&、$、`、(、)、>、<、\、'、"、改行を含む値は拒否してください。注:extra.nameの値にはビット単位で完全に一致する署名が必要です(フェーズ4のドメインに関する警告を参照)。値を変更するのではなく、シェルのメタ文字が含まれている場合はチャレンジ全体を拒否してください。
フロー
402 from X Layer-backed resource
│
v
[1] Parse the x402 challenge (Phase 0 below)
│
v
[2] Confirm network resolves to X Layer (chain 196)
│ ├─ not chain 196 ──> escalate to pay-with-any-token, STOP
│ └─ chain 196
│
v
[3] Check wallet balance of the requested asset on X Layer
│ ├─ sufficient ──> proceed to [5]
│ └─ insufficient
│ │
│ v
│ [4] Fund: route + bridge into the requested asset on X Layer
│ (Uniswap Trading API, see references/funding-x-layer.md)
│
v
[5] User Confirmation gate (see Phase 4 / Step 5 below)
[6] Sign EIP-3009 TransferWithAuthorization
[7] Construct X-PAYMENT payload, retry the original request
[8] Verify 200 + Payment-Receipt
フェーズ 0:402 チャレンジを解析する
x402 チャレンジは、レスポンス本文内の JSON です。次の項目を抽出します。
x402Version:x402 プロトコルのバージョンを確認します。accepts[].scheme:v1.0.0 でサポートされるのは"exact"のみです。accepts[].network:"x-layer"/"xlayer"/"eip155:196"/196を受け入れます。accepts[].maxAmountRequired:アセットの基本単位で指定された金額です。^[0-9]+$に一致し、厳密に 0 より大きい必要があります。maxAmountRequired === "0"のチャレンジは意味的に破綻しています(定義上、HTTP 402 は正の金額の支払いを要求するため)。マーチャントの設定ミスとして拒否する必要があります。0 を「ping」、「認証」、「無料プランの確認」と合理化してはいけません。OKX のファシリテーターはゼロ値のTransferWithAuthorizationを決済せず、生成した署名は無駄になります。この問題をユーザーに伝え、処理を停止してください。accepts[].asset:X Layer 上のトークンコントラクトです。accepts[].payTo:受取人のアドレスです。accepts[].resource:ファシリテーターが支払いの対象として紐付ける URL です。存在する場合は抽出します。再試行の対象 URL として使用してください。このフィールドがない場合は、元のリクエスト URL を使用します。accepts[].extra.nameとaccepts[].extra.version:アセットの EIP-712 ドメイン値です。accepts[].maxTimeoutSeconds:validBeforeに使用します。
x402Version のゲート。 解析直後に
x402Version === 1であることを確認します。それ以外の場合はチャレンジを拒否し、バージョン不一致エラーをユーザーに伝えてください。このスキルの v1.0.0 が対象とするのは x402 v1 のみです(v2 仕様では異なる PaymentPayload 構造を使用します)。Scheme のゲート。
accepts[].scheme === "exact"であることを確認します。x402 仕様ではexact、upto、batch-settlementの各 scheme が定義されています。このスキルの v1.0.0 がサポートするのはexactのみです。選択したエントリがそれ以外の scheme を使用している場合は、適切に拒否してください。(OKX の製品では、Instant Payment のプリミティブをchargeと呼ぶなど、独自の用語を使用しています。これは OKX 製品のマーケティング用語であり、ワイヤー上の scheme 値ではありません。確認するのはaccepts[]エントリのワイヤーレベルの scheme であり、"exact"でなければなりません。)
accepts エントリが複数ある場合は、ウォレットが X Layer 上ですでに保有している asset を優先してください。複数の選択肢が同等に有効な場合は、Uniswap の資金調達フローで最も流動性の高い USDT0 を優先してください。
WOKB/ネイティブ OKB は、APP の決済アセットとして認められない可能性があります。 OKX が WOKB または OKB を決済アセットとして公開していることは確認できていません。現在公開されている開発者向けドキュメントでは、サポート対象のステーブルコイン決済アセットとして USDT0、USDG、USDC が掲載されています。402 チャレンジでステーブルコイン以外の asset(たとえば WOKB)が示された場合は、チャレンジを拒否し、マーチャントの設定を確認するようユーザーに依頼してください。
フェーズ 1:ネットワークが X Layer であることを確認する
case "$X402_NETWORK" in
x-layer|xlayer|"eip155:196"|196) X402_CHAIN_ID=196 ;;
*)
echo "Network is not X Layer. Use pay-with-any-token instead."
exit 1
;;
esac
ネットワークが X Layer でない場合は、停止して
pay-with-any-tokenスキルにエスカレーションしてください。このスキルは、Ethereum、Base、Arbitrum、Tempo、および Trading API がサポートするその他のチェーン上の 402 チャレンジに対応します。
フェーズ 2:X Layer 上のウォレット残高を確認する
必須: ユーザーの送金元ウォレットアドレスが必要です。提供されていない場合は、
AskUserQuestionを使用してください。WALLET_ADDRESSとして保存します。
ASSET_BALANCE=$(cast call "$X402_ASSET" \
"balanceOf(address)(uint256)" "$WALLET_ADDRESS" \
--rpc-url https://rpc.xlayer.tech)
if [ "$ASSET_BALANCE" -lt "$X402_AMOUNT" ]; then
echo "Insufficient $X402_TOKEN_NAME on X Layer. Funding required."
# Proceed to Phase 3 (funding)
fi
フェーズ 3:X Layer 上で USDT0 を調達する(必要な場合のみ)
ウォレットに要求されたアセットがない場合は、Uniswap Trading API を通じて調達します。tokenOutChainId=196 を指定し、tokenOut に X Layer のアセットアドレスを設定した EXACT_OUTPUT クォートを使用してください。Trading API は、同一チェーン内のスワップとクロスチェーンルーティング(Across による)に対応しています。
Across のカバレッジの欠落(2026-04-27 に確認済み)。 Across Protocol は現在、X Layer(chain 196)を対応する送信先として掲載していません。そのため、chain 196 へのクロスチェーン
/quote呼び出しは、送信元のチェーンにかかわらずResourceNotFound: No quotes availableを返します。同一チェーン内の X Layer スワップ(references/funding-x-layer.mdの Phase A)には影響せず、通常どおり動作します。v1.0.0 のエージェントにとっての意味。 ユーザーが X Layer 以外のチェーンに資金を保有している場合、クロスチェーン部分は X Layer に対応するブリッジサービスを通じて実行する必要があります(ユーザーはこの手順をこのスキルの外で実行してから、同一チェーンのスワップと 402 決済のために再度呼び出します)。この点をユーザーに正直に伝え、特定のブリッジ製品を推奨しないでください(TODO: フォローアップで、共同マーケティングの方針に沿ったブリッジの推奨を調査して文書化する)。
ブリッジをユーザーに委ねる場合でも、応答ではエンドツーエンドの全体の流れを説明する必要があります。 Across の対応状況の欠落を伝え、外部でブリッジするようユーザーに依頼した後、ユーザーが戻ってきた際の手順を説明してください。(1)X Layer 上でリクエストされた資産の
balanceOfを再確認する、(2)同一チェーンのスワップが必要な場合(例:USDG から USDT0)、Trading API の EXACT_OUTPUT 呼び出しとその Confirmation Gate を説明する、(3)チャレンジのextra.nameとextra.versionを使用し、chainId 196、verifyingContractを資産のアドレスとして、EIP-3009TransferWithAuthorizationの typed-data を構築する、(4)ユーザーの秘密鍵で署名する(署名の前に Confirmation Gate を設ける)、(5)X-PAYMENTJSON ラッパー(x402Version 1、scheme "exact"、network "x-layer"、signature と authorization を含む payload)を構築し、空白を含めずに base64 エンコードして、X-PAYMENTヘッダーを付けて元のリクエスト URL に再試行する。署名はユーザーが戻ってきた後に行われますが、事前に計画全体を示すことで、スキルを離れる前に何に同意するのかをユーザーが確認できます。
デフォルトの資金調達先 = USDT0。 402 チャレンジで別の資産が要求された場合は、X Layer 上で信頼性の高い Uniswap ルーティングが利用できる場合に限り、その資産に直接資金を入れてください。
| アセット | アドレス | 小数桁数 | 資金調達 |
|---|---|---|---|
| USDT0 | 0x779Ded0c9e1022225f8E0630b35a9b54bE713736 | 6 | ✅ Trading API 経由で直接 |
| USDG | 0x4ae46a509F6b1D9056937BA4500cb143933D2dc8 | 6 | ✅ 直接、または USDT0 から USDG への 1 ホップ |
| USDC | 0x74b7F16337b8972027F6196A17a631aC6dE26d22 | 6 | ⏳ X Layer では、信頼性の高い Uniswap v3 のルーティングがありません。Trading API は X Layer 上の USDC スワップ向けルートを安定して返さず、利用可能なプールの流動性も信頼性の高い実行には不十分です。マーチャントが USDC を必要とする場合は、X Layer 上で同一チェーンのスワップを試みるのではなく、Trading API を使用して流動性のあるチェーン(Base、Arbitrum、Mainnet)から USDC を直接ブリッジしてください。 |
詳細なスクリプトとパラメーターについては、 references/funding-x-layer.md を参照してください。
ブリッジのバッファー。 ブリッジ手数料を考慮し、0.5% のバッファーを適用してください。 見積もりの有効期限は約 60 秒です。ブロードキャストまでに遅延が発生した場合は、再取得してください。
ブリッジの最低推奨額。 不足額が 5 ドル未満の場合は、 送信元チェーンのブリッジ手数料を分散するため、5 ドルまで補充してください。
ガスとルーティングに関する注意事項
資金調達に進む前に、これらの内容をユーザーに伝えてください。該当する項目がある場合は、実行前に**AskUserQuestion を呼び出してください**(bash プロンプトをそのまま表示するのではなく)。
- 同一チェーンのスワップに必要な X Layer 上の OKB。 OKX がガスを負担するのは、ファシリテーターの決済送金のみです。署名の前に X Layer 上で行う承認、スワップ、その他のオンチェーン操作の費用はユーザーが支払います(X Layer 上では OKB、ブリッジの場合は送信元チェーンのネイティブアセットで支払います)。ユーザーが X Layer 上の OKB をまったく保有しておらず、資金調達フローで X Layer 上の同一チェーンスワップが必要な場合は、この点を伝え、続行前に確認してください。OKX がより広範なガス負担ポリシーを確認するまでは、最終決済送金のみがガス負担の対象であると想定してください。
- ブリッジ先のトークン。 資金調達フローのポーリングループが完了してもウォレットに
$X402_ASSETがない場合は、送信元チェーンのトランザクションハッシュと Across のエクスプローラーリンクをユーザーに提示してください。ブリッジによって X Layer 上の異なるバリアントが送られた可能性(現在の Across の経路ではまれです)や、ブリッジが失敗した可能性があります。v1.0.0 は別のトークンの到着を自動検出しないため、ユーザーがオンチェーンで確認する必要があります。
フェーズ 4、EIP-3009 の署名と X-PAYMENT の送信
OKX の APP Instant Payment は、x402 の "exact" スキームを使用します。支払者は、トークン独自の EIP-712 ドメインに紐づいた TransferWithAuthorization 型付きデータメッセージに署名します。署名済みの認可は、再試行時に X-PAYMENT ヘッダーで送信されます。OKX のファシリテーターがオンチェーンで送金を決済します(X Layer では支払者のガス代はゼロです)。
ステップ 5、ユーザーの確認
このスキルが扱うすべてのトランザクションでは、それぞれ個別に AskUserQuestion による確認を行う必要があります。資金調達の各処理も例外ではありません。「資金調達」は単一のトランザクションではなく、複数のトランザクションで構成され、それぞれに個別の確認が必要です。通常、次の順序で確認を行います。
- 送信元チェーンでの ERC-20 承認。Permit2/Universal Router に対する承認です(
tokenInがネイティブトークンではなく、許容量が不足している場合のみ)。 - 送信元チェーンでの同一チェーンスワップ(例:Ethereum 上で UNI を USDC に交換)。資金調達計画に送信元チェーンでの処理が含まれる場合に行います。
- クロスチェーンの経路へのブリッジ送信(Across、OKX ブリッジなど)。ブリッジ処理がこのスキルの外部でユーザーによって開始される場合、確認内容は「このスキルを終了してブリッジを実行し、X Layer に資金が到着したら再度呼び出す準備はできていますか?」となります。
- X Layer での同一チェーンスワップ(例:USDG を USDT0 に交換)。資金調達計画に送信先チェーンでの処理が含まれる場合に行います。
- 402 の決済に使用する EIP-3009
TransferWithAuthorizationの署名。
各確認には、read -p や bash プロンプトへの echo、回答に「(はい/いいえ)」と表示する方法ではなく、AskUserQuestion エージェントツールを使用し、先に進む前にユーザーの返信を待ってください。各確認で提示する概要には、次の内容を含める必要があります。
- アクション(承認、スワップ、ブリッジ、EIP-3009 認可への署名)。
- 金額とトークン(スワップおよびブリッジでは入力額と出力額の両方)。
- 送信元チェーンと送信先チェーン(異なる場合)。
- 受取人(EIP-3009 の処理では
payTo)。 - 支払いの対象となるリソース URL。
- 推定ガス代(該当する場合)。
よくある失敗例。 複数のステップを含む資金調達計画を回答で説明する際、複数のトランザクションを「資金調達と支払いを進めますか?」のような単一の確認質問にまとめてはいけません。各トランザクションを実行する直前に、それぞれ個別に確認する必要があります。最初にまとめて得た「はい」は、後続のトランザクションへの同意にはなりません。ユーザーは、それらのトランザクションが実行される時点の実際の金額、ガス代、受取人を確認していないためです。
各確認で明示的な同意を得てください。確認はそれぞれ独立しています。ユーザーが以前にセッション、呼び出し、またはウォレットを事前承認していたとしても、決して自動送信してはいけません。フローの早い段階での「はい」は、その後の処理には引き継がれません。また、複数ステップの計画への「はい」は、その中の個々のトランザクションへの「はい」ではありません。
応答における適切な確認ゲートの例。 スキルをリアルタイムで実行する場合でも、テキストで計画を説明する場合でも、すべての取引手順はそれぞれ独立した「確認ゲート」ブロックとしてラベル付けし、構造化された概要と明示的な
AskUserQuestionの呼び出しの両方を含める必要があります。各ゲートで、このテンプレートをそのまま再現してください。ゲートを1行にまとめてはいけません。「署名の前に確認します」のような受動態でゲートを説明してはいけません。個別のアクションとしてゲートを示してください。テンプレート(ゲートが1つしかない場合も、すべてのゲートで使用):
### 確認ゲート N:<アクション名> | フィールド | 値 | | ------------ | ---------------------------------------- | | アクション | <approve / swap / bridge / sign EIP-3009>| | 入力量 | <ソースチェーン上の数量 + シンボル> | | 出力量 | <宛先チェーン上の数量 + シンボル> | | ソースチェーン | <チェーン名 + ID> | | 宛先チェーン | <チェーン名 + ID> | | 受取人 | <アドレス> | | リソース URL | <支払いが紐付けられている URL> | | 推定ガス代 | <数量 + トークン> | 次に AskUserQuestion("Proceed with <action>?") を呼び出し、 ユーザーの返答を待って処理を停止してください。明示的な「yes」以外の返答があった場合は、停止して報告してください。
AskUserQuestion("Proceed?")の呼び出しと返答を待つ処理がなく、フィールドだけを列挙した応答は、どれほど網羅的に見えても確認ゲートではありません。各ゲートに個別の手順として名前を付け、続行する前にユーザーの返答を待ってください。
確認ゲートとして認められないもの。 標準出力に
"⚠️ CONFIRMATION REQUIRED"と"(yes/no)"を出力してからecho "Signing..."を実行する bash スクリプトは、ユーザーの入力にかかわらずスクリプトが続行するため、ゲートではありません。正しいゲートではAskUserQuestionツールを使用します(または、ユーザーがシェルのみのモードを明示的に選択した場合は、実際に処理をブロックするread -pと、それに続くスクリプト内の明示的なyes/no分岐を使用します)。迷った場合はAskUserQuestionを優先してください。
共有ウォレットでの競合。 ウォレットが共有されている場合(たとえば、複数のエージェントが同じキーに対して同時に実行されている場合)、残高確認から送信までの間に残高が使い切られる可能性があります。確認の時点でも
balanceOfを再確認してください。
ステップ 6、署名と送信
ドメインの構築、ノンスの生成、viem による署名、ペイロードの組み立て、再試行を含む詳細な手順については、references/app-x402-flow.md を参照してください。再試行する場合、チャレンジに accepts[].resource が含まれていればその URL を対象とし、含まれていなければ元のリクエスト URL を対象とします。
ドメインに関する警告。
verifyingContractは別の検証コントラクトではなく、トークンコントラクトです。デフォルト値を想定せず、チャレンジのextraフィールドにあるnameとversionを使用してください。トークンによってドメイン値は異なります。ドメインが誤っていると、ファシリテーターは署名を拒否し、再度 402 を返します。
extra.nameの UTF-8 はビット単位で正確に扱うこと。 EIP-712 ドメインハッシュはバイト単位で正確でなければなりません。extraのnameフィールドは、チャレンジのバイト列から変更せずに渡す必要があります。正規化したり、小文字に変換したり、ASCII のT(U+0054)を Unicode の₮(U+20AE)に置き換えたり、Unicode の形式(NFC と NFD)を統合したりしないでください。たとえば、チャレンジが"USD₮0"を返した場合は、"USD₮0"として署名する必要があります。これを"USDT0"として読み取ると、ファシリテーターに署名を拒否され、再度 402 が返されます。extra.nameの生のバイト列をそのまま EIP-712 ドメインに渡してください。
エラー処理
| 状況 | 対応 |
|---|---|
402 チャレンジに network フィールドがない | チャレンジ本文を確認します。chainId が 196 と判定される場合はこのスキルを使用し、それ以外の場合は pay-with-any-token にエスカレーションします。 |
| ネットワークがチェーン 196 ではない | pay-with-any-token にエスカレーションします。 |
x402Version !== 1 | 適切に拒否し、バージョン不一致エラーを表示します。このスキルの v1.0.0 は x402 v1 のみを対象としています。 |
accepts[].scheme !== "exact" | 適切に拒否します。v1.0.0 は exact スキームのみをサポートしています。他の x402 スキーム(upto、batch-settlement)は対象外です。 |
accepts[].maxAmountRequired === "0" | 加盟店の設定ミスとして適切に拒否します。HTTP 402 は正の金額の支払いを要求します。OKX のファシリテーターは金額ゼロの送金を決済しません。署名せず、ゼロを ping、認証チェック、または無料プランとして正当化しないでください。 |
| アプリが X Layer 上の USDC を要求する | 明確な注意事項を表示します。X Layer では、USDC に信頼できる Uniswap v3 のルーティングがありません。流動性のあるチェーン(Base、Arbitrum、Mainnet)から USDC を直接ブリッジするか、USDT0 について問い合わせるよう提案します。 |
| X Layer 上の資産が不足している | 資金調達フロー(フェーズ 3)を開始します。 |
| Trading API が 400 を返す | リクエストとレスポンスをログに記録し、金額の形式とアドレスのチェックサムを確認します。 |
| Trading API が 429 を返す | 間隔を空け、指数バックオフで再試行します。 |
| 見積もりの有効期限が切れている | 見積もりを再取得します。古い permitData を再利用しないでください。 |
| ブリッジがタイムアウトする | Across のブリッジエクスプローラーを確認します。再送信しないでください。 |
| EIP-3009 署名が拒否される(再試行時に 402) | extra のドメイン name / version(非 ASCII 文字を含め、バイト単位で完全一致)を確認し、validBefore が有効であることと、nonce が未使用であることを確認します。 |
| 再試行時に金額が一致しない | 実際の資産のオンチェーン decimals() を使って基本単位を再計算します。6 と決めつけないでください。 |
オンチェーン決済がリバートする(transferFrom 失敗) | 再試行時に balanceOf を再確認します。署名と送信の間に残高が引き出された可能性があります(共有ウォレット、並行しているエージェント、手動送金)。再試行する前にユーザーに知らせてください。 |
ユーザーがエスクロー/セッション/バッチ/upto について尋ねる | このスキルのバージョンでは、インスタント決済(exact スキーム)のみを扱うと伝えます。他のプリミティブは v1.0.0 の対象外です。OKX の提供開始に合わせて、v1.x の後続対応で取り上げます。 |
主なアドレスと参照情報
X Layer(チェーン 196)
- チェーン ID:
196 - パブリック RPC:
https://rpc.xlayer.tech - USDT0:
0x779Ded0c9e1022225f8E0630b35a9b54bE713736(小数桁数 6) - USDG:
0x4ae46a509F6b1D9056937BA4500cb143933D2dc8(小数桁数 6) - USDC:
0x74b7F16337b8972027F6196A17a631aC6dE26d22(小数桁数 6。X Layer では信頼できる Uniswap ルーティングがないため、流動性の高いチェーンからブリッジしてください) - WOKB(ラップされたネイティブトークン):
0xe538905cf8410324e03A5A23C1c177a474D59b2b(小数桁数 18) - Uniswap V3 ファクトリー:
0x4B2ab38DBF28D31D467aA8993f6c2585981D6804 - SwapRouter02:
0x4f0C28f5926AFDA16bf2506D5D9e57Ea190f9bcA - Universal Router 2.1:
0xDa00aE15d3A71466517129255255db7c0c0956d3 - QuoterV2:
0xD1b797D92d87B688193A2B976eFc8D577D204343 - Permit2:
0x000000000022D473030F116dDEE9F6B43aC78BA3 - USDT0/USDG プール:
0x0cBe0dBE1400e57f371a38BD3b9bC80F7C3676dA - USDT0/WOKB プール:
0x63d62734847E55A266FCa4219A9aD0a02D5F6e02
Uniswap Trading API
- ベース URL:
https://trade-api.gateway.uniswap.org/v1 - ヘッダー:
x-api-key: $UNISWAP_API_KEY - ヘッダー:
x-universal-router-version: 2.1.1 - 対応チェーンには 1、8453、42161、10、137、130、196 などがあります (Trading API の対応チェーンのドキュメントを参照してください)。
X Layer 上のオンチェーン Universal Router コントラクトの表記は 2.1 です(上記の
0xDa00aE15d3A71466517129255255db7c0c0956d3にデプロイされています)。Trading API では、同じ Universal Router 2.1 コントラクトを対象とするルーティングパスの API 内部バージョン文字列である2.1.1をヘッダー値として指定する必要があります。 これら 2 つのバージョン文字列は関連していますが、別のものです。一方をもう一方の代わりに 使用しないでください。
OKX APP
- APP 概要/開発者向けドキュメント:
https://web3.okx.com/onchainos/dev-docs/payments/x402-introduction - OKX onchainos-skills リポジトリ:
https://github.com/okx/onchainos-skills - x402 仕様:
https://github.com/coinbase/x402
関連スキル
- pay-with-any-token:X Layer 以外のチェーン(Ethereum、Base、 Arbitrum、Tempo など)での HTTP 402 チャレンジに対応する姉妹スキルです。X Layer 以外のチャレンジには、 このスキルを使用してください。
- swap-integration:Uniswap スワップ統合の包括的なリファレンスです (Trading API、Universal Router、Permit2)。