Subgroves
A subgrove is the basic unit you create and own on Willow. Every subgrove has an id, holds one kind of data, and produces verifiable results. There are three modes.
The three modes
Section titled “The three modes”BlockchainIndexing
Section titled “BlockchainIndexing”Automatically indexes events from an external chain. You describe which contracts and events to follow in a manifest; indexer nodes pull the data, submit it with proofs, and validators commit the result. The output is a live dataset you can query with SQL or GraphQL.
This is the default mode and the one most people start with — see Create a subgrove.
DataStorage
Section titled “DataStorage”Free-form key/value records. Writers sign transactions to store JSON; readers fetch it back with Merkle proofs. Use it for structured application data that you want to be tamper-evident.
Key fields: name, writers (DIDs allowed to write), free_readers (DIDs
that read without metering), and optional read_pricing.
FileStorage
Section titled “FileStorage”Chunked binary storage with Merkle-verified downloads. File metadata goes through consensus; the actual bytes live on dedicated storage nodes, and each download is checked chunk-by-chunk against its Merkle root.
Key fields: name, max_file_size (bytes), replication_factor (storage
nodes per file), writers, free_readers, and optional retention_period
(seconds; 0 = permanent).
Anatomy of an indexing subgrove
Section titled “Anatomy of an indexing subgrove”A BlockchainIndexing subgrove is registered with a manifest (which
contracts and events to index) and a schema (the shape of the rows):
| Part | What it is |
|---|---|
subgrove_id | Unique id for the subgrove. |
schema | A GraphQL entity schema describing the rows. Provided alongside the manifest at registration. |
manifest | spec_version ("1.0.0"), a description, and data_sources. |
data_sources[] | Each contract: name, network, address, abi, start_block, and an events list. |
execution_mode | How the indexed data is verified — see Execution modes. |
indexer_config | How many indexers run it, their rewards and stake. |
A minimal data source is flat — the contract details and the event signatures live directly on it:
{ "name": "USDC", "network": "mainnet", "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", "abi": "ERC20", "start_block": 6082465, "events": ["Transfer(address indexed,address indexed,uint256)"]}See Create a subgrove for the full manifest, the schema, and every field explained.
Funding
Section titled “Funding”Registering a subgrove requires a small amount of WILL to fund the indexers that run it. You set the initial funding when you register.