> ## Documentation Index
> Fetch the complete documentation index at: https://tech.ramses.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Voter

Central voting, gauge-management, and emissions-routing contract for Ramses.

The current implementation is **address-based**, not NFT-based. Voting power comes from `VoteModule.balanceOf(owner)`, and votes are stored per owner address and per weekly period.

## Core Functions

### vote

```solidity theme={null}
function vote(address owner, address[] calldata pools, uint256[] calldata weights) external
```

Casts or recasts votes for `owner` into the **next** weekly period. The raw `weights` array is normalized against the owner's current `VoteModule` balance, so it does not need to sum to a fixed constant.

The call can be made by:

* `owner`
* An approved delegate/admin recognized by `VoteModule`
* `AccessHub`

### reset

```solidity theme={null}
function reset(address owner) external
```

Clears `owner`'s votes for the upcoming period.

### poke

```solidity theme={null}
function poke(address owner) external
```

Recasts the owner's last vote weights using the owner's current voting power. This is how balance changes in `VoteModule` are propagated into the stored next-period vote weights.

### distribute

```solidity theme={null}
function distribute(address gauge) external
```

Advances emissions and distributes them to a specific gauge. For CL gauges, this flow also triggers protocol-fee collection from the pool through `FeeCollector`.

### createGauge / createCLGauge

```solidity theme={null}
function createGauge(address pool) external returns (address gauge)
function createCLGauge(address tokenA, address tokenB, int24 tickSpacing) external returns (address gauge)
```

Governance-only gauge creation entrypoints for legacy and concentrated-liquidity pools.

### claimIncentives / claimClGaugeRewards / claimRewards

```solidity theme={null}
function claimIncentives(address owner, address[] calldata feeDistributors, address[][] calldata tokens) external
function claimClGaugeRewards(address[] calldata gauges, address[][] calldata tokens, uint256[][] calldata nfpTokenIds) external
function claimRewards(address[] calldata gauges, address[][] calldata tokens) external
```

Helpers for collecting fee-distributor incentives and gauge rewards.

## Key Concepts

* Votes are recorded for `getPeriod() + 1`, not the current period.
* `vote()` internally clears prior next-period votes before writing the new allocation.
* `FeeDistributor` balances are keyed by **owner address**, which is why `Voter` deposits and withdraws vote weight there during `vote()` and `reset()`.
* `distribute()` coordinates both emissions and fee routing, making it one of the central weekly-maintenance flows in the system.
* Whitelisting, gauge lifecycle changes, reward-validator configuration, and other privileged actions are gated through governance and `AccessHub`.
