Solana API Kullanımı: Geliştiriciler İçin Eksiksiz Rehber

Ashley Goolam

Ashley Goolam

6 February 2026

Solana API Kullanımı: Geliştiriciler İçin Eksiksiz Rehber

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 uygulamaları geliştirirken, birden fazla RPC uç noktasını yönetmek ve işlem hatalarını ayıklamak karmaşık hale gelebilir. Apidog, blockchain geliştirme için özel olarak tasarlanmış görsel API testi, otomatik dokümantasyon ve ekip işbirliği özellikleri sunar. Solana iş akışınızı kolaylaştırmak için Apidog'u ücretsiz deneyin — kredi kartı gerekmez.
button

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:

Hız ile kesinlik garantileri arasında denge kurmak için API çağrılarında taahhüt seviyelerini belirtin.

solana api

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:

Ü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.

Temel Solana RPC API Metotları

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.

button

API Tasarım-Öncelikli Yaklaşımı Apidog'da Uygulayın

API'leri oluşturmanın ve kullanmanın daha kolay yolunu keşfedin