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'(;
}
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.
18 thích
Phần thưởng
18
7
Chia sẻ
Bình luận
0/400
AltcoinOracle
· 4giờ 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
· 4giờ trước
Thiết kế này thật ngầu, wow.
Xem bản gốcTrả lời0
ImpermanentPhilosopher
· 4giờ 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
· 4giờ trước
Hợp đồng nhà máy trông có vẻ đáng tin cậy.
Xem bản gốcTrả lời0
ImaginaryWhale
· 4giờ trước
Hợp đồng này có chút gì đó đặc biệt.
Xem bản gốcTrả lời0
InfraVibes
· 4giờ 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
· 5giờ 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(