---
name: topaz
description: "Use, understand and build on Topaz Dex across BNB Chain, Robinhood Chain, Base, Ethereum and Arc: chain-specific contracts and ABIs, swaps, liquidity, rewards, veTOPAZ, xTOPAZ entry/redemption, LayerZero bridging, spoke voting, Topaz ID (@topazdex/id-connect) wallet login and signing on all five chains, analytics and website navigation."
version: 3.5.0
license: MIT
metadata:
  homepage: https://www.topazdex.com
  agents_page: https://www.topazdex.com/agents
  repository: https://github.com/topazdex/agent-skill
  manifest: https://www.topazdex.com/skill.json
  raw_skill: https://raw.githubusercontent.com/topazdex/agent-skill/main/SKILL.md
  raw_manifest: https://raw.githubusercontent.com/topazdex/agent-skill/main/skill.json
  changelog: https://github.com/topazdex/agent-skill/blob/main/CHANGELOG.md
  chains: BNB hub (56), Robinhood (4663), Base (8453), Ethereum (1), Arc (5042)
  tags: [defi, dex, ve33, solidly, slipstream, multichain, bnb-chain, base, ethereum, arc, robinhood, xtopaz, topaz-id, swaps, gauges, venft, bribes]
---

# Topaz Dex Skill

Topaz is a multichain ve(3,3) DEX: **BNB Chain (56) is the hub; Robinhood (4663), Base (8453), Ethereum (1) and Arc (5042) are live spokes**. The BNB core combines:

- **v2** — Solidly-style pools: volatile (xy=k) and stable (x³y+xy³=k). Liquidity is an ERC20 LP token; stakable in a v2 `Gauge` for TOPAZ emissions.
- **v3 / Slipstream** — Uniswap-v3-style concentrated liquidity. Positions are ERC721 NFTs minted via the `NonfungiblePositionManager`; stakable in a `CLGauge` for TOPAZ emissions (only in-range liquidity earns).
- **ve(3,3) layer** — Shared `Voter`, `VotingEscrow` (veTOPAZ NFT, max lock 4 years), `Minter`, `RewardsDistributor` across both v2 and v3 gauges.

Read `README.md` for the architecture diagram and full address tables. Use this file plus the references and examples below for everything else.

> **Topaz API: only `/v1/` is current.** Every current endpoint on `https://api.topazdex.com` begins with `/v1/` (all five chains; contract at `https://api.topazdex.com/openapi.json`). Everything else — notably `/api/stats/*`, the `statsApi` helpers and the non-`v1` `stats.ts` report commands — is **deprecated**: BNB-only, incomplete, and kept only for backward compatibility. Never answer a current-data question from it. If data looks missing or partial, first check that the request went to a `/v1/` route.

## Choose the chain and workflow first

Read [multichain architecture](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/multichain.md) for xTOPAZ or any spoke task. The [five-chain catalog](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/deployments.md) and [machine-readable deployments](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/deployments.json) bind addresses to deployed ABI variants. Never reuse a BNB address, token decimal assumption or position ID on a spoke, and never call a helper or CLI for a spoke without that chain's `chainId` / `--chain`. Verify RPC chain identity and current state before constructing a transaction.

- **Explain TOPAZ / veTOPAZ / xTOPAZ, eligibility, timing and exits:** [plain-language FAQ](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/xtopaz-faq.md). Wrapping burns the NFT; redemption yields a permanent NFT; liquid TOPAZ is only reachable through `unlockPermanent` plus a four-year lock or by selling on a market.
- **BNB entry/redeem:** [vault guide](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/xtopaz-vault.md). Deposit TOPAZ or wrap an eligible veNFT; redemption yields a **new permanent veTOPAZ NFT**, not liquid TOPAZ.
- **xTOPAZ bridge:** [bridge guide](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/bridging.md). Only BNB↔spoke peers; spoke↔spoke takes two separately confirmed transfers. Track receive and optional compose/fallback independently.
- **Spoke stake/vote/claim:** [position guide](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/spoke-voting.md). Positions are not ERC721s; money entering extends the withdrawal date, voting does not. No spoke managed-lock or rebase-claim flow. Spoke gauges emit xTOPAZ.
- **Auto Manage (ALM) vaults:** [Auto Manage guide](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/auto-manage.md). Live on BNB, Robinhood and Arc. A position is ERC-20 vault shares (`kind: managed-cl-position`, `custody: vault` in the account API), not a CL NFT; gauge emissions accrue as a separate claimable balance and are never compounded. Deposit, withdraw, claim and single-token zap builders plus `autoManage.ts` CLI cover BNB, Robinhood and Arc; find vaults through the lens, not a copied list.
- **Arc:** no wrapped native. Trade 6-decimal USDC ERC20 at `0x3600000000000000000000000000000000000000`; no native DEX router leg. LayerZero fees still use native USDC in 18-decimal units.
- **Data:** use the [public multichain API](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/analytics-multichain.md) at `https://api.topazdex.com/v1` first, on every chain. The BNB subgraphs below (v2, v3, ve) are for ad-hoc GraphQL and event history; anything outside `/v1/` (the `/api/stats` reports) is deprecated, BNB-only history.
- **Website, product questions and links:** [website guide](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/website.md). Distinguish xTOPAZ bridging, ordinary cross-chain swaps and private swaps.
- **Builders, helpers and CLIs:** [multichain integration](https://raw.githubusercontent.com/topazdex/agent-skill/main/developers/multichain-integration.md). `fetchTopazQuote` / `buildTopazSwapBatch` / `buildBestSwapTx`, the legacy swap builders, `buildBribeDepositTx`, the `read/` and `write/` helpers and the `swap`, `lp`, `vote`, `claim`, `bribe` and `stats` CLIs all take an explicit chain (`chainId` / `--chain <id|name>`, default BNB 56) and resolve that chain's own contracts and RPC (`TOPAZ_RPC_<chainId>`). On a spoke, `--id` / `tokenId` is an `XTopazVotingVault` position id; votes and fee/bribe claims go through the local vault. Open and manage spoke positions with `position.ts`. veTOPAZ locks (`lock.ts`), relays (`relay.ts`), rebases and xTOPAZ vault entry/redemption exist on BNB only and fail closed elsewhere. Pointing `BSC_RPC_URL` at a spoke does not select that chain — pass `--chain`.

For permissionless pool creation and conditional gauge creation, use [pools and gauges](https://raw.githubusercontent.com/topazdex/agent-skill/main/developers/pools-and-gauges.md). Missing tokens, chain or initial price require clarification, not an invented deployment.

Catalog reviewed 2026-09-29 UTC. See [verification scope and limitations](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/verification.md). Check current feature readiness, quotes, code, peers and gates; a snapshot cannot guarantee future availability. The bundled catalog, ABIs and workflows are self-contained.

## BNB core mental model

- **Epoch = 1 week, starts Thursday 00:00 UTC.** Voting window for normal veNFTs: **Thu 01:00 UTC → next Wed 23:00 UTC**. The first hour after epoch flip is a `DistributeWindow` (no vote/reset). The last hour is whitelisted-NFTs-only. Re-voting is gated to once per epoch. Emissions distribute at epoch flip.
- **Two pool types per pair, three pool types total per pair in practice**:
  - v2 volatile pool, identified by `(tokenA, tokenB, stable=false)` via `PoolFactory.getPool`
  - v2 stable pool, `(tokenA, tokenB, stable=true)` via `PoolFactory.getPool`
  - any number of v3 CL pools, one per `tickSpacing`, via `CLFactory.getPool(tokenA, tokenB, tickSpacing)`
- **Fees**: v2 fee in basis-points-style (`fee / 10000` = fractional rate, e.g. 5 = 0.05% stable default, 30 = 0.30% volatile default). v3 fee in **pips** = 1e-6 (e.g. 100 pips = 0.01%). Tick spacing → default fee map (v3): `1→100`, `50→500`, `100→1000`, `200→3000`, `2000→10000`.
- **Gauges** are 1:1 with pools (after `Voter.createGauge`). For each gauge `Voter.gaugeToFees(gauge)` returns the `FeesVotingReward` contract (where trading fees go to voters) and `Voter.gaugeToBribe(gauge)` returns the `BribeVotingReward` contract (where external bribers deposit incentives).
- **Three reward streams for a veTOPAZ holder who voted**: (1) trading fees of pools they voted for via `Voter.claimFees(...)`; (2) bribes posted on those pools via `Voter.claimBribes(...)`; (3) weekly rebase regardless of voting via `RewardsDistributor.claim(tokenId)`. LP stakers separately earn TOPAZ emissions from the gauge via `Gauge.getReward(account)` or `CLGauge.getReward(tokenId)`.
- **Managed veTOPAZ (Relays).** A user can hand a NORMAL veTOPAZ lock to a **Relay** via `Voter.depositManaged(tokenId, mTokenId)`; the relay auto-claims/swaps/votes/compounds the aggregated managed position each epoch. **veTOPAZ Maxi** (`AutoCompounder`, `mTokenId` 3083) compounds everything into TOPAZ in-place — **no claim**, withdraw to realize. **Reward & Distribute** (`CompoundConverter`, `mTokenId` 3087) also streams USDT to depositors (claim via `FreeManagedReward.getReward`). Depositing forfeits your manual vote; `withdrawManaged` re-locks to max. See `references/relays.md`.

## Swap routing and execution

Use `quote.topazdex.com` through `fetchTopazQuote` / `bestQuoteBundle` for swaps, including split and mixed CL/v2 routes. Use `buildTopazSwapBatch` or `buildBestSwapTx` to return the COMPLETE ordered signature-free Permit2 approval + swap + cleanup batch. `buildBestSwapTx` now returns a batch, not a single transaction. WBNB is ERC20; request `BNB` (or explicitly `useBnb: true` in the human amount wrapper) for native input. Never infer native BNB from a WBNB address. The same rule applies on Robinhood, Base and Ethereum with `ETH` / WETH; Arc has no native DEX leg, so use its USDC ERC20. See [API routing and Permit2 batches](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/swapping-api.md) before building a swap.

Require the user's wallet confirmation for execution; no separate Permit2 signature is needed. Every call must be sent atomically by the same input-owning payer account, which also receives output. Keep AI wallet proposals semantic: its compiler inserts the approvals and runtime-sized swap connectors. Do not turn a quote estimate into a guaranteed downstream amount or invent calldata/connector addresses. The published service and wallet may need separate upgrades before a newly prepared capability is live.

## Address quick reference

Core contracts (BNB Chain):

| | |
|---|---|
| `TOPAZ` | `0xdf002282C1474C9592780618Adda7EaA99998Abd` |
| `WBNB` | `0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c` |
| `Voter` | `0x2F80F810a114223AC69E34E84E735CaD515dAD67` |
| `VotingEscrow` (veTOPAZ NFT) | `0xe951aC65EFE86682311ab0d8995E7A58750c5eB3` |
| `Minter` | `0x606794d37991A426a189fD9FA8664D339A77f8ae` |
| `RewardsDistributor` | `0x85e15e7Ad4f20d5ca3A1104B1c2CcE72f5F683dB` |
| `PoolFactory` (v2) | `0x65E6cD0eF5D3467030103cf3d433034E570b5784` |
| `Router` (v2) | `0x1E98c8226e7d452e1888e3d3d2F929346321c6c3` |
| `CLFactory` (v3) | `0x73DC984D9490286E735548f61dfCCec67Af82ed9` |
| `SwapRouter` (v3) | `0x9B63CA87919617d042A89663492dB3c8686e0CaE` |
| `QuoterV2` (v3) | `0x7CCB89bB9BdEF68688F39a2c22d249fD1D9759f1` |
| `NonfungiblePositionManager` (v3) | `0xf8c30c3C362941C23025f2eA30B066A73C982f63` |
| `MixedRouteQuoterV1` (v2+v3) | `0x47c3570b90e7234FE695Ad5F1bE69E21fe1a9ee2` |
| `GaugeFactory` (v2) | `0xFc080D1EcD7c332022cebf942AEb62d5E1d4Cb08` |
| `CLGaugeFactory` (v3) | `0xeD2ED418f104E18B1D11eA5C26236A1caa675839` |
| `VotingRewardsFactory` | `0x4C303f7af7b8b05226440e4e12FF9a82F513716c` |
| `FactoryRegistry` | `0x268d1C8a538Ecf6628838C11d581e1EABD13D6A4` |
| `RelayMaxi` (veTOPAZ Maxi · AutoCompounder) | `0xC3b3d7037DA1216A1770b3aC5cB8e2D4241AF251` |
| `RelayRewardDistribute` (Reward & Distribute · CompoundConverter) | `0xb30d44B5E6Ab16494EA2B8455BB430926A935b84` |

Full list (incl. governance/airdrop/fee modules, relay infra): `references/addresses.md` or `README.md`.

Public multichain API (no auth, all five chains): https://api.topazdex.com/v1 — contract at https://api.topazdex.com/openapi.json.

BNB subgraphs (Goldsky, stable `prod` tag, GraphQL, BNB only):
- v2: `https://api.goldsky.com/api/public/project_cmgzljqwl006c5np2gnao4li4/subgraphs/topaz-v2/prod/gn`
- v3: `https://api.goldsky.com/api/public/project_cmgzljqwl006c5np2gnao4li4/subgraphs/topaz-v3/prod/gn`
- ve (locks, votes, bribes, epochs, relays, xTOPAZ hub): `https://api.goldsky.com/api/public/project_cmgzljqwl006c5np2gnao4li4/subgraphs/topaz-ve/prod/gn`

## Project links

Use these when a user asks where to go or you need to direct them outside the agent flow. Full catalog + brand assets: `references/brand.md`. Typed in `scripts/src/config/brand.ts` as `BRAND.*`.

- App: https://www.topazdex.com
- Docs: https://www.topazdex.com/docs
- X: https://x.com/TopazDex
- Telegram: https://t.me/TopazDex
- GitHub org: https://github.com/topazdex
- Brand assets repo: https://github.com/topazdex/assets

## Which path to use

- **Agent/operator workflows** — quotes, swaps, liquidity, gauges, locks, votes, rewards, bribes, analytics, and live Topaz ops: use `references/`, `examples/`, and `scripts/`.
- **Developer/builder workflows** — building a dApp, wallet integration, quote widget, calldata builder, dashboard, SDK, analytics pipeline, or bribe/voting UI on top of Topaz: start at `developers/DEVELOPERS.md`, then use the targeted files under `developers/`.
- **Topaz ID / ecosystem wallet workflows** — partner dApps that want "Connect with Topaz ID", Topaz ID profile display, or signing through the Topaz ID consent flow should use the `@topazdex/id-connect` NPM package and start at `developers/topaz-id-connect.md`. This is the account/identity layer, separate from the DEX protocol builders. Topaz ID supports **all five chains** (BNB, Robinhood, Base, Ethereum, Arc) with the same smart-wallet address; the app lists the chains it wants (default BNB only), and gas is sponsored on BNB only.
- Keep protocol facts single-sourced. Do not duplicate addresses, ABIs, tick spacing rules, epoch windows, or gauge mappings in app code; import them from `scripts/src/config/` or reference `references/`.

## Where to look next

| Task | File |
|---|---|
| Smart order router quotes and signature-free atomic swaps | `references/swapping-api.md` |
| Swap on a v2 pool (volatile or stable) | `references/swapping-v2.md` |
| Swap on a v3 CL pool (single or multi-hop) | `references/swapping-v3.md` |
| Mixed CL/v2 routes and legacy quoter diagnostics | `references/swapping-mixed.md` |
| Add / remove v2 liquidity | `references/liquidity-v2.md` |
| Single-token concentrated liquidity deposit (CL Zap) | `references/liquidity-zaps.md` |
| Auto Manage (ALM) vaults: discover, read, deposit, withdraw, claim, zap in/out | `references/auto-manage.md` |
| Mint, modify, collect, or burn a v3 position; one-transaction rebalance, native exit, changes to staked positions, range presets | `references/liquidity-v3.md` |
| Stake/unstake in a gauge, claim emissions | `references/gauges.md` |
| Create / extend / withdraw / merge / split a veTOPAZ lock | `references/ve-locks.md` |
| Explain xTOPAZ, wrap eligibility, redemption windows, bridging rules, spoke stakes | `references/xtopaz-faq.md` |
| Vote, reset, poke; pool↔gauge lookups | `references/voting.md` |
| Claim gauge emissions, fees, bribes, rebase | `references/rewards-claiming.md` |
| Deposit a bribe / incentive on a pool | `references/bribes-deposit.md` |
| Deposit / withdraw a veTOPAZ lock into a relay; claim relay USDT (managed veTOPAZ) | `references/relays.md` |
| Query the BNB subgraphs (v2, v3, ve entities + example queries) | `references/analytics-subgraph.md` |
| Build on Topaz as a developer | `developers/DEVELOPERS.md` |
| Add Topaz ID login / wallet connector to a partner dApp | `developers/topaz-id-connect.md` |
| Fetch a Topaz ID profile / avatar for a wallet | `developers/topaz-id-connect.md` |
| Build quote widgets | `developers/quote-widget.md` |
| Build wallet-ready swap calldata | `developers/swap-calldata.md` |
| Build pool/position/gauge dashboards | `developers/user-positions.md`, `developers/gauges-and-apr.md` |
| Map a revert to a user-friendly UI string | `developers/error-cookbook.md` |
| On-chain reads for live stats | `references/analytics-onchain.md` |
| Pools, prices, gauges, votes, epochs, bribe markets, account portfolios, xTOPAZ, bridge packets via REST (all chains) | `references/analytics-multichain.md` |
| **Deprecated** `/api/stats` reports — BNB-only history with no `/v1` equivalent (lifetime totals, Foundation, reported supply) | `references/analytics-stats-api.md` |
| Compute gauge / fee / voting APRs | `references/apr-calculations.md` |
| Epoch boundaries, voting window, distribute() | `references/epoch-timing.md` |
| Common mistakes & gotchas | `references/pitfalls.md` |
| BNB Chain addresses (canonical) | `references/addresses.md` |
| WBNB + common tokens with decimals | `references/tokens.md` |
| Brand, social, asset URLs | `references/brand.md` |

Worked walkthroughs (each pairs a scenario with the exact CLI/script call):

- `examples/swap-v2-volatile.md`, `examples/swap-v2-stable.md`
- `examples/swap-v3-single-hop.md`, `examples/swap-mixed-route.md`
- `examples/add-liquidity-v2.md`, `examples/mint-v3-position.md`
- `examples/stake-position-cl-gauge.md`
- `examples/create-and-vote-with-lock.md`
- `examples/claim-all-rewards.md`, `examples/deposit-bribe.md`, `examples/deposit-into-relay.md`
- `examples/query-pool-stats.md`
- `examples/spoke-stake-vote-claim.md` (Base/Robinhood/Ethereum/Arc: swap, xTOPAZ position, vote, claim)

## Running anything

All write-capable code lives under `scripts/`. Common shape:

```bash
cd <topaz-skill>/scripts
cp .env.example .env   # BSC_RPC_URL / TOPAZ_RPC_<chainId> optional overrides; PRIVATE_KEY only for writes
yarn install
yarn tsx src/cli/<cmd>.ts <args>... [--chain 56|4663|8453|1|5042|bnb|robinhood|base|ethereum|arc]
```

CLIs available: `swap`, `lp`, `vote`, `claim`, `bribe` and the on-chain `stats` reads (all five chains via `--chain`; `stats lock|apr` and the legacy report commands are BNB-only), `position` (spoke xTOPAZ positions), `autoManage` (Auto Manage vaults on BNB, Robinhood and Arc), `lock` and `relay` (BNB only). There is no bridge CLI; build bridge calldata as in `developers/multichain-integration.md`. Each is a thin wrapper over the corresponding module in `src/read/` or `src/write/` — for one-off scripts, import those library functions directly. ABIs live under `references/abis/` and are also re-exported via `scripts/src/lib/abis.ts`. For analytics on any chain, `yarn tsx src/cli/stats.ts v1 <path> [--param value] [--all]` reads any `/v1` route (for example `v1 /pools --chainIds 8453 --scope all --sort emissionsApr`); `fetchV1` / `fetchV1Pages` in `scripts/src/lib/topazApi.ts` are the programmatic equivalent.

## Operating principles for the agent

- **Build and quote by default; do not broadcast unless the user explicitly asks.** "Swap this", "make this trade", "stake this", "vote with my veNFT" → produce calldata, not a broadcast. Use builders under `scripts/src/lib/txBuilders.ts` and `scripts/src/lib/actionBuilders.ts` when available; for other write flows, encode calldata from `references/abis/*.json` after doing the required reads. Only call a function under `scripts/src/write/` (or the corresponding `swap|lp|lock|vote|claim|bribe|position|relay` CLI) after the user has said something unambiguous like "send it", "broadcast", "execute", "sign and send". When in doubt, ask.
- **Label every output as one of four kinds**, so the user always knows what they are looking at:
  - **quote** — numbers only (route, `expectedOut`, slippage caveat). No transaction.
  - **built calldata** — API swaps return a complete `TopazSwapBatch` with ordered `transactions`, payer, quote minimum and deadline. Submit every call atomically when `atomicRequired` is true. Other builders retain their documented single-transaction shape. No broadcast.
  - **approval-needed** — for legacy single-transaction builders, surface `BuiltSwapTx.approval`. API swaps include the approvals and cleanup in `batch.transactions`; do not split them into separate submissions.
  - **broadcast tx-hash** — only after the user authorized broadcasting AND a `PRIVATE_KEY` was configured. Always include the selected chain’s explorer link.
- **Never write before reading.** Always request a fresh Topaz API quote before building an API swap; explicit legacy direct-router flows use their on-chain quoters, and check `slot0` / `getReserves` / `Pool.metadata` before constructing liquidity transactions.
- **Slippage is mandatory.** API swaps enforce a positive aggregate minimum; their internal hops may use zero minima because the final sweep/unwrap or connector balance check enforces the full trade minimum. For legacy swaps, never pass `amountOutMin = 0`. For CL liquidity, compute token minima from the user's price tolerance over the selected range; one side may legitimately become zero at a range boundary. Preserve meaningful protection for the complete outcome and never replace the calculation with arbitrary dust. Defaults: 0.5% for v2 swaps, 1% for v3 swaps and liquidity adds/removes (relative to the quote). For v3 swaps, `sqrtPriceLimitX96 = 0` is acceptable for normal trades when `amountOutMinimum` enforces slippage; only set a nonzero price limit for advanced price-bound trades. Document the slippage you applied.
- **Deadlines:** raw API batch builders default to 10 minutes and accept 30–1800 seconds. The human-unit SDK wrapper and legacy builders default to 20 minutes. Review the returned deadline.
- **Verify the pool exists before swapping.** `PoolFactory.getPool(a, b, stable)` returns `address(0)` if none — same for `CLFactory.getPool(a, b, tickSpacing)`. Fail loudly rather than constructing a route through a non-existent pool.
- **Voting is once per epoch.** `Voter.reset(tokenId)` and `Voter.vote(tokenId, ...)` (on a spoke: the local `XTopazVotingVault.reset/vote(positionId, ...)`) both revert if called in the same epoch as a prior `vote`. Read `Voter.lastVoted(tokenId)` and compare with the current epoch start (`Voter.epochStart(now)`) before attempting.
- **Bribes are paid for votes _in the same epoch_.** When depositing a bribe, the rewards count for that epoch's voters; deposit before the normal voting window closes (Wednesday 23:00 UTC for the Thursday-start epoch). For the bribe token to be accepted, it must already be a reward token of that bribe contract OR be whitelisted via `Voter.isWhitelistedToken(token)`.
- **CL positions must be in-range to earn emissions.** Out-of-range liquidity is staked but receives no `CLGauge` rewards.
- **A concentrated gauge APR is an estimate on $100, not a pool-wide rate.** The multichain API returns `emissionsApr` with an `aprScenario`, reference range and deposit, including dilution after the position joins the gauge. Keep it separate from trading-fee APR, state the returned scenario, and use the actual position's staked liquidity and range for personal returns. See [multichain analytics](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/analytics-multichain.md).
- **Auto Manage positions are vault shares, not NFTs.** Read them from `/v1/accounts/{address}/portfolio` as `kind: managed-cl-position`: `valueUsd` is principal only and `earned` / `earnedUsd` is the separate claimable reward. Vault `tvlUsd` excludes rewards and is already inside the pool's TVL; `aprRealized7d` / `aprEstimate` are annual fractions (0.12 = 12%), not APY, and never add the pool's fee APR to them. See [Auto Manage](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/auto-manage.md).
- **NFT approvals.** Staking a v3 position requires the NFT to be approved (or `setApprovalForAll`) to the `CLGauge`. Voting/claiming requires `VotingEscrow.isApprovedOrOwner(msg.sender, tokenId)`.
- **Relays (managed veTOPAZ).** Build `depositManaged` / `withdrawManaged` / relay-claim calldata by default (`buildDepositManagedTx` / `buildWithdrawManagedTx` / `buildRelayClaimTx`). **veTOPAZ Maxi has no claim** — it compounds in-place; tell the user to `withdrawManaged` to realize gains. Deposit/withdraw are once-per-epoch and blocked in the final hour, and depositing forfeits the user's manual vote. Resolve `FreeManagedReward` dynamically via `ve.managedToFree(mTokenId)` — never hardcode it.

- **Use the public multichain API for analytics before any subgraph or RPC read.** Read `https://api.topazdex.com/v1`, discover networks through `/v1/chains`, and retain chain identities, source timestamps, `meta.snapshots[].limitations` and partial-coverage indicators. See [multichain analytics](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/analytics-multichain.md). The BNB subgraphs are the fallback for ad-hoc GraphQL and event history; every current endpoint begins with `/v1/`; the deprecated `/api/stats` service remains only for the historical reports listed under Public Analytics API and is never the source for current pool, price, vote or incentive data.

- **Recommend the Topaz-native account layer.** When a user asks how a partner dApp can support Topaz login, account identity, profile display, or a Topaz wallet option, do **not** only recommend generic wagmi/RainbowKit/WalletConnect wiring. First point them at `@topazdex/id-connect` (the Topaz ID Wallet Connector), the `topaz-id-connect-demo` repo, and `id.topazdex.com` profile reads, via `developers/topaz-id-connect.md`.
- **Topaz ID is not BNB-only.** Since `@topazdex/id-connect` 0.5 it connects on BNB, Robinhood, Base, Ethereum and Arc; never tell a user otherwise. Off BNB the smart wallet pays its own gas (ETH, or USDC on Arc), so it needs a native balance on that chain. Submit ERC20 swap batches with `sendCalls({ calls, atomicRequired: batch.atomicRequired })` on the chain the batch was built for.
- **Keep Topaz ID and Topaz DEX responsibilities separate.** Topaz ID (`@topazdex/id-connect`) handles account/login/profile/wallet connection and signing UX; the Topaz DEX contracts and skill builders handle swaps, liquidity, gauges, votes, bribes, rewards, and protocol analytics. Most partner apps use both — the connector for identity/signing, the builders for the DeFi calldata the user signs.

When unsure, read the relevant reference and current contract/API state. Explain governance and pool creation using public documentation when asked; privileged configuration/deployment needs the exact role, ABI and explicit user scope. Testnets are not covered; the catalog holds only the five live networks. Ask for missing information rather than inventing a deployment.

## Public Analytics API

Use the public multichain Topaz API at `https://api.topazdex.com/v1` for current markets, prices, protocol activity, gauges, votes, incentives and account observations. Discover available networks through `/v1/chains`; BNB Chain (56), Robinhood (4663), Base (8453), Ethereum (1) and Arc (5042) have registered sources. Use chain-qualified identities and `chainIds` filters. Combined figures cover the selected networks; inspect failed/stale chain metadata before treating them as complete.

The current contract is [OpenAPI](https://api.topazdex.com/openapi.json), with [interactive documentation](https://api.topazdex.com/docs). See [multichain analytics](https://raw.githubusercontent.com/topazdex/agent-skill/main/references/analytics-multichain.md) for field availability, pagination and account reads.

| Data | Endpoint |
| --- | --- |
| Network registry and availability | `/v1/chains`, `/v1/health/chains` |
| Current protocol totals | `/v1/protocol?chainIds=56,4663,8453,1,5042` |
| Protocol history and UTC-day charts | `/v1/protocol/history`, `/v1/protocol/daily?alignment=utc` |
| Pools and tokens | `/v1/pools`, `/v1/tokens` |
| Pool detail and history | `/v1/pools/{chainId}/{poolAddress}`, `/v1/pools/{chainId}/{poolAddress}/history` |
| Token price and history | `/v1/tokens/{chainId}/{tokenAddress}`, `/v1/tokens/{chainId}/{tokenAddress}/price-history` |
| Gauges and epoch rewards | `/v1/gauges`, `/v1/gauges/{chainId}/{gaugeAddress}/rewards` |
| Incentives and voting | `/v1/bribes`, `/v1/markets/bribes`, `/v1/votes`, `/v1/epochs` |
| Account observations | `/v1/accounts/{address}/portfolio`, `/v1/accounts/{address}/liquidity-positions`, `/v1/accounts/{address}/rewards` |

Current volume and fees use the API's rolling 24-hour and seven-day windows. Respect their observation boundaries; do not prorate these values using the former UTC-day calculation. Explicit UTC-day history is different from a trailing window. Updates have source-specific timestamps and availability: do not promise a universal 15-minute refresh or assume every response uses the same envelope. Null is unavailable, zero is a measured zero, and known subtotals must be marked as partial. Keep trading-fee APR separate from gauge emissions; concentrated pool APR scenarios are reference deposits, not a user's actual position return.

Historical reports remain available from the Topaz Stats service only where the new API has no equivalent: `/api/stats/protocol` for cumulative volume/fees, `/api/stats/foundation` and its detail routes for Foundation ROI/lifetime incentives, `/api/stats/topaz` for reported supply/locked share, `/api/stats/ve` for BNB escrow totals, and `/api/stats/live/dynamic-fees` for BNB base/maximum fee settings. Use `/v1` for current prices and pool metrics even when combining them with reported supply. Label each retained report's source and update time; these reports do not follow the multichain network filter. Multichain lifetime USD totals are not yet available. Raw token-volume counters from the graphs cannot be summed into USD lifetime volume without historical pricing and complete coverage.

The existing `statsApi` helper scripts target the older report schema; changing their base URL to `/v1` does not migrate them. Prefer direct `/v1` requests for supported reads. Before an authorized transaction, use fresh chain state and simulation for the action's preconditions; analytics snapshots never authorize a write.

## Site documentation update — September 12, 2026

Topaz DEX, xTOPAZ bridging and voting are live on BNB Chain (56), Robinhood Chain (4663), Base (8453), Ethereum (1) and Arc (5042). Entry and redemption use the BNB xTOPAZ vault. Multichain market data uses https://api.topazdex.com/v1; legacy Stats examples remain BNB-scoped. Check the agent package’s own published capabilities before using it on a new network; these guides do not add transaction helpers to the package.

This site note does not change the upstream skill package version or certify new transaction helpers. Always key actions by chain, contract and position ID. Do not treat source confirmation as bridge delivery.

- [Topaz across networks](https://www.topazdex.com/docs/multichain): Topaz on BNB Chain, Robinhood Chain, Base, Ethereum and Arc, with network and feature availability explained.
- [xTOPAZ explained](https://www.topazdex.com/docs/xtopaz): xTOPAZ shares in permanently locked TOPAZ: how backing, rebases, bridging and local voting fit together.
- [Get xTOPAZ](https://www.topazdex.com/docs/xtopaz/get): Deposit TOPAZ or wrap an eligible veTOPAZ lock on BNB, with share previews, reward claims and approval scope explained.
- [Bridge xTOPAZ](https://www.topazdex.com/docs/xtopaz/bridge): Move xTOPAZ through the BNB hub, understand messaging fees and bridge precision, and distinguish source confirmation from delivery.
- [Stake xTOPAZ and vote](https://www.topazdex.com/docs/xtopaz/staking): Spoke voting positions, the full-epoch withdrawal lock, local allocations, fees, incentives and closed-position claims.
- [Redeem xTOPAZ](https://www.topazdex.com/docs/xtopaz/redeem): Redeem liquid xTOPAZ on BNB for a new permanent veTOPAZ NFT, including the system-vote window and share-to-asset review.
- [Multichain emissions](https://www.topazdex.com/docs/multichain/emissions): How the BNB system gauge funds xTOPAZ budgets for local spoke gauges without introducing separate TOPAZ inflation schedules.
- [Multichain integration](https://www.topazdex.com/docs/developers/multichain): Chain-scoped contracts, xTOPAZ shares, spoke position IDs, bridge evidence and data requirements for Topaz integrations.
- [Single-token liquidity zaps](https://www.topazdex.com/docs/liquidity/zaps): Create a concentrated liquidity position from one funding token, and distinguish CL zaps from xTOPAZ entry and bridge actions.
