Skip to content
DCota edited this page Oct 9, 2022 · 1 revision

Que es un contrato actualizable? Xoc es actualizable?

Como se describe en la documentación de OpenZeppelin, "Los contratos inteligentes en Ethereum son inmutables de forma predeterminada. Una vez que los creas, no hay forma de alterarlos, actuando efectivamente como un contrato inquebrantable entre los participantes". Sin embargo, la capacidad de actualización se puede lograr haciendo que los sistemas de contrato sean modulares con la memoria cuidadosamente planificado. Otra forma, más comúnmente utilizada es el patrón proxy.

El patrón de proxy se aprovecha de lo siguiente:

  • Uso del código de operación 'delegatecall'. Esto significa que un contrato puede llamar a la lógica en otro contrato mientras mantiene su contexto. Dicho de otra manera, el contrato puede usar sus variables como memoria pero usar la lógica de otro contrato.

  • Uso de un contrato de implementación con la funcionalidad deseada.

  • Mantener el orden de las variables durante y en cada actualizacion.

La capacidad de actualización en un sistema de contrato inteligente se ha descrito como una característica y al mismo tiempo una vulnerabilidad. Muchos investigadores de seguridad abogan por el uso mínimo de la capacidad de actualización en un sistema de contrato inteligente, porque su uso aumenta la superficie de ataque.

En el sistema Xocolatl solo se ha hecho actualizable el contrato principal ERC20. El razonamiento detrás de esta decisión, es que puede haber en el futuro más funcionalidad que podría integrarse. Un ejemplo de funcionalidad muy útil en el que ERC20 se ha extendido en los últimos 3 años ha sido; capacidad nativa de flashloan, y el uso de permisos ERC2616 para aprobaciones de transferencia.

El contrato ERC20 de Xocolatl no debe limitarse en este momento a las funciones disponibles, y de acuerdo con la gobernanza, puede ser deseable agregar más funciones en el futuro.


What is upgradeability in smart contracts? Is XOC upgradeable?

As described in OpenZeppelin documentation, "Smart contracts in Ethereum are immutable by default. Once you create them there is no way to alter them, effectively acting as an unbreakable contract among participants." However, upgradability can be achieved by circumventing this and making contract systems modular with state carefully planned. Another way, more commonly used is the Proxy-pattern.

The proxy-pattern leverages on the following:

  • Use of the delegate call opcode. This means that a contract can call a function logic in another contract while maintaining its context. In other words, the contract uses its own state variables, but uses logic from a separate contract.
  • Use of an implementation contract with the desired functionality.
  • Maintaining state variable order during updates.

Upgradeability in a smart contract system has both been described as a feature and a bug. Many security researchers advocate for the minimal use of upgradeability in a smart contract system, because its use increase the surface of attack.

In the Xocolatl-system only the main ERC20 contract has been made Upgradeable. The chosen pattern was the proxy, but using latest UUPS contracts from OpenZeppelin. The reasoning behind this decision, is that there may be in the future more functionality that could be integrated. An example of very usefull functionality in which ERC20 has been extended in the past 3 years has been; native flashloan capability, and the use of ERC2616 permits for transfer approvals.

Xocolatl ERC20 contract should not restrict itself at this time to the available functions, and according to governance it may be desirable to add more functions in the future.