Ana içeriğe atla

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

Bu sayfayı yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.İngilizce sürümü görüntüle →
Raydium Perps, Orderly Network üzerinde beyaz etiketli bir dağıtımdır. Emir kitabı, eşleştirme motoru ve hesap durumunun tümü Orderly üzerinde yaşamaktadır. Raydium SDK v2 (@raydium-io/raydium-sdk-v2) perps’ı kapsamaz — programlı erişim için Orderly’nin REST + WebSocket API’sini doğrudan kullanın. Aşağıdaki kod parçacıkları en yaygın akışları gösterir; kanonik referans orderly.network/docs adresindedir.
Sürüm başlığı.
  • Arka uç: Orderly Network REST + WebSocket API
  • Kod parçacıkları 2026-04 itibarıyla Orderly’nin API’sine karşı doğrulanmıştır
  • Zincir üstü depozitolar için Solana kümesi: mainnet-beta
  • İmzalama: Orderly EIP-712 stilinde yükü üzerinde Solana ed25519 (Orderly EVM olmayan zincirler için bile EIP-712 şeması kullanır; en son alan listesi için Orderly dokümanlarına bakın)
Orderly’nin API yüzeyi gelişmektedir; bu kod parçacıklarını üretime kopyalamadan önce orderly.network/docs adresini kontrol edin.

Bu sayfada ne var?

Aşağıdaki akışlar entegrasyoncu ile ilgili yaşam döngüsünü kapsar:
  1. Hesap kurulumu — USDC yatırma ve hesabı Orderly’ye kaydetme.
  2. Kimliği doğrulanmış REST çağrıları — emir verme, iptal etme ve hesap sorguları için imza isteme.
  3. Ticaret — pazar / limit emirleri verme, iptal etme, pozisyonları ve dolguları getirme.
  4. Pazar verileri — emir kitabı ve ticari WebSocket’e abone olma.
  5. Geri çekme — cüzdana geri çekme başlatma.
Bu kod parçacıkları @solana/web3.js ve Ed25519 imzalaması için tweetnacl ile Node.js + TypeScript’i hedefler. Bunlar başlangıç noktasıdır — Orderly’nin API yüzeyi geniş ve bu sayfadan daha hızlı değişir; üretim kodunu yayınlamadan önce her zaman Orderly’nin canlı dokümanlarını kontrol edin.

Kurulum

import { Connection, Keypair, PublicKey, clusterApiUrl } from "@solana/web3.js";
import nacl from "tweetnacl";
import bs58 from "bs58";
import fs from "node:fs";

// 1. Solana cüzdanı — USDC'ye sahip, depozito/geri çekme işlemlerini imzalar.
const connection = new Connection(process.env.RPC_URL ?? clusterApiUrl("mainnet-beta"));
const owner = Keypair.fromSecretKey(
  new Uint8Array(JSON.parse(fs.readFileSync(process.env.KEYPAIR!, "utf8"))),
);

// 2. Orderly ticari anahtarı — API isteklerini imzalamak için kullanılan ayrı Ed25519 keypair.
//    Solana cüzdanı DEĞİL. Bir kez oluşturun, gizli tutun, oturumlar arasında yeniden kullanın.
const orderlyKey = nacl.sign.keyPair();   // ed25519
const orderlyPubB58 = "ed25519:" + bs58.encode(orderlyKey.publicKey);

// 3. Orderly temel URL'si. Raydium, Orderly'nin mainnet hostunu kullanır.
const ORDERLY_BASE = "https://api.orderly.org";
const BROKER_ID    = "raydium";   // Orderly'de Raydium'un broker ad alanı
const CHAIN_ID     = "solana";    // çapraz zincir hesabı kaydı için
Orderly ticari anahtarı cüzdan keypair’iniz değildir. İlk kullanımda cüzdanınıza karşı kaydettiğiniz bir istek imzalama anahtarıdır; fonları dokunmadan döndürebilirsiniz. Bunu bir oturum kimlik bilgisi olarak ele alın.

Hesap kaydı

Herhangi bir emir vermeden önce cüzdanı Orderly’ye kaydedin:
import { encodeUserSettlement } from "./eip712-helpers"; // tam yükü için Orderly dokümanlarına bakın

// 1. Orderly'den bir kayıt nonce'u isteyin.
const nonceResp = await fetch(`${ORDERLY_BASE}/v1/registration_nonce`).then(r => r.json());
const registrationNonce = nonceResp.data.registration_nonce;

// 2. Solana cüzdanı ile bir kayıt yükünü imzalayın (Solana'da EIP-712 stilinde
//    yapılandırılmış bir ileti olarak uygulanır; Orderly'nin SDK kodlayıcıyı sağlar).
const payload = encodeUserSettlement({
  brokerId: BROKER_ID,
  chainId: CHAIN_ID,
  registrationNonce,
  timestamp: Date.now(),
});
const walletSig = nacl.sign.detached(Buffer.from(payload), owner.secretKey);

// 3. Orderly Ed25519 ticari anahtarını dahil ederek kaydolun.
const reg = await fetch(`${ORDERLY_BASE}/v1/register_account`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    message: payload,
    signature: bs58.encode(walletSig),
    userAddress: owner.publicKey.toBase58(),
    orderlyKey: orderlyPubB58,
  }),
}).then(r => r.json());

console.log("Account ID:", reg.data.account_id);
Hesap ID’leri her (broker_id, wallet_address) çifti için belirleyicidir — kayıt idempotent’dir. Bir cüzdan zaten Raydium’un broker’ı ile kaydolmuşsa, çağrı yeni bir tane oluşturmadan aynı hesap ID’sini döndürür.

USDC Yatırma

Depozitolar USDC’yi cüzdan ATA’sından Orderly’nin kapanma kasasına taşır. Bunlar zincir üstü Solana işlemleridir:
// Orderly'nin Solana programını kullanarak depozito ix'ini oluşturun (vault program ID'si
// dokümanlarında yayımlanır; sabit kodlamak yerine dinamik olarak çekin).
const vaultProgramId = new PublicKey("<orderly_solana_vault_program_id>");

const depositIx = await buildOrderlyDepositIx({
  vaultProgramId,
  user: owner.publicKey,
  brokerId: BROKER_ID,
  amountUsdc: BigInt(100_000_000),    // 100 USDC (6 ondalık)
});

const tx = new Transaction().add(depositIx);
const sig = await connection.sendTransaction(tx, [owner]);
await connection.confirmTransaction(sig, "confirmed");
console.log("Deposit tx:", sig);
Yaklaşık 30 saniye sonra, Orderly’nin relayer depozitosunu indeksler ve bakiye hesabın serbest marjı altında görüntülenir. Onaylamak için /v1/client/holding sorgusu yapın:
const holdingResp = await orderlyAuthGet("/v1/client/holding");
console.log("Balances:", holdingResp.data.holding);
(orderlyAuthGet aşağıda tanımlanmıştır — her kimliği doğrulanmış çağrı onun üzerinden geçer.)

İstek imzalama yardımcısı

Orderly’ye yapılan her kimliği doğrulanmış REST çağrısı (timestamp + method + path + body) üzerinden Ed25519 imzasını taşır:
async function orderlyAuthRequest(
  method: "GET" | "POST" | "PUT" | "DELETE",
  path: string,
  body?: unknown,
): Promise<any> {
  const ts   = Date.now().toString();
  const json = body ? JSON.stringify(body) : "";
  const msg  = `${ts}${method}${path}${json}`;
  const sig  = nacl.sign.detached(Buffer.from(msg), orderlyKey.secretKey);

  const resp = await fetch(ORDERLY_BASE + path, {
    method,
    headers: {
      "Content-Type": "application/json",
      "orderly-account-id":  /* kayıtlı account_id */ "",
      "orderly-key":         orderlyPubB58,
      "orderly-signature":   bs58.encode(sig),
      "orderly-timestamp":   ts,
    },
    body: json || undefined,
  });
  return resp.json();
}

const orderlyAuthGet  = (p: string)            => orderlyAuthRequest("GET",  p);
const orderlyAuthPost = (p: string, b: object) => orderlyAuthRequest("POST", p, b);
const orderlyAuthDel  = (p: string)            => orderlyAuthRequest("DELETE", p);
Yeniden oynatma koruması: sunucu saatinden 5 saniyeden fazla uzak olan timestamp içeren istekler reddedilir. Saatinizi (NTP) senkronize edin ve istekleri önceden imzalamaktan kaçının.

Pazar emri verme

const marketResp = await orderlyAuthPost("/v1/order", {
  symbol:        "PERP_SOL_USDC",
  order_type:    "MARKET",
  side:          "BUY",
  order_quantity: 1.0,        // 1 SOL pozisyon
  reduce_only:    false,
});

if (marketResp.success) {
  console.log("Order ID:", marketResp.data.order_id);
} else {
  console.error("Reject:", marketResp.message);
}
Pazar emirleri hemen yürütülür. Yanıt, elde edilen order_id ve durumunu döndürür. Dolgular WebSocket üzerinden gelir (aşağıya bakın); REST yanıtının kendisi tam olarak doldurulana kadar bloke olmaz.

Sadece-Sonrası ile Limit Emri Verme

const limitResp = await orderlyAuthPost("/v1/order", {
  symbol:         "PERP_SOL_USDC",
  order_type:     "LIMIT",
  side:           "SELL",
  order_quantity: 0.5,
  order_price:    140.50,
  // bayrak kombinasyonları:
  // post_only: true bunu yapıcı yalnızca bir emir yapar — kesişirse iptal eder.
  // reduce_only / time_in_force bağımsız olarak ayarlanabilir.
  post_only:      true,
});
console.log(limitResp);
IOC / FOK için time_in_force: "IOC" veya "FOK" ayarlayın. Her bayrağın semantiği için products/perps/order-types bölümüne bakın.

Emir İptal Etme

// Emir ID'sine göre
await orderlyAuthDel(`/v1/order?order_id=${orderId}&symbol=PERP_SOL_USDC`);

// Bir sembol üzerindeki TÜM emirleri iptal et
await orderlyAuthDel(`/v1/orders?symbol=PERP_SOL_USDC`);
İptal senkron olarak onaylanır ancak gerçek iptal bir doldurma ile yarışabilir. Her zaman /v1/orders tarafından yoklayarak veya WebSocket’i izleyerek mutabakat sağlayın — iptal başarılı olduğunu onay olmadan varsaymak yinelenen veya istenmeyen pozisyonlara yol açabilir.

Açık Pozisyonları Getirme

const posResp = await orderlyAuthGet("/v1/positions");
for (const p of posResp.data.rows) {
  console.log(
    p.symbol,
    "size:",  p.position_qty,
    "entry:", p.average_open_price,
    "unrealized:", p.unsettled_pnl,
  );
}
Negatif position_qty kısa, pozitif uzun pozisyondur. position_qty == 0 pozisyonun kapalı olduğu anlamına gelir ancak satır sonraki temizlemeye kadar görüntülenebilir.

Dolgu Geçmişini Getirme

const fills = await orderlyAuthGet(
  "/v1/trades?symbol=PERP_SOL_USDC&start_t=" + (Date.now() - 86_400_000)
);
for (const t of fills.data.rows) {
  console.log(t.executed_timestamp, t.side, t.executed_quantity, "@", t.executed_price);
}
Zaman argümanları milisaniye Unix zaman damgasıdır. Varsayılan sayfa boyutu 25 satırdır; sayfalamak için page ve size sorgu parametrelerini kullanın.

WebSocket: Pazar Verileri

import WebSocket from "ws";

const ws = new WebSocket(`wss://ws.orderly.org/ws/stream/${accountId}`);

ws.on("open", () => {
  // Halka açık pazar verileri: bir sembol için emir kitabı deltaları + işlemler
  ws.send(JSON.stringify({ id: "ob1", topic: "orderbook@PERP_SOL_USDC" }));
  ws.send(JSON.stringify({ id: "tr1", topic: "trade@PERP_SOL_USDC" }));
});

ws.on("message", (raw) => {
  const msg = JSON.parse(raw.toString());
  if (msg.topic?.startsWith("orderbook@")) {
    // depth diff: { bids: [[price, qty], ...], asks: [[price, qty], ...] }
    applyOrderbookDelta(msg.data);
  } else if (msg.topic?.startsWith("trade@")) {
    console.log("trade:", msg.data);
  }
});
Özel akış için (dolguların, pozisyon güncellemelerinin, bakiye değişikliklerinin), WebSocket’in kimliği doğrulanması gerekir. REST istekleriyle aynı şekilde imzalanan, hesap ID’nize kapsamlı bir subscribe yükü gönderin. Orderly’nin dokümanlarında tam yükün şekli vardır; ara sıra değişir, bu nedenle burada belirli bir şemayı sabit kodlamayın.

USDC Geri Çekme

// 1. Bir geri çekme isteyin.
const wRes = await orderlyAuthPost("/v1/withdraw_request", {
  token:  "USDC",
  chain_id: CHAIN_ID,
  amount: 50.0,                          // insan birimleri
  receiver: owner.publicKey.toBase58(),
});

console.log("Withdrawal request id:", wRes.data.withdraw_id);
Orderly, geri çekmeyi zincir üstü olarak alıcı adresine aktarır. Sabit bir 1 USDC geri çekme ücreti vardır (bkz. products/perps/fees). Zincir üstü aktarım normal koşullar altında 1-2 dakika içinde gerçekleşir; tıkanıklık sırasında daha uzun beklemeyi unutmayın.

Tuzaklar

  • Ticari anahtarı ortamlar arasında yeniden kullanmayın. Cüzdanınıza karşı kayıtlı tek Orderly ticari anahtarı, bir Solana mainnet hesabı ile ilişkilendirilir. Ayrıca devnet veya staging’e ihtiyacınız varsa her biri için ayrı bir anahtar oluşturun.
  • Zaman senkronizasyonu. Orderly’nin saat çarpıklık toleransı sıkıdır (±5s). Uzun süreli hizmetlerde NTP sapması sonunda imzalamayı bozacaktır. Periyodik olarak yeniden senkronize edin.
  • WebSocket yeniden bağlantıları. Halka açık WS bazen Orderly yükseltmeleri sırasında bağlantıları düşürür. Üstel backoff uygulayın ve yeniden açıldığında yeniden abone olun.
  • Oran limitleri. REST çağrıları hesap başına tier-rate-limited’dir. > 5 emir iptal etmesi varsa cancel_all aracılığıyla toplu iptal yapın, id’ye göre cancel döngüsü yerine.
  • Pozisyon yönü örtülüdür. PERP_SOL_USDC üzerinde bir BUY emri uzun bir pozisyon açar veya uzatır; SELL kısa bir pozisyon açar veya uzatır — ancak zaten uzun pozisyondaysanız, SELL pozisyonu azaltır (ve çevirebilir) çünkü Raydium Perps tek yönlü moddur. Yön önemliyse bir emir vermeden önce her zaman mevcut pozisyonu kontrol edin.
  • Finansman ve tasfiyeler emir akışından ayrıdır. Finansman ödemeleri ve tasfiyeler ayrı olay akışları olarak görüntülenir; bunlar “emirler” değildir. Bunları gözlemlemesi gerekiyorsa ilgili özel WS konularına abone olun.

Sonraki Adım

Kaynaklar:
  • Orderly Network geliştirici belgeleri — yukarıda kullanılan API yüzeyi için kanonik referans. Raydium Perps bunu doğrudan tüketir.
  • Orderly TypeScript SDK — aynı REST/WebSocket katmanını yazılı yardımcılarla sarar; imzalama katmanını kendiniz yazmayı atlamak isterseniz kullanışlıdır.