Skip to content

Wallet — Reference

The complete reference for the wallet app: its architecture, the wallet-indexer integration and fallback, the main views, and configuration. For a gentle introduction, start with the Quick guide.

The Blurt Wallet (blurt/blurt-wallet) is a dedicated, server-side-rendered React application built from the condenser codebase, specialized to account-money tasks: balances, transfers, history, rewards, delegations, power up/down, and savings.

Architecture

It shares condenser's architecture (see Condenser): React UI, Redux state, redux-saga side effects, react-router, a Koa SSR server, and blurtjs (@blurtfoundation/blurtjs) for building, signing, and broadcasting transactions. The tree mirrors condenser (src/app, src/server, src/shared, src/db).

Transactions are signed client-side; private keys never leave the device and are never held server-side. The wallet's job is to present balances and history and to help the user sign — the authority is always the user's key on blurtd.

Wallet-indexer integration

This is what distinguishes the wallet from condenser. History and reward screens can be served two ways, chosen by one flag:

Accelerated path (wallet_indexer_enabled on). The wallet calls the wallet indexer through the same RPC endpoint, and the RPC proxy routes the wallet_history.* methods to it — no new origin, no separate CORS:

  • wallet_history.get_wallet_history — paged financial history;
  • wallet_history.get_reward_totals — server-side author/curation reward totals.

The indexer returns pre-decoded, normalized events, so the screens paint instantly instead of the browser paginating and summing chain history.

Fallback path (indexer off or unavailable). The wallet sources history from the chain node with account_history_api.get_account_history and normalizes it into the same event shape, so a single render path handles both sources. This is the client side of the indexer's fallback contract: the accelerator is optional, and the wallet keeps working with correct data if no indexer is running.

text
  history/rewards screen
    ├─ wallet_indexer_enabled? ──► wallet_history.*        (fast, normalized)
    └─ else / unavailable ──────► account_history_api.get_account_history
                                   (normalized to the same shape)

How it talks to the stack

One RPC endpoint, routed by the proxy:

  • SDC_CLIENT_BLURTD_URL (browser) / SDC_SERVER_BLURTD_URL (SSR) point at the proxy;
  • wallet_history.* → wallet indexer;
  • balances, broadcasts, and the history fallback → blurtd.

Main views

Balances and available funds, transfer (send/receive), full transaction history, author and curation reward totals, power up / power down (VESTS), delegations, and savings.

Configuration

Configured with SDC_* environment variables (mapped in config/custom-environment-variables.json), sharing condenser's surface plus the indexer toggle:

VariablePurpose
SDC_WALLET_INDEXER_ENABLEDuse the wallet_history.* accelerated path (else chain fallback)
SDC_CLIENT_BLURTD_URLRPC endpoint the browser uses (the RPC proxy)
SDC_SERVER_BLURTD_URLRPC endpoint the SSR server uses
SDC_USE_APPBASEappbase JSON-RPC calling convention
SDC_CHAIN_IDchain id to sign against
SDC_ADDRESS_PREFIXpublic-key address prefix (BLT)
SDC_ALT_API_ENDPOINTSalternative RPC endpoints
SDC_SESSION_SECRETKEY / SDC_SESSION_KEY / SDC_SESSION_COOKIE_KEYserver session secrets; keep constant
SDC_DATABASE_URLsession/state store connection
SDC_IMAGE_PROXY_PREFIX / SDC_UPLOAD_IMAGE_URLimage proxy and upload service
SDC_PRICE_INFO_URLprice feed for fiat-value displays
SOCIAL_URLlink back to the social front-end (condenser)

Build and run

The wallet builds and runs like condenser (React bundle + Koa server) and ships as a container. Provide a stable session secret, point the SDC_*_BLURTD_URL variables at your RPC endpoint, and set SDC_WALLET_INDEXER_ENABLED to match whether your endpoint's proxy routes wallet_history.* to an indexer. See the repository for current build and deployment details.

Where it fits

The wallet is the dedicated money UI and the reference consumer of the wallet indexer: it demonstrates the whole point of that service — fast, normalized history with a transparent fallback — through the same one-URL proxy every front-end uses.

Released under the MIT License.