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 URIcid- AT Protocol's content identifiercontentHash- SHA-256 hashpds- Personal Data Server URLtimestamp- When attested
Install#
npm install -g atnotary
Setup#
- Create
.envfile:
PRIVATE_KEY="0x..."
# SCHEMA_UID is optional - default schemas are provided
- Get testnet ETH:
- Sepolia: https://sepoliafaucet.com/
- Base Sepolia: https://bridge.base.org/
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