> For the complete documentation index, see [llms.txt](https://docs.verifi.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verifi.network/protocol/proposal-validation-strategies.md).

# Proposal validation strategies

**Proposal validation strategy is used to determine whether a particular `author` is allowed to create a proposal.**

Each Space has to set a proposal validation strategy which consists of an address and a set of `params` that are stored in the space. These strategies should have the following interface:

```solidity
function validate(address author, bytes calldata params, bytes calldata userParams) external returns (bool);
```

* `author`: The author of the proposal.
* `params`: Parameter array set in the space contract that is the same for every user of the Strategy.
* `userParams`: Parameter array submitted by the `author` when they create a proposal, and can therefore be different for each user.

There is no requirement to use either of these parameter arrays in your strategy, in which case you can just pass an empty array.

DAOs are free to write their own custom strategies that suit their own needs however we provide the following approaches:

### Proposition power

A strategy that validates an `author` to create a proposal if their `propositionPower` calculated from a set of Voting strategies exceeds a `proposalThreshold` value. It means that if the proposal threshold is set to `5`, the author needs to have at least `5` Proposition power to create a proposal. This strategy uses the same logic as [Voting Strategies](/protocol/proposal-validation-strategies.md), so refer to that section for more information.

When calling this strategy, `params` should be:

```solidity
uint256 proposalThreshold = ...
Strategy[] allowedStrategies ...
params = abi.encode(proposalThreshold, allowedStrategies);
```

`userParams` should contain the indexed strategies that the `author` has power with:

```solidity
IndexedStrategy[] userStrategies = ...
userParams = abi.encode(userStrategies);
```

### Active proposal limiter

A strategy that validates an `author` to create a proposal if the `author` has not exceeded a limit of `maxActiveProposals`.

Each time an `author` creates a proposal, a counter is incremented up to a limit of `maxActiveProposals`. After this point, no more proposals can be created until a `cooldown` period has elapsed since the most recent proposal they created.

Using this strategy can help to prevent proposal creation spam in your space.

### And more!

These strategies can be combined and extended to provide flexible Proposal validation mechanisms. The interface for Proposal validation strategies can be found [here](https://github.com/verifi-labs/evm/blob/main/src/interfaces/IProposalValidationStrategy.sol).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.verifi.network/protocol/proposal-validation-strategies.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
