Hoe betalingen werken op Solana

Voordat je betalingsstromen op Solana bouwt, moet je vijf kernconcepten begrijpen: wallets, stablecoins, token accounts, kosten en transacties. Solana-betalingen komen duidelijk overeen met multi-valuta betalingssystemen:

Traditioneel betalingsmodelSolanaBeschrijving
Klant-ID / RekeningnummerWallet-adresUnieke identificatie voor een rekeninghouder
Valuta (USD, EUR)Token Mint (USDG, USDC)Het type activa dat wordt overgedragen
Saldo per valutaToken Account (ATA)Bevat een saldo van een specifieke valuta/mint

Net zoals een bankklant één identiteit heeft maar aparte saldi voor elke valuta, heeft een Solana-wallet één adres maar een afzonderlijk token account voor elk actief dat het bevat. Laten we elk onderdeel uitleggen.

Wallets: verzenders en ontvangers

Elke betaling omvat twee partijen, elk geïdentificeerd door een wallet-adres—een unieke 32-byte publieke sleutel (bijv. 7EcDhS...).

  • Verzender: de wallet die de betaling initieert. Moet voldoende stablecoin-accountsaldo hebben en de transactie ondertekenen.
  • Ontvanger: de bestemmingswallet. Hoeft niet te ondertekenen of een bestaand saldo te hebben.
  • Kostenbetaler: de optionele kostenbetaler-wallet. Kan worden gebruikt om stablecoin-only transacties tussen gebruikers te subsidiëren of mogelijk te maken.

Beschouw wallet-adressen als bankrekeningnummers: openbaar, veilig om te delen en vereist om geld te verzenden of ontvangen.

Stablecoins

Stablecoins worden op Solana "tokens" genoemd. Tokens vertegenwoordigen een type activa op het netwerk. Elke token heeft een unieke identificatie genaamd een "mint-adres". Bij het bouwen van betalingssystemen verwijs je naar deze mint-adressen om het actief te identificeren waarmee je werkt. Hier zijn enkele veelvoorkomende stablecoin-mints op mainnet:

TokenUitgeverMint-adres
USDCCircleEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
USDTTetherEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB
PYUSDPayPal2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo
USDGPaxos2u1tszSeqZ3qBWF3uNGPFc8TzMk2tdiwknnRMWGWjGWH

Voor meer informatie over stablecoins op Solana, zie de Stablecoins oplossingspagina.

Valideer bij het accepteren van betalingen altijd het mint-adres en het Token Program. Tokens kunnen dezelfde naam hebben maar verschillende uitgevers en onderliggende activa.

Token accounts

Wallets bevatten tokens niet rechtstreeks. In plaats daarvan heeft elke wallet autoriteit over een token account voor elk type token dat het bevat. Betalingen worden gedaan door tokens over te dragen van het token account van de verzender naar het token account van de ontvanger van dezelfde mint:

Token accountsToken accounts

Een associated token account is een deterministisch token account dat gekoppeld is aan een specifieke wallet en mint. Gegeven een wallet-adres en mint, is het ATA-adres altijd hetzelfde.

  1. Eén ATA per mint. Een wallet heeft precies één ATA voor USDC, één voor USDT, enzovoort.
  2. Moet bestaan voor ontvangst. Je kunt geen tokens sturen naar een ATA dat niet bestaat.
  3. Verzender maakt deze doorgaans aan. Als het ATA van de ontvanger niet bestaat, kan de verzender deze aanmaken als onderdeel van de betalingstransactie.
import { findAssociatedTokenPda } from "@solana-program/token";
const [receiverATA] = await findAssociatedTokenPda({
mint: USDG_MINT_ADDRESS,
owner: receiverWallet.address,
tokenProgram: TOKEN_PROGRAM_ADDRESS
});

Token Programs

Op Solana zijn programma's uitvoerbare logica die de accountstatus beheren. Token accounts worden beheerd door een Token Program—de on-chain code die overdrachten verifieert en saldi atomair bijwerkt.

Solana heeft twee Token Programs:

ProgrammaAdresVoorbeeldtokens die
dit programma gebruiken
Token ProgramTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DAUSDC, USDT
Token-2022TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEbPYUSD, USDG

Token-2022 (ook wel "Token Extensions" genoemd) voegt functies toe zoals transfer hooks, transfer fees en confidential transfers. Beide programma's werken vergelijkbaar voor basistransfers, maar je moet het juiste programma gebruiken bij het afleiden van ATA's.

Waarom dit belangrijk is

Het Token Program dat gebruikt wordt om een token te creëren, bepaalt de instructies en account state voor de token. Als je het verkeerde programma gebruikt, kun je de token niet overdragen.

ATA's worden afgeleid van drie inputs: wallet + mint + token_program. Het gebruik van het verkeerde programma produceert een volledig ander adres:

import {
findAssociatedTokenPda,
TOKEN_PROGRAM_ADDRESS
} from "@solana-program/token";
import { TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022";
// USDC uses Token Program
const [usdcAta] = await findAssociatedTokenPda({
mint: USDC_MINT,
owner: walletAddress,
tokenProgram: TOKEN_PROGRAM_ADDRESS // ✓ Correct
});
// ❌ This will produce a different address because it uses the wrong program
const [wrongUsdcAta] = await findAssociatedTokenPda({
mint: USDC_MINT,
owner: walletAddress,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS // ❌ Wrong program
});
// PYUSD uses Token-2022
const [pyusdAta] = await findAssociatedTokenPda({
mint: PYUSD_MINT,
owner: walletAddress,
tokenProgram: TOKEN_2022_PROGRAM_ADDRESS // ✓ Correct
});

Het afleiden van een ATA met het verkeerde programma zal een ongeldig adres opleveren. Zorg er altijd voor dat het programma overeenkomt met de mint van de token.

Hetzelfde principe geldt voor transfer-instructies. Elk token-programma heeft zijn eigen transfer-instructie, en je moet de juiste aanroepen:

import { getTransferInstruction } from "@solana-program/token";
import { getTransferInstruction as getTransferInstruction22 } from "@solana-program/token-2022";
// For USDC (Token Program)
const usdcTransferIx = getTransferInstruction({
source: senderUsdcAta,
destination: receiverUsdcAta,
authority: senderWallet,
amount: 1_000_000n // 1 USDC (6 decimals)
});
// For PYUSD (Token-2022)
const pyusdTransferIx = getTransferInstruction22({
source: senderPyusdAta,
destination: receiverPyusdAta,
authority: senderWallet,
amount: 1_000_000n // 1 PYUSD (6 decimals)
});
// *Note*: Most token program JS Client functions include the ability
// to specify the token program address. Generally, defining it is a
// good practice to ensure you are fully aware of the program you are using
const usdcTransferIx2 = getTransferInstruction(
{
source: senderUsdcAta,
destination: receiverUsdcAta,
authority: senderWallet,
amount: 1_000_000n // 1 USDC (6 decimals)
},
{ tokenProgram: TOKEN_PROGRAM_ADDRESS }
);

Het verzenden van een transfer-instructie naar het verkeerde programma zal mislukken. Het programma valideert dat het eigenaar is van de betrokken token accounts—accounts die zijn aangemaakt door Token Program kunnen niet worden overgedragen via Token-2022, en omgekeerd.

Om te verifiëren welk programma een token of token account gebruikt, haal je de mint of het token account op en controleer je het owner-veld:

import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const accountInfo = await rpc.getAccountInfo(address(mintAddress)).send();
// The owner field tells you which program manages this token
const tokenProgram = accountInfo.value?.owner;
// Returns: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA (Token Program)
// or: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb (Token-2022)

Voor betalingsapplicaties sla je het juiste programma-adres op naast elke ondersteunde token:

const SUPPORTED_TOKENS = {
USDC: {
mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
program: TOKEN_PROGRAM_ADDRESS,
decimals: 6
},
PYUSD: {
mint: "2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo",
program: TOKEN_2022_PROGRAM_ADDRESS,
decimals: 6
}
};

Token Extensions

Het Token Extensions Program (Token 2022) biedt meer functionaliteit via extra instructies die extensions worden genoemd. Extensions zijn optionele functies die je kunt toevoegen aan een token mint of token account.

Voor meer informatie over Token Extensions, zie de Token Extensions documentatie.

Kosten

Solana-betalingen omvatten maximaal drie kostencomponenten:

KostentypeSOLUSD (schatting)Wanneer
Basis transactiekosten5.000 lamports*~$0,0007Elke transactie (bundel meerdere betalingen om kosten te spreiden)
PrioriteitskostenVariabelVariabelOptioneel; snellere verwerking bij congestie
Account aanmaak (rent)~0,0029 SOL~$0,40Alleen bij het aanmaken van een nieuw token account

Totale kosten per betaling: Minder dan $0,001 voor de meeste overdrachten. Bij het aanmaken van een nieuw token account bedragen de totale kosten ongeveer $0,40.

Solana gebruikt lokale kostenmarkten—transacties van elk programma concurreren alleen met andere transacties die dezelfde status targeten. Dit betekent dat betalingskosten laag en voorspelbaar blijven, zelfs tijdens periodes van hoge netwerkactiviteit elders. Rentkosten zullen naar verwachting ook binnenkort met 50% dalen.

Je kunt kosten volledig abstraheren zodat gebruikers nooit met SOL hoeven te interacteren. Zie Fee Abstraction voor implementatiepatronen.

Transacties en instructies

Een transactie is de atomaire uitvoeringseenheid op Solana—ofwel slagen alle operaties, ofwel geen enkele. Elke transactie bevat één of meer instructies, dit zijn individuele commando's (bijv. "draag 10 USDC over", "maak token account aan").

Een typische betalingstransactie kan twee instructies bevatten: maak het token account van de ontvanger aan (indien nodig), en draag vervolgens tokens over. Beide worden atomair uitgevoerd—geen gedeeltelijke statussen. Zoals je zult zien in Payment Processing, kun je meerdere betalingen bundelen in één transactie om kosten te verlagen en doorvoer te verhogen.

Alles samenbrengen

Een typische betalingsstroom:

  1. Verzamel input. Verkrijg de wallet-adressen van verzender en ontvanger en het mint-adres van de token die wordt overgedragen.
  2. Leid ATA's af. Bepaal de token-accounts voor beide partijen.
  3. Bouw en onderteken. Construeer de transactie met de benodigde transfer-instructies, onderteken met de sleutel van de verzender.
  4. Verzend & bevestig. Transactie wordt afgewikkeld in minder dan een seconde.

Volgende stappen


* een lamport is de kleinste eenheid van SOL en is gelijk aan 0,000000001 SOL

Is this page helpful?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden