Skip to Content
DevelopersDelayContract reference

Contract reference: Delay Modifier

Source: zodiac-modifier-delay . The Delay Modifier is a Zodiac modifier: modules queue through it, and it forwards to the Safe.

Setup

constructor(address _owner, address _avatar, address _target, uint256 _cooldown, uint256 _expiration) function setUp(bytes memory initParams) public initializer

initParams decodes as (address owner, address avatar, address target, uint256 cooldown, uint256 expiration). The expiration must be 0 or at least 60 seconds. Emits DelaySetup.

Owner functions

FunctionDescription
setTxCooldown(uint256 seconds)Set the wait time between queueing and execution.
setTxExpiration(uint256 seconds)Set the validity window after the cooldown. 0 means no expiration; otherwise at least 60.
setTxNonce(uint256 nonce)Skip queued transactions. The new nonce must be greater than txNonce and at most queueNonce.
enableModule(address) / disableModule(address, address)Manage which callers can queue transactions.

Queue functions (enabled modules)

FunctionDescription
execTransactionFromModule(address to, uint256 value, bytes data, Operation operation)Add the transaction to the queue. Returns true on queueing — not on execution.
execTransactionFromModuleReturnData(...)The same. The return data encodes (queueNonce, txHash, timestamp).

The queue functions return success = true when the transaction is queued. A calling module must not read this as “executed”.

Execution functions (anyone)

FunctionDescription
executeNextTx(address to, uint256 value, bytes data, Operation operation)Execute the head of the queue. Reverts before the cooldown ends, after the expiration, and when the data does not match the stored hash.
skipExpired()Advance txNonce past all expired transactions at the head.

Execution is strictly first-in, first-out. executeNextTx always addresses the transaction at txNonce.

Views and state

GetterReturns
txCooldown() / txExpiration()The current configuration, in seconds.
txNonce()The index of the next transaction to execute.
queueNonce()The index for the next queued transaction.
txHash(uint256) / getTxHash(uint256)The stored hash for a queue index.
txCreatedAt(uint256) / getTxCreatedAt(uint256)The queue timestamp for an index.
getTransactionHash(to, value, data, operation)Computes keccak256(abi.encodePacked(to, value, data, operation)).
avatar() / target() / owner()The wiring of this instance.

Events

event DelaySetup(address indexed initiator, address indexed owner, address indexed avatar, address target); event TransactionAdded(uint256 indexed queueNonce, bytes32 indexed txHash, address to, uint256 value, bytes data, Operation operation); event TxCooldownSet(uint256 cooldown); event TxExpirationSet(uint256 expiration); event TxNonceSet(uint256 nonce);

Mastercopies

VersionAddressState
1.1.10x824175b945838d127c1ca83cbce11d8e44f6df01Current. Deploy this one.
1.1.00x01F8cabB808D7dE0dF4202D4B60C8310d2f1339bVulnerable. Do not use. See Security.
1.0.10xd54895B1121A2eE3f37b502F507631FA1331BED6Old.
1.0.00xD62129BF40CD1694b3d9D9847367783a1A4d5cB4Old.

Addresses are the same on all supported chains. Deploy through the Module Proxy Factory (0x000000000000aDdB49795b0f9bA5BC298cDda236).

The repository’s main branch contains Delay 2.0.0. It adds execTransactionWithSignature, an EIP-712 path that lets a relayer queue a transaction that an enabled module has signed. Version 2.0.0 is not yet in the canonical address registry. This documentation describes the 1.1.1 behavior, which 2.0.0 keeps unchanged.

Audits

ReportScope
G0 Group, September 2021Delay Modifier (PDF )
Gnosis, June 2026The 1.1.1 patch
Last updated on