Notarize AT Protocol records on Ethereum using EAS (experiment)
TypeScript 78.0%
JavaScript 22.0%
8 1 0

Clone this repository

https://tangled.org/tree.fail/atnotary
git@tangled.org:tree.fail/atnotary

For self-hosted knots, clone URLs may differ based on your setup.

README.md

AT Protocol Notary (atnotary)#

Create permanent, verifiable attestations of AT Protocol records using Ethereum Attestation Service (EAS).

Why#

The Problem: On current social media, anyone can make statements and delete them later without accountability. There's no proof something was said, leading to endless "he said/she said" disputes. Bad actors can repeat harmful patterns because evidence disappears.

The Solution: Create permanent, cryptographically verifiable attestations using EAS (Ethereum Attestation Service). Not to police speech, but to preserve a transparent historical record. Like how Git preserves commit history or Bitcoin preserves transactions - complete transparency creates natural accountability.

Why EAS:

  • Standardized attestations - interoperable format used across ecosystem
  • On-chain verification - stored on Ethereum/Base, immutable and public
  • Composable - other projects can reference and build on attestations
  • Infrastructure - explorers, indexers, and tooling already exist
  • Multi-chain - works on Ethereum, Base, Optimism, Arbitrum

Why AT Protocol: Unlike Twitter, AT Protocol is federated and open. Users own their data, can switch servers, and the protocol is public. This makes it possible to build open infrastructure for accountability that isn't controlled by any company.

Principles:

  • Transparency without judgment - just preserves facts, doesn't label "good" or "bad"
  • Decentralized - fetches directly from user's PDS, not centralized APIs
  • User choice - opt-in system, you choose what to notarize
  • Open infrastructure - anyone can verify, build on, or run their own instance

Think of it as combining two open protocols: AT Protocol (decentralized social) + EAS (decentralized attestations) = transparent, accountable social web.

What Gets Attested#

  • recordURI - Full AT Protocol URI
  • cid - AT Protocol's content identifier
  • contentHash - SHA-256 hash
  • pds - Personal Data Server URL
  • timestamp - When attested

Install#

npm install -g atnotary

Setup#

  1. Create .env file:
PRIVATE_KEY="0x..."
# SCHEMA_UID is optional - default schemas are provided
  1. Get testnet ETH:

That's it! Default schemas are provided for all networks.

Custom Schema (Optional)#

If you want to deploy your own schema:

atnotary init --network sepolia

Then add the SCHEMA_UID to your .env file.

Usage#

# notarize
atnotary notarize "at://did:plc:xxx/app.bsky.feed.post/abc"

# verify
atnotary verify "0xabc..." --network sepolia

# compare with current state
atnotary verify "0xabc..." --compare

Library Usage#

import { ATProtocolNotary } from 'atnotary';

const notary = new ATProtocolNotary({
  privateKey: process.env.PRIVATE_KEY!,
  schemaUID: process.env.SCHEMA_UID!,
}, 'sepolia');

const result = await notary.notarizeRecord('at://...');
const attestation = await notary.verifyAttestation('0x...');
const comparison = await notary.compareWithCurrent(attestation);

Networks#

  • Ethereum Sepolia (testnet)
  • Base Sepolia (testnet)
  • Base (mainnet)

Use Cases#

  • Political accountability
  • Journalism evidence
  • Open source governance
  • Content authorship proof
  • Legal documentation

License#

MIT