APHELION

Prove the detection. Keep the sky.

A sealed observatory on Midnight: a Compact circuit attests that a gravitational-wave-class detection happened, without ever writing RA, Dec, strain samples, or instrument secrets on the public ledger.

First-screen number: public SNR band 1 (≥ 8.00) · status CONFIRMED · detections 1. RA/Dec stay in the witness.

Ten-second try: https://youtu.be/pvheSmLqFRo or git clone https://github.com/moscraciunxxx/aphelion && cd aphelion && npm test && npm run demo

Judge URL / source: https://github.com/moscraciunxxx/aphelion

Inspiration

Prior Midnight gallery work hides salaries, ballots, or KYC badges. None of them treat the sky as the secret. Multi-messenger astronomy already embargoes localizations and treats strain as proprietary. APHELION is the instrument that can say “a detection happened” on a public ledger without handing a rival the coordinates.

What it does

An accredited observatory issues an attestation (private instrument secret → public root). An observer files a Compact circuit that proves:

  • the instrument is accredited
  • private milli-SNR is at or above the public band floor
  • sky hash and strain hash are bound into the proof
  • the nullifier for (observer, epoch) is unspent

The public ledger stores only instrument class, SNR band, epoch, nullifier, status, and the contract tag. RA, Dec, raw samples, and both secrets are witnesses. They never appear in the public JSON.

The viewport is a general-relativistic thin-disk / photon-ring renderer. Mass, spin, and distance change the image and the private photometry the circuit consumes.

How we built it

  • contract/aphelion.compact compiled with Compact 0.31.1 (fileDetection, issueInstrument, confirmDetection circuits + witnesses)
  • Node bindings in src/circuit.js — the functions the backend and npm run demo actually call
  • src/physics.js produces private strain and SNR
  • server/index.js + public/ full-stack UI (WebGL2 photon ring)
  • Tests drive those shipped functions (valid witness, low SNR, bad secret, spent nullifier, no secret leakage)

Source: https://github.com/moscraciunxxx/aphelion

How Midnight enables the solution

Compact’s witness / disclose / nullifier model is the product. A transparent chain cannot carry a detection without leaking the sky. Midnight can, because the proof is generated locally and only disclosed fields hit the ledger.

spent.member(nullifier) is a ledger read of a witness-tainted hash — Compact requires disclose before the map sees it. That compiler error is the privacy model working.

Challenges

Official Preview/PreProd eligibility wants a live deploy plus a Docker proof-server. This machine has the Compact compiler (0.31.1) and compiled ZKIR artifacts; it does not have Docker. This writeup does not invent a contract address. The circuit is real; the Preview deploy is blocked on proof-server/Docker, not on missing Compact.

Accomplishments

A real Compact contract that is not a bulletin board. A photon-ring instrument that is not a stock chart. Tests that fail a lying witness.

What we learned

Witness-tainted hashes cannot be used as Map keys until disclose. That is not a compiler quirk — it is the privacy boundary.

What's next

Proof-server deploy to PreProd the moment Docker is available; multi-observatory coincidence without sharing pointing.

Setup

git clone https://github.com/moscraciunxxx/aphelion
cd aphelion
npm test
npm run demo

npm run demo prints APHELION HUD SNR band 1 status CONFIRMED detections 1 and writes artifacts/public-ledger.json (public fields only). Optional local instrument: npm start (not the Judge URL). There is no Preview/PreProd contract address on this machine (no Docker proof-server).

Demo video: https://youtu.be/pvheSmLqFRo

Built With

Share this project:

Updates