Proof semantics

What a Signet certificate proves — precisely.

This page is part of the product, not marketing. A proof is only useful if everyone agrees on exactly what it claims. Here is the claim, the cryptography behind it, and how to check it without trusting us.

The claim

A Signet certificate makes one narrow, strong statement: the holder of the private key for a given address signed a given challenge at a given time. Nothing more. It is a proof of control of a key, not of identity.

Proved, trustlessly

  • This address produced this signature over this challenge.
  • The signer held the private key at signing time.
  • The certificate hash existed by the on-chain anchor time.

Not proved

  • The identity of the signer.
  • That control is exclusive, or that the key was not shared or coerced.
  • That the signer is the requester's customer — identity binding is the requester's KYC.

How it is proved

The requester issues a challenge that embeds a single-use nonce bound to that one request. The counterparty signs the exact bytes of the challenge with their wallet. We verify the signature against the address on the correct chain, then hash the resulting certificate and anchor that hash on-chain via a merkle batch — the same Stamper contract used across the BA family, so the public verifier validates it unchanged.

The nonce makes replay impossible: a signature over one request's challenge cannot be moved to another. We verify the stored challenge byte-for-byte, never a re-rendered copy.

Per-chain cryptography

Each chain has its own signing standard. The verification layer is designed so new chains are additive.

ChainStandardVerified
Ethereum & EVMEIP-191 personal_signOffline signer recovery
Smart-contract walletsEIP-1271On-chain isValidSignature call
Bitcoin (SegWit / Taproot)BIP-322Offline
Bitcoin (legacy P2PKH)BIP-137 signmessageOffline
Solanaed25519Offline

Verify it yourself

Every certificate exports a self-contained proof packet. Anyone can check it against public chains, with no account and no trust in BA | Signet:

  1. signature is a valid signature of challenge by address on the stated chain. This alone proves control of the key.
  2. Recompute SHA-256 of the canonical certificate JSON; it must equal contentHash (the merkle leaf).
  3. Fold the leaf with merkleProof (keccak256, sorted pairs); the result must equal merkleRoot.
  4. Call timestamps(merkleRoot) on the Stamper contract on Polygon; a non-zero value is the time the certificate existed by.
  5. Optionally verify the OpenTimestamps proof against the Bitcoin block.

What we store

The counterparty is not our customer and has no account. We collect the minimum: the address, the challenge, the signature, the timestamp, and the requester's reference. We never request or accept a private key or seed phrase. No IP-based profiling beyond what abuse prevention requires. Retention is the requester's compliance record, removed on request.