Sputnik DAO utiliza o padrão de design de fábrica para implementar a criação e gestão unificada de DAOs na plataforma. Este artigo irá detalhar a implementação do padrão de fábrica da plataforma Sputnik DAO.
1. Introdução às funcionalidades DAPP
A plataforma Sputnik DAO já tem vários exemplos de DAO criados. Até março de 2022, o DAO mais ativo é o news.sputnik-dao.near, que já tem 3051 propostas.
Todos os contratos de instâncias DAO criados com base no Sputnik DAO são implantados sob a subconta sputnik-dao.near, por exemplo:
pcp.sputnik-dao.near
test-dao-bro.sputnik-dao.near
blaqkstereo.sputnik-dao.near
Os usuários podem criar novas instâncias de DAO chamando o método create() do contrato sputnikdao-factory.
2. Interpretação do código do contrato da fábrica
2.1 Criar DAO
o estado do contrato sputnikdao-factory inclui principalmente:
factory_manager: fornece métodos para criar/excluir/atualizar instâncias de DAO
daos: regista todos os endereços de conta das instâncias DAO criadas
O contrato da fábrica fornece a interface update###( para atualizar o contrato DAO:
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
.update_contract)account_id, code_hash, 'update'(;
}
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
23 Curtidas
Recompensa
23
7
Compartilhar
Comentário
0/400
GasFeeTears
· 3h atrás
Eh, mais um padrão de fábrica que faz as pessoas de parvas.
Ver originalResponder0
0xSoulless
· 10h atrás
Mais uma ferramenta dao para fazer as pessoas de parvas.
Ver originalResponder0
MetaverseMigrant
· 21h atrás
Esta fábrica é um pouco impressionante.
Ver originalResponder0
gas_fee_therapist
· 08-03 07:53
Lindo! Mais um cachorro de fábrica chegou
Ver originalResponder0
retroactive_airdrop
· 08-03 07:46
Mais uma vez o padrão de design de fábrica, já está ultrapassado, não?
Ver originalResponder0
SolidityStruggler
· 08-03 07:31
Mais uma vez o contrato de fábrica. Quando é que se vai conseguir entender?
Ver originalResponder0
OnchainDetective
· 08-03 07:31
Entendi, entendi. Este contrato parece bastante atraente.
Contrato da fábrica Sputnik DAO: implementação do design unificado para a criação e gestão de DAOs
Análise do contrato da fábrica Sputnik DAO
Sputnik DAO utiliza o padrão de design de fábrica para implementar a criação e gestão unificada de DAOs na plataforma. Este artigo irá detalhar a implementação do padrão de fábrica da plataforma Sputnik DAO.
1. Introdução às funcionalidades DAPP
A plataforma Sputnik DAO já tem vários exemplos de DAO criados. Até março de 2022, o DAO mais ativo é o news.sputnik-dao.near, que já tem 3051 propostas.
Todos os contratos de instâncias DAO criados com base no Sputnik DAO são implantados sob a subconta sputnik-dao.near, por exemplo:
Os usuários podem criar novas instâncias de DAO chamando o método create() do contrato sputnikdao-factory.
2. Interpretação do código do contrato da fábrica
2.1 Criar DAO
o estado do contrato sputnikdao-factory inclui principalmente:
create() definição do 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, ); }
create_contract() método implementou:
on_create() função implementação:
ferrugem #[private] pub fn on_create( &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, bool { if 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-db234efe334b609e12be80398e4e6fa5.webp(
) 2.2 atualização DAO
O contrato da fábrica fornece a interface update###( para atualizar o contrato DAO:
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 .update_contract)account_id, code_hash, 'update'(; }
![])https://img-cdn.gateio.im/webp-social/moments-373080ddb66a4cb83e0722b387056be0.webp(
3. Análise de Segurança
A segurança do contrato da Sputnik DAO Factory se reflete principalmente em:
Controlo de permissões
Tratamento de Erros
Verificação da lista branca
Configuração de segurança padrão
Em geral, o contrato da Sputnik DAO Factory implementou um mecanismo de segurança bastante sólido, mas ainda requer atenção e melhorias contínuas.
![])https://img-cdn.gateio.im/webp-social/moments-8b462e3ac0fd55e990921d21d66e3d42.webp(