{
  "tool_id": "art-560-oracle-price-aggregation",
  "tool_version": "1.0.0",
  "display_name": "Oracle Price Aggregation",
  "mcp_name": "oracle_price_aggregation",
  "mandate_type": "oracle_price_aggregation",
  "wave": 91,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-560-oracle-price-aggregation.html",
  "description": "Computes the aggregate price a decentralized oracle network would publish from a set of individual submissions, and gives that print its own citable execution_hash. Four aggregation mechanisms, each named by how it works rather than by any venue that runs it: median-filtered confidence-weighted mean (flag submissions deviating beyond a threshold from the unweighted median, then take the confidence-weighted mean of the survivors), stake-weighted median on the frequency convention (a submitter with twice the weight appears twice as often in the sorted list, never an average pulled toward the heavier weight), three-vote confidence median (each publisher votes price, price+confidence and price-confidence; the aggregate is the median of all votes and the aggregate confidence is the greater distance to the 25th and 75th percentile), and plain median with an f-of-n fault-tolerance readout. Supports an optional prev_print_hash citing the prior print of the same pair, which turns a series of same-pair prints into a walkable chain; omitting it reproduces the unlinked-print output byte for byte. HARD FENCE: every price, weight, confidence, timestamp and submitter id is supplied and asserted, never fetched (zero-egress); this simulates the aggregation step only, does not model the commit-reveal phase that precedes it, and never claims any real network did or would publish this number. A submitter id may be supplied as a sha256-salted commitment under SPEC.md section 25 to withhold the identifier while keeping the aggregation bound to it. Not a price feed and not a market-data source.",
  "input_schema_ref": "chaingraph/art-560-oracle-price-aggregation.html#manifest",
  "deadline": null,
  "deadline_note": "No statutory deadline; oracle aggregation is a continuous per-epoch computation, not a periodic filing.",
  "consumes": [],
  "feeds": [
    "art-561-currency-basket-index"
  ],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:ba126694afd24428319b321cbc06447608573deb30aaa75f5905a25146b3b91f",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-08-08"
    }
  ],
  "compute_proof_ready": "ready",
  "deferred_reason": "New node shipped in a shard work unit. Proving runs on the asynchronous GPU queue after the shard lands and is assembled; no compute proof is claimed here, and compute_proof_ready is stated per artifact rather than hardcoded in the kernel.",
  "export_capability": [
    "json"
  ],
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "GctIqmgUOwSdGWiT80W/UTI0Qs5Hrlzpu8fuvYMNPYchL5cByTF4xlb92Czwcw9pFgkUY+3sCbKdl+dHbQ3BoB9m1qYMrqRpZT+yfBkgTgHh6yt01LzQg+K1C+AL31jtJlLM2e34fVKOQh4AfMauARINAjfNTppV+BQKBdn4DUYDTrnDDVv6QHFINZkgKVgOUc5udx4VBoSrOm58aDKQhCDWKtTWKDuAIJrPk4aJDxr415jC+wO5ITSJZ3Ov6MsMId+akdVVfx2ti9g0rsUA2Ee8aSRFS/y3rbRNkrvu6boXQ2aeY7cC19h6VHEiUJ5h9J7XFoaMegsKwFfWu0GHNg==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:ba126694afd24428319b321cbc06447608573deb30aaa75f5905a25146b3b91f",
      "output": {
        "aggregate_confidence": 0.00475,
        "aggregated_price": 1.0821105263,
        "aggregation_method": "median_filtered_confidence_weighted_mean",
        "currency_pair": "EUR_USD",
        "epoch": 14200,
        "fault_tolerance": null,
        "fence": "Every submission -- price, weight, confidence, timestamp and submitter id -- is SUPPLIED, asserted, and digested into this receipt. This kernel simulates the aggregation step only: it performs no price-feed or oracle-network lookups (zero-egress by contract), does not model the commit-reveal phase that precedes aggregation, and makes no claim that any real network did or would publish this number.",
        "max_submitted": 1.12,
        "min_submitted": 1.0819,
        "not_proven": [
          {
            "detail": "Every price, weight, confidence, timestamp and submitter id is caller-supplied and asserted. This kernel performs no oracle-network, price-feed or market-data lookups (zero-egress) and does not verify any submission against an external source.",
            "item": "Submission authenticity"
          },
          {
            "detail": "This kernel simulates the aggregation step only. The commit-reveal phase that precedes aggregation in most real oracle networks is not modelled, so nothing here shows whether a submission was validly committed before it was revealed.",
            "item": "Commit-reveal phase"
          },
          {
            "detail": "The aggregate computed here is what the named mechanism yields on the supplied submissions. It is not a claim that any real oracle network did, or would, publish this number for this pair at this epoch.",
            "item": "Real-network publication"
          },
          {
            "detail": "The outlier penalty rate is computed from the stated formula as an informative readout. This kernel does not assert that any penalty was applied, by whom, or under whose rulebook.",
            "item": "Outlier-penalty enforcement"
          }
        ],
        "outlier_count": 1,
        "outlier_detail": [
          {
            "deviation_pct": 3.483323,
            "id": "sub-03",
            "outlier_penalty_rate_pct": 0
          }
        ],
        "outlier_threshold_pct": 3,
        "outliers_flagged": [
          "sub-03"
        ],
        "price_spread_pct": 3.521582,
        "priced_submission_count": 3,
        "rejected_inputs": [],
        "stale_submissions": [],
        "structural_error": null,
        "submission_count": 3,
        "surviving_count": 2
      }
    }
  }
}
