Bölüm 5
AElf Blockchain teşvik sözleşmesi (Kâr Sözleşmesi) arayüzü ve uygulama fikirleri
Teşvik Programına Genel Bakış
Ekonomik modeli başarılı bir şekilde uygulayabilmek için, teşvik ve ödül dağıtımını yönetmek için özel olarak tasarlanmış bir akıllı sözleşmeye ihtiyacımız vardır.
Teşvik (temettü paylaşma) programı esasen bir token dağıtım merkezi olarak işlev görür. Her bir teşvik programının oluşturucuları, programda katılımcıların adreslerini veya programa katılmakla ilgili diğer bilgileri kaydeder ve her alıcı için ağırlığı belirler. Her ödeme süresi boyunca program, teşvikleri (tokenleri) her kayıtlı katılımcının adresinin (ayrı bir hesap adresi veya teşvik programındaki sanal bir adres) belirtilen ağırlıklara göre dağıtacaktır. Dağıtılacak tokenlerin tümü ya ELF'e dönüştürülür ya da doğrudan her alıcının adresine aktarılır. Her bir teşvik raundu tamamlandıktan sonra, raunt sayısı bir artırılır.
Tanımlar:
Bir Teşvik Programı - Teşvik Akıllı Sözleşmesi tarafından oluşturulan bir Blockchain’in token dağıtım merkezi.
Teşvik Programları Oluşturucuları - Teşvikler almak için katılımcının adresini kaydetme yetkisine sahiptir.
Katılımcının Adresi - Aelf ekosisteminde teşvik tokenleri alabilen bir hesap adresi.
Not: Katılımcıların adreslerini program ile kaydetmeleri gerekmektedir, çünkü teşvik serbest bırakıldığında adresler otomatik olarak hesaplarına kaydedilmeyecektir (bkz. “kâr”).
Teşvik Programının Sanal Adresi - Her bir teşvik programı, yalnızca programın oluşturucusunun ilgili kâr kimliği (profit ID) aracılığıyla çalıştırabileceği sanal bir adres belirler. Bu adres yalnızca teşvikleri serbest bırakmak için kullanılır ve buna karşılık gelen halka açık/kamu-özel anahtar çifti yoktur (çatışma adreslerinin olasılığı ihmal edilebilir).
Alt Kâr Maddesi (Sub-Profit Item) - Her teşvik programı, başka bir programda bir alt teşvik programı olarak tasarlanabilir. Alt teşvik programları, diğer teşvik programları tarafından ağırlık tahsis edilebilir; diğer teşvik programları teşviklerini serbest bıraktıklarında, alt teşvik programının sanal adresi için bir token oluştururlar.
Teşvikleri Elde Etmek - Teşvik almaya hak kazanan bir katılımcının beklenen ödüllerini almak için bir işlem göndermeleri gerekmektedir. Bu, çok fazla kayıtlı alıcı adresinden kaçınmak ve teşvik işlem yürütme zaman aşımını serbest bırakmak içindir.
Ağırlık - Ağırlıklar, her katılımcının adresinin alması gereken teşviklerin yüzdesini yönetmek ve daha fazla esneklik sağlamak için kullanılır (yani katılımcı ağırlığı/tüm katılımcıların toplam ağırlığı). Gerektiğinde, belirli teşvik programlarının toplam ağırlığının sınırları belirlenecek ve ağırlığın bir sabit (alt) teşvik programına tahsis edilmesi sağlanacaktır. Bu, programların hem sabit hem de değişken teşvik yapılarından oluşmasını sağlar. Ana teşvik programı teşvikleri serbest bıraktığı sürece sabit alt teşvik programları, teşviklerin belli bir oranını alabilir. Örneğin; DApp geliştiricileri tarafından dağıtılan sözleşmeler, teşvikin belirli bir yüzdesini Hazine'ye katkıda bulunmayı seçebilir.
Teşviklerin Serbest Bırakılması - Bir teşvik programının sanal adresindeki bir bakiyenin ELF'e dönüştürülmesi işlemi, bir Bancor sözleşmesi yoluyla gerçekleşecek ve aktarıcı/gönderen teşvik adresini alacaktır.
Raunt Periyodu - Raunt periyodunun uzunluğu, her bir teşvik maddesi tarafından kontrol edilir. Teşvikin serbest bırakılmasından sonra, raunt periyodu 1 artar.
Hazine - Bu, Aelf ekosistemindeki en büyük teşvik programı olabilir. Blok üretim teşviklerinin, sözleşme işlem ücreti teşviklerinin ve sözleşme kâr teşviklerinin bir alt programı olarak kullanılabilir. Ayrıca; sanal adresinin bakiyesini önceki raundun blok üreticisine, doğrulama düğümlerine ve Aelf düğüm seçimine katılan seçmenlere dağıtmak için genel bir teşvik programı olarak da kullanılabilir.
Arayüz
Bir Teşvik Programının Oluşturulması:
Bir teşvik programı oluştururken bir katılımcının adresinin teşviki alması için zaman aşımını ve State DB'nin depolama yükünü azaltmak için ilgili teşvik bilgisini silen süre sonunu belirleyebilirsiniz.
Ek olarak teşvik program oluşturucusu teşvikleri serbest bıraktığında, mevcut rauntta teşviklerin ne kadarlık kısmının serbest bırakılacağını belirleyebilirler. Eğer oluşturucu her bir rauntta teşvik programının sanal adresi üzerindeki mevcut bakiyenin tamamını serbest bırakmak istiyorsa, is_release_all_balance_everytime_by_default değerini true olarak ayarlayabilir. Teşvikler dağıtıldığında, serbest bırakma miktarı 0 olarak ayarlanır.
Alt teşvik programlarının kaydedilmesi:
RegisterSubProfitItem, alt teşvik programları eklemek ve karşılık gelen ağırlıkları tahsis etmek için kullanılır.
Ağırlık yönetimi:
Aşırı/Fazla işlemlerden kaçınmak için yığın yönetimi ağırlık arayüzleri sağlanmalıdır.
Teşviklerin eklenmesi:
Herhangi bir para birimi, belirli bir teşvik programına belirli miktarda token eklemek için kullanılabilir. Periyod 0 (boş) olduğunda token, teşvik programının sanal adresine (büyük defter adı verilebilir) eklenir. 0'dan büyük bir periyod belirtildiğinde bu token, belirtilen hesap için hesabın sanal adresine eklenir.
Teşviklerin Serbest Bırakılması:
Periyod, teşviklerin serbest bırakılması için belirlenen raunttur; serbest bırakma, daha erken bir rauntta gerçekleşemez. Teşvik programının oluşturucusunun teşvikin iki kere serbest bırakılması ile sonuçlanan iki aynı işlemi göndermesini engellemek için sözleşme denetimi için serbest bırakma periyodunun dâhil edilmesi gerekmektedir. Miktar 0 olarak ayarlandığında ve teşvik programı is_release_all_balance_everytime_by_default tarafından true olarak oluşturulduğunda, teşvik programının sanal adresindeki tüm bakiyeler bu anda serbest bırakılacaktır. Buradaki total_weight (toplam_ağırlık), teşvik programındaki daha sonraki rauntlar için hazırlanır; çünkü daha sonra serbest bırakılan teşviklerin mevcut toplam ağırlığı, bu raunt toplam ağırlığını kullanamaz. Toplam ağırlık sadece önceki bir raundun toplam ağırlığına ayarlanabilir. Örneğin; 6. rauntta program, 5. raunttaki teşvik katılımcı listesinde kayıtlı adresler için teşvikleri serbest bırakacaktır. Bu nedenle 5. raundun toplam ağırlığı, 6. raunt için ReleaseProfitInput parametresine geçirilmelidir.
Teşviklerin alınması:
Bir katılımcının teşvikini alabilmesi için, teşvik maddelerinin benzersiz kimliğini/tanımasını sağlaması ve hak ettiği tüm teşvikleri toplaması gerekir.
KAYNAK: https://medium.com/aelfblockchain/aelf-tech-talks-aelfs-incentive-programs-managed-by-smart-contracts-aaf420240a43