Skip to main content

FDC Suite Setup

FDC verifies external data and supplies the FDC Client with attestation voting data. This guide uses fdc-suite-deployment for blockchain nodes, indexers, EVM verifier, and Web2 verifier.

Scope

FDC supports multiple attestation families:

SourceAttestation examplesDeployment model
BTC / DOGEPayment, AddressValidity, BalanceDecreasingTransaction, ConfirmedBlockHeightExists, ReferencedPaymentNonexistenceChain node + UTXO indexer + verifier API
XRPXRP payment/nonexistence and related payment checksRipple node + XRP indexer + verifier API
ETH / FLR / SGBEVMTransactionEVM verifier querying RPC nodes
Web2JsonApi style Web2 verificationWeb2 verifier; currently network availability depends on Flare support

FDC proofs are based on current states no older than 14 days, and proof data remains available after construction. Indexers should start from a block finalized about 14 days before initial startup.

Hardware

Full mainnet FDC suite on one host:

ResourceMinimum
CPU16-32 cores/threads @ 2.2GHz
RAM64 GB
Disk4 TB NVMe
DockerDocker 24+
ComposeDocker Compose 2.18+

For production, consider splitting BTC, DOGE, XRP, ETH, Web2 verifier, and EVM verifier across multiple hosts. Web2 verifier is best isolated because heavy load can impact other components.

Step 1: Clone Repository

sudo mkdir -p /data/flare
sudo chown -R $USER:$USER /data/flare

cd /data/flare
git clone https://github.com/flare-foundation/fdc-suite-deployment.git
cd /data/flare/fdc-suite-deployment
git checkout 5cb3644

Step 2: Configure Chain Nodes

BTC

cd /data/flare/fdc-suite-deployment/nodes-mainnet/btc
./generate-password.sh

Save the generated RPC password and append the generated rpcauth line to bitcoin.conf if the script does not do it automatically in your workflow.

DOGE

cd /data/flare/fdc-suite-deployment/nodes-mainnet/doge
./generate-password.sh

XRP

The default XRP config normally needs no authentication changes, but review nodes-mainnet/xrp/rippled.conf before exposing ports.

ETH

cd /data/flare/fdc-suite-deployment
openssl rand -hex 32 > nodes-mainnet/eth/jwt.hex
chmod 600 nodes-mainnet/eth/jwt.hex
warning

The repository node compose files may expose standard RPC ports by default. Review every ports: block and restrict access with firewall rules before starting services.

Step 3: Configure Verifiers

cd /data/flare/fdc-suite-deployment
cp .env.example .env
chmod 600 .env

Key variables:

/data/flare/fdc-suite-deployment/.env
BTC_NODE_URL=http://172.17.0.1:8332
BTC_NODE_USERNAME=admin
BTC_NODE_PASSWORD=generated_btc_password

DOGE_NODE_URL=http://172.17.0.1:22555
DOGE_NODE_USERNAME=admin
DOGE_NODE_PASSWORD=generated_doge_password

XRP_NODE_URL=http://172.17.0.1:51234

FLR_NODE_URL=http://YOUR_FLARE_NODE:9650/ext/bc/C/rpc
SGB_NODE_URL=http://YOUR_SONGBIRD_NODE:9650/ext/bc/C/rpc
ETH_NODE_URL=http://YOUR_ETH_NODE:8545

BTC_START_BLOCK_NUMBER=block_finalized_about_14_days_ago
DOGE_START_BLOCK_NUMBER=block_finalized_about_14_days_ago
XRP_START_BLOCK_NUMBER=ledger_finalized_about_14_days_ago

TESTNET=false
VERIFIER_API_KEYS=strong_key_for_fdc_client,second_key_if_needed

BTC_DB_PASSWORD=random_password
DOGE_DB_PASSWORD=random_password
XRP_DB_PASSWORD=random_password

WEB2_IGNITE_API_KEY=your_ignite_api_key_if_used
WEB2_SOURCE_IDS=Ignite
tip

If FDC chain nodes and verifiers run on the same Docker host, Flare's deployment README suggests 172.17.0.1 as a practical way for verifier containers to reach host-exposed node RPC ports.

Generate concrete configs:

./generate-config.sh

Re-run ./generate-config.sh after every .env change.

Step 4: Start Blockchain Nodes

Start only the nodes you need on the current server. Example:

cd /data/flare/fdc-suite-deployment/nodes-mainnet/btc
docker compose up -d

cd /data/flare/fdc-suite-deployment/nodes-mainnet/doge
docker compose up -d

cd /data/flare/fdc-suite-deployment/nodes-mainnet/xrp
docker compose up -d

cd /data/flare/fdc-suite-deployment/nodes-mainnet/eth
docker compose up -d

Wait until each node is synced before starting dependent indexers and verifiers.

Step 5: Start Verifiers

cd /data/flare/fdc-suite-deployment/verifiers/btc
docker compose up -d

cd /data/flare/fdc-suite-deployment/verifiers/doge
docker compose up -d

cd /data/flare/fdc-suite-deployment/verifiers/xrp
docker compose up -d

cd /data/flare/fdc-suite-deployment/evm-verifier
docker compose up -d

cd /data/flare/fdc-suite-deployment/web2-verifier
docker compose up -d

You do not need to deploy every component on the same host. For example, if you already operate a trusted Bitcoin RPC node, configure BTC_NODE_URL and start only the BTC indexer/verifier stack.

Step 6: Health Checks

Check containers:

docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'

Follow logs:

cd /data/flare/fdc-suite-deployment/verifiers/btc
docker compose logs -f

cd /data/flare/fdc-suite-deployment/evm-verifier
docker compose logs -f

FDC verifier health endpoints follow this pattern:

curl -H "X-API-KEY: $VERIFIER_API_KEY" \
http://VERIFIER_HOST:VERIFIER_PORT/verifier/btc/health

Replace btc with the relevant verifier chain such as doge, xrp, or eth, depending on the service route exposed by your verifier.

Step 7: Connect FDC Client

After verifier APIs are reachable, put their URLs and API keys into /data/flare/flare-systems-deployment/.env:

PROTOCOL_X_API_KEY_200=strong_fdc_client_api_key

BTC_PAYMENT_URL=http://fdc-btc-verifier.internal:PORT/verifyFDC
BTC_PAYMENT_API_KEY=strong_key_for_fdc_client
ETH_EVMTRANSACTION_URL=http://fdc-evm-verifier.internal:9800/verifyFDC
ETH_EVMTRANSACTION_API_KEY=strong_key_for_fdc_client

Then regenerate and restart the FSP stack:

cd /data/flare/flare-systems-deployment
./populate_config.sh
docker compose up -d fdc-client system-client

Updates and Reindexing

cd /data/flare/fdc-suite-deployment
git fetch --tags origin
git log --oneline -5 origin/main
./generate-config.sh

Read RELEASES.md before updating. Some FDC suite releases require database migration or full reindexing. For major verifier/indexer changes, prepare a parallel deployment and switch the FDC Client URLs after the new stack catches up.