NEUS tracks the CAIP-380 proposal on GitHub. This page matches how NEUS signs and hashes proofs in production (the CAIP text may still say “draft”).
Scope of the proposal
One wallet-signed envelope; apps validate off-chain; stable qHash.
- Networks use CAIP-2 (
eip155:1, solana:mainnet, …)
- Account ids use CAIP-10 (
eip155:1:0x..., solana:mainnet:...) where an *AccountId field is emitted
- Stable profile and proof URLs use W3C
did:pkh (did:pkh:eip155:1:0x...)
Identity and chain glossary
| Term | Shape | NEUS usage |
|---|
| CAIP-2 | namespace:reference | Network context. Use chain for non-EVM signing and account identity, for example solana:mainnet. |
| CAIP-10 | namespace:reference:account | Account id fields such as agentAccountId and controllerAccountId. |
did:pkh | did:pkh:namespace:reference:account | Stable DID for profiles, proof subjects, and /u/[did] URLs. It is derived from the same chain and account context, but is not a bare CAIP-10 string. |
chainId | number | EVM-only compatibility field. For signer context it can be omitted by standard EVM integrations because NEUS resolves the hub chain. For asset verifiers, set the verifier-specific chainId inside data. |
Rule of thumb: EVM browser flows can rely on hosted verify or pass an explicit EVM provider. Non-EVM flows pass the wallet/provider explicitly and include chain as a CAIP-2 value.
NEUS anchor
qHash (0x…) is SHAKE-256 (256-bit) of the standardized proof request fields (fixed encoding and field order). Verification results
Account + chain, verifierIds, data (JSON; use /standardize so field order matches what was signed), signedTimestamp, EVM chainId or non-EVM chain (CAIP-2).
Signer string
Six-line UTF-8, LF. The wallet must sign these exact bytes. POST /api/v1/verification/standardize returns signerString for raw HTTP and debugging; the SDK verify() path builds the same message client-side (or use standardizeVerificationRequest when you need the API round-trip).
Portable Proof Verification Request
Wallet: <address>
Chain: <chainId or CAIP-2 chain>
Verifiers: <comma-separated-ids>
Data: <json payload>
Timestamp: <unix-ms>
Same as Signing format.
Profiles
| Chain | Signature |
|---|
| EVM | chainId | EIP-191 / 1271 / 6492 |
| Solana | solana:… | Ed25519 |
| Other | CAIP-2 | Profile-specific |
Freshness
Reject signedTimestamp if older than 5 minutes or more than 60 seconds in the future.
Spec
CAIP-380 (ChainAgnostic) Last modified on May 17, 2026