Guía de actualización de contratos inteligentes Rust
Los contratos inteligentes, como una especie de programa, inevitablemente pueden tener defectos. A pesar de haber pasado por numerosas pruebas y auditorías, aún pueden existir vulnerabilidades. Una vez que se aprovecha una vulnerabilidad, puede causar graves consecuencias, como la pérdida de activos de los usuarios. Por lo tanto, la capacidad de actualización de los contratos es muy importante, principalmente para corregir vulnerabilidades y agregar nuevas funciones.
Método de actualización de contratos de NEAR
Tomando como ejemplo el proyecto StatusMessage, se presentan los métodos comunes de actualización de contratos NEAR.
1. La estructura de datos del contrato no ha sido modificada
Si solo se modifica la lógica del contrato y no se involucran cambios en la estructura de datos, se puede utilizar directamente el comando near deploy para volver a desplegar el nuevo código. Los datos del contrato original aún se pueden leer normalmente.
2. La estructura de datos del contrato ha sido modificada
Si se modifica la estructura de datos del contrato, volver a desplegar directamente causará que la nueva estructura de datos no coincida con el estado anterior, lo que provocará un error.
3. Utilizar el método Migrate para actualizar
NEAR ofrece el método Migrate para ayudar a actualizar contratos. Agrega el método migrate en el nuevo contrato:
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.
18 me gusta
Recompensa
18
6
Compartir
Comentar
0/400
SignatureAnxiety
· hace2h
la situación actual de los jugadores cerca ha fallado
Ver originalesResponder0
DAOTruant
· hace7h
Depende del estado de ánimo si se debe migrar los datos.
Ver originalesResponder0
0xSherlock
· 07-25 08:10
Mirarlo me da dolor de cabeza, no puedo estudiar.
Ver originalesResponder0
MEVHunterLucky
· 07-25 08:10
Para ser sincero, no hay código, ¿cómo se supone que voy a aprender?
Guía de actualización de contratos inteligentes Rust: Prácticas de migración segura en la plataforma NEAR
Guía de actualización de contratos inteligentes Rust
Los contratos inteligentes, como una especie de programa, inevitablemente pueden tener defectos. A pesar de haber pasado por numerosas pruebas y auditorías, aún pueden existir vulnerabilidades. Una vez que se aprovecha una vulnerabilidad, puede causar graves consecuencias, como la pérdida de activos de los usuarios. Por lo tanto, la capacidad de actualización de los contratos es muy importante, principalmente para corregir vulnerabilidades y agregar nuevas funciones.
Método de actualización de contratos de NEAR
Tomando como ejemplo el proyecto StatusMessage, se presentan los métodos comunes de actualización de contratos NEAR.
1. La estructura de datos del contrato no ha sido modificada
Si solo se modifica la lógica del contrato y no se involucran cambios en la estructura de datos, se puede utilizar directamente el comando near deploy para volver a desplegar el nuevo código. Los datos del contrato original aún se pueden leer normalmente.
2. La estructura de datos del contrato ha sido modificada
Si se modifica la estructura de datos del contrato, volver a desplegar directamente causará que la nueva estructura de datos no coincida con el estado anterior, lo que provocará un error.
3. Utilizar el método Migrate para actualizar
NEAR ofrece el método Migrate para ayudar a actualizar contratos. Agrega el método migrate en el nuevo contrato:
óxido #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect('failed'); Self { taglines: old_state.records, bios: LookupMap::new(b'b'.to_vec)((, } }
Llamar al método migrate al redeplegar:
cercano a desplegar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.blocksec_upgrade.testnet
De esta manera, se puede desplegar con éxito un nuevo contrato y migrar los datos antiguos.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
Consideraciones de seguridad para la actualización de contratos
La función de actualización debe tener control de permisos, generalmente solo puede ser llamada por desarrolladores o DAO.
Se recomienda establecer el propietario del contrato como DAO, para gestionar conjuntamente a través de propuestas y votaciones.
Agregue #[init(ignore_state)] antes de la función de migración, asegurando que no se cargue el estado antes de la ejecución.
Eliminar la función de migración después de completar la migración, asegurándose de que solo se llame una vez.
La nueva estructura de datos se inicializa durante la migración.
Un mecanismo de actualización razonable puede proporcionar flexibilidad y mantenibilidad a los contratos, garantizando la seguridad.