読了時間:14分
概要
Machine Payments Protocol(MPP)を使えば、HTTPリクエストと連動してAPIへのアクセス料金を支払うことができます。アカウントもAPIキーも不要です。必要なのは、ステーブルコインの残高があるウォレットだけです。
セッション機能は、これをさらに一歩進めたものです。支払いチャネルを一度開設すれば、その後のすべてのリクエストでそれを再利用できます。各呼び出しは、署名付きの小さなバウチャーで支払われるため、その都度オンチェーン取引が行われることはなく、リクエストは高速なまま維持されます。
このガイドでは、単一のMPPセッションを開き、QuicknodeのMPPエンドポイントを使用して15のEVMチェーンにわたるネイティブトークンの残高を照会し、コストの内訳を含むフォーマット済みのレポートを出力するTypeScriptスクリプトを作成します。
このスクリプトは、1回の実行で異なるネットワークをまたいで複数のRPC呼び出しを行うため、セッションに最適です。呼び出しごとに個別に料金を支払うのではなく、すべてのリクエストが1つの決済チャネルを経由します。セットアップ費用を一度支払えば、その後はそれを再利用できます。
Quicknodeは、対応しているすべてのチェーンでMPPセッションをサポートしています。イーサリアムへのクエリを行うのと同じセッションで、追加の設定なしにBase、Arbitrum、Polygonなどへのクエリも実行できます。
各ウォレットには、MPPやx402を含むQuicknodeのエージェンティック決済プラットフォーム全体で、毎月1,000,000 APIクレジットの共有無料枠が割り当てられます。標準のRPCリクエストは1回につき1 APIクレジットを消費しますが、SQL Explorerではクエリの実行に要した分のAPIクレジットが消費されます。
Quicknode は、アカウント不要の RPC アクセス向けに、2 つのウォレットベースの支払いプロトコルをサポートしています。MPP(本ガイドで使用)とx402(Coinbase によるオープンスタンダード)です。どちらも、スクリプトや AI エージェントが API 呼び出しの料金をインラインで支払うことができ、アカウントや API キーは不要ですが、通信フォーマット、セッションの仕組み、およびサポートされる支払い方法には違いがあります。 両者の比較については「Agentic Payments」の概要を参照するか、プロトコルの詳細についてはx402のドキュメントおよびMPPのドキュメントをご覧ください。
学習内容
- Machine Payments Protocol の仕組みと、セッションが存在する理由
- セッションのライフサイクル全体:402チャレンジ、チャネルへの預け入れ、バウチャーの署名、および決済
- の使い方
mppx決済セッションの作成および管理を行うSDK - QuicknodeのMPPエンドポイントを使用して、1つのセッション内で異なるチェーンに対して複数のRPC呼び出しを行う方法
必要なもの
- Node.jsv20 以降
- TypeScript および EVM チェーンに関する基本的な知識
- QuicknodeのアカウントやAPIキーは不要です(MPPがアクセス管理と課金を担当します)
- Tempoテストネット上の少量のPathUSD(スクリプト内のファウセットを通じて自動で資金が供給される)または、本番環境向けのTempoメインネット上のPathUSD/USDC.e
「Machine Payments Protocol」とは何ですか?
Machine Payments Protocol は、IETF に提案されたオープンスタンダードであり、任意の HTTP エンドポイントにインライン決済機能を追加するものです。これは、特定の課題を解決するために設計されています。すなわち、プログラムによるクライアント(エージェント、スクリプト、ボットなど)は、人間が事前に課金設定を行わない限り、API へのアクセス料を支払う適切な手段を持たないという課題です。
従来の決済フローは、チェックアウトフォーム、ブラウザセッション、および視覚的なCAPTCHAに依存しています。MPPは、これらをHTTPを基盤とした機械可読な決済ネゴシエーションに置き換えます。 402 支払が必要です.
仕組み
このプロトコルは、チャレンジ・レスポンス方式に従っています:
- リクエスト:クライアントは、有料エンドポイントに対して通常のHTTPリクエストを送信します。
- 課題: サーバーは次のように応答します
402 支払が必要ですそして、aWWW-Authenticate: 支払い価格、利用可能な通貨、および利用可能な支払い方法を説明するヘッダー。 - 支払い:クライアントは支払い方法を選択し、その手続きを完了させます(ステーブルコインの送金に署名する、ペイメントチャネルを開設するなど)。
- 再試行: クライアントは、
承認:支払い支払いの証明が記載されたヘッダー。 - 配達する: サーバーは支払いを確認し、応答を返します。その応答には
領収書ヘッダー。
次のようなクライアントライブラリ mppx 手順2から4までを自動的に処理します。コードの観点からは、リクエストはただ正常に動作するだけです。
課金 vs. セッション
MPPでは、課金の仕組みを制御する2つの支払いインテントを定義しています:
| 請求 | セッション | |
|---|---|---|
| パターン | リクエストごとに1回限りの支払い | 決済チャネルを通じた従量課金 |
| 決済 | リクエストごとのオンチェーン取引数 | オフチェーンのバウチャー、決済は開始時および終了時のみオンチェーンで行われる |
| 検証遅延 | 数百ミリ秒(オンチェーン) | マイクロ秒(CPUに依存する ecrecover) |
| こんな方に最適 | 時折寄せられる問い合わせ、簡単な連携 | 高頻度のリクエスト、バッチ処理ワークフロー、エージェント |
主な違いは、支払いの検証が行われる仕組みにあります。「charge」では、リクエストごとにオンチェーン取引が発生します。一方、「sessions」では、サーバーが署名済みのバウチャーを単一の ecrecover 呼び出しであり、クリティカルパスにはRPC呼び出しやデータベースへの書き込みが含まれていません。つまり、セッション中、サーバーはこのチェーンに一切アクセスしないため、スループットはブロックチェーンのコンセンサスではなく、サーバーのCPUによって制限されます。
QuicknodeのMPPエンドポイントでは、これは具体的なコスト削減にもつながります。チャージリクエストは1件あたり0.001ドル、セッションリクエストは1件あたり0.00001ドルです。1回の実行で異なるネットワークをまたいで15回以上のRPC呼び出しを行うスクリプトの場合、セッションが最適な選択肢となります:
| クエリの対象となったチェーン | 料金(1リクエストあたり0.001ドル) | セッション(1リクエストあたり0.00001ドル) |
|---|---|---|
| 10 | $0.010 | $0.0001 |
| 25 | $0.025 | $0.00025 |
| 50 | $0.050 | $0.0005 |
セッションのライフサイクルの理解
コードの解説に入る前に、セッションが内部でどのように機能しているかを理解しておくことが重要です。次の図は、当社のマルチチェーン残高チェッカーの全体的なフローを示しています:
重要な概念
支払いチャネル:クライアントが事前に資金を預け入れるオンチェーンのエスクロー契約。これはセッション開始時に1回だけ行われます。
バウチャーの累積:各リクエストには、「これまでに合計 X まで消費しました」という署名付きメッセージが含まれます。バウチャーは累積型であり、増分型ではありません。サーバーは、未払いの全額を請求するために、最新のバウチャーのみを必要とします。例えば、それぞれ 0.00001 ドルのリクエストを 3 回行った場合、バウチャー(1) = 10、バウチャー(2) = 20、バウチャー(3) = 30 アトミック単位となります。
マルチネットワークセッション: 1つのセッションインスタンスが、異なる /session/:network エンドポイント。セッションは決済チャネルを管理し、ネットワークスラグによって、リクエストがどのQuicknode RPCバックエンドにプロキシされるかが決定されます。
決済:セッションが終了すると、サーバーは最終的なバウチャーをオンチェーンで決済します。クライアントには、未使用のデポジットが返金されます。
プロジェクトの設定
スクリプトの全文は、 qn-ガイド-例 リポジトリ (ソースファイルを直接表示する). これをクローンして、依存関係をインストールします:
git https://github.com/quiknode-labs/qn-guide-examples.git をクローンする
cd qn-guide-examples/mpp/multichain-balance-checker
npm install
また、以下の内容をコピーすることもできます。 index.ts ファイル ご自身のプロジェクトに取り込み、必要な依存関係をインストールしてください。
このプロジェクトでは、2つのランタイム依存関係を使用しています:
| パッケージ | 目的 |
|---|---|
mppx | MPPプロトコルクライアント(セッション管理、バウチャー署名) |
viem | ウォレットの操作と残高の表示形式 |
さらに、2つの開発用依存関係: tsx TypeScriptを直接実行するために、そして TypeScript 型チェックのため。
チェーンレジストリの定義
このスクリプトは、複数のEVMチェーンにわたるネイティブ残高を照会します。各チェーンは、MPPネットワークのスラッグ、表示名、ネイティブトークンのシンボル、および小数点以下の桁数で定義されています:
const CHAINS = [
{ slug: 'ethereum-mainnet', name: 'Ethereum', symbol: 'ETH', decimals: 18 },
{ slug: 'base-mainnet', name: 'Base', symbol: 'ETH', decimals: 18 },
{ slug: 'arbitrum-mainnet', name: 'Arbitrum', symbol: 'ETH', decimals: 18 },
{ slug: 'optimism-mainnet', name: 'Optimism', symbol: 'ETH', decimals: 18 },
{ slug: 'matic-mainnet', name: 'Polygon', symbol: 'POL', decimals: 18 },
{ slug: 'worldchain-mainnet', name: 'World Chain', symbol: 'ETH', decimals: 18 },
{ slug: 'bsc-mainnet', name: 'BNB Chain', symbol: 'BNB', decimals: 18 },
{ slug: 'fantom-mainnet', name: 'Fantom', symbol: 'FTM', decimals: 18 },
{ slug: 'celo-mainnet', name: 'Celo', symbol: 'CELO', decimals: 18 },
{ slug: 'xdai-mainnet', name: 'Gnosis', symbol: 'xDAI', decimals: 18 },
{ slug: 'zksync-mainnet', name: 'zkSync Era', symbol: 'ETH', decimals: 18 },
{ slug: 'scroll-mainnet', name: 'Scroll', symbol: 'ETH', decimals: 18 },
{ slug: 'linea-mainnet', name: 'Linea', symbol: 'ETH', decimals: 18 },
{ slug: 'mantle-mainnet', name: 'Mantle', symbol: 'MNT', decimals: 18 },
{ slug: 'blast-mainnet', name: 'Blast', symbol: 'ETH', decimals: 18 },
]
ここで重要なのがネットワークスラグです。これは、 https://mpp.quicknode.com/session/:slug. その /セッション/ URL内のプレフィックスは、サーバーに対して「charge intent」ではなく「session intent」を使用するよう指示するものです。
必要に応じてチェーンを追加または削除できます。QuicknodeのMPPエンドポイントは、サポートされているすべてのネットワークに対応しています。また、サポートされているスラグの完全なリストを動的に取得することもできます:
curl https://mpp.quicknode.com/networks
なお、クエリの対象となるチェーンは、決済ネットワークから切り離されている点にご注意ください。セッションはTempoブロックチェーン(テストネットまたはメインネット)上で実行されますが、サポートされている任意のチェーン上のRPCエンドポイントにアクセスすることができます。
ウォレットの設定
このスクリプトは、ペイメントチャネルのバウチャーに署名するためにウォレットを必要とします。環境にある既存の秘密鍵を使用することも、自動的に新しい秘密鍵を生成することも可能です:
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
const privateKey = (process.env.MPPX_PRIVATE_KEY を `0x${文字列}`) || generatePrivateKey()
const account = privateKeyToAccount(privateKey)
キーが自動生成されると、スクリプトはそのキーを .env ファイル(以下を含む) chmod 600 (権限)これにより、今後の実行では同じウォレットが再利用されます:
import { existsSync, writeFileSync } from 'fs'
if (isGenerated && !existsSync(envPath)) {
writeFileSync(
envPath,
[
'# Auto-generated by multichain balance checker',
'# This file is gitignored — never commit private keys.',
`MPPX_PRIVATE_KEY=${privateKey}`,
'',
].join('\n'),
{ mode: 0o600 },
)
}
テストネット・ファウセットを通じた資金調達
テストネット利用の場合、このスクリプトはTempoテストネットのファウセットを利用して、ウォレットに自動的に資金を供給します。これにより、ウォレットにはPathUSD(テストネットのステーブルコイン)と、Tempo Moderato(チェーンID 42431)上のガスが付与されます:
async function fundWallet(address: string): Promise<void> {
const res = await fetch('https://docs.tempo.xyz/api/faucet', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ address }),
})
if (res.ok) {
console.log('Faucet: Request accepted — waiting for onchain confirmation...')
await waitForFunding(address)
}
}
その 資金調達待ち この関数は、処理を進める前に残高が反映されていることを確認するため、Tempo Moderato上のPathUSDコントラクトをポーリングします:
const TEMPO_RPC = 'https://rpc.moderato.tempo.xyz'
const PATHUSD_ADDRESS = '0x20c0000000000000000000000000000000000000'
async function getPathUSDBalance(walletAddress: string): Promise<bigint> {
const data = '0x70a08231' + walletAddress.slice(2).padStart(64, '0')
const res = await fetch(TEMPO_RPC, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0', id: 1,
method: 'eth_call',
params: [{ to: PATHUSD_ADDRESS, data }, 'latest'],
}),
})
const json = (await res.json()) as { result?: string }
return BigInt(json.result ?? '0x0')
}
この「手間いらず」の仕組みにより、誰でもリポジトリをクローンしてスクリプトを実行でき、どこかに登録したり、手動でウォレットに資金を入金したりする必要はありません。
QuicknodeのMPPセッションフローでは、x402と同じ無料枠のバケットが使用されます。ウォレット1つにつき、毎月1,000,000 APIクレジットが提供されます。RPCリクエストは1回につき1 APIクレジットを消費しますが、SQL Explorerではクエリで消費された分のAPIクレジットが差し引かれます。無料枠を使い切った後は、メインネットに資金が投入されたウォレットに切り替えてください。「本番環境への移行」を参照してください。
セッションの作成と残高の照会
ここがセッションのコアロジックが実装されている場所です。このスクリプトは、 tempo.session(), その後、各チェーンを順に処理し、 eth_getBalance セッションを介したリクエスト:
import { tempo } from 'mppx/client'
const session = tempo.session({
account,
maxDeposit: '1', // 1 PathUSD — covers 100,000 requests at $0.00001/each
})
その maxDeposit このパラメータは、支払いチャネルの総予算を設定します。セッションが終了した時点で、未使用分の金額は返金されます。
セッションの途中でチャネルの預金が底をついた場合、 mppx クライアントは、セッションを終了して再起動することなく、追加のオンチェーン入金によってチャネルに資金を補充することができます。当社の15チェーン用スクリプトの場合、少額の入金でも十分ですが、数千件ものリクエストを行うような、長時間実行されるアプリケーションを構築している場合には、この機能が役立ちます。
セッションを介したRPC呼び出し
各チェーンについて、スクリプトは以下を呼び出します session.fetch() 標準のJSON-RPCを使用して eth_getBalance ペイロード。このセッションでは、MPPのすべての仕組みが自動的に処理されます:
const MPP_BASE_URL = 'https://mpp.quicknode.com/session'
for (const chain of CHAINS) {
const response = await session.fetch(`${MPP_BASE_URL}/${chain.slug}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'eth_getBalance',
params: [WALLET_ADDRESS, 'latest'],
}),
})
const data = (await response.json()) as { result?: string; error?: { message: string } }
// Parse hex balance to human-readable format
const balance = formatBalance(data.result!, chain.decimals)
}
その 最初のリクエスト, session.fetch() 402のチャレンジ・レスポンス・フロー全体を処理します。具体的には、チャレンジを受信し、PathUSDをオンチェーンのエスクロー契約に預け入れ、署名済みのバウチャーを使用して再試行を行います。この処理には約500ミリ秒かかります。
について それ以降のすべてのリクエスト, セッションでは単に累積バウチャーをインクリメントし、それを 承認 ヘッダー。サーバーは、1回の ecrecover 処理(オンチェーン取引は不要)であるため、応答の送信にかかる支払いのオーバーヘッドはほぼゼロです。
また、このスクリプトには、一時的なMPPルーティングの問題に対処するため、404レスポンスに対する再試行機能も含まれています:
if (response.status === 404) {
response = await session.fetch(`${MPP_BASE_URL}/${chain.slug}`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: rpcBody,
})
}
貸借対照表の書式設定
その eth_getBalance レスポンスには、残高をwei(またはそのチェーンにおける同等の最小単位)で表した16進数の文字列が返されます。スクリプトはこの値を、人間が読みやすい10進数に変換します:
import { formatUnits } from 'viem'
function formatBalance(hexBalance: string, decimals: number): string {
const value = BigInt(hexBalance)
return parseFloat(formatUnits(value, decimals)).toFixed(4)
}
セッションの終了
すべてのクエリが完了すると、スクリプトはセッションを終了し、オンチェーンでの決済をトリガーします。サーバーは最終的な累積バウチャーの決済を行い、未使用のデポジットをウォレットに返金します:
// セッションを終了する前にセッションデータを取得する
const channelId = session.channelId
const 累積支出 = セッション.累積
コンソール.ログ('セッションを終了し、オンチェーンで決済中...')
const レシート = await session.close()
その後、スクリプトは総費用、払い戻し額、および決済の詳細を示す概要を出力します:
printSummary(
結果,
totalRequests,
channelId,
累積支出,
receipt?.txHash,
);
また、このスクリプトではクエリループ全体をtry/catchで囲み、エラーが発生した場合でもセッションを閉じようとするため、決済チャネルが無期限に開いたままになることはありません:
try {
// ... query loop ...
await session.close()
} catch (err) {
console.error('Fatal error:', err instanceof Error ? err.message : err)
try {
await session.close()
console.log('Session closed after error.')
} catch {
console.log('Could not close session.')
}
process.exit(1)
}
スクリプトの実行
すべての準備が整ったら、スクリプトを実行してください:
# 自動生成されたテストネットウォレットを使用して実行する(設定不要)
npx tsx index.ts
# または、.env ファイルを介して独自の秘密鍵を指定する
echo "MPPX_PRIVATE_KEY=0x..." > .env
npx tsx --env-file=.env index.ts
次のような出力が表示されるはずです:
マルチチェーン残高チェッカー(MPPセッション経由)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ウォレット: 0x1234...abcd (自動生成)
対象: 0xd8dA...6045
チェーン | 残高 | ステータス
──────────────────┼───────────────────────┼──────────
イーサリアム | 1.2345 ETH | OK
Base | 0.5000 ETH | OK
Arbitrum | 0.0000 ETH | OK
オプティミズム | 2.1000 ETH | OK
Polygon | 150.0000 POL | OK
BNB Chain | 0.0312 BNB | OK
... | ... | ...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
セッション概要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
クエリ対象チェーン数: 15 (15 正常、0 エラー)
RPC呼び出し総数: 15
セッションコスト: 0.000150 PathUSD ($0.00015)
チャネルへの預け入れ: 1.000000 PathUSD
返金額: 0.999850 PathUSD
チャネル ID: 0xdef456...abc123
決済トランザクション: 0xabc123...def456
セッションが終了したら、ブロックエクスプローラーで決済内容を確認できます。その 決済取引 出力内のハッシュは、最終的なオンチェーン取引へのリンクです。以下の テストネットエクスプローラー 「テンポ・モデラート」または メインネットエクスプローラー 量産用として。
以下のスクリーンショットは、決済取引がどのように表示されるかを示しています:

赤い枠は、この決済チャネルに関連する2つの残高振替を示しています。セッション開始時にエスクロー契約へ送金された1 PathUSDと、決済時に払い戻しとして返還された0.99985 PathUSDです。オレンジ色の枠は、決済取引の一環としてサーバーに支払われた実際のセッション費用(0.00015 PathUSD)を示しています。
チェック対象のウォレットアドレスは、 WALLET_ADDRESS 先頭の定数 index.ts:
const WALLET_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' // 任意のアドレス
本番環境への移行
このスクリプトは、スムーズな導入を可能にするため、デフォルトでテストネットが設定されています。本番環境での使用時には、以下の点が変更されます:
| テストネット(デフォルト) | メインネット | |
|---|---|---|
| 決済ネットワーク | テンポ・モデラート(チェーンID 42431) | Tempoメインネット(チェーンID 4217) |
| 通貨 | PathUSD | PathUSD または USDC.e |
| 無料プラン | MPPおよびx402を合わせて、ウォレットごとに月間1,000,000 APIクレジットが共有されます | 無制限 |
| ウォレットへの入金 | ファウセットを通じて自動的に資金が供給される | 手動での資金調達が必要 |
メインネットに切り替えるには、Tempoメインネット上でPathUSDまたはUSDC.eを保有しているウォレットの鍵を指定してください。その mppx クライアントは利用可能な残高を自動的に検出し、402チャレンジから適切な支払い方法を選択します。
スクリプトの拡張
残高チェッカーは、セッションの仕組みに焦点を当てられるよう、意図的にシンプルに設計されています。重要なポイントは、そのパターンにあります。つまり、「1つのセッションを開き、異なるチェーン間で多数のRPC呼び出しを行い、セッションを閉じて決済を行う」という流れです。単一のMPPセッションがすべてのネットワークスラグにわたるリクエストを処理するため、セッションの設定を変更することなく、スクリプトを拡張して、サポートされている任意のチェーン上の任意のRPCメソッドを呼び出すことができます。例えば、スワップを行うことで、ERC-20トークンの残高チェックを追加することも可能です。 eth_getBalance 〜のために eth_call トークン契約の balanceOf 関数。
結論
あなたは、単一のMPPセッションを通じて15のEVMチェーンにクエリを送信するマルチチェーン残高チェッカーを構築しました。ここで重要なポイントは、1つのペイメントチャネルを開設し、オフチェーンバウチャーを使用してサポートされているチェーンの任意の組み合わせに対して必要なだけRPC呼び出しを行い、その後チャネルを閉じて決済を行うことです。このセッションでは、最初の402チャレンジからバウチャーの署名、最終的な決済や払い戻しまで、すべての決済処理が自動的に行われました。
このパターンは、複数のRPC呼び出しを行うあらゆるワークフローに適用されます。具体的には、ポートフォリオトラッカー、モニタリングスクリプト、データパイプライン、あるいはネットワークをまたいでオンチェーンの状態を読み取る必要があるAIエージェントなどが挙げられます。セッションを利用することで、これらのツールはアカウントやAPIキーを必要とせずに、プログラム的にアクセス料金を支払うことが可能になり、かつ支払いのオーバーヘッドをクリティカルパスから排除することができます。
今後の手順
MPP、Tempo、およびQuicknodeのMPP統合について詳しく知りたい場合は、以下のリソースをご覧ください:
- Machine Payments Protocol のドキュメント
- MPP セッションベースの課金ガイド
- npm上のmppx SDK
- Quicknode MPP プロトコルリファレンス
- IETFの支払い認証仕様
- Foundry および Tempo での MPP の活用(Solidity 開発者向けガイド)
よくある質問
MPPとは何ですか?また、従来のAPIキー認証とはどのように異なるのですか?
Machine Payments Protocol(MPP)は、402「Payment Required」ステータスコードを使用して、HTTPエンドポイントにインライン決済機能を追加するオープンスタンダードです。アカウント登録やAPIキーの管理を行う代わりに、ウォレットからステーブルコインを使用してリクエストごとに支払います。これにより、スクリプト、エージェント、ボットは、人間による課金設定を必要とせずに、すぐにAPIの利用を開始できます。
リクエストごとの課金ではなく、MPPセッションをいつ利用すべきですか?
スクリプトやアプリケーションが1回の実行で複数のRPC呼び出しを行う場合は、セッションを使用してください。セッションでは、オンチェーンで1つの決済チャネルを開設し、その後のリクエストにはオフチェーンのバウチャーを使用します。バウチャーの検証はCPU負荷の高い署名チェックであり、オンチェーンでのチャージ決済に要する数百ミリ秒と比較して、数マイクロ秒のオーバーヘッドが生じます。QuicknodeのMPPエンドポイントでは、セッションの方がリクエストあたりのコストが大幅に安くなります。リクエスト数が10件未満の場合は、チャージの方が簡便です。
MPPエンドポイントを利用するには、Quicknodeアカウントが必要ですか?
いいえ。MPPエンドポイントの利用には、アカウントもAPIキーも登録も一切必要ありません。必要なのは、ステーブルコイン(またはテストネットトークン)が入ったウォレットだけです。支払いは、各HTTPリクエストと連動して行われます。
MPPセッションを通じて、SolanaのようなEVM非対応チェーンに対してクエリを実行することはできますか?
QuicknodeのMPPエンドポイントは、Solanaやその他の非EVMチェーンに対応しています。URL内のネットワークスラグを変更することで、同じセッションインスタンスを使用して、サポートされている任意のチェーンに対してクエリを実行できます。たとえば、/session/solana-mainnet を使用すると、同じペイメントチャネルを通じてSolanaのRPCエンドポイントにクエリを実行できます。
セッションを閉じる前にスクリプトがクラッシュした場合はどうなりますか?
セッションが明示的に閉じられない場合、ペイメントチャネルはタイムアウトするまで開いたままになります。サーバーは、最後に受け取ったバウチャーの決済を依然として行うことができます。これを回避するため、このスクリプトではクエリループをtry/catchで囲み、エラーが発生した場合でもセッションを閉じようとします。
無料プランはどのように機能するのでしょうか?また、メインネットに移行するにはどうすればよいですか?
QuicknodeのMPPエンドポイントは、x402と共有されている、ウォレットごとに月間1,000,000 APIクレジットの無料枠を適用します。RPCリクエストは1回につき1 APIクレジットを消費しますが、SQL Explorerではクエリで消費された分のAPIクレジットが差し引かれます。無制限に利用するには、Tempoメインネット(チェーンID 4217)上で、PathUSDまたはUSDC.eが入金されたウォレットを用意してください。
皆様からのフィードバックを心よりお待ちしております!❤️
ご意見や新しいトピックに関するご要望などがありましたら、ぜひお知らせください。皆様からのご連絡を心よりお待ちしております。
