# blocks-since-last-update (/docs/query/blocks-since-last-update)

(mechanism 0), or None.

On commit-reveal subnets LastUpdate is bumped at commit time, not when
the weights are revealed and applied. None means the subnet has no
LastUpdate vector or the uid does not exist. The standard "is this
validator still setting weights" health check.

**Category:** Epochs & timing

## Parameters [#parameters]

| Parameter | Type    | Description                       |
| --------- | ------- | --------------------------------- |
| `netuid`  | integer | Subnet to query.                  |
| `uid`     | integer | UID of the neuron on that subnet. |

## CLI [#cli]

```bash
btcli query blocks-since-last-update --netuid <integer> --uid <integer> --json
```

## Python [#python]

Namespace method (autocomplete, signature help):

```python
import bittensor as bt

sub = bt.Subtensor()
result = sub.epochs.blocks_since_last_update(netuid=1, uid=1)
```

Or dispatch by name, as an agent would:

```python
result = sub.read("blocks_since_last_update", netuid=1, uid=1)
```

Async is the same surface awaited: `async with bt.Subtensor() as client:`.

## On-chain implementation [#on-chain-implementation]

* Storage [`SubtensorModule.LastUpdate`](/code/pallets/subtensor/src/lib.rs#L2477)

Every file is browsable under [/code](/code) exactly as built into the runtime.
