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 →
Bir eğri kuralı, platformun “hangi başlatmaları barındırmaya istekliyim?” sorusunun cevabıdır. GlobalConfig protokol tabanını belirler — en az 10M arz, arzın en az %20’si eğride satılır, vb. — ve bu tabanlar kasıtlı olarak geniştir, böylece her tür platform bunların altına sığar. Eğri kuralı, platformunuzun bunları ürününüzün gerçekten desteklediği şekle daraltmasıdır.Kurallar kendi PlatformCurveRule hesabında yaşar, her (platform, GlobalConfig) çifti için bir tane. Yapılandırmanın zaten izin verdiği şeyi yalnızca daraltabilirler; bir kural asla bir protokol limitini genişletemez.

Zihinsel model

Dışarıdan içeriye doğru üç seviye:
İç içe geçen iki seviye bunu ifade edici kılar:
  • Bir grup içindeki kısıtlamalar VE’lenmiştir. Hepsi geçerli olmalıdır.
  • Bir kural içindeki gruplar VEYA’lanmıştır. Bir başlatma herhangi bir grup karşılandığı anda izin verilir.
Yani bir grup izin verilen bir şekil, ve kural sunduğunuz şekillerin menüsüdür. Bir kural en fazla 10 grup tutabilir ve bir grup en fazla 25 kısıtlama tutabilir. İki sınır durumu hatırlamaya değer: Bir kural yalnızca PlatformConfig.restrict_curve_param 1 iken yürürlüğe girer. 0 olduğunda program kuralları hiç okumaz; bu aynı zamanda bir kuralı kullanıma sunmak ve geri almak için kullandığınız anahtardır.

Kısıtlamalar

Bir kısıtlama bir (alan, operatör, değer) üçlüsüdür. Başka hiçbir şey — ifade yok, iç içe geçme yok.
Bir aralık, bir grup içinde aynı alan üzerinde iki kısıtlamadır: taban için bir Gte ve tavan için bir Lte. Aynı (alan, operatör) çifti bir grup içinde iki kez görünemez; bu, çelişkili iki minimum yazmanızı engeller.

Alanlar

Alan kimlikleri kalıcıdır. Yeni alanlar yalnızca eklenir, bu nedenle bir kimlik bir kural hesabı tuttuğu andan itibaren anlamı asla değişmez.
Türetilmiş alanlar kuralları taşınabilir kılan alanlardır. Supply ve TotalFundRaisingB’yi tam sayılara sabitleme bir başlatma şeklini düzeltir; FundRaisingRateB’yi kısıtlama aralarındaki ilişkiyi düzeltir ve yaratıcının bunu koruyan herhangi bir arz seçmesine izin verir.
Oran alanları yalnızca bir GlobalConfig içinde karşılaştırılabilir, çünkü paydaları bu yapılandırmanın alıntı mintine ve onun ondalıklarına bağlıdır. Bu pratikte bir sınırlama değildir: bir kural yapı gereği bir yapılandırmaya kapsamlıdır.

Dokuz oyun kitabı

Aşağıdaki her oyun kitabı bir kuraldır. Kısıtlamalar (alan, operatör, değer) olarak yazılır.

1. Bir standart katman

En basit kural ve emekli eğri-parametre beyaz listesinin sunduğu tam davranış: bir şekil, sabitlenmiş. Üçünden herhangi birinde sapan herhangi bir başlatma CurveParamNotMatchPlatformRule ile reddedilir.

2. Bir sayı yerine bir bant

Bantların var olmasının nedeni: bir yaratıcı sizin rahat olduğunuz bir fon toplama hedefi seçer, siz her değeri numaralandırmadan. Bir grup, dört kısıtlama ve yaratıcının 50–200 SOL koridoru vardır. Eski beyaz liste altında bu izin verilen her değer için bir giriş gerektiriyordu ve on girişin sınırı bunu imkânsız kılıyordu.

3. Katmanlar yan yana

Gruplar VEYA’lanır, bu nedenle her katman bir gruptur. Sıra semantik için değil, hesaplama için önemlidir: değerlendirme eşleşen ilk grupta durur, bu nedenle en çok kullanılan katmanınızı ilk koyun.

4. Bir mezuniyet-değerleme bandı

FundRaisingRateB milyonluk cinsinden TotalFundRaisingB / Supply’dir. Bunu kısıtlama, yaratıcının seçtiği arzdan bağımsız olarak bir tokenin ne kadar zenginlikle mezun olabileceğini kapaklar. 1e12 arzı ve 9 ondalak alıntı mintine sahip, 85e9 / 1e12 × 1e6 = 85_000 bu bant içinde oturur. Arzı iki katına çıkaran bir yaratıcı içinde kalmak için hedefi kabaca iki katına çıkarmalıdır — bu noktadır. İki kısıtlama, aksi takdirde (arz, hedef) çiftlerinin bir tablosu olacak şeyi değiştirir.

5. Bir göç tabanı

MigrateRateA mezuniyette CPMM havuzuna gerçekten inen arzın payıdır: Supply − TotalSellA − TotalLockedAmount, arz üzerinden. Mezun havuzun derinliğidir ve kurallardan önce platform tarafında eşdeğeri olmayan tek protokol düğümüdür. En az arzın %15’i havuza ulaşır. Bir yaratıcı eğride %95 satamaz ve arkasında sığ bir kitap bırakamaz.
Parametreler toplanmazsa — eğri satışından sonra kalan şeyden daha büyük kilitli bir miktar — türetilmiş değer hesaplanamaz ve kısıtlama kapalı başarısız olur, bu nedenle başlatma sessizce izin verilmek yerine reddedilir.

6. Gerçekten uyguladığınız hak kazanma

GlobalConfig.max_lock_rate hak kazmayı yukarıdan kapaklar. Bir kural altına bir taban koyabilir ve gerçek bir uçurum gerektirebilir. Arzın %5 ile %20’si arasında hak kazanmış, en az 30 günlük bir uçurumla. “Anında kilit açma başlatması yok” konusu olan bir platform için yararlıdır.

7. Token-tipi kapıları

BaseTokenProgram ve TransferFeeEnabled bağımsızdır, bu önemlidir: TransferFeeConfig olmayan bir Token-2022 mint, SPL Token mint gibi TransferFeeEnabled = 0 bildirir.

8. Koşullu bir transfer-ücreti kapağı

“Eğer” operatörü yoktur ve hiçbiri gerekli değildir — iki grup koşulu ifade eder. Sıfır oranı TransferFeeConfig grup 0’dan kaymaz: uzantı mevcut, bu nedenle TransferFeeEnabled 1 ve yalnızca grup 1 bunu kabul edebilir.

9. Zaman sınırlı bir promo, önceden planlanmış

UnixTimestamp başlatmanın blok zamanıdır, bu nedenle bir grup kendi geçerlilik penceresini taşıyabilir. Her iki grubu bugün yazarsınız ve geçiş kendi başına gerçekleşir. Sınırda işlem gerekmez. Maliyet bir yerine iki grup yuvası.

Eğri-tipi kısıtlamaları

Dört alan TotalSellA’yı okur: TotalSellA, SellRateA, MigrateAmountA ve MigrateRateA. Sabit-ürün yapılandırmasında yaratıcı bu sayıyı sağlar. Sabit-fiyat veya doğrusal-fiyat yapılandırmasında eğri bunun yerine türetir ve program karşılaştırdığı değer 0’dır; bu her başlatmayı reddeder. Kendi yapılandırmanızı sessizce engelleyen bir kural yazmanıza izin vermek yerine, program yazma zamanında sabit olmayan bir yapılandırmada bu dört alanı reddeder, CurveRuleFieldNotSupportedByCurve ile. Bugün yalnızca sabit-ürün yapılandırmaları vardır, bu nedenle pratikte bu hatayı karşılaşmayacaksınız.

Göndermeden önce kontrol edin

Zincir üstü kontrolün her iki yönü de zincir dışında mevcuttur, bu nedenle ne bir yaratıcı ne de bir platform işlemleri geri almayı izleyerek bir kuralı öğrenmek zorunda değildir.
Sürüm başlığı.
  • SDK: @raydium-io/raydium-sdk-v2@0.2.42-alpha bu sitenin diğer her kod demosunun sabitlendiği sürümdür. Aşağıdaki iki yardımcı eğri-kural desteğini gönderen SDK sürümüyle gelir; o zamana kadar, bunları programın platform_curve_rule.rs’den taşıyın veya programı çağırın ve hata kodunu okuyun.
  • Küme: önce Solana devnet’te test edin — bkz. Devnet’te ilk test edin.
  • Program Kimliği: bkz. reference/program-addresses
Her iki yardımcı da saf işlevlerdir. Hiçbir RPC’ye dokunmazlar, bu nedenle bir formda her tuş vuruşunda çalıştırmak güvenlidir.

Bir başlatmadan önce: bu parametreler geçer mi?

checkLaunchAgainstCurveRule programın başlatma zamanı kontrolünü tam olarak yansıtır, kapalı başarısız davranışı da dahil. Bunu başlatma formunuzda çalıştırın ve yaratıcının geri alınan bir işlem için ödeme yapmasına izin vermek yerine gönder düğmesini bir nedenle devre dışı bırakabilirsiniz.
Yardımcının yaklaşık olarak değil, gerçekten yeniden üreten üç şey:
  • Eksik bir kural hesabı ve hiçbir grubu olmayan bir kural her ikisi de geçer. Hiçbir kısıtlaması olmayan bir grup da öyle. Mevcut olmayan bir hesap için rule: undefined geçin; bunu bir reddetme olarak işlemeyin.
  • Hesaplanamayan değerler kapalı başarısız olur. Sıfır arzın oranları yoktur ve eğri satışından sonra kalan şeyden daha büyük kilitli bir miktar göç miktarı yoktur. actual undefined geri gelir ve kısıtlama unsatisfied sayılır, tam olarak zincir üstü gibi.
  • Tüm başarısız kısıtlamalar raporlanır, yalnızca ilki değil. Program yalnızca bir karar gerektiği için kısa devre yapar; yardımcı her şeyi toplar, böylece formunuz bir kerede her sorunu listeleyebilir.
Bilmediği tek şey işleminizin gerçekten ne zaman ineceği blok zamanıdır. Bir kural UnixTimestamp’i bir sınırın yakınında kullanırsa, bir geçişi geçici olarak değerlendirin.

Bir kural yazmadan önce: bu grup yazılabilir mi?

checkCurveRuleGroupWritable UpdatePlatformCurveRule’nin yazma zamanı doğrulamasını yansıtır — kısıtlama kimlikleri, yinelenen (alan, operatör) kuralı, her iki sayı sınırı ve eğri-tipi kısıtlaması. Bunu imzalamadan önce platform yönetici aracınızda çalıştırın.
Bu kontrolü geçmek, işlemin hatalı biçimlendirilmesi nedeniyle reddedilmeyeceği anlamına gelir. Kuralın ne demek istediğiniz olup olmadığı hakkında hiçbir şey söylemez — bir grup mükemmel şekilde geçerli olabilir ve yine de UI’nizin üretebileceği her başlatmayı reddedebilir. Yukarıdaki başlatma tarafı kontrolü bunun için: bir grup yazdıktan sonra, ürününüzün sunabileceği her şekli checkLaunchAgainstCurveRule aracılığıyla çalıştırın ve her birinin hala bir grup bulduğunu doğrulayın.

Devnet’te ilk test edin

Mainnet’te restrict_curve_param’ı etkinleştirmek yaratıcılarınızın yapabileceklerini hemen, her başlatma için değiştirir. Mainnet’e dokunmadan önce tüm diziyi devnet’te prova yapın:
  1. Devnet’te bir platform yapılandırması ve kuralı oluşturun ve göndermek istediğiniz aynı grupları yazın.
  2. UI’nizin üretebileceği her başlatma şeklini checkLaunchAgainstCurveRule aracılığıyla çalıştırın ve kararların beklediğiniz olanlar olduğunu doğrulayın — hem geçmesi gereken şekiller hem de reddedilmesi gereken şekiller.
  3. restrict_curve_param’ı etkinleştirin, sonra geçmesi gereken bir token ve reddedilmesi gereken bir token gerçekten başlatın. İkincisi CurveParamNotMatchPlatformRule (6025) ile başarısız olmalıdır, NotEnoughRemainingAccounts (6018) ile değil — ikincisi oluşturucunuzun kural PDA’sını eklemediği ve kontrolün gerçekten uygulanmadığı anlamına gelir.
  4. Yalnızca o zaman mainnet’te aynı sırayla tekrarlayın.
Adım 3, ısrar etmeye değer. Zincir dışı yardımcı ve zincir üstü program aynı kuralların iki uygulamasıdır ve devnet başlatması kuralınız için bunların anlaştığını kanıtlar — oluşturucunuzun hesabı hiç geçip geçmediği de dahil.

Bir kuralı işletme

Devredilen yönetici

Kuralları düzenlemek rutin iştir; bir platform yönetici anahtarı genellikle bir multisig’dir. PlatformConfig.curve_rule_manager tam olarak bunun için vardır: bunu bir kez UpdatePlatformConfig::CurveRuleManager aracılığıyla ayarlayın ve bu sıcak cüzdan kendi başına kural hesaplarını oluşturabilir, güncelleyebilir, kaldırabilir ve kapatabilir. Platform yöneticisi paralel olarak aynı gücü tutar, bu nedenle kayıp bir yönetici anahtarı kurtarılabilir — başka bir yönetici çağrısıyla döndürün. Tehlikeye atılan yönetici anahtarının kapsamı: parametre kurallarınızı gevşetebilir veya silebilir ve bir kural hesabının kirasını geri talep edebilir. Ücret cüzdanlarına, hak kazmaya, CPMM yapılandırmasına dokunmaz, restrict_curve_param’ı çeviremez ve GlobalConfig limitini kıramaz. Bunu bir hazine anahtarı değil, bir yapılandırma anahtarı olarak değerlendirin.

Kira içeriği takip eder

Bir kural hesabı hiçbir grup tutmadan oluşturulur ve her değişiklikte yeniden boyutlandırılır, bu nedenle gerçekten yazdığınız kurallar için ödeme yaparsınız. Bir grubu kaldırmak farkı imzalayan kişiye geri verir.

Kullanıma sunma sırası

  1. Tüm diziyi devnet’te prova yapın — bkz. Devnet’te ilk test edin.
  2. Kural hesabını oluşturun ve gruplarını yazın. Henüz hiçbir şey değişmez — restrict_curve_param hala 0 iken program bunları okumaz.
  3. Kuralı zincir dışında checkLaunchAgainstCurveRule ile kontrol edin: UI’nizin üretebileceği her başlatma şekli için, bir grubun bunu kabul ettiğini doğrulayın.
  4. restrict_curve_param’ı 1 olarak ayarlayın. O andan itibaren yaratıcılarınızın başlatmaları kontrol edilir.
  5. Geri almak için bunu 0 olarak ayarlayın. Kural hesabı bozulmadan bırakılır.
Başlatma oluşturucunuz restrict_curve_param 1 iken kural PDA’sını remaining_accounts’a eklemelidir. Program hesap mevcut olmadığında bile hesabın mevcut olmasını gerektirir, böylece bir yaratıcı bunu atlayarak kontrolü atlayamaz — eksik bir hesap NotEnoughRemainingAccounts, geçiş değildir. Türetme [b"platform_curve_rule", platform_config, global_config]’dir.

Başlatma zamanında maliyet

Kontrol etkinken her başlatmada çalışır, bu nedenle hesaplama maliyeti başına başlatma vergisidir. Uçtan uca ölçülen — PDA türetme, remaining_accounts taraması, seri durumdan çıkarma ve değerlendirme: “Ucuz” Supply gibi doğrudan bir alan okumasıdır; “türetilmiş” MigrateRateA gibi hesaplanan birdir; bu, kısıtlama başına yaklaşık 223 CU’ya karşı yaklaşık 48 CU’ya mal olur. Türetilmiş kısıtlamaların tamamen yüklü bir kuralı bile varsayılan 200 000 CU başına talimat bütçesinin üçte birinin altında kalır ve gerçekçi bir üç grup kuralı 6 000’in altındadır. Gruplar eşleşen birine kadar değerlendirilir, bu nedenle yaygın katmanınızı ilk sırada koymak ücretsiz tasarrufdur.

Sonra nereye gidilir

Kaynaklar:
  • raydium-launch/programs/launchpad/src/states/platform_curve_rule.rsPlatformCurveRule, CurveRuleGroup, ParamConstraint, alan ve operatör kimlik alanları ve CurveRuleContext::value_of.
  • raydium-launch/programs/launchpad/src/utils/platform_curve_rule.rs — başlatma zamanı kontrolü.
  • raydium-launch/programs/launchpad/src/instructions/platform/create, update, remove ve close_platform_curve_rule.