Análisis del contrato de fábrica Sputnik DAO: implementación en Rust para crear y gestionar una Organización Autónoma Descentralizada

robot
Generación de resúmenes en curso

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:

  • 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,
);

}

![])https://img-cdn.gateio.im/webp-social/moments-db234efe334b609e12be80398e4e6fa5.webp(

implementación específica de factory_manager.create_contract:

  1. Cargar el código de la plantilla del contrato inteligente del DAO
  2. Construir una Promesa para rastrear los pasos posteriores
  3. Crear una cuenta para desplegar instancias de DAO
  4. Transferir a una nueva cuenta
  5. Desplegar el código del contrato
  6. Llamar a la función de inicialización new)(
  7. Callback on_create)( función

on_create)( función de callback:

  • Si se ejecuta con éxito, registra una nueva cuenta de instancia de DAO
  • Si falla, reembolsar la transferencia del usuario

![])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

  • 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.
  • Recompensa
  • 2
  • Republicar
  • Compartir
Comentar
0/400
MevHuntervip
· 08-09 23:48
¡Ah, me deja aturdido! ¡El ejemplo saltó directamente a más de 3k!
Ver originalesResponder0
MetaverseVagrantvip
· 08-09 23:47
¿Es tan guapo rust? Solo lo aprendí porque estaba aburrido.
Ver originalesResponder0
  • Anclado
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)