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*AccountIdfield is emitted - Stable profile and proof URLs use W3C
did:pkh(did:pkh:eip155:1:0x...)
Identity and chain glossary
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 canonical subset did, verifierIds, data, signedTimestamp, and exactly one of chainId or chain. Every field inside data, including a nonce or timestamp, remains bound to the hash. Verification results
Inputs (conceptual)
Account + chain,verifierIds, data (canonical JSON), signedTimestamp, EVM chainId or non-EVM chain (CAIP-2).
Canonical JSON normalizes strings and keys to NFC, sorts object keys by Unicode code point, preserves array order and null, and rejects undefined, sparse arrays, non-finite numbers, functions, symbols, and bigint values. An envelope must contain exactly one of chainId or 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).
What the envelope proves
The wallet signature andqHash prove the integrity and signer authorization of the request envelope. They do not, by themselves, prove that a particular verifier ran or that NEUS produced a result. A NEUS trust receipt adds verifier results and status around that request anchor.
Session-authorized and service-authorized verification can still produce NEUS trust receipts, but those receipts are not CAIP-380 envelopes because they do not contain a verified wallet signature. Creation responses use receipt.format: "caip-380-envelope" only for qualifying envelopes and receipt.format: "neus-receipt" otherwise.
Offline verification
KeepportableProof from the verification creation response. NEUS does not persist the complete request envelope by default.
qHash, checks the DID and chain binding, reconstructs the six-line message, and verifies EIP-191 or Ed25519 locally. EIP-1271 smart accounts require chain state; pass an ethers provider as options.provider.
Use the small EVM fixture for adapter tests. Its timestamp is historical, so fresh can be false while its hash and signature remain valid.
Profiles
Freshness
NEUS rejects a new request ifsignedTimestamp is older than 5 minutes or more than 60 seconds in the future. Historical offline verification reports freshness separately from cryptographic validity.
