Guía de actualización de contratos inteligentes Rust: Prácticas de migración segura en la plataforma NEAR

robot
Generación de resúmenes en curso

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

  1. La función de actualización debe tener control de permisos, generalmente solo puede ser llamada por desarrolladores o DAO.

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

  3. Agregue #[init(ignore_state)] antes de la función de migración, asegurando que no se cargue el estado antes de la ejecución.

  4. Eliminar la función de migración después de completar la migración, asegurándose de que solo se llame una vez.

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

INIT3.84%
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
SignatureAnxietyvip
· hace2h
la situación actual de los jugadores cerca ha fallado
Ver originalesResponder0
DAOTruantvip
· hace7h
Depende del estado de ánimo si se debe migrar los datos.
Ver originalesResponder0
0xSherlockvip
· 07-25 08:10
Mirarlo me da dolor de cabeza, no puedo estudiar.
Ver originalesResponder0
MEVHunterLuckyvip
· 07-25 08:10
Para ser sincero, no hay código, ¿cómo se supone que voy a aprender?
Ver originalesResponder0
blocksnarkvip
· 07-25 08:10
El maestro NEAR viene a enseñar.
Ver originalesResponder0
rugpull_survivorvip
· 07-25 08:00
Siempre escucha cerca de manera estable.
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)