Práctica de actualización de contratos inteligentes Rust
Los contratos inteligentes son esencialmente programas y, por lo tanto, inevitablemente pueden tener defectos. Incluso después de numerosas pruebas y auditorías, aún pueden existir vulnerabilidades. La explotación de vulnerabilidades en los contratos puede causar pérdidas de activos para los usuarios, lo que puede tener consecuencias graves. Para corregir vulnerabilidades y añadir nuevas características, es necesario actualizar el contrato. Por lo tanto, la capacidad de actualización del contrato es muy necesaria. Este artículo presentará los métodos de actualización de contratos en Rust.
Método de actualización de contratos en NEAR
Tomemos como ejemplo el proyecto StatusMessage para introducir los métodos comunes de actualización de contratos en NEAR.
1. La estructura de datos del contrato no ha sido modificada
Si solo se modifica la lógica del contrato, sin involucrar cambios en la estructura de datos, se puede utilizar directamente near deploy para redeplegar el nuevo código. Los datos en el contrato original 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 desplegarlo directamente causará que la nueva y la antigua estructura de datos no coincidan, lo que impedirá la lectura de los datos originales.
3. Usar Migrate para actualizar contratos inteligentes
NEAR ofrece el método Migrate para ayudar a actualizar los contratos. Agrega el método migrate en el nuevo contrato:
Consideraciones de seguridad para la actualización de contratos
La función de actualización debe ser una función solo para el propietario, asegurando que solo pueda ser llamada por el propietario.
Se recomienda establecer el propietario del contrato como DAO, gestionado conjuntamente a través de propuestas y votaciones.
Añadir #[init(ignore_state)] antes de la función de migración
Eliminar la función de migración después de completar la migración
La nueva estructura de datos se inicializa durante la migración.
La actualización de contratos es un medio importante para garantizar la seguridad de los contratos, los desarrolladores deben tratarlo con precaución y asegurar la seguridad del proceso de actualización.
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.
10 me gusta
Recompensa
10
2
Republicar
Compartir
Comentar
0/400
SandwichVictim
· 08-13 22:24
Hay tantos errores que me siento nervioso.
Ver originalesResponder0
BlockImposter
· 08-13 22:24
No importa si actualizas o no, no puedes salir del agujero~
Guía completa de actualización de contratos inteligentes Rust: desde NEAR hasta consideraciones de seguridad
Práctica de actualización de contratos inteligentes Rust
Los contratos inteligentes son esencialmente programas y, por lo tanto, inevitablemente pueden tener defectos. Incluso después de numerosas pruebas y auditorías, aún pueden existir vulnerabilidades. La explotación de vulnerabilidades en los contratos puede causar pérdidas de activos para los usuarios, lo que puede tener consecuencias graves. Para corregir vulnerabilidades y añadir nuevas características, es necesario actualizar el contrato. Por lo tanto, la capacidad de actualización del contrato es muy necesaria. Este artículo presentará los métodos de actualización de contratos en Rust.
Método de actualización de contratos en NEAR
Tomemos como ejemplo el proyecto StatusMessage para introducir los métodos comunes de actualización de contratos en NEAR.
1. La estructura de datos del contrato no ha sido modificada
Si solo se modifica la lógica del contrato, sin involucrar cambios en la estructura de datos, se puede utilizar directamente near deploy para redeplegar el nuevo código. Los datos en el contrato original 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 desplegarlo directamente causará que la nueva y la antigua estructura de datos no coincidan, lo que impedirá la lectura de los datos originales.
3. Usar Migrate para actualizar contratos inteligentes
NEAR ofrece el método Migrate para ayudar a actualizar los 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:
cerca de implementar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}'
--accountId statusmessage.blocksec_upgrade.testnet
De esta manera, se puede migrar con éxito los datos del contrato antiguo al nuevo contrato.
![])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 ser una función solo para el propietario, asegurando que solo pueda ser llamada por el propietario.
Se recomienda establecer el propietario del contrato como DAO, gestionado conjuntamente a través de propuestas y votaciones.
Añadir #[init(ignore_state)] antes de la función de migración
Eliminar la función de migración después de completar la migración
La nueva estructura de datos se inicializa durante la migración.
La actualización de contratos es un medio importante para garantizar la seguridad de los contratos, los desarrolladores deben tratarlo con precaución y asegurar la seguridad del proceso de actualización.