Sputnik-DAO đã áp dụng mô hình thiết kế nhà máy kiểu tạo ra để thực hiện việc thống nhất tạo ra và quản lý tổ chức tự trị phi tập trung (DAO) trên nền tảng này. Bài viết này sẽ giới thiệu chi tiết về thiết kế và thực hiện mô hình nhà máy Sputnik-DAO (sputnikdao-factory).
1. Cấu trúc hợp đồng nhà máy
Trạng thái hợp đồng nhà máy chủ yếu bao gồm hai phần:
factory_manager: Cung cấp các phương pháp tạo/xóa/cập nhật các instance DAO
daos: Ghi lại địa chỉ tài khoản NEAR của tất cả các thực thể DAO đã được tạo
2. Tạo DAO
Tạo một thể hiện DAO bằng cách sử dụng phương pháp create():
gỉ
#[payable]
pub fn create(&mut self, name: AccountId, args: Base64VecU8) {
// Xây dựng địa chỉ tài khoản DAO
let account_id: AccountId = format!("{}.{}", name, env::current_account_id())
.parse()
.unwrap();
// Xây dựng tham số callback
let callback_args = serde_json::to_vec(&json!({
"account_id": account_id,
"attached_deposit": U128(env::attached_deposit()),
"predecessor_account_id": env::predecessor_account_id()
}))
.expect("Không thể tuần tự hóa");
// Gọi factory_manager để tạo hợp đồng
self.factory_manager.create_contract(
self.get_default_code_hash(),
account_id,
"mới",
&args.0,
"on_create",
&callback_args,
);
}
Các bước chính của factory_manager.create_contract:
Tải mã mẫu hợp đồng DAO
Tạo Promise theo dõi kết quả xử lý
Tạo tài khoản triển khai
Chuyển khoản vốn ban đầu
Triển khai mã hợp đồng
Gọi hàm khởi tạo hợp đồng
Gọi lại hàm on_create
Xử lý hàm callback on_create:
Nếu tạo thành công, ghi lại tài khoản DAO mới
Nếu thất bại, hoàn lại vốn ban đầu
3. Cập nhật DAO
Hợp đồng nhà máy cung cấp giao diện cập nhật ( để cập nhật DAO:
gỉ
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
.update_contract)account_id, code_hash, "update"(;
}
update_contract)( sẽ gọi hàm update)( của hợp đồng DAO để thực hiện việc nâng cấp.
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
6
Đăng lại
Chia sẻ
Bình luận
0/400
MysteryBoxBuster
· 08-16 07:57
Hợp đồng nhà máy cơ bản quá nhỉ.
Xem bản gốcTrả lời0
ZkSnarker
· 08-16 07:54
thực ra... mẫu nhà máy của sputnik hơi dựa trên thực tế
Xem bản gốcTrả lời0
HalfBuddhaMoney
· 08-16 07:49
Làm ơn cho một anh em phát triển nói rõ cách sử dụng bẫy này?
Xem bản gốcTrả lời0
ForkTongue
· 08-16 07:47
Mã này nhìn quen quá.
Xem bản gốcTrả lời0
CantAffordPancake
· 08-16 07:41
Khi nào chúng ta có tiền thì sẽ làm một cái, cả ngày nhìn hợp đồng để đó làm gì.
Xem bản gốcTrả lời0
MissedTheBoat
· 08-16 07:39
Không hiểu mã, nhưng thua lỗ thì lại là một tay giỏi.
Hợp đồng nhà máy Sputnik-DAO: Cơ chế cốt lõi để tạo và quản lý các实例 DAO một cách thống nhất.
Phân tích hợp đồng nhà máy Sputnik-DAO
Sputnik-DAO đã áp dụng mô hình thiết kế nhà máy kiểu tạo ra để thực hiện việc thống nhất tạo ra và quản lý tổ chức tự trị phi tập trung (DAO) trên nền tảng này. Bài viết này sẽ giới thiệu chi tiết về thiết kế và thực hiện mô hình nhà máy Sputnik-DAO (sputnikdao-factory).
1. Cấu trúc hợp đồng nhà máy
Trạng thái hợp đồng nhà máy chủ yếu bao gồm hai phần:
gỉ pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet\u003caccountid\u003e, }
2. Tạo DAO
Tạo một thể hiện DAO bằng cách sử dụng phương pháp create():
gỉ #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { // Xây dựng địa chỉ tài khoản DAO let account_id: AccountId = format!("{}.{}", name, env::current_account_id()) .parse() .unwrap();
}
Các bước chính của factory_manager.create_contract:
Xử lý hàm callback on_create:
3. Cập nhật DAO
Hợp đồng nhà máy cung cấp giao diện cập nhật ( để cập nhật DAO:
gỉ 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 .update_contract)account_id, code_hash, "update"(; }
update_contract)( sẽ gọi hàm update)( của hợp đồng DAO để thực hiện việc nâng cấp.
![])https://img-cdn.gateio.im/webp-social/moments-373080ddb66a4cb83e0722b387056be0.webp(
4. Phân tích an ninh
Hợp đồng nhà máy Sputnik-DAO đảm bảo an toàn cho hợp đồng thông qua kiểm soát quyền hạn, xử lý lỗi và các cơ chế khác.
![])https://img-cdn.gateio.im/webp-social/moments-8b462e3ac0fd55e990921d21d66e3d42.webp(
![])https://img-cdn.gateio.im/webp-social/moments-a8d69d504693c5c14767aed9244a090a.webp(
![])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(