ICPWatch
Get alerts

Data sources

Every number on ICPWatch has a known source and a timestamp. On-chain reads come first. Where a third-party source is used it sits behind an adapter, is labeled as such, and is listed here.

Lifeline

SourceCoversConfidenceCadence
SNS root get_sns_canisters_summary (certified update call)Every canister of every SNS: root, governance, ledger, index, swap, archives, dapps. Cycles, idle burn, freezing threshold, memory, controllers, module hash.MeasuredHourly
NNS root canister_status (certified update call)Everything NNS root controls: ICP ledger, index, and archives, all ck token suites, and community ledgers that added NNS root as a controller.MeasuredHourly
Canister /metrics via http_request querySelf-reported cycle balance of DFINITY ledger, index, and archive canisters.Measured10 minutes
Blackhole canister_statusCanisters that list the public ninegua blackhole as a controller. It does not return idle burn. CycleOps blackholes refuse outside callers, so they are not a source.MeasuredHourly
Query probe to a known methodLiveness of ledgers, indexes, and archives. A frozen canister answers with IC0207.ProbedHourly
Update-call probe to a method that does not existLiveness of any canister at all. The ingress filter answers before method lookup: frozen IC0207, stopped IC0508, missing IC0301. Costs the target one ingress fee, about a millionth of a trillion cycles.ProbedHourly
read_state (certified)Controllers, module hash, subnet for any canister.MeasuredOn discovery
Ledger icrc3_get_archives and archivesArchive discovery for every ledger.MeasuredHourly

One thing worth knowing: a controller can report a canister as running while it is frozen, because freezing is a function of balance and threshold, not of run status. Lifeline derives frozen state from the balance and from probes, never from that field alone.

Balance queries skip per-node signature verification to stay inside our CPU budget. Controller status reads are update calls and are verified against the NNS root key.

Markets

SourceCoversKind
ICPSwap ICP/ckUSDC pool metadataICP price in USD from sqrtPriceX96, assuming ckUSDC is one dollar. Cross-checked against the REST price every run.On-chain
Ledger icrc1_total_supply, icrc1_fee, icrc1_decimalsSupply and token parameters, per ledger.On-chain
SNS aggregator canister, SNS-W, ck ledger suite orchestratorToken registry: every SNS, every ck token, with their canister ids.On-chain
ICPSwap info APIPools, reserves, 24h and 7d volume, hourly and daily candles. ICPSwap's own on-chain info canisters are stopped, so this REST feed is the only source for volume.Third party
ICRC ledger API (DFINITY)Top holders and the large-transfer feed. No canister can enumerate holders, so the only alternative is replaying every block, which is planned.Third party

DEX coverage. As verified in September 2026, ICPSwap is the only ICP DEX with meaningful volume. KongSwap has removed every pool and its API is offline, Sonic has not traded since early August, and ICDex trades about a dollar a day. The aggregation layer takes any number of DEX adapters, so new venues slot in when they have liquidity worth counting.

TVL. A pool only counts if one side is ICP, ckBTC, ckETH, ckUSDC, or ckUSDT, and it is valued from that side. Pools of two illiquid tokens priced against each other inflate naive TVL sums into the billions.

Network

SourceCoversKind
NNS governance list_proposalsProposals, tallies, deadlines, outcomes.On-chain
IC public API (DFINITY)Block rate, message rate, cycle burn rate, per-subnet metrics, canister counts. These rates have no on-chain source.Third party

Per-canister burn is private. Nobody can rank every canister on a subnet by burn: balances are visible only to controllers. Subnet pages therefore rank the canisters Lifeline can measure, and say so.