V1 contracts & testnet
The documented V1 mainnet contracts, collection reference, and Sepolia test deployment.
These are the documented V1 Ethereum mainnet contracts and shared FWA token infrastructure. Contract addresses are linked to Etherscan. V2 reuses the FWA token and its official Uniswap v4 hook. Pool-bound contracts have separate V2 and custom-pool deployments.
| Contract | Role | Address |
|---|---|---|
| FWA | V1 main pool: accounting, positions, selection, and settlement | 0xB276F62DB0ce8CA2Ca5bc522695bE604521eAc1c |
| FWARewards | V1 FWA emissions, purchaser epochs, reward buys, and routing | 0x6a1a1C0CfB3D3C538e13D36d608a5bcaa992fc78 |
| FWAVRFService | Dedicated subscription coverage, request fees, and sponsored processing | 0xa084c33Fb7a467307452898b8D58165ebd2E5D9f |
| FWAToken | $FWA incentive token (ERC-20) | 0xa0Df17B5aC76ABaBA36E1450E2cbCd18A620C845 |
| FWATokenTransfer | Permit2 escrow rail for next-block wallet-to-wallet $FWA claims | 0xcE6d5B618e034f87C7a8B6dCa65FB8669b8c301B |
| FWAERC20Wrapper | Owner-curated ERC-20 denominations wrapped into FWA-compatible ERC-721 packs | 0x727C739F07A89f11E883FE0F34937c55e4c3d74A |
| FWAERC20PackRenderer | Onchain metadata and SVG renderer for ERC-20 pack NFTs | 0x69Cc9c633867eEE71b17142BBBc2c6aaf14c61a4 |
| FWATokenWrapper | Block-locked $FWA bearer packs represented as ERC-721 NFTs | 0x470879Abd61FdCA91436fE27ed87dB2c8650f3e7 |
| FWATokenHook | Uniswap v4 hook for the $FWA liquidity pool | 0x2C67ebA8A50AF0dB5Fba55F725247a75CbDA6444 |
| OwnerSplitter | Documented recipient of the shared hook's FWA trading fees; verify the hook's current fee destination | 0x7400824eec17F86Cc74385862810710F9c46Ec04 |
| FWAClaim | Merkle-gated v1 snapshot distribution | 0xd4085d38855F17EdF0B1CCBFad7B3846fb305655 |
| FWAWhitelistAuthority | Delegated collection curation, durable blocks, and reservation-scoped FWAIR activation | 0x54B641aC97A9e9375665934b8e7a7D0b2C0E898B |
| FWAIRLaunchManager | V1 launch deployment, campaign approvals, collection reservations, and activation | 0x900252d9A8F9AcC3DD1014C594c91fC33e5A6AAf |
FWAIR deployments
The documented V1 FWAIRLaunchManager is the canonical registry and deployer for its campaigns. Every collection campaign gets its own byte-for-byte verified FWAIRLaunch child and single-use VRF consumer, so child addresses are not hardcoded in the singleton table above. Discover launches through that manager's launches(id) or launchForCollection(collection) reads, or through the live drops catalogue.
The documented manager was deployed at Ethereum block 25877942. The deployment manifest records source revision 49837e82685cd9022529da83cf723606b597f4c6 alongside the exact creation, runtime, and artifact hashes. Its immutable whitelist authority is the FWAWhitelistAuthority shown in the table.
Numeric launch IDs are manager-scoped; links, caches, and integrations should use the launch contract address instead. Existing campaigns continue through their original manager and pool contracts.
For mechanics, fees, and the published configuration, read the V1 guide and settings. The guides in the Main pool category describe V2; these V1 addresses and collection entries do not establish V2 eligibility or wiring.
V1 collection reference
These 62 collections are the published V1 documentation reference. This is not a live whitelist snapshot. Check the pool's current admission rules before depositing.
V1 on Sepolia
The documented public example uses the V1 test stack on Ethereum Sepolia (chain ID 11155111). Its pool-bound contracts are not V2 or custom-pool endpoints. The addresses and workflow below are preserved for that test deployment; confirm its current configuration and availability before using it.
Contracts
| Contract | Role | Address |
|---|---|---|
| FWA | Core NFT pool | 0x692542379d6A3fc8115ae2C19787FD5bE21578bD |
| FWAToken | $FWA test token | 0x14ea7A2087E32610C08c5210E16aD163353F5Fe5 |
| FWATokenHook | Uniswap v4 hook for the $FWA pool | 0xf86c9c7e3B4EB188ee351EE7304001ECdc40e444 |
| FWATokenDistributorOwner | Permissionless distributor registry wrapper | 0xc0C608d15e59d8D3754D2828b8DD43a03B7026D2 |
| FWATestCollection | Permissionless test NFT collection | 0xd8B4A84299bD3509572daDDf50a59F081fe56678 |
1. Get Sepolia ETH
You need Sepolia ETH to pay gas and interact with the deployment. Claim some from the Gas.zip Sepolia faucet, or use any other Sepolia faucet. Send it to the wallet you will use for testing and wait for the balance to appear on Sepolia before continuing.
If you need more than a faucet provides, open a Gas.zip Sepolia refuel quote. Choose a supported L2 where you already have funds as the source, leave Sepolia selected as the destination, and choose a small dollar amount. After you review and submit the quote, you pay with real funds on the source L2 and receive Sepolia ETH in your wallet. Available source chains, rates, and fees can vary, so check the destination and final amount before confirming.
2. Mint a test NFT
The FWATestCollection contract lets anyone mint a test NFT directly to their connected wallet:
- Open FWATestCollection on Sepolia Etherscan.
- In Contract → Write Contract, connect the wallet you funded.
- Select the no-argument
mint()function and submit the transaction. - After confirmation, the contract mints the next sequential token ID to the wallet that submitted the transaction. The receipt's
Transferevent contains the new token ID.
3. Register a contract that moves FWA
This step is only needed when your integration contract sends or receives $FWA. On Sepolia, registration is permissionless:
- Deploy your integration contract to Sepolia.
- Open FWATokenDistributorOwner on Sepolia Etherscan, connect a wallet, and call
setDistributor(integrationAddress)with your contract's nonzero address. - Wait for confirmation, then open FWAToken and confirm
isDistributor(integrationAddress)returnstrue.
Distributor status allows the registered contract to send or receive $FWA while the token transfer lock is active. It does not bypass token balances or ERC-20 allowances, so transferFrom still requires approval.
4. Process acquisitions when needed
There is no automated keeper running for the Sepolia deployment. Chainlink VRF's callback attempts to process an acquisition as soon as randomness arrives, but that best-effort path may leave it ready and unsettled. If that happens, you must trigger processing yourself.
- Wait for Chainlink VRF to fulfill the acquisition. In FWA's Read Contract,
pendingAcquisitionCount()tracks requests still waiting for randomness andunsettledAcquisitionCount()tracks all acquisitions that have not finished. - If randomness has arrived but the acquisition remains unsettled, open FWA's Write Contract, connect a wallet, and call
processAcquisitions(maxCount). AmaxCountof10is a reasonable batch for normal testing. - Wait for confirmation, then check
unsettledAcquisitionCount()again. Repeat only if additional ready acquisitions remain.
Anyone can call processAcquisitions. The caller only chooses the maximum batch size; FWA determines which requests are processed and always follows the canonical queue order. Sepolia callers pay their own transaction gas and are not reimbursed.
Offchain indexing
If you want to build an offchain indexer, we use Ponder. Start with its getting-started guide; your coding agent should be able to take it from there.