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:
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:
Carregar o código do modelo de contrato da instância DAO
Criar Promise para rastrear os resultados do tratamento
Criar conta de implantação
Fundos iniciais de transferência
Implantar o código do contrato
Chamar a função de inicialização do contrato
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.
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.
18 Curtidas
Recompensa
18
6
Repostar
Compartilhar
Comentário
0/400
MysteryBoxBuster
· 13h atrás
Este contrato de fábrica é muito básico, não é?
Ver originalResponder0
ZkSnarker
· 13h atrás
bem, na verdade... o padrão de fábrica do sputnik é meio baseado, para ser honesto
Ver originalResponder0
HalfBuddhaMoney
· 13h atrás
Vem cá, irmão desenvolvedor, pode explicar como usar esta armadilha?
Ver originalResponder0
ForkTongue
· 13h atrás
Este código parece-me familiar.
Ver originalResponder0
CantAffordPancake
· 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
MissedTheBoat
· 13h atrás
Não entendo de código, mas sou muito bom em perder dinheiro.
Contrato da fábrica Sputnik-DAO: mecanismo central para a criação e gestão unificada de instâncias DAO
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, }
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();
}
Os principais passos de factory_manager.create_contract:
Tratamento da função de retorno on_create:
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
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.