Allocations, POIs, and the gap between protocol and practice

The protocol now permits allocations that stay open indefinitely. The shipped stack still recycles them. Both facts are true and you need both to plan capacity.

6 of 10 in the Indexer path advanced 14 min

Checked against Graph Horizon (2025-12-11)

Last read 2026-08-30 Due again 2026-11-30

Every protocol claim below was read at these sources on 2026-08-30. Where they disagree with each other, the lesson says so.

An allocation is a commitment: this much of my stake, pointed at this subgraph, which I undertake to index and serve. It is the unit that earns indexing rewards.

The Proof of Indexing.

A POI is a hash committing to the data you derived for a subgraph up to a block. Two indexers who indexed the same subgraph honestly, from the same chain data, produce the same POI. Two who did not, do not.

The protocol never re-executes your work. It cannot, affordably. Instead it makes your claim comparable: publish a POI, and anyone who indexed the same thing can check it against theirs. Disagreement is grounds for a dispute.

What Horizon changed.

Previously an allocation had to be closed to collect its rewards, which produced a distinctive operational rhythm: open, run, close to collect, reopen. Every cycle cost transactions and created a window where stake was not earning.

Under Horizon, per the indexing overview, “allocations can remain open indefinitely. There is no requirement to close an allocation to collect rewards.” You present POIs periodically and collect against them.

The constraint that replaces the deadline is staleness. If your most recent POI is older than 28 days, the allocation is stale and stops earning. Nothing is confiscated. It simply stops paying, which is easy to miss.

The part most pages leave out.

The registry records this as Indefinite and marks it disputed, because the protocol capability and the operational reality are not the same thing today.

This distinction is the single best example of why this site exists. Either page alone gives you a confident answer, and an operator who reads only the first will be surprised by their own agent’s behaviour.

What actually earns.

Three conditions, all required:

  1. The allocation is open against a subgraph.
  2. Your POI is fresh, within the staleness window.
  3. The subgraph carries signal. Allocating to a subgraph with no curation signal earns no indexing rewards, however diligently you index it.

Condition three catches people. A technically flawless allocation to an unsignalled subgraph earns nothing, and nothing about the machine looks wrong.

Failure modes worth monitoring.

  • The stale allocation. POIs stopped, earning stopped, everything still running. Monitor POI age directly, not merely whether the process is alive.
  • The failed deployment. A subgraph fails on a contract upgrade. It has an open allocation, produces no new POIs, and goes stale in a month.
  • The wrong POI. Divergence from other indexers, usually from a chain data difference or a graph-node version difference. This is the one that gets disputed, and comparing your POIs against other indexers before publishing is cheaper than arbitration.
  • The unsignalled allocation. Earning nothing for a reason that is economic rather than technical.
Before reading on: why was requiring a close to collect rewards a problem worth removing?

It coupled a payment event to a capital event, and the coupling was expensive in two directions.

Closing to collect meant repeatedly paying transaction costs for something that was purely about payment, and it created gaps where stake was between allocations and earning nothing. Operators responded by tuning the cycle, which is effort spent on the mechanism rather than on serving queries.

It also distorted behaviour. If collecting requires closing, then the decision “should this stake stay here” gets entangled with “I need to collect now”, and those should be independent questions.

Separating them lets an allocation persist as long as it is the right place for the stake, with payment following proofs rather than following a closure. The staleness window keeps the obligation honest: prove you are still doing the work, or stop being paid for it.

Check yourself

What happens if your POI goes past the staleness limit?

The protocol permits indefinite allocations. What does the indexer stack actually do at Horizon launch?

An allocation is open, POIs are fresh, and it earns nothing. Most likely reason?