Saniyede 65.000 işlem gerçekleştiren ve 400 milisaniye kesinliğe sahip blockchain uygulamaları geliştirebildiğinizi düşünün. Solana'nın API'si bunu mümkün kılıyor; doğrulayıcı altyapısını kendiniz yönetmenize gerek kalmadan hesapları sorgulamanıza, işlem göndermenize ve gerçek zamanlı güncellemelere abone olmanıza olanak tanıyan bir JSON-RPC arayüzü sunuyor.
Geleneksel blockchain geliştirme, sizi hız ve merkeziyetsizlik arasında bir seçim yapmaya zorlar. Ethereum'un 15 TPS'si, ağ tıkanıklığı sırasında darboğazlar yaratır. Katman 2 çözümleri karmaşıklık ekler. Solana, Web3 güvenceleriyle Web2 performansı sunarak, proof-of-history konsensüsünü proof-of-stake ile birleştirerek bu ödünleşimi ortadan kaldırır. Sansüre dirençliliği korurken anlık hissettiren uygulamalar geliştirirsiniz.
İçindekiler:
- Solana Mimarisi'ni Anlamak
- Geliştirme Ortamınızı Kurma
- Temel RPC API Metotları
- Web3.js ile İşlemler Oluşturma
- En İyi Güvenlik Uygulamaları
- Sonuç
Solana Mimarisi'ni Anlamak
Solana, Solana Program Kütüphanesi (SPL) ve yüksek verimli bir çalışma zamanına dayanan benzersiz bir mimari kullanır. Bu temelleri anlamak, verimli API çağrıları yazmanıza yardımcı olur.
Geçmiş Kanıtı (PoH)
PoH, konsensüsten önce her işlem için kriptografik bir zaman damgası oluşturur. Bu, düğümlerin zaman üzerinde anlaşma ihtiyacını ortadan kaldırarak gecikmeyi önemli ölçüde azaltır. API aracılığıyla bir işlem gönderdiğinizde, hemen zaman damgası alır ve işlenmek üzere liderin kuyruğuna girer.
Hesaplar ve Programlar
Ethereum'un kod depolamalı hesap tabanlı modelinden farklı olarak Solana, kodu (programlar) veriden (hesaplar) ayırır. Programlar durumsuzdur; yalnızca yürütülebilir mantık içerirler. Hesaplar verileri depolar ve hangi programın kendilerine sahip olduğunu belirtir. Bu mimari, çakışmayan hesaplar aynı anda yürütülebileceği için paralel işlem işlemeyi mümkün kılar.
Her hesabın, bir Ed25519 açık anahtarından türetilmiş benzersiz bir 32 baytlık adresi vardır. Hesaplar, zincirde kalmak için lamports cinsinden kira öder (1 SOL = 10^9 lamports). Kira muafiyeti olan hesaplar (en az 2 yıllık kirayı elinde tutanlar) bozulmadan süresiz olarak kalır.
Taahhüt Seviyeleri
Solana üç onay seviyesi sunar:
- İşlendi: Mevcut lider tarafından işlenen ancak onaylanmamış işlem. En hızlı yanıt, en düşük kesinlik.
- Onaylandı: Küme tarafından onaylanan işlem. Ortalama ~5-10 saniye.
- Kesinleşti: Köklü hale gelmiş ve geri alınamaz işlem. Ortalama ~12-15 saniye.
Hız ile kesinlik garantileri arasında denge kurmak için API çağrılarında taahhüt seviyelerini belirtin.

Geliştirme Ortamınızı Kurma
Üç bileşene ihtiyacınız var: anahtar yönetimi ve dağıtım için Solana CLI, blockchain erişimi için bir RPC uç noktası ve uygulama entegrasyonu için JavaScript SDK.
Solana CLI'yi Yükleme
Resmi CLI aracını yükleyin:
sh -c "$(curl -sSfL https://release.solana.com/stable/install)"
Kurulumu doğrulayın:
solana --version
Ortamınızı Devnet (test) veya Mainnet (üretim) için yapılandırın:
# Geliştirme için
solana config set --url https://api.devnet.solana.com
# Üretim için
solana config set --url https://api.mainnet-beta.solana.com
Cüzdan Oluşturma
İşlemleri imzalamak için yeni bir anahtar çifti oluşturun:
solana-keygen new --outfile ~/.config/solana/id.json
CLI, açık adresinizi ve 12 kelimelik bir anımsatıcı ifadeyi çıkarır. Anımsatıcı ifadeyi güvenli bir şekilde saklayın; cüzdanınızı bu ifade ile kurtarırsınız. JSON dosyası özel anahtarınızı içerir; bunu dosya izinleriyle (chmod 600) koruyun.
Bakiyenizi kontrol edin:
solana balance
Devnet cüzdanınıza ücretsiz SOL yükleyin:
solana airdrop 2
Devnet airdrop'ları istek başına 2 SOL sağlar, 10 saniyede bir istek ile sınırlıdır. Mainnet, borsalar aracılığıyla SOL satın almayı gerektirir.
Bir RPC Sağlayıcı Seçme
Solana genel RPC uç noktaları sağlasa da, üretim uygulamaları özel altyapıya ihtiyaç duyar. Seçenekler şunlardır:
- Helius:
https://mainnet.helius-rpc.com/?api-key=YOUR_KEY - QuickNode:
https://solana-mainnet.g.alchemy.com/v2/YOUR_KEY - Chainstack: Kurumsal düzeyde özel düğümler
Ücretsiz katmanlar genellikle ayda 100.000 isteğe izin verir. Ücretli planlar daha yüksek limitler, işlem gönderimi için stake edilmiş bağlantılar ve öncelikli ücret API'leri sunar.
Web3.js'i Yükleme
Solana'nın JavaScript SDK'sı iki ana sürüme sahiptir. Sürüm 2.0, işlevsel programlama desenleri, ağaç sallanabilirliği (tree-shakability) ve sıfır bağımlılık ile tamamen yeniden yazılmış bir versiyonu temsil eder.
Sürüm 2.0'ı yükleyin:
npm install @solana/web3.js@2 @solana-program/system @solana-program/compute-budget
Sürüm 1.x uyumluluğu için:
npm install @solana/web3.js
İpucuApidog'uSolana
Temel Solana RPC API Metotları
Solana'nın JSON-RPC API'si, sorgular için HTTP uç noktaları ve abonelikler için WebSocket uç noktaları sağlar. Tüm istekler JSON-RPC 2.0 spesifikasyonunu takip eder.

Hesap İşlemleri
Hesap bilgilerini ve bakiyeyi alın:
curl https://api.devnet.solana.com \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getAccountInfo",
"params": [
"vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36zEGQp",
{"encoding": "base58"}
]
}'
Birden fazla hesabı verimli bir şekilde getirin:
curl https://api.devnet.solana.com \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getMultipleAccounts",
"params": [
[
"vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36zEGQp",
"4fYNw3dojWGPgVMtUU7ziPwq1r2VMGrhCrKZC9EQTbkV"
],
{"encoding": "base64"}
]
}'
Blok ve İşlem Sorguları
İşlem oluşturmak için en son blok karma değerini (blockhash) alın:
curl https://api.devnet.solana.com \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getLatestBlockhash",
"params": [{"commitment": "confirmed"}]
}'
İşlem durumunu sorgulayın:
curl https://api.devnet.solana.com \
-X POST \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "getSignatureStatuses",
"params": [
[
"5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpEz7CmGVZxhEHppBrGK"
],
{"searchTransactionHistory": true}
]
}'
WebSocket Abonelikleri
Hesap değişikliklerini gerçek zamanlı olarak izleyin:
import { createSolanaRpcSubscriptions } from "@solana/web3.js";
const rpcSubscriptions = createSolanaRpcSubscriptions(
"wss://api.devnet.solana.com"
);
const abortController = new AbortController();
await rpcSubscriptions.accountNotifications(
"vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36zEGQp",
{ commitment: "confirmed" },
(notification) => {
console.log("Account changed:", notification);
},
{ abortSignal: abortController.signal }
);
// 60 saniye sonra dinlemeyi durdur
setTimeout(() => abortController.abort(), 60000);
WebSocket bağlantılarının etkin kalması için her 30-60 saniyede bir periyodik ping'lere ihtiyacı vardır. Üretim uygulamaları için yeniden bağlantı mantığı uygulayın.
Profesyonel ipucuApidog'unSolana
Web3.js ile İşlemler Oluşturma
Solana işlemleri, belirli programları hedefleyen bir veya daha fazla talimattan (instruction) oluşur. Her talimat, programı, etkileşimde bulunduğu hesapları ve serileştirilmiş verileri belirtir.
Transfer İşlemi Oluşturma
Sürüm 2.0 SDK kullanarak hesaplar arasında SOL transferi yapın:
import {
airdropFactory,
createKeyPairSignerFromBytes,
createSolanaRpc,
createSolanaRpcSubscriptions,
generateKeyPairSigner,
lamports,
sendAndConfirmTransactionFactory,
pipe,
createTransactionMessage,
setTransactionMessageFeePayer,
setTransactionMessageLifetimeUsingBlockhash,
appendTransactionMessageInstruction,
signTransactionMessageWithSigners,
getSignatureFromTransaction,
} from "@solana/web3.js";
import { getTransferSolInstruction } from "@solana-program/system";
const LAMPORTS_PER_SOL = BigInt(1_000_000_000);
// RPC bağlantılarını kur
const rpc = createSolanaRpc("https://api.devnet.solana.com");
const rpcSubscriptions = createSolanaRpcSubscriptions("wss://api.devnet.solana.com");
const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });
// Gönderici ve alıcıyı oluştur
const sender = await generateKeyPairSigner();
const recipient = await generateKeyPairSigner();
// Göndericiyi airdrop ile finanse et
await airdropFactory({ rpc, rpcSubscriptions })({
recipientAddress: sender.address,
lamports: lamports(2n * LAMPORTS_PER_SOL),
commitment: "confirmed",
});
// En son blok karma değerini (blockhash) al
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
// Pipe kullanarak işlemi oluştur
const transactionMessage = pipe(
createTransactionMessage({ version: 0 }),
(msg) => setTransactionMessageFeePayer(sender.address, msg),
(msg) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, msg),
(msg) => appendTransactionMessageInstruction(
getTransferSolInstruction({
amount: lamports(LAMPORTS_PER_SOL / BigInt(2)),
destination: recipient.address,
source: sender,
}),
msg
)
);
// İmzala ve gönder
const signedTransaction = await signTransactionMessageWithSigners(transactionMessage);
console.log("Transaction signed");
await sendAndConfirmTransaction(signedTransaction, {
commitment: "confirmed",
maxRetries: 0n,
skipPreflight: true,
});
console.log("Confirmed:", getSignatureFromTransaction(signedTransaction));
pipe fonksiyonu, her adımın işlem mesajını dönüştürdüğü işlevsel bir zincir oluşturur. Bu desen, değiştirilebilir durumu ortadan kaldırır ve işlem oluşturmayı bildirimsel hale getirir.
Öncelikli Ücretlerle Optimize Etme
Ağ tıkanıklığı sırasında, öncelikli ücretler işlemin dahil edilmesini sağlar. Helius API'den önerilen ücretleri alın:
import { getBase64EncodedWireTransaction } from "@solana/web3.js";
const base64Transaction = getBase64EncodedWireTransaction(signedTransaction);
const response = await fetch("https://mainnet.helius-rpc.com/?api-key=YOUR_KEY", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
jsonrpc: "2.0",
id: "priority-fee-request",
method: "getPriorityFeeEstimate",
params: [{
transaction: base64Transaction,
options: { recommended: true }
}]
})
});
const { result } = await response.json();
const priorityFee = result.priorityFeeEstimate;
// Öncelikli ücret talimatını ekle
import { getSetComputeUnitPriceInstruction } from "@solana-program/compute-budget";
const optimizedMessage = pipe(
transactionMessage,
(msg) => appendTransactionMessageInstruction(
getSetComputeUnitPriceInstruction({ microLamports: priorityFee }),
msg
)
);
Öncelikli ücretler, işlem birimi başına mikro-lamports cinsinden belirtilir. Daha yüksek ücretler, tıkanıklık sırasında işlem önceliğini artırır.
Hataları Yönetme
Solana, yaygın hatalar için belirli hata kodları döndürür:
import { isSolanaError, SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE } from "@solana/web3.js";
try {
await sendAndConfirmTransaction(signedTransaction);
} catch (error) {
if (isSolanaError(error)) {
switch (error.contextErrorCode) {
case SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE:
console.error("Preflight failed:", error.message);
break;
default:
console.error("Solana error:", error);
}
}
}
Yaygın hatalar arasında yetersiz bakiye (0x1), geçersiz blok karma değeri (süresi dolmuş) ve kullanımda olan hesap (işlem çakışmaları) bulunur.
En İyi Güvenlik Uygulamaları
Solana'nın yüksek işlem hacmi, benzersiz güvenlik hususlarını beraberinde getirir. Uygulamanızı ve kullanıcılarınızı korumak için bu önlemleri uygulayın.
Anahtar Yönetimi
Özel anahtarları asla sürüm kontrolüne (version control) göndermeyin. Ortam değişkenlerini kullanın:
# .env
SOLANA_PRIVATE_KEY="[1,2,3,...]"
Anahtarları uygulamanızda güvenli bir şekilde yükleyin:
import { createKeyPairSignerFromBytes } from "@solana/web3.js";
import { getBase58Encoder } from "@solana/codecs";
const secretKey = JSON.parse(process.env.SOLANA_PRIVATE_KEY);
const signer = await createKeyPairSignerFromBytes(
new Uint8Array(secretKey)
);
Tarayıcı uygulamaları için, özel anahtarları doğrudan işlemek yerine cüzdan bağdaştırıcılarını (Phantom, Solflare) entegre edin. Kullanıcılar, anahtarları güvende tutarak cüzdan uzantıları aracılığıyla işlemleri imzalar.
İşlem Simülasyonu
Hataları erken yakalamak için göndermeden önce işlemleri daima simüle edin:
const simulationResult = await rpc.simulateTransaction(signedTransaction).send();
if (simulationResult.value.err) {
console.error("Simulation failed:", simulationResult.value.err);
// Ücretleri boşa harcamadan hatayı ele al
}
Simülasyon, değişiklikleri kaydetmeden işlemi mevcut duruma karşı yürütür. Mantık hatalarını, yetersiz hesapları ve işlem bütçesi ihlallerini ortaya çıkarır.
Tekrar Oynatma Koruması
Solana işlemleri, yaklaşık 90 saniye sonra sona eren güncel bir blok karma değeri (blockhash) içerir. Bu, tekrar oynatma saldırılarını (aynı işlemi birden çok kez gönderme) önler. İdempotent işlemler için, işlem başına benzersiz talimat verileri veya hesaplar oluşturun.
Oran Sınırlaması
Genel RPC uç noktaları katı oran sınırlaması uygular (genellikle 10 saniyede 100 istek). Üstel geri çekilme (exponential backoff) uygulayın:
async function withRetry(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error) {
if (error.status === 429) {
await new Promise(r => setTimeout(r, 1000 * Math.pow(2, i)));
continue;
}
throw error;
}
}
}
Üretim için, özel RPC düğümleri veya daha yüksek limitlere sahip ücretli sağlayıcı katmanları kullanın.
Program Doğrulama
Üçüncü taraf programlarla etkileşime girmeden önce, kaynak kodlarını SolanaFM veya Solscan gibi keşifçilerde doğrulayın. Dağıtılan bayt kodunun açık kaynak depolarıyla eşleştiğini gösteren doğrulanmış rozetleri arayın. Doğrulanmamış programlar, kullanıcı fonlarını boşaltan kötü amaçlı mantık içerebilir.
Sonuç
Solana'nın API'si, modern uygulamaların talep ettiği performansı sunar: saniye altı kesinlik, yüksek işlem hacmi ve öngörülebilir ücretler. JSON-RPC aracılığıyla hesap durumlarını sorgular, WebSocket üzerinden gerçek zamanlı güncellemelere abone olur ve işlevsel Web3.js 2.0 SDK'sını kullanarak işlemler oluşturursunuz. Hesap tabanlı mimari paralel yürütmeyi sağlarken, taahhüt seviyeleri güvenlik-hız ödünleşiminizde seçim yapmanıza olanak tanır.
Finansal risk olmadan deneme yapmak için Devnet ile başlayın. Mainnet tıkanıklığı sırasında öncelikli ücretleri kullanın. Kullanıcıya dönük uygulamaları dağıtmadan önce simülasyonu ve uygun anahtar yönetimini uygulayın. Solana'nın ekosistemi araçları sağlar; uygulama mantığınız değeri belirler.
Apidog ile bugün başlayın—Solana API uç noktalarınızı saniyeler içinde içe aktarın ve sıfır yapılandırma ile test etmeye başlayın.
