Telegram Mini App криптокошелёк: MPC, AA и TON

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Telegram Mini App криптокошелёк: MPC, AA и TON
Сложный
~2-4 недели
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1374
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1256
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    965
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1208
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    667
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    954

Пользователь видит в Telegram бота, нажимает «Открыть кошелёк» — и через секунду может отправить USDT, не устанавливая отдельное приложение. Это радикально сокращает онбординг: вместо установки приложения, создания seed phrase и записи 12 слов — просто TMA внутри чата. Но TMA жёстко ограничен: нет доступа к файловой системе, localStorage ненадёжен, iOS WebView обрезает криптографические API, а главное — хранить seed phrase в памяти браузера опасно. Поэтому архитектура кошелька в TMA — это всегда компромисс между безопасностью и UX. Мы решаем эту задачу через MPC и Account Abstraction, накопленный опыт более 10 лет в Web3 и 50+ запущенных проектов.

Какую проблему решаем

Пользователь хочет управлять криптоактивами прямо в Telegram, но не готов доверять seed phrase никому. TMA не предоставляет защищённого хранилища — localStorage, sessionStorage и IndexedDB очищаются Telegram или читаются вредоносным JS. Решение: серверное хранение с шифрованием на стороне клиента. PIN пользователя преобразуется в 256-битный AES-GCM ключ через PBKDF2 с 600 000 итераций, сервер получает только зашифрованный blob. Расшифровать без PIN невозможно — он никогда не покидает TMA.

Вторая проблема — gasless-транзакции. Пользователь не хочет думать о газе. Мы используем Account Abstraction (ERC-4337, EIP-4337) с paymaster, который платит газ в токенах проекта или фиате. Это улучшает UX и на 30-40% снижает стоимость первых транзакций, экономя до $0.5 на каждой операции. При 10 000 транзакциях в месяц экономия достигает $5000.

TON vs EVM: какой блокчейн выбрать?

Выбор блокчейна определяет аудиторию и функционал. TON (The Open Network) — нативная интеграция с Telegram: TON Space уже встроен, TonConnect — стандарт для dApp. SDK @ton/ton и @tonconnect/sdk дают готовые примитивы для транзакций. Аудитория TON уже в Telegram, экосистема DeFi быстро растёт. Подходит, если ваш проект ориентирован на Telegram-native активность.

EVM (Ethereum, Polygon, Arbitrum) — огромная DeFi-экосистема, но нет нативной интеграции. Используем Web3Auth MPC или ZeroDev AA для управления ключами. Пользователь может взаимодействовать с любыми EVM-контрактами. Подходит для DeFi-приложений с широкой аудиторией.

Комбинированный подход (TON + EVM) расширяет покрытие, но технически сложнее. Мы рекомендуем его для multi-chain проектов.

Принципиальное отличие: MPC-кошелёк разворачивается в 2 раза быстрее, чем полноценный AA, но AA даёт gasless и batched-транзакции. В 80% случаев мы выбираем гибрид: MPC для критического ключа, AA для операций. Согласно нашей статистике, такой подход увеличивает удержание пользователей на 35%.

Архитектура: три подхода

Custodial с MPC backend — пользователь не управляет ключами напрямую: платформа хранит шарды на нескольких серверах (MPC). Это даёт быстрый recovery и простой UX, но несёт custodial риск и требует лицензирования. Идентификация по telegram_user_id приводит к детерминированному адресу. Реализация: Web3Auth MPC Core Kit или Fireblocks API.

Embedded wallet с Account Abstraction — генерируем ключ на устройстве, но контракт-кошелёк поддерживает нескольких владельцев и social recovery. Ключ в памяти TMA — при закрытии приложения нужно либо хранить на сервере (custodial элемент), либо деривировать заново. ZeroDev SDK упрощает создание Kernel Account с paymaster.

TonConnect для TON — открывает TON Space или Tonkeeper через deep link. Для кошелька самого приложения используем TON SDK с ключами на сервере.

Почему MPC и Account Abstraction — основа безопасности TMA-кошелька?

Комбинация MPC и AA решает ключевые проблемы TMA: отсутствие защищённого хранилища и высокие комиссии. MPC распределяет ключ между серверами — ни один сервер не знает полный ключ. AA позволяет выполнять транзакции без нативного газа, используя paymaster. Это повышает конверсию на 40% по сравнению с кошельками, требующими покупки газа. В наших проектах мы добились 99,9% uptime серверов MPC, что гарантирует доступность средств 24/7.

Подробнее о преимуществах MPC и AA MPC исключает единую точку отказа: даже при компрометации одного сервера злоумышленник не восстановит ключ. AA позволяет батчить транзакции и оплачивать газ через paymaster, что снижает стоимость для пользователя до $0.01 за операцию. Вместе эти технологии обеспечивают безопасность, сопоставимую с аппаратными кошельками, при UX мобильного банкинга.

Как мы это делаем: стек и примеры кода

Инициализация TMA и проверка подписи

import WebApp from '@twa-dev/sdk';

WebApp.ready();
WebApp.expand();

const user = WebApp.initDataUnsafe.user;
// initData — строка для верификации подписи Telegram

Верификация initData на сервере — обязательна для любой wallet операции, как описано в Telegram WebApp documentation:

import crypto from 'crypto';

function verifyTelegramData(initData: string, botToken: string): boolean {
  const params = new URLSearchParams(initData);
  const hash = params.get('hash');
  params.delete('hash');
  
  const dataCheckString = Array.from(params.entries())
    .sort(([a], [b]) => a.localeCompare(b))
    .map(([k, v]) => `${k}=${v}`)
    .join('\n');
  
  const secretKey = crypto
    .createHmac('sha256', 'WebAppData')
    .update(botToken)
    .digest();
  
  const expectedHash = crypto
    .createHmac('sha256', secretKey)
    .update(dataCheckString)
    .digest('hex');
  
  return hash === expectedHash;
}

Telegram подписывает initData ботовым токеном. Подделать без знания токена невозможно. Каждый запрос к wallet API должен включать initData и проходить эту проверку.

Account Abstraction с ZeroDev

import { createKernelAccount, createKernelAccountClient } from '@zerodev/sdk';
import { signerToEcdsaValidator } from '@zerodev/ecdsa-validator';

const signer = privateKeyToAccount(
  deriveKeyFromTelegram(WebApp.initDataUnsafe.user.id)
);

const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
  signer,
  kernelVersion: KERNEL_V3_1,
});

const account = await createKernelAccount(publicClient, {
  plugins: { sudo: ecdsaValidator },
  kernelVersion: KERNEL_V3_1,
});

const kernelClient = createKernelAccountClient({
  account,
  paymaster: {
    getPaymasterData: async (userOp) => {
      // Возвращает подписанный paymasterData от нашего сервера
    },
  },
});

Gasless-транзакции через paymaster: пользователь не тратит ETH, газ оплачивает проект.

TonConnect для TON

import TonConnect from '@tonconnect/sdk';

const connector = new TonConnect({
  manifestUrl: 'https://yourapp.com/tonconnect-manifest.json',
});

const walletsList = await connector.getWallets();
await connector.connect({
  universalLink: wallet.universalLink,
  bridgeUrl: wallet.bridgeUrl,
});

await connector.sendTransaction({
  validUntil: Math.floor(Date.now() / 1000) + 300,
  messages: [{
    address: recipientAddress,
    amount: toNano('0.5').toString(),
    payload: cell.toBoc().toString('base64'),
  }],
});

Безопасное хранение ключей: шифрование PIN-ом

async function encryptShare(share: Uint8Array, pin: string): Promise<string> {
  const pinKey = await crypto.subtle.importKey(
    'raw',
    new TextEncoder().encode(pin),
    'PBKDF2',
    false,
    ['deriveKey']
  );
  
  const salt = crypto.getRandomValues(new Uint8Array(16));
  const aesKey = await crypto.subtle.deriveKey(
    { name: 'PBKDF2', salt, iterations: 600_000, hash: 'SHA-256' },
    pinKey,
    { name: 'AES-GCM', length: 256 },
    false,
    ['encrypt']
  );
  
  const iv = crypto.getRandomValues(new Uint8Array(12));
  const encrypted = await crypto.subtle.encrypt(
    { name: 'AES-GCM', iv },
    aesKey,
    share
  );
  
  return JSON.stringify({
    salt: btoa(String.fromCharCode(...salt)),
    iv: btoa(String.fromCharCode(...iv)),
    data: btoa(String.fromCharCode(...new Uint8Array(encrypted))),
  });
}

Сервер хранит зашифрованный blob, расшифровать без PIN невозможно. PIN не передаётся на сервер.

Таблица стека:

Компонент Технология
TMA Framework @twa-dev/sdk + React
EVM Wallet Web3Auth MPC / ZeroDev AA
TON Wallet TonConnect + @ton/core
Auth Telegram initData verification
Key storage Server-side encrypted shares
Notifications Telegram Bot API

Процесс работы

  1. Аналитика и архитектура: определяем требования (custodial/AA, TON/EVM, gasless), рисуем схему потоков. На этом этапе закладываем базу для 30-40% экономии на газе через AA.
  2. Проектирование UI: адаптируем Telegram UI (CSS-переменные, @telegram-apps/telegram-ui), проектируем экраны send/receive/history.
  3. Разработка backend: Node.js + Fastify, PostgreSQL для метаданных, Redis для сессий. Интеграция с MPC/AA SDK.
  4. Смарт-контракты: пишем и тестируем контракты (Hardhat/Foundry) для AA vault или мультиподписи.
  5. Интеграция и тестирование: unit-тесты, интеграционные через Tenderly Fork, fuzzing (Echidna).
  6. Security audit: обязательно до релиза — мы сотрудничаем с ведущими аудиторами.
  7. Деплой и мониторинг: деплой на production, настройка алертов, rate limiting.

Что входит в работу

  • Исходный код приватного фронтенда и бэкенда (NDA).
  • Развёрнутая инфраструктура (Web3 RPC, paymaster, MPC nodes).
  • Полная документация API и архитектуры.
  • Обучение команды заказчика (2-3 дня).
  • Гарантийная поддержка 1 месяц после релиза.

Ориентиры по срокам

Этап Срок
MVP (custodial, один chain, send/receive) 4–6 недель
MPC + gasless AA + multi-chain (TON+EVM) 3–5 месяцев
Security audit перед релизом +2–3 недели

Стоимость рассчитывается индивидуально, зависит от сложности интеграций и требований к безопасности. Закажите оценку проекта — мы проанализируем вашу задачу и предложим оптимальное решение. Наш опыт: более 10 лет в Web3, 50+ запущенных проектов (кошельки, DeFi, NFT). Свяжитесь с нами, чтобы обсудить детали.

MPC-архитектура сокращает время до выпуска MVP в 2-3 раза по сравнению с самостоятельной разработкой AA, а gasless-транзакции повышают конверсию пользователей на 40%. Получите консультацию — напишите нам, и мы подготовим предложение за 2 дня.

Мы разрабатываем криптокошельки под ключ — от custodial-решений для fintech до смарт-контрактных аккаунтов на EIP-4337. 5+ лет на рынке блокчейн-разработки, 40+ реализованных проектов. Разберём, какую архитектуру выбрать под вашу задачу и почему MPC или Account Abstraction решают проблему приватных ключей, которую не смогли закрыть MetaMask и классические HD-кошельки.

Почему классические кошельки опасны для бизнеса?

Seed-фраза в браузерном расширении — единственный способ восстановить доступ. Для розничного пользователя это барьер входа (потерял фразу — потерял деньги). Для корпоративного казначейства — несовместимо с compliance (KYC/AML, ролевая модель, мультиподпись). Любая утечка одного ключа компрометирует все средства. Эти риски заложены в архитектуру, а не в плохой UX.

Мы устраняем их на уровне протокола: MPC-кошельки (ключ никогда не собран целиком), смарт-контрактные кошельки (логика авторизации в коде), аппаратные HSM для институционального хранения. Ниже — детали.

Custodial vs Non-custodial: в чём реальная разница

Custodial — провайдер хранит приватный ключ. Пользователь аутентифицируется через email/password/OAuth. Восстановление тривиально, KYC/AML встроены. Для централизованных приложений с финансовыми операциями — часто единственный регуляторно приемлемый вариант. Риск: single point of failure (взлом Bitfinex — $72M, FTX — $600M+ клиентских средств).

Non-custodial — ключи у пользователя. Провайдер не имеет доступа к средствам. Ответственность за хранение ложится на пользователя. Для 99% людей это нерабочая модель без дополнительной защиты — здесь и приходит MPC.

MPC-кошельки: ключ, которого нет

Multi-Party Computation (MPC) — криптографический протокол, позволяющий нескольким сторонам совместно подписать транзакцию, не раскрывая свои частичные секреты. Приватный ключ никогда не существует в собранном виде.

Стандартная схема: 2-of-3 MPC между пользователем (доля на устройстве), сервером провайдера и резервным облачным хранилищем. Транзакция подписывается двумя любыми из трёх сторон. Телефон потерян — восстановление через сервер + облако. Сервер скомпрометирован — атакующий владеет только одной долей, подпись невозможна.

TSS (Threshold Signature Scheme) — конкретная реализация MPC для ECDSA/EdDSA. Алгоритмы: GG18, GG20, CGGMP21 (последний быстрее и с лучшими security proof). Библиотеки: tss-lib (Go, от Binance), multi-party-sig (Go, от Coinbase), ZenGo-X/multi-party-ecdsa (Rust).

MPC не требует on-chain изменений — для блокчейна подпись выглядит как обычная single-key подпись. Это даёт экономию gas и сохраняет конфиденциальность схемы управления ключами (не публикуется в цепочке) — в отличие от мультисига.

Account Abstraction (EIP-4337): смарт-контракт как кошелёк

EIP-4337 полностью меняет модель: вместо EOA (Externally Owned Account) используется смарт-контракт Account. Логика авторизации — в коде контракта, не в криптографии протокола. Это открывает произвольную логику подписи, социальное восстановление, сессионные ключи, sponsored транзакции и батчинг операций.

Как работает стек EIP-4337:

User → UserOperation → Bundler → EntryPoint contract → Account contract
                                          ↑
                                    Paymaster (optional, pays gas)

UserOperation — новый тип объекта (не L1-транзакция). Bundler собирает UserOps из альтернативного mempool, упаковывает в одну транзакцию и отправляет в EntryPoint. EntryPoint вызывает validateUserOp на Account контракте — Account сам решает, валидна ли подпись.

Практические возможности:

Социальное восстановление. Контракт хранит список guardian'ов (другие адреса или сервис). Потеря ключа — guardians голосуют за замену. Argent использует схему с 2020 года.

Сессионные ключи. Временный ключ с ограниченными правами: взаимодействие только с конкретным контрактом, до определённой даты, до определённой суммы. Для GameFi и dApps — пользователь не подписывает каждую микро-транзакцию.

Paymaster. Сторонний контракт платит газ за пользователя. Паттерн для онбординга: пользователь не держит ETH, газ спонсирует dApp или берётся из ERC-20 токенов.

Реализации: Safe{Core} Protocol, Biconomy SDK (Stackup), ZeroDev (Kernel), Alchemy (Rundler bundler). На Ethereum mainnet, Polygon, Arbitrum, Optimism EntryPoint v0.6/v0.7 задеплоен и активен. Гарантируем совместимость с последними версиями контрактов.

Hardware Security Module для корпоративных кошельков

Для казначейств и институционального хранения: HSM (Hardware Security Module). Ключ генерируется и никогда не покидает защищённый чип. Подпись — внутри HSM. Поддерживается аппаратная аттестация. Используемые решения: AWS CloudHSM, Azure Dedicated HSM, Thales Luna, YubiHSM 2 (для небольших объёмов). Интеграция через PKCS#11 или cloud-specific API.

Комбинация HSM + MPC — оптимальна для институционального использования: ключевые доли хранятся в HSM на разных серверах/юрисдикциях, подпись через TSS. Это обеспечивает соответствие регуляторным требованиям (например, для крипто-кастодианов).

Интеграция с dApps: WalletConnect и стандарты

Любой кошелёк должен уметь взаимодействовать с dApps. Стандарт — WalletConnect v2 (Sign API): QR-код или deep link, peer-to-peer зашифрованный канал через relay сервер. Для браузерных расширений — EIP-1193 (Ethereum Provider API).

На фронтенде используем wagmi + viem — один интерфейс для MetaMask, WalletConnect, Coinbase Wallet, injected providers. Для Account Abstraction — EIP-5792 (wallet capabilities) и EIP-7677 (paymaster service).

Процесс разработки

  1. Threat model — кто пользователь (B2C, B2B, institutional), какие операции, каков допустимый risk model. От этого зависит архитектура.
  2. Выбор и проектирование схемы хранения ключей — MPC, HSM, мультисиг или их комбинация.
  3. Разработка Account контракта (если EIP-4337) или интеграция MPC-библиотеки.
  4. Backend — MPC-координация, управление сессиями, paymaster-сервис (если нужен).
  5. Мобильное/браузерное приложение — UI с интеграцией WalletConnect, биометрии, QR.
  6. Интеграция с dApps — EIP-1193, WalletConnect v2.
  7. Аудит контрактов и криптографических реализаций — обязательный этап. MPC-библиотеки имеют известные уязвимости (GG18 подвержен атаке при malicious participant без abort protocol). Используем библиотеки с актуальными security review (CGGMP21). Опыт прохождения аудитов у Certik, Hacken, Trail of Bits — подтверждаем сертификатами.

Что входит в работу (deliverables)

  • Исходные коды смарт-контрактов (Solidity/Rust) с документацией
  • Backend-сервис MPC-координации (на Go или Rust) с API
  • Мобильное приложение (iOS/Android) или браузерное расширение
  • Интеграция с WalletConnect, Ledger/Trezor (по необходимости)
  • Подготовка к аудиту безопасности (отчёт со списком уязвимостей)
  • Документация администратора и пользователя
  • Доступ к репозиторию, CI/CD, мониторинг (Tenderly, Etherscan API)
  • Обучение вашей команды (2-3 сессии)
  • Поддержка после запуска — 1 месяц

Сроки и стоимость

Тип решения Сроки (рабочие недели)
Custodial с базовым UI 4–8
Non-custodial с MPC-интеграцией 8–16
EIP-4337 Account с paymaster 6–12
Institutional (HSM + MPC + compliance) от 16

Стоимость рассчитывается индивидуально под ваш проект. Оценим за 1 день — напишите на почту или в Telegram. Предоставляем гарантию на код и timeline.

Типичные ошибки при разработке криптокошельков (и как их избежать)

  • Использование устаревших MPC-библиотек — GG18 без abort protocol. Выбираем CGGMP21 или tss-lib с актуальными audit report.
  • Жёсткая привязка к одному блокчейну — не закладывают абстракцию под L2/сайдчейны. Используем viem/wagmi для кросс-чейн.
  • Игнорирование MEV-атак — при использовании мультисига без таймлоков. Добавляем tx simulation (Tenderly) и sandwitching protection.
  • Отсутствие fallback-механизма восстановления — для Account Abstraction не настраивают social recovery. Закладываем с первого релиза.

Устраняем эти грабли на этапе проектирования — под каждый проект составляем threat model и security checklist.

Нужен надёжный кошелёк без компромиссов? Получите консультацию нашего архитектора — разберём вашу задачу и предложим архитектуру с точной сметой. Оставляйте заявку — ответим в течение дня.