···10- **Infrastructure** - explorers, indexers, and tooling already exist
11- **Multi-chain** - works on Ethereum, Base, Optimism, Arbitrum
1213-**Why AT Protocol:**
14-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.
15-16-**Principles:**
17-- Transparency without judgment - just preserves facts, doesn't label "good" or "bad"
18-- Decentralized - fetches directly from user's PDS, not centralized APIs
19-- User choice - opt-in system, you choose what to notarize
20-- Open infrastructure - anyone can verify, build on, or run their own instance
21-22-Think of it as combining two open protocols: **AT Protocol** (decentralized social) + **EAS** (decentralized attestations) = transparent, accountable social web.
23-24## What Gets Attested
2526- `recordURI` - Full AT Protocol URI
27- `cid` - AT Protocol's content identifier
28-- `contentHash` - SHA-256 hash
29- `pds` - Personal Data Server URL
30- `timestamp` - When attested
31···3738## Setup
3940-1. **Create `.env` file:**
4142```bash
43-PRIVATE_KEY="0x..."
44-# SCHEMA_UID is optional - default schemas are provided
00000045```
4647-2. **Get testnet ETH:**
48 - Sepolia: https://sepoliafaucet.com/
49 - Base Sepolia: https://bridge.base.org/
50···58atnotary init --network sepolia
59```
6061-Then add the `SCHEMA_UID` to your `.env` file.
6263## Usage
64···79import { ATProtocolNotary } from 'atnotary';
8081const notary = new ATProtocolNotary({
82- privateKey: process.env.PRIVATE_KEY!,
83- schemaUID: process.env.SCHEMA_UID!,
84}, 'sepolia');
8586const result = await notary.notarizeRecord('at://...');
···104105## License
106107-MIT
108-
···10- **Infrastructure** - explorers, indexers, and tooling already exist
11- **Multi-chain** - works on Ethereum, Base, Optimism, Arbitrum
120000000000013## What Gets Attested
1415- `recordURI` - Full AT Protocol URI
16- `cid` - AT Protocol's content identifier
17+- `contentHash` - DAG-CBOR hash
18- `pds` - Personal Data Server URL
19- `timestamp` - When attested
20···2627## Setup
2829+1. **Create config file:**
3031```bash
32+atnotary config
33+```
34+35+2. **Edit `.atnotary.yaml`:**
36+37+```yaml
38+privateKey: "0x..." # private key for writing
39+network: base-sepolia # default network
40```
4142+3. **Get testnet ETH:**
43 - Sepolia: https://sepoliafaucet.com/
44 - Base Sepolia: https://bridge.base.org/
45···53atnotary init --network sepolia
54```
5556+Then add the `schemaUID` to your `.atnotary.yaml` file.
5758## Usage
59···74import { ATProtocolNotary } from 'atnotary';
7576const notary = new ATProtocolNotary({
77+ privateKey: "0x...", // optional, just for writing
078}, 'sepolia');
7980const result = await notary.notarizeRecord('at://...');
···9899## License
100101+MIT0