NEAR ekosisteminin yeni bir bölümü: Sputnik DAO öneri mekanizmasının derinlemesine analizi

Rust akıllı sözleşmeler yetiştirme günlüğü (10-3): Sputnik DAO temel kavramı - öneri ( Proposal ) analizi

Sputnik-DAO, NEAR Protocol tarafından sunulan altyapı olarak, NEAR ekosistemini "merkeziyetsiz" bir yöne güçlü bir şekilde yönlendiriyor. Şu anda bu platform, birçok NEAR projesinin "merkeziyetsiz" otonom topluluklar kurmasına yardımcı oldu ve aynı zamanda tam, esnek ve etkili bir topluluk karar alma yönetim çözümü sunuyor.

Sputnikdaov2, Sputnik-DAO topluluğu yönetişim oylaması için kullanılan akıllı sözleşmelerdir. Bu makalede, bu sözleşmenin temel kavramları tanıtılacaktır: teklif (Proposal), sonraki makalelerde "teklif" etrafında ilgili DAO topluluk yönetişim modelleri (Policy) hakkında bilgi verilecektir.

1. Teklif Başlatma (Teklif Ekle )

Sputnik-DAO topluluğundaki her üye, projeye dair yönetim veya idare hakkında görüş bildirebilir veya öneri sunabilir. Ardından DAO'da hisse sahibi olan her topluluk üyesi bu öneriyi değerlendirebilir ve oy verebilir. Başka bir deyişle, Sputnik-DAO'daki her üye, başkalarının önerilerine oy vererek veya kendisi yeni bir yönetim önerisi başlatarak projenin gelecekteki yönünü etkileyebilir.

Sözleşme düzeyinde, DAO topluluğu üyeleri, yeni bir öneri başlatmak için sputnikdaov2 sözleşmesinin sağladığı add_proposal() yöntemini çağırabilir.

pas u64

Teklif sahibi, bu teklifin ayrıntılarını sağlamalıdır (ProposalInput):

  • Teklifin metin açıklaması (Description). Bu bilgi, Sputnik-DAO ana sayfasının ön yüzünde halka açık olarak gösterilecektir, topluluk üyelerinin teklifin amacını ve anlamını anlamalarına yardımcı olacaktır.

  • Teklif türü ( türü ). Teklif sahibi, proje yönetimine ilişkin öneri türüne göre seçim yapmalıdır (, örneğin, sözleşme anahtar ayrıcalık fonksiyon çağrısı için FunctionCall türünü seçmelidir, sözleşme proje fondu transferi için Transfer türünü seçmelidir, sözleşme yönetişim yetki kontrol seviyesi ayarları/değişiklikleri için ChangePolicyAddOrUpdateRole türünü seçmelidir vb. ).

Bu ProposalInput bilgileri add_proposal() yöntemine parametre olarak geçirilecektir, bu yöntem ilgili doğrulama ve işlemleri daha da gerçekleştirecek ve tam başlangıç bilgileriyle birlikte (Proposal) oluşturacaktır. Sonuçta bu öneri, benzersiz proposal_id ile bağlanacak ve <key, value=""> biçiminde Sputnik-DAO sözleşmesinin küresel olarak bakımını yaptığı Contract.proposals haritasına ( öneri havuzuna ) eklenecektir.

Sputnik-DAO tarafından tanımlanan teklifin aşağıdaki tam özellik bilgileri vardır:

pas pub struct Öneri { pub id: u64, pub proposer: AccountId, pub açıklama: String, pub kind: Teklif Türü, pub durum: ÖneriDurumu, pub oylama_dönemi_bitişi: BlockHeight, pub oy_sayilari: HashMap<votepolicy, hashmap<accountid,="" bakiye="">>, pub oylar: HashMap<accountid, oy="">, pub submission_time: Zaman Damgası, }

Bu öneride, description ve kind özelliklerinin içeriği, öneren tarafından öneri oluşturulurken sağlanan ProposalInput bilgilerinden çıkarılacaktır. Özellikle, bu akıllı sözleşme, Rust dilindeki From trait'ini kullanarak ProposalInput'tan Proposal'a tür dönüşümünü gerçekleştirmiştir.

Bu dönüşüm süreci daha fazla teklif durumu bilgisi bağladı:

  • Yeni eklenen teklif içindeki teklif sahibi (proposer) özelliği, add_proposal() yönteminin çağrısı yapanı olan env::predecessor_account_id() olarak otomatik olarak atanacaktır, bu özellik gerçektir ve kullanıcı kontrolünde değildir;

  • Yeni eklenen teklif durumu (status) varsayılan olarak ProposalStatus::InProgress olarak başlatılmıştır, yani henüz oylama aşamasındadır;

  • Yeni eklenen teklifin başlatılma zamanı (submission_time) bu bloğun zaman damgası env::block_timestamp() olarak atanmıştır;

  • Yeni öneri sunulduğunda kimse oy vermediği için oy durumu (vote_counts, votes) her ikisi de boş HashMap::default() olarak başlatılmıştır.

Dikkate alınması gereken husus: Sputnik-DAO'da öneri teminatı (proposal_bond) kavramı bulunmaktadır, bu teminat, belirli Sputnik-DAO topluluk yönetim modeli (Policy) doğrultusunda yönetilecektir.

İlgili kodları incelediğimizde, sözleşmenin öneri sahibinin add_proposal() yöntemini çağırdığında belirli bir miktar NEAR token'ını yeni önerinin teminatı olarak yatırmasını gerektirdiği anlaşılmaktadır. Bu depozito, öneri normal olarak sona erdiğinde ( topluluk oylamasıyla ProposalStatus::Approved | topluluk oylamasıyla ProposalStatus::Rejected) ile sözleşmenin iç fonksiyonu internal_return_bonds() çağrılarak öneri sahibine iade edilecektir.

Ancak, BlockSec daha önce bu sözleşme kodunu yorumlarken şunu keşfetti:

Sputnik-DAO, öneri teminatlarını işlerken, her bir kullanıcı için ayrı ayrı geçmiş öneri teminat miktarlarını tutmamaktadır. Kullanıcı işlem başlattığında, yeni bir öneri eklemek için add_proposal() sözleşme yöntemini çağırdığında, bu işlemle birlikte bu DAO'nun yönetim politikası olan (Policy) tarafından tanımlanan policy.bounty_bond NEAR token'ından fazla bir teminat eklenebilir. Bu, fazladan bir teminata yol açacak ve sonraki internal_return_bonds işlevi çalıştırıldığında öneri sahibine iade edilmeyecektir.

BlockSec Ekibi, proje ile zamanında iletişime geçtikten sonra, sonuçta bu Issue(160 onarıldı.

Daha fazla Sputnik-DAO içinde gerçekleştirilen önerilere ilişkin doğrulama ve işleme stratejileri, ilerleyen günlerde yayınlanacak "Rust akıllı sözleşmeler yetiştirme günlüğü )10-4#158被确认并及时在PR# Sputnik DAO::topluluk yönetim modeli analizi" adlı eserde detaylı olarak açıklanacaktır.

2. Teklif Durumu(Proposal Status)

Sputnik-DAO'daki herhangi bir standart öneri aşağıdaki çeşitli durumları deneyimleyebilir ( yeni öneri durumu şu şekilde başlatılır:InProgress )

pas pub enum TeklifDurumu { Devam Ediyor, Onaylandı, Reddedildi, Kaldırıldı, Süresi dolmuş, Taşındı, Başarısız, }

Öneri havuzundaki öneri durumu değişiklikleri, sözleşmenin başka bir yöntemi olan act_proposal() tarafından yönlendirilir.

Sputnik-DAO üyeleri, belirli bir öneri ( için id ile belirtilen ) üzerinde aşağıdaki işlemleri gerçekleştirmek için act_proposal() yöntemini çağırabilirler:

pas pub enum Eylem { TeklifEkle, RemoveProposal, OylamaOnayla, OyReddi, Oy Sil Tamamla, MoveToHub, }

Tipik olarak, InProgress durumundaki teklif için, DAO topluluğu üyeleri act_proposal()'i çağırarak belirli oylama işlemlerini gerçekleştirebilir:

  • Action::VoteApprove:表赞成;
  • Action::VoteReject: karşı oy kullan;
  • Action::VoteRemove: Bu önerinin pratik bir anlamı olmadığına inanılıyor, kaldırılması gerekiyor;

Yukarıda belirtilen uygulamaya göre, update_votes() fonksiyonu iç çağrıldıktan sonra, program policy.proposal_status()'i oy sayım işlemleri için aktif olarak çağıracaktır. Oy verme eşiğini karşılayan teklifler için, tekliflerin durumu ilgili değişikliklere tabi olacaktır.

Değişiklikten sonra:

  • Eğer teklif durumu Onaylandı ise, bu teklif internal_execute_proposal() çağrısı ile yürütülecektir;

  • Eğer teklif durumu Reddedildi veya Kaldırıldı ise, bu teklif internal_reject_proposal() çağrısını yaparak sonraki kapanış işlemlerini gerçekleştirecektir.

Bahsedilmeye değer ki, Rejected ve Removed durumları arasındaki fark şudur: Nihayetinde Removed durumu olarak belirlenen teklif, teklif havuzundan doğrudan kaldırılacaktır, ( bir ceza olarak ) teklifi veren kişiye daha önce teminat olarak yatırılan depozito geri verilmeyecektir. Oysa Rejected durumu için teklif, teklif havuzunda tutulmaya devam edecek ve ilgili depozito geri verilecektir.

3. Teklifin Uygulanması(Teklifin Uygulanması)

Eğer bir öneri oylama sona erdikten sonra durumu Onaylandı olarak eşleşirse, bu durumda sözleşme yöntemi act_proposal(), içten internal_execute_proposal() fonksiyonunu çağırarak önerinin içerdiği karar içeriğini uygulamaya devam edecektir.

Sputnik-DAO tarafından desteklenen öneri türleri aşağıda listelenmiştir ( Çoğu öneri türü DAO yönetim modeli yapılandırma güncellemelerini içermektedir ):

  • ProposalKind::DeğişiklikYapmaAyarı
  • ProposalKind::ChangePolicy
  • ProposalKind::Role'aÜyeEkle
  • ProposalKind::Rolü Üyeden Kaldır
  • TeklifTürü::FonÇağrısı
  • ProposalKind::KendiniGüncelleme
  • ProposalKind::UpgradeRemote
  • Teklif Türü::Transfer
  • ProposalKind::SetStakingContract
  • Teklif Türü::Ödül Ekleme
  • ProposalKind::BountyDone
  • ProposalKind::Vote
  • ProposalKind::FactoryInfoUpdate
  • ProposalKind::PolitikaDeğişikliğiRolEklemeVeyaGüncelleme
  • ProposalKind::ChangePolicyRemoveRole
  • ProposalKind::PolitikaDeğiştirmeVarsayılanOyPolitikasınıGüncelle
  • ProposalKind::Politika Güncelleme Parametrelerini Değiştir

Yukarıdaki her bir teklif türü, function internal_execute_proposal() içinde ilgili işleme dalını gerçekleştirmiştir. Bu bölüm, iki tipik öneri türü işleme sürecini derinlemesine tanıtacaktır:

  • ProposalKind::FunctionCall
  • ProposalKind::Transfer

( 3.1 akıllı sözleşmeler fonksiyon yürütme önerisi ) ProposalKind::FunctionCall ###

Fonksiyon internal_execute_proposal(), ProposalKind'ı FunctionCall olan öneriler için aşağıdaki işleme girişini gerçekleştirmiştir:

pas TeklifTürü::FonÇağrısı { alıcı_id, eylemler } => { let mut promise = Promise::new(receiver_id.clone)((; eylem için eylemler { promise = promise.function_call) action.method_name, action.args, eylem.yatırmak, action.gas, ) } promise.into() }

FunctionCall türündeki bir öneri, önerici add_proposal() yöntemini çağırdığında, ProposalInput parametresi aracılığıyla bu önerinin gerçekleştirmesi gereken fonksiyon işlemleri (actions) olarak iletilmiştir.

NEAR akıllı sözleşmeleri, bir Promise içinde birden fazla ardışık function_call bağlamaya olanak tanır. Bu nedenle, başlangıçta öneren tarafından belirlenen actions içinde aşağıdaki gibi birden fazla ActionCall nesnesi bulunabilir:

pas pub struct ActionCall { pub method_name: String, pub args: Vec, pub deposit: Bakiye, pub gaz: Gaz, }

Her ActionCall, ilgili akıllı sözleşme yöntem adını ve yöntem parametrelerini belirtebilir.

Yukarıda belirtilenlere göre Sputnik-DAO, akıllı sözleşmelerin işlevselliğini artırmak için Promise Batch Actions biçiminde sözleşme fonksiyonu yürütme türü önerisinin uygulanmasını tamamladı.

( 3.2 akıllı sözleşmeler fon transferi önerisi yürütme)ProposalKind::Transfer###

Uzun bir süre çalıştıktan sonra, dağıtımı yapılan NEAR akıllı sözleşme projesinin sözleşme hesabı, yerel NEAR token'ı veya NEP-141 standardına uygun diğer token'lar dahil olmak üzere, oldukça fazla Fungible Token ( biriktirmiş olabilir.

Bu aşamada Sputnik-DAO topluluğu üyeleri, bu tokenleri belirtilen receiver_id hesabına toplamak için bir sözleşme fon transferi önerisi sunabilirler.

Aynı internal_execute_proposal)(, ProposalKind'ı Transfer olan öneriler için de ilgili işleme giriş noktasını sağlamıştır:

pas TeklifTürü::Transfer { token_id, alıcı_id, miktar } => { self.internal_payout)token_id, receiver_id, amount( .into)( }

Bu işlem dalının alt yapısı, farklı türde Fungible Token'lar ve farklı türde receiver_id) EOA veya akıllı sözleşme hesapları( için transfer işlemlerini gerçekleştirmek üzere internal_payout)( fonksiyonunu çağıracaktır.

![])https://img-cdn.gateio.im/webp-social/moments-ef0b959c42e1f5fc6263cd4a86fd078e.webp(

4. Özet ve Tahmin

Bu makalede Sputnik DAO akıllı sözleşmelerinin temel kavramı olan öneri )Proposal( tanıtılmıştır. Ayrıca Sputnik DAO'da yeni öneriler oluşturma ve oylama ile ilgili temel durum )Status( değişim kuralları kısaca açıklanmıştır.

Sonraki Rust akıllı sözleşmeler gelişim günlüğü, önerilere dayanarak Sputnik-DAO'daki yönetim modeli )Policy('ın uygulanması ve yapılandırılması hakkında daha ayrıntılı bir açıklama sunacak, lütfen bekleyin!

![])https://img-cdn.gateio.im/webp-social/moments-eb73d5e15f6161f0a4b442cd4b99a91e.webp(</accountid,></votepolicy,></key,>

View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Reward
  • 6
  • Repost
  • Share
Comment
0/400
GraphGuruvip
· 08-12 20:42
Boğa ah yine öneri mekanizmasını yapıyor.
View OriginalReply0
HashBrowniesvip
· 08-12 19:04
Bu sözleşme gerçekten zor...
View OriginalReply0
AirdropHunter007vip
· 08-12 19:04
Bu konuyu anladım.
View OriginalReply0
TokenTaxonomistvip
· 08-12 19:01
hmm... istatistiksel olarak konuşursak, sputnik'in öneri mekanizması, optimal dao çerçevelerine göre %47.3 daha düşük entropi gösteriyor. Tüm taksonomik ağacı elektronik tablomda haritaladım.
View OriginalReply0
BTCBeliefStationvip
· 08-12 18:59
dao oyuncuları gerçekten dayanamadı
View OriginalReply0
BrokenYieldvip
· 08-12 18:55
başka bir dao sistemik riskleri çözmeyecek... bu filmi daha önce gördüm smh
View OriginalReply0
  • Pin
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)