Độ sâu phân tích hợp đồng nhà máy Sputnik DAO nền tảng: thiết kế thực hiện và cơ chế an toàn

robot
Đang tạo bản tóm tắt

Nhật ký phát triển hợp đồng thông minh Rust (10-2): Phân tích hợp đồng nhà máy Sputnik DAO

Bài viết này sẽ phân tích sâu về việc thiết kế và triển khai mô hình nhà máy của nền tảng Sputnik DAO (sputnikdao-factory).

1. Hợp đồng thông minh Sputnik-DAO

Sputnik-DAO áp dụng mô hình thiết kế nhà máy tạo ra để thực hiện việc tạo và quản lý thống nhất tổ chức tự quản phi tập trung (DAO) trên nền tảng này.

Kho mã nguồn của hợp đồng tương ứng nằm tại:

2. Giới thiệu chức năng mô-đun DAPP

Trang DAPP của nền tảng Sputnik DAO hiển thị các đối tượng DAO đã được tạo ( hợp đồng Sputnikdaov2 ). Tính đến tháng 3 năm 2022, DAO hoạt động tích cực nhất trên nền tảng này là news.sputnik-dao.near, với 3051 đề xuất đang được bỏ phiếu hoặc đã kết thúc.

Tất cả các hợp đồng mẫu DAO được tạo ra trên nền tảng Sputnik DAO đều được triển khai đồng bộ bởi tài khoản sputnik-dao.near ( hợp đồng ) trong các tài khoản con của nó, ví dụ:

  • pcp.sputnik-dao.near
  • test-dao-bro.sputnik-dao.near
  • blaqkstereo.sputnik-dao.near

Tổ chức có thể công khai gọi phương thức create() của hợp đồng sputnikdao-factory trong mạng chính NEAR để tạo ra các实例 DAO mới.

3. Giải thích mã hợp đồng sputnikdao-factory

3.1 Tạo DAO

trạng thái hợp đồng sputnikdao-factory chủ yếu được cấu thành từ hai phần:

gỉ pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet\u003caccountid\u003e, }

  • factory_manager: cung cấp các phương thức để tạo/xóa/cập nhật các thực thể DAO
  • daos: ghi lại địa chỉ tài khoản NEAR đã tạo DAO

create() phương pháp định nghĩa:

rỉ sét #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!('{}.{}', name, env::current_account_id()) .parse() .unwrap(); let callback_args = serde_json::to_vec(\u0026json!({ 'account_id': account_id, 'attached_deposit': U128(env::attached_deposit()), 'predecessor_account_id': env::predecessor_account_id() })) .mong đợi ( 'Không thể tuần tự hóa' ); self.factory_manager.create_contract( self.get_default_code_hash(), account_id, 'mới', &args.0, 'on_create', &callback_args, ); }

cụ thể về việc thực hiện factory_manager.create_contract:

gỉ pub fn create_contract( &self, code_hash: Base58CryptoHash, account_id: AccountId, new_method: &str, args: [u8], callback_method: &str, callback_args: &[u8], ) { // Tải mã hợp đồng // Tạo Promise // Tạo tài khoản // Chuyển khoản // Triển khai hợp đồng thông minh
// Gọi hàm khởi tạo // Thiết lập callback }

on_create hàm callback:

gỉ #[private] pub fn on_create( &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, bool { nếu near_sdk::is_promise_success)( { self.daos.insert)&account_id(; đúng } else { Promise::new)predecessor_account_id(.transfer)attached_deposit.0(; sai } }

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

) Cập nhật 3.2 DAO

update###( phương pháp:

rỉ sét pub fn update)&self, account_id: AccountId, code_hash: Base58CryptoHash( { let caller_id = env::predecessor_account_id)(; assert!) caller_id == self.get_owner(( || caller_id == account_id, 'Phải được cập nhật bởi chủ sở hữu nhà máy hoặc chính DAO' ); assert!) self.daos.contains(&account_id(, 'Phải là hợp đồng được tạo bởi nhà máy' ); self.factory_manager .cập_nhật_hợp_dồng)id_tài_khoản, mã_băm, 'cập nhật'(; }

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

4. Phân tích an toàn hợp đồng Sputnik-DAO Factory

Đảm bảo tính an toàn chủ yếu từ một vài khía cạnh sau:

  • Kiểm soát quyền: phương thức view không sửa đổi biến trạng thái
  • Hàm đặc quyền chỉ có thể được thực hiện bởi owner
  • Cơ chế xử lý lỗi hợp lý

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

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

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

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

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

Xem bản gốc
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
  • Phần thưởng
  • 7
  • Chia sẻ
Bình luận
0/400
AltcoinOraclevip
· 12giờ trước
các degens đang ngủ trên sputnik... mô hình nhà máy của họ thực sự là quản trị web3 2.0
Xem bản gốcTrả lời0
not_your_keysvip
· 12giờ trước
Thiết kế này thật ngầu, wow.
Xem bản gốcTrả lời0
ImpermanentPhilosophervip
· 12giờ trước
Phát triển mô-đun không cần suy nghĩ, thích quá
Xem bản gốcTrả lời0
PensionDestroyervip
· 12giờ trước
Hợp đồng nhà máy trông có vẻ đáng tin cậy.
Xem bản gốcTrả lời0
ImaginaryWhalevip
· 12giờ trước
Hợp đồng này có chút gì đó đặc biệt.
Xem bản gốcTrả lời0
InfraVibesvip
· 12giờ trước
Hàng nội địa cũng có thể làm bẫy này à
Xem bản gốcTrả lời0
BanklessAtHeartvip
· 13giờ trước
An toàn hợp đồng nhà máy thật sự là yếu tố quan trọng.
Xem bản gốcTrả lời0
Giao dịch tiền điện tử mọi lúc mọi nơi
qrCode
Quét để tải xuống ứng dụng Gate
Cộng đồng
Tiếng Việt
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)