Sputnik-DAO utiliza el patrón de diseño de fábrica de creación para implementar la creación y gestión unificada de la organización autónoma descentralizada (DAO) en esta plataforma. Este artículo presentará en detalle la implementación del patrón de fábrica de la plataforma Sputnik-DAO (sputnikdao-factory).
1. Estructura del contrato de fábrica
El estado del contrato de la fábrica se compone principalmente de dos partes:
factory_manager: Proporciona métodos para crear/eliminar/actualizar instancias de DAO
daos: Registra las direcciones de las cuentas NEAR de todas las instancias de DAO creadas.
2. Crear DAO
Crear una instancia de DAO usando el método create():
óxido
#[payable]
pub fn create(&mut self, name: AccountId, args: Base64VecU8) {
// Construir la dirección de la cuenta 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("Error al serializar");
// Llamar a factory_manager para crear el contrato
self.factory_manager.create_contract(
self.get_default_code_hash(),
account_id,
"nuevo",
&args.0,
"on_create",
&callback_args,
);
}
Los pasos principales de factory_manager.create_contract son:
Cargar el código de plantilla del contrato del DAO
Crear un seguimiento de Promise para manejar los resultados
Crear una cuenta de despliegue
Fondos iniciales de transferencia
Desplegar el código del contrato
Llamar a la función de inicialización del contrato
Llamar a la función on_create
Manejo de la función de retorno on_create:
Si se crea con éxito, registre una nueva cuenta DAO
Si falla, se devolverá el capital inicial
3. Actualizar DAO
El contrato de fábrica proporciona la interfaz de actualización () para actualizar DAO:
óxido
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,
"Debe ser actualizado por el propietario de la fábrica o la DAO misma"
);
assert!(
self.daos.contains(&account_id),
"Debe ser un contrato creado por la fábrica"
);
self.factory_manager
.update_contract(account_id, code_hash, "update");
}
update_contract() llamará a la función update() del contrato DAO para realizar la actualización.
4. Análisis de seguridad
Control de permisos: el método view no modifica el estado, las funciones privilegiadas solo pueden ser llamadas por el owner.
Manejo de errores: las situaciones excepcionales tienen un mecanismo de manejo de errores razonable.
Se ha corregido una vulnerabilidad que permitía a los usuarios comunes actualizar cualquier contrato DAO.
El contrato de fábrica de Sputnik-DAO garantiza la seguridad del contrato a través de mecanismos de control de permisos, manejo de errores, entre otros.
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
18 me gusta
Recompensa
18
6
Republicar
Compartir
Comentar
0/400
MysteryBoxBuster
· hace13h
El contrato de fábrica es demasiado básico, ¿no?
Ver originalesResponder0
ZkSnarker
· hace13h
bueno, en realidad... el patrón de fábrica de sputnik está algo basado, para ser honesto.
Ver originalesResponder0
HalfBuddhaMoney
· hace13h
¿Puede un desarrollador explicar cómo usar esta trampa?
Ver originalesResponder0
ForkTongue
· hace13h
Este código se ve muy familiar.
Ver originalesResponder0
CantAffordPancake
· hace13h
Cuando tengamos dinero, haremos uno y estaremos mirando el contrato todo el día.
Ver originalesResponder0
MissedTheBoat
· hace13h
No entiendo el código, pero soy un experto en perder dinero.
Contrato del fábrica Sputnik-DAO: mecanismo central para la creación y gestión unificada de instancias DAO.
Análisis del contrato de fábrica Sputnik-DAO
Sputnik-DAO utiliza el patrón de diseño de fábrica de creación para implementar la creación y gestión unificada de la organización autónoma descentralizada (DAO) en esta plataforma. Este artículo presentará en detalle la implementación del patrón de fábrica de la plataforma Sputnik-DAO (sputnikdao-factory).
1. Estructura del contrato de fábrica
El estado del contrato de la fábrica se compone principalmente de dos partes:
óxido pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet\u003caccountid\u003e, }
2. Crear DAO
Crear una instancia de DAO usando el método create():
óxido #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { // Construir la dirección de la cuenta DAO let account_id: AccountId = format!("{}.{}", name, env::current_account_id()) .parse() .unwrap();
}
Los pasos principales de factory_manager.create_contract son:
Manejo de la función de retorno on_create:
3. Actualizar DAO
El contrato de fábrica proporciona la interfaz de actualización () para actualizar DAO:
óxido 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, "Debe ser actualizado por el propietario de la fábrica o la DAO misma" ); assert!( self.daos.contains(&account_id), "Debe ser un contrato creado por la fábrica" ); self.factory_manager .update_contract(account_id, code_hash, "update"); }
update_contract() llamará a la función update() del contrato DAO para realizar la actualización.
4. Análisis de seguridad
El contrato de fábrica de Sputnik-DAO garantiza la seguridad del contrato a través de mecanismos de control de permisos, manejo de errores, entre otros.