Skip to main content
Identity in the Data Portability Protocol is wallet-based. Users and builders are identified by Ethereum wallet addresses. There are no usernames, emails, or centralized accounts at the protocol level — just cryptographic keys that sign grants, authorize requests, and prove ownership.

Users

A user is a person who owns data and controls access to it. Their identity is their wallet address. Users don’t interact with the wallet directly in most cases. The Vana app handles wallet creation and signing through a client-side abstraction called Passport (see below). From the protocol’s perspective, the user is just an address that can sign EIP-712 grants and EIP-191 messages.

What’s tied to a user’s address

Builders

A builder is a third-party application that requests access to user data. Builders register onchain with:
  • Address — The builder’s wallet address (used for signing requests)
  • Public key — For cryptographic operations
  • App URL — The canonical origin of the builder’s web application

Builder registration

Builders register an app identity in Vana Account, or directly via the DP RPC. The registration is recorded in the DataPortabilityGrantees contract. Steps:
  1. Open Vana Account developer tools and register an app identity
  2. Enter the appUrl (the canonical origin of your app, e.g. https://flipboard.com)
  3. Generate (or import) a builder wallet and keypair
  4. The registration is submitted to the DP RPC, which syncs it to the chain
  5. You receive: builder address, public key, and private key
Store the builder private key securely. You’ll need it to sign data access requests. Set it as VANA_APP_PRIVATE_KEY in your server environment.

DataPortabilityGrantees contract

Address: 0x8325C0A0948483EdA023A1A2Fd895e62C5131234 (Moksha Testnet)

DP RPC builder API

App manifests

Builders must publish an app manifest at their appUrl so that the Vana app can display human-readable consent information (name, icon, privacy policy) when a user is asked to approve a grant.

Discovery

  1. The Vana app fetches https://{appUrl}
  2. It resolves the manifest URL from the <link rel="manifest" href="..."> tag in the HTML
  3. The manifest URL must be same-origin with appUrl

Format

The manifest follows the W3C Web App Manifest standard with a custom vana block:

Required vana fields

Manifest signature

The signature field is an EIP-191 signature by the builder’s registered address over the canonical JSON of the vana block. This proves the manifest was published by the registered builder, not a third party. Canonicalization rules:
  • Sort keys alphabetically at all levels
  • Exclude the signature field itself from the signed payload
Verification (performed by Vana app):
  1. Fetch https://{appUrl} and resolve the manifest URL
  2. Verify vana.appUrl matches the onchain appUrl
  3. Recompute the canonical JSON of the vana block (excluding signature)
  4. Recover the signer from vana.signature and verify it matches the builder’s registered address
  5. Verify webhookUrl matches vana.webhookUrl
If manifest discovery or signature verification fails, the Vana app must not render the consent screen and must fail the session flow.

Personal server registration

Personal Servers are registered onchain in the DataPortabilityServers contract. Users then trust a server to act on their behalf.

DataPortabilityServers contract

Address: 0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c (Moksha Testnet)

DP RPC server API

All write operations use EIP-712 signature-based calls so the Vana app can register servers without the user sending chain transactions directly.

Passport

Passport is a client-side, non-protocol component that handles wallet creation and authentication in the Vana app. It is not part of the protocol specification — any client that can produce wallet signatures is compatible.

What Passport provides

  • Wallet creation without seed phrase exposure
  • Social login (Google, Apple, email)
  • Wallet recovery via social/email
  • Existing wallet import for advanced users

Reference implementation

The reference implementation uses Privy for embedded wallet management.

Authentication flow

  1. User clicks “Sign In” in the Vana app
  2. Redirect to Passport (Privy)
  3. User authenticates via social login or email
  4. Passport creates or retrieves the user’s wallet
  5. Returns a JWT and wallet address to the Vana app
From this point, the Vana app can sign protocol messages (grants, server registration, master key derivation) on behalf of the user.
Passport is intentionally separated from the protocol. Alternative clients can use any wallet management approach — MetaMask, hardware wallets, or direct key management — as long as they can produce EIP-191 and EIP-712 signatures.