flare-network
Skill1 starsChanged 6 months agoMITView on GitHub
Concrete deployment registry for the Flare-family chains (Flare, Songbird, Coston2, Coston). Use when you need: a chain ID, an RPC URL, a block explorer URL, a token address (WFLR, USDT0, sFLR, FXRP, USDC, etc.), or the address of an ecosystem contract (Permit2, Multicall3, Enosys V3 / SparkDEX V3.1 / SparkDEX V4 / BlazeSwap / OpenOcean factories/routers/quoters/position-managers). Trigger on any mention of: "what's the address of X on Flare", "RPC for Songbird", "explorer API for Coston2", "is Permit2 deployed on Songbird", "WFLR address", "Multicall3 on Flare", "verify contract on flarescan", or any chain-info / address-lookup question. Pair with `flare-general` for protocol/architecture descriptions; this skill is the addresses- and-endpoints registry.
In this repository16 other files it gives its agents.
- audit-contractSkill
- auditSkill
- enosys-contractsSkill
- enosys-dex-v3Skill
- flare-dapp-pitfallsSkill
- flare-fassetsSkill
- flare-fdcSkill
- flare-ftsoSkill
- flare-generalSkill
- flare-securitySkill
- flare-smart-accountsSkill
- gas-optimizeSkill
- flare-builders-toolkitSkill
- soliditySkill
- test-foundrySkill
- test-hardhatSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 1 is distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 23
If you're unsure whether something is in scope: this skill is for *deployed contracts* and *network endpoints*.
- Distinctive: line 113
NOT deployed on Songbird, NOT deployed on Coston2.
- Very specific: line 129
When defining a custom chain in viem, you must explicitly register contracts.multicall3 or publicClient.multicall(...) will throw silently:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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/rpcFaster / 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:MyContractConstructor 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/Coston2Implication: 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 deployedFind 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 checkDecode 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).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

