# Architecture

<img src="https://188152878-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVVjPYy7k7Ug3jvGdaIFO%2Fuploads%2Fgit-blob-716167728fa20fa51954833246b155a6407c5590%2Fdiagram.svg?alt=media" alt="FPS design architecture" class="gitbook-drawing">

The diagram illustrates the architecture of the Forge Proposal Simulator. It is composed of various components that interact with each other to simulate, execute, and test governance proposals.

## Proposal Generic Contract

At its core, the FPS features a [Proposal.sol](https://github.com/solidity-labs-io/forge-proposal-simulator/blob/main/src/proposals/Proposal.sol) contract that defines [functions](https://docs.soliditylabs.io/forge-proposal-simulator/overview/architecture/proposal-functions) that can be overridden to adapt to specific governance architectures. The `run` function serves as the entry point to execute a proposal using the `forge script`.

## Governance Specific Contracts

FPS supports different Governance types (e.g., Timelock, Multisig, Governor Bravo, OZ Governor) through proposal contract types inheriting from [Proposal.sol](https://github.com/solidity-labs-io/forge-proposal-simulator/blob/main/src/proposals/Proposal.sol), customizing their functions to unique governance requirements. New proposal types can be included to support different governance contracts.

## Proposal Specific Contract

Protocols using FPS must create their own Proposal Specific Contracts, conforming to FPS standards. These contracts override functions relevant to the particular proposal, such as `deploy()` and `preBuildMock()` for proposals involving new contract deployments. For more details, refer to [proposal functions](https://docs.soliditylabs.io/forge-proposal-simulator/overview/architecture/proposal-functions).

{% content-ref url="architecture/proposal-functions" %}
[proposal-functions](https://docs.soliditylabs.io/forge-proposal-simulator/overview/architecture/proposal-functions)
{% endcontent-ref %}

{% content-ref url="architecture/addresses" %}
[addresses](https://docs.soliditylabs.io/forge-proposal-simulator/overview/architecture/addresses)
{% endcontent-ref %}
