What Does This Proposal Do?

A proposal's title is a promise; its calldata is what will run. This decoder reads the calls a DAO is about to execute and flags what deserves a second look: changes to the voting rules or the timelock, new Safe signers, ownership and upgrades, delegatecalls, and money leaving the treasury, set against what the treasury holds. Start with one of eight real proposals, or paste your own.

Read a proposal before you vote

Paste a proposal's calldata or its targets, values and calldatas (Tally and Etherscan show them), a Safe transaction, a Lido script or an Aave proposal. Or open a real one.

Where to find a proposal's calldata

Every Governor proposal is created by a transaction that emits a ProposalCreated event listing its targets, values and calldatas. Tally shows them on the proposal's page, and Etherscan shows the event on the transaction's Logs tab: paste the three lists as JSON, {"targets": [...], "values": [...], "calldatas": [...]}, or paste the input data of the propose transaction itself. For a Safe, paste the execTransaction input, or the SafeTx your wallet asks you to sign (to, value, data, operation). For Lido, paste the vote's script, which getVote() on the Aragon Voting contract returns, or the newVote input. For Aave, the proposal only points at payloads; paste the createPayload transaction to see the actions. If you paste bare calldata, give the address it is sent to so tokens and contracts can be named.

The red flags, and why each matters

FlagCalls that raise itWhy read twice
Governance rulessetVotingDelay, setVotingPeriod, setProposalThreshold, updateQuorumNumerator, setQuorum, updateTimelock, a timelock's setDelay or updateDelay, grantRole and revokeRole, a scheduled timelock call, Aragon permissionsThey change how every later vote works: a shorter delay leaves less time to exit before a bad proposal runs, a lower quorum lets fewer tokens decide, a new role holder can queue or cancel what the DAO executes.
Safe signersaddOwnerWithThreshold, removeOwner, swapOwner, changeThreshold, enableModule, setGuardThey change who can move a multisig's funds. A module can execute with no signatures at all (Safe's ModuleManager).
Control and upgradestransferOwnership, setOwner, renounceOwnership, admin changes, upgradeTo and the proxy-admin upgradesWhoever owns a contract can call its owner-only functions; an upgrade replaces the code entirely, so the new implementation is the thing to read.
Treasury outflowsToken transfer, transferFrom, approve, ETH sent with a call, a treasury wallet's or Aragon Finance's paymentCheck the recipient and the amount against the treasury, which the table works out when you fill in the balance. An approval is a standing permission, not a payment, until the spender uses it.
DelegatecallsA Safe transaction or MultiSend entry with operation 1, an Aave payload actionThe called code runs as the caller, with its storage and its funds. Batches (Safe's MultiSend) and Aave payloads use it by design, which is exactly why the code behind them is what to read.

A flag is not a verdict. Most of the examples above are routine and passed: the UNIfication proposal burned 100 million UNI on purpose, Compound's delay change was meant to slow the treasury down, and every Aave proposal runs its payload by delegatecall. The flags say where a proposal touches the levers; the forum thread says why. For how the vote itself is counted, see the DAO voting rules and the vote calculator; for how a proposal travels from forum post to execution, how DeFi protocols are actually governed.

The eight worked examples

Each is the real calldata of a proposal, read from the chain on 19 October 2026. Uniswap's UNIfication (proposal 93) sends 100 million UNI to the dead address, 27% of the 369.7 million UNI its timelock held when the proposal was made, hands the v3 factory to a fee controller and approves 40 million UNI for vesting. Compound's proposal 612 raises its treasury timelock's minimum delay from 2 days to 10 and gives the governor's timelock the executor and canceller roles on it. ENS's EP 6.37 runs a Safe transaction inside a proposal: the Endowment Safe, whose only signer was the DAO's timelock, sends 900,000 USDC to the DAO wallet. ENS's new Security Council gets PROPOSER_ROLE on the DAO's timelock, which on that contract is the role cancelling needs (its cancel is onlyRole(PROPOSER_ROLE), verified source). Arbitrum's Foundation funding pays 230 million ARB, 8.7% of the treasury wallet's ARB at that block. Lido's vote 200 pays 2,500 stETH from the Agent. An Aave proposer Safe creates proposal 534, and payload 476 shows what an Aave proposal really runs: a delegatecall into a payload contract. Aave's proposal also carries ETH, the cancellation fee, which the creator can redeem once the proposal is executed or has ended and which goes to the Aave collector if it is cancelled (GovernanceCore).

What it cannot tell you

It reads calldata; it does not read the chain. It names the contracts in its list (the DAOs' governors, timelocks and treasuries, Safe's MultiSend, fifteen tokens) and leaves others as addresses, so look those up on a block explorer. A function it does not know is shown with its selector and a link to look it up; a contract's own verified code is the better source. Cross-chain messages (Uniswap's and Compound's bridge calls, Arbitrum's sendTxToL1 beyond its first hop) carry calls it may not follow all the way. And it cannot tell you whether a recipient is who the proposal says: that is what the forum thread and the proposer's track record are for. See whether a protocol is really decentralized or just a multisig and how a Safe multisig works.

Other tools