Open standard for predefined AI persona NFT cards on Solana cNFT.
A persona card is a self-contained Solana cNFT that grants the holder permission
to chat with a specific predefined AI persona. This repo defines the format,
publishes JSON Schema 2020-12 contracts, ships a Rust reference crate
(eros-nft on crates.io), and bundles 15 sample personas.
English · 中文
| Path | Contents |
|---|---|
spec/v1.0/ |
Normative spec documents (CC-BY-4.0). |
spec/v1.0/schemas/ |
persona-draft.schema.json, persona-manifest.schema.json (JSON Schema 2020-12, Apache-2.0). |
crates/eros-nft/ |
Rust reference crate (Apache-2.0). Types, validators, sample loader, CLI. |
samples/ |
15 demo personas (5 NSFW). Each has draft.json + manifest.json + README.md. |
cargo install eros-nft
eros-nft validate ./my-persona-manifest.json[dependencies]
eros-nft = "0.1"use eros_nft::{load_sample, PersonaManifest};
fn main() {
let (_draft, manifest) = load_sample("yuki-warm-senpai").unwrap();
manifest.validate().unwrap();
println!("{} ({})", manifest.name, manifest.persona_id);
}eros-nft sample list
eros-nft sample show yuki-warm-senpaiA persona NFT card has two document forms:
PersonaDraft— what a creator submits to a marketplace mint pipeline. Contains the plaintext system prompt and raw avatar source. Lives only in the pipeline; never published.PersonaManifest— the published artifact. Suitable for Arweave / IPFS pinning and as the metadata URI of a Solana cNFT. Carriesprompt_ciphertext_ref(KMS reference + ciphertext SHA-256), not the plaintext.
The cNFT itself is the chain anchor; the Manifest is chain-agnostic. See
spec/v1.0/06-chain-profiles/solana-cnft.md.
- Trained-persona transfer (memory dossier, lineage, training metrics) lives in
a separate future spec,
eros-nft-extended. - Marketplace business logic (mint pipeline, royalty enforcement, takedown)
lives in
eros-chat-marketplace(closed source).
- Spec documents: CC-BY-4.0 (see LICENSE-SPEC)
- Code and JSON Schemas: Apache-2.0 (see LICENSE-CODE)