Métodos de actualización de contratos inteligentes Rust y consideraciones de seguridad

robot
Generación de resúmenes en curso

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.

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:

  • 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.

INIT-8.48%
Ver originales
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.
  • Recompensa
  • 6
  • Compartir
Comentar
0/400
GweiTooHighvip
· En este momento
Es importante proceder con cautela en las actualizaciones.
Ver originalesResponder0
NFTArchaeologistvip
· hace17h
La actualización es la única verdad.
Ver originalesResponder0
HappyToBeDumpedvip
· 07-29 02:04
Actualizar es igual a corregir vulnerabilidades
Ver originalesResponder0
NftBankruptcyClubvip
· 07-29 01:53
Sin más preámbulos, ¡vamos a hacerlo!
Ver originalesResponder0
NFTHoardervip
· 07-29 01:50
Sin duda, la seguridad es lo más importante.
Ver originalesResponder0
FundingMartyrvip
· 07-29 01:36
Elijo luchar contra las tarifas.
Ver originalesResponder0
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)