4.0 KiB
4.0 KiB
Phase 6: Send & Receive
Context
Кошелёк поддерживает ETH, SOL, TRX, BTC. Балансы работают для ETH/SOL/TRX. BTC имеет деривированный адрес, но нет RPC/балансов. Нужен полноценный Send/Receive с QR кодами.
Receive — генерация QR
Формат QR: стандартные URI схемы (совместимы с другими кошельками):
- ETH:
ethereum:0xAddress/ethereum:0xAddress@1/transfer?address=0xTokenContract&uint256=amount(EIP-681) - SOL:
solana:Address/solana:Address?spl-token=MintAddress&amount=1.5 - TRX:
tron:TAddress/tron:TAddress?token=TR7...&amount=100 - BTC:
bitcoin:bc1Address/bitcoin:bc1Address?amount=0.01
UI flow: Выбрал сеть → выбрал токен → опционально ввёл сумму → QR + адрес текстом + Copy.
Send — отправка + сканер QR
UI flow: Выбрал сеть → выбрал токен → ввёл адрес (или Scan QR) → ввёл сумму → Gas (ETH only) → Review → Confirm → tx.
QR сканер: кнопка "Scan QR" → камера → распознаёт URI → заполняет chain/token/address/amount.
Отправка по сетям:
- ETH:
ethers.Wallet.sendTransaction()для ETH,contract.transfer()для ERC20 - SOL:
SystemProgram.transfer()для SOL,createTransferInstruction()для SPL tokens - TRX: TronGrid
createtransactionдля native TRX,triggersmartcontractдля TRC20 - BTC:
bitcoinjs-libPSBT → broadcast через Blockstream/Mempool API
Библиотеки
qrcode.react— генерация QR@yudiel/react-qr-scanner— сканирование QR камерой
Безопасность
| Принцип | Реализация |
|---|---|
| Address validation | Regex + checksum для каждого формата |
| QR parsing validation | URI парсится → chain/address валидируются → token в whitelist |
| Confirm before send | Review экран + checkbox |
| Private keys | Подписание в браузере, ключи не покидают клиент |
| Amount validation | Проверка баланса перед отправкой |
Файлы
Новые (8)
| Файл | Назначение |
|---|---|
apps/web/src/app/send/page.tsx |
Send page |
apps/web/src/app/receive/page.tsx |
Receive page |
apps/web/src/lib/send/execute.ts |
Транзакции по 4 сетям |
apps/web/src/lib/send/validate.ts |
Валидация адресов |
apps/web/src/lib/send/constants.ts |
Токены, decimals, контракты |
apps/web/src/lib/qr/generate.ts |
Генерация URI для QR |
apps/web/src/lib/qr/parse.ts |
Парсинг URI из QR |
apps/api/src/routes/btc-proxy.routes.ts |
Bitcoin RPC proxy |
Изменяемые (3)
| Файл | Изменение |
|---|---|
apps/web/src/app/dashboard/page.tsx |
Send/Receive кнопки |
apps/web/package.json |
qrcode.react, @yudiel/react-qr-scanner |
apps/api/src/app.ts |
Регистрация btc-proxy routes |
Порядок выполнения
| # | Задача |
|---|---|
| 1 | install qrcode.react + @yudiel/react-qr-scanner |
| 2 | send/constants.ts — токены, decimals, контракты для 4 сетей |
| 3 | send/validate.ts — валидация адресов по сетям |
| 4 | qr/generate.ts — URI генератор |
| 5 | qr/parse.ts — URI парсер |
| 6 | btc-proxy.routes.ts — Bitcoin UTXO + broadcast |
| 7 | app.ts — регистрация btc routes |
| 8 | send/execute.ts — отправка по 4 сетям |
| 9 | receive/page.tsx — Receive page |
| 10 | send/page.tsx — Send page + QR scanner |
| 11 | dashboard/page.tsx — Send/Receive кнопки |
| 12 | typecheck |