How it works
Fidemark is a thin protocol layered on top of Ethereum Attestation Service (EAS). The on-chain footprint is deliberately tiny: two schemas + one Resolver.
The pieces
Section titled “The pieces”| Piece | Purpose |
|---|---|
| Human Content Schema | Attests that a wallet authored a piece of content. |
| AI Output Schema | Attests that an AI model produced a piece of content, with model + prompt provenance. |
| FidemarkResolver | A smart contract registered as the resolver for both schemas. Validates each attestation before EAS records it. |
| EAS | The base attestation protocol. Stores attestations, exposes them by UID, handles revocation. |
When you call fidemark.attestHuman(), the SDK:
- Hashes your content client-side (SHA-256).
- ABI-encodes the schema fields into a
bytespayload. - Calls
EAS.attest()on Base. Each attestation uses ~380k gas; cost depends on the prevailing base fee. Off-peak: ~$0.001. Typical: ~$0.009. Severe congestion: ~$0.09. (USD at $2,300 ETH: see Gas economics.) - EAS dispatches to
FidemarkResolver.onAttest()for validation. - If the resolver accepts, EAS stores the attestation with a unique UID.
Verification is the inverse: and free: EAS.getAttestation(uid) returns the full record, the SDK decodes it, the verify page renders it. No wallet needed to verify.
Off-chain attestations
Section titled “Off-chain attestations”The same SDK supports off-chain mode: the attestation is EIP-712 signed but never submitted to chain. Verifiers check the signature against the signer’s address. Zero gas, brought on-chain later if needed.
What the resolver enforces
Section titled “What the resolver enforces”Every attestation that lands on-chain has been validated by FidemarkResolver. See Reference → Resolver for the exact rules. The short version:
contentHashmust be non-zero.- Required string fields must be non-empty.
- For Human Proof: the
creatorfield must equal the transaction’sattester. - For Human Proof: the
proofMethodmust be on the resolver’s allowlist. - For Human Proof:
createdAtmust not be more than 1 day in the future.
These invariants hold for every attestation issued through the protocol.