Operator Quickstart
Run a Shinzo IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. and a HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. on the same machine, peer them over libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts., and query indexed Ethereum data through the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL.'s GraphQL API. If your GethGeth Go-Ethereum, the Go implementation of an Ethereum node. Each indexer runs alongside a Geth node and connects over WebSocket (port 8546) and JSON-RPC (port 8545) to fetch block data. node is already reachable, the whole thing takes about ten minutes.
When you're done you'll have:
- A running IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. pulling blocks from a GethGeth Go-Ethereum, the Go implementation of an Ethereum node. Each indexer runs alongside a Geth node and connects over WebSocket (port 8546) and JSON-RPC (port 8545) to fetch block data. node and signing them.
- A running HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. receiving those blocks over P2P and serving them.
- A GraphQL query returning real Ethereum data through the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL..
- A understanding of how the two main Shinzo infrastructure pieces fit together.
What you're building
Two containers through one shared Docker bridge. Both containers run on the same VM. The HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. dials the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts. port directly over the bridge using the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s published Peer ID.
Prerequisites
- Docker.
- Both
curlandjq. - A reachable Ethereum execution node (GethGeth Go-Ethereum, the Go implementation of an Ethereum node. Each indexer runs alongside a Geth node and connects over WebSocket (port 8546) and JSON-RPC (port 8545) to fetch block data. or compatible) exposing JSON-RPC and WebSocket. The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. reads from this node; it does not run one for you. Acceptable sources include a node you self-hostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL., a node co-located with a validatorValidator An entity that participates in a chain's consensus. On Ethereum, a validator's withdrawal key signs an EIP-712 message on the outpost to authorize an operator key as its indexer., GCP Blockchain Node Engine, or a managed provider like Alchemy or QuickNode. If your node is behind authentication, see the Indexer install guide's notes on API keys.
You don't need a wallet, funds, or a ShinzoHubShinzoHub Shinzo's coordination chain: a Cosmos SDK chain (v0.53.4) with an integrated EVM, running CometBFT consensus. It holds the view, host, and indexer registries and the economic layer (staking, pricing, payments). It does not store or serve indexed blockchain data. registration for this quickstart. Registration is what lets your operators participate in the network and earn rewards. It's covered on the Indexer registration and Host registration pages.
Set your Geth endpoint
Export the URL and (optionally) the API key for your GethGeth Go-Ethereum, the Go implementation of an Ethereum node. Each indexer runs alongside a Geth node and connects over WebSocket (port 8546) and JSON-RPC (port 8545) to fetch block data. node. The rest of the quickstart references these variables.
export GETH_RPC_URL="<your-rpc-url>"
export GETH_WS_URL="<your-ws-url>"
export GETH_API_KEY="<your-api-key>" # leave empty if your node has no auth
The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. auto-detects the right header (X-goog-api-key for GCP Blockchain Node Engine, X-Api-Key for most self-hosted Nginx setups) based on the URL. If the node is on your private network and unauthenticated, leave GETH_API_KEY empty.
Start the Indexer
The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. sits next to a blockchain node, subscribes to new blocks, and turns them into signed structured documents. Run it as a single container with three ports exposed:
| HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. port | Container port | What it is |
|---|---|---|
9181 | 9181 | DefraDBdefraDB A peer-to-peer, document-oriented database embedded in every indexer and host. It handles storage, content addressing, CRDT merging, query serving, and P2P replication via libp2p. GraphQL API. The query interface for raw indexed data. |
9171 | 9171 | libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts. P2P port. How HostsHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. subscribe to this IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.. |
8080 | 8080 | Health, metrics, and registration endpoints. |
Run everything with:
docker pull ghcr.io/shinzonetwork/shinzo-indexer-client:standard
docker run -d \
--name shinzo-indexer \
-e GETH_RPC_URL="$GETH_RPC_URL" \
-e GETH_WS_URL="$GETH_WS_URL" \
-e GETH_API_KEY="$GETH_API_KEY" \
-e INDEXER_START_HEIGHT=0 \
-e DEFRADB_KEYRING_SECRET=devnet-secret \
-e DEFRADB_PLAYGROUND=true \
-e DEFRADB_P2P_ENABLED=true \
-e DEFRADB_P2P_LISTEN_ADDR=/ip4/0.0.0.0/tcp/9171 \
-e LOGGER_DEBUG=true \
-p 9181:9181 \
-p 9171:9171 \
-p 8080:8080 \
ghcr.io/shinzonetwork/shinzo-indexer-client:standard
DEFRADB_KEYRING_SECRET is the password that protects the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s signing key. The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. uses this key to sign every document it produces, which gives downstream consumers a way to verify the data came from a real IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.. The devnet-secret password is fine for this quickstart, but remember use something more secure for anything in a production environment.
DEFRADB_P2P_LISTEN_ADDR tells DefraDBdefraDB A peer-to-peer, document-oriented database embedded in every indexer and host. It handles storage, content addressing, CRDT merging, query serving, and P2P replication via libp2p. which interface and port to bind libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts. to inside the container. Binding to 0.0.0.0:9171 means the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. container, running on the same Docker bridge, can reach it.
INDEXER_START_HEIGHT=0 starts indexingIndexing The process of parsing blockchain data and storing it as structured, schema-compliant documents in defraDB. from genesis. For Ethereum Mainnet that's a lot of history, but this quickstart only needs a few committed blocks to verify the pipeline. To start closer to head, set this to a recent block height.
DEFRADB_PLAYGROUND=true enables a browser-based GraphQL playground on the API port.
Read the Indexer's P2P address
The HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. needs two things to connect:
- The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts. Peer ID.
- A multiaddr it can dial.
Both come from the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s /health endpoint once it finishes starting up.
curl -s http://localhost:8080/health | jq '.p2p.self'
{
"id": "12D3KooWK8zmiDmX91PwDV1PsqtgA1UUDuuyipVBVPEjrvwgoFJH",
"addresses": [
"/ip4/127.0.0.1/tcp/9171",
"/ip4/172.17.0.2/tcp/9171"
],
"public_key": "8a7f061eeaaec8b8130ce4b9d6e519bbe76b9a4bc038b7e6743a773ad3915e02"
}
id is the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts. Peer ID, derived from its keyring secret. It's stable across restarts as long as the secret stays the same.
addresses are the multiaddrs the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. is actually listening on. The first one (127.0.0.1) is loopback and useless to other containers. The second (172.17.0.2 here) is the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. container's IP on the Docker bridge. That's the one the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. will dial.
Capture both into shell variables:
PEER_ID=$(curl -s http://localhost:8080/health | jq -r '.p2p.self.id')
INDEXER_IP=$(curl -s http://localhost:8080/health \
| jq -r '[.p2p.self.addresses[] | capture("/ip4/(?<ip>[0-9.]+)/").ip
| select(. != "127.0.0.1" and . != "0.0.0.0")][0]')
BOOTSTRAP_PEER="/ip4/${INDEXER_IP}/tcp/9171/p2p/${PEER_ID}"
echo "$BOOTSTRAP_PEER"
/ip4/172.17.0.2/tcp/9171/p2p/12D3KooWK8zmiDmX91PwDV1PsqtgA1UUDuuyipVBVPEjrvwgoFJH
BOOTSTRAP_PEER is a libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts. multiaddr that essentially saus "speak IPv4 to this address on this TCP port, then handshake with this Peer ID." If the Peer ID doesn't match, the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. refuses the connection. This is what makes the connection authenticated end to end.
Write the Host config
The HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. reads its configuration from a YAML file mounted into the container. The two values that matter here are the bootstrap peer (the multiaddr we just built) and the keyring secret. Create this file and save it as ~/host-config.yaml:
defradb:
url: "localhost:9181"
keyring_secret: "host-devnet-secret"
p2p:
enabled: true
bootstrap_peers:
- '${BOOTSTRAP_PEER}'
listen_addr: "/ip4/0.0.0.0/tcp/9171"
enable_auto_reconnect: true
store:
path: "./.defra"
shinzo:
hub_base_url: rpc.devnet.shinzo.network:26657
minimum_attestations: 1
start_height: 0
logger:
development: true
level: "info"
host:
lens_registry_path: "./.defra/lens"
health_server_port: 8080
There are a few things in here worth calling out:
defradb.url: localhost:9181is the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL.'s internal DefraDBdefraDB A peer-to-peer, document-oriented database embedded in every indexer and host. It handles storage, content addressing, CRDT merging, query serving, and P2P replication via libp2p. API, not the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s. Inside the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. container, DefraDBdefraDB A peer-to-peer, document-oriented database embedded in every indexer and host. It handles storage, content addressing, CRDT merging, query serving, and P2P replication via libp2p. binds to9181onlocalhost. The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s API happens to use the same number because they're both DefraDBdefraDB A peer-to-peer, document-oriented database embedded in every indexer and host. It handles storage, content addressing, CRDT merging, query serving, and P2P replication via libp2p.; we'll remap the published ports in the next step so they don't collide.bootstrap_peersis the only IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.-specific value. The HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. learns everything else (schemas, signed data) from the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. over P2P once it connects.minimum_attestations: 1means the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. will serve data as soon as it has one signature on it. Production setups use higher values to require independent confirmation from multiple IndexersIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.. See the Host overview for more on attestations.hub_base_urlpoints to ShinzoHubShinzoHub Shinzo's coordination chain: a Cosmos SDK chain (v0.53.4) with an integrated EVM, running CometBFT consensus. It holds the view, host, and indexer registries and the economic layer (staking, pricing, payments). It does not store or serve indexed blockchain data.. We're not registering anything here, but the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. expects the field to be present.
Start the Host
The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. is already occupying 9181, 9171, and 8080 on the hostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. machine, so the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. container's ports get bumped by one.
| HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. port | Container port | What it is |
|---|---|---|
9182 | 9181 | DefraDBdefraDB A peer-to-peer, document-oriented database embedded in every indexer and host. It handles storage, content addressing, CRDT merging, query serving, and P2P replication via libp2p. GraphQL API (the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL.'s own copy of the data). |
9172 | 9171 | libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts.. |
8081 | 8080 | Health, metrics, registration. |
docker run -d \
--name shinzo-host \
-e BOOTSTRAP_PEERS="$BOOTSTRAP_PEER" \
-v ~/host-config.yaml:/app/config.yaml:ro \
-p 9182:9181 \
-p 9172:9171 \
-p 8081:8080 \
ghcr.io/shinzonetwork/shinzo-host-client:standard
BOOTSTRAP_PEERS is an override. The same value is in the config file, but some HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. builds also read the env var, so we set both.
Verify the peering
The HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL.'s /health lists the peers it's connected to. Once the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s Peer ID appears there, the connection is live.
curl -s http://localhost:8081/health | jq '{status, current_block, p2p: {self: .p2p.self.id, peers: [.p2p.peers[].id]}}'
{
"status": "healthy",
"current_block": 25303386,
"p2p": {
"self": "12D3KooWK76zTyFW73BSwoQRkuM45Aky7SNSCQGkzjGvxGy8Y76Z",
"peers": [
"12D3KooWK8zmiDmX91PwDV1PsqtgA1UUDuuyipVBVPEjrvwgoFJH"
]
}
}
Check the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s side too. Its peer list should now contain the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL.:
curl -s http://localhost:8080/health | jq '[.p2p.peers[].id]'
[
"12D3KooWK76zTyFW73BSwoQRkuM45Aky7SNSCQGkzjGvxGy8Y76Z"
]
If both list each other, libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts. is connected and DefraDBdefraDB A peer-to-peer, document-oriented database embedded in every indexer and host. It handles storage, content addressing, CRDT merging, query serving, and P2P replication via libp2p. is replicating between them! Data from the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. lands in the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. within a few seconds.
Query the Host
The HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. runs an embedded DefraDBdefraDB A peer-to-peer, document-oriented database embedded in every indexer and host. It handles storage, content addressing, CRDT merging, query serving, and P2P replication via libp2p. with a GraphQL API on the remapped port 9182. Once current_block is non-zero on the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL.'s /health, query it:
curl -s -X POST http://localhost:9182/api/v0/graphql \
-H 'Content-Type: application/json' \
-d '{"query":"query { Ethereum__Mainnet__Log(order: { blockNumber: DESC }, limit: 5) { address topics blockNumber transactionHash logIndex } }"}' \
| jq
{
"data": {
"Ethereum__Mainnet__Log": [
{
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"blockNumber": 25303402,
"logIndex": 899,
"topics": [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"0x000000000000000000000000710ed94f2a25859b7a45337f4245da34a6f15190",
...
The rows that come back were originally just logsLog A document type the indexer produces for event logs emitted during transaction execution. `topics` holds the indexed parameters and `data` holds the non-indexed ones, both as raw hex. ABI decoding happens later, in a lens. on Ethereum, then pulled in by the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. over the GethGeth Go-Ethereum, the Go implementation of an Ethereum node. Each indexer runs alongside a Geth node and connects over WebSocket (port 8546) and JSON-RPC (port 8545) to fetch block data. WebSocket, signed, gossiped over libp2plibp2p A peer-to-peer networking library. defraDB uses it for peer discovery and document replication between indexers and hosts. to the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL., and are now being served back to you over GraphQL. More queries are on the Host examples page.
Undo everything
If you want to burn everything down and start again, just run:
docker rm -f shinzo-indexer shinzo-host
rm ~/host-config.yaml
Troubleshooting
The Indexer's /health never returns a Peer ID
docker logs --tail 50 shinzo-indexer
The most common cause is the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. can't reach GethGeth Go-Ethereum, the Go implementation of an Ethereum node. Each indexer runs alongside a Geth node and connects over WebSocket (port 8546) and JSON-RPC (port 8545) to fetch block data.. Confirm GETH_RPC_URL and GETH_WS_URL are correct and reachable from the container, and that the API key (if any) is right. The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. can fall back to HTTP-only mode if WebSocket is unavailable, and will logLog A document type the indexer produces for event logs emitted during transaction execution. `topics` holds the indexed parameters and `data` holds the non-indexed ones, both as raw hex. ABI decoding happens later, in a lens. that it didDID A self-sovereign identifier (e.g., `did:key:z6Mk...`) derived from a public key. Hosts, indexers, and users are identified by DIDs in SourceHub authorization tuples..
The Host never lists the Indexer as a peer
Confirm the bootstrap peer multiaddr in the config uses the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s non-loopback container IP, not 127.0.0.1. From inside the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. container, the IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication.'s loopback is unreachable. Verify with:
docker exec shinzo-host getent hosts $(echo "$BOOTSTRAP_PEER" | grep -oP '/ip4/\K[0-9.]+')
Also check that the Peer ID portion of the multiaddr matches what curl localhost:8080/health | jq .p2p.self.id returns.
Permission denied on .defra/keys
The container runs as UID 1001. If you mounted a hostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. directory for persistence (this quickstart does not), make sure it's owned by 1001:1001.
Port already in use
The IndexerIndexer A node that reads blockchain data from a source chain, parses it into structured documents, and writes them to defraDB. Indexers are write-only: they push data out over P2P and reject all incoming replication. or the HostHost A Shinzo node that receives indexed data from indexers over P2P, verifies it, runs lens transforms to produce view documents, and serves those documents over GraphQL. is colliding with something else on the machine. Change the published ports in the docker run commands. Container-side ports stay the same.