Internet Money — Crypto Financial Services Platform
$10M+
Monthly Volume
99.99%
Uptime
5+
Chains Supported
Overview
Internet Money is a crypto financial services platform that brings together multi-chain wallet management, real-time market data, DeFi integrations, and fiat on/off ramps under one roof. The platform processes $10M+ in monthly transaction volume across Bitcoin, Ethereum, Solana, BNB Chain, and Polygon.
I joined as Senior Full-Stack Engineer and led the wallet integration architecture, the real-time price feed system, and the transaction processing pipeline.
The Challenge
Multi-chain integration is a compatibility nightmare. Each blockchain has its own RPC protocol, transaction format, fee model, confirmation semantics, and failure modes. A transaction submitted to Ethereum needs 12-35 confirmations for finality; a Solana transaction knows its fate in under 1 second. Building a unified transaction model on top of five different chains without leaking chain-specific complexity into the product layer required careful abstraction.
Additionally, the regulatory environment demanded a full audit trail. Every transaction, every wallet balance query, every price data fetch had to be logged with tamper-evident records. A $10M monthly platform cannot afford gaps in its audit log.
Architecture & Technical Decisions
Chain-Agnostic Wallet Abstraction Layer
I designed a wallet abstraction layer with a standard interface: getBalance(), buildTransaction(), signTransaction(), broadcastTransaction(), getTransactionStatus(). Each chain has a concrete adapter implementing this interface. The product layer never touches chain-specific APIs — it only calls the abstraction. This meant adding Polygon support took two days, not two weeks.
- Adapter pattern per chain: Bitcoin (bitcoinjs-lib), Ethereum/Polygon (ethers.js), Solana (web3.js), BNB (binance-chain-js)
- Unified Transaction type with chain-agnostic fields + opaque chainMetadata JSONB
- Gas/fee estimation abstracted behind a single getFeeEstimate() call
- Transaction status polling with chain-appropriate confirmation thresholds
Real-Time Market Data Pipeline
Price feeds came from multiple sources (CoinGecko, Binance WebSocket, Chainlink oracles) with different update frequencies and reliability profiles. I built a price aggregator that consumed all sources, applied outlier detection (prices deviating >2% from median were flagged), and published a consensus price to Redis with a 1-second TTL. All product features read from Redis, never the upstream sources directly.
- Multi-source price aggregation with median consensus and outlier rejection
- Redis pub/sub for real-time price distribution to WebSocket clients
- Circuit breaker per data source — automatic failover if a source goes stale
- Price history stored in TimescaleDB for charting and analytics
Transaction Audit & Compliance
Every state transition in a transaction's lifecycle was written to an immutable audit log in PostgreSQL with a row-level hash chain (each row's hash included the previous row's hash). This made tampering with historical records detectable. A separate compliance service consumed the audit log and generated regulatory reports on schedule.
Results
- $10M+ monthly transaction volume processed across 5 chains
- 99.99% uptime over 14 months — 52 minutes total downtime
- Transaction audit log: zero gaps, zero tamper events detected in security audits
- New chain integration time reduced from weeks to 2-3 days via abstraction layer
- Price feed consensus latency: <200ms from source tick to client WebSocket push
What I Learned
In FinTech, correctness is non-negotiable but so is resilience. The system that silently drops a transaction because a downstream RPC node timed out is worse than the system that fails loudly. Every external call in this codebase had explicit retry logic, timeout budgets, circuit breakers, and alerting. Building in the assumption of failure — not hoping for success — is what kept the audit log complete and the uptime number honest.