1# AT Protocol Notary (atnotary)
2
3Create permanent, verifiable attestations of [AT Protocol](https://atproto.com/) records using [Ethereum Attestation Service](https://attest.org/) (EAS).
4
5## Why
6
7- **Standardized attestations** - interoperable format used across ecosystem
8- **On-chain verification** - stored on Ethereum/Base, immutable and public
9- **Composable** - other projects can reference and build on attestations
10- **Infrastructure** - explorers, indexers, and tooling already exist
11- **Multi-chain** - works on Ethereum, Base, Optimism, Arbitrum
12
13## What Gets Attested
14
15- `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
21## Install
22
23```bash
24npm install -g atnotary
25```
26
27## Setup
28
291. **Create config file:**
30
31```bash
32atnotary config
33```
34
352. **Edit `.atnotary.yaml`:**
36
37```yaml
38privateKey: "0x..." # private key for writing
39network: base-sepolia # default network
40```
41
423. **Get testnet ETH:**
43 - Sepolia: https://sepoliafaucet.com/
44 - Base Sepolia: https://bridge.base.org/
45
46**That's it!** Default schemas are provided for all networks.
47
48### Custom Schema (Optional)
49
50If you want to deploy your own schema:
51
52```bash
53atnotary init --network sepolia
54```
55
56Then add the `schemaUID` to your `.atnotary.yaml` file.
57
58## Usage
59
60```bash
61# notarize
62atnotary notarize "at://did:plc:xxx/app.bsky.feed.post/abc"
63
64# verify
65atnotary verify "0xabc..." --network sepolia
66
67# compare with current state
68atnotary verify "0xabc..." --compare
69```
70
71## Library Usage
72
73```typescript
74import { ATProtocolNotary } from 'atnotary';
75
76const notary = new ATProtocolNotary({
77 privateKey: "0x...", // optional, just for writing
78}, 'sepolia');
79
80const result = await notary.notarizeRecord('at://...');
81const attestation = await notary.verifyAttestation('0x...');
82const comparison = await notary.compareWithCurrent(attestation);
83```
84
85## Networks
86
87- Ethereum Sepolia (testnet)
88- Base Sepolia (testnet)
89- Base (mainnet)
90
91## Use Cases
92
93- Political accountability
94- Journalism evidence
95- Open source governance
96- Content authorship proof
97- Legal documentation
98
99## License
100
101MIT