Flare Network — Deployment Registry
Authoritative addresses + endpoints for the Flare-family chains. For protocol
architecture (FTSO, FDC, FAssets, Smart Accounts), see the flare-general skill.
This skill answers "WHERE is X" questions — concrete addresses, RPC URLs, explorer
endpoints, and verification commands.
If you're unsure whether something is in scope: this skill is for deployed
contracts and network endpoints. Anything about how a protocol works lives in
the protocol-specific skills (flare-ftso, flare-fassets, etc.).
Chain matrix
| Chain | ID | Type | Native | Wrapped Native | Block Time |
|---|---|---|---|---|---|
| Flare | 14 | Mainnet | FLR | WFLR | ~2s |
| Songbird | 19 | Canary mainnet (real $) | SGB | WSGB | ~2s |
| Coston2 | 114 | Flare testnet | C2FLR | WC2FLR | ~2s |
| Coston | 16 | Songbird testnet | CFLR | WCFLR | ~2s |
RPC endpoints
Public RPCs (rate-limited, 30-block eth_getLogs cap)
flare: https://flare-api.flare.network/ext/C/rpc
songbird: https://songbird-api.flare.network/ext/C/rpc
coston2: https://coston2-api.flare.network/ext/C/rpc
coston: https://coston-api.flare.network/ext/C/rpc
Faster / paid alternatives
| Provider | Notes |
|---|---|
| Ankr (paid tier) | https://rpc.ankr.com/flare/<KEY> — domain-locked browser keys (origin-restricted); separate IP-locked key needed for server-side scripts/forge. Lifts eth_getLogs to ~5k blocks. |
Origin lock note — a browser-locked Ankr key returns Origin not allowed (-32079) to curl / forge-script. Use the public RPC for deploys; reserve Ankr for browser code.
Block explorers
Flare
| Explorer | API | Verifier type |
|---|---|---|
https://flare-explorer.flare.network (Blockscout) |
https://flare-explorer.flare.network/api/ |
blockscout |
https://flarescan.com (Routescan-backed) |
https://api.routescan.io/v2/network/mainnet/evm/14/etherscan |
etherscan |
Songbird
| Explorer | API | Verifier type |
|---|---|---|
https://songbird-explorer.flare.network |
https://songbird-explorer.flare.network/api/ |
blockscout |
https://songbird.flarescan.com |
https://api.routescan.io/v2/network/mainnet/evm/19/etherscan |
etherscan |
Coston2
| Explorer | API | Verifier type |
|---|---|---|
https://coston2-explorer.flare.network |
https://coston2-explorer.flare.network/api/ |
blockscout |
https://coston2.flarescan.com |
https://api.routescan.io/v2/network/testnet/evm/114/etherscan |
etherscan |
Verification command (Foundry)
Both explorer families work via forge verify-contract:
# Blockscout (no API key needed)
forge verify-contract \
--rpc-url flare \
--verifier blockscout \
--verifier-url "https://flare-explorer.flare.network/api/" \
--num-of-optimizations 200 --compiler-version 0.8.24 \
--constructor-args $ENCODED_ARGS \
$ADDRESS \
src/MyContract.sol:MyContract
# Routescan / Etherscan-style (use literal "verifyContract" as the key)
forge verify-contract \
--verifier etherscan \
--verifier-url "https://api.routescan.io/v2/network/mainnet/evm/14/etherscan" \
--etherscan-api-key "verifyContract" \
--num-of-optimizations 200 --compiler-version 0.8.24 \
--constructor-args $ENCODED_ARGS \
$ADDRESS \
src/MyContract.sol:MyContract
Constructor args go in via --constructor-args 0x.... Get them from the broadcast log:
broadcast/Deploy.s.sol/<chainId>/run-latest.json → transactions[i].arguments,
then cast abi-encode "constructor(...)" <args...> to encode.
Cross-chain infrastructure
Permit2 (Uniswap canonical)
0x000000000022D473030F116dDEE9F6B43aC78BA3 — deployed on Flare ONLY (chain 14).
NOT deployed on Songbird, NOT deployed on Coston2. Verify via:
cast code 0x000000000022D473030F116dDEE9F6B43aC78BA3 --rpc-url <chain>
# Returns full bytecode on Flare; returns 0x on Songbird/Coston2
Implication: Permit2-dependent contracts (batch sweeps, signed-permit flows) cannot be canary-tested on Songbird. Either deploy your own Permit2 fork there (~3000 LOC), use mocks, or skip Songbird and validate via Flare fork tests only.
Multicall3
0xcA11bde05977b3631167028862bE2a173976CA11 on all Flare-family chains (Flare,
Songbird, Coston2). Standard Multicall3 ABI. Useful for batched RPC reads.
When defining a custom chain in viem, you must explicitly register contracts.multicall3
or publicClient.multicall(...) will throw silently:
defineChain({
id: 14,
name: 'Flare',
// ...
contracts: {
multicall3: {
address: '0xcA11bde05977b3631167028862bE2a173976CA11',
blockCreated: 3002461,
},
},
})
Tokens
Addresses are case-insensitive on the EVM but stored canonical-checksummed below.
Flare (chain 14)
| Symbol | Address | Decimals | Notes |
|---|---|---|---|
| WFLR | 0x1D80c49BbBCd1C0911346656B529DF9E5c2F783d |
18 | Wrapped native; FTSO delegation hooks (see flare-dapp-pitfalls) |
| sFLR | 0x12e605bc104e93B45e1aD99F9e555f659051c2BB |
18 | Liquid-staked FLR |
| USDT0 | 0xe7cd86e13AC4309349F30B3435a9d337750fC82D |
6 | Tether's Flare deployment; blacklistable |
| USDC.e | 0xfbDa5F676cB37624f28265A144A48B0d6e87d3b6 |
6 | LayerZero-bridged USDC; blacklistable |
| FXRP | 0x9b27dF2BC1AC0F5dE8f43eF1e7df45f5be17Bf08 |
6 | FAssets-bridged XRP (see flare-fassets) |
| HLN | 0x140Df95E16D9eF21BD4d97c8E5A1bD4D04d23739 |
18 | Enosys governance token |
| APS | 0x6b8758DB1148Cb5e8A6c3D3a2c34a4eFf5Ed0e80 |
18 | Enosys auto-pool stake |
| eUSDT | 0x96B41289D90444B8adD57e6F265DB5aE8651DF29 |
6 | Enosys-wrapped USDT |
| rFLR | 0x26d460c3Cf931Fb2014FA436a49e3Af08619810e |
18 | Reward FLR (FlareDrops) |
Songbird (chain 19)
| Symbol | Address | Decimals | Notes |
|---|---|---|---|
| WSGB | 0x02f0826ef6aD107Cfc861152B32B52fD11BaB9ED |
18 | Wrapped native |
| USDT_SG | 0x99e1A4329afA76e0fC34C9bd56b016A509ECD37e |
6 | Songbird USDT variant |
Coston2 (chain 114, testnet)
| Symbol | Address | Decimals |
|---|---|---|
| WC2FLR | 0x767eecF7c0fa1d0F9CC0D75D6b5Bb2B8C0CF8A4b |
18 |
Token lists are not exhaustive — for the long tail (airdrops, dust), discover via
the explorer's account.tokenlist API. For Flare:
curl -s "https://flare-explorer.flare.network/api?module=account&action=tokenlist&address=$WALLET"
Concentrated-liquidity DEXes
Three CLMM families on Flare today. Picking the right one depends on whether you
need V3-shape (getPool(t0,t1,fee)) or Algebra-shape (poolByPair(t0,t1)) ABI.
Enosys V3 (Uniswap V3-compatible) — Flare
| Contract | Address |
|---|---|
| Factory | 0x17AA157AC8C54034381b840Cb8f6bf7Fc355f0de |
| NonfungiblePositionManager | 0xD9770b1C7A6ccd33C75b5bcB1c0078f46bE46657 |
| SwapRouter | 0x5FD34090E9b195d8482Ad3CC63dB078534F1b113 |
| QuoterV2 | 0x0A32EE3f66cC9E68ffb7cBeCf77bAef03e2d7C56 |
| FtsoRewardRedistributorForNft (FTSO only) | 0x5a0BfF8Ff1AF1DF28619Fce57d07E3bBb7BAF3d7 |
| FlaresRewardsRedistributorForNft (legacy, pre-2026-04) | 0x4410B821Fa1041D242f2C199C0EA78E4A5f15F19 |
| FtsoRewardRedistributorForAddress (EOA delegations) | 0x45aAa2e37B89f7514DF69FA084f381C67891C381 |
FTSO redistributor naming gotcha (Flare): the active NFT redistributor was rotated 2026-04
from FlaresRewardsRedistributorForNft (0x4410B821…) to FtsoRewardRedistributorForNft
(0x5a0BfF8F…). Same ABI shape; only the address changed. Rewards accrued under the legacy
contract are still claimable via direct calls — see enosys-dex-v3 for the address-allowlist
recovery pattern.
Enosys V3 — Songbird
| Contract | Address |
|---|---|
| Factory | 0x416F1CcBc55033Ae0133DA96F9096Fe8c2c17E7d |
| NonfungiblePositionManager | 0xFC02eB1Ab5079627103357BfbB8167d3BBAc6f1e |
| SwapRouter | 0x51bB58357c81523Dc7fc9D05f0C5921b122EE114 |
| QuoterV2 | 0x4855f257B4BD4e5724E39D3938128Cd363EDD6C7 |
| FtsoRewardRedistributorForNft | 0x421294D3eb38c87390fc7f1442623f5b7DBc5b86 |
SparkDEX V3.1 (Uniswap V3-compatible, no FTSO redistributor) — Flare
| Contract | Address |
|---|---|
| Factory | 0x8A2578d23d4C532cC9A98FaD91C0523f5efDE652 |
| NonfungiblePositionManager | 0xEE5FF5Bc5F852764b5584d92A4d592A53DC527da |
| SwapRouter | 0x8a1E35F5c98C4E85B36B7B253222eE17773b2781 |
| QuoterV2 | 0x5B5513c55fd06e2658010c121c37b07fC8e8B705 |
LP fees still accrue; FTSO delegation rewards do not (no redistributor deployed for this fork). Position NFT lifecycle is otherwise identical to Enosys V3.
SparkDEX V4 (Algebra V1.9+ with plugins, dynamic fees) — Flare
| Contract | Address |
|---|---|
| Factory | 0x805488DaA81c1b9e7C5cE3f1DCeA28F21448EC6A |
| NonfungiblePositionManager | 0x49BE8AA6c684b15e0C5450e8Fa0b16Bec1435596 |
| SwapRouter | 0x69D57B9D705eaD73a5d2f2476C30c55bD755cc2F |
| QuoterV2 | 0x6AD6A4f233F1E33613e996CCc17409B93fF8bf5f |
| Default pool deployer | 0x59a662Ed724F19AD019307126CbEBdcF4b57d6B1 |
Algebra differs from V3 in three places that matter when integrating:
- Pool resolution —
factory.poolByPair(token0, token1)(no fee tier). - Pool state —
globalState()returns 6 fields (V3'sslot0()returns 7), buttickis at index 1 in both. MintParamshasaddress deployerwhere V3 hasuint24 fee. Passaddress(0)to use the factory's default deployer (current SparkDEX V4 pattern). For non-default-deployer pools, you must pass the actual deployer address; verify by computingfactory.computePoolAddress(t0, t1)matches the pool you're targeting.
V2 routers (Uniswap V2-compatible)
Flare
| Router | Address | Selector for swapExactTokensForTokens |
|---|---|---|
| Enosys V2 Router | 0x088EeCB467B3968Da36c71F05023A1d3133B2B83 |
0x38ed1739 |
| BlazeSwap Router | 0xe3A1b355ca63abCBC9589334B5e609583C7BAa06 |
0x38ed1739 |
BlazeSwap quirk — its swapExactTokensForTokens checks amountOutMin against
the actual recipient balance change, not the getAmountsOut quote. For
fee-on-transfer tokens this means a quote-derived minOut will trip
BlazeSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT. See flare-security for the
double-FoT-aware integration pattern.
Aggregators
OpenOcean
| Chain | Exchange contract |
|---|---|
| Flare | 0x6352a56caadC4F1E25CD6c75970Fa768A3304e64 |
Function selector for swap: 0x90411a32 (signature
swap(address,(SwapDescription),(uint256,uint256,uint256,bytes)[])). Do NOT guess
this from the human-readable signature — verify against the actual returned
calldata from the OO API:
curl -s '<OO API endpoint>' | jq -r '.data.data[2:10]'
OO API endpoint: https://open-api.openocean.finance/v3/{chainId}/swap_quote. Free,
unauthenticated, ~$0.01 minimum-USD-value gate per quote (legs below that get
rejected — fall back to V2 routers for dust).
Cross-chain bridges
LayerZero
LayerZero V2 endpoints are deployed on Flare and Songbird. For up-to-date contract addresses, see https://docs.layerzero.network/v2/deployments.
Stargate
Stargate v2 has Flare deployments for USDC and USDT0 routes. See https://stargateprotocol.gitbook.io/stargate.
Faucets (testnet only)
| Chain | Faucet |
|---|---|
| Coston2 (C2FLR) | https://coston2-faucet.flare.network |
| Coston (CFLR) | https://coston-faucet.flare.network |
Common command snippets
Read deployed bytecode (verify a contract exists at an address)
cast code $ADDRESS --rpc-url flare
# returns 0x if no contract; full bytecode if deployed
Find deployed function selectors in a contract's dispatch table
cast code $ADDRESS --rpc-url flare | grep -oE '63[0-9a-f]{8}1461' | head
# 63XXXXXXXX14 = PUSH4 selector + EQ — that's the dispatcher's selector check
Decode a 4-byte selector into a function signature
cast 4byte 0x90411a32
# returns swap(address,(address,address,address,address,uint256,uint256,uint256,bytes),(uint256,uint256,uint256,bytes)[])
Pull constructor args from a Foundry broadcast log
node -e "console.log(JSON.stringify(require('./broadcast/Deploy.s.sol/14/run-latest.json').transactions.find(t => t.contractName === 'MyContract').arguments))"
Encode constructor args for verification
cast abi-encode "constructor(address,address)" 0xabc... 0xdef...
Foundry config (recommended for Flare-family work)
# foundry.toml
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
optimizer = true
optimizer_runs = 200
solc_version = "0.8.24"
via_ir = true # required for stack-too-deep on complex contracts
fs_permissions = [{ access = "read", path = "config/" }]
[rpc_endpoints]
flare = "https://flare-api.flare.network/ext/C/rpc"
songbird = "https://songbird-api.flare.network/ext/C/rpc"
coston2 = "https://coston2-api.flare.network/ext/C/rpc"
When to use other skills
- Protocol architecture (FTSO, FDC, FAssets, Smart Accounts, FCC/TEE) —
flare-general, then the protocol-specific skill. - FTSO price feeds, anchor feeds, volatility incentives —
flare-ftso. - Flare Data Connector (cross-chain proofs) —
flare-fdc. - FAssets / FXRP minting + redemption —
flare-fassets. - ERC-4337 smart accounts on Flare —
flare-smart-accounts. - Enosys-specific contracts (DEX V3 reward managers, Loans/CDP, governance) —
enosys-contracts,enosys-dex-v3. - Cross-project gotchas (RPC log range, EIP-3855, MetaMask SDK hangs, claim-OOG) —
flare-dapp-pitfalls. - Flare-specific security review of a deployment —
flare-security. - Generic Solidity standards —
solidity(Cyfrin). - Auditing workflow —
audit(checklist) andaudit-contract(adversarial multi-agent).