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:
-
Flare Testnet Coston2 → Flare Mainnet: Recommended track for application developers.
-
Songbird Testnet Coston → Songbird Canary-Network → Flare Testnet Coston2 → Flare Mainnet: Required track for all protocol level changes.
Configuration
Configuration for all Flare networks, along with public and private RPCs, blockchain explorers, and 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 |
Currency symbol | FLR |
Currency decimals | 18 |
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 |
Currency symbol | C2FLR |
Currency decimals | 18 |
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 |
Currency symbol | SGB |
Currency decimals | 18 |
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 |
Currency symbol | CFLR |
Currency decimals | 18 |
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(())
}
Community tools
Developer tools for Flare built by the community including RPCs, bridges, indexers, wallet SDKs, and more. This section has been moved to the Developer Tools page.
Supported wallets
Several desktop, browser and mobile app based wallets 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
-
RPC-API: Ethereum RPC API
-
Supported opcodes: All opcodes up to the London hard fork are supported.
Block verification
-
Header: Verifying block header in Go.
-
Body: Validating block body in Go.
-
Verify transaction in block: Merkle Patricia Trie verification against the receipt root.
Consensus
-
Sybil resistance mechanism: Proof-of-Stake (PoS)
-
Delegation: In-protocol
-
Block time: ≈1.8 seconds
-
Finality: Single-slot. Once a block is validated through the gossip protocol, it is finalized.
-
Transaction ordering: Leaders' discretion, default behaviour is priority gas auction.
-
Consensus mechanism: Snowman++ (from Avalanche) offers a high-throughput, totally ordered consensus mechanism alongside a leader protocol to minimize MEV. Learn more on the Consensus page.
-
Consensus participants: Validators vote on block proposals and serve as leaders. To serve as a validator, a node must meet a governance defined minimum self-bond. Validators are randomly selected as leaders to propose new blocks. The probability of being elected leader is proportional to the validator's stake.
-
Enshrined protocols: In addition to consensus, Flare validators are also data providers for FTSO and attestation providers for FDC.
-
Stake distribution: Network comprises over 90 validators with a median stake of ≈0.7% and a maximum stake of ≈3.3%. This includes both self-bonded and delegated stakes.
Flare is just like Ethereum. To add it to your exchange set up an RPC node and use the appropriate network configuration for Flare Mainnet.
Additional info: Brand assets, go-flare source