Skip to content

Add Animica namespace (animica:1) — CAIP-2/10/19 - #200

Open
animicaorg wants to merge 2 commits into
ChainAgnostic:mainfrom
animicaorg:add-animica
Open

Add Animica namespace (animica:1) — CAIP-2/10/19#200
animicaorg wants to merge 2 commits into
ChainAgnostic:mainfrom
animicaorg:add-animica

Conversation

@animicaorg

Copy link
Copy Markdown

Summary

This PR adds the animica namespace with CAIP-2, CAIP-10, and CAIP-19 profiles.

Animica is a live proof-of-work Layer 1 whose accounts sign with post-quantum ML-DSA-65 (FIPS 204) signatures and whose smart contracts run in a Python VM. Mainnet has been running since 2026-04-06 (chain id 1, genesis 0xa0892158cf997c56e91d0aa12e60c36037dae34800a2b54111a8fa17ec88b7de). The native token ANM has 9 decimals.

Motivation

The identifier animica:1 is already in production use today: Animica's x402 ANM settlement lane uses it as its network id, as do its MCP tooling and chain parameters. This is the same situation as the bsv (#190) and kaspa (#193) submissions, where a payment protocol was already exchanging a CAIP-2 identifier and the namespace registration documents it. Wallets and dapps integrating Animica need CAIP-2/10/19 identifiers they can rely on rather than each inventing their own.

Animica cannot live in eip155: it is not an EVM chain, its addresses are bech32m strings carrying a signature-scheme id and a SHA3-256 key digest, its transactions are canonical CBOR signed with ML-DSA-65, and its chain id 1 would collide with Ethereum mainnet.

What each document defines

  • animica/README.md - namespace overview, why it is not eip155, governance, and a resources list (website, explorer, public RPC, source, PyPI, normative HD-derivation doc, exchange listing).
  • animica/caip2.md - animica:<chainId>; reference is the canonical decimal of the node's uint32 chain id (^(0|[1-9][0-9]{0,9})$, bounded to uint32, 0 unassigned). Resolution via chain.getChainId, and a genesis-hash cross-check via chain.getChainIdentity (live response included) so a future chain reusing the id cannot be mistaken for mainnet. Valid/invalid test tables. animica:2 (testnet) and animica:1337 (devnet) are noted as reserved; only mainnet is public today.
  • animica/caip10.md - animica:1:anim1...; the native address is bech32m (BIP-350, HRP anim, constant 0x2bc830a3) over a 34-byte payload u16be(alg_id) || SHA3-256(pubkey). Always 66 characters; ML-DSA-65 accounts (0x1003) start anim1zqp, contract addresses (0x0000) start anim1qqq. Lowercase is canonical. Regex ^anim1[02-9ac-hj-np-z]{61}$ plus checksum/length/alg-range validation. Test vectors are the three real addresses from the BIP-39 reference mnemonic in the normative HD derivation document, plus negatives (mixed case, uppercase, plain-bech32 checksum of the same payload, corrupted checksum, bare hex digest).
  • animica/caip19.md - native asset animica:1/slip44:4279885 (coin type 0x414E4D = ASCII ANM, 9 decimals). SLIP-44 registration is pending (a PR to satoshilabs/slips is being filed alongside this one). Contract-issued tokens are explicitly reserved for a future revision rather than specified loosely.

How it was verified

  • Frontmatter of all four files parsed with PyYAML; every [Name][] alias resolves and none is unused; no inline external links; one sentence per line.
  • Every CAIP-10 test vector was re-derived independently in Python: SHA3-256(pubkey) matches the published digest, bech32m encoding of 0x1003 || digest reproduces each address byte-for-byte, each decodes with the bech32m constant to a 34-byte payload with alg_id = 0x1003, and each matches the regex. Each negative vector fails for exactly the stated reason (the plain-bech32 variant verifies under constant 1 and fails under 0x2bc830a3).
  • Every CAIP-2 and CAIP-19 valid/invalid identifier was checked against the profile regexes and the uint32 bound.
  • The chain.getChainId, chain.getChainIdentity, and state.getAccount responses shown in the profiles were captured live from https://rpc.animica.org/rpc on 2026-08-22.
  • bundle exec jekyll build was not run: Ruby/Bundler are not available in the authoring environment. The pages use only the same frontmatter keys as the existing neo, bsv, and stellar profiles, and the site auto-discovers the animica/ directory.

Links

HD path: m/44'/4279885'/account'/0'/address_index' (all hardened, SLIP-0010 ed25519-family derivation; the final 32-byte key is the ML-DSA-65 seed).

Known limitations

  • The SLIP-44 coin type 4279885 is not yet in the registry; the CAIP-19 profile says so.
  • Contract-token asset references are deliberately out of scope for this revision.
  • discussions-to points at this PR, following the precedent of bsv, stellar, and xync.

@bumblefudge @obstropolos when you have a moment, an editorial review would be much appreciated - thank you.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Mj19WF7SsZ4sSkaNat12rq

animicaorg and others added 2 commits August 22, 2026 06:45
Register the `animica` namespace for the Animica proof-of-work L1
(post-quantum ML-DSA-65 accounts, Python-VM contracts, mainnet since
2026-04-06). The mainnet identifier `animica:1` is already used in
production by Animica's x402 ANM settlement lane and MCP tooling.

- animica/README.md: namespace overview, rationale, governance, resources
- animica/caip2.md: `animica:<chainId>` with canonical decimal uint32
  reference; resolution via `chain.getChainId` and genesis-hash
  cross-check via `chain.getChainIdentity`
- animica/caip10.md: `animica:1:anim1...` bech32m (BIP-350, HRP `anim`)
  addresses carrying u16be(alg_id) || SHA3-256(pubkey); lowercase
  canonical; test vectors from the normative HD derivation document
- animica/caip19.md: native asset `animica:1/slip44:4279885` (coin type
  0x414E4D = "ANM", SLIP-44 registration pending); contract tokens
  reserved for a future revision

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mj19WF7SsZ4sSkaNat12rq
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mj19WF7SsZ4sSkaNat12rq
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant