v1Published artifact contractRaw daily aggregates from the blockchain — exactly what the network did on each day, in native units, with no statistical transformation applied. This is the authoritative source that all Meta and Derived computations are built from.
gold/<chain>/latest.jsongold/<chain>/last90d.jsongold/<chain>/YYYY-MM-DD.jsondatestring (YYYY-MM-DD)string (YYYY-MM-DD)YYYY-MM-DD) rather than a timestamp to avoid timezone ambiguity.feature_daily_agg.py → build_gold_timeseries.py → published JSONchainstringbitcoin, ethereum, arbitrum, or base.stringbitcoin, ethereum, arbitrum, or base.tx_count_dailynumbernullablenumber · nullablescorecard.dimensions.demand via log-normalised z-score.feature_daily_agg.py → tx_count_dailyblock_count_dailynumbernullablenumber · nullablefeature_daily_agg.py → block_count_dailyvalue_transferred_nativenumbernullablenumber · nullablefeature_daily_agg.py → value_transferred_nativemedian_tx_value_nativenumbernullablenumber · nullablefee_burden_proxy = median_tx_fee_native / median_tx_value_native, which normalises fee cost relative to the typical economic size of a transaction. On EVM chains where many transactions have zero msg.value (smart contract calls), this can be near zero and the fee burden proxy may not be meaningful — the pipeline handles this gracefully via null fallback.feature_daily_agg.py → median_tx_value_nativemedian_tx_fee_nativenumbernullablenumber · nullablefeature_daily_agg.py → median_tx_fee_nativefailed_tx_ratenumber (0–1)nullableEVM onlynumber (0–1) · nullable · EVM only(receipt_status != 1) for EVM transactions. Always null for Bitcoin, which has no analogous on-chain failure concept under the UTXO model. A rising failed_tx_rate alongside elevated fees suggests the network is under genuine execution strain rather than merely high demand. Feeds scorecard.dimensions.friction alongside fee_burden_proxy.feature_daily_agg.py → failed_tx_rate (EVM only)gas_utilization_pctnumber (0–100)nullableETH L1 onlynumber (0–100) · nullable · ETH L1 onlygas_used / gas_limit across all blocks for the day. Only meaningful for Ethereum L1 — hidden for Bitcoin (no gas model) and L2 chains (different capacity mechanics). Under EIP-1559, the target is 50% utilisation with a 2× burst ceiling. Values consistently above 50% indicate the base fee is rising; values near 100% indicate the network is running at its hard ceiling. The primary scorecard.dimensions.capacity input for ETH L1.feature_daily_agg.py → gas_utilization_pct (ETH L1 only)unique_active_addressesnumbernullableEVM in practicenumber · nullable · EVM in practicetx_per_user ratio.feature_daily_agg.py → unique_active_addressesavg_block_time_secnumbernullablenumber · nullablefeature_daily_agg.py → avg_block_time_sec → blocktime_instability (regime_engine.py)The intelligence layer — regime classification, confidence scoring, three-axis scorecard, and ranked driver set. This is the primary product output and the layer most subscribers use for quantitative research.
meta/<chain>/latest.jsonmeta/<chain>/last90d.jsonmeta/<chain>/YYYY-MM-DD.jsondatestring (YYYY-MM-DD)string (YYYY-MM-DD)chainstringbitcoin, ethereum, arbitrum, or base.stringbitcoin, ethereum, arbitrum, or base.updated_throughstring (YYYY-MM-DD)nullablestring (YYYY-MM-DD) · nullablemethodology_versionstringnullablestring · nullable/methodology/changelog.revision_idnumbernullablenumber · nullablestatus.labelstring (enum)STABLE, HEATING, CONGESTED, CHEAP, or UNKNOWN/DEGRADED. The top-line answer to "what state is the network in right now?"string (enum)STABLE, HEATING, CONGESTED, CHEAP, or UNKNOWN/DEGRADED. The top-line answer to "what state is the network in right now?"confidence < 0.40 → UNKNOWN/DEGRADED; (2) Capacity EXTREME_HIGH or (Capacity HIGH and Friction HIGH) → CONGESTED; (3) Friction LOW and Capacity LOW → CHEAP; (4) Demand HIGH and any axis HEATING → HEATING; (5) default → STABLE. The UI reads this field directly — it never recomputes the label.main.py → status object → status.labelstatus.colorstring (enum)string (enum)status.one_linerstringnullablestring · nullableconfidence.confidence_scorenumber (0–1)nullablenumber (0–1) · nullable√(dq × lc). The geometric mean ensures weakness in either component suppresses the composite. Hard gate: if score < 0.40 then status.label is forced to UNKNOWN/DEGRADED. Caution band 0.40–0.69: scorecard scores are degraded toward 50 via score = 50 + (score−50) × effective_confidence.confidence.confidence_scoreconfidence.data_quality_scorenumber (0–1)nullablenumber (0–1) · nullableconfidence.data_quality_scoreconfidence.label_confidence_scorenumber (0–1)nullablenumber (0–1) · nullableconfidence.label_confidence_scoreconfidence.methodology_versionstringstringconfidence.methodology_versionconfidence.candidate_labelobjectnullableobject · nullableconfidence.candidate_labelconfidence.lag_days_vs_utc_todaynumbernullablenumber · nullableconfidence.lag_days_vs_utc_todayconfidence.missingbooleannullableboolean · nullableconfidence.semanticsstringevidence_sufficiency_asof_date.stringevidence_sufficiency_asof_date.scorecard.dimensions.demand.scorenumber (0–100)number (0–100)50 + 40 × tanh(z / 1.5) over the combined demand z-signal, then degraded toward 50 by effective_confidence = base_confidence × coverage_factor. Input metrics: tx_count_daily (log-normalised), unique_active_addresses, and tx_per_user ratio. Demand coverage factor is 3/3 when all inputs are present.scorecard.dimensions.demand.scorescorecard.dimensions.demand.levelstring (enum)High (score ≥ 67), Normal (34–66), or Low (≤ 33). Quick-read label for the score.string (enum)High (score ≥ 67), Normal (34–66), or Low (≤ 33). Quick-read label for the score.scorecard.dimensions.demand.coverage_factornumber (0–1)number (0–1)scorecard.dimensions.demand.effective_confidencenumber (0–1)number (0–1)base_confidence × coverage_factor. This is the value used to degrade the raw demand score toward 50. A demand score of 80 under effective_confidence 0.9 is much more assertive than the same score under effective_confidence 0.3.scorecard.dimensions.friction.scorenumber (0–100)number (0–100)scorecard.dimensions.friction.scorescorecard.dimensions.friction.coverage_factornumber (0–1)number (0–1)scorecard.dimensions.capacity.scorenumber (0–100)number (0–100)scorecard.dimensions.capacity.scoreregime.labelstring (enum)status.label. The primary field is status.label; regime.label is kept for historical compatibility.string (enum)status.label. The primary field is status.label; regime.label is kept for historical compatibility.regime.asof_datestring (YYYY-MM-DD)nullablestring (YYYY-MM-DD) · nullableregime.determinism_hashstring (12-char hex)string (12-char hex)stable_sha256_12(json_dumps_canonical(det_payload)). Enables tamper detection: retroactive reclassification of a historical label would produce a different hash. Use this for backtesting integrity validation.regime.determinism_hashregime.window_daysnumbernumberregime.drivers[]array of objectsarray of objectsregime.drivers[].metricstringstringregime.drivers[].axisstring (enum)demand, friction, or capacity.string (enum)demand, friction, or capacity.regime.drivers[].z_robustnumbernumber0.6745 × (x − median) / MAD. The 0.6745 factor makes it asymptotically equivalent to a standard z-score under Gaussian assumptions while inheriting outlier robustness. Fallback: if MAD=0 use standard z; if std=0 return 0.regime.drivers[].pct_90dnumber (0–100)number (0–100)regime.drivers[].momentum_7d_vs_30dnumbernumberz_robust(mean_7d) − z_robust(mean_30d). Removes level effects by standardising both windows against the same 180-day baseline before differencing. Threshold: ≥ 0.15 is HEATING trend; ≤ −0.15 is COOLING; otherwise FLAT.regime.drivers[].currentnumbernullablenumber · nullableregime.drivers[].trendstring (enum)HEATING (momentum ≥ 0.15), COOLING (≤ −0.15), or FLAT.string (enum)HEATING (momentum ≥ 0.15), COOLING (≤ −0.15), or FLAT.regime.drivers[].bandstring (enum)EXTREME_HIGH, HIGH, NORMAL, LOW, or EXTREME_LOW.string (enum)EXTREME_HIGH, HIGH, NORMAL, LOW, or EXTREME_LOW.regime.axes.demand / friction / capacityobjectobjectband_high (NORMAL/HIGH/EXTREME_HIGH), band_low (NORMAL/LOW/EXTREME_LOW), and trend (HEATING/FLAT/COOLING). These are computed as aggregates over the axis's driver signals rather than from a single metric. Used internally in regime rule evaluation.profileobjectobjecttype (btc/eth_l1/l2), label, hidden_metrics[] (metrics suppressed for this chain type), capacity_proxy (which metrics proxy capacity for this chain), and an optional note. The profile field makes chain-specific behaviour explicit in the published artifact rather than requiring consumers to know which metrics apply to which chains.Smoothed rolling averages of Gold metrics — 7-day (MA7) and 30-day (MA30) — used to draw the trend charts on chain pages. Useful for distinguishing brief spikes from sustained structural changes.
derived/<chain>/latest.jsonderived/<chain>/last90d.jsonderived/<chain>/YYYY-MM-DD.jsondatestring (YYYY-MM-DD)string (YYYY-MM-DD)chainstringstringderived.metrics.<metric>__ma7numbernullablenumber · nullabletx_count_daily__ma7, median_tx_fee_native__ma7, etc. All numeric Gold fields get both MA7 and MA30 variants. The 7-day window is the short-horizon smoother used for momentum calculation in the regime engine.derived.metrics.<metric>__ma7derived.metrics.<metric>__ma30numbernullablenumber · nullablemomentum_7d_vs_30d = z_robust(mean_7d) − z_robust(mean_30d). For chart reading, the MA30 slope over the visible window is the most reliable indicator of structural regime change — short spikes in MA7 above MA30 without sustained elevation are typically noise.derived.metrics.<metric>__ma30derived.meta_confidenceobjectnullableobject · nullablederived.context_blocksarrayarrayShort descriptive JSON summaries built from the latest Meta context. Briefs are designed for fast reading, reporting, and non-pipeline workflows while preserving the same daily, non-predictive, non-advisory boundaries as the rest of Urd Atlas.
briefs/chains/<chain>/latest.jsonbriefs/site/latest.jsonbriefs/cross-chain/latest.jsonbriefs/manifest.jsonschemastringstringurd_atlas.chain_brief.v1 or urd_atlas.site_briefs_bundle.v1, depending on whether the file is a per-chain brief or a site-level bundle.scripts/build_briefs/* → published briefs JSONbrief_statusstring enumpublished, degraded, or unavailable.string enumpublished, degraded, or unavailable.chainstringchain briefsbitcoin, ethereum, arbitrum, or base.string · chain briefsbitcoin, ethereum, arbitrum, or base.updated_throughstring (YYYY-MM-DD)nullablestring (YYYY-MM-DD) · nullablelabelstring enumnullablestring enum · nullableheadlinestringnullablestring · nullableconfidenceobjectnullableobject · nullableguardrailsobjectnullableobject · nullablefeature_daily_agg.py → build_gold_timeseries.py → published JSONmain.py (regime_engine + market_scorecard + confidence) → published JSONpublish_artifacts.py (rolling_mean, windows=[7,30]) → published JSONscripts/build_briefs/* → published JSONv1