본문으로 건너뛰기

MPP 세션을 사용하여 멀티체인 잔액 조회 도구 구축하기

업데이트 날짜:
2026년 6월 9일

읽는 데 14분

개요

머신 페이먼트 프로토콜 (MPP)을 사용하면 HTTP 요청과 동시에 API 이용 요금을 결제할 수 있습니다. 별도의 계정이나 API 키가 필요하지 않습니다. 스테이블코인 잔액이 있는 지갑만 있으면 됩니다.

세션은 이를 한 단계 더 발전시킵니다. 결제 채널을 한 번만 개설하면, 이후 모든 요청에 이를 재사용할 수 있습니다. 각 호출은 작은 크기의 서명된 바우처로 결제되므로 매번 온체인 거래가 발생하지 않아 요청 처리 속도가 빠릅니다.

이 가이드에서는 단일 MPP 세션을 열고, Quicknode의 MPP 엔드포인트를 사용하여 15개의 EVM 체인에 걸쳐 네이티브 토큰 잔액을 조회한 뒤, 비용 내역이 포함된 정형화된 보고서를 출력하는 TypeScript 스크립트를 작성하게 됩니다.

이 스크립트는 한 번의 실행으로 서로 다른 네트워크를 가로질러 여러 차례 RPC 호출을 수행하기 때문에 세션에 매우 적합합니다. 각 호출마다 별도로 요금을 지불하는 대신, 모든 요청이 하나의 결제 채널을 통해 처리됩니다. 설정 비용을 한 번만 지불하면, 나머지 요청에는 이를 재사용할 수 있습니다.

Quicknode는 지원되는 모든 체인에서 MPP 세션을 지원합니다. 이더리움을 쿼리하는 동일한 세션으로 별도의 설정 없이 Base, Arbitrum, Polygon 등도 쿼리할 수 있습니다.

무료 요금제

각 지갑에는 MPPx402를 포함한 Quicknode의 에이전트 기반 결제 인터페이스 전반에 걸쳐 월 1,000,000 API 크레딧의 공유 무료 할당량이 제공됩니다. 표준 RPC 요청은 건당 1 API 크레딧을 소모하는 반면, SQL Explorer는 쿼리에 사용된 만큼의 API 크레딧을 소모합니다.


MPP는 Quicknode의 두 가지 에이전트 기반 결제 프로토콜 중 하나입니다.

Quicknode는 계정 없는 RPC 액세스를 위해 두 가지 지갑 기반 결제 프로토콜을 지원합니다: MPP (이 가이드에서 사용됨)와 x402 (Coinbase의 개방형 표준)입니다. 두 프로토콜 모두 계정이나 API 키 없이도 스크립트와 AI 에이전트가 API 호출 비용을 인라인으로 결제할 수 있게 해 주지만, 와이어 형식, 세션 작동 방식, 지원되는 결제 수단 면에서는 차이가 있습니다. 두 프로토콜을 나란히 비교한 내용은 ‘Agentic Payments 개요’를 참조하거나, 프로토콜에 대한 자세한 내용은 x402 문서와 MPP 문서로 바로 이동하여 확인하세요.

배울 내용


  • 머신 페이먼트 프로토콜의 작동 원리와 세션이 존재하는 이유
  • 전체 세션 라이프사이클: 402 챌린지, 채널 입금, 바우처 서명 및 정산
  • 사용 방법 mppx 결제 세션을 생성하고 관리하기 위한 SDK
  • Quicknode의 MPP 엔드포인트를 사용하여 단일 세션 내에서 서로 다른 체인에 걸쳐 여러 RPC 호출을 수행하는 방법

준비물


  • Node.js v20 이상
  • TypeScript 및 EVM 체인에 대한 기본적인 이해
  • Quicknode 계정이나 API 키가 필요하지 않습니다(MPP에서 액세스 및 결제를 처리합니다).
  • Tempo 테스트넷의 소량의 PathUSD(스크립트 내 파우셋을 통해 자동 충전됨) 또는 실제 사용을 위한 Tempo 메인넷의 PathUSD/USDC.e

머신 페이먼트 프로토콜이란 무엇인가요?

머신 페이먼트 프로토콜(Machine Payments Protocol)은 IETF에 제안된 개방형 표준으로, 모든 HTTP 엔드포인트에 인라인 결제 기능을 추가합니다. 이 프로토콜은 특정 문제를 해결하기 위해 고안되었습니다. 즉, 프로그래밍 방식의 클라이언트(에이전트, 스크립트, 봇)는 사람이 먼저 청구 설정을 해 주지 않으면 API 이용 요금을 지불할 적절한 방법이 없다는 문제입니다.

기존의 결제 흐름은 결제 양식, 브라우저 세션, 시각적 CAPTCHA에 의존합니다. MPP는 이를 HTTP를 기반으로 한 기계 판독 가능한 결제 협상 방식으로 대체합니다. 402 결제 필요.

작동 원리

이 프로토콜은 챌린지-응답 방식을 따릅니다:


  1. 요청: 클라이언트가 유료 엔드포인트로 일반 HTTP 요청을 보냅니다.
  2. 도전 과제: 서버는 다음과 같이 응답합니다. 402 결제 필요 그리고 a WWW-Authenticate: 결제 가격, 허용되는 통화 및 이용 가능한 결제 수단을 설명하는 헤더.
  3. 결제: 클라이언트가 결제 방식을 선택하고 이를 이행합니다(스테이블코인 이체에 서명하거나, 결제 채널을 개설하는 등).
  4. 다시 시도: 클라이언트는 다음을 포함하여 원래 요청을 다시 전송합니다. 승인: 결제 결제 증빙 자료가 포함된 헤더.
  5. 전달: 서버는 결제를 확인한 후 응답을 반환하며, 이 응답에는 지불 영수증 헤더.

다음과 같은 클라이언트 라이브러리 mppx 2단계부터 4단계까지 자동으로 처리합니다. 개발자 입장에서는 요청이 그냥 정상적으로 처리되는 것처럼 보입니다.

요금 대 세션

MPP는 청구 방식이 어떻게 작동하는지 제어하는 두 가지 결제 인텐트를 정의합니다:

요금세션
패턴요청 건당 일회성 결제결제 채널을 통한 종량제 결제
정산요청당 온체인 트랜잭션 수오프체인 바우처, 개장/폐장 시에만 온체인 정산
검증 지연 시간수백 밀리초 (온체인)마이크로초 (CPU에 의존적) ecrecover)
다음에 가장 적합합니다가끔 들어오는 문의, 간단한 연동고빈도 요청, 일괄 처리 워크플로우, 에이전트

가장 큰 차이점은 결제 확인 방식입니다. ‘charge’ 방식에서는 모든 요청이 온체인 트랜잭션을 유발합니다. 반면 ‘sessions’ 방식에서는 서버가 단일 ecrecover 호출이며, 중요 경로에는 RPC 호출이나 데이터베이스 쓰기 작업이 포함되지 않습니다. 즉, 서버는 세션 동안 해당 체인을 전혀 다루지 않으므로, 처리량은 블록체인 합의가 아닌 서버 CPU에 의해 제한됩니다.

Quicknode의 MPP 엔드포인트에서는 이것이 구체적인 비용 절감으로 이어지기도 합니다. 차지 요청은 건당 0.001달러인 반면, 세션 요청은 건당 0.00001달러입니다. 한 번의 실행에서 서로 다른 네트워크를 가로질러 15회 이상의 RPC 호출을 수행하는 스크립트의 경우, 세션 방식이 가장 적합합니다:

조회된 체인요금 ($0.001/요청)세션 ($0.00001/요청)
10$0.010$0.0001
25$0.025$0.00025
50$0.050$0.0005

세션 수명 주기 이해하기

코드를 살펴보기 전에, 세션이 내부적으로 어떻게 작동하는지 이해하는 것이 중요합니다. 다음 다이어그램은 멀티체인 잔액 조회기의 전체 흐름을 보여줍니다:

핵심 개념

결제 채널: 고객이 세션 시작 시점에 자금을 선입금하는 온체인 에스크로 계약입니다. 이는 세션이 시작될 때 한 번만 이루어집니다.

누적 바우처: 각 요청에는 “현재까지 총 X를 사용했습니다”라는 서명된 메시지가 포함됩니다. 바우처는 누적 방식이며, 증분 방식이 아닙니다. 서버는 미지급된 모든 자금을 청구하기 위해 가장 최근의 바우처만 필요로 합니다. 예를 들어, 각각 0.00001달러인 요청을 세 번 보낸 후: 바우처(1) = 10, 바우처(2) = 20, 바우처(3) = 30 원자 단위입니다.

다중 네트워크 세션: 하나의 세션 인스턴스가 서로 다른 /session/:network 엔드포인트. 세션은 결제 채널을 관리하며, 네트워크 슬러그는 요청이 어떤 Quicknode RPC 백엔드로 프록시될지 결정합니다.

정산: 세션이 종료되면 서버가 온체인에서 최종 바우처를 정산합니다. 클라이언트는 미사용 예치금에 대한 환불을 받습니다.

프로젝트 설정

전체 스크립트는 qn-가이드-예시 저장소 (소스 파일을 직접 확인하기). 소스 코드를 클론하고 종속성을 설치하세요:

git https://github.com/quiknode-labs/qn-guide-examples.git 복제
cd qn-guide-examples/mpp/multichain-balance-checker
npm 설치

또한 다음을 복사할 수도 있습니다. index.ts 파일 자신의 프로젝트에 통합하고 필요한 종속성을 설치하세요.

이 프로젝트는 두 가지 런타임 종속성을 사용합니다:

패키지목적
mppxMPP 프로토콜 클라이언트 (세션 관리, 바우처 서명)
viem지갑 운영 및 잔액 표시 형식

그리고 두 가지 개발 의존성: tsx 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 },
]

여기서 네트워크 슬러그가 핵심 요소입니다. 이는 다음 위치의 MPP 세션 엔드포인트에 매핑됩니다. https://mpp.quicknode.com/session/:slug. 그 /세션/ URL의 접두사는 서버에 ‘charge intent’ 대신 ‘session intent’를 사용하도록 지시하는 역할을 합니다.

필요에 따라 체인을 추가하거나 제거할 수 있습니다. Quicknode의 MPP 엔드포인트는 지원되는 모든 네트워크를 지원합니다. 또한 지원되는 슬러그의 전체 목록을 동적으로 가져올 수도 있습니다:

curl https://mpp.quicknode.com/networks

쿼리하는 체인은 결제 네트워크와 분리되어 있다는 점에 유의하십시오. 사용자의 세션은 Tempo 블록체인(테스트넷 또는 메인넷)에서 실행되지만, 지원되는 모든 체인의 RPC 엔드포인트에 액세스할 수 있습니다.

지갑 설정하기

이 스크립트는 결제 채널에 대한 바우처를 서명하기 위해 지갑이 필요합니다. 환경에서 기존 개인 키를 사용하거나, 자동으로 새로운 개인 키를 생성할 수 있습니다:

import { 개인 키 생성, 계정에 대한 개인 키 } from 'viem/accounts'

const privateKey = (process.env.MPPX_PRIVATE_KEY `0x${문자열}`) || 개인 키 생성()
const account = 계정 전용 키(개인 키)

키가 자동으로 생성되면 스크립트는 이를 .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,000,000 API 크레딧이 제공됩니다. RPC 요청은 건당 1 API 크레딧을 소모하는 반면, SQL Explorer는 쿼리에 사용된 만큼의 API 크레딧을 소모합니다. 무료 티어가 소진된 후에는 메인넷 자금이 충전된 지갑으로 전환하십시오. ‘프로덕션 환경으로 전환하기’를 참조하십시오.

세션 생성 및 잔액 조회

이곳이 핵심 세션 로직이 구현된 곳입니다. 이 스크립트는 다음을 사용하여 MPP 세션을 생성합니다. 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
})

최대 입금액 이 매개변수는 결제 채널의 총 예산을 설정합니다. 세션이 종료되면 사용하지 않은 금액은 전액 환불됩니다.

정보

세션 도중에 채널 예치금이 소진될 경우, 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를 온체인 에스크로 계약에 예치한 뒤, 서명된 바우처를 사용하여 재시도합니다. 이 과정은 대략 500ms가 소요됩니다.

~에 그 이후의 모든 요청, 이 세션에서는 누적 바우처 값을 단순히 증가시킨 후 이를 승인 헤더. 서버는 바우처를 단일 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 응답은 잔액을 웨이(또는 해당 체인의 이에 상응하는 최소 단위)로 나타내는 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 채널 ID = session.채널ID
const 누적지출액 = session.누적

console.로그('세션을 종료하고 온체인에서 정산 중...')
const 영수증 = await session.close()

그런 다음 스크립트는 총 비용, 환불 금액 및 정산 내역을 보여주는 요약 정보를 출력합니다:

printSummary(
결과,
총 요청 수,
채널 ID,
cumulativeSpend,
영수증?.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 | 정상
베이스 | 0.5000 ETH | 정상
Arbitrum | 0.0000 ETH | 정상
Optimism | 2.1000 ETH | 정상
폴리곤 | 150.0000 POL | ok
BNB 체인 | 0.0312 BNB | 확인
... | ... | ...

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
세션 요약
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
쿼리된 체인: 15개 (15개 정상, 0개 오류)
총 RPC 호출 횟수: 15
세션 비용: 0.000150 PathUSD ($0.00015)
채널 입금: 1.000000 PathUSD
환불된 금액: 0.999850 PathUSD
채널 ID: 0xdef456...abc123
정산 트랜잭션: 0xabc123...def456

세션이 종료되면 블록 익스플로러에서 결제 내역을 확인할 수 있습니다. 정산 거래 출력에 포함된 해시는 최종 온체인 거래로 연결됩니다. 다음을 사용하십시오. 테스트넷 탐색기 템포 모데라토 또는 메인넷 탐색기 양산 시.

아래 스크린샷은 정산 거래가 어떻게 표시되는지 보여줍니다:

Tempo 블록 탐색기에서 MPP 세션 정산 거래

빨간색 상자 에는 결제 채널과 연계된 두 건의 잔액 이체 내역이 표시되어 있습니다. 세션이 시작될 때 에스크로 계약으로 전송된 1 PathUSD와, 정산 시 환불로 반환된 0.99985 PathUSD입니다. 주황색 상자 에는 정산 거래의 일환으로 서버에 지불된 실제 세션 비용(0.00015 PathUSD)이 표시되어 있습니다.

다음 항목을 수정하여 확인 중인 지갑 주소를 변경할 수 있습니다. 지갑 주소 맨 위의 상수 index.ts:

const WALLET_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045' // 임의의 주소

본격적인 운영 단계로 넘어가기

이 스크립트는 원활한 온보딩을 위해 기본적으로 테스트넷을 사용합니다. 프로덕션 환경에서 사용할 경우 변경되는 사항은 다음과 같습니다:

테스트넷 (기본값)메인넷
결제 네트워크템포 모데라토 (체인 ID 42431)Tempo 메인넷 (체인 ID 4217)
통화PathUSDPathUSD 또는 USDC.e
무료 요금제MPP 및 x402를 통틀어 지갑당 월 1,000,000 API 크레딧을 공유합니다.무제한
지갑 입금파우셋을 통해 자동으로 자금이 조달됨수동 자금 조달이 필요합니다

메인넷으로 전환하려면 Tempo 메인넷에 PathUSD 또는 USDC.e가 포함된 지갑 키를 입력하세요. mppx 클라이언트는 사용 가능한 잔액을 자동으로 감지하고 402 챌린지에서 적절한 결제 수단을 선택합니다.

스크립트 확장하기

잔액 확인 기능은 세션 메커니즘에 초점을 맞추기 위해 의도적으로 단순하게 설계되었습니다. 여기서 중요한 점은 ‘세션을 하나 열고, 여러 체인에 걸쳐 다수의 RPC 호출을 수행한 뒤, 세션을 닫고 정산한다’는 패턴입니다. 단일 MPP 세션이 모든 네트워크 슬러그에 걸친 요청을 처리하므로, 세션 설정을 변경하지 않고도 스크립트를 확장하여 지원되는 모든 체인의 임의의 RPC 메서드를 호출할 수 있습니다. 예를 들어, 다음을 교체하여 ERC-20 토큰 잔액 확인 기능을 추가할 수 있습니다. eth_getBalance ~을 위해 eth_call 토큰 계약의 balanceOf 함수.

결론

여러분은 단일 MPP 세션을 통해 15개의 EVM 체인을 조회하는 멀티체인 잔액 확인기를 구축했습니다. 여기서 기억해야 할 핵심 패턴은 다음과 같습니다. 하나의 결제 채널을 열고, 오프체인 바우처를 사용하여 지원되는 체인의 어떤 조합이든 상관없이 필요한 만큼 RPC 호출을 수행한 다음, 채널을 닫고 정산합니다. 이 세션은 초기 402 챌린지부터 바우처 서명, 최종 정산 및 환불에 이르기까지 모든 결제 절차를 자동으로 처리했습니다.

이 패턴은 포트폴리오 추적기, 모니터링 스크립트, 데이터 파이프라인, 또는 여러 네트워크에 걸쳐 온체인 상태를 읽어야 하는 AI 에이전트 등, 여러 차례의 RPC 호출을 수행하는 모든 워크플로우에 적용됩니다. 세션을 활용하면 이러한 도구들이 계정이나 API 키 없이도 프로그래밍 방식으로 액세스 비용을 지불할 수 있으며, 동시에 결제 관련 오버헤드가 핵심 처리 경로에 영향을 미치지 않도록 할 수 있습니다.

다음 단계

MPP, Tempo 및 Quicknode의 MPP 통합에 대해 더 자세히 알아보려면 다음 자료를 확인해 보세요:

자주 묻는 질문

MPP란 무엇이며, 기존의 API 키 인증과는 어떻게 다른가요?

머신 페이먼트 프로토콜(MPP)은 402 ‘결제 필요(Payment Required)’ 상태 코드를 사용하여 HTTP 엔드포인트에 인라인 결제를 추가하는 개방형 표준입니다. 계정을 등록하거나 API 키를 관리할 필요 없이, 지갑에 있는 스테이블코인을 사용하여 요청 건당 요금을 지불하면 됩니다. 이를 통해 스크립트, 에이전트, 봇 등은 사람의 개입 없이도 즉시 API를 사용할 수 있습니다.

요청별 과금 방식 대신 MPP 세션을 언제 사용해야 할까요?

스크립트나 애플리케이션이 한 번의 실행에서 여러 번의 RPC 호출을 수행하는 경우 세션을 사용하세요. 세션을 사용하면 온체인에서 결제 채널을 하나 열고, 이후 요청에는 오프체인 바우처를 사용합니다. 바우처 검증은 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 API 크레딧을 소모하는 반면, SQL Explorer는 쿼리에 사용된 만큼의 API 크레딧을 소모합니다. 무제한으로 이용하려면 Tempo 메인넷(체인 ID 4217)에 PathUSD 또는 USDC.e가 충전된 지갑을 등록하십시오.

여러분의 피드백을 ❤️ 환영합니다!

의견이나 다루었으면 하는 새로운 주제가 있다면 알려주세요. 여러분의 의견을 기다리고 있습니다.

이 가이드를 공유하세요