본문으로 건너뛰기

Solana에서 PYUSD: 실용적인 통합 가이드 (BlockEden.xyz RPC 포함)

· 약 6분
Dora Noda
Software Engineer

PayPal USD (PYUSD)가 Solana에 상륙하면서 디지털 결제 분야에 중요한 이정표가 되었습니다. 이 가이드는 엔지니어가 Solana의 지갑, dApp 및 상거래 플랫폼에 PYUSD를 통합할 때 직접적이고 생산 환경에 초점을 맞춘 단계별 안내를 제공합니다.

모든 예제는 최신 Token-2022 호환 코드를 사용하며, BlockEden.xyz의 저지연 Solana RPC 엔드포인트와 원활히 동작하도록 설계되었습니다.

TL;DR

  • 무엇인가: PayPal USD (PYUSD)는 이제 Solana의 네이티브 Token-2022 SPL 토큰으로, 전 세계적으로 인정받는 스테이블코인에 빠르고 저렴한 결제 정산을 제공합니다.
  • 핵심 파라미터: Mint 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo, 소수점 자리수 6, 토큰 프로그램 Token-2022.
  • 기능 세트: Solana Token Extensions (Token-2022)를 활용합니다. Transfer Hook이 초기화되어 있지만 현재는 null 프로그램으로 비활성화되어 있으며, 기밀 전송 기능 및 기타 확장 기능을 포함합니다.
  • 크로스체인: 공식 LayerZero 통합을 통해 PYUSD가 Ethereum과 Solana 사이를 안전한 burn‑and‑mint 메커니즘으로 이동할 수 있어 기존 브리지의 위험을 회피합니다.
  • 액션: 이 가이드를 템플릿으로 사용해 BlockEden.xyz의 안정적인 Solana RPC와 함께 애플리케이션에 PYUSD 지원을 바로 추가하세요.

왜 Solana에서 PYUSD가 중요한가

PayPal 브랜드와 Solana 성능의 결합은 디지털 달러를 위한 강력한 새로운 레일을 만듭니다.

  1. 소비자 신뢰와 크립토 UX의 결합: PYUSD는 규제된 트러스트 회사 Paxos가 발행하고 PayPal 및 Venmo에 깊게 통합되어 있습니다. 사용자는 익숙한 자산을 보유하게 되며, 하나의 PYUSD 잔액을 가지고 Ethereum 또는 Solana 외부 지갑으로 인출할 수 있어 체인 복잡성을 추상화합니다.
  2. 결제 준비 레일: Solana의 아키텍처는 서브초 거래 최종성을 제공하고 수수료는 센트의 일부에 불과합니다. PYUSD는 이 효율적인 정산 네트워크 위에 안정적이고 인지 가능한 회계 단위를 겹쳐 결제, 상거래 및 송금에 최적화됩니다.
  3. 기관 수준 제어: Token-2022 토큰으로 출시함으로써 PYUSD는 기밀 전송, 풍부 메타데이터, 영구 위임자와 같은 내장 확장을 활용할 수 있어 맞춤형, 감사 어려운 스마트 계약 없이도 고급 컴플라이언스와 기능을 구현합니다.

절대 놓치면 안 되는 핵심 (핵심 파라미터)

코드를 작성하기 전에 아래 파라미터를 반드시 확인하세요. 신뢰할 수 있는 탐색기에서 Mint 주소를 항상 검증하여 사기 토큰과의 상호작용을 방지합니다.

  • Mint (메인넷): 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
  • 소수점 자리수: 6 (즉, 1 PYUSD = 1,000,000 기본 단위)
  • 토큰 프로그램: Token-2022 (Program ID: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb)
  • 사용된 토큰 확장 (Mint 시):
    • 메타데이터 & 메타데이터 포인터
    • 영구 위임자
    • Transfer Hook (null 프로그램으로 초기화)
    • 기밀 전송 구성

위 내용은 Solana Explorer에서 확인할 수 있습니다. 탐색기는 공식 Mint 주소와 활성화된 확장을 명확히 표시합니다.

프로젝트 설정

환경을 준비합니다. 최신 Solana web3 및 SPL 토큰 라이브러리를 설치해 Token-2022 호환성을 확보하세요.

1. 라이브러리

npm에서 필요한 패키지를 설치합니다.

npm i @solana/web3.js @solana/spl-token

2. RPC 연결

애플리케이션을 BlockEden.xyz Solana 메인넷 RPC URL에 연결합니다. 프로덕션에서는 환경 변수를 반드시 사용하세요.

// package.json
// npm i @solana/web3.js @solana/spl-token

import { Connection, Keypair, PublicKey } from "@solana/web3.js";
import {
TOKEN_2022_PROGRAM_ID,
getMint,
getOrCreateAssociatedTokenAccount,
getAssociatedTokenAddress,
createTransferCheckedInstruction,
} from "@solana/spl-token";

// 대시보드에서 확인한 BlockEden.xyz Solana RPC URL
const RPC_ENDPOINT =
process.env.SOLANA_RPC_URL ??
"https://your-blockeden-solana-mainnet-endpoint.com";
export const connection = new Connection(RPC_ENDPOINT, "confirmed");

// PYUSD (메인넷)
export const PYUSD_MINT = new PublicKey(
"2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo",
);

PYUSD Mint 데이터 읽기

먼저 프로그램matically하게 PYUSD Mint의 속성을 확인합니다. 이는 상수값이 정확한지 검증하고 총 공급량 등 세부 정보를 가져오는 중요한 단계입니다.

// Token-2022 API를 통해 PYUSD mint 정보 확인
const mintInfo = await getMint(
connection,
PYUSD_MINT,
"confirmed",
TOKEN_2022_PROGRAM_ID, // 프로그램 ID 명시
);

console.log({
supply: mintInfo.supply.toString(),
decimals: mintInfo.decimals, // 6이어야 함
isInitialized: mintInfo.isInitialized,
});

TOKEN_2022_PROGRAM_ID를 명시적으로 전달하는 것이 Token Extensions 사용 시 가장 흔한 오류의 원인임을 기억하세요.

연관 토큰 계정(ATA) 생성 또는 조회

Token-2022 토큰의 ATA는 반드시 Token-2022 프로그램 ID를 사용해 파생됩니다. 레거시 TOKEN_PROGRAM_ID를 사용하면 “incorrect program id” 오류가 발생합니다.

// Payer 및 ATA 소유자 (지갑 로직에 맞게 교체)
const owner = Keypair.generate();

// 소유자의 PYUSD ATA 생성 또는 조회 (Token-2022 인식)
const ownerAta = await getOrCreateAssociatedTokenAccount(
connection,
owner, // 생성 비용을 부담하는 Payer
PYUSD_MINT, // Mint
owner.publicKey, // ATA 소유자
false, // allowOwnerOffCurve
"confirmed",
undefined, // 옵션
TOKEN_2022_PROGRAM_ID, // <-- 중요: Token-2022 프로그램 ID 사용
);

console.log("Owner PYUSD ATA:", ownerAta.address.toBase58());

PYUSD 잔액 확인

사용자의 PYUSD 잔액을 확인하려면 ATA를 조회하고 올바른 프로그램 ID를 지정해야 합니다.

@solana/spl-token 사용

import { getAccount } from "@solana/spl-token";

const accountInfo = await getAccount(
connection,
ownerAta.address,
"confirmed",
TOKEN_2022_PROGRAM_ID,
);

const balance = Number(accountInfo.amount) / 10 ** mintInfo.decimals; // decimals = 6
console.log("PYUSD balance:", balance);

직접 JSON‑RPC (curl) 사용

curl -X POST "$SOLANA_RPC_URL" -H 'content-type: application/json' -d '{
"jsonrpc":"2.0",
"id":1,
"method":"getTokenAccountsByOwner",
"params":[
"<OWNER_PUBLIC_KEY>",
{ "programId":"TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" },
{ "encoding":"jsonParsed" }
]
}'

PYUSD 전송 (사용자 간)

Token-2022 자산을 전송할 때는 createTransferCheckedInstruction을 사용합니다. 이 명령은 토큰의 소수점 자리수를 포함해 소수점 관련 취약성을 방지합니다.

import { Transaction } from '@solana/web3.js';

async function transferPyusd({
fromWallet, // 송신자 Keypair
toPubkey, // 수신자 PublicKey
uiAmount, // PYUSD 단위 UI 금액 (예: 1.25)
}) {
const decimals = 6; // mintInfo.decimals에서 가져올 수 있음
const rawAmount = BigInt(Math.round(uiAmount * (10 ** decimals)));

// 송신자 ATA 주소 조회
const fromAta = await getAssociatedTokenAddress(
PYUSD_MINT,
fromWallet.publicKey,
false,
TOKEN_2022_PROGRAM_ID
);

// 수신자 ATA 생성 (Token-2022)
const toAta = await getOrCreateAssociatedTokenAccount(
connection,
fromWallet, // Payer
PYUSD_MINT,
toPubkey,
false,
'confirmed',
undefined,
TOKEN_2022_PROGRAM_ID
);

const transferInstruction = createTransferCheckedInstruction(
fromAta, // 출발 ATA
PYUSD_MINT, // Mint
toAta.address, // 도착 ATA
fromWallet.publicKey, // 출발 ATA 소유자
rawAmount, // 기본 단위 금액
decimals, // 소수점 자리수
[], // 멀티시그 서명자
TOKEN_2022_PROGRAM_ID // <-- 중요
);

const transaction = new Transaction().add(transferInstruction);

// 최신 블록해시와 수수료 지불자 설정
transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
transaction.feePayer = fromWallet.publicKey;

const signature = await connection.sendTransaction(transaction, [fromWallet]);
await connection.confirmTransaction(signature, 'confirmed');

console.log('Transaction successful with signature:', signature);
return signature;
}

Transfer Hook에 대한 주의: PYUSD Mint는 Transfer Hook 확장을 초기화했지만 프로그램을 null로 설정했습니다. 따라서 현재는 별도 계정이나 로직 없이 표준 전송이 가능합니다. PayPal/Paxos가 훅을 활성화하면 Mint가 새로운 프로그램을 가리키게 되며, 그때는 해당 프로그램이 요구하는 추가 계정을 전달해야 합니다.

Solana CLI 빠른 테스트

명령줄에서 빠르게 테스트하려면 올바른 프로그램 ID를 지정한 spl-token을 사용합니다.

# 메인넷을 가리키고 키페어에 SOL이 충분히 있는지 확인
# 1.00 PYUSD를 수신자에게 전송
spl-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
transfer 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo 1.00 <RECIPIENT_PUBKEY> \
--fund-recipient --allow-unfunded-recipient

크로스체인 PYUSD (Ethereum ↔ Solana)

PayPal은 LayerZero를 활용한 공식 크로스체인 기능을 구현했습니다. 기존 서드파티 브리지 대신, 소스 체인(Ethereum)에서 토큰을 burn하고 대상 체인(Solana)에서 동일량을 mint하는 네이티브 프로세스입니다. 이를 통해 브리지 특유의 위험과 슬리피지를 제거합니다.

전체 튜토리얼과 파라미터는 공식 PayPal Developer 문서에서 확인하세요.

준비 완료? 고성능 BlockEden.xyz RPC 엔드포인트를 확보하고 오늘 바로 미래 결제 시스템을 구축해 보세요.