Diário de Desenvolvimento de Contratos Inteligentes Rust (10-2): Análise do Contrato da Fábrica Sputnik DAO
Este artigo irá analisar detalhadamente a implementação do modelo de fábrica da plataforma Sputnik DAO (sputnikdao-factory).
1. Contrato de fábrica Sputnik-DAO
Sputnik-DAO adotou o padrão de design de fábrica criativa para implementar a criação e gestão unificada da organização autônoma descentralizada (DAO) na plataforma.
O repositório de código-fonte correspondente ao contrato está localizado em:
2. Introdução às funções do módulo DAPP
A página DAPP da plataforma Sputnik DAO exibe a instância de objeto DAO criada ( contrato Sputnikdaov2 ). Até março de 2022, o DAO mais ativo na plataforma era news.sputnik-dao.near, com 3051 propostas em votação ou já concluídas.
Todos os contratos de instância de DAO criados na plataforma Sputnik DAO são implantados uniformemente sob suas subcontas pela conta sputnik-dao.near ( contrato sputnikdao-factory ), por exemplo:
pcp.sputnik-dao.near
test-dao-bro.sputnik-dao.near
blaqkstereo.sputnik-dao.near
As organizações podem chamar publicamente o método create() do contrato sputnikdao-factory na mainnet NEAR para criar novas instâncias de DAO.
3. Interpretação do código do contrato sputnikdao-factory
3.1 Criar DAO
O estado do contrato sputnikdao-factory é composto principalmente por duas partes:
ferrugem
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,
'Deve ser atualizado pelo proprietário da fábrica ou pelo próprio DAO'
);
assert!)
self.daos.contains(&account_id(,
'Deve ser um contrato criado pela fábrica'
);
self.factory_manager
.atualizar_contrato)id_conta, hash_codigo, 'atualizar'(;
}
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
18 gostos
Recompensa
18
7
Partilhar
Comentar
0/400
AltcoinOracle
· 10h atrás
degens a dormir no sputnik... o modelo de fábrica deles é literalmente governança web3 2.0
Ver originalResponder0
not_your_keys
· 10h atrás
Este design é bastante hardcore, uau
Ver originalResponder0
ImpermanentPhilosopher
· 10h atrás
Desenvolvimento modular sem pensar, amei
Ver originalResponder0
PensionDestroyer
· 10h atrás
O contrato de fábrica parece confiável.
Ver originalResponder0
ImaginaryWhale
· 10h atrás
Este contrato tem algo de especial.
Ver originalResponder0
InfraVibes
· 10h atrás
Produção nacional também consegue fazer esta armadilha.
Ver originalResponder0
BanklessAtHeart
· 11h atrás
A segurança dos contratos de fábrica é realmente crucial.
Profundidade da análise do contrato de fábrica da plataforma Sputnik DAO: implementação de design e mecanismos de segurança
Diário de Desenvolvimento de Contratos Inteligentes Rust (10-2): Análise do Contrato da Fábrica Sputnik DAO
Este artigo irá analisar detalhadamente a implementação do modelo de fábrica da plataforma Sputnik DAO (sputnikdao-factory).
1. Contrato de fábrica Sputnik-DAO
Sputnik-DAO adotou o padrão de design de fábrica criativa para implementar a criação e gestão unificada da organização autônoma descentralizada (DAO) na plataforma.
O repositório de código-fonte correspondente ao contrato está localizado em:
2. Introdução às funções do módulo DAPP
A página DAPP da plataforma Sputnik DAO exibe a instância de objeto DAO criada ( contrato Sputnikdaov2 ). Até março de 2022, o DAO mais ativo na plataforma era news.sputnik-dao.near, com 3051 propostas em votação ou já concluídas.
Todos os contratos de instância de DAO criados na plataforma Sputnik DAO são implantados uniformemente sob suas subcontas pela conta sputnik-dao.near ( contrato sputnikdao-factory ), por exemplo:
As organizações podem chamar publicamente o método create() do contrato sputnikdao-factory na mainnet NEAR para criar novas instâncias de DAO.
3. Interpretação do código do contrato sputnikdao-factory
3.1 Criar DAO
O estado do contrato sputnikdao-factory é composto principalmente por duas partes:
ferrugem pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet, }
create() definição de método:
ferrugem #[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(&json!({ 'account_id': account_id, 'attached_deposit': U128(env::attached_deposit()), 'predecessor_account_id': env::predecessor_account_id() })) .expect('Falha ao serializar'); self.factory_manager.create_contract( self.get_default_code_hash(), account_id, 'novo', &args.0, 'on_create', &callback_args, ); }
implementação específica de factory_manager.create_contract:
ferrugem pub fn create_contract( &self, code_hash: Base58CryptoHash, account_id: AccountId, new_method: &str, args: &[u8], callback_method: &str, callback_args: &[u8], ) { // Carregar código do contrato // Criar Promise // Criar conta // Transferência // Implantar contrato // Chamada da função de inicialização // Definir callback }
função de callback on_create:
ferrugem #[private] pub fn on_create( &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, bool { se near_sdk::is_promise_success)( { self.daos.insert)&account_id(; verdadeiro } else { Promise::new)predecessor_account_id(.transfer)attached_deposit.0(; falso } }
![])https://img-cdn.gateio.im/webp-social/moments-8b462e3ac0fd55e990921d21d66e3d42.webp(
) 3.2 Atualização DAO
update###( método:
ferrugem 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, 'Deve ser atualizado pelo proprietário da fábrica ou pelo próprio DAO' ); assert!) self.daos.contains(&account_id(, 'Deve ser um contrato criado pela fábrica' ); self.factory_manager .atualizar_contrato)id_conta, hash_codigo, 'atualizar'(; }
![])https://img-cdn.gateio.im/webp-social/moments-a8d69d504693c5c14767aed9244a090a.webp(
4. Análise de segurança do contrato da fábrica Sputnik-DAO
Garantir a segurança principalmente a partir dos seguintes aspectos:
![])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(