···1010- **Infrastructure** - explorers, indexers, and tooling already exist
1111- **Multi-chain** - works on Ethereum, Base, Optimism, Arbitrum
12121313-**Why AT Protocol:**
1414-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.
1515-1616-**Principles:**
1717-- Transparency without judgment - just preserves facts, doesn't label "good" or "bad"
1818-- Decentralized - fetches directly from user's PDS, not centralized APIs
1919-- User choice - opt-in system, you choose what to notarize
2020-- Open infrastructure - anyone can verify, build on, or run their own instance
2121-2222-Think of it as combining two open protocols: **AT Protocol** (decentralized social) + **EAS** (decentralized attestations) = transparent, accountable social web.
2323-2413## What Gets Attested
25142615- `recordURI` - Full AT Protocol URI
2716- `cid` - AT Protocol's content identifier
2828-- `contentHash` - SHA-256 hash
1717+- `contentHash` - DAG-CBOR hash
2918- `pds` - Personal Data Server URL
3019- `timestamp` - When attested
3120···37263827## Setup
39284040-1. **Create `.env` file:**
2929+1. **Create config file:**
41304231```bash
4343-PRIVATE_KEY="0x..."
4444-# SCHEMA_UID is optional - default schemas are provided
3232+atnotary config
3333+```
3434+3535+2. **Edit `.atnotary.yaml`:**
3636+3737+```yaml
3838+privateKey: "0x..." # private key for writing
3939+network: base-sepolia # default network
4540```
46414747-2. **Get testnet ETH:**
4242+3. **Get testnet ETH:**
4843 - Sepolia: https://sepoliafaucet.com/
4944 - Base Sepolia: https://bridge.base.org/
5045···5853atnotary init --network sepolia
5954```
60556161-Then add the `SCHEMA_UID` to your `.env` file.
5656+Then add the `schemaUID` to your `.atnotary.yaml` file.
62576358## Usage
6459···7974import { ATProtocolNotary } from 'atnotary';
80758176const notary = new ATProtocolNotary({
8282- privateKey: process.env.PRIVATE_KEY!,
8383- schemaUID: process.env.SCHEMA_UID!,
7777+ privateKey: "0x...", // optional, just for writing
8478}, 'sepolia');
85798680const result = await notary.notarizeRecord('at://...');
···1049810599## License
106100107107-MIT
108108-101101+MIT