Use Cases
Real-world integration patterns for Rach Wallet-as-a-Service.
1. Crypto Exchange — Custodial Deposit Wallets
Scenario: A crypto exchange wants to give each user unique deposit addresses across multiple networks for their account.
How:
- Create a wallet per user at signup
- Derive addresses for all supported networks upfront
- Enable monitoring on all addresses
- Credit user's exchange balance on
wallet.deposit.confirmed - Use
POST /wallet/{id}/transferto process user withdrawals
// On user signup
const wallet = await rach.wallet.create({ customerId: user.id });
await secrets.store(`wallet:${user.id}`, wallet.mnemonic);
// Derive all supported networks
const networks = ['BTC', 'ETH', 'BSC', 'TRX', 'SOL', 'POL'];
const addresses = await Promise.all(
networks.map(network =>
rach.wallet.deriveAddress(user.id, { network, index: 0, enable_monitoring: true })
)
);
// Store addresses for display in user dashboard
await db.wallets.upsertAddresses(user.id, addresses);On deposit webhook:
if (event === 'wallet.deposit.confirmed') {
await exchange.credit(data.customer_id, data.amount, data.currency);
}2. Fintech App — Multi-Currency Savings
Scenario: A savings app lets users hold BTC, ETH, and USDT in a non-custodial wallet. Users can send/receive freely.
How:
- Create one wallet per user on signup
- Derive BTC, ETH, TRX addresses (for USDT) with monitoring
- Show real-time balances via
GET /wallet/{id}/addresses?refresh=true - Let users send via
POST /wallet/{id}/transfer - Offer wallet export via
POST /wallet/{id}/export-keyfor advanced users
// Onboarding
const wallet = await rach.wallet.create({ customerId: userId, word_count: 24 });
const [btc, eth, trx] = await Promise.all([
rach.wallet.deriveAddress(userId, { network: 'BTC', enable_monitoring: true }),
rach.wallet.deriveAddress(userId, { network: 'ETH', enable_monitoring: true }),
rach.wallet.deriveAddress(userId, { network: 'TRX', enable_monitoring: true }), // for USDT
]);
// Show balances
const { addresses } = await rach.wallet.listAddresses(userId, { refresh: true });3. Payment Processor — High-Volume Merchant Payments
Scenario: A payment processor accepts crypto on behalf of many merchants, routing payments to their respective wallets.
How:
- Create a wallet per merchant
- Derive a new address per order (using incrementing index) for perfect payment attribution
- Monitor all addresses for deposits
- On confirmation, route payment to merchant's settled balance
// Per order — new address from same wallet at unique index
const order = await db.orders.create({ merchantId, amount, currency });
const address = await rach.wallet.deriveAddress(merchantId, {
network: 'BSC',
index: order.id, // unique index per order
enable_monitoring: true
});
order.depositAddress = address.address;4. NFT Marketplace — Creator Royalty Wallets
Scenario: An NFT marketplace wants to automatically distribute royalty payments to NFT creators when their works are sold.
How:
- Create a wallet for each creator
- On NFT sale, use
POST /wallet/{creatorId}/transferto push ETH/POL royalty - Creators can export their private key to claim funds in any external wallet
// On NFT sale
const royaltyAmount = salePrice * creatorRoyaltyPercent;
const amountWei = BigInt(royaltyAmount * 1e18).toString(); // convert to wei
await rach.wallet.transfer(creator.id, {
network: 'ETH',
currency: 'ETH',
to_address: creator.walletAddress,
amount: amountWei,
index: 0
});5. Remittance Platform — Stablecoin Corridors
Scenario: A remittance company moves USDT from senders (Europe) to recipients (Africa) using stablecoins for settlement, avoiding SWIFT delays.
How:
- Sender wallet on ETH or BSC (receives USDT from user)
- Recipient wallet on TRX (cheaper USDT-TRC20 fees)
- Monitor sender address → receive USDT → immediately send to recipient TRX address
// Sender deposits USDT on BSC
await rach.wallet.deriveAddress(senderId, {
network: 'BSC', currency: 'USDT', enable_monitoring: true
});
// On deposit.confirmed — bridge to cheaper TRX network via internal swap
if (event === 'wallet.deposit.confirmed' && data.currency === 'USDT') {
const amountSun = BigInt(data.amount * 1e6).toString(); // USDT TRC-20 uses 6 decimals
await rach.wallet.transfer(recipientId, {
network: 'TRX',
currency: 'USDT',
to_address: recipientTrxAddress,
amount: amountSun
});
}6. DeFi Gateway — Multi-Chain Liquidity
Scenario: A DeFi aggregator gives users wallets to bridge funds into on-chain DeFi protocols across ETH, BSC, and Polygon.
// Create multi-chain wallet
const wallet = await rach.wallet.create({ customerId: user.id });
// Derive EVM chains (same address across all three)
const chains = ['ETH', 'BSC', 'POL'];
await Promise.all(
chains.map(network =>
rach.wallet.deriveAddress(user.id, {
network,
index: 0,
enable_monitoring: true
})
)
);
// Estimate gas before transfer
const gas = await rach.wallet.estimateGas({
network: 'BSC',
currency: 'USDT',
from_address: addresses.BSC,
to_address: defiProtocolAddress,
amount: depositAmountWei
});Network Selection Guide
Choose networks based on your use case:
| Objective | Recommended Networks |
|---|---|
| Stablecoin payments (cheapest) | TRX (USDT-TRC20), POL (USDC-Polygon) |
| Maximum chain coverage | BTC, ETH, BSC, TRX, SOL |
| DeFi integrations | ETH, BSC, POL, SOL |
| Bitcoin-native | BTC, LTC, BCH |
| Low-fee EVM | BSC, POL |
| Solana ecosystem | SOL |
