Розробка vesting-панелі для інвесторів
Задача: інвестор купив токени на private round, у нього є vesting контракт в блокчейні, и йому потрібен удобный інтерфейс щоб бачити скільки розблокувалося, скільки ще заблоковано, и забрати доступні токени. Здається простим — поки не зіштовхнешся з десятками контрактів на кількох сетях, multi-sig кошельками інвесторів та wallet-агностик вимогами.
Архітектура панелі
Що повинно відображатися
Мінімальний набір для кожного інвестора:
- Total allocation — всього токенів виділено
- Vested — розблоковано до цього моменту
- Released — вже забрано
- Releasable — можна забрати прямо зараз
- Locked — ще під vesting
- Vesting schedule — графік розблокування (візуально)
- Next unlock — коли наступний разлок і скільки
Читаємо дані з контрактів
Якщо використовується OpenZeppelin VestingWallet:
import { createPublicClient, http, parseAbi } from "viem";
const VESTING_ABI = parseAbi([
"function beneficiary() view returns (address)",
"function start() view returns (uint64)",
"function duration() view returns (uint64)",
"function released(address token) view returns (uint256)",
"function releasable(address token) view returns (uint256)",
]);
multicall обов'язковий — batch запросів. Один вызов до ноди замість чотирьох-п'яти послідовних — критично для продуктивності при кількох контрактах.
Frontend: компонент графіка vesting
Візуалізація допомагає інвестору зрозуміти коли і скільки він отримає.
Claim транзакція
Кнопка "Claim" повинна коректно обробляти всі стани:
import { useWriteContract, useWaitForTransactionReceipt } from "wagmi";
function ClaimButton({ vestingAddress, tokenAddress, releasable, decimals }) {
// ... логіка claim
}
Multi-wallet та multi-chain підтримка
Інвестори використовують різні гаманці (MetaMask, WalletConnect, Coinbase, Ledger). wagmi v2 з ConnectKit/RainbowKit це обробляє.
Якщо проект задеплоєн на кількох сетях, інвестор повинен бачити всі свої vesting контракти в одному місці.
Інвестор-специфічні фічі
Email/Telegram уведомлення об розлоках: за 7 днів до cliff, за 24 години до кожного значимого unlock. Потребує off-chain сервісу, який мониторить блокчейн і відправляє уведомлення.
CSV експорт для податкової звітності: історія всіх claim транзакцій з датами та сумами. Беремо з подій ERC20Transfer або TokensReleased через getLogs або indexer (The Graph).
Whitelist check: якщо токен нельзя продавати до визначеної дати (lock-up дополнітельний до vesting), це не завжди відбито в vesting контракті — може бути у самому токені. Панель повинна це показувати.
Аутентифікація
Для vesting панелі аутентифікація через кошельок (Sign-In with Ethereum, EIP-4361) достатня і рекомендується — немає паролів, немає баз користувачів.
Стек
| Компонент | Технологія |
|---|---|
| Frontend | Next.js 14 + TypeScript |
| Web3 | wagmi v2 + viem + RainbowKit |
| Читання даних | viem multicall + The Graph (опц.) |
| Графіки | Recharts або Victory |
| Auth | SIWE (EIP-4361) |
| Уведомлення | cron-сервіс + SendGrid / Telegram Bot API |
Термін розробки MVP (read-only dashboard + claim): 2–3 тижні. Повна панель з уведомленнями, multi-chain, CSV експортом — 4–6 тижнів.







