Notarize AT Protocol records on Ethereum using EAS (experiment)
TypeScript 63.9%
JavaScript 36.1%
4 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

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 in your working directory:
PRIVATE_KEY="0x..."
SCHEMA_UID=""
  1. Initialize (one-time):
atnotary init --network sepolia

Add the outputted SCHEMA_UID to .env.

  1. Get testnet ETH from Sepolia faucet

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