Solana'da ödeme akışları oluşturmadan önce beş temel kavramı anlamanız gerekir: cüzdanlar, stablecoin'ler, token hesapları, ücretler ve işlemler. Solana ödemeleri, çok para birimli ödeme sistemlerine net bir şekilde eşlenir:
| Geleneksel ödeme modeli | Solana | Açıklama |
|---|---|---|
| Müşteri kimliği / Hesap numarası | Cüzdan adresi | Hesap sahibi için benzersiz tanımlayıcı |
| Para birimi (USD, EUR) | Token mint (USDG, USDC) | Transfer edilen varlık türü |
| Para birimine göre bakiye | Token hesabı (ATA) | Belirli bir para birimi/mint bakiyesi tutar |
Bir banka müşterisinin tek bir kimliği olup her para birimi için ayrı bakiyeleri olduğu gibi, bir Solana cüzdanının da tek bir adresi vardır ancak sahip olduğu her varlık için ayrı bir token hesabı bulunur. Her bileşeni inceleyelim.
Cüzdanlar: gönderenler ve alıcılar
Her ödeme, her biri bir cüzdan adresi ile tanımlanan iki tarafı
içerir—benzersiz bir 32 baytlık genel anahtar (örneğin, 7EcDhS...).
- Gönderen: Ödemeyi başlatan cüzdan. Yeterli stablecoin hesap bakiyesine sahip olmalı ve işlemi imzalamalıdır.
- Alıcı: Hedef cüzdan. İmzalaması veya mevcut bir bakiyeye sahip olması gerekmez.
- Ücret ödeyen: İsteğe bağlı ücret ödeyen cüzdan. Kullanıcılar arasında sübvanse edilmiş veya yalnızca stablecoin işlemlerini etkinleştirmek için kullanılabilir.
Cüzdan adreslerini banka hesap numaraları gibi düşünün: herkese açık, paylaşılması güvenli ve para göndermek veya almak için gerekli.
Stablecoin'ler
Stablecoin'ler Solana'da "token" olarak adlandırılır. Token'lar ağ üzerinde bir varlık türünü temsil eder. Her token'ın "mint adresi" adı verilen benzersiz bir tanımlayıcısı vardır. Ödeme sistemleri oluştururken, etkileşimde bulunduğunuz varlığı tanımlamak için bu mint adreslerine başvuracaksınız. Mainnet'te yaygın olarak kullanılan bazı stablecoin mint'leri şunlardır:
| Token | Yayıncı | Mint Adresi |
|---|---|---|
| USDC | Circle | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v |
| USDT | Tether | Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB |
| PYUSD | PayPal | 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo |
| USDG | Paxos | 2u1tszSeqZ3qBWF3uNGPFc8TzMk2tdiwknnRMWGWjGWH |
Solana üzerindeki stablecoin'ler hakkında daha fazla bilgi için Stablecoin'ler çözüm sayfasına bakın.
Ödeme kabul ederken, her zaman mint adresini ve Token Program'ı doğrulayın. Token'lar aynı isimleri paylaşabilir ancak farklı yayıncılara ve dayanak varlıklara sahip olabilir.
Token hesapları
Cüzdanlar token'ları doğrudan tutmaz. Bunun yerine, her cüzdan sahip olduğu her token türü için bir token hesabı üzerinde yetkiye sahiptir. Ödemeler, gönderenin token hesabından alıcının aynı mint'e ait token hesabına token transfer edilerek yapılır:
Token hesapları
Bir Associated Token Account (ilişkili token hesabı), belirli bir cüzdana ve mint'e bağlı deterministik bir token hesabıdır. Bir cüzdan adresi ve mint verildiğinde, ATA adresi her zaman aynıdır.
- Her mint için bir ATA. Bir cüzdanın USDC için tam olarak bir ATA'sı, USDT için bir ATA'sı vb. vardır.
- Almadan önce var olmalıdır. Var olmayan bir ATA'ya token gönderemezsiniz.
- Genellikle gönderen oluşturur. Alıcının ATA'sı yoksa, gönderen ödeme işleminin bir parçası olarak onu oluşturabilir.
import { findAssociatedTokenPda } from "@solana-program/token";const [receiverATA] = await findAssociatedTokenPda({mint: USDG_MINT_ADDRESS,owner: receiverWallet.address,tokenProgram: TOKEN_PROGRAM_ADDRESS});
Token Program'lar
Solana'da programlar, hesap durumunu yöneten çalıştırılabilir mantıktır. Token hesapları bir Token Program tarafından yönetilir—transferleri doğrulayan ve bakiyeleri atomik olarak güncelleyen zincir üstü koddur.
Solana'nın iki Token Program'ı vardır:
| Program | Adres | Bu programı kullanan örnek token'lar |
|---|---|---|
| Token Program | TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA | USDC, USDT |
| Token-2022 | TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb | PYUSD, USDG |
Token-2022 (ayrıca "Token Extensions" olarak da bilinir), transfer hook'ları, transfer ücretleri ve gizli transferler gibi özellikler ekler. Her iki program da temel transferler için benzer şekilde çalışır, ancak ATA'ları türetirken doğru programı kullanmalısınız.
Bunun önemi
Bir token oluşturmak için kullanılan Token Program, token için talimatları ve hesap durumunu yönetir. Yanlış programı kullanırsanız, token'ı transfer edemezsiniz.
ATA'lar üç girdiden türetilir: wallet + mint + token_program. Yanlış programı
kullanmak tamamen farklı bir adres üretir:
import {findAssociatedTokenPda,TOKEN_PROGRAM_ADDRESS} from "@solana-program/token";import { TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022";// USDC uses Token Programconst [usdcAta] = await findAssociatedTokenPda({mint: USDC_MINT,owner: walletAddress,tokenProgram: TOKEN_PROGRAM_ADDRESS // ✓ Correct});// ❌ This will produce a different address because it uses the wrong programconst [wrongUsdcAta] = await findAssociatedTokenPda({mint: USDC_MINT,owner: walletAddress,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS // ❌ Wrong program});// PYUSD uses Token-2022const [pyusdAta] = await findAssociatedTokenPda({mint: PYUSD_MINT,owner: walletAddress,tokenProgram: TOKEN_2022_PROGRAM_ADDRESS // ✓ Correct});
Yanlış programla bir ATA türetmek geçersiz bir adres üretecektir. Programı her zaman token'ın mint'iyle eşleştirin.
Aynı ilke transfer talimatları için de geçerlidir. Her token programının kendi transfer talimatı vardır ve doğru olanı çağırmalısınız:
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 usingconst usdcTransferIx2 = getTransferInstruction({source: senderUsdcAta,destination: receiverUsdcAta,authority: senderWallet,amount: 1_000_000n // 1 USDC (6 decimals)},{ tokenProgram: TOKEN_PROGRAM_ADDRESS });
Yanlış programa bir transfer talimatı göndermek başarısız olacaktır. Program, ilgili token hesaplarına sahip olduğunu doğrular—Token Program tarafından oluşturulan hesaplar Token-2022 aracılığıyla transfer edilemez ve bunun tersi de geçerlidir.
Bir token'ın veya token hesabının hangi programı kullandığını doğrulamak için,
mint veya token hesabını getirin ve owner alanını kontrol edin:
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 tokenconst tokenProgram = accountInfo.value?.owner;// Returns: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA (Token Program)// or: TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb (Token-2022)
Ödeme uygulamaları için, desteklenen her token'ın yanında doğru program adresini saklayın:
const SUPPORTED_TOKENS = {USDC: {mint: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",program: TOKEN_PROGRAM_ADDRESS,decimals: 6},PYUSD: {mint: "2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo",program: TOKEN_2022_PROGRAM_ADDRESS,decimals: 6}};
Token Extensions
Token Extensions Program (Token 2022), extensions olarak adlandırılan ekstra talimatlar aracılığıyla daha fazla özellik sağlar. Extensions, bir token mint veya token account'a ekleyebileceğiniz isteğe bağlı özelliklerdir.
Token Extensions hakkında daha fazla bilgi için Token Extensions belgelerine bakın.
Ücretler
Solana ödemeleri üç adede kadar maliyet bileşeni içerir:
| Ücret türü | SOL | USD (tahmini) | Ne zaman |
|---|---|---|---|
| Temel işlem ücreti | 5.000 lamport* | ~$0,0007 | Her işlemde (amorti etmek için birden fazla ödemeyi paketleyin) |
| Öncelik ücreti | Değişken | Değişken | İsteğe bağlı; yoğunluk sırasında daha hızlı dahil edilme |
| Hesap oluşturma (rent) | ~0,0029 SOL | ~$0,40 | Yalnızca yeni bir token account oluştururken |
Ödeme başına toplam maliyet: Çoğu transfer için 1 doların altında. Yeni bir token account oluşturuyorsanız, toplam ~$0,40 bekleyin.
Solana yerel ücret piyasaları kullanır—her programın işlemleri yalnızca aynı durumu hedefleyen diğer işlemlerle rekabet eder. Bu, ağın başka yerlerinde yüksek aktivite dönemlerinde bile ödeme ücretlerinin düşük ve öngörülebilir kalması anlamına gelir. Rent maliyetlerinin de yakın gelecekte %50 azaltılması planlanmaktadır.
Kullanıcıların SOL ile hiç etkileşime girmemesi için ücretleri tamamen soyutlayabilirsiniz. Uygulama kalıpları için Fee Abstraction bölümüne bakın.
İşlemler ve talimatlar
Bir işlem, Solana'da atomik yürütme birimidir—ya her operasyon başarılı olur, ya da hiçbiri olmaz. Her işlem bir veya daha fazla talimat içerir; bunlar bireysel komutlardır (örneğin, "10 USDC transfer et," "token account oluştur").
Tipik bir ödeme işlemi iki talimat içerebilir: alıcının token account'ını oluştur (gerekirse), ardından token'ları transfer et. Her ikisi de atomik olarak yürütülür—kısmi durumlar yoktur. Payment Processing bölümünde göreceğiniz gibi, maliyetleri azaltmak ve verimi artırmak için birden fazla ödemeyi tek bir işlemde paketleyebilirsiniz.
Hepsini bir araya getirmek
Tipik bir ödeme akışı:
- Girdi toplama. Gönderen ve alıcı cüzdan adreslerini ve transfer edilecek token'ın mint adresini alın.
- ATA'ları türetme. Her iki taraf için token hesaplarını belirleyin.
- Oluşturma ve imzalama. Gerekli transfer talimatlarıyla işlemi oluşturun, gönderenin anahtarıyla imzalayın.
- Gönderme ve onaylama. İşlem bir saniyeden kısa sürede sonuçlanır.
Sonraki adımlar
Solana ile etkileşim
Ağa bağlanın ve Solana ödeme verilerini keşfedin.
İlk ödemenizi gönderin
Bir stablecoin transferi oluşturun ve gönderin.
* lamport, SOL'un en küçük birimidir ve 0.000000001 SOL'a eşittir
Is this page helpful?