Método de actualización de contratos inteligentes en Rust
Los contratos inteligentes, como una forma de programación, inevitablemente presentarán defectos y vulnerabilidades. A pesar de numerosas pruebas y auditorías, aún pueden surgir problemas. Una vez que las vulnerabilidades son explotadas por un atacante, pueden resultar en 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; en este artículo se presentará la forma de actualizar los contratos en Rust.
Métodos de actualización de contratos de Ethereum
Los contratos inteligentes en Ethereum tienen inmutabilidad, no se pueden modificar directamente una vez desplegados. Normalmente se utilizan las siguientes formas de actualizar:
Desplegar un nuevo contrato, modificar la dirección del contrato en la DApp. La desventaja es que es necesario migrar los datos de estado del contrato antiguo.
Arquitectura de separación de datos y lógica. Los datos se almacenan en contratos inteligentes de estado, y la lógica se implementa en otro contrato. Al actualizar, solo es necesario actualizar el contrato de lógica.
Usar contratos inteligentes de proxy. Los contratos inteligentes de proxy almacenan datos y llaman al contrato lógico a través de deleGatecall; durante la actualización, solo es necesario actualizar la dirección del contrato lógico.
Método de actualización de contratos en NEAR
Tomando como ejemplo el proyecto StatusMessage, se presenta el método 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 usar directamente el comando near deploy para redeplegar el nuevo código. Los datos originales se conservarán.
2. La estructura de datos del contrato ha sido modificada
Si se modifica la estructura de datos, volver a desplegar directamente causará que la nueva y la antigua estructura de datos no coincidan, lo que impedirá la lectura normal de los datos.
3. Usar el método Migrate para actualizar
NEAR proporciona el método Migrate para ayudar con la actualización:
Agregar el método migrate en el nuevo contrato
Llamar al método migrate durante el despliegue para realizar la migración de datos
Después de completar la migración, se pueden usar normalmente las nuevas funciones de contratos inteligentes.
Consideraciones de seguridad en la actualización de contratos
Control de permisos - La función de actualización debe ser una función only owner.
Se recomienda establecer el owner como DAO para evitar riesgos de centralización.
Utiliza #[init(ignore_state)] para asegurarte de no cargar el estado antes de ejecutar la migración.
Eliminar la función de migración después de la migración para evitar llamadas duplicadas
La nueva estructura de datos se inicializa al completar la migración
A través de un diseño razonable del plan de actualización, se puede lograr la capacidad de actualización del contrato garantizando la seguridad, mejorando así la mantenibilidad a largo plazo del proyecto.
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.
11 me gusta
Recompensa
11
5
Compartir
Comentar
0/400
Deconstructionist
· hace6h
Se sugiere agregar recarga en caliente
Ver originalesResponder0
rekt_but_not_broke
· hace6h
Los contratos inteligentes son realmente tan engañosos.
Ver originalesResponder0
LiquidityWizard
· hace7h
teóricamente hablando, los patrones proxy son solo mutaciones de estado azucaradas con un 73.4% más de overhead de gas... smh
Ver originalesResponder0
SchrödingersNode
· hace7h
Otra vez la vieja operación de cambiar la DIRECCIÓN del contrato.
Explicación detallada de la actualización de contratos inteligentes Rust: las mejores prácticas de Ethereum a NEAR
Método de actualización de contratos inteligentes en Rust
Los contratos inteligentes, como una forma de programación, inevitablemente presentarán defectos y vulnerabilidades. A pesar de numerosas pruebas y auditorías, aún pueden surgir problemas. Una vez que las vulnerabilidades son explotadas por un atacante, pueden resultar en 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; en este artículo se presentará la forma de actualizar los contratos en Rust.
Métodos de actualización de contratos de Ethereum
Los contratos inteligentes en Ethereum tienen inmutabilidad, no se pueden modificar directamente una vez desplegados. Normalmente se utilizan las siguientes formas de actualizar:
Desplegar un nuevo contrato, modificar la dirección del contrato en la DApp. La desventaja es que es necesario migrar los datos de estado del contrato antiguo.
Arquitectura de separación de datos y lógica. Los datos se almacenan en contratos inteligentes de estado, y la lógica se implementa en otro contrato. Al actualizar, solo es necesario actualizar el contrato de lógica.
Usar contratos inteligentes de proxy. Los contratos inteligentes de proxy almacenan datos y llaman al contrato lógico a través de deleGatecall; durante la actualización, solo es necesario actualizar la dirección del contrato lógico.
Método de actualización de contratos en NEAR
Tomando como ejemplo el proyecto StatusMessage, se presenta el método 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 usar directamente el comando near deploy para redeplegar el nuevo código. Los datos originales se conservarán.
2. La estructura de datos del contrato ha sido modificada
Si se modifica la estructura de datos, volver a desplegar directamente causará que la nueva y la antigua estructura de datos no coincidan, lo que impedirá la lectura normal de los datos.
3. Usar el método Migrate para actualizar
NEAR proporciona el método Migrate para ayudar con la actualización:
Consideraciones de seguridad en la actualización de contratos
A través de un diseño razonable del plan de actualización, se puede lograr la capacidad de actualización del contrato garantizando la seguridad, mejorando así la mantenibilidad a largo plazo del proyecto.