Scoped Proposal Types

Scoped Proposal Types are a powerful tool to add limits on specific actions a proposal in a DAO can take, while forcing specific contract calls to flow through specific proposal types. Instead of allowing a contract call with any value parameter, you can define specific, safe actions that certain proposal types are allowed to perform. Additionally, once a scope is defined, other proposal types are blocked from making any similar call.

What Is a Proposal Type?

A Proposal Type is a template that defines:
  • Voting rules: quorum and approval thresholds
  • Name and description of the type
  • Module (optional): a contract that can exclusively use this type
  • A list of Scopes: rules for what this proposal is allowed to do

What Is a Scope?

A Scope is a rule that says: Each scope is bound to:
  • A contract address
  • A function selector (e.g. transfer(address,uint256))
  • An optional set of parameter rules (with comparisons)
Plus, there is a description for clarity.

Example Use Case

Let’s say your DAO has a proposal type called “Treasury Settings”. You want it to update the budget, but not give it infinite budget.
  1. Create a Proposal Type:
    • Name: Treasury Settings
    • Quorum: 10%
    • Approval Threshold: 60%
  2. Assign a Scope:
    • Contract: Treasury contract
    • Function: updateBudget(uint256)
    • Rule: newBudget < 1,000,000 tokens
Any proposal of this type, would then be limited in it’s ability to invoke that contract’s function, below 1,000,000 token. If not, it’s invalid. Additionally, no other proposal type, could call updateBudget on that contract (unless an additional scope rule was made permitting it).

Admin-Only Tools

Only the Governor admin or a timelock can manage scopes. Available actions:
ActionWho can do it?
Create proposal typeAdmin / Timelock
Assign scopeAdmin / Timelock
Disable scopeAdmin / Timelock
Delete scopeAdmin / Timelock

How Validation Works

When someone submits a proposal:
  1. Each call is inspected
  2. The contract + function is hashed into a scope key
  3. If the key is allowed under the proposal type:
    • Parameters are decoded
    • Comparisons are checked
  4. If everything passes, the proposal is valid

Limits

  • Max 5 scopes per contract/function combo for each proposal type
  • Supported data types:
    • uint
    • address
    • bytes32

Summary

Scoped Proposal Types give DAOs granular control over what governance proposals are allowed to do. They help:
  • Reduce the risk of rogue proposals
  • Enable safe delegation to modules
  • Scale governance safely as your DAO grows
By assigning clear scopes to proposal types, you create permissioned governance, without needing to trust proposal authors.

Who Is This For?

  • DAO Governors and Admins
  • Protocol Engineers
  • Contract Module Builders
  • Anyone defining safe proposal flows