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

  1. La función de actualización debe ser una función solo para el propietario, asegurando que solo pueda ser llamada por el propietario.

  2. Se recomienda establecer el propietario del contrato como DAO, gestionado conjuntamente a través de propuestas y votaciones.

  3. Añadir #[init(ignore_state)] antes de la función de migración

  4. Eliminar la función de migración después de completar la migración

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

INIT-11.35%
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
  • 2
  • Republicar
  • Compartir
Comentar
0/400
SandwichVictimvip
· 08-13 22:24
Hay tantos errores que me siento nervioso.
Ver originalesResponder0
BlockImpostervip
· 08-13 22:24
No importa si actualizas o no, no puedes salir del agujero~
Ver originalesResponder0
  • Anclado
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)