Diario de desarrollo de contratos inteligentes Rust (10-2): Análisis del contrato de fábrica de Sputnik DAO
Este artículo profundizará en la interpretación del diseño e implementación del modelo de fábrica de la plataforma Sputnik-DAO ( sputnikdao-factory ).
1. Contrato de fábrica de Sputnik-DAO
Sputnik-DAO utiliza el patrón de diseño de fábricas de creación para implementar la creación y gestión unificada del (DAO) de organizaciones autónomas descentralizadas en esta plataforma.
El estado del contrato de la fábrica se compone principalmente de dos partes:
factory_manager: Implementación de la lógica funcional interna principal del contrato, que 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 en la historia de la plataforma.
2. Crear DAO
Crear una instancia de DAO utilizando el método create():
los principales pasos del método create_contract():
Cargar el código del modelo de contrato inteligente de la instancia de DAO.
Construir el seguimiento de resultados de Promise
Crear una cuenta para desplegar el contrato del DAO.
Transferir tokens NEAR
Desplegar el código del contrato
Llamar a la función de inicialización new()
Callback de la función on_create()
3. Actualización de DAO
A través del método update() se puede actualizar el contrato DAO:
óxido
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,
"Debe ser actualizado por el propietario de la fábrica o por el propio DAO"
);
// ...
self.factory_manager
.actualizar_contrato(id_cuenta, hash_codigo, "actualizar");
}
4. Análisis de seguridad
Control de permisos: el método view no modifica el estado, las funciones privilegiadas solo pueden ser ejecutadas por el owner.
Manejo de errores: se ha implementado un mecanismo de manejo razonable para situaciones excepcionales
Se corrigió una vulnerabilidad de seguridad que permitía a cualquier usuario actualizar los contratos inteligentes de la DAO.
El contrato de la fábrica Sputnik-DAO garantiza la seguridad del contrato a través de estos mecanismos.
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.
19 me gusta
Recompensa
19
5
Compartir
Comentar
0/400
JustHereForAirdrops
· 07-25 18:43
Hay investigaciones que muestran que crear un DAO será tan fácil como construir un sitio web.
Análisis del contrato de fábrica Sputnik DAO: creación, actualización y diseño de seguridad
Diario de desarrollo de contratos inteligentes Rust (10-2): Análisis del contrato de fábrica de Sputnik DAO
Este artículo profundizará en la interpretación del diseño e implementación del modelo de fábrica de la plataforma Sputnik-DAO ( sputnikdao-factory ).
1. Contrato de fábrica de Sputnik-DAO
Sputnik-DAO utiliza el patrón de diseño de fábricas de creación para implementar la creación y gestión unificada del (DAO) de organizaciones autónomas descentralizadas en esta plataforma.
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 utilizando el método create():
óxido #[payable] pub fn create(&mut self, name: AccountId, args: Base64VecU8) { let account_id: AccountId = format!("{}.{}", name, env::current_account_id()) .parse() .unwrap(); // ... self.factory_manager.create_contract( self.get_default_code_hash(), account_id, "nuevo", &args.0, "on_create", &callback_args, ); }
los principales pasos del método create_contract():
3. Actualización de DAO
A través del método update() se puede actualizar el contrato DAO:
óxido 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, "Debe ser actualizado por el propietario de la fábrica o por el propio DAO" ); // ... self.factory_manager .actualizar_contrato(id_cuenta, hash_codigo, "actualizar"); }
4. Análisis de seguridad
El contrato de la fábrica Sputnik-DAO garantiza la seguridad del contrato a través de estos mecanismos.