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:
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
}
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'(;
}
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.
18 thích
Phần thưởng
18
7
Chia sẻ
Bình luận
0/400
AltcoinOracle
· 13giờ 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_keys
· 13giờ trước
Thiết kế này thật ngầu, wow.
Xem bản gốcTrả lời0
ImpermanentPhilosopher
· 13giờ trước
Phát triển mô-đun không cần suy nghĩ, thích quá
Xem bản gốcTrả lời0
PensionDestroyer
· 13giờ trước
Hợp đồng nhà máy trông có vẻ đáng tin cậy.
Xem bản gốcTrả lời0
ImaginaryWhale
· 13giờ trước
Hợp đồng này có chút gì đó đặc biệt.
Xem bản gốcTrả lời0
InfraVibes
· 13giờ trước
Hàng nội địa cũng có thể làm bẫy này à
Xem bản gốcTrả lời0
BanklessAtHeart
· 13giờ trước
An toàn hợp đồng nhà máy thật sự là yếu tố quan trọng.
Độ 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
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ụ:
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, }
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:
![])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(