Files
cryptowallet/docs/plans/2026-03-15-send-receive-design.md
2026-04-14 13:30:26 +03:00

4.0 KiB
Raw Blame History

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-lib PSBT → 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