Análise do contrato da fábrica Sputnik DAO: Implementação em Rust para criar e gerir Organizações Autónomas Descentralizadas

robot
Geração do resumo em andamento

Diário de desenvolvimento de contratos inteligentes Rust (10-2) Análise do contrato de fábrica Sputnik DAO

Este artigo irá aprofundar a implementação do contrato de fábrica sputnikdao-factory na plataforma Sputnik DAO. Este contrato utiliza o padrão de fábrica para criar e gerenciar de forma unificada a organização autônoma descentralizada (DAO) na plataforma.

1. Contrato de Fábrica Sputnik-DAO

Sputnik-DAO utiliza o padrão de design de fábrica para implementar a criação e gestão do DAO. O código fonte do contrato de fábrica sputnikdao-factory está localizado em:

2. Funcionalidade do módulo DAPP

A plataforma Sputnik DAO já criou várias instâncias de DAO. O DAO mais ativo é news.sputnik-dao.near, com 3051 propostas. Todos os contratos das instâncias de DAO são implantados uniformemente pelo contrato da conta sputnik-dao.near (, como suas subcontas.

Os usuários podem criar novas instâncias de DAO chamando o método create)( do contrato da fábrica.

![])https://img-cdn.gateio.im/webp-social/moments-78921e045e487159a6dd01b0f3466573.webp(

3. Interpretação do código do contrato sputnikdao-factory

) 3.1 criar DAO

O estado do contrato da fábrica contém principalmente:

  • factory_manager: implementar a lógica principal para criar/remover/atualizar instâncias de DAO
  • daos: registar todos os endereços de conta das instâncias DAO criadas

create###( definição do método:

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

// Construir parâmetros de retorno
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 na serialização'(;

// Chamar factory_manager para criar um contrato de instância DAO
self.factory_manager.create_contract)
    self.get_default_code_hash((,
    account_id,
    'novo',
    &args.0,
    'on_create',
    &callback_args,
);

}

![])https://img-cdn.gateio.im/webp-social/moments-db234efe334b609e12be80398e4e6fa5.webp(

implementação específica de factory_manager.create_contract:

  1. Carregar o código do modelo de contrato inteligente DAO
  2. Construir Promise para rastrear os passos subsequentes
  3. Criar uma conta para implantar a instância DAO.
  4. Transferir para nova conta
  5. Implantar o código do contrato
  6. Chamar a função de inicialização new)(
  7. Callback on_create)( função

on_create)( função de callback:

  • Se executado com sucesso, registar nova conta de instância DAO
  • Se falhar, reembolsar a transferência do usuário

![])https://img-cdn.gateio.im/webp-social/moments-373080ddb66a4cb83e0722b387056be0.webp(

) 3.2 atualização DAO

O contrato da fábrica fornece a interface de atualização ###( para atualizar a DAO:

ferrugem pub fn update)\u0026self, 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'(; }

Chamar a função update)( do contrato inteligente DAO para atualização.

![])https://img-cdn.gateio.im/webp-social/moments-8b462e3ac0fd55e990921d21d66e3d42.webp(

4. Análise da segurança dos contratos

  • 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: Existem mecanismos razoáveis para lidar com situações excepcionais.
  • Vulnerabilidade de permissões anteriormente existente foi corrigida

![])https://img-cdn.gateio.im/webp-social/moments-a8d69d504693c5c14767aed9244a090a.webp(

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
  • 2
  • Repostar
  • Compartilhar
Comentário
0/400
MevHuntervip
· 08-09 23:48
Ah, estou atordoado! O exemplo subiu diretamente para 3k+!
Ver originalResponder0
MetaverseVagrantvip
· 08-09 23:47
Rust é tão legal assim? Se eu tiver tempo, vou aprender um pouco.
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)