Vencura
Product

Product Definition

Required and optional features, alignment with Dynamic's Take-Home Backend.

Vencura Wallet aligns with Dynamic's Take-Home Backend. The canonical spec is __dev/dynamic-api.md in the repo. The product delivers custodial wallets for Web3 with backend-only operations.

Required Features

FeatureStatusDescription
Dynamic authYesMagic link, OAuth, Web3 sign-in, API keys
Create account/walletYesAuthenticated users create at least one custodial wallet
getBalance()YesGET /wallets/:id/balance returns balance (string, wei) for safe handling of large numbers
signMessage(msg)YesPOST /wallets/:id/sign with { msg } returns signedMessage (string)
sendTransaction(to, amount)YesPOST /wallets/:id/send with { to, amount }amount in ETH (string); returns transactionHash (string)
Basic UIYesWeb dashboard and Expo app to interact with the API

All wallet interactions are done on the backend via the API. The UI calls the API with a Bearer token (Dynamic JWT or API key).

API types: The spec uses balance: number and amount: number informally. The implementation uses string for both: balance in wei (18 decimals), amount in ETH (e.g. "0.001"). Strings avoid JavaScript number precision issues with large wei values.

Optional Ideas (Future)

The take-home suggests optional enhancements:

  • Multiple accounts per user — Users can have many wallets
  • Accounts interact — Saving/checking style flows between wallets
  • Shared wallets — Invite users to share access
  • Transaction history — On-chain and off-chain history
  • XMTP — Messaging integration
  • Hardened security — Additional guardrails
  • Non-custodial — Migration path to user-held keys

Tech Stack

  • Backend: Fastify, TypeBox, Drizzle, PostgreSQL
  • Auth: Dynamic SDK (JWT) + API keys for programmatic access
  • Web3: Viem (Sepolia testnet)
  • Frontend: Next.js (web), Expo (mobile)
  • CLI: @repo/cli for API key–based access

On this page