Mejores prácticas de actualización de contratos inteligentes en Rust: aprendiendo del caso del contrato de NEAR

Guía de actualización de contratos inteligentes de Rust

Los contratos inteligentes, como una forma de programa, inevitablemente pueden tener defectos. Incluso después de numerosas pruebas y auditorías, aún pueden existir vulnerabilidades. Una vez que sean explotadas por un atacante, pueden causar pérdidas en los activos de los usuarios, con graves consecuencias. Por lo tanto, la capacidad de actualización de los contratos es muy necesaria, principalmente para corregir vulnerabilidades y agregar nuevas características. Este artículo presentará las formas de actualizar los contratos en Rust.

Método de actualización del contrato NEAR

Tomando como ejemplo el proyecto StatusMessage, se introducen los métodos comunes de actualización de contratos en NEAR.

1. Estructura de datos del contrato no modificada

Si solo se modifica la lógica del contrato, sin cambios en la estructura de datos, se puede usar directamente near deploy para desplegar el nuevo código:

bash despliegue cerca
--accountId status_message.example.testnet
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm

Los datos del contrato original se pueden leer normalmente.

2. Modificación de la estructura de datos del contrato

Si se modifica la estructura de datos del contrato, volver a desplegarlo directamente provocará un fallo en la deserialización del estado. En este caso, es necesario utilizar el método migrate para realizar la actualización:

óxido #[private] #[init(ignore_state)] Self { let old_state: OldStatusMessage = env::state_read().expect("failed"); Self { new_field: LookupMap::new(b"n".to_vec)((, old_field: old_state.old_field, } }

Llamar al método migrate al desplegar:

bash
cerca de desplegar
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId status_message.example.testnet

De esta manera, se puede migrar el estado antiguo al nuevo contrato.

![])https://img-cdn.gateio.im/webp-social/moments-73f5e5195fa71f1f25f5d35ba1e8b8ec.webp)

Sugerencias de seguridad para la actualización de contratos

  1. Se añadió control de permisos a la función de actualización, solo se permite la llamada al owner.
  2. Establecer el propietario como DAO, gestionado a través de propuestas y votaciones.
  3. Función de migración agregada #[init(ignore_state)]
  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.

Una actualización razonable puede mantener la seguridad y escalabilidad del contrato, siendo una parte importante del desarrollo de contratos inteligentes.

Ver originales
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 3
  • Compartir
Comentar
0/400
PumpBeforeRugvip
· hace10h
Si no puedes prevenir vulnerabilidades básicas, ¿para qué jugar a correr desnudo?
Ver originalesResponder0
DegenWhisperervip
· hace10h
No es de extrañar que sea rust, increíble
Ver originalesResponder0
WalletWhisperervip
· hace10h
¡Una nueva trampa ha llegado, parece interesante!
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)