Contrato da fábrica Sputnik-DAO: mecanismo central para a criação e gestão unificada de instâncias DAO

robot
Geração do resumo em andamento

Análise do contrato da fábrica Sputnik-DAO

Sputnik-DAO adotou o padrão de design de fábrica de criação para implementar a criação e gestão unificada da organização autônoma descentralizada (DAO) na plataforma. Este artigo irá detalhar a implementação do padrão de fábrica da plataforma Sputnik-DAO (sputnikdao-factory).

1. Estrutura do contrato da fábrica

O estado do contrato de fábrica é composto principalmente por duas partes:

ferrugem pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet\u003caccountid\u003e, }

  • factory_manager: Fornece métodos para criar/remover/atualizar instâncias de DAO
  • daos: regista todos os endereços de conta NEAR das instâncias DAO criadas

2. Criar DAO

Criar uma instância DAO usando o método create():

ferrugem #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { // Construir endereço da conta DAO let account_id: AccountId = format!("{}.{}", name, env::current_account_id()) .parse() .unwrap();

// Construir parâmetros de 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("Falha ao serializar");

// Chamar factory_manager para criar um contrato
self.factory_manager.create_contract(
    self.get_default_code_hash(),
    account_id,
    "new", 
    &args.0,
    "on_create", 
    &callback_args,
);

}

Os principais passos de factory_manager.create_contract:

  1. Carregar o código do modelo de contrato da instância DAO
  2. Criar Promise para rastrear os resultados do tratamento
  3. Criar conta de implantação
  4. Fundos iniciais de transferência
  5. Implantar o código do contrato
  6. Chamar a função de inicialização do contrato
  7. Chamar a função on_create

Tratamento da função de retorno on_create:

  • Se a criação for bem-sucedida, registe uma nova conta DAO
  • Se falhar, reembolsar o capital inicial

3. Atualizar DAO

O contrato da fábrica fornece a interface de atualização update() para atualizar o 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 pela própria 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"); }

update_contract() irá chamar a função update() do contrato DAO para realizar a atualização.

4. Análise de Segurança

  • Controle de permissões: o método view não modifica o estado, funções privilegiadas só podem ser chamadas pelo owner
  • Tratamento de erros: as situações excepcionais têm um mecanismo de tratamento de erros razoável
  • Corrigido o erro que permitia a usuários comuns atualizar arbitrariamente o contrato DAO.

O contrato da fábrica Sputnik-DAO garante a segurança do contrato através de mecanismos de controle de permissões, tratamento de erros, entre outros.

GET0.03%
Ver original
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.
  • Recompensa
  • 6
  • Repostar
  • Compartilhar
Comentário
0/400
MysteryBoxBustervip
· 13h atrás
Este contrato de fábrica é muito básico, não é?
Ver originalResponder0
ZkSnarkervip
· 13h atrás
bem, na verdade... o padrão de fábrica do sputnik é meio baseado, para ser honesto
Ver originalResponder0
HalfBuddhaMoneyvip
· 13h atrás
Vem cá, irmão desenvolvedor, pode explicar como usar esta armadilha?
Ver originalResponder0
ForkTonguevip
· 13h atrás
Este código parece-me familiar.
Ver originalResponder0
CantAffordPancakevip
· 13h atrás
Quando tivermos dinheiro, vamos fazer um, e passar o dia a olhar para os contratos e ver o que está acontecendo.
Ver originalResponder0
MissedTheBoatvip
· 13h atrás
Não entendo de código, mas sou muito bom em perder dinheiro.
Ver originalResponder0
  • Marcar
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)