Get Started
FAQ

Frequently Asked Questions

General

What is Veridex?

Veridex is a cross-chain passkey authentication protocol. It lets users control assets on any blockchain using FaceID/TouchID — no seed phrases, no wallet apps, no chain switching.

Is Veridex self-custodial?

Yes, 100%. Your passkey's private key never leaves your device. Veridex contracts verify signatures on-chain without ever seeing your private key.

How is this different from Privy/Dynamic/Web3Auth?

FeaturePrivy/DynamicVeridex
CustodyMPC (they hold shards)Fully self-custodial
TrustTrust their serversTrustless (on-chain)
Cross-chainLimitedNative multi-chain
Open sourceNoYes

What chains are supported?

  • EVM: Base (hub), Optimism, Arbitrum, Polygon, Ethereum
  • Non-EVM: Solana, Aptos, Sui, Starknet, Stacks

Is it production ready?

Veridex is currently on testnet. Mainnet launch is planned for Q2 2026 after security audits.

Technical

What happens if I lose my device?

Veridex supports on-chain social recovery. You can designate guardians who can collectively recover your account. See Recovery Guide.

Can I use the same passkey on multiple devices?

Yes! Passkeys sync via:

  • iCloud Keychain (Apple devices)
  • Google Password Manager (Android/Chrome)
  • Windows Hello (Windows devices)

Why Base as the hub chain?

Base was chosen because:

  1. RIP-7212 support: Native P-256 verification (~3,450 gas)
  2. Low fees: Sub-cent transactions
  3. Coinbase ecosystem: Large user base
  4. EVM compatibility: Easy spoke deployment

How fast are cross-chain transfers?

PathTimeUse Case
Query (CCQ)~5-7 secondsLow-value transfers
VAA~60 secondsHigh-value transfers

The SDK/relayer automatically chooses the optimal path.

What's the difference between Query and VAA paths?

  • Query (CCQ): Wormhole Cross-Chain Queries. Faster but relies on guardian attestation of current state.
  • VAA: Verified Action Approval. Full 13/19 guardian consensus. More secure for high-value operations.

Do users need to hold gas tokens?

No. The relayer pays gas fees. Users only need the tokens they want to transfer.

How does the deterministic vault address work?

Your vault address is derived from your passkey's public key using CREATE2:

vaultAddress = CREATE2(factory, hash(publicKey), bytecode)

This means:

  • Same passkey → same address on all EVM chains
  • Address is known before vault exists
  • You can receive funds before deploying

Security

Is my passkey secure?

Yes. Passkeys use:

  • Hardware security: TPM, Secure Enclave, or similar
  • Biometric protection: FaceID, TouchID, fingerprint
  • Non-exportable keys: Private key never leaves the device

What if Veridex gets hacked?

Even if Veridex infrastructure is compromised:

  • Your private key is on your device, not our servers
  • Contracts are immutable after deployment
  • Guardians can recover via social recovery

Can the relayer steal my funds?

No. The relayer only submits transactions — it cannot forge your passkey signature. All signatures are verified on-chain.

What about Wormhole security?

Wormhole uses a 13/19 guardian quorum. Veridex verifies:

  • Guardian signatures
  • Message origin (hub emitter)
  • Replay protection (nonces)

Integration

How do I integrate Veridex?

import { createSDK } from '@veridex/sdk';
 
const sdk = createSDK('base', { network: 'testnet' });
await sdk.passkey.register('user@example.com', 'My App');
const vault = sdk.getVaultAddress();

See the Quick Start Guide.

What is the Agent SDK?

The Agent SDK (@veridex/agentic-payments) is a separate package for building autonomous AI agents that can make payments. It provides:

  • x402 HTTP payment protocol — agents automatically pay for API access
  • Session keys with spending limits — agents operate within USD-denominated budgets
  • Multi-chain support — EVM, Solana, Stacks, and more
  • Audit logging — full compliance trail of all payments
  • MCP tools — integrate with Claude, Cursor, and other AI assistants
import { createAgentWallet } from '@veridex/agentic-payments';
 
const agent = await createAgentWallet({
  masterCredential: { /* passkey credential */ },
  session: { dailyLimitUSD: 50, expiryHours: 24 },
});
 
// Agent handles 402 Payment Required automatically
const response = await agent.fetch('https://paid-api.example.com/data');

See the Agent Payments Guide.

How does x402 work?

The x402 protocol is an HTTP-native payment standard:

  1. Agent sends a request to a paid API
  2. Server responds with 402 Payment Required + payment details in headers
  3. Agent SDK automatically parses requirements, signs payment, and retries
  4. Server verifies payment on-chain and returns the data

This enables AI agents to autonomously pay for data, compute, and services.

Is there a React component library?

Not yet, but planned. For now, use the SDK directly in your React components.

Can I run my own relayer?

Yes! The relayer is open source. See Relayer Setup.

What's the cost of integration?

The SDK and protocol are free and open source. Costs are:

  • Gas fees: Paid by relayer (can be sponsored)
  • Wormhole fees: ~0.0001 ETH per cross-chain message

Do you have a grant program?

We're exploring partnerships with ecosystem partners. Contact us at team@veridex.network.

Troubleshooting

"Passkey not supported" error

Ensure you're using:

  • A supported browser (Chrome 67+, Safari 14+, Firefox 60+)
  • HTTPS (or localhost for development)
  • A device with biometric capability

"Signature verification failed" error

Common causes:

  1. Credential was created on a different domain
  2. Passkey was deleted from device
  3. Wrong network (testnet vs mainnet)

Transaction stuck or failing

Check:

  1. Vault has sufficient balance
  2. Relayer is running and healthy (/health endpoint)
  3. Destination chain is responding

Session key expired

Sessions have a time limit. For the core SDK, use SessionManager to create a new session. For the Agent SDK, the AgentWallet handles session lifecycle automatically — just re-initialize:

// Agent SDK — sessions are managed automatically
const agent = await createAgentWallet({
  masterCredential: { /* ... */ },
  session: { dailyLimitUSD: 50, expiryHours: 24 },
});

Contact