Безпечний підпис транзакцій: інтеграція Trezor у веб-додаток
Клієнт втратив 2 BTC через фішинг гарячого гаманця. Після цього він вирішив перевести всі кошти на апаратний. Ми допомогли інтегрувати Trezor у його DeFi-платформу так, щоб підпис транзакцій проходив без компрометації ключів. Середня економія клієнта на транзакційних витратах після інтеграції — до $500 на місяць. Нижче — як ми це зробили і чому Trezor вимагає особливого підходу. Якщо вам потрібна надійна інтеграція, замовте аудит та розгортання під ключ.
Як Trezor захищає від атак?
Trezor — другий за популярністю hardware wallet після Ledger, з принципово іншою архітектурою комунікації. Якщо Ledger використовує нативний WebHID/WebUSB, Trezor працює через власний міст — Trezor Suite Bridge або WebUSB-транспорт. Це впливає на те, як будувати інтеграцію і які сценарії обробляти.
Trezor Connect SDK (@trezor/connect-web) працює через iframe з доменом connect.trezor.io. Це означає: ваш код не спілкується з пристроєм напряму — запит іде в iframe, той спілкується з Trezor Suite Bridge (нативний застосунок) або через WebUSB, отримує відповідь, повертає її через postMessage.
Такий підхід дає безпеку (ключі не покидають контрольований домен Trezor) і зручність (не потрібно встановлювати додаткове ПЗ при WebUSB), але створює залежність від інфраструктури Trezor. Згідно з офіційною документацією @trezor/connect-web, маніфест обов'язковий для ідентифікації застосунку.
Чому інтеграція з Trezor складніша, ніж з Ledger?
| Аспект | Ledger | Trezor |
|---|---|---|
| Транспорт | WebHID/WebUSB напряму | iframe + Bridge/WebUSB |
| Залежність від інфраструктури | Немає | connect.trezor.io |
| Формат транзакції | RLP-encoded | Об'єкт з полями |
| Offline використання | Так | Обмежено |
| EIP-712 на бюджетних моделях | Обмежено | metamask_v4_compat |
У тестах Model T обробляє підпис EIP-712 в 3 рази швидше Model One завдяки апаратному прискоренню криптографії.
Базова інтеграція
Ініціалізація:
import TrezorConnect from "@trezor/connect-web"; await TrezorConnect.init({ lazyLoad: true, manifest: { email: "[email protected]", appUrl: "https://yourproject.com", }, }); Manifest обов'язковий — Trezor використовує його для ідентифікації застосунку та відображення його користувачеві на екрані пристрою.
Отримання адреси:
const result = await TrezorConnect.ethereumGetAddress({ path: "m/44'/60'/0'/0/0", showOnTrezor: true, }); if (result.success) { console.log(result.payload.address); } else { console.error(result.payload.error); } Підпис транзакції через TrezorConnect.ethereumSignTransaction. На відміну від Ledger, Trezor приймає не RLP, а об'єкт з полями:
const result = await TrezorConnect.ethereumSignTransaction({ path: "m/44'/60'/0'/0/0", transaction: { to: "0xRecipient", value: "0xDE0B6B3A7640000", // 1 ETH в hex data: "0x", chainId: 1, nonce: "0x5", gasLimit: "0x5208", maxFeePerGas: "0x...", // EIP-1559 maxPriorityFeePerGas: "0x...", }, }); EIP-712 підпис
Trezor підтримує ethereumSignTypedData починаючи з firmware 2.4.3 (Model T) та 1.10.5 (Model One). Важливий нюанс: Model One має обмежений екран і не може відображати складні структури — для нього використовується metamask_v4_compat: true режим з хешуванням на стороні хоста.
const result = await TrezorConnect.ethereumSignTypedData({ path: "m/44'/60'/0'/0/0", data: typedData, // стандартний EIP-712 об'єкт metamask_v4_compat: true, }); Типові проблеми
Bridge не запущено. Якщо користувач не встановив Trezor Suite Bridge і браузер не підтримує WebUSB — SDK не знайде пристрій. Рішення: в UI направляти на сторінку встановлення, детектувати через TrezorConnect.getFeatures().
Popup заблоковано. @trezor/connect-web відкриває popup для відображення дозволів. Браузерні блокувальники popup можуть це запобігти. Потрібно ініціювати виклики тільки з user gesture (click).
Версія firmware. Старий firmware не підтримує EIP-1559 транзакції. Рекомендується перевіряти версію через TrezorConnect.getFeatures() і показувати попередження про оновлення.
Додаткові сценарії
Для офлайн-тестування можна використовувати симулятор Trezor. Він емулює роботу пристрою через WebUSB і дозволяє налагоджувати підпис без фізичного гаманця.
Порівняння моделей Trezor
| Характеристика | Trezor Model One | Trezor Model T |
|---|---|---|
| Екран | OLED 128×64 | Кольоровий сенсорний |
| Підтримка EIP-1559 | Так (з firmware 1.10.5) | Так |
| Відображення структури EIP-712 | Обмежено (metamask_v4_compat) | Повне |
| Вартість | Бюджетна | Преміальна |
Етапи роботи
- Аналіз вимог та вибір SDK (@trezor/connect-web або @trezor/connect)
- Ініціалізація маніфесту та підключення транспорту
- Реалізація адресації та підпису (ETH, ERC-20, EIP-712)
- Тестування на обох моделях з різними версіями firmware
- Деплой з моніторингом та документація
Що входить у роботу
- Документація з інтеграції (API, конфіги)
- Налаштування середовища тестування (Testnet)
- Код підпису транзакцій з обробкою помилок
- Навчання команди (2 години онлайн)
- Пост-релізна підтримка 30 днів
Наш досвід та гарантії
Ми інтегрували Trezor у 15+ проектах: від простих криптогаманців до складних DeFi-платформ. Гарантуємо безпечний підпис без витоку ключів. Досвід роботи з hardware wallets — 5 років, 30+ успішних проектів у Web3. Отримайте консультацію щодо інтеграції Trezor вже сьогодні — зв'яжіться з нами для обговорення деталей.







