Skip to content

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.

PiecePurpose
Human Content SchemaAttests that a wallet authored a piece of content.
AI Output SchemaAttests that an AI model produced a piece of content, with model + prompt provenance.
FidemarkResolverA smart contract registered as the resolver for both schemas. Validates each attestation before EAS records it.
EASThe base attestation protocol. Stores attestations, exposes them by UID, handles revocation.

When you call fidemark.attestHuman(), the SDK:

  1. Hashes your content client-side (SHA-256).
  2. ABI-encodes the schema fields into a bytes payload.
  3. 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.)
  4. EAS dispatches to FidemarkResolver.onAttest() for validation.
  5. 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.

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.

Every attestation that lands on-chain has been validated by FidemarkResolver. See Reference → Resolver for the exact rules. The short version:

  • contentHash must be non-zero.
  • Required string fields must be non-empty.
  • For Human Proof: the creator field must equal the transaction’s attester.
  • For Human Proof: the proofMethod must be on the resolver’s allowlist.
  • For Human Proof: createdAt must not be more than 1 day in the future.

These invariants hold for every attestation issued through the protocol.