Técnicas de actualización de contratos inteligentes en Rust: las mejores prácticas para pasar de Ethereum a NEAR

robot
Generación de resúmenes en curso

Diario de desarrollo de contratos inteligentes en Rust (9): Seguridad de contratos en la actualización de contratos

Los contratos inteligentes, como una forma de código de programa, inevitablemente tendrán defectos y vulnerabilidades. Incluso los contratos que han sido completamente probados y auditados pueden tener problemas no descubiertos. Una vez que se aprovechan estos problemas potenciales, pueden causar consecuencias graves, como la pérdida de activos de los usuarios. Por lo tanto, la capacidad de actualizar contratos es muy importante para reparar vulnerabilidades y agregar nuevas funciones. Este artículo presentará las formas de actualización de los contratos Rust en la plataforma NEAR.

1. La necesidad de la actualización de contratos

Los contratos inteligentes son esencialmente código de programa, y inevitablemente pueden tener defectos. Incluso después de numerosas pruebas y auditorías, aún pueden existir vulnerabilidades. Si estas vulnerabilidades son explotadas por atacantes, pueden causar pérdidas significativas de activos de los usuarios, entre otras consecuencias graves. La reparación de vulnerabilidades a menudo requiere actualizaciones del contrato. Además, la adición de nuevas funciones también requiere actualizar el contrato. Por lo tanto, la capacidad de actualización del contrato es muy necesaria.

2. Formas comunes de actualización de contratos inteligentes de Ethereum

Los contratos inteligentes en Ethereum tienen inmutabilidad, una vez desplegados no se pueden modificar. Para resolver este problema, generalmente se utiliza el enfoque del contrato proxy (Proxy Contract):

  • Los contratos de proxy se utilizan para almacenar datos y llamar a contratos lógicos mediante deleGatecall.
  • El contrato lógico contiene la lógica de negocio específica
  • Al actualizar, solo es necesario desplegar un nuevo contrato lógico y actualizar el contrato proxy apuntando.

Este método puede conservar los datos originales, actualizando solo la parte lógica.

3. Métodos de actualización de contratos inteligentes de NEAR

A continuación, se presenta el proyecto StatusMessage como ejemplo para explicar el método de actualización de contratos en NEAR:

3.1 La estructura de datos del contrato no ha sido modificada

Si solo se modifica la lógica del contrato, sin cambiar la estructura de datos, se puede volver a implementar el nuevo código directamente usando el comando near deploy. Los datos originales se conservarán.

3.2 La estructura de datos del contrato ha sido modificada

Si se modifica la estructura de datos del contrato, volver a desplegarlo directamente hará que la nueva y la antigua estructura de datos no coincidan, lo que impedirá la lectura normal de los datos originales.

3.3 Uso del método Migrate para actualizar

NEAR proporciona el método Migrate para la actualización de contratos. Agrega la función 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 desplegar:

near deploy
--wasmFile target/wasm32-unknown-unknown/release/status_message.wasm
--initFunction "migrate"
--initArgs "{}"
--accountId statusmessage.blocksec_upgrade.testnet

De esta manera se puede completar la migración de datos, incluso si la estructura de datos de los contratos antiguos y nuevos no es consistente, se puede actualizar correctamente.

4. Consideraciones de seguridad para la actualización de contratos

La actualización de contratos requiere considerar los siguientes factores de seguridad:

  • Control estricto de los permisos de actualización, solo se permite a los desarrolladores o DAO actualizar.
  • Recomiendo establecer el propietario del contrato como DAO, gestionado a través de propuestas y votaciones.
  • Añadir #[init)ignore_state)] antes de la función migrate
  • Eliminar la función migrate después de la migración, asegurarse de que se llame solo una vez
  • Estructura de datos añadida se inicializa al migrar

A través de estas medidas, se puede garantizar la seguridad de la actualización de contratos, reduciendo los riesgos durante el proceso de actualización.

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
  • 5
  • Compartir
Comentar
0/400
liquiditea_sippervip
· hace20h
Suena tan poderoso, pero aún no me atrevo a intentarlo.
Ver originalesResponder0
NeverVoteOnDAOvip
· hace20h
¿Es confiable la actualización? Siempre siento que no se limpia bien.
Ver originalesResponder0
BrokenDAOvip
· hace20h
Los permisos son equivalentes a una puerta trasera, ¿cómo se puede hablar de seguridad?
Ver originalesResponder0
LayerZeroHerovip
· hace20h
Una vez que se complete la actualización, no habrá nadie que lo controle.
Ver originalesResponder0
ser_ngmivip
· hace20h
el techo del contrato rug
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)