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ú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
6
Republicar
Partilhar
Comentar
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.