Profundidad del análisis del contrato de fábrica de la plataforma Sputnik DAO: diseño, implementación y mecanismos de seguridad

robot
Generación de resúmenes en curso

Diario de desarrollo de contratos inteligentes en 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 Sputnik-DAO

Sputnik-DAO utiliza el patrón de diseño de fábrica de creación para lograr la creación y gestión unificada de la organización autónoma descentralizada (DAO) en esta plataforma.

El repositorio del código fuente del contrato correspondiente se encuentra en:

2. Introducción a las funciones del módulo DAPP

La página DAPP de la plataforma Sputnik DAO muestra los objetos de instancia DAO creados (contratos inteligentes). Hasta marzo de 2022, el DAO más activo en esta plataforma es news.sputnik-dao.near, con 3051 propuestas en votación o ya finalizadas.

Todos los contratos de instancias de DAO creados en la plataforma Sputnik DAO son desplegados de manera unificada en sus subcuentas por el contrato sputnikdao-factory de la cuenta (sputnik-dao.near, por ejemplo:

  • pcp.sputnik-dao.near
  • test-dao-bro.sputnik-dao.near
  • blaqkstereo.sputnik-dao.near

Las organizaciones pueden invocar públicamente el método create)( del contrato sputnikdao-factory en la mainnet de NEAR para crear nuevas instancias de DAO.

![])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 sputnikdao-factory se compone principalmente de dos partes:

óxido pub struct SputnikDAOFactory { factory_manager: FactoryManager, daos: UnorderedSet\u003caccountid\u003e, }

  • factory_manager: proporciona métodos para crear/eliminar/actualizar instancias de DAO
  • daos: dirección de la cuenta NEAR que ha creado la instancia de DAO

create###( definición del método:

óxido #) pub fn create[payable]&mut self, name: AccountId, args: Base64VecU8( { let account_id: AccountId = format!)'{}.{}', name, env::current_account_id(() .parse)( .unwrap)(; 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'(; 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 concreta de factory_manager.create_contract:

óxido pub fn create_contract) &self, code_hash: Base58CryptoHash, account_id: AccountId, new_method: &str, args: (, callback_method: &str, callback_args: &[u8], [u8] { // Cargar el código del contrato // Crear Promise // Crear cuenta // Transferencia // Desplegar contratos inteligentes
// Llamar a la función de inicialización // Configurar la devolución de llamada }

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

función de callback on_create:

óxido #) pub fn on_create[private] &mut self, account_id: AccountId, attached_deposit: U128, predecessor_account_id: AccountId, bool { si near_sdk::is_promise_success() { self.daos.insert(&account_id); verdadero } else { Promise::new(predecessor_account_id).transfer(attached_deposit.0); falso } }

( 3.2 actualización DAO

update)### método:

ó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 .actualizar_contrato)id_cuenta, hash_codigo, 'actualizar'); }

4. Análisis de seguridad del contrato de la fábrica Sputnik-DAO

Se garantiza la seguridad principalmente desde los siguientes aspectos:

  • Control de permisos: el método view no modifica las variables de estado
  • La función de privilegio solo puede ser ejecutada por el propietario.
  • Mecanismo de manejo de errores razonable

Ver originales
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 7
  • Compartir
Comentar
0/400
AltcoinOraclevip
· hace4h
los degens durmiendo en sputnik... su modelo de fábrica es literalmente gobernanza web3 2.0
Ver originalesResponder0
not_your_keysvip
· hace4h
Este diseño es bastante duro, ¡guau!
Ver originalesResponder0
ImpermanentPhilosophervip
· hace4h
Desarrollo modular sin pensar, me encanta
Ver originalesResponder0
PensionDestroyervip
· hace4h
El contrato de fábrica parece confiable.
Ver originalesResponder0
ImaginaryWhalevip
· hace4h
Este contrato tiene algo especial.
Ver originalesResponder0
InfraVibesvip
· hace4h
国产也能搞这trampa啊
Ver originalesResponder0
BanklessAtHeartvip
· hace5h
La seguridad de los contratos de fábrica es realmente clave.
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)