Discusión sobre métodos de actualización de contratos inteligentes en Rust
La actualización de contratos es una parte importante del desarrollo de contratos inteligentes. Debido a la característica inmutable de la blockchain, un contrato inteligente que ha sido desplegado en la cadena no puede ser modificado directamente. Sin embargo, en la aplicación práctica, a menudo es necesario reparar vulnerabilidades o agregar nuevas funciones, lo que requiere ser llevado a cabo a través de una actualización. Este artículo presentará los métodos comunes de actualización de contratos inteligentes en Rust.
1. La necesidad de la actualización de contratos
Los contratos inteligentes, como código de programa, inevitablemente pueden tener vulnerabilidades. Incluso después de numerosas pruebas y auditorías, aún pueden existir problemas no detectados. Una vez que una vulnerabilidad es explotada maliciosamente, puede causar pérdidas significativas de activos. Por lo tanto, la capacidad de ser actualizable es muy importante para los contratos inteligentes, principalmente para:
Reparar las vulnerabilidades de seguridad detectadas
Añadir nuevas características funcionales
Optimizar la lógica de los contratos, mejorar el rendimiento
2. Método de actualización de contratos inteligentes NEAR
A continuación, como ejemplo del proyecto StatusMessage, se presenta el método de actualización de contratos en NEAR:
2.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 usar directamente el comando near deploy para volver a implementar el nuevo código. Ejemplo:
bash
despliegue cerca
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
En este caso, los datos del contrato original se conservarán.
2.2 La estructura de datos de contratos inteligentes ha sido modificada
Si se modifica la estructura de datos del contrato, volver a desplegarlo directamente causará un error de incompatibilidad entre la nueva y la antigua estructura de datos. En este caso, es necesario utilizar un método de migración para realizar la actualización.
3. Consideraciones de seguridad para la actualización de contratos
Al realizar una actualización de contratos, es importante tener en cuenta los siguientes puntos:
Control estricto de los permisos de actualización, solo se permite que el propietario del contrato o el DAO realicen actualizaciones.
Se recomienda establecer al propietario del contrato como DAO, gestionando las actualizaciones a través de propuestas y votaciones.
Agregue #[init(ignore_state)] antes de la función de migración, asegurándose de 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 para evitar llamadas duplicadas
Se completa la inicialización de la nueva estructura de datos durante la migración.
Un diseño y ejecución razonables del plan de actualización pueden garantizar la seguridad de los contratos y los activos de los usuarios, al mismo tiempo que se asegura la capacidad de actualización de los contratos.
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.
14 me gusta
Recompensa
14
6
Compartir
Comentar
0/400
GweiTooHigh
· En este momento
Es importante proceder con cautela en las actualizaciones.
Métodos de actualización de contratos inteligentes Rust y consideraciones de seguridad
Discusión sobre métodos de actualización de contratos inteligentes en Rust
La actualización de contratos es una parte importante del desarrollo de contratos inteligentes. Debido a la característica inmutable de la blockchain, un contrato inteligente que ha sido desplegado en la cadena no puede ser modificado directamente. Sin embargo, en la aplicación práctica, a menudo es necesario reparar vulnerabilidades o agregar nuevas funciones, lo que requiere ser llevado a cabo a través de una actualización. Este artículo presentará los métodos comunes de actualización de contratos inteligentes en Rust.
1. La necesidad de la actualización de contratos
Los contratos inteligentes, como código de programa, inevitablemente pueden tener vulnerabilidades. Incluso después de numerosas pruebas y auditorías, aún pueden existir problemas no detectados. Una vez que una vulnerabilidad es explotada maliciosamente, puede causar pérdidas significativas de activos. Por lo tanto, la capacidad de ser actualizable es muy importante para los contratos inteligentes, principalmente para:
2. Método de actualización de contratos inteligentes NEAR
A continuación, como ejemplo del proyecto StatusMessage, se presenta el método de actualización de contratos en NEAR:
2.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 usar directamente el comando near deploy para volver a implementar el nuevo código. Ejemplo:
bash despliegue cerca
--accountId statusmessage.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
En este caso, los datos del contrato original se conservarán.
2.2 La estructura de datos de contratos inteligentes ha sido modificada
Si se modifica la estructura de datos del contrato, volver a desplegarlo directamente causará un error de incompatibilidad entre la nueva y la antigua estructura de datos. En este caso, es necesario utilizar un método de migración para realizar la actualización.
Agregar 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)((, } }
Luego, llama al método migrate durante la implementación:
bash despliegue cerca
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction 'migrate'
--initArgs '{}' \ --accountId statusmessage.testnet
De esta manera, se puede migrar los datos antiguos a la nueva estructura de datos.
![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)
3. Consideraciones de seguridad para la actualización de contratos
Al realizar una actualización de contratos, es importante tener en cuenta los siguientes puntos:
Un diseño y ejecución razonables del plan de actualización pueden garantizar la seguridad de los contratos y los activos de los usuarios, al mismo tiempo que se asegura la capacidad de actualización de los contratos.