Timelock

Explicación

Un contrato inteligente de bloqueo de tiempo introduce un mecanismo de retraso para ejecutar llamadas a funciones en otros contratos inteligentes. Establece un retraso de tiempo mínimo predefinido antes de que se pueda ejecutar una operación programada.

Si bien Timelock no es estrictamente un contrato MultiSig/Voting, se alinea estrechamente con los principios de los contratos que cumplen con las especificaciones CW3. En lugar de una ejecución inmediata, las direcciones solo pueden proponer o programar operaciones, que luego sufren un retraso antes de que se permita la ejecución final.

Creación de instancias

Al implementar el contrato Timelock, puede configurar: Plazo mínimo y direcciones para actuar como Administradores y Proponentes. Los proponentes sólo podrán programar operaciones si su tiempo de ejecución excede el retraso establecido.

Administradores:

Los administradores manejan la configuración inicial y garantizan la compatibilidad con posibles contratos de destino. De forma predeterminada, el iniciador del contrato se convierte en administrador si no se proporcionan otras direcciones. Después de la configuración, los administradores pueden congelar el Timelock, haciéndolo inmutable. Esta acción es irrevocable y puede inutilizar el contrato.

Proponentes

Los proponentes programan operaciones que se ejecutarán después del retraso. Asegúrese de que el contrato Timelock tenga los permisos necesarios en los contratos de destino. Especifique las direcciones de los ejecutores responsables de la ejecución de la operación final en el contrato de destino. Si no se especifica ningún ejecutor, cualquier dirección se puede ejecutar una vez que llegue el momento.

Info

La programación no garantiza la ejecución. Las operaciones programadas pueden ser canceladas por el proponente antes de su ejecución. Por tanto, elegir a los proponentes es crucial.

InstantiateMsg

pub struct InstantiateMsg {
  pub admins: Option<Vec<String>>,
  pub proposers: Vec<String>,
  pub min_delay: Duration,
}
Query
pub enum QueryMsg {
  GetOperationStatus {
    operation_id: Uint64,
  },
  GetExecutionTime {
    operation_id: Uint64,
  },
  GetAdmins {},
  GetOperations {
    start_after: Option<u64>,
    limit: Option<u32>,
  },
  GetMinDelay {},
  GetProposers {},
  GetExecutors {
    operation_id: Uint64,
  },
}

ExecuteMsg

Ejemplo

Para crear un contrato de bloqueo de tiempo con CosmWasm, puede crear los siguientes archivos: lib.rs contract.rs msg.rs error.rs state.rs

lib.rs

contract.rs

msg.rs

error.rs

state.rs

Last updated