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.
ó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.
18 me gusta
Recompensa
18
7
Compartir
Comentar
0/400
AltcoinOracle
· hace4h
los degens durmiendo en sputnik... su modelo de fábrica es literalmente gobernanza web3 2.0
Ver originalesResponder0
not_your_keys
· hace4h
Este diseño es bastante duro, ¡guau!
Ver originalesResponder0
ImpermanentPhilosopher
· hace4h
Desarrollo modular sin pensar, me encanta
Ver originalesResponder0
PensionDestroyer
· hace4h
El contrato de fábrica parece confiable.
Ver originalesResponder0
ImaginaryWhale
· hace4h
Este contrato tiene algo especial.
Ver originalesResponder0
InfraVibes
· hace4h
国产也能搞这trampa啊
Ver originalesResponder0
BanklessAtHeart
· hace5h
La seguridad de los contratos de fábrica es realmente clave.
Profundidad del análisis del contrato de fábrica de la plataforma Sputnik DAO: diseño, implementación y mecanismos de seguridad
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:
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, }
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: