İleri Seviye Teknik Konular: Token-2022, PDA, Multisig ve Hatalar
İşlem başarısızlıkları, Token-2022 özellikleri, PDA hesap yönetimi, donanım cüzdanı entegrasyonu ve hata kodu yorumlamasını kapsayan ileri seviye teknik rehber.
#İşlemler neden başarısız olur: teknik sebepler?
Doğru biçimlendirilmiş işlemler bile bloğa girmeyebilir. Sebepleri anlamak zaman ve gaz kaybını önlemeye yardımcı olur.
Solana İşlem Mimarisi
Solana'daki her işlemin katı limitleri ve zaman kısıtlamaları vardır:
- Maksimum boyut: 1232 bayt (ağ paketi MTU)
- Compute Units limiti: İşlem başına 1,400,000 CU
- Yaşam süresi: 150 slot (~60-90 saniye)
- Blockhash geçerliliği: Sadece yakın bloklar için geçerlidir
Transaction Expired: En Yaygın Hata
Ne oldu: İşlem yakın blockhash'e (blok tanımlayıcısı) referans içerir. Kuyrukta beklerken 150 slot'tan fazla geçerse, ağ işlemi eskimiş olarak reddeder.
Teknik süreç:
- N bloğunun blockhash'i ile işlem oluşturursunuz
- İşlem bloka dahil olmayı bekler
- Ağ N+150 bloğuna ulaşır
- Blockhash'iniz artık "recent blockhashes" listesinde değil
- Validatörler işlemi "Blockhash not found" hatası ile reddeder
Neden olur:
Ağ tıkanıklığı: Popüler NFT mint'leri veya token heyecanı sırasında ağ milyonlarca işlem alır. Priority Fee sırayı belirler.
Düşük Priority Fee: Minimum ücret belirlediyseniz, validatörler daha yüksek ödeme yapan işlemlere öncelik verir.
RPC sorunları: Genel RPC düğümleri yavaş olabilir veya bağlantıyı kaybedebilir.
Çözüm:
- ✅ Priority Fee'yi cüzdan ayarlarında "Medium" veya "High"a artırın
- ✅ 1-2 dakika sonra tekrar deneyin (blockhash otomatik güncellenir)
- ✅ Stabilite için özel RPC endpoint'leri kullanın (Helius, Triton)
Önemli: Expired işlem ücret kesmez. Fonlarınız güvende.
Account State Changed: Veri Çakışması
Ne oldu: İşlem oluşturma ve yürütme arasında hesap durumu değişti.
Tipik senaryolar:
Senaryo 1: Cleanup sırasında para yatırma
- Tarayıcı belirledi: hesap boş, bakiye = 0
- CloseAccount işlemi oluşturuyorsunuz
- Birisi size bu hesaba 1 token gönderiyor
- İşlem bakiye > 0 olan hesabı kapatmayı deniyor
- Hata: "Account has non-zero balance"
Senaryo 2: Başka işlemle race condition
- A token'ını DEX'te swap gönderdiniz
- Aynı anda A token hesabını kapatma işlemi gönderdiniz
- Her iki işlem de aynı hesabı değiştirmeye çalışıyor
- Biri geçer, diğeri reddedilir
Çözüm:
- ✅ Taramayı yeniden çalıştırın - veriler güncellenecek
- ✅ Ön-uçuş simülasyonu olan araçlar kullanın (göndermeden önce kontrol)
- ✅ Aynı token ile eşzamanlı işlemlerden kaçının
Compute Budget Exceeded: Hesaplama Limiti Aşıldı
Ne oldu: İşlem çok karmaşık operasyonlar yapmayı denedi, 1.4M Compute Units limitini aştı.
Sebepler:
- Batch'te çok fazla talimat: Bir seferde 30-40 hesap kapatma girişimi
- Karmaşık akıllı sözleşmeler: Extension'lı bazı Token-2022'ler daha fazla hesaplama gerektirir
- İç içe program çağrıları: Program A, B'yi çağırır, B de C'yi çağırır
Çözüm:
- ✅ Batch'teki hesap sayısını azaltın (25-30 yerine 15-20 kapatın)
- ✅ Batch boyutlarını otomatik optimize eden araçlar kullanın
- ✅ Limiti artırmak için ComputeBudgetProgram.setComputeUnitLimit() talimatı ekleyin
Teknik detay: 1,400,000 CU'ya kadar talep edebilirsiniz, ancak bu orantılı olarak daha yüksek Priority Fee gerektirir:
Priority Fee = Talep edilen CU × CU başına Fiyat
Insufficient Lamports: Yetersiz Fon
Ne oldu: İşlemi yürütmek için bakiyede yeterli SOL yok.
Belirsiz sebepler:
Rent-exempt minimum: Tüm SOL'u transfer etmeye çalışıyorsanız ama açık boş hesaplarınız varsa, cüzdan tüm hesapların kirasını karşılamak için minimum tutmak zorundadır.
Dinamik gaz değişimleri: Tıkanıklık anlarında Priority Fee 10-100 kat büyüyebilir. 0.000005 SOL gaz hesabıyla oluşturulan işlem 0.0005 SOL gerektirebilir.
Birden fazla işlem: Arka arkaya 5 işlem gönderdiniz, her biri gaz rezerve eder. Sonuncusu yetersiz serbest fon nedeniyle geçmez.
Çözüm:
- ✅ Bakiyede her zaman minimum 0.01-0.02 SOL tutun
- ✅ Gaz rezervasyonunu kontrol için cüzdanda "Advanced" modu kullanın
- ✅ İşlemleri sırayla gönderin, onay bekleyin
#Token-2022 nasıl çalışır ve kirası nasıl geri alınır?
Token Extensions Program (Token-2022), 2023'te başlatılan klasik SPL Token'ın evrimi.
SPL Token'dan Temel Farklar
SPL Token (klasik):
- Program ID:
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA - Sabit boyut: 165 bayt
- Temel işlevsellik: transfer, mint, burn, approve
Token-2022:
- Program ID:
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb - Değişken boyut: 165-500+ bayt (extension'lara bağlı)
- Genişletilmiş işlevsellik: 16+ ek yetenek
Ana Extension'lar
Transfer Fee Extension:
Token yaratıcısının her transferde ücret almasına izin verir.
Örnek:
100 token transfer
Ücret: %2 = 2 token
Alıcı alır: 98 token
Yaratıcı alır: 2 token ücret
Rent recovery'ye etkisi: Transfer Fee'li hesaplar daha fazla yer kaplar → kira ~0.0025 SOL'a yükselir.
Permanent Delegate:
Token yaratıcısı, sahibinin onayı olmadan herhangi bir cüzdandan token transfer edebilen bir adres atar.
Uygulama:
- Merkezi stablecoin'ler (USDC suçluların fonlarını dondurabilir)
- Oyun token'ları (geliştirici ban durumunda el koyabilir)
Risk: Yaratıcının fonlarınıza arka kapı erişimi vardır.
Confidential Transfers:
Zero-knowledge proof'lar kullanarak bakiye şifreleme.
Nasıl çalışır:
- Kamuya açık olarak sadece şifreli bakiye görünür
- Gönderici ve alıcı gerçek miktarları bilir
- Validatörler ifşa etmeden doğruluğu kontrol edebilir
Hesap boyutu: 400 bayta kadar → kira ~0.004 SOL'a kadar
Non-Transferable Tokens:
Transfer edilemeyen token'lar (soulbound).
Uygulama:
- Sertifikalar ve diplomalar
- Oyun başarıları
- KYC token'ları (kimlik doğrulama)
Rent recovery özellikleri: Bu token'lar yakılamaz, ancak yaratıcı bu işlevi sağladıysa hesap kapatılabilir.
Eski Araçlar Neden Token-2022'yi Görmez
Teknik sebep: Klasik cleanup servisleri sadece SPL token'ları döndüren RPC metodu kullanır. Doğru yaklaşım SPL ve Token-2022 programları için iki ayrı sorgu gerektirir.
Token-2022 Kira Geri Alımı
Geri alım miktarları (yaklaşık):
- Temel Token-2022: ~0.00204 SOL (SPL gibi)
- Bir extension ile: ~0.0025 SOL
- İki extension ile: ~0.003 SOL
- Confidential Transfers ile: ~0.004 SOL
Önemli: Gerçek miktar bayt cinsinden tam hesap boyutuna bağlıdır.
Kapatma süreci: SPL token'larla aynı - Kalıntıları yakın (varsa), sonra CloseAccount talimatı. Tek fark: talimat oluştururken doğru Program ID'yi kullanmalısınız.
#PDA hesapları nedir ve kira geri alınabilir mi?
Program Derived Address (PDA) - kullanıcılar değil, programlar tarafından kontrol edilen hesaplar.
PDA Teknik Olarak Nedir
Normal hesap:
Private Key → Public Key (adres)
İşlem imzası = sizin private key'iniz
PDA:
Program ID + Seeds → Deterministik adres
İşlem imzası = program (invoke_signed ile)
Anahtar özellik: PDA'nın private key'i yoktur. Sadece program adına işlem imzalayabilir.
PDA'lar Nerede Kullanılır
Lending protokolleri (Solend, MarginFi):
Depozito yaptığınızda:
- Program teminatınızı saklamak için PDA oluşturur
- Siz sahibisiniz ama doğrudan kontrol etmiyorsunuz
- Çekim sadece programın withdraw() fonksiyonu ile mümkün
DEX (Raydium, Orca):
Açık emirler PDA'larda saklanır - Order Book her açık emrin PDA'sını içerir. Emri iptal et = PDA'yı kapat + kirayı iade et
Staking programları:
Stake edilmiş token'larınız PDA'da durur - program unlock dönemini kontrol eder, süre dolmadan kendi token'larınızı "çalamazsınız"
PDA'dan Kira İade Edilebilir mi
Program uygulamasına bağlıdır.
Program kullanıcı için Close Authority sağladıysa:
✅ PDA'yı kapatıp kirayı iade edebilirsiniz
Örnekler: Eski Serum DEX versiyonları, eski lending protokolleri
Program sağlamadıysa:
❌ PDA sonsuza kadar açık kalır
Örnekler: Bazı staking programları kalıcı PDA'lar oluşturur
Fonlar hala kullanımdaysa:
❌ Çekene kadar kapatmak imkansız
Örnek: Lending'de aktif kredi olan PDA'yı kapatamazsınız
Kira İade Edip Edemeyeceğinizi Nasıl Belirlersiniz
Adım 1: Owner'ı Kontrol Edin
Hesabı Solscan'de açın ve Owner'ın bilinen bir program (Raydium, Orca) olup olmadığını kontrol edin.
Adım 2: Bakiyeyi Kontrol Edin
Bakiye = sadece kira (token/veri yok) ise, kapatma mümkün olabilir.
Adım 3: Close Authority'yi Kontrol Edin
Bazı explorer'lar Close Authority alanını gösterir. Adresinizse - kapatabilirsiniz.
Cleanup Araçlarında Otomatik Tespit
Kaliteli servisler:
- Rent Payer olduğunuz tüm hesapları tarar
- Bilinen mantığa sahip programlara göre filtreler
- RPC üzerinden bakiye ve durumu kontrol eder
- Sadece güvenli kapatılabilir PDA'ları gösterir
Uyarı: Anlamadan manuel olarak PDA'ları kapatmayın. Protokoldeki fonlara erişimi kaybedebilirsiniz.
#Cleanup için Ledger ve donanım cüzdanları nasıl kullanılır?
Donanım cüzdanları maksimum güvenlik sağlar ancak cleanup işlemleri için ek adımlar gerektirir.
Ledger Neden Karmaşık İşlemleri Bloklar
Ekran sınırlaması: Ledger Nano S/X 128×64 piksel ekrana sahiptir. Adresi (kısmen), transfer miktarını ve temel işlem bilgisini gösterebilir, ancak 20 CloseAccount talimatının detaylarını, etkilenen tüm hesapların listesini veya karmaşık akıllı sözleşme çağrılarını GÖSTEREMEZ.
Koruma mekanizması: Ledger işlem detaylarını gösteremezse, varsayılan olarak şu hata ile reddeder:
Condition of use not satisfied (0x6985)
Blind Signing Nedir
Blind Signing - Ledger'ın ekranda tam detay göstermeden işlemleri imzalamasına izin verdiğiniz moddur.
Nasıl etkinleştirilir:
- Ledger'ı bilgisayara bağlayın
- Cihazda Solana uygulamasını açın
- Settings'e girmek için her iki düğmeye aynı anda basın
- "Blind signing" seçeneğini bulun
- "Enabled"a geçirin
- Settings'ten çıkın
Önemli: Bu ayar Ledger'daki Solana uygulamasının içindedir, bilgisayardaki Ledger Live'da değil.
Blind Signing Riskleri
Cihaz doğrulamasının kaybı: Ne imzaladığınızı görmüyorsunuz. Teorik olarak kötü niyetli bir site tüm SOL'u hacker'a transfer eden ve hesaplarınızı kapatan işlem gönderebilir - ve bunu Ledger ekranında görmezsiniz.
Riskleri nasıl minimize edersiniz:
- ✅ Blind Signing'i sadece belirli işlem için etkinleştirin
- ✅ Sadece doğrulanmış servisleri kullanın
- ✅ İşlem simülasyonunu Phantom/Solflare cüzdanında kontrol edin (arayüz olarak kullanıyorsanız)
- ✅ Kullandıktan hemen sonra Blind Signing'i devre dışı bırakın
Blind Signing Olmadan Alternatif İş Akışı
Yöntem 1: Kısmi cleanup
Bazı basit işlemler Blind Signing gerektirmez - işlem başına 1-3 hesap kapatma, extension'sız basit SPL token'lar.
Yöntem 2: xpub üzerinden dışa aktarma
- Ledger'dan extended public key dışa aktarın
- Hot wallet'a içe aktarın (watch-only)
- Hot wallet'ta cleanup yapın
- Kurtarılan SOL'u Ledger'a geri gönderin
Yöntem 3: Ara cüzdan oluşturma
- Fonları geçici hot wallet'a transfer edin
- Hot wallet'ta cleanup yapın
- Fonları Ledger'a geri gönderin
#Multisig cüzdanlardan kira nasıl geri alınır?
Multisignature cüzdanlar (Squads Protocol, Goki) işlemleri yetkilendirmek için birden fazla anahtar kullanır.
Solana'da Multisig Nasıl Çalışır
Yapı:
Multisig Vault (PDA)
├── İmzalayan 1: Alice (1/3 oy)
├── İmzalayan 2: Bob (1/3 oy)
└── İmzalayan 3: Charlie (1/3 oy)
Eşik: 2/3 (üçten ikisinin imzası gerekli)
İşlem süreci:
- Alice Proposal oluşturur: "50 boş hesabı kapat"
- Bob inceler ve Onaylar
- Eşiğe ulaşıldı (2/3) → işlem otomatik yürütülür
- Charlie daha sonra Onaylayabilir (ama gereksiz)
Normal Cleanup Araçları Neden Multisig ile Çalışmaz
Sorun: Standart servisler cüzdan bağlantısından hemen sonra işlem göndermeye çalışır. Ama Multisig'de:
- Bir imza yeterli değil
- Proposal oluşturmak gerekli
- Diğer imzalayanları beklemek gerekli
Teknik nokta: Multisig Vault bir PDA'dır. Token'lar imzalayan adreslerinde değil Vault'ta saklanır. Bu yüzden Alice'in adresini taramak 0 hesap gösterir, oysa Vault yüzlerce hesaba sahiptir.
Multisig Cleanup İş Akışı
Adım 1: Vault adresini tarayın
Squads arayüzünde Multisig Vault adresini bulun, cleanup tarayıcıya yapıştırın (Read-Only).
Adım 2: Hesap listesini dışa aktarın
Bazı gelişmiş araçlar kapatılacak token hesaplarının listesini dışa aktarmaya izin verir.
Adım 3: Manuel olarak Proposal oluşturun
Squads arayüzünde:
- New Proposal → Custom Instruction
- Program: Token Program / Token-2022 Program
- Instruction: CloseAccount
- Account list: dışa aktarmadan yapıştır
- Create Proposal
Adım 4: İmzaları toplayın
Proposal linkini diğer imzalayanlara gönderin. Eşiğe ulaştıktan sonra işlem yürütülür.
Multisig için Otomasyon
Geliştiriciler Squads SDK kullanarak proposal oluşturma, imza toplama ve yürütmeyi otomatikleştiren scriptler oluşturabilir. Maliyet Proposal oluşturma gazı artı işlem yürütme gazını içerir.
#Yaygın Solana hata kodları nasıl yorumlanır?
Solana kullanıcılara her zaman açık olmayan sayısal hata kodları kullanır.
Cleanup Sırasında Yaygın Hata Kodları
0x0 (Success): Hata değil. İşlem başarıyla yürütüldü.
0x1 (Insufficient funds): Gaz veya rent-exempt minimum ödemesi için yetersiz SOL. Çözüm: Bakiyeye para yatırın.
0x3 (Invalid account data): Hesabın hatalı veri yapısı var. Sebep: Hatalı token, bozuk metadata. Çözüm: Bu hesabı atlayın, diğerlerini kapatın.
0x7 (Account already in use): Başka bir işlem aynı anda bu hesabı değiştiriyor. Çözüm: 5-10 saniye bekleyin, tekrar deneyin.
0xBB8 (3000 - Account not rent exempt): Yeterli depozit olmadan hesap oluşturma girişimi. Cleanup bağlamında: Araç hatası (nadir hata).
0x1771 (6001 - Custom program error): Belirli programa özgü hata. Hata mesajı detaylarına bakmak gerekli.
Hata Detayları Nasıl Alınır
Phantom/Solflare'de:
Başarısız işlemden sonra görünür:
Transaction failed
View in Explorer →
Tıklayın → tam log ile Solscan açılır.
Solscan'de:
- "Program Logs" bölümünü bulun
- "Error:" içeren satırları arayın
- Genellikle insan tarafından okunabilir açıklama vardır
Örnek:
Program log: Error: Account has non-zero balance
Program TokenkegQf... failed: custom program error: 0x10
Yorum: 0x10 = "Non-zero balance", token'lı hesap kapatılamaz.