Skip to main content
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 proof ID.
  • Identities: CAIP-10 style (did:pkh:…) where used
  • Chains: CAIP-2 (eip155:1, solana:mainnet, …)

NEUS anchor

qHash (0x…) is SHAKE-256 (256-bit) of the standardized proof request fields (fixed encoding and field order). SDK responses use proofId for the same value. Verification results

Inputs (conceptual)

Account + chain, verifierIds, data (JSON; use /standardize so field order matches what was signed), signedTimestamp, EVM chainId or non-EVM chain.

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

ChainSignature
EVMchainIdEIP-191 / 1271 / 6492
Solanasolana:…Ed25519
OtherCAIP-2Profile-specific

Freshness

Reject signedTimestamp if older than 5 minutes or more than 60 seconds in the future.

Spec

CAIP-380 (ChainAgnostic)