by Max F.

TypeScript backend service for centralized crypto wallet operations, handling deposit address generation, withdrawals, balance management, transaction history, staking, and swaps across BTC, ETH, BSC, SOL, TRX, and XRP. Built with Express.js, PostgreSQL, and Redis, it provides internal service-to-service APIs for App Backends to manage hot wallets, execute on-chain and off-chain transfers, and reconcile blockchain transactions. Includes ChangeNOW integration for currency swaps and HD wallet support with encrypted key management.
Crypto Wallet Server is a backend service for centralized crypto wallet operations. It handles deposit address generation, withdrawals, balance management, transaction history, off-chain staking, swap/exchange operations, hot wallet management, and blockchain reconciliation. This service is designed to be called by an App Backend, not directly by end-user clients.
Although this is source code multinetwork wallet system, you still need to access blockchain network via API unless you want to run your own node for each blockchain server which is not cost-competitive. The code includes Alcehmy, etherscan, and crytpoAPI for that. Swap pool is mainly integrated around changeNOW pool.
| Layer | Technology |
|---|---|
| Runtime | Node.js |
| Framework | Express.js |
| Language | TypeScript |
| ORM | Sequelize |
| Database | PostgreSQL |
| Cache / Pub-Sub | Redis |
| Big Number Math | bignumber.js |
| Authentication | JSON Web Tokens (jsonwebtoken) |
| External Swap | ChangeNOW API |
npm install
npm run build
npm start
Server listens on port 9008 by default.
npm run dev
Enables local development database and verbose logging.
| Variable | Required | Description |
|---|---|---|
PORT | No | HTTP port (default: 9008) |
NODE_ENV | No | Runtime environment (production, development) |
JWT_SECRET | Yes | Secret key for JWT signing/verification |
INTERNAL_API_KEY | Yes | Shared key for internal service-to-service calls |
DB_HOST | Yes | PostgreSQL host |
DB_PORT | No | PostgreSQL port (default: 5432) |
DB_NAME | Yes | Database name |
DB_USER | Yes | Database username |
DB_PASSWORD | Yes | Database password |
REDIS_URL | Yes | Redis connection URL |
WEBHOOK_SECRET | Yes | HMAC secret for webhook verification |
CHANGENOW_API_KEY | No | ChangeNOW API key for external swaps |
HOT_WALLET_ENCRYPTION_KEY | Yes | Encryption key for hot wallet private keys (32-byte hex) |
MASTER_SEED_ENCRYPTION_KEY | Yes | Encryption key for HD wallet master seeds (32-byte hex) |
All endpoints are served at http://localhost:9008. Internal calls require the header:
x-internal-key: <INTERNAL_API_KEY>
Responses include "success": true/false at the top level.
GET /healthReturns server health status including database and Redis connectivity.
Response:
{
"success": true,
"status": "ok",
"timestamp": "2024-01-15T10:30:00.000Z",
"services": {
"database": "connected",
"redis": "connected"
}
}
POST /api/wallet/createCreates a new deposit wallet address for a user on a specified blockchain.
Request:
{
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"asset": "eth",
"network": "eth"
}
Response:
{
"success": true,
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"memo": null,
"qr_code_data": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"min_deposit": "0.001",
"confirmations_required": 12,
"warnings": []
}
GET /api/wallet/balanceRetrieves all asset balances for a user.
Query Parameters:
user_id (required): User UUIDResponse:
{
"success": true,
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"balances": [
{
"asset": "btc",
"available": "0.05000000",
"locked": "0.00000000",
"pending": "0.00000000",
"total": "0.05000000"
}
]
}
POST /api/wallet/withdrawInitiates a withdrawal (external on-chain or internal user-to-user transfer).
Request:
{
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"asset": "usdt",
"network": "trc20",
"amount": "100.00",
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"withdrawal_type": "external",
"verified": true
}
Response:
{
"success": true,
"withdrawal_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "pending",
"asset": "usdt",
"network": "trc20",
"amount": "100.00",
"fee": "1.00",
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"created_at": "2024-01-15T10:30:00.000Z"
}
POST /api/wallet/transferExecutes an internal (off-chain) transfer between two users.
Request:
{
"from_user_id": "550e8400-e29b-41d4-a716-446655440000",
"to_user_id": "660f9511-f3ac-52e5-b827-557766551111",
"asset": "eth",
"amount": "0.5",
"note": "Payment for services",
"verified": true
}
Response:
{
"success": true,
"transaction_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"from_user_id": "550e8400-e29b-41d4-a716-446655440000",
"to_user_id": "660f9511-f3ac-52e5-b827-557766551111",
"asset": "eth",
"amount": "0.5",
"fee": "0",
"status": "completed",
"created_at": "2024-01-15T10:30:00.000Z"
}
GET /api/wallet/transactionsReturns paginated transaction history for a user.
Query Parameters:
user_id (required): User UUIDasset (optional): Filter by asset symboltype (optional): Filter by deposit, withdraw, or transferlimit (optional): Results per page (default: 50, max: 200)offset (optional): Pagination offset (default: 0)start_date (optional): ISO 8601 start dateend_date (optional): ISO 8601 end dateResponse:
{
"success": true,
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"transactions": [
{
"id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"type": "deposit",
"asset": "eth",
"network": "eth",
"amount": "1.25",
"fee": "0",
"status": "completed",
"txid": "0xabc123...",
"address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
"is_internal": false,
"confirmations": 12,
"required_confirmations": 12,
"created_at": "2024-01-15T09:00:00.000Z",
"completed_at": "2024-01-15T09:05:00.000Z",
"is_pending": false
}
],
"total": 1,
"limit": 10,
"offset": 0
}
POST /api/swap/quoteRequests a swap quote between two currencies via ChangeNOW.
Request:
{
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"from_currency": "btc",
"to_currency": "eth",
"amount": "0.01",
"flow": "standard"
}
Response:
{
"success": true,
"quote_id": "quote-abc123xyz",
"from_currency": "btc",
"to_currency": "eth",
"from_amount": "0.01",
"to_amount": "0.15",
"rate": "15.00",
"expires_at": "2024-01-15T10:45:00.000Z"
}
verified: true, indicating the App Backend has confirmed the user's withdrawal passwordnetwork parameter to specify the blockchainSpin up an isolated sandbox and run it server-side — no local setup.
The sandbox audition completed and the detected runnable path passed.
This Express backend / api completed archive review with strong static results. Structure, dependency manifests, documentation, functional source, and common risk patterns were checked by the Tetrees verification pipeline; runtime phases are stated separately.
Deterministic AVCP artifact review
Pipeline avcp-2026-08-04.1 · SHA-256 a95714aefcfe8976…
This version-scoped review deterministically inspects the submitted archive for structure, dependencies, documentation, functional source, and common malicious or high-risk signals. Build and test phases are reported as passed only after an isolated sandbox audition. It is not a guarantee of perfect security.
Reviewed Aug 4, 2026
The full install guide and integration prompts unlock after purchase.
Push this product straight into your AI IDE, web builder or cloud IDE.
Connect Tetrees to a compatible AI IDE, list products you own, and request the verified ZIP without exposing seller upload controls.
11 ratings
Better than I expected. Dropped "SoureCode Multinetwork Crypto Wallet Server" straight into the workflow; docs were clear enough that I never had to open an issue. Docking half a star only because I wanted a couple more examples.
This is a keeper. As someone who automates these all day, typeScript types are actually accurate, no fighting the compiler. Will definitely check their other products.
Better than I expected. As someone who automates these all day, no spaghetti — the folder layout is sane. Minor tweaks needed for my use case but nothing broke.
This is a keeper. Dropped this automation setup straight into the workflow; docs were clear enough that I never had to open an issue.
Shipped with this same week. The abstractions are sensible and easy to swap out, and the walkthrough got me running in minutes. Would buy from this seller again.
Exactly what I needed. Dropped this automation setup straight into the workflow; docs were clear enough that I never had to open an issue.
Saved me a ton of time. Used "SoureCode Multinetwork Crypto Wallet Server" to automate my workflow and it cut days off the build.
Genuinely impressed. Used this automation setup to automate my workflow and it cut days off the build. No regrets.
Saved me a ton of time. Picked up this automation setup for a client workflow — The code is readable and the structure makes sense. Minor tweaks needed for my use case but nothing broke.
Shipped with this same week. Picked up "SoureCode Multinetwork Crypto Wallet Server" for a client workflow — Handles the edge cases I usually have to patch myself.
Sign in to join the discussion
Loading discussion…