VerusID is a self-sovereign identity system built into the Verus blockchain. Every identity is a full-featured on-chain object with recoverable keys, encrypted storage, and protocol-level authentication — no smart contracts required.
A VerusID is a human-readable blockchain identity (like veruscx@) that replaces raw addresses. It's not just a name — it's a programmable container with built-in security, storage, and authentication.
Send to alice@ instead of R7yh3.... Names are unique, on-chain, and resolve to addresses automatically.
Lock your identity so funds can't move even if your key is stolen. Revoke and recover with separate authority keys.
Users sign cryptographic challenges with their VerusID. No passwords to store, no OAuth provider, no credential database to leak.
Every identity has a contentmultimap — a key-value store for data. Public or encrypted, up to ~4KB per entry.
Send to any VerusID name. Generate payment QR codes and deep links. Works with Verus Mobile out of the box.
Create namespaced identities under your ID. blog.alice@ or app.alice@ — each with their own keys and storage.
Every VerusID is an on-chain object returned by getidentity. Here's what it contains:
// getidentity "veruscx@" { "name": "veruscx", "identityaddress": "i6QEbNsGThm2JHUwpLwxSu77DwzFWvfHv6", "primaryaddresses": ["RAhD9vgrWZ3ALkq541xdqL2oLYEvsLNrzn"], "minimumsignatures": 1, "revocationauthority": "i6QEb...", // can revoke access "recoveryauthority": "i6QEb...", // can recover identity "flags": 0, // 0=unlocked, 2=locked "timelock": 0, // unlock delay (blocks) "contentmultimap": {}, // on-chain data store "contentmap": {} }
| Field | Purpose |
|---|---|
| name | Human-readable identity name (unique on-chain) |
| primaryaddresses | Addresses that can spend/sign for this identity |
| minimumsignatures | Multi-sig threshold (1 = single sig) |
| revocationauthority | Identity that can revoke (lock) this ID. Can be self or another ID |
| recoveryauthority | Identity that can recover (update keys). Can be self or another ID |
| flags | Bit 1 = locked. When locked, no transactions can be sent |
| timelock | Minimum block height before unlocking takes effect |
| contentmultimap | Key-value data store (VDXF keys to arrays of values) |
Every VerusID has a built-in on-chain data store called the contentmultimap. It maps VDXF keys to arrays of values — each value up to ~4KB. Think of it as a blockchain-native key-value database attached to your identity.
Data is written via updateidentity. Values are typically hex-encoded JSON stored under a VDXF key.
# Store data in your identity DATA=$(echo -n '{"type":"post","title":"Hello"}' | xxd -p | tr -d '\n') ./verus updateidentity '{ "name": "yourname", "parent": "iParentIdHere", "contentmultimap": { "iVDXFKeyHere": ["'$DATA'"] } }'
Read via getidentity and decode the hex values. From a browser, call the public RPC:
const resp = await fetch('https://api.verus.services', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ jsonrpc: '1.0', id: '1', method: 'getidentity', params: ['veruscx@'] }) }); const { result } = await resp.json(); const cmm = result.identity.contentmultimap; // Decode hex values: hex → bytes → UTF-8 → JSON
Data can be encrypted using Verus's built-in Sapling (zk-SNARK) addresses. Encrypt with signdata using an encrypttoaddress parameter, then store the encrypted descriptor in the contentmultimap. Decrypt with decryptdata — only the holder of the z-address private key can read it.
This enables selective disclosure: encrypt each field separately, share viewing keys per-field to reveal only what's needed.
Every VerusID has built-in security features that don't exist in normal crypto wallets.
Lock your identity so no transactions can be sent — even if your private key is stolen. Only the revocation authority can unlock, and only after a timelock delay.
# Lock an identity ./verus updateidentity '{"name":"veruscx","flags":2}' # Unlock (starts timelock countdown) ./verus updateidentity '{"name":"veruscx","flags":0}'
Lost your key? Your recovery authority can update the identity to use a new primary address. Set it to yourself (self-sovereign) or a trusted party like your spouse, company, or friend.
This is impossible with Bitcoin, Ethereum, or any standard crypto wallet. With VerusID, losing your key doesn't mean losing your funds.
Set a minimum block height before an unlock takes effect. Even if an attacker has your revocation key, they can't move funds instantly — you have time to notice and respond.
verus-connect is a drop-in package for adding VerusID login and payments to any website. QR codes, deep links, and browser extension support — all handled.
# Install npm install github:Fried333/verus-connect npm install git+https://github.com/VerusCoin/verusid-ts-client.git # Configure .env SIGNING_IADDRESS=iYourVerusIDAddress PRIVATE_KEY=UxYourWIFPrivateKey CALLBACK_URL=https://yoursite.com/verusidlogin # Run (zero code) npx verus-connect start
const { verusAuth } = require('verus-connect/server'); app.use('/verus', verusAuth({ iAddress: process.env.SIGNING_IADDRESS, privateKey: process.env.PRIVATE_KEY, callbackUrl: process.env.CALLBACK_URL, }));
| Endpoint | Purpose |
|---|---|
POST /login | Create login challenge, returns QR deep link |
GET /result/:id | Poll for login result |
POST /pay-deeplink | Generate payment QR — accepts name@, i-address, or R-address |
POST /identity-update-request | Request user to update their contentmultimap |
GET /health | Health check |
| Method | Purpose |
|---|---|
getidentity | Look up any identity by name or i-address |
updateidentity | Update primary addresses, flags, contentmultimap, authorities |
registernamecommitment | First step to register a new VerusID |
registeridentity | Complete VerusID registration |
signdata | Sign or encrypt data with an identity (supports MMR, z-addr encryption) |
decryptdata | Decrypt data encrypted to a z-address |
verifydata | Verify a signature from an identity |
signmessage | Sign a message with an address (used for challenges) |
verifymessage | Verify a signed message |
verus-typescript-primitives — Core types: LoginConsentRequest, VerusPayInvoice, TransferDestination, VDXF keys.
verusid-ts-client — VerusID interface for signing, verifying, and RPC interaction.
verus-connect — Drop-in VerusID login and payments for any website.