Governance Operations
Every governance action — registering measurements, revoking access, upgrading contracts — follows the same pattern: propose, collect signatures, wait for timelock, execute. This page walks through that pattern step by step.Prerequisites
- Access to a signer wallet in the GovernanceSafe
- The Safe web interface (https://app.safe.global) or Safe CLI
- Understanding of the governance model — see On-chain Governance Model
Creating a Governance Proposal
All governance changes start as a transaction submitted to the GovernanceSafe.Via Safe Web Interface
- Go to https://app.safe.global and connect your signer wallet
- Select your governance Safe
- Click “New Transaction”
- Choose the transaction type:
- Contract interaction — Call a function on DstackKms, DstackApp, or other contracts
- Transfer — Send funds (if needed for gas or contract operations)
- Raw transaction — For complex multi-call transactions
Common Governance Actions
Example: Register a New Measurement
- New Transaction → Contract interaction
- Select
DstackKmscontract - Select
addMeasurement(bytes32)function - Enter the measurement hash:
0x1234abcd... - Click “Create”
- The transaction enters the Safe queue
Multisig Signing and Approval
After a transaction is created, it must be approved by enough signers to meet the threshold.Approving a Transaction
- Each signer connects to the Safe web interface
- Opens the pending transaction
- Reviews:
- Target contract address
- Function name and parameters
- Simulation result (if available)
- Clicks “Confirm” (signs with their wallet)
Tracking Approval Progress
The Safe interface shows:- Number of confirmations collected
- Required threshold (e.g., “3 of 5 confirmations”)
- Status: Pending / Awaiting execution / Executed
Rejecting a Transaction
If a signer disagrees with a proposal, they should:- Not sign the transaction
- Communicate concerns to other signers
- If the transaction has already been approved, wait for the timelock — there is no “cancel” after execution
Timelock
After the required number of signatures is collected, the transaction enters the Timelock queue.How It Works
- The transaction is queued with a mandatory delay
- No one can execute the transaction until the delay expires
- During the delay, anyone can review the transaction on-chain
- After the delay, any authorized address (typically a signer) can execute it
Timelock Duration
Monitoring the Timelock
- Safe web interface: Shows the queue position and remaining time
- Block explorer: Look for the Timelock contract’s
QueuedTransactionsevent
Execution
After the timelock expires:- Open the Safe web interface
- Find the transaction (status: “Ready to execute”)
- Click “Execute”
- Confirm the transaction in your wallet
- The transaction is submitted on-chain
Emergency Operations
Revoke a Compromised Measurement
If you discover that a measurement is compromised:- Draft a transaction to call
DstackKms.removeOsImageHash(bytes32)with the compromised hash - Submit to the Safe for priority approval
- Collect signatures as quickly as possible
- Wait for the timelock — this cannot be bypassed
- Execute after the delay
Important: The timelock cannot be skipped, even in emergencies. This is by design — it prevents covert changes. Plan your incident response to account for the delay.
Replace a Signer
If a signer key is compromised or a signer needs to be replaced:- Draft a transaction to call
Safe.addOwner(address)andSafe.removeOwner(address, address) - Submit for multisig approval
- Wait for timelock
- Execute
Governance Health Check
Periodically verify the health of your governance setup:Common Issues
Next Steps
- Register Workload Measurements — Most common governance action
- Deploy On-chain KMS Smart Contracts — Initial contract setup
- Concept: Governance — Understand the governance model

