Skip to main content
Bu sayfa yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.İngilizce sürümü görüntüle →
Sürüm bilgisi.SDK sürümünü package.json dosyanızda sabitleyin. Bonding curve arayüzü küçük sürümler arasında değişmiştir.

Kurulum

Buradaki örnekler raydium-sdk-V2-demo/src/launchpad içindeki dosyaları yansıtır. Başlatma, demo repo’nun config.ts.template dosyasını takip eder:

Başlatma oluşturun

Kaynak: src/launchpad/createMint.ts (ve Bonk varyantı için createBonkMintApi.ts) Başlatmanın ekonomisinin çoğu argüman değildir — configId aracılığıyla bağladığınız GlobalConfig’ten gelir ve SDK geri kalanını API’nin varsayılan parametrelerinden doldurur. Mint’in kimliğini, bağlanacak konfigürasyonu ve (isteğe bağlı olarak) ilk bir alımı geçersiniz:
Notlar:
  • Hiçbir curveType, graduationFractionBps, initialK, quoteMint, openTime, fees veya postGraduationLpPolicy argümanı yoktur. Curve şekli ve quote mint, bağladığınız GlobalConfig’in özellikleridir; ücret oranları GlobalConfig ve PlatformConfig’te yaşar; mezuniyet sırasında LP elden çıkarılması bir PlatformConfig ayarıdır. InitializeV2’nin tam olarak ne kabul ettiğini görmek için products/launchlab/instructions bölümüne bakın.
  • 10 karakterden uzun symbol ve boş uri her ikisi de herhangi bir RPC’den önce istemci tarafında reddedilir.
  • transferFeeExtensionParams geçirmek, builder’ı InitializeWithToken2022’ye geçirir ve migrateType’ı "cpmm"’ye zorlar.
  • Builder bir transactions dizisi döndürür; createOnly: false ilk alım işlemini ekler. Her zaman execute({ sequentially: true }) çalıştırın — mint alımdan önce var olmalıdır.

Başlatma durumunu getirin

Kaynak: src/launchpad/poolInfo.ts getLaunchById yoktur. Pool id, (programId, mintA, mintB) öğesinin bir PDA’sıdır ve getRpcPoolInfo bağlı configInfo ile birlikte çözülen PoolState’i döndürür:
getRpcPoolsInfo({ poolIdList }) toplu formdur ve pool id’ye göre anahtarlanmış bir poolInfoMap döndürür — döngü yapmak yerine portföy görünümleri için kullanın. Ham hesapları kendiniz çözmek istiyorsanız, LaunchpadPool.decode ve LaunchpadConfig.decode dışa aktarılır.

Alım — tam quote giriş

Kaynak: src/launchpad/buy.ts Zincir dışı fiyat teklifi yardımcısı Curve.buyExactIn’dir, dışa aktarılan Curve sınıfında statik bir yöntemdir — raydium.launchpad’da bir yöntem değildir. İşlem builder’ı buyToken’dır. Her ikisinin de platform’un ücret oranlarına ihtiyacı vardır, bunlar ayrı bir PlatformConfig hesabında yaşar:
slippage yerine minMintAAmount’ı açıkça geçebilirsiniz; her ikisini de atın ve SDK sınırı canlı RPC verilerinden hesaplar. shareFeeRate, poolInfo.configInfo.maxShareFeeRate’i aşmamalı ve sadece bir shareFeeReceiver da geçtiğinizde geçerlidir.

Alım — tam base çıkış

Builder buyTokenExactOut’dur ve miktar argümanları outAmount (istediğiniz base) ve maxBuyAmount (en fazla harcayacağınız quote) şeklindedir. Curve.buyExactOut({ poolInfo, amountA, ... }) eşleşen zincir dışı önizlemedir.
“Tam olarak X token satın al” UI’ları için kullanışlıdır. Builder, sıfır outAmount’ı istemci tarafında reddeder ve curve yeterince hareket ettiyse program geri döner, quote gereksinimi maxBuyAmount’ı aşar.

Satış

Kaynak: src/launchpad/sell.ts Builder sellToken’dır (tam quote çıkış varyantı için sellTokenExactOut), sellAmount ve isteğe bağlı minAmountB ile. Curve.sellExactIn({ poolInfo, amountA, ... }) bunu önizler.
Curve’ün satış yolu alım yoluna simetriktir: real_a’yı sellAmount kadar azaltmak, real_a − sellAmount ile real_a arasında curve’ün altındaki entegre alanına eşit quote_out döndürür, satış ücreti eksi. sellAmount sıfırdan büyük olmalıdır — builder sıfırı herhangi bir RPC’den önce reddeder.

Mezuniyet

Mezuniyet, bir entegratörün tetikleyebileceği bir şey değildir. raydium.launchpad.graduate yoktur, alım builder’larında autoGraduate bayrağı yoktur ve dönüş değerlerinde willGraduate alanı yoktur. Zincir üstünde, mezuniyet MigrateToCpswap (veya eski MigrateToAmm) şeklindedir ve her iki talimat da imzalayanlarını bağlı GlobalConfig’te kaydedilen bir cüzdana kısıtlar — migrate_to_cpswap_wallet ve migrate_to_amm_wallet sırasıyla. Başka bir imzalayan’dan gelen bir çağrı InvalidOwner ile başarısız olur. İzinsiz değildir ve hiçbir MEV bot bunu yarışamaz.
Bu cüzdanlar Raydium’un mezuniyet crank’ı tarafından işletilir, bu nedenle pratikte göç, eşik geçildikten sonra son alımı kimin yaptığından bağımsız olarak saniyeler içinde gerçekleşir. Bir entegratör tarafından yapılacak tek şey, durum geçişini hızlı bir olay olarak ele almaktır: getRpcPoolInfo’yi yoklayın (veya aşağıda gRPC üzerinden abone olun) ve status değiştiğinde UI’nızı curve’den sonuçlanan CPMM pool’una geçirin. Hesap listeleri, göç ücreti ve mezuniyet sırasında LP’nin nasıl bölündüğü için products/launchlab/instructions bölümüne bakın.

Yaratıcı ücretlerini toplayın

Kaynak: src/launchpad/claimCreatorFee.ts (tek mint) ve collectAllCreatorFees.ts (toplu) Yöntem claimCreatorFee’dir (toplu form için claimMultipleCreatorFee). Quote mint tarafından anahtarlanır, başlatma tarafından değil — bir çağrı, imzalayanın o mint’te biriken yaratıcı ücretlerini başlatmalarında temizler:
Biriken yaratıcı ücreti sayacını yaratıcının quote mint’teki ATA’sına aktarır. Mezuniyet öncesi veya sonrası çağrılabilir; muazzam bir bakiye birikene kadar beklemek yerine periyodik olarak kullanın. Platform operatörleri paralel claimPlatformFee / claimAllPlatformFee / claimVaultPlatformFee builder’larına sahiptir.

Başlatmayı yaşam döngüsü boyunca izleyin

Bir araya getirerek, bir izleme betiği şöyle görünebilir:
Tek bir başlatmada getRpcPoolInfo’yi 10 saniyelik bir zamanlayıcıda yoklamak iyidir. Bir indexer için, bunun yerine aşağıdaki gRPC aboneliğini kullanın — getRpcPoolsInfo({ poolIdList }) toplu işlem yapar, ancak yüzlerce pool’u yoklamak hiçbir fayda için RPC kredilerini yakar.

Konfigürasyonları ve pool’ları gRPC üzerinden izleyin

Kaynak: src/grpc/launchpadPoolInfo.ts LaunchLab programına Yellowstone gRPC üzerinden abone olur ve her GlobalConfig ve PoolState güncellemesini her mint’in token programı ile günlüğe kaydeder. Bir accounts aboneliğinde iki datasize filtresi iki hesap türünü ayırır, bu nedenle tek bir akış her ikisini de kapsar. Demo, Token-2022 quote-mint sürümü gerekli kılan başlatmanın mint’lerini sınıflandırmak için en kısa doğru referanstır:
  • Pool’lar doğrudan PoolState.token_program_flag’den sınıflandırılır, hiçbir mint getirmeden bit0’ı base mint için ve bit1’i quote mint için çözerek. Tüm baytı 0’a karşı test etmek — quote mint’ler eski olduğu sürece yeterli idi — quote mint Token-2022 olduğunda eski bir base mint’i yanlış okur.
  • Konfigürasyonlar bu şekilde sınıflandırılamaz: bir GlobalConfig quote mint’inin adresini ve program bayrağını depolamaz, bu nedenle demo mint hesabının sahibini bir kez okur ve mint başına önbelleğe alır.
Ayrıca ikisini birbirine karşı çapraz kontrol eder, bu da kendi indexer’ınızda tutmak için yararlı bir iddidir. create ile update arasındaki fark, demo’nun kendi önbelleklerinden çıkarılır, başlangıçta getProgramAccounts’tan tohumlanır; bu tohumlama devre dışı bırakıldığında, “oluştur”u “bu akışta ilk görülen” olarak okuyun. gRPC erişimi genel RPC yüzeyinin bir parçası değildir — demo repo’nun src/grpc/README.md dosyasına bakın.

Rust CPI

Kendi Anchor programınızdan LaunchLab’ı çağırmak nadirdir (çoğu başlatma entegrasyonu sadece TS tarafında). Yaparsanız:
  • Crate raydium-launchpad’dır (lib adı raydium_launchpad), sürüm 0.2.0 ve bir cpi özelliğini ortaya çıkarır. raydium_launchlab yoktur.
  • crates.io’da yayınlanmamıştır — diğer Raydium program crate’leriyle aynı şekilde git revizyonuna göre bağımlılık yapın.
  • CPI giriş noktaları, SDK’nın TypeScript yöntemlerinden sonra değil, zincir üstü talimatlardan sonra adlandırılır: buy_exact_in, buy_exact_out, sell_exact_in, sell_exact_out, claim_creator_fee, create_vesting_account, claim_vested_token. migrate_to_amm / migrate_to_cpswap, GlobalConfig göç cüzdanlarına imzalayan kapılı ve bir entegratör programından çağrılamaz.
Crate sabitleme kuralları için sdk-api/rust-cpi bölümüne bakın — özellikle LaunchLab ve CLMM’ye CPI yapabilen bir crate’i belirleyen Anchor sürümü bölümü.

Tuzaklar

  • Zincir üstü talimat adlarını SDK yöntem adlarıyla karıştırmak. Program buy_exact_in / sell_exact_in’e sahiptir; SDK buyToken / sellToken’a sahiptir. buyExactIn ve sellExactIn sadece Curve’de statik yöntemler olarak mevcuttur ve bir fiyat teklifi hesaplarlar — bir işlem oluşturmazlar.
  • extraSigners’ı unutmak. createLaunchpad, base mint’i oluşturduğunuz bir keypair’den oluşturur, bu nedenle bu keypair imzalamalıdır. extraSigners: [pair]’ı atın ve işlem imza doğrulaması başarısız olur.
  • Quote mint’i seçmemek. Bir tane geçmezsiniz. Quote mint, configId aracılığıyla bağladığınız GlobalConfig’in bir özelliğidir — getPdaLaunchpadConfigId(programId, quoteMint, curveType, index). Farklı bir quote mint’e karşı başlatmak için farklı bir config bağlayın; raydium.api.fetchLaunchConfigs() varsayılan parametreleriyle mevcut olanları listeler.
  • Metadata boyutu. Uzun uri dizileri Metaplex CPI’ı bütçenin üzerine çıkarır. uri’yi ~200 karakterin altında tutun — çoğu CDN tarafından barındırılan JSON metadata kolayca uyar. symbol 10 karakterde sabit sınırlandırılır.
  • Mezuniyeti girebileceğiniz bir yarış olarak ele almak. Değildir — yukarıdaki uyarıya bakın. UI’nız yine de status geçişlerini hızlı olaylar olarak ele almalıdır, çünkü Raydium’un crank’ı göç’ü eşik geçildikten sonra saniyeler içinde gerçekleştirir.

Sonraki adım

Kaynaklar: