Rust العقود الذكية养成日记(10-2):解析 كود عقد مصنع SputnikDAO
ستقدم هذه المقالة تفاصيل حول تصميم وتنفيذ نموذج المصنع لمنصة Sputnik-DAO (sputnikdao-factory).
1. عقد مصنع Sputnik-DAO
اعتمد Sputnik-DAO نمط تصميم المصنع الإنشائي لتنفيذ إنشاء وإدارة موحدة لمنظمة (DAO) المستقلة اللامركزية على هذه المنصة.
!
2. مقدمة عن وظيفة وحدة DAPP
يمكن رؤية أن العديد من DAO قد أنشأت كائنات تجريبية على منصة DAPP الخاصة بـ Sputnik DAO. اعتبارًا من مارس 2022، كان أكثر DAO نشاطًا هو news.sputnik-dao.near، حيث تم تقديم 3051 اقتراحًا للتصويت العام أو تم الانتهاء منها.
جميع عقود الأمثلة DAO التي تم إنشاؤها على منصة Sputnik DAO تم نشرها تحت الحسابات الفرعية لحساب sputnik-dao.near، مثل:
pcp.sputnik-dao.near
test-dao-bro.sputnik-dao.near
blaqkstereo.sputnik-dao.near
Octopode-dao.sputnik-dao.near
يمكن للمنظمات استدعاء طريقة create() لعقد sputnikdao-factory في الشبكة الرئيسية NEAR لإنشاء أمثلة جديدة من DAO.
!
3. تفسير كود عقد sputnikdao-factory
3.1 إنشاء DAO
حالة عقد sputnikdao-factory تتكون أساسًا من جزئين رئيسيين:
صدأ
حانة FN create_contract(
والذات،
code_hash: Base58CryptoHash ،
account_id: AccountId ،
new_method: &str ،
args: &[u8] ،
callback_method: & str ،
callback_args: &[u8] ،
) {
// 1. تحميل كود نموذج العقد
// 2. بناء الوعد
// 3. إنشاء حساب النشر
// 4. تحويل NEAR
// 5. نشر العقد
// 6. استدعاء دالة التهيئة new()
// 7. رد الاتصال على_create()
}
منطق معالجة دالة الاسترجاع on_create:
إذا فشلت خطوات 3-6، سيتم إعادة NEAR
إذا تمت العملية بنجاح ، سجل عنوان حساب مثيل DAO الجديد
!
3.2 تحديث DAO
تقدم العقود الذكية في المصنع واجهة update() لترقية DAO:
صدأ
pub fn update(& self, account_id: AccountId, code_hash: Base58CryptoHash) {
دع caller_id = env::p redecessor_account_id();
أكد!(
caller_id == self.get_owner() || caller_id == account_id ،
'يجب تحديثه من قبل مالك المصنع أو DAO نفسه'
);
أكد!(
self.daos.contains(&account_id) ،
'يجب أن يكون العقد الذي تم إنشاؤه بواسطة المصنع'
);
self.factory_manager
.update_contract(account_id ، code_hash ، "تحديث" ) ؛
}
!
4. تحليل أمان عقد Sputnik-DAO Factory
التحكم في الأذونات: لا تعدل طرق نوع view المتغيرات الحالة
التحكم في الأذونات: يمكن تنفيذ الدوال المميزة فقط من قبل مالك العقد أو حساب DAO
معالجة الأخطاء: تنفيذ آلية معالجة الأخطاء المعقولة لحالات الاستثناء
!
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تحليل عقد مصنع SputnikDAO: إنشاء وإدارة دفعة من DAOs داخل السلسلة على شبكة Near
Rust العقود الذكية养成日记(10-2):解析 كود عقد مصنع SputnikDAO
ستقدم هذه المقالة تفاصيل حول تصميم وتنفيذ نموذج المصنع لمنصة Sputnik-DAO (sputnikdao-factory).
1. عقد مصنع Sputnik-DAO
اعتمد Sputnik-DAO نمط تصميم المصنع الإنشائي لتنفيذ إنشاء وإدارة موحدة لمنظمة (DAO) المستقلة اللامركزية على هذه المنصة.
!
2. مقدمة عن وظيفة وحدة DAPP
يمكن رؤية أن العديد من DAO قد أنشأت كائنات تجريبية على منصة DAPP الخاصة بـ Sputnik DAO. اعتبارًا من مارس 2022، كان أكثر DAO نشاطًا هو news.sputnik-dao.near، حيث تم تقديم 3051 اقتراحًا للتصويت العام أو تم الانتهاء منها.
جميع عقود الأمثلة DAO التي تم إنشاؤها على منصة Sputnik DAO تم نشرها تحت الحسابات الفرعية لحساب sputnik-dao.near، مثل:
يمكن للمنظمات استدعاء طريقة create() لعقد sputnikdao-factory في الشبكة الرئيسية NEAR لإنشاء أمثلة جديدة من DAO.
!
3. تفسير كود عقد sputnikdao-factory
3.1 إنشاء DAO
حالة عقد sputnikdao-factory تتكون أساسًا من جزئين رئيسيين:
صدأ pub struct SputnikDAOFactory { factory_manager: مدير المصنع ، daos: UnorderedSet ، }
تعريف طريقة create() لإنشاء مثيل DAO كالتالي:
صدأ #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!('{}. {}', name, env::current_account_id()) .parse() .unwrap(). دع callback_args = serde_json::to_vec(&json!({ 'account_id': account_id, 'attached_deposit': U128(env::attached_deposit()), 'predecessor_account_id': env::p redecessor_account_id() })) .expect('فشل في التسلسل'); self.factory_manager.create_contract( self.get_default_code_hash()، account_id، 'جديد', &args.0 ، 'on_create', &callback_args، ); }
factory_manager.create_contract التنفيذ:
صدأ حانة FN create_contract( والذات، code_hash: Base58CryptoHash ،
account_id: AccountId ، new_method: &str ، args: &[u8] ، callback_method: & str ، callback_args: &[u8] ، ) { // 1. تحميل كود نموذج العقد // 2. بناء الوعد // 3. إنشاء حساب النشر // 4. تحويل NEAR // 5. نشر العقد // 6. استدعاء دالة التهيئة new() // 7. رد الاتصال على_create() }
منطق معالجة دالة الاسترجاع on_create:
!
3.2 تحديث DAO
تقدم العقود الذكية في المصنع واجهة update() لترقية DAO:
صدأ pub fn update(& self, account_id: AccountId, code_hash: Base58CryptoHash) { دع caller_id = env::p redecessor_account_id(); أكد!( caller_id == self.get_owner() || caller_id == account_id ، 'يجب تحديثه من قبل مالك المصنع أو DAO نفسه' ); أكد!( self.daos.contains(&account_id) ، 'يجب أن يكون العقد الذي تم إنشاؤه بواسطة المصنع' ); self.factory_manager .update_contract(account_id ، code_hash ، "تحديث" ) ؛ }
!
4. تحليل أمان عقد Sputnik-DAO Factory
!