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.
| Chain | Standard | Verified |
|---|---|---|
| Ethereum & EVM | EIP-191 personal_sign | Offline signer recovery |
| Smart-contract wallets | EIP-1271 | On-chain isValidSignature call |
| Bitcoin (SegWit / Taproot) | BIP-322 | Offline |
| Bitcoin (legacy P2PKH) | BIP-137 signmessage | Offline |
| Solana | ed25519 | Offline |
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:
signatureis a valid signature ofchallengebyaddresson the stated chain. This alone proves control of the key.- Recompute
SHA-256of the canonical certificate JSON; it must equalcontentHash(the merkle leaf). - Fold the leaf with
merkleProof(keccak256, sorted pairs); the result must equalmerkleRoot. - Call
timestamps(merkleRoot)on the Stamper contract on Polygon; a non-zero value is the time the certificate existed by. - 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.