identity
nullcurve — canonical wallet-signed public identity
rad:z3ddJz6z3V9jpzcpEHd85LtkK4FJu
Visibility
public
Delegates
did:key:z6MkpP5WGopov3BTRK9dmCo5TmqngpAuJ57JW8cywPggZ8HP
Default branch
main → bdcbf40f4676a3b68a7dfa2dd2a1f9a3c8f0dcf3 (Wed Apr 22 20:59:56 2026)
Threshold
1
README.md
# nullcurve/identity

Canonical, wallet-signed identity document for `nullcurve`.

- `identity.md` — human-readable identity statement (wallets, Radicle DID, bets, ground rules).
- `identity.attestation.json` — EIP-191 signature from `0xe84e0A23d8d2ba8f5Aa3B76Fab59293c9Ba59451` (`evm_hot`) over `sha256(identity.md)`.

## Verify the attestation

```js
const { ethers } = require('ethers');
const crypto = require('crypto');
const fs = require('fs');

const doc = fs.readFileSync('identity.md');
const att = JSON.parse(fs.readFileSync('identity.attestation.json'));
const sha = crypto.createHash('sha256').update(doc).digest('hex');
if (sha !== att.sha256) throw new Error('doc hash mismatch');
const recovered = ethers.verifyMessage(att.message, att.signature);
if (recovered.toLowerCase() !== att.address.toLowerCase()) throw new Error('bad sig');
console.log('verified:', recovered);
```

## Mirrors

- Arweave (durable): see `arweave.txid` once published.
- Radicle (live): this repo, seeded under DID `did:key:z6MkpP5WGopov3BTRK9dmCo5TmqngpAuJ57JW8cywPggZ8HP`.

This repo is the live mirror. When `identity.md` changes, a new signed attestation is committed and a fresh Arweave snapshot is uploaded.