pezkuwichain 96cda97635 perf(deposits): derive the HD master key once, not once per user
check-deposits hits the isolate's CPU ceiling on almost every run — 17 limit
events across 20 invocations in the last 20 minutes — and when it does, the
supervisor cancels the worker and the scan stops partway. Deposits after the
cut-off simply are not seen until some later run happens to reach them.

The cause is in deriveTronAddress: it calls mnemonicToSeedSync per user, which
is PBKDF2 with 2048 iterations. The seed depends only on the mnemonic, so with
51 accounts that cost was paid 51 times a minute to produce the identical seed.
Only the derivation path varies per user.

Derive the master key once and reuse it. Measured over the 51 accounts we
actually scan: 418ms -> 58ms, a 7.2x drop in the part that was blowing the
budget.

Verified the addresses are unchanged: old and new paths produce identical
private keys for every index tested, including repeated indexes in one run,
which is what would expose derive() mutating the parent key. It does not.
2026-07-30 02:36:32 -07:00
2026-07-29 21:55:01 -07:00
2026-07-29 21:55:01 -07:00

Pezkuwi Telegram Mini App

Telegram Mini App for Pezkuwichain - Forum, Announcements, Rewards, and Wallet integration.

Tech Stack

  • Frontend: React 18 + TypeScript + Vite
  • Styling: Tailwind CSS + shadcn/ui patterns
  • State: TanStack Query (React Query)
  • Backend: Supabase (PostgreSQL + Auth + Edge Functions)
  • Testing: Vitest + Testing Library
  • CI/CD: GitHub Actions

Getting Started

Prerequisites

  • Node.js >= 18
  • npm >= 9
  • Supabase account

Installation

# Clone the repo
git clone https://github.com/pezkuwichain/pezkuwi-telegram-miniapp.git
cd pezkuwi-telegram-miniapp

# Install dependencies
npm install

# Copy environment template
cp .env.example .env

# Add your Supabase credentials to .env

Development

# Start dev server
npm run dev

# Run tests
npm run test

# Type check
npm run typecheck

# Lint
npm run lint

# Format code
npm run format

# Full validation (typecheck + lint + test + build)
npm run validate

Build

npm run build

Output will be in dist/ directory.

Project Structure

src/
├── contexts/       # React contexts (Auth)
├── hooks/          # Custom hooks (Supabase, Telegram)
├── lib/            # Utilities (env, supabase client)
├── sections/       # Main app sections
│   ├── Announcements.tsx
│   ├── Forum.tsx
│   ├── Rewards.tsx
│   └── Wallet.tsx
├── test/           # Test setup
├── types/          # TypeScript types
├── App.tsx         # Main app component
└── main.tsx        # Entry point

Database Schema

Tables (prefixed with tg_ to avoid conflicts):

  • tg_users - Telegram users
  • tg_announcements - Admin announcements
  • tg_announcement_reactions - Like/dislike reactions
  • tg_threads - Forum threads
  • tg_thread_likes - Thread likes
  • tg_replies - Thread replies
  • tg_reply_likes - Reply likes

Environment Variables

Variable Description
VITE_SUPABASE_URL Supabase project URL
VITE_SUPABASE_ANON_KEY Supabase anon/public key

Telegram Setup

  1. Create bot via @BotFather
  2. Enable Mini App in bot settings
  3. Set Mini App URL to deployment URL
  4. Deploy telegram-auth Edge Function to Supabase

License

MIT

S
Description
No description provided
Readme MIT 8.5 MiB
Languages
TypeScript 92.4%
PLpgSQL 2.5%
JavaScript 2.2%
Python 2.2%
HTML 0.4%
Other 0.2%