> For the complete documentation index, see [llms.txt](https://docs.revolt.cool/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.revolt.cool/for-developers/contracts.md).

# Contract Reference

## Robinhood Mainnet (Chain ID: 4663)

**Network:** Arbitrum Orbit L2 · **Native currency:** ETH (18 decimals) **RPC:** `https://rpc.mainnet.chain.robinhood.com` · **Explorer:** `https://robinhoodchain.blockscout.com`

### Core deployments

| Contract                | Address                                      | Notes                                                                                             |
| ----------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| **RevoltLauncher**      | `0x452AeB17D922837f4d85AEA74737F48Cbd2936E7` | Instant mode: token factory + permanent LP lock + fee splitter (deploy block `9954191`)           |
| **RevoltCurve**         | `0x6f7EE69Af65f44328D6876bC672f598207e71F6D` | Curve mode: bonding curve x·y=k, 80/20 supply split, graduation at 5 ETH (deploy block `9954386`) |
| **RevoltCurveDeployer** | `0xeF63d222a99a6B9407309b430dAC71b0F7b2dFfC` | Graduation target: mints + locks the Uniswap v3 position, splits post-graduation LP fees 30/70    |

**Curve parameters:** virtual ETH reserve \~1.712 · graduation target 5 ETH raised · trade fee 1% (30% creator / 70% protocol) · listing fee 2% of raised ETH at graduation.

### Uniswap v3 (official Robinhood Chain deployment)

| Contract                   | Address                                      |
| -------------------------- | -------------------------------------------- |
| NonfungiblePositionManager | `0x73991a25c818bf1f1128deaab1492d45638de0d3` |
| SwapRouter02               | `0xcaf681a66d020601342297493863e78c959e5cb2` |
| QuoterV2                   | `0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7` |
| WETH                       | `0x0bd7d308f8e1639fab988df18a8011f41eacad73` |

Source: official Uniswap v3 deployment list for Robinhood Chain (developers.uniswap.org).

### On-chain parameters

**Token:**

* Total supply: `1,000,000,000` (1e27 wei), 18 decimals
* Minted entirely to the launcher at creation; **no mint function, no owner, no taxes**

**Pool:**

* Fee tier: `10000` (1%)
* Initial price: pool initialized at tick `±202600` (\~1.6e-9 ETH/token, \~1.6 ETH starting market cap)
* Liquidity: 100% of supply, single-sided from tick `±202400` to max tick
* LP position: minted to the launcher itself — **no withdraw or transfer function exists**

**Fees:**

* Pool swap fee: 1% (standard Uniswap tier — the only trading cost)
* Fee split on `collectFees`: **30% creator / 70% protocol treasury** (`creatorFeeShareBps = 3000`)
* `collectFees(token)` is permissionless; pays out in both pool assets

### RevoltLauncher — key functions (instant mode)

```solidity
// Create token + pool + locked LP (+ optional dev buy via msg.value)
function createToken(
    string calldata name,     // 1–64 chars
    string calldata symbol,   // 1–16 chars
    string calldata metadata, // JSON {image, description, x, telegram, website}
    uint256 minTokensOut      // slippage guard for the dev buy
) external payable returns (address token);

// Collect pool fees and split creator / treasury — callable by anyone
function collectFees(address token) external returns (uint256 amount0, uint256 amount1);

// Views
function tokenCount() external view returns (uint256);
function priceOf(address token) external view returns (uint256); // wei per whole token
function getTokens(uint256 offset, uint256 limit) external view returns (TokenView[] memory);
function launches(address token) external view returns (address creator, address pool, uint256 positionId, uint64 createdAt);
function metadataOf(address token) external view returns (string memory);
```

### RevoltCurve — key functions (curve mode)

```solidity
// Create token on the curve (+ optional dev buy via msg.value)
function createToken(string calldata name, string calldata symbol, string calldata metadata)
    external payable returns (address token);

// Trade on the curve (until graduation)
function buy(address token, uint256 minTokensOut) external payable;
function sell(address token, uint256 tokenAmount, uint256 minEthOut) external;
function quoteBuy(address token, uint256 ethIn) external view returns (uint256);   // ethIn net of the 1% fee
function quoteSell(address token, uint256 tokensIn) external view returns (uint256); // gross ETH, before the 1% fee

// Creator fees from curve trades (accrued per creator, in ETH)
function creatorFees(address creator) external view returns (uint256);
function claimCreatorFees() external;

// Views
function getTokens(uint256 offset, uint256 limit) external view returns (TokenView[] memory);
// TokenView includes realEth, soldTokens, priceWei, graduated, pool
function curves(address token) external view returns (address creator, uint128 realEth, uint128 soldTokens, uint64 createdAt, bool graduated, address pool);
```

Post-graduation, LP fees are collected on **RevoltCurveDeployer** with the same signature as the launcher: `collectFees(token)` (permissionless, 30/70).

### Events (with topic0, for indexers)

**RevoltLauncher** — index from deploy block `9954191`:

```solidity
event TokenCreated(address indexed token, address indexed creator, string name, string symbol, string metadata, address pool);
// topic0: 0x25e3387f1959862b84ca6797323fe36f435be280536378d84b483a42b421112f
event FeesCollected(address indexed token, address indexed creator, uint256 creatorAmount0, uint256 creatorAmount1, uint256 protocolAmount0, uint256 protocolAmount1);
```

The `pool` in `TokenCreated` is live immediately — swaps are standard Uniswap v3 `Swap` events (topic0 `0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67`).

**RevoltCurve** — index from deploy block `9954386`:

```solidity
event TokenCreated(address indexed token, address indexed creator, string name, string symbol, string metadata);
// topic0: 0xfe210c99153843bc67efa2e9a61ec1d63c505e379b9dcf05a9520e84e36e6063

event Trade(address indexed token, address indexed trader, bool isBuy, uint256 ethAmount, uint256 tokenAmount, uint256 realEth, uint256 soldTokens, uint256 timestamp);
// topic0: 0x2c76e7a47fd53e2854856ac3f0a5f3ee40d15cfaa82266357ea9779c486ab9c3
// one event per curve trade, block timestamp included (no getBlock needed).
// Post-trade spot price (wei per whole token):
//   (1.712e18 + realEth) * 1e18 / (1073.92e24 - soldTokens)

event Graduated(address indexed token, address pool, uint256 ethLiquidity, uint256 tokenLiquidity);
// topic0: 0x18a56450d3c666e2bae9e0829fcada82a9ab0deef6e33c2496752c88d4155c9d
// fires once when the curve fills; switch indexing to `pool` (status: migrated)
```

ABIs: download them from [ABI Files](/for-developers/abi-files.md) — no repository access needed. The REST API (see [API Overview](/for-developers/api.md)) exposes the same data without running an indexer.


---

# 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, and the optional `goal` query parameter:

```
GET https://docs.revolt.cool/for-developers/contracts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
