# observation_fact

Declares a human-readable label for an address without scheduling a READ.

Canonical HTML: <https://determica.com/docs/functions/observation_fact>

- Kind: scalar function
- Category: [Simulation](/docs/category/simulation.md)
- Tags: Program Compiler, Simulate

Declares a human-readable label for an address without scheduling a READ.

## Overload 1: observation_fact(ADDRESS, VARCHAR)

```sql
observation_fact(ADDRESS, VARCHAR)
```

Declares a human-readable label for an address without scheduling a READ.

- Kind: scalar
- Execution context: Offline
- Behavior: Transform
- Execution modes: Offline
- Input shape: Scalar Arguments
- Planning contract: Runtime
- Cardinality: One Per Input
- Determinism: Deterministic
- Return shape: Scalar
- Schema stability: Fixed
- Stability: Stable
- Side effects: None documented

### Inputs

- `address` (ADDRESS; required; positional) — Address associated with the label in stored execution evidence.
- `label` (VARCHAR; required; positional) — Text containing 1-256 valid UTF-8 bytes and no NUL byte; validated by this constructor.

### Returns

Address-label OBSERVATION

Returns an address fact. If an observation list declares the same address repeatedly, the last declaration is effective and earlier declarations remain stored as ineffective.

- `observation` (OBSERVATION)

Address-label OBSERVATION. Returns an address fact. If an observation list declares the same address repeatedly, the last declaration is effective and earlier declarations remain stored as ineffective.

### Examples

_Local SQL · Local_

```sql
SELECT observation_fact(
  '0x2000000000000000000000000000000000000002'::ADDRESS,
  'writer'::VARCHAR
) IS NOT NULL AS declared;
-- => [{"declared":"true"}]
```

## Guidance

### No state read

Address facts do not count as expanded observation points and do not execute EVM code.
