Zum Hauptinhalt springen

Ein Post getaggt mit "Integration"

Alle Tags anzeigen

PYUSD auf Solana: Der praktische Integrationsleitfaden (mit BlockEden.xyz RPC)

· 9 Minuten Lesezeit
Dora Noda
Software Engineer

PayPal USD (PYUSD) ist auf Solana gelandet und markiert einen bedeutenden Meilenstein für digitale Zahlungen. Dieser Leitfaden bietet Ingenieuren, die PYUSD in Wallets, dApps und Handelsplattformen auf Solana integrieren, eine direkte, produktionsorientierte Anleitung.

Alle Beispiele verwenden aktuellen, Token-2022-kompatiblen Code und sind so konzipiert, dass sie nahtlos mit den latenzarmen Solana RPC-Endpunkten von BlockEden.xyz funktionieren.

Kurz gesagt

  • Was: PayPal USD (PYUSD) ist jetzt ein natives Token-2022 SPL-Token auf Solana und bietet eine schnelle, kostengünstige Abwicklung für einen weltweit anerkannten Stablecoin.
  • Schlüsselparameter: Mint 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo, Dezimalstellen 6 und Token-Programm Token-2022.
  • Funktionsumfang: Nutzt Solana Token Extensions (Token-2022). Es verfügt über einen initialisierten, aber derzeit inaktiven Transfer Hook (Null-Programm) sowie vertrauliche Übertragungsfunktionen und andere Erweiterungen.
  • Cross-Chain: Eine offizielle LayerZero-Integration ermöglicht es PYUSD, über einen sicheren Burn-and-Mint-Mechanismus zwischen Ethereum und Solana zu wechseln, wodurch traditionelle Bridges umgangen werden.
  • Aktion: Verwenden Sie diesen Leitfaden als sofort einsatzbereite Vorlage, um Ihrer Anwendung mit dem zuverlässigen Solana RPC von BlockEden.xyz PYUSD-Unterstützung hinzuzufügen.

Warum PYUSD auf Solana wichtig ist

Die Kombination der Marke PayPal mit der Leistung von Solana schafft eine leistungsstarke neue Schiene für digitale Dollars.

  1. Verbrauchervertrauen trifft auf Krypto-UX: PYUSD wird von der regulierten Treuhandgesellschaft Paxos ausgegeben und ist tief in PayPal und Venmo integriert. Dies bietet Nutzern ein vertrautes Asset. Sie können ein einziges PYUSD-Guthaben halten und wählen, ob sie es auf eine externe Wallet auf Ethereum oder Solana abheben möchten, wodurch die Komplexität der Kette abstrahiert wird.
  2. Zahlungsbereite Infrastruktur: Solanas Architektur bietet eine Transaktionsfinalität von unter einer Sekunde und Gebühren, die Bruchteile eines Cents betragen. PYUSD legt eine stabile, erkennbare Rechnungseinheit über dieses effiziente Abwicklungsnetzwerk, wodurch es ideal für Zahlungen, Handel und Überweisungen ist.
  3. Kontrollen auf institutionellem Niveau: Durch die Einführung als Token-2022-Token kann PYUSD integrierte Erweiterungen für Funktionen wie vertrauliche Übertragungen, umfangreiche Metadaten und einen permanenten Delegierten nutzen. Dies ermöglicht erweiterte Compliance und Funktionalität, ohne maßgeschneiderte, schwer zu prüfende Smart Contracts zu erfordern.

Die absoluten Grundlagen (Merken Sie sich diese)

Bevor Sie eine einzige Codezeile schreiben, legen Sie diese Parameter fest. Überprüfen Sie die Mint-Adresse immer in einem vertrauenswürdigen Explorer, um die Interaktion mit betrügerischen Token zu vermeiden.

  • Mint (Mainnet): 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
  • Dezimalstellen: 6 (bedeutet 1 PYUSD = 1.000.000 Basiseinheiten)
  • Token-Programm: Token-2022 (Programm-ID: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb)
  • Verwendete Token-Erweiterungen (beim Minting):
    • Metadata & Metadata Pointer
    • Permanent Delegate
    • Transfer Hook (initialisiert mit einem Null-Programm)
    • Confidential Transfer Configuration

Sie können all dies im Solana Explorer überprüfen. Der Explorer zeigt deutlich die offizielle Mint-Adresse und ihre aktivierten Erweiterungen an.

Projekt einrichten

Bereiten wir unsere Umgebung vor. Sie benötigen die neuesten Solana web3- und SPL-Token-Bibliotheken, um die volle Token-2022-Kompatibilität zu gewährleisten.

1. Bibliotheken

Installieren Sie die notwendigen Pakete von npm.

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

2. RPC-Verbindung

Verweisen Sie Ihre Anwendung auf Ihre BlockEden.xyz Solana Mainnet RPC-URL. Für die Produktion sind Umgebungsvariablen ein Muss.

// 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";

// Use your BlockEden.xyz Solana RPC URL from your dashboard
const RPC_ENDPOINT =
process.env.SOLANA_RPC_URL ??
"[https://your-blockeden-solana-mainnet-endpoint.com](https://your-blockeden-solana-mainnet-endpoint.com)";
export const connection = new Connection(RPC_ENDPOINT, "confirmed");

// PYUSD (mainnet)
export const PYUSD_MINT = new PublicKey(
"2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo",
);

PYUSD Mint-Daten lesen

Zuerst wollen wir die Eigenschaften des PYUSD-Mints programmatisch bestätigen. Dies ist ein entscheidender erster Schritt, um sicherzustellen, dass Ihre Konstanten korrekt sind und um Details wie das Gesamtangebot abzurufen.

// Confirm PYUSD mint info via Token-2022 APIs
const mintInfo = await getMint(
connection,
PYUSD_MINT,
"confirmed",
TOKEN_2022_PROGRAM_ID, // Specify the program ID
);

console.log({
supply: mintInfo.supply.toString(),
decimals: mintInfo.decimals, // Expect 6
isInitialized: mintInfo.isInitialized,
});

Beachten Sie, dass wir TOKEN_2022_PROGRAM_ID explizit übergeben. Dies ist die häufigste Fehlerquelle bei der Arbeit mit Token-Erweiterungen.

Associated Token Accounts (ATAs) erstellen oder abrufen

Associated Token Accounts für Token-2022-Token müssen unter Verwendung der Token-2022-Programm-ID abgeleitet werden. Wenn Sie die veraltete TOKEN_PROGRAM_ID verwenden, schlagen Transaktionen mit einem Fehler "incorrect program id" fehl.

// Payer and owner of the new ATA. Replace with your wallet logic.
const owner = Keypair.generate();

// Create or fetch the owner's PYUSD ATA (Token-2022 aware)
const ownerAta = await getOrCreateAssociatedTokenAccount(
connection,
owner, // Payer for creation
PYUSD_MINT, // Mint
owner.publicKey, // Owner of the ATA
false, // allowOwnerOffCurve
"confirmed",
undefined, // options
TOKEN_2022_PROGRAM_ID, // <-- IMPORTANT: Use Token-2022 Program ID
);

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

PYUSD-Guthaben prüfen

Um das PYUSD-Guthaben eines Benutzers zu überprüfen, fragen Sie dessen ATA ab und denken Sie daran, die korrekte Programm-ID anzugeben.

Verwendung von @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);

Direkte JSON-RPC-Aufrufe (curl)

Sie können auch alle Token-Konten für einen Eigentümer überprüfen und nach der Token-2022-Programm-ID filtern.

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 übertragen (Benutzer zu Benutzer)

Die Faustregel für die Übertragung jedes Token-2022-Assets ist die Verwendung von createTransferCheckedInstruction. Diese Anweisung enthält die Dezimalstellen des Tokens, wodurch potenzielle dezimalbezogene Schwachstellen verhindert werden.

Hier ist eine vollständige, wiederverwendbare Funktion zur Übertragung von PYUSD.

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

async function transferPyusd({
fromWallet, // The sender's Keypair
toPubkey, // The recipient's PublicKey
uiAmount, // The amount in PYUSD, e.g., 1.25
}: {
fromWallet: Keypair;
toPubkey: PublicKey;
uiAmount: number;
}) {
const decimals = 6; // From mintInfo.decimals
const rawAmount = BigInt(Math.round(uiAmount * (10 ** decimals)));

// Get the sender's ATA address
const fromAta = await getAssociatedTokenAddress(
PYUSD_MINT,
fromWallet.publicKey,
false,
TOKEN_2022_PROGRAM_ID
);

// Ensure the recipient's ATA exists for Token-2022
const toAta = await getOrCreateAssociatedTokenAccount(
connection,
fromWallet, // Payer
PYUSD_MINT,
toPubkey,
false,
'confirmed',
undefined,
TOKEN_2022_PROGRAM_ID
);

const transferInstruction = createTransferCheckedInstruction(
fromAta, // Source ATA
PYUSD_MINT, // Mint
toAta.address, // Destination ATA
fromWallet.publicKey, // Owner of the source ATA
rawAmount, // Amount in base units
decimals, // Decimals
[], // Multisig signers
TOKEN_2022_PROGRAM_ID // <-- IMPORTANT
);

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

// Set recent blockhash and fee payer
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;
}

Hinweis zum Transfer Hook: Das Mint von PYUSD initialisiert die Transfer Hook-Erweiterung, setzt ihr Programm jedoch auf null. Dies bedeutet, dass Standardübertragungen derzeit ohne zusätzliche Konten oder Logik funktionieren. Sollten PayPal/Paxos den Hook jemals aktivieren, werden sie das Mint aktualisieren, um auf ein neues Programm zu verweisen. Ihre Integration müsste dann die zusätzlichen Konten übergeben, die von der Schnittstelle dieses Programms benötigt werden.

Solana CLI-Schnelltest

Für einen schnellen manuellen Test über Ihre Befehlszeile können Sie spl-token mit der korrekten Programm-ID verwenden.

# Ensure your CLI points to mainnet and your keypair is funded.
# Transfer 1.00 PYUSD to a recipient.
spl-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
transfer 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo 1.00 <RECIPIENT_PUBKEY> \
--fund-recipient --allow-unfunded-recipient

Cross-Chain PYUSD (Ethereum ↔ Solana)

PayPal hat eine offizielle Cross-Chain-Funktion unter Verwendung von LayerZero implementiert. Anstatt sich auf riskante Drittanbieter-Bridges zu verlassen, handelt es sich hierbei um einen nativen Burn-and-Mint-Prozess: PYUSD wird auf der Quellkette (z. B. Ethereum) verbrannt und ein äquivalenter Betrag wird auf der Zielkette (Solana) gemintet. Dies eliminiert Bridge-spezifische Risiken und Slippage.

Das vollständige Tutorial und die Parameter finden Sie in der offiziellen PayPal-Entwicklerdokumentation.

Mit Faucets testen

Verwenden Sie für Entwicklung und Tests keine Mainnet-Assets. Nutzen Sie die offiziellen Faucets:

  • Paxos PYUSD Faucet: Um Testnet-PYUSD-Token zu erhalten.
  • Solana Faucet: Um Devnet-/Testnet-SOL für Transaktionsgebühren zu erhalten.

Häufige Fallstricke (und Lösungen)

  1. Falsche Programm-ID: Problem: Transaktionen schlagen mit incorrect program id for instruction fehl. Lösung: Übergeben Sie TOKEN_2022_PROGRAM_ID explizit an alle spl-token-Hilfsfunktionen (getOrCreateAssociatedTokenAccount, getAccount, createTransferCheckedInstruction usw.).
  2. Falsches Mint oder gefälschte Assets: Problem: Ihre Anwendung interagiert mit einem gefälschten PYUSD-Token. Lösung: Hardcodieren und überprüfen Sie die offizielle Mint-Adresse: 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo. Verwenden Sie einen Explorer, der vor nicht-kanonischen Mints warnt.
  3. Dezimalstellen-Fehler: Problem: Das Senden von 1 PYUSD sendet tatsächlich 0,000001 PYUSD. Lösung: Konvertieren Sie UI-Beträge immer in Rohbeträge, indem Sie mit 10^6 multiplizieren. Rufen Sie die Dezimalstellen des Mints programmatisch ab, um sicherzugehen.
  4. Hook-Annahmen: Problem: Sie erstellen komplexe Logik für einen Transfer Hook, der nicht aktiv ist. Lösung: Überprüfen Sie die Erweiterungsdaten des Mints. Ab heute ist der Hook von PYUSD null. Bauen Sie Ihr System so auf, dass es sich anpasst, falls das Hook-Programm in Zukunft aktiviert wird.

Produktions-Checkliste für PYUSD + BlockEden.xyz

Stellen Sie bei der Umstellung auf die Produktion sicher, dass Ihre Infrastruktur robust ist.

  • RPC: Verwenden Sie einen hochverfügbaren BlockEden.xyz-Endpunkt. Verwenden Sie confirmed Commitment für eine reaktionsschnelle UX und Abfragen mit finalized für Operationen, die Ledger-Integrität erfordern.
  • Wiederholung & Idempotenz: Umhüllen Sie Transaktionsübermittlungen mit einem exponentiellen Backoff-Wiederholungsmechanismus. Speichern Sie einen Idempotenzschlüssel bei jeder Geschäftsoperation, um doppelte Übertragungen zu verhindern.
  • Observability: Protokollieren Sie Transaktionssignaturen, Slot-Nummern und Guthaben nach der Transaktion. Verwenden Sie die Websocket-Abonnements von BlockEden.xyz, um Echtzeit-Abwicklungssignale für das Backend Ihrer Anwendung zu erhalten.
  • Compliance: Token-2022 bietet Primitive für die Compliance. Wenn Sie Funktionen wie die Travel Rule implementieren müssen, ermöglicht Ihnen das Erweiterungsmodell dies sauber zu tun, indem Ihre Geschäftslogik von der Kernfunktionalität des Tokens getrennt bleibt.

Anhang A — Kurzübersicht

  • Mint (Mainnet): 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
  • Dezimalstellen: 6
  • Token-Programm-ID: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
  • Hintergrund: PayPal kündigte die Solana-Unterstützung am 29. Mai 2024 an.
  • Offizielle Dokumentation: Solana Token Extensions, PayPal Developer Portal

Anhang B — Direkte JSON-RPC-Aufrufe (curl)

Mint-Kontoinformationen abrufen & Eigentümer bestätigen

Dieser Aufruf ruft die Mint-Kontodaten ab und ermöglicht Ihnen zu überprüfen, ob der Eigentümer das Token-2022-Programm ist.

# Replace with your BlockEden.xyz RPC URL
curl -s -X POST "$SOLANA_RPC_URL" -H 'content-type: application/json' -d '{
"jsonrpc":"2.0","id":1,"method":"getAccountInfo",
"params":["2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo",
{"encoding":"base64","commitment":"confirmed"}]
}'

# In der JSON-Antwort sollte das Feld "owner" gleich "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb" sein.

Alle PYUSD Token-Konten eines Benutzers auflisten

Dies ist nützlich für Wallets, die alle PYUSD-Bestände eines bestimmten Benutzers ermitteln müssen.

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

Bereit zum Bauen? Holen Sie sich Ihren Hochleistungs- BlockEden.xyz RPC-Endpunkt und beginnen Sie noch heute mit der Integration der Zukunft des Zahlungsverkehrs.