Network
Flare has four networks, each serving different purposes. All networks are permissionless and EVM compatible:
- Flare Mainnet. The production network where all the action happens. Transactions cost real money here.
- Flare Testnet Coston2. Test your applications without spending real money. This should be your first choice when developing applications.
- Songbird Canary-Network. Experimental proving ground for Flare.
- Songbird Testnet Coston. The testnet for Songbird Canary-Network.
The most common development tracks are:
- Application Development (Recommended track for dApp developers):
- Flare Testnet Coston2 → Flare Mainnet
- Protocol Development (Required track for all protocol level changes):
- Songbird Testnet Coston → Songbird Canary-Network → Flare Testnet Coston2 → Flare Mainnet
Configuration
Specific configuration details for connecting to each Flare network, including public RPC endpoints, chain identifiers, blockchain explorers, and testnet faucets.
- Flare Mainnet
- Flare Testnet Coston2
- Songbird Canary-Network
- Songbird Testnet Coston
Network name | Flare Mainnet |
---|---|
Public RPCs (HTTPS) | https://flare-api.flare.network/ext/C/rpc https://stylish-light-theorem.flare-mainnet.quiknode.pro/ext/bc/C/rpc |
Public RPCs (WSS) | wss://flare-api.flare.network/ext/C/ws wss://stylish-light-theorem.flare-mainnet.quiknode.pro/ext/bc/C/ws |
Chain ID | 14 |
Native currency | FLR (18 decimals) |
Routescan Explorer | https://flarescan.com |
Blockscout Explorer | https://flare-explorer.flare.network |
Faucet | - |
Bootstrapping nodes | https://flare-bootstrap.flare.network https://flare-bootstrap-1.staking.production.figment.io https://flare.senseinode.com |
{Safe}Wallet | https://multisig.flare.network |
- curl
- web3.js
- web3.py
- go-ethereum
- alloy-rs
curl https://flare-api.flare.network/ext/C/rpc -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
import { Web3 } from "web3";
const web3 = new Web3("https://flare-api.flare.network/ext/C/rpc");
web3.eth.getBlockNumber().then(console.log);
from web3 import Web3
w3 = Web3("https://flare-api.flare.network/ext/C/rpc")
print(w3.eth.block_number)
package flare
import (
"context"
"fmt"
"github.com/ethereum/go-ethereum/ethclient"
)
func BlockNumber() {
cl, _ := ethclient.Dial("https://flare-api.flare.network/ext/C/rpc")
blockNumber, _ := cl.BlockNumber(context.Background())
fmt.Println(blockNumber)
}
use alloy::providers::{Provider, ProviderBuilder};
use eyre::Result;
#[tokio::main]
async fn main() -> Result<()> {
let provider =
ProviderBuilder::new().on_http("https://flare-api.flare.network/ext/C/rpc".parse()?);
println!("{}", provider.get_block_number().await?);
Ok(())
}
Network name | Flare Testnet Coston2 |
---|---|
Public RPCs (HTTPS) | https://coston2-api.flare.network/ext/C/rpc https://falling-skilled-uranium.flare-coston2.quiknode.pro/ext/bc/C/rpc |
Public RPCs (WSS) | wss://coston2-api.flare.network/ext/C/ws wss://falling-skilled-uranium.flare-coston2.quiknode.pro/ext/bc/C/ws |
Chain ID | 114 |
Native currency | C2FLR (18 decimals) |
Routescan Explorer | https://coston2.testnet.flarescan.com |
Blockscout Explorer | https://coston2-explorer.flare.network |
Faucet | Request C2FLR from Coston2 Faucet |
Bootstrapping nodes | https://coston2-bootstrap.flare.network |
- curl
- web3.js
- web3.py
- go-ethereum
- alloy-rs
curl https://coston2-api.flare.network/ext/C/rpc -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
import { Web3 } from "web3";
const web3 = new Web3("https://coston2-api.flare.network/ext/C/rpc");
web3.eth.getBlockNumber().then(console.log);
from web3 import Web3
w3 = Web3("https://coston2-api.flare.network/ext/C/rpc")
print(w3.eth.block_number)
package coston2
import (
"context"
"fmt"
"github.com/ethereum/go-ethereum/ethclient"
)
func BlockNumber() {
cl, _ := ethclient.Dial("https://coston2-api.flare.network/ext/C/rpc")
blockNumber, _ := cl.BlockNumber(context.Background())
fmt.Println(blockNumber)
}
use alloy::providers::{Provider, ProviderBuilder};
use eyre::Result;
#[tokio::main]
async fn main() -> Result<()> {
let provider =
ProviderBuilder::new().on_http("https://coston2-api.flare.network/ext/C/rpc".parse()?);
println!("{}", provider.get_block_number().await?);
Ok(())
}
Network name | Songbird Canary-Network |
---|---|
Public RPC (HTTPS) | https://songbird-api.flare.network/ext/C/rpc |
Public RPC (WSS) | wss://songbird-api.flare.network/ext/C/ws |
Chain ID | 19 |
Native currency | SGB (18 decimals) |
Routescan Explorer | https://songbird.flarescan.com |
Blockscout Explorer | https://songbird-explorer.flare.network |
Faucet | - |
Bootstrapping nodes | https://songbird-bootstrap.flare.network |
- curl
- web3.js
- web3.py
- go-ethereum
- alloy-rs
curl https://songbird-api.flare.network/ext/C/rpc -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
import { Web3 } from "web3";
const web3 = new Web3("https://songbird-api.flare.network/ext/C/rpc");
web3.eth.getBlockNumber().then(console.log);
from web3 import Web3
w3 = Web3("https://songbird-api.flare.network/ext/C/rpc")
print(w3.eth.block_number)
package songbird
import (
"context"
"fmt"
"github.com/ethereum/go-ethereum/ethclient"
)
func BlockNumber() {
cl, _ := ethclient.Dial("https://songbird-api.flare.network/ext/C/rpc")
blockNumber, _ := cl.BlockNumber(context.Background())
fmt.Println(blockNumber)
}
use alloy::providers::{Provider, ProviderBuilder};
use eyre::Result;
#[tokio::main]
async fn main() -> Result<()> {
let provider =
ProviderBuilder::new().on_http("https://songbird-api.flare.network/ext/C/rpc".parse()?);
println!("{}", provider.get_block_number().await?);
Ok(())
}
Network name | Songbird Testnet Coston |
---|---|
Public RPC (HTTPS) | https://coston-api.flare.network/ext/C/rpc |
Public RPC (WSS) | wss://coston-api.flare.network/ext/C/ws |
Chain ID | 16 |
Native currency | CFLR (18 decimals) |
Routescan Explorer | https://coston.testnet.flarescan.com |
Blockscout Explorer | https://coston-explorer.flare.network |
Faucet | Request CFLR from Coston Faucet |
Bootstrapping nodes | https://coston-bootstrap.flare.network |
- curl
- web3.js
- web3.py
- go-ethereum
- alloy-rs
curl https://coston-api.flare.network/ext/C/rpc -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
import { Web3 } from "web3";
const web3 = new Web3("https://coston-api.flare.network/ext/C/rpc");
web3.eth.getBlockNumber().then(console.log);
from web3 import Web3
w3 = Web3("https://coston-api.flare.network/ext/C/rpc")
print(w3.eth.block_number)
package coston
import (
"context"
"fmt"
"github.com/ethereum/go-ethereum/ethclient"
)
func BlockNumber() {
cl, _ := ethclient.Dial("https://coston-api.flare.network/ext/C/rpc")
blockNumber, _ := cl.BlockNumber(context.Background())
fmt.Println(blockNumber)
}
use alloy::providers::{Provider, ProviderBuilder};
use eyre::Result;
#[tokio::main]
async fn main() -> Result<()> {
let provider =
ProviderBuilder::new().on_http("https://coston-api.flare.network/ext/C/rpc".parse()?);
println!("{}", provider.get_block_number().await?);
Ok(())
}
Supported wallets
A variety of wallets across desktop, browser extension, and mobile platforms support Flare. Discover suitable options for your needs on the Flare Wallets page.
Transaction format
-
Address space: Matches Ethereum, 20-byte addresses using ECDSA.
-
Transaction format: Matches Ethereum, complies with EIP-2718, encoded with RLP.
-
Transaction fees:
-
Type0 (Legacy) - Fee is calculated as
gasUsed * gasPrice
. -
Type2 (EIP-1559) - Fee is calculated as
(baseFee + priorityFee) * gas
. Both the base and priority fees are burned.
-
Smart contracts
-
Compatibility: Fully EVM-compatible. Contracts written in Solidity, Vyper, or other EVM languages can be deployed directly.
-
RPC-API: Ethereum RPC API
-
Supported opcodes: Supports all EVM opcodes up to and including the London hard fork.
Consensus mechanism
-
Consensus Protocol: Snowman++ (from Avalanche) provides a high-throughput, totally ordered consensus with fast finality. Learn more on the Consensus page.
-
Sybil resistance mechanism: Proof-of-Stake (PoS)
-
Delegation: In-protocol
-
Block time: ≈1.8 seconds
-
Finality: Single-slot finality. Once a block is accepted through the consensus process (gossip), it's considered final.
-
Transaction ordering: Determined by the block proposer (leader), the default behavior is priority gas auction.
-
Participants (Validators):
- Nodes must meet a minimum self-bond requirement (defined by governance) to become validators.
- Validators participate in consensus voting and are randomly selected as leaders to propose new blocks, weighted by their total stake (self-bond + delegated stake).
- The network currently features around 90 validators (median stake ≈0.7%, max stake ≈3.3%).
-
Enshrined protocols: In addition to consensus, Flare validators are also data providers for FTSO and FDC.
Block verification
-
Block Header Verification: Example Go implementation.
-
Block Body Validation: Example Go implementation.
-
Verify transaction in block: Verified using Merkle Patricia Trie proofs against the receipts root included in the block header.
Integrating Flare is similar to integrating Ethereum or other EVM chains. To add it to your exchange set up an RPC node and use the appropriate network configuration for Flare Mainnet.
Additional resources: Flare Brand assets, go-flare Source Code