Skip to main content

Incoming Deposits Not Detected

If incoming deposits are not showing up in the Fystack UI, the issue is almost always related to the multichain indexer configuration.

Root Cause

The multichain indexer watches blockchains for incoming transactions to your wallets. If the indexer isn't running for a chain, or if its configuration doesn't match the Apex config, deposits on that chain will never be detected.

The most common cause is a network_id mismatch between config.yaml and config.indexer.yaml.

How It Works

The internal_code in config.indexer.yaml must match the network key in config.yaml, and the network_id must match the network UUID created in the Fystack UI. If any of these don't align, the indexer either won't run for that chain or Apex won't recognize the indexed transactions.

Diagnosing the Issue

1. Check if the indexer is running

docker compose -f ./dev/docker-compose.yaml logs -f multichain-indexer

Look for log lines showing block processing. If you see no output or errors, the indexer isn't indexing your chain.

2. Check the CHAINS environment variable

In docker-compose.yaml, the multichain indexer only indexes chains listed in the CHAINS env var:

multichain-indexer:
command:
[
"index",
"--chains=${CHAINS:-tron_testnet}", # Only tron_testnet by default
"--debug",
"--catchup",
"--manual",
]
environment:
- CHAINS=tron_testnet # Add your chain here

If your chain isn't listed, it won't be indexed. Add it:

environment:
- CHAINS=tron_testnet,eth_sepolia

3. Verify network_id and internal_code match

This is the #1 cause of deposits not being detected. Three things must align:

WhereFieldExample Value
config.yaml (networks section)Network keyTRON_SHASTA_TESTNET
config.indexer.yaml (chains section)internal_codeTRON_SHASTA_TESTNET
config.indexer.yaml (chains section)network_idbc75c4b8-f7b6-4f2f-a79a-5d3a7084f0c1
Fystack UI (Networks page)Network ID (UUID)bc75c4b8-f7b6-4f2f-a79a-5d3a7084f0c1

config.yaml:

networks:
TRON_SHASTA_TESTNET: # <-- This is the internal_code
enabled: true
rpc_nodes:
- url: "https://api.shasta.trongrid.io/"

config.indexer.yaml:

chains:
tron_testnet:
network_id: "bc75c4b8-f7b6-4f2f-a79a-5d3a7084f0c1" # Must match UI
internal_code: "TRON_SHASTA_TESTNET" # Must match config.yaml
type: "tron"
start_block: 58083393
nodes:
- url: "https://api.shasta.trongrid.io/"
Common Mistake

If you create a network in the Fystack UI, the system generates a UUID for it. You must copy that exact UUID into the network_id field in config.indexer.yaml. A mismatched network_id means the indexer will process blocks but Apex won't associate the transactions with any network.

4. Check RPC endpoint health

The indexer can silently stall if the RPC endpoint is rate-limited or down:

# Test a Tron RPC endpoint
curl -s https://api.shasta.trongrid.io/wallet/getnowblock | head -c 200

# Test an EVM RPC endpoint
curl -s -X POST https://ethereum-sepolia-rpc.publicnode.com \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'

If you're getting rate-limited, switch to a paid RPC provider (Alchemy, Infura, QuickNode).

5. Check block state in Consul

The indexer stores its current block position in Consul KV. If it's stuck:

# View all indexed block states
curl -s http://127.0.0.1:8501/v1/kv/?keys | jq .

# Check a specific chain's block state
curl -s http://127.0.0.1:8501/v1/kv/block_state/TRON_SHASTA_TESTNET | jq '.[0].Value' -r | base64 -d

6. Restart the indexer

After fixing any configuration issues:

docker compose -f ./dev/docker-compose.yaml up -d --force-recreate multichain-indexer

Adding a New Chain to the Indexer

To start indexing a new chain (e.g., Ethereum Sepolia):

  1. Add the network to config.yaml:
networks:
ETHER_SEPOLIA_TESTNET:
enabled: true
wss_enabled: true
providers:
- name: "alchemy"
http: "https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY"
wss: "wss://eth-sepolia.g.alchemy.com/v2/YOUR_KEY"
  1. Create the network in the Fystack UI and copy the generated UUID.

  2. Add the chain to config.indexer.yaml:

chains:
eth_sepolia:
network_id: "YOUR-UUID-FROM-UI"
internal_code: "ETHER_SEPOLIA_TESTNET"
type: "evm"
start_block: 0 # Or a recent block number
nodes:
- url: "https://eth-sepolia.g.alchemy.com/v2/YOUR_KEY"
  1. Add the chain to the CHAINS env var in docker-compose.yaml:
environment:
- CHAINS=tron_testnet,eth_sepolia
  1. Restart services:
docker compose -f ./dev/docker-compose.yaml up -d --force-recreate apex multichain-indexer