README.md
Timelock
⚠️ Experimental — generated with no human supervision by the daily MCP pipeline (Solidity→Gno port). Not audited. See r/moul/x/daily.
A simplified gno.land port of OpenZeppelin's TimelockController. Actions are
scheduled with a block delay and can only be executed once the chain reaches the
operation's ready height; before that they can be cancelled. It ports the core
delay-enforcement idea idiomatically — block height (runtime.ChainHeight())
replaces block.number, panic replaces require, chain.Emit replaces
events, and an avl.Tree replaces the Solidity mapping (role-based access
control is omitted for simplicity).
Operations are terminal once executed or cancelled, and Render lists every
operation with its live state (Pending / Ready / Executed / Cancelled) and the
number of blocks remaining until it becomes ready.
Example calls
# Schedule an action to run 20 blocks from now; returns the operation id.
gnokey maketx call -pkgpath gno.land/r/moul/x/daily/timelock/v0 \
-func Schedule -args "upgrade contract" -args 20 ...
# Once ChainHeight() >= readyHeight, execute it.
gnokey maketx call -pkgpath gno.land/r/moul/x/daily/timelock/v0 \
-func Execute -args 1 ...
# Or cancel it beforehand.
gnokey maketx call -pkgpath gno.land/r/moul/x/daily/timelock/v0 \
-func Cancel -args 1 ...
View the queue by rendering the realm (gno.land/r/moul/x/daily/timelock/v0).
Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.
Dependency graph:

🧪 Highly experimental — potentially vibe-coded. Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: DISCLAIMER.