# Governance Options

This guide explains how to configure different governance options when creating tokens with the Doppler V3 SDK, including using the NoOpGovernanceFactory for gas-efficient deployments.

## Overview

The Doppler V3 SDK supports optional governance with the following models.

1. **"Standard" Governance** - Full on-chain governance with timelock using OpenZeppelin Governor
2. **"No-Op" Governance** - Minimal governance for gas savings (sets governance to `0xdead`)

## Using NoOpGovernanceFactory

The NoOpGovernanceFactory creates tokens without active governance, significantly reducing deployment costs and complexity. This is ideal for projects that don't require on-chain governance.

### Prerequisites

Ensure the NoOpGovernanceFactory is deployed on your target chain. Currently available on:

* **Base Sepolia**: `0x916B8987E4aD325C10d58ED8Dc2036a6FF5EB228`

### Implementation

```typescript
import { ReadWriteFactory, CreateV3PoolParams } from 'doppler-v3-sdk';
import { DOPPLER_V3_ADDRESSES } from 'doppler-v3-sdk';

// Get addresses for your chain
const chainId = 84532; // Base Sepolia
const addresses = DOPPLER_V3_ADDRESSES[chainId];

// Check if NoOpGovernanceFactory is available
if (!addresses.noOpGovernanceFactory) {
  throw new Error('NoOpGovernanceFactory not deployed on this chain');
}

// Create parameters with NoOpGovernanceFactory
const createParams: CreateV3PoolParams = {
  integrator: '0x...', // Your integrator address
  userAddress: '0x...', // User creating the token
  numeraire: '0x...', // Base token (e.g., WETH)
  contracts: {
    tokenFactory: addresses.tokenFactory,
    // Use NoOpGovernanceFactory instead of standard governanceFactory
    governanceFactory: addresses.noOpGovernanceFactory,
    v3Initializer: addresses.v3Initializer,
    liquidityMigrator: addresses.liquidityMigrator,
  },
  tokenConfig: {
    name: 'My Token',
    symbol: 'MTK',
    tokenURI: 'https://example.com/metadata.json',
  },
  vestingConfig: 'default',
  // Optional: Configure V4 migration
  liquidityMigratorData: '0x...', // See V4 migrator docs
};

// Create the factory instance
const factory = new ReadWriteFactory(addresses.airlock, driftClient);

// Encode and create the token
const createData = await factory.encodeCreateData(createParams);
```

## Using Standard Governance

For tokens that require governance functionality:

```typescript
const createParams: CreateV3PoolParams = {
  // ... other parameters ...
  contracts: {
    tokenFactory: addresses.tokenFactory,
    // Use standard governanceFactory
    governanceFactory: addresses.governanceFactory,
    v3Initializer: addresses.v3Initializer,
    liquidityMigrator: addresses.liquidityMigrator,
  },
  // Optional: Customize governance parameters
  governanceConfig: {
    initialVotingDelay: 3600, // 1 hour
    initialVotingPeriod: 172800, // 48 hours
    initialProposalThreshold: 1000000n, // 1% of supply
  },
};
```

## Custom Governance Factory

To use a custom governance factory (must be whitelisted):

```typescript
const createParams: CreateV3PoolParams = {
  // ... other parameters ...
  contracts: {
    tokenFactory: addresses.tokenFactory,
    // Use your custom governance factory address
    governanceFactory: '0xYourCustomGovernanceFactory',
    v3Initializer: addresses.v3Initializer,
    liquidityMigrator: addresses.liquidityMigrator,
  },
};
```

## Fee Distribution

### Standard Governance (90/10 Split)

* 90% of liquidity → Timelock (controlled by governance)
* 10% of liquidity → StreamableFeesLocker (distributed to beneficiaries)

### No-Op Governance (100% Locked)

For permanent liquidity provision, set the recipient to `DEAD_ADDRESS`:

```typescript
import { DEAD_ADDRESS } from "doppler-v3-sdk";

// In no-op governance, all liquidity goes to the locker
const recipient = DEAD_ADDRESS; // 0x000...dEaD
```

## See Also

* [V4 Migrator Guide](/reference/legacy-sdks-and-migration-guides/v3/custom-fees.md) - Configure V4 migration with beneficiaries
* [Token Launch Examples](https://github.com/whetstoneresearch/doppler-docs/blob/main/doppler-v3-sdk-reference/token-launch-examples.md) - Complete examples
* [Contract Addresses](https://github.com/whetstoneresearch/doppler-docs/blob/main/doppler-v3-sdk-reference/contract-addresses.md) - Deployment addresses by chain


---

# Agent Instructions: 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.doppler.lol/reference/legacy-sdks-and-migration-guides/v3/governance-options.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.
