How it works
ICPWatch is three products on one data layer: Lifeline watches canister health, Markets prices tokens across DEXs, and Network makes the chain browsable.
Lifeline
Every canister on the Internet Computer pays for itself in cycles. When the balance drops below the freezing threshold the canister freezes and rejects calls. If it then burns through what is left on storage cost alone, it is uninstalled and its state is gone. For a ledger archive that means transaction history is lost for good.
Lifeline models every token as a group: ledger, index, and all archive canisters. Archives are discovered from the ledger itself and re-discovered every hour, so a newly spawned archive is watched without anyone adding it.
Where balances come from
A canister's cycle balance is only visible to its controllers, so Lifeline uses every public path and labels each number with how it was obtained:
- Measured. Read from a controller that answers publicly (the SNS root canister for every SNS, the NNS root canister for ICP and ck tokens, a blackhole controller) or from the canister's own metrics endpoint.
- Inferred. Derived from partial data, for example a projection that had to assume the default 30 day freezing threshold.
- Probed. The balance is not readable, so Lifeline sends a query and checks the response. A frozen canister answers with a specific error code, which is enough to detect freezing even with no balance.
- Unknown. Nothing readable yet.
Projections
The freezing threshold in cycles is idle burn per day times the threshold in days. Time to freeze is the balance above that threshold divided by the observed burn rate. After freezing, only idle cost burns, so time to deletion is the remaining balance divided by idle burn. Top-ups are excluded from burn calculations.
Markets
Prices are read from DEX canisters directly and weighted by pool liquidity, so one thin pool cannot move the headline price. Supply comes from each ledger's icrc1_total_supply. Each token shows which DEX its liquidity actually sits on.
Network
Proposals are read from the NNS governance canister. Controllers and module hashes are read from the certified state tree. Subnet and network-wide metrics come from the public IC metrics API, isolated behind an adapter so it can be swapped.
Provenance
Every number carries a source and a timestamp. A green dot means fresh, amber means the collector is behind, red means the source has been unreachable for a while. We would rather show an honest "unknown" than a confident guess.