Verification criteria
Verification is a set of scoped records, not a universal badge. These criteria are public; every decision can be revoked or downgraded, and the history remains visible.
Four things that are never the same
- Listed — the project exists on the platform. Nothing was checked.
- Identity verified — evidence that the team controls its wallets, domain or repositories.
- Platform reviewed — an administrator reviewed a stated scope.
- Claims verified — a specific claim (a deployment, a source match, a deliverable) was checked.
Identity / ownership
Evidence that the team controls the project's wallets, official domain or repositories.
- Wallet ownership: a signed, nonce-protected challenge from the wallet (shown as “Wallet proof”; reviewed separately if requested).
- Domain control: a DNS TXT record or file at a well-known path on the official domain, naming the project ID.
- Repository control: the requesting account is an admin of the GitHub organization or repository.
Platform review
A platform administrator manually reviewed the project's information and evidence within an explicit scope.
- A named administrator reviews the project's declared information against the evidence provided.
- The review scope is written down and published with the badge. Anything outside the scope is not covered.
- Approval is never sold and never implied by registration, popularity or funding.
Technical evidence
A specific technical claim — a contract deployment, source match, release or audit — was checked.
- Contract source match: deployed runtime bytecode matches verified source at a stated commit and compiler settings.
- Deployment: the stated transaction created the stated address on the stated chain.
- Release / audit evidence: the referenced artifact exists and corresponds to the reviewed version.
External acknowledgment
An attributable third party (grant provider, auditor) confirmed a specific claim.
- Only accounts authorized by the funder or auditor can acknowledge a deliverable or claim.
- Project members can never acknowledge their own deliverables.
- Acknowledgments are attributed to the organization and reviewer, with a decision note.
Revocation, downgrades and appeals
Administrators revoke or downgrade a verification when its evidence no longer holds (for example, ownership changed). The project owner can submit a new request with fresh evidence; community members can report problems from any project page. Status changes are append-only.
Provenance of timeline entries
- Team-reported
- Published by a member of the project team. The platform has not checked the claim.
- Imported
- Copied from an external source (e.g. GitHub) with its source identifier preserved. Reflects what the source said, not the team's interpretation.
- Automatically detected
- Recorded by the platform itself when a state change happened (e.g. a member accepted an invite).
- Platform-verified
- A platform administrator checked the specific evidence listed in the verification scope.
- Independently acknowledged
- Confirmed by an attributable third party, such as an authorized grant reviewer.
Canonical serialization & hashing
- Records are serialized with RFC 8785 (JSON Canonicalization Scheme): keys sorted by UTF-16 code units, no whitespace, ECMAScript number formatting.
- The hash is SHA-256 over the UTF-8 bytes, hex-encoded. The database recomputes it on insert and rejects mismatches.
- Schemas:
vpn.manifest/1for manifests andvpn.event/1for events. Each manifest includes the previous version's hash, forming a chain. - The exact hashed bytes are stored and served, so old versions stay verifiable after schema changes.