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

# Deployment Addresses

Deployed NFTX v4 contract addresses on Ethereum Mainnet, Base Mainnet, Arbitrum One, Ink, Arc, Robinhood Chain, Ethereum Sepolia, Robinhood Chain Testnet, and the earlier Base deployments.

For enforced creator-token collections, use the [Creator Token Approvals](/contracts/creator-token-approvals.md) guide to identify which addresses the collection team must allow as NFT operators.

NFTX v4 is live on eight chains: **Ethereum Mainnet** (chain ID `1`), **Base Mainnet** (`8453`), **Arbitrum One** (`42161`), **Ink** (`57073`), **Arc** (`5042`), **Robinhood Chain** (`4663`), **Ethereum Sepolia** (`11155111`) and **Robinhood Chain Testnet** (`46630`). Addresses below are taken directly from the deployment records in the Contracts repository (`deployments/deployment-<chainId>.md`), which are the source of truth.

Those eight chains share one address book. Every contract is deployed through CreateX's CREATE3 from the same deployer under the same salt namespace, and a CREATE3 address derives from those three inputs alone — not from the creation code, the constructor arguments, or the chain ID. So the `Locker` you integrate against on Robinhood Chain carries the same address as the one on Mainnet.

Base Mainnet joined that address book on 18 September 2026, when it was redeployed onto the current generation. The deployment it replaced, and Base Sepolia, are listed at the end. They are an earlier generation of the protocol, deployed under a different salt namespace, so they share none of those addresses and are not served by the API.

Three addresses per chain fall outside that guarantee, and all three are external to the deployment: the Uniswap V4 `PoolManager` and `PositionManager`, which each chain deploys for itself, and `flETH` on the mainnets, which is deployed separately from the protocol. The testnets have no canonical flETH, so the deploy script ships a `FlETHMock` — and because that one *is* CREATE3-derived, it carries the same address on both. Arc has no flETH at all: its pools quote in USDC, which is a system contract there.

One protocol contract is an exception too: `NFTXZap` on Base Mainnet sits at a different address from the other chains, for the reason given in that chain's section.

{% hint style="warning" %}
Always confirm against the on-chain record before integrating.
{% endhint %}

## Ethereum Mainnet (chain `1`)

### Protocol contracts

| Contract                              | Address                                      |
| ------------------------------------- | -------------------------------------------- |
| `Locker`                              | `0xb4C5b5235b98114E9DC227b54e088C11680b2385` |
| Launch Gate (`WhiteGlove`)            | `0xDB25A2324D2243B9624b620a33C80EfF12EC7A89` |
| `Listings`                            | `0x11F09e7eeD242FAd875D3565B3D9CA8AADE445ae` |
| `NFTXV4Hook`                          | `0xaa49ADaDD33c5E953b645567AFb10CBbba63afC4` |
| `NFTXFlexHook`                        | `0xC26A5Cb51b1818F62a4C6693a9a1feDB3340efc4` |
| `OpenPairTokenWhitelist`              | `0x0A97DDb5d5B96ed0E9E014ced7bC7AD20b8Df494` |
| `Notifier`                            | `0x925e3415E35C0e8a4665691B89c1564b94fEDD1b` |
| `LockerManager`                       | `0xFadAC7b454971420b90091AB5807Eb8542b77886` |
| `TaxCalculator`                       | `0x7592380231c49CA44b6340327D0c4a03C0380459` |
| `CollectionToken` (implementation)    | `0x901124cb73e1E996280f9d763C7EC8bB3D764ba6` |
| `flETH` (native token)                | `0x000000000bB1f9944965c64066D10038a84F9af2` |
| `ProtocolFeeReceiver`                 | `0x1a18ab9c51CBb1EbB60a6f0D13d594F78a351559` |
| `CollectionShutdown`                  | `0x28bA2f2A1E38B4547b39675D8E1d96A016e626fF` |
| `LinearRangeCurve`                    | `0x0aBBeFaB8904cd3Cd478d376AD282f796056d95d` |
| `NFTXZap`                             | `0x000000144106C1BfC69fBbD04D56220e1A0A9A3C` |
| `MigratorZap` (Ethereum Mainnet only) | `0x08222EA6aBe9111b77cf006Dc7F0a7c71fcCF390` |

`NFTXFlexHook` and `OpenPairTokenWhitelist` are the [flex pools](/how-it-works/flex-pools.md) deployment (2026-09-08, block `25933487`). They are live on Ethereum Mainnet first; the other chains above are not yet deployed, and when they are, CREATE3 gives them these same two addresses. See the [NFTX Flex Hook](/contracts/nftx-flex-hook.md) reference.

### External references (Uniswap V4)

NFTX v4 builds on Uniswap V4. The pool infrastructure it integrates with:

| Contract                     | Address                                      |
| ---------------------------- | -------------------------------------------- |
| Uniswap V4 `PoolManager`     | `0x000000000004444c5dc75cB358380D2e3dE08A90` |
| Uniswap V4 `PositionManager` | `0xbD216513d74C8cf14cf4747E6AaA6420FF64ee9e` |

## Base Mainnet (chain `8453`)

Base is an OP-stack chain with ETH as its native currency. It was redeployed onto the current generation on 18 September 2026 (first transaction in block `51,475,463`) and runs the same address book as Ethereum Mainnet. Four things set it apart from the other chains on that book:

* **`CollectionShutdown` is present.** Sudoswap's `PairFactory` exists on Base, so `CollectionShutdown` and `LinearRangeCurve` are both deployed, as they are on Ethereum Mainnet and unlike on Arbitrum One, Ink and Robinhood Chain.
* **`NFTXZap` has a different address.** On Base it is `0xDf288b66a77f25197544877eaF4626d7E64cb5A8`, not the `0x0000001441…9A3C` you will find on the other chains. A CREATE3 address does not depend on the code deployed to it, and on Base this one carries the current zap — creator royalties and native payments included. Do not assume the zap address carries across chains; read it from the table for the chain you are on.
* **The price oracle is seeded for two-second blocks.** Each new pool starts with 300 observation slots, a guaranteed price window of roughly ten minutes. Launches grow that to 901 slots, which is thirty minutes.
* **The contracts are still owned by the deployer** (`0xB8A70b4d1547bf6193bd67A73F4F98ea9FD0A973`), not the Labs multisig. The `WhiteGlove` gate admits only its own owner, so curated launches run before ownership moves.

`flETH` here is the canonical Flayer deployment for the chain, and predates this redeploy.

### Protocol contracts

| Contract                             | Address                                      |
| ------------------------------------ | -------------------------------------------- |
| `Locker`                             | `0xb4C5b5235b98114E9DC227b54e088C11680b2385` |
| Launch Gate (`WhiteGlove`, attached) | `0xDB25A2324D2243B9624b620a33C80EfF12EC7A89` |
| Launch Gate (`Public`, unattached)   | `0x8b97Df0d72482f073D9EFb3ad5B534fCd55D735B` |
| `Listings`                           | `0x11F09e7eeD242FAd875D3565B3D9CA8AADE445ae` |
| `NFTXV4Hook`                         | `0xaa49ADaDD33c5E953b645567AFb10CBbba63afC4` |
| `Notifier`                           | `0x925e3415E35C0e8a4665691B89c1564b94fEDD1b` |
| `LockerManager`                      | `0xFadAC7b454971420b90091AB5807Eb8542b77886` |
| `TaxCalculator`                      | `0x7592380231c49CA44b6340327D0c4a03C0380459` |
| `CollectionToken` (implementation)   | `0x901124cb73e1E996280f9d763C7EC8bB3D764ba6` |
| `flETH` (native token)               | `0x000000000D564D5be76f7f0d28fE52605afC7Cf8` |
| `ProtocolFeeReceiver`                | `0x1a18ab9c51CBb1EbB60a6f0D13d594F78a351559` |
| `CollectionShutdown`                 | `0x28bA2f2A1E38B4547b39675D8E1d96A016e626fF` |
| `LinearRangeCurve`                   | `0x0aBBeFaB8904cd3Cd478d376AD282f796056d95d` |
| `NFTXZap`                            | `0xDf288b66a77f25197544877eaF4626d7E64cb5A8` |

The `Locker` is attached to the `WhiteGlove` gate; the `Public` gate is deployed but detached. All thirteen contracts are verified on [Basescan](https://basescan.org/address/0xb4C5b5235b98114E9DC227b54e088C11680b2385).

### Route 24 card wrappers

Base is the first chain to carry the Route 24 card wrappers. Route 24 bridges physically backed trading cards from Courtyard into a single ERC-721 per chain, and an NFTX collection is keyed by contract address, so one *set* of cards has no address of its own to build a collection on. A `Route24CardWrapper` supplies one: it admits a bridged card only when the card's on-chain Route 24 attestation matches the set, and releases it again to whoever holds the wrapped token, with no condition attached to the way out.

| Contract                                                              | Address                                      |
| --------------------------------------------------------------------- | -------------------------------------------- |
| `Route24WrapperFactory`                                               | `0x61046e1d979FFf182f54d9f1C9682391b629B0dD` |
| `Route24CardWrapper` (implementation)                                 | `0x51257f03DE422A3dC39eE3fE78cf44Ed42981d20` |
| `Route24TraitSource`                                                  | `0x6299e2C1d638c395c962FaB40655dC55CEF6F827` |
| `Route24CardWrapper`: Prismatic Evolutions Booster Pack (`PRISMATIC`) | `0x2c1523aA50475EECc35d57538E25fadc2e4E562a` |
| `CollectionToken`: `PRISMATIC`                                        | `0x8b3Bc6942D6823a8022605648b671A2FeB954800` |

The factory, the implementation and the trait source are CREATE3 deployments, so they will carry these addresses on any other chain they reach. A wrapper's address is different in kind: it is derived from the bridged collection and the set's criteria, so it is specific to the set it serves. Authenticate a wrapper through the factory — `isWrapper(wrapper)` must hold — and never by its bytecode, which every wrapper shares.

The wrappers read from Route 24's own contracts, which are external to this deployment:

| Contract                                             | Address                                      |
| ---------------------------------------------------- | -------------------------------------------- |
| Route 24 bridged Courtyard collection (`wCOURTYARD`) | `0x5B43182d0A85ee832F6B50549c65d357878D18F0` |
| Route 24 `CardAttestationResolver`                   | `0xe8ed98946A4bc9D93cE7992e570a941Cb8E73f17` |

The `PRISMATIC` wrapper is the first Route 24 set with an NFTX collection over it, launched on 18 September 2026. It admits a bridged card when Route 24 attests it as sealed product (`productType` `3`), ungraded (`grade` `0`), from set `sv8pt5`, in English (`language` `en`). The collection opened with one pack priced at 17.20 USD — `0.006659` ETH at the time — paired against ETH across the full range, in pool `0xce6fa2a33e826d01a615086e6943d8f1da1caf56f76468af8968193418ceee4c`.

{% hint style="info" %}
The set's criteria do not name the product, so any sealed English Prismatic Evolutions product Route 24 attests can be wrapped into it, not only single booster packs. A single pack is the cheapest of those, so that is the floor the collection tracks — wrapping anything worth more means selling it at the pack's price.
{% endhint %}

An earlier wrapper for the same set, `PRISM` (`0x80Ba5cD66E75428CC581f1c0b4139b5fB95fE0A7`), also required a matching card name. It is deployed and will still wrap a card, but no collection was created over it and none will be: build against `PRISMATIC`.

### External references (Uniswap V4)

| Contract                     | Address                                      |
| ---------------------------- | -------------------------------------------- |
| Uniswap V4 `PoolManager`     | `0x498581fF718922c3f8e6A244956aF099B2652b2b` |
| Uniswap V4 `PositionManager` | `0x7C5f5A4bBd8fD63184577525326123B519429bDc` |

{% hint style="warning" %}
Base is deployed but not yet served. The [NFTX v4 API](/api-reference/api-reference.md) and the subgraph do not index chain `8453` yet, so reads for Base have to go to the chain directly until they do.
{% endhint %}

## Arbitrum One (chain `42161`)

Arbitrum One runs the same address book as Ethereum Mainnet, and — like Robinhood Chain, which is also an Arbitrum Nitro chain — differs from it in two ways:

* **`CollectionShutdown` is absent.** Shutdown liquidates a vault's NFTs through a Sudoswap `PairFactory`, and Arbitrum One has none — so neither `CollectionShutdown` nor `LinearRangeCurve` is deployed, and collections there cannot be wound down. Every other protocol surface behaves identically.
* **The price oracle is seeded deeper.** Blocks land several times a second, but the oracle stores at most one observation per second, so each new pool is seeded with 512 observation slots rather than Ethereum Mainnet's 32 — a guaranteed price window of roughly 8.5 minutes. Longer windows are bought per pool with `increaseObservationCardinalityNext`, which anyone may call.

`flETH` here is the canonical Flayer deployment for the chain, with its Aave V3 strategy attached: deposited ETH earns yield exactly as it does on Ethereum Mainnet.

### Protocol contracts

| Contract                             | Address                                      |
| ------------------------------------ | -------------------------------------------- |
| `Locker`                             | `0xb4C5b5235b98114E9DC227b54e088C11680b2385` |
| Launch Gate (`WhiteGlove`, attached) | `0xDB25A2324D2243B9624b620a33C80EfF12EC7A89` |
| Launch Gate (`Public`, unattached)   | `0x8b97Df0d72482f073D9EFb3ad5B534fCd55D735B` |
| `Listings`                           | `0x11F09e7eeD242FAd875D3565B3D9CA8AADE445ae` |
| `NFTXV4Hook`                         | `0xaa49ADaDD33c5E953b645567AFb10CBbba63afC4` |
| `Notifier`                           | `0x925e3415E35C0e8a4665691B89c1564b94fEDD1b` |
| `LockerManager`                      | `0xFadAC7b454971420b90091AB5807Eb8542b77886` |
| `TaxCalculator`                      | `0x7592380231c49CA44b6340327D0c4a03C0380459` |
| `CollectionToken` (implementation)   | `0x901124cb73e1E996280f9d763C7EC8bB3D764ba6` |
| `flETH` (native token)               | `0x0000000006E53afede11caeB440B6FFf4398337D` |
| `ProtocolFeeReceiver`                | `0x1a18ab9c51CBb1EbB60a6f0D13d594F78a351559` |
| `NFTXZap`                            | `0x000000144106C1BfC69fBbD04D56220e1A0A9A3C` |

Both launch-gate rows are listed because both contracts exist on-chain. The `Locker` is attached to the `WhiteGlove` gate, which only its owner may launch through; the `Public` gate is deployed but detached, and launching does not consult it.

### External references (Uniswap V4)

Uniswap deploys V4 deterministically on Arbitrum One and Ink, so the `PoolManager` carries the same address on both; only the `PositionManager` differs.

| Contract                     | Address                                      |
| ---------------------------- | -------------------------------------------- |
| Uniswap V4 `PoolManager`     | `0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32` |
| Uniswap V4 `PositionManager` | `0xd88F38F930b7952f2DB2432Cb002E7abbF3dD869` |

{% hint style="info" %}
Arbitrum One is served by both the [NFTX v4 API](/api-reference/api-reference.md) and the subgraph — reach it as `/v1/arbitrum/...` or `/v1/42161/...`.
{% endhint %}

## Ink (chain `57073`)

Ink is an OP-stack chain with ETH as its native currency. It runs the same address book as Ethereum Mainnet and differs from it in the same two ways as Arbitrum One and Robinhood Chain:

* **`CollectionShutdown` is absent.** There is no Sudoswap `PairFactory` on Ink, so neither `CollectionShutdown` nor `LinearRangeCurve` is deployed, and collections there cannot be wound down.
* **The price oracle is seeded deeper.** Ink produces a block every second and the oracle stores at most one observation per second, so each new pool is seeded with 512 observation slots — a guaranteed price window of roughly 8.5 minutes.

`flETH` here is the canonical Flayer deployment for the chain. It carries no yield strategy yet — there is no Aave V3 market on Ink — so it wraps and unwraps ETH one-to-one until one is attached.

### Protocol contracts

| Contract                             | Address                                      |
| ------------------------------------ | -------------------------------------------- |
| `Locker`                             | `0xb4C5b5235b98114E9DC227b54e088C11680b2385` |
| Launch Gate (`WhiteGlove`, attached) | `0xDB25A2324D2243B9624b620a33C80EfF12EC7A89` |
| Launch Gate (`Public`, unattached)   | `0x8b97Df0d72482f073D9EFb3ad5B534fCd55D735B` |
| `Listings`                           | `0x11F09e7eeD242FAd875D3565B3D9CA8AADE445ae` |
| `NFTXV4Hook`                         | `0xaa49ADaDD33c5E953b645567AFb10CBbba63afC4` |
| `Notifier`                           | `0x925e3415E35C0e8a4665691B89c1564b94fEDD1b` |
| `LockerManager`                      | `0xFadAC7b454971420b90091AB5807Eb8542b77886` |
| `TaxCalculator`                      | `0x7592380231c49CA44b6340327D0c4a03C0380459` |
| `CollectionToken` (implementation)   | `0x901124cb73e1E996280f9d763C7EC8bB3D764ba6` |
| `flETH` (native token)               | `0x000000000DD39073Cfc60e7102288ccBd7Bf23fE` |
| `ProtocolFeeReceiver`                | `0x1a18ab9c51CBb1EbB60a6f0D13d594F78a351559` |
| `NFTXZap`                            | `0x000000144106C1BfC69fBbD04D56220e1A0A9A3C` |

As on Arbitrum One, the `Locker` is attached to the `WhiteGlove` gate; the `Public` gate is deployed but detached.

### External references (Uniswap V4)

| Contract                     | Address                                      |
| ---------------------------- | -------------------------------------------- |
| Uniswap V4 `PoolManager`     | `0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32` |
| Uniswap V4 `PositionManager` | `0x1b35d13a2E2528f192637F14B05f0Dc0e7dEB566` |

{% hint style="info" %}
Ink is served by both the [NFTX v4 API](/api-reference/api-reference.md) and the subgraph — reach it as `/v1/ink/...` or `/v1/57073/...`. Ink's block explorer is Blockscout, at [explorer.inkonchain.com](https://explorer.inkonchain.com).
{% endhint %}

## Arc (chain `5042`)

Arc is Circle's USDC-native L1, and the only chain where NFTX pools are not quoted in an ETH-equivalent token. USDC is the native currency — it pays for gas — and it exposes **one balance through two interfaces**: an 18-decimal native interface (`msg.value`, `address.balance`) and a 6-decimal ERC20 interface at `0x3600000000000000000000000000000000000000`. Sending `1e18` natively is the same USDC as a `1e6` ERC20 transfer. Nothing is wrapped, and there is no WETH-style wrapper on Arc because none is needed.

That split is the thing to get right when integrating:

* **Pools, liquidity and quote-token allowances use the 6-decimal ERC20.** A pool balance of `1000000` is one USDC.
* **`NFTXZap` amounts stay 18-decimal native.** `msg.value`, the ETH-named limits and return values, and royalty payments are all in native units. A payment of `1e18` buys with `1e6` ERC20 units; a payment below `1e12` is smaller than one micro-USDC and reverts.
* **Collection tokens are unchanged at 18 decimals**, and `1e18` still redeems one NFT.

Arc otherwise matches Ink and Arbitrum One:

* **`CollectionShutdown` is absent.** There is no Sudoswap `PairFactory` on Arc, so collections there cannot be wound down.
* **The price oracle is seeded deeper.** Arc produces blocks faster than once a second and the oracle stores at most one observation per second, so each new pool is seeded with 512 observation slots.

### Protocol contracts

| Contract                             | Address                                      |
| ------------------------------------ | -------------------------------------------- |
| `Locker`                             | `0xb4C5b5235b98114E9DC227b54e088C11680b2385` |
| Launch Gate (`WhiteGlove`, attached) | `0xDB25A2324D2243B9624b620a33C80EfF12EC7A89` |
| Launch Gate (`Public`, unattached)   | `0x8b97Df0d72482f073D9EFb3ad5B534fCd55D735B` |
| `Listings`                           | `0x11F09e7eeD242FAd875D3565B3D9CA8AADE445ae` |
| `NFTXV4Hook`                         | `0xaa49ADaDD33c5E953b645567AFb10CBbba63afC4` |
| `Notifier`                           | `0x925e3415E35C0e8a4665691B89c1564b94fEDD1b` |
| `LockerManager`                      | `0xFadAC7b454971420b90091AB5807Eb8542b77886` |
| `TaxCalculator`                      | `0x7592380231c49CA44b6340327D0c4a03C0380459` |
| `CollectionToken` (implementation)   | `0x901124cb73e1E996280f9d763C7EC8bB3D764ba6` |
| USDC (pool quote token, 6 decimals)  | `0x3600000000000000000000000000000000000000` |
| `ProtocolFeeReceiver`                | `0x1a18ab9c51CBb1EbB60a6f0D13d594F78a351559` |
| `NFTXZap`                            | `0xDf288b66a77f25197544877eaF4626d7E64cb5A8` |

The `Locker` is attached to the `WhiteGlove` gate, so only its owner can create and initialize collections; the `Public` gate is deployed but detached. The zap here is the chain's own deployment rather than the shared vanity address used on the ETH-quoted chains, because it is configured for USDC payments.

The address book reads `nativeToken` (and its legacy `flETH` alias) as the USDC system contract above. `NFTXZap.flETH()` returns the same address, kept as an alias so existing integrations keep compiling.

### External references (Uniswap V4)

| Contract                     | Address                                      |
| ---------------------------- | -------------------------------------------- |
| Uniswap V4 `PoolManager`     | `0x8366a39CC670B4001A1121B8F6A443A643e40951` |
| Uniswap V4 `PositionManager` | `0x6049c9a0e26405C0985f9E3685C87d0aE917f82B` |

{% hint style="warning" %}
The CCA Launchpad is **not** deployed on Arc. It settles team payments through Splits, and the Splits factories do not exist on that chain. Collections are created directly through the `Locker`.
{% endhint %}

{% hint style="info" %}
Arc support in the API and the app is still being rolled out; the contracts above are live and can be used directly.
{% endhint %}

## Robinhood Chain (chain `4663`)

The first chain NFTX v4 runs on outside the Ethereum family. Robinhood Chain is an Arbitrum Nitro chain with ETH as its native currency, and nothing in the protocol is specific to a chain family, so the contracts deploy unchanged. Two things differ from Ethereum Mainnet, and both matter when you build against it:

* **`CollectionShutdown` is absent.** Shutdown liquidates a vault's NFTs through a Sudoswap `PairFactory`, and Robinhood Chain has none — so neither `CollectionShutdown` nor `LinearRangeCurve` is deployed, and collections there cannot be wound down. Every other protocol surface behaves identically.
* **The price oracle is seeded deeper.** Blocks land several times a second, but the oracle stores at most one observation per second, so each new pool is seeded with 512 observation slots rather than Ethereum Mainnet's 32. That is a guaranteed price window of roughly 8.5 minutes. Longer windows are bought per pool with `increaseObservationCardinalityNext`, which anyone may call.

### Protocol contracts

| Contract                               | Address                                      |
| -------------------------------------- | -------------------------------------------- |
| `Locker`                               | `0xb4C5b5235b98114E9DC227b54e088C11680b2385` |
| Launch Gate (`WhiteGlove`, unattached) | `0xDB25A2324D2243B9624b620a33C80EfF12EC7A89` |
| Launch Gate (`Public`, attached)       | `0xD8F7C0Bd089A8F42728a7CfC95B18B3636f37d75` |
| `Listings`                             | `0x11F09e7eeD242FAd875D3565B3D9CA8AADE445ae` |
| `NFTXV4Hook`                           | `0xaa49ADaDD33c5E953b645567AFb10CBbba63afC4` |
| `Notifier`                             | `0x925e3415E35C0e8a4665691B89c1564b94fEDD1b` |
| `LockerManager`                        | `0xFadAC7b454971420b90091AB5807Eb8542b77886` |
| `TaxCalculator`                        | `0x7592380231c49CA44b6340327D0c4a03C0380459` |
| `CollectionToken` (implementation)     | `0x901124cb73e1E996280f9d763C7EC8bB3D764ba6` |
| `flETH` (native token)                 | `0x00000000043C1117DAFA3A3D0C7148Eb48B30130` |
| `ProtocolFeeReceiver`                  | `0x1a18ab9c51CBb1EbB60a6f0D13d594F78a351559` |
| `NFTXZap`                              | `0x000000144106C1BfC69fBbD04D56220e1A0A9A3C` |

The `Locker` is attached to the `Public` gate. Anyone may create and initialize collections, with zero creation fee, single-sided launches enabled, and a minimum deposit of one NFT. The WhiteGlove gate remains deployed but is not consulted. The switch was confirmed on 9 September 2026 in [this transaction](https://robinhoodchain.blockscout.com/tx/0x70143aafb559b2bcd780c89ad89a7047fbbdf2e882fb250e3187dccf926b7a27).

### External references (Uniswap V4)

| Contract                     | Address                                      |
| ---------------------------- | -------------------------------------------- |
| Uniswap V4 `PoolManager`     | `0x8366a39CC670B4001A1121B8F6A443A643e40951` |
| Uniswap V4 `PositionManager` | `0x58daec3116aae6D93017bAAea7749052E8a04fA7` |

{% hint style="info" %}
Robinhood Chain is served by both the [NFTX v4 API](/api-reference/api-reference.md) and the subgraph — reach it as `/v1/robinhood/...` or `/v1/4663/...`.
{% endhint %}

## Ethereum Sepolia (chain `11155111`)

The public testnet deployment. It differs from Mainnet in three ways that matter when you build against it, all of them deliberate:

* **Launches are open to anyone.** Mainnet is still gated by `WhiteGlove`, which only its owner may launch through. Sepolia has progressed to the `Public` gate, so any address can launch a collection. Its floor is ten token IDs and creation is free.
* **`flETH` is a mock.** There is no canonical flETH on Sepolia, so the deploy script ships a `FlETHMock` in its place. It wraps and unwraps like the real thing but carries no staking yield.
* **`CollectionShutdown` is absent.** Shutdown liquidates through a Sudoswap `PairFactory`, and Sepolia has none — so neither it nor `LinearRangeCurve` is deployed, and collections there cannot be wound down.

### Protocol contracts

| Contract                               | Address                                      |
| -------------------------------------- | -------------------------------------------- |
| `Locker`                               | `0xb4C5b5235b98114E9DC227b54e088C11680b2385` |
| Launch Gate (`Public`, attached)       | `0x8b97Df0d72482f073D9EFb3ad5B534fCd55D735B` |
| Launch Gate (`WhiteGlove`, unattached) | `0xDB25A2324D2243B9624b620a33C80EfF12EC7A89` |
| `Listings`                             | `0x11F09e7eeD242FAd875D3565B3D9CA8AADE445ae` |
| `NFTXV4Hook`                           | `0xaa49ADaDD33c5E953b645567AFb10CBbba63afC4` |
| `Notifier`                             | `0x925e3415E35C0e8a4665691B89c1564b94fEDD1b` |
| `LockerManager`                        | `0xFadAC7b454971420b90091AB5807Eb8542b77886` |
| `TaxCalculator`                        | `0x7592380231c49CA44b6340327D0c4a03C0380459` |
| `CollectionToken` (implementation)     | `0x901124cb73e1E996280f9d763C7EC8bB3D764ba6` |
| `flETH` (`FlETHMock`)                  | `0xB8A21A638e2199D0f6f45273EB0CD286F14a9b73` |
| `ProtocolFeeReceiver`                  | `0x1a18ab9c51CBb1EbB60a6f0D13d594F78a351559` |
| `NFTXZap`                              | `0x000000144106C1BfC69fBbD04D56220e1A0A9A3C` |
| `TestERC721Factory`                    | `0x528CB4bF86B509cfB72377E45CE9F1e91826663c` |

Both launch-gate rows are listed because both contracts exist on-chain. The `Locker` is attached to the `Public` one; the `WhiteGlove` gate is deployed but detached, and launching does not consult it.

### Gacha (pre-mainnet rehearsal)

The gacha machines are deployed **only here on Sepolia**, as a rehearsal. Unlike the protocol contracts above, they are not part of the shared CREATE3 address book and have no mainnet deployment yet.

| Contract         | Address                                      |
| ---------------- | -------------------------------------------- |
| `NFTXGacha`      | `0x8eCC811A65BEAF51d0763A6304E968072a47C7e5` |
| `NFTXGachaVault` | `0x4cDF1a772B8E076E10d112d1F72bbA7980925f5d` |

See the [Gacha](/gacha/gacha.md) section for how they work, and the [NFTXGacha](/contracts/gacha.md) / [NFTXGachaVault](/contracts/gacha-vault.md) references for their functions.

### Minting a test collection

`TestERC721Factory` is a permissionless helper for creating ERC-721s to test against. `createAndMint` deploys a collection and mints a contiguous run in one transaction, returning the collection and the **first** token ID — the recipient ends up holding `[firstTokenId, firstTokenId + mintCount)`.

```bash
# Ten tokens, which is exactly the Public gate's launch floor
cast send 0x528CB4bF86B509cfB72377E45CE9F1e91826663c \
  'createAndMint(string,string,string,address,uint256)(address,uint256)' \
  'Test Collection' 'TEST' 'https://example.com/metadata/' $YOUR_ADDRESS 10 \
  --rpc-url $SEPOLIA_RPC --private-key $YOUR_KEY
```

`collectionsOf(address)` lists everything an address has created through the factory, and the deployed collection exposes `mintManyTo(address,uint256)` for topping it up later. The factory is testnet-only by design — it has no access control, and it is never deployed to Mainnet.

### External references (Uniswap V4)

| Contract                     | Address                                      |
| ---------------------------- | -------------------------------------------- |
| Uniswap V4 `PoolManager`     | `0xE03A1074c86CFeDd5C142C4F04F1a1536e203543` |
| Uniswap V4 `PositionManager` | `0x429ba70129df741B2Ca2a85BC3A2a3328e5c09b4` |

{% hint style="info" %}
Ethereum Sepolia is served by both the [NFTX v4 API](/api-reference/api-reference.md) and the subgraph — reach it as `/v1/sepolia/...` or `/v1/11155111/...`.
{% endhint %}

## Robinhood Chain Testnet (chain `46630`)

The Robinhood Chain testnet deployment. It carries the same address book and the same two differences from Ethereum Mainnet as Robinhood Chain — no `CollectionShutdown`, and a 512-slot oracle seed — plus the two that come with being a testnet:

* **`flETH` is a mock.** There is no canonical flETH on this chain, so the deploy script ships a `FlETHMock` in its place. It wraps and unwraps like the real thing but carries no staking yield. It shares an address with the mock on Ethereum Sepolia, because it too is deployed through CREATE3.
* **Launches are gated.** The `Locker` is attached to the `WhiteGlove` gate, which only its owner may launch through. Ethereum Sepolia has progressed to the `Public` gate; this chain has not.

### Protocol contracts

| Contract                             | Address                                      |
| ------------------------------------ | -------------------------------------------- |
| `Locker`                             | `0xb4C5b5235b98114E9DC227b54e088C11680b2385` |
| Launch Gate (`WhiteGlove`, attached) | `0xDB25A2324D2243B9624b620a33C80EfF12EC7A89` |
| Launch Gate (`Public`, unattached)   | `0x8b97Df0d72482f073D9EFb3ad5B534fCd55D735B` |
| `Listings`                           | `0x11F09e7eeD242FAd875D3565B3D9CA8AADE445ae` |
| `NFTXV4Hook`                         | `0xaa49ADaDD33c5E953b645567AFb10CBbba63afC4` |
| `Notifier`                           | `0x925e3415E35C0e8a4665691B89c1564b94fEDD1b` |
| `LockerManager`                      | `0xFadAC7b454971420b90091AB5807Eb8542b77886` |
| `TaxCalculator`                      | `0x7592380231c49CA44b6340327D0c4a03C0380459` |
| `CollectionToken` (implementation)   | `0x901124cb73e1E996280f9d763C7EC8bB3D764ba6` |
| `flETH` (`FlETHMock`)                | `0xB8A21A638e2199D0f6f45273EB0CD286F14a9b73` |
| `ProtocolFeeReceiver`                | `0x1a18ab9c51CBb1EbB60a6f0D13d594F78a351559` |
| `NFTXZap`                            | `0x000000144106C1BfC69fBbD04D56220e1A0A9A3C` |
| `TestERC721Factory`                  | `0x528CB4bF86B509cfB72377E45CE9F1e91826663c` |

`TestERC721Factory` carries the same address here as on Ethereum Sepolia, so the [minting example above](#minting-a-test-collection) applies verbatim — point `--rpc-url` at a Robinhood Chain Testnet endpoint instead.

### External references (Uniswap V4)

| Contract                     | Address                                      |
| ---------------------------- | -------------------------------------------- |
| Uniswap V4 `PoolManager`     | `0x8366a39CC670B4001A1121B8F6A443A643e40951` |
| Uniswap V4 `PositionManager` | `0x58daec3116aae6D93017bAAea7749052E8a04fA7` |

{% hint style="info" %}
Robinhood Chain Testnet is served by both the [NFTX v4 API](/api-reference/api-reference.md) and the subgraph — reach it as `/v1/robinhood-testnet/...` or `/v1/46630/...`. Indexing this chain runs over plain RPC rather than the indexer's usual source, so it trails the chain head further than the others; treat freshly written state as eventually consistent.
{% endhint %}

## Earlier deployments: Base

These Base deployments predate the current generation. They were deployed under a different salt namespace, so none of their addresses match the chains above, and the contract set differs — the earlier Base Mainnet deployment has no launch gate, `Notifier` or `ProtocolFeeReceiver`, because those postdate it.

Base Mainnet has since been redeployed; the addresses to build against are in the [Base Mainnet](#base-mainnet-chain-8453) section above. The earlier contracts remain on-chain, and their addresses are recorded here so anything still pointed at them can be identified, not because they are a supported integration target. Neither they nor Base Sepolia are served by the [NFTX v4 API](/api-reference/api-reference.md) or indexed by the subgraph.

### Base Mainnet, earlier generation (chain `8453`)

{% hint style="danger" %}
Superseded. Do not create or initialize collections against this `Locker`: it has no launch gate, and its collection-creation fee is paid to an address nobody controls.
{% endhint %}

| Contract                           | Address                                      |
| ---------------------------------- | -------------------------------------------- |
| `Locker`                           | `0xd9966d9803fA761B0d8C9E5Fc602f2e5cbf1431A` |
| `Listings`                         | `0x41044Ee18031bb27f401F3d8F4624Ea096cF63eF` |
| `NFTXV4Hook`                       | `0x3b47FE7C08b64bA6F82Ccb77Cdb2dA2E4FbdafCc` |
| `LockerManager`                    | `0x02887b661C2eD65a20774377a71B0F3290C0514c` |
| `TaxCalculator`                    | `0xd435316180F37eD5B697812B6919F9d8c5FA12b2` |
| `CollectionToken` (implementation) | `0x6E715ff62E4854a99b6848Bbe92834034CBaaB48` |
| `flETH` (native token)             | `0x000000000D564D5be76f7f0d28fE52605afC7Cf8` |
| `CollectionShutdown`               | `0x046f370cc94218c6A4A0F051562Eb74a2e4Dc321` |
| `LinearRangeCurve`                 | `0x05D0Ad1366491803F6396f50EAc57aE19D9f3148` |
| `TokenGovernorFactory`             | `0x2b8F9818efcc2bBA2128E1aCA51A4198c93fe5fE` |
| `NFTXZap`                          | `0xC20C175A8C36e716Ed16fd481b139e96dD201108` |

### Base Sepolia (chain `84532`)

| Contract                           | Address                                      |
| ---------------------------------- | -------------------------------------------- |
| `Locker`                           | `0xdf40DdFc68f608E52794ae617534478125c63C84` |
| Launch Gate (`WhiteGlove`)         | `0xfA57662C286385c4946751Ac0be8A5Bd6F55852B` |
| `Listings`                         | `0x6F7B74B518456C5edeE88AC9D19aBC25A8284c7a` |
| `NFTXV4Hook`                       | `0x32D550542268d22Ee1fD35d392780f4C729A2fCC` |
| `LockerManager`                    | `0xE8C6B807d4d036828d92923eb31162d51430909E` |
| `TaxCalculator`                    | `0x28a1124E607032A00f393a6c1d7e59AFBFd34319` |
| `CollectionToken` (implementation) | `0x06c203495b3090f5A8a73eCDA79Bac54f60E7220` |
| `flETH` (`FlETHMock`)              | `0xD2AeC1992b576762726a4e0a201df18D28BF06A6` |
| `NFTXZap`                          | `0xf827bd28f5CA9DD6c2262eDaF7E3F2481c437C7C` |
| `TestERC721Factory`                | `0xA1a70A903c04f2906c6b45A1e9b90711982932FB` |

## Deterministic deployment (CREATE3)

The contracts are deployed deterministically through the CreateX factory, so integrators can verify addresses independently. These three values produce the shared address book on the eight current chains — not on the earlier Base deployments, which used a different salt namespace:

| Field               | Value                                                                                  |
| ------------------- | -------------------------------------------------------------------------------------- |
| CreateX factory     | `0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed`                                           |
| Deployer            | `0xB8A70b4d1547bf6193bd67A73F4F98ea9FD0A973`                                           |
| Salt namespace      | `nftx.v3`                                                                              |
| `NFTXV4Hook` salt   | `0xb8a70b4d1547bf6193bd67a73f4f98ea9fd0a97300115c6351c7f0065d460482`                   |
| `NFTXFlexHook` salt | `0xb8a70b4d1547bf6193bd67a73f4f98ea9fd0a97300d5058ee1744140af470ce5` (iteration 14037) |
