Surfil

Signed outputs

Every paid operation in Surfil produces a server-signed output - an Ed25519 signature over the measured result. The signature is the product: it is what gets metered, and it is what makes every claim checkable by someone who doesn't trust us.

Why it exists

Two problems, one mechanism. First, honesty: a savings number is marketing until someone outside your account can verify it. Second, anti-bypass: metering that lives in client code can be patched out. Signing on the server solves both - the thing of value is the signature, it can only come from the edge, and anyone can check it afterward.

The lifecycle: consume → sign → verify

  1. Consume - a Credit is atomically, idempotently decremented for the operation (see Credits).
  2. Sign - the edge signs the measured output with Ed25519.
  3. Verify - anyone checks the signature against the payload, offline, with the public key. No account, no server round-trip.
$ surfil verify <receipt-id>
✓ VALID (offline · public key · no account)

What it means for you

  • A savings receipt or policy decision stays checkable even if Surfil's edge is unreachable - or gone.
  • You can hand a receipt to an auditor, a manager, or a skeptic; surfil verify works on their machine without your credentials.
  • There is no client-side licensing shortcut for anyone to exploit, including us - execution is unmetered, so nothing on your device ever gates your work.
Verification failing is a feature working: a receipt whose payload was altered - even by one byte - reports invalid. If surfil verify rejects a receipt, treat the receipt as untrusted, not the verifier as broken.