Diario de desarrollo de contratos inteligentes Rust (10-2) Análisis del contrato de fábrica Sputnik DAO
Este artículo realizará un análisis profundo de la implementación del contrato de fábrica sputnikdao-factory en la plataforma Sputnik DAO. Este contrato utiliza el patrón de fábrica para crear y gestionar de manera unificada las organizaciones autónomas descentralizadas (DAO) en la plataforma.
1. Contrato de fábrica Sputnik-DAO
Sputnik-DAO utiliza el patrón de diseño de fábrica para la creación y gestión de DAO. El código fuente del contrato de fábrica sputnikdao-factory se encuentra en:
2. Funcionalidad del módulo DAPP
La plataforma Sputnik DAO ya ha creado múltiples instancias de DAO. El DAO más activo es news.sputnik-dao.near, que tiene 3051 propuestas. Todos los contratos de las instancias de DAO son desplegados de manera unificada por el contrato de fábrica ( de la cuenta sputnik-dao.near, como sus subcuentas.
Los usuarios pueden crear nuevas instancias de DAO llamando al método create)( del contrato de fábrica.
3. Interpretación del código del contrato sputnikdao-factory
) 3.1 crear DAO
El estado del contrato de la fábrica incluye principalmente:
factory_manager: implementar la lógica principal para crear/eliminar/actualizar instancias de DAO
daos: registra las direcciones de las cuentas de todas las instancias de DAO creadas
create###( definición del método:
óxido
#)
pub fn create[payable]&mut self, name: AccountId, args: Base64VecU8( {
// Construir la dirección de la subcuenta DAO
let account_id: AccountId = format!)'{}.{}', name, env::current_account_id(()
.parse)(
.unwrap)(;
// Construir parámetros de devolución
let callback_args = serde_json::to_vec)\u0026json!({
'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 de instancia DAO
self.factory_manager.create_contract)
self.get_default_code_hash((,
account_id,
'nuevo',
&args.0,
'on_create',
&callback_args,
);
El contrato de la fábrica proporciona la interfaz de actualización ### para actualizar el 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 el DAO mismo'
(;
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');
}
Llamar a la función update() del contrato inteligente de instancia DAO para realizar una actualización.
4. Análisis de la seguridad del contrato
Control de permisos: el método view no modifica el estado, las funciones privilegidas solo pueden ser llamadas por el owner.
Manejo de errores: las situaciones excepcionales tienen un mecanismo de manejo razonable
Se ha reparado una vulnerabilidad de permisos existente anteriormente.
Ver originales
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.
6 me gusta
Recompensa
6
2
Republicar
Compartir
Comentar
0/400
MevHunter
· 08-09 23:48
¡Ah, me deja aturdido! ¡El ejemplo saltó directamente a más de 3k!
Ver originalesResponder0
MetaverseVagrant
· 08-09 23:47
¿Es tan guapo rust? Solo lo aprendí porque estaba aburrido.
Análisis del contrato de fábrica Sputnik DAO: implementación en Rust para crear y gestionar una Organización Autónoma Descentralizada
Diario de desarrollo de contratos inteligentes Rust (10-2) Análisis del contrato de fábrica Sputnik DAO
Este artículo realizará un análisis profundo de la implementación del contrato de fábrica sputnikdao-factory en la plataforma Sputnik DAO. Este contrato utiliza el patrón de fábrica para crear y gestionar de manera unificada las organizaciones autónomas descentralizadas (DAO) en la plataforma.
1. Contrato de fábrica Sputnik-DAO
Sputnik-DAO utiliza el patrón de diseño de fábrica para la creación y gestión de DAO. El código fuente del contrato de fábrica sputnikdao-factory se encuentra en:
2. Funcionalidad del módulo DAPP
La plataforma Sputnik DAO ya ha creado múltiples instancias de DAO. El DAO más activo es news.sputnik-dao.near, que tiene 3051 propuestas. Todos los contratos de las instancias de DAO son desplegados de manera unificada por el contrato de fábrica ( de la cuenta sputnik-dao.near, como sus subcuentas.
Los usuarios pueden crear nuevas instancias de DAO llamando al método create)( del contrato de fábrica.
![])https://img-cdn.gateio.im/webp-social/moments-78921e045e487159a6dd01b0f3466573.webp(
3. Interpretación del código del contrato sputnikdao-factory
) 3.1 crear DAO
El estado del contrato de la fábrica incluye principalmente:
create###( definición del método:
óxido #) pub fn create[payable]&mut self, name: AccountId, args: Base64VecU8( { // Construir la dirección de la subcuenta DAO let account_id: AccountId = format!)'{}.{}', name, env::current_account_id(() .parse)( .unwrap)(;
}
![])https://img-cdn.gateio.im/webp-social/moments-db234efe334b609e12be80398e4e6fa5.webp(
implementación específica de factory_manager.create_contract:
on_create)( función de callback:
![])https://img-cdn.gateio.im/webp-social/moments-373080ddb66a4cb83e0722b387056be0.webp(
) 3.2 actualización DAO
El contrato de la fábrica proporciona la interfaz de actualización ### para actualizar el 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 el DAO mismo' (; 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'); }
Llamar a la función update() del contrato inteligente de instancia DAO para realizar una actualización.
4. Análisis de la seguridad del contrato