CryptoWhale Tracker — аналітична панель, яка моніторить конкретні "багаті" гаманці (кити) у реальному часі, зберігає їх транзакції в базі даних та будує графіки змін балансу. 🔗 crypto-whale-tracker-nine.vercel.app
🔗 check the GitHub repository for source code.
Стек технологій
- NestJS 11 — основний фреймворк
- Prisma 6 — ORM для роботи з базою даних
- viem 2 — бібліотека для взаємодії з блокчейном
- @nestjs/schedule — планування задач для polling транзакцій
- Next.js 16 + React 19
- SWR — для реального часу та кешування даних
- Tailwind CSS 4 — стилізація
- Sonner — toast-сповіщення про нові транзакції
Як це працює
viem, перевіряє баланс відстежуваних гаманців та зберігає нові транзакції у базі даних через Prisma. Frontend за допомогою SWR регулярно запитує API і оновлює UI без перезавантаження сторінки.
Структура Backend (NestJS)
// wallet.scheduler.ts
@Injectable()
export class WalletScheduler {
constructor(private readonly walletService: WalletService) {}
@Cron(CronExpression.EVERY_MINUTE)
async trackWallets() {
const wallets = await this.walletService.findAll();
for (const wallet of wallets) {
const balance = await this.walletService.fetchBalance(wallet.address);
await this.walletService.saveSnapshot(wallet.id, balance);
}
}
}Отримання балансу через viem
import { createPublicClient, http, formatEther } from 'viem';
import { mainnet } from 'viem/chains';
const client = createPublicClient({
chain: mainnet,
transport: http(),
});
const balance = await client.getBalance({
address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
});
console.log(formatEther(balance)); // '1234.56'Запит даних на Frontend через SWR
const { data: wallets, isLoading } = useSWR(
'/api/wallets',
fetcher,
{ refreshInterval: 30000 } // оновлення кожні 30 секунд
);Запуск проєкту
# Backend
cd api
npm install
npx prisma migrate dev
npm run start:dev
# Frontend
cd web
npm install
npm run dev