> ## 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.

# XRAM

Transfer-restricted ERC20 governance token used by the Ramses voting system. The current implementation lives in `XRam.sol` and is controlled by `AccessHub`, `Voter`, and `VoteModule`.

## Core Functions

### convertEmissionsToken

```solidity theme={null}
function convertEmissionsToken(uint256 amount) external
```

Transfers `amount` of RAM from the caller, burns the configured slashing penalty, and mints `amount` of xRAM to the caller.

#### Parameters

| Name     | Type    | Description              |
| :------- | :------ | :----------------------- |
| `amount` | uint256 | Amount of RAM to convert |

### exit

```solidity theme={null}
function exit(uint256 amount) external returns (uint256 exitedAmount)
```

Burns xRAM and returns the post-penalty RAM amount to the caller. The contract applies the same slashing formula used on entry and caps the returned amount to the RAM balance currently residing in the xRAM contract.

#### Parameters

| Name     | Type    | Description            |
| :------- | :------ | :--------------------- |
| `amount` | uint256 | Amount of xRAM to burn |

### pause / unpause

```solidity theme={null}
function pause() external
function unpause() external
```

Governance-controlled circuit breakers for conversion, exit, and rebase-related flows.

### setExemption / setExemptionTo

```solidity theme={null}
function setExemption(address[] calldata who, bool[] calldata exempt) external
function setExemptionTo(address[] calldata who, bool[] calldata exempt) external
```

Manages the transfer allowlists used by `_update()`.

### getBalanceResiding

```solidity theme={null}
function getBalanceResiding() external view returns (uint256)
```

Returns the amount of underlying RAM currently held by the xRAM contract.

## Key Concepts

* `XRam` is **not** a freely transferable ERC20. Transfers only succeed when the sender or receiver is exempt, or when the transfer involves recognized gauges or fee distributors.
* `convertEmissionsToken()` mints xRAM 1:1 with the input amount, but it also burns at least 50% of the incoming RAM via `SLASHING_PENALTY`.
* `exit()` burns xRAM and returns the post-penalty RAM amount, which is typically about half of the xRAM burned.
* `rebase()` is still exposed for compatibility, but the current implementation notifies `VoteModule` with `0` rather than distributing a positive rebase amount.
* Voting power comes from staking xRAM in `VoteModule`, not from simply holding xRAM in a wallet.
