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:
| Where | Field | Example Value |
|---|---|---|
| config.yaml (networks section) | Network key | TRON_SHASTA_TESTNET |
| config.indexer.yaml (chains section) | internal_code | TRON_SHASTA_TESTNET |
| config.indexer.yaml (chains section) | network_id | bc75c4b8-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/"
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):
- 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"
-
Create the network in the Fystack UI and copy the generated UUID.
-
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"
- Add the chain to the
CHAINSenv var indocker-compose.yaml:
environment:
- CHAINS=tron_testnet,eth_sepolia
- Restart services:
docker compose -f ./dev/docker-compose.yaml up -d --force-recreate apex multichain-indexer