Estuve probando como implementar las capacidades que tiene el TimelockController. Logré entenderlo usando Remix y luego intenté implementarlo incluyendo pruebas en hardhat. Esto último aún sigo tratando de correr el execute. Pero igual les dejo el contrato de ejemplo y las pruebas unitarias:
- https://github.com/vijoin/OpenZeppelin_Practices/blob/main/contracts/TestTimelockControl.sol
- https://github.com/vijoin/OpenZeppelin_Practices/blob/main/test/TestTimelockControl.js
Algunos puntos importantes que entendí:
- al deployar el contrato se debe pasar arrays vacios para los proposers y los executers
- importante asignar al menos un proposer y un executor
- algunos de los parametros son de tipo 32bytes, por lo que implica una conversion
- el argumento data es un calldata (callback), que se refiere al metodo a invocar lo que implica aplicarle un abiEncoding
- el delay es obligatorio y debe ser mayor o igual al minDelay
- el operationId se puede sacar invocando el hashOperation, aunque tambien se puede obtener de la respuesta
- la operation no se ejecuta sola al cumplirse el tiempo, sino que pasa a un estado Ready y entonces es que está disponible para que el Executor lo ejecute.
- Cuando lean la documentacion del TimelockController, lleguen hasta final donde explican los principales atributos y el ciclo de vida
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.