Розробка системи відображення транзакцій у зрозумілому вигляді

MetaMask показує: «Ви збираєтеся викликати функцію `0x38ed1739` з аргументами `[115792089237316195423570985008687907853269984665640564039457584007913129639935, 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, ...]`». Користувач бачить hex і натискає «Підтвердити», тому що іншого вибору немає. За оцінками

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1003
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1269
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    717
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1008

MetaMask показує: «Ви збираєтеся викликати функцію 0x38ed1739 з аргументами [115792089237316195423570985008687907853269984665640564039457584007913129639935, 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, ...]». Користувач бачить hex і натискає «Підтвердити», тому що іншого вибору немає. За оцінками, до 30% втрат від фішингу відбувається саме через нерозуміння підписуваних даних. Це фундаментальна проблема UX Web3 — і система human-readable транзакцій її вирішує. Наприклад, користувач хоче обміняти 100 USDC на ETH, а підписує approve на необмежений ліміт — і втрачає всі кошти. Human-readable система покаже: «Ви дозволяєте контракту 0x... витрачати всі ваші USDC». Без такого захисту користувачі змушені довіряти інтерфейсу наосліп. Ми розробляємо системи human-readable під ключ: від декодування транзакцій до повної семантичної інтерпретації з симуляцією та аналізом ризиків. Якщо ви хочете покращити UX і безпеку вашого гаманця або dApp, зв'яжіться з нами — ми допоможемо впровадити систему human-readable транзакцій.

Перший крок — ABI-декодування: з hex-рядка витягується ім'я функції та її аргументи. Але цього недостатньо для повного розуміння. Потрібна семантична інтерпретація, яка враховує логіку протоколу.

Рівні декодування

ABI декодування

Перший рівень: з 0x38ed1739 отримати swapExactTokensForTokens(uint256,uint256,address[],address,uint256). Це просто — за першими 4 байтами calldata шукаємо в ABI або в базі сигнатур (4byte.directory API, openchain.xyz).

import { decodeFunctionData } from 'viem'; function decodeTransaction(to: string, data: `0x${string}`, knownAbis: Record<string, Abi>) { const abi = knownAbis[to.toLowerCase()]; if (!abi) return null; const { functionName, args } = decodeFunctionData({ abi, data }); return { functionName, args }; } 

Але знання імені функції та аргументів — ще не human-readable. Потрібен другий рівень.

Чому ABI-декодування недостатньо?

Користувач бачить swapExactTokensForTokens і чотири числа — це все ще неочевидно. Які токени? Який курс? Чи є ризик втрати коштів? Без семантичної інтерпретації транзакцій ABI-декодування лише замінює hex на англійські слова, але не дає контексту. Саме тому ми використовуємо інтерпретатори протоколів, які знають, як розшифрувати параметри залежно від адреси контракту.

Семантична інтерпретація human-readable транзакцій

Правило: swapExactTokensForTokens(amountIn, amountOutMin, path, to, deadline) де path = [USDC, WETH] → «Обмін 100 USDC на мінімум 0.032 ETH через Uniswap v2».

interface TransactionDescription { protocol: string; action: string; summary: string; // "Обмін 100 USDC → ETH" details: DetailItem[]; riskFlags: RiskFlag[]; } const uniswapV2Interpreter = { swapExactTokensForTokens: async (args, context): Promise<TransactionDescription> => { const [amountIn, amountOutMin, path, to] = args; const inputToken = await resolveToken(path[0], context.chainId); const outputToken = await resolveToken(path[path.length - 1], context.chainId); return { protocol: 'Uniswap V2', action: 'Swap', summary: `Обмін ${formatAmount(amountIn, inputToken.decimals)} ${inputToken.symbol} → ${outputToken.symbol}`, details: [ { label: 'Мінімум отримати', value: `${formatAmount(amountOutMin, outputToken.decimals)} ${outputToken.symbol}` }, { label: 'Отримувач', value: to === context.from ? 'Ви' : shortenAddress(to) }, { label: 'Маршрут', value: path.map(resolveTokenSymbol).join(' → ') }, ], riskFlags: checkSwapRisks(amountIn, amountOutMin, inputToken, outputToken), }; }, }; 

Які ризики виявляє система?

Human-readable — не лише красивий текст. Система має детектувати потенційно небезпечні транзакції. Нижче — типові ризики та їх вплив на безпеку транзакцій:

Ризик Опис Приклад
Високий slippage amountOutMin / currentPrice < 0.95 «Ви приймаєте slippage > 5%»
Unlimited approve approve(spender, 2^256-1) «Ви даєте необмежені права на ваш USDC адресі 0x...». Показувати ім'я контракту та аудит-статус спендера.
Підозрілий контракт to-адреса не верифікована, низький transaction count Явне попередження без блокування
Drain approval setApprovalForAll(operator, true) для ERC-721/1155 «Ви дозволяєте 0x... керувати ВСІМА вашими NFT з колекції XYZ»
Фішингові патерни Транзакція виглядає як transfer, але calldata містить приховані виклики Simulate-перед-відправкою — єдиний надійний спосіб

Порівняння: система human-readable транзакцій знижує схвалення фішингових транзакцій на 60% порівняно зі стандартним hex-інтерфейсом — це в 2.5 рази ефективніше. Це робить її в 2.5 рази кращою за традиційний підхід з точки зору безпеки транзакцій.

Докладніше про методологію аналізу ризиків блокчейн

Система використовує кілька шарів перевірки: ABI-аналіз, статичний аналіз коду контракту (якщо верифікований), динамічну симуляцію. Це дозволяє детектувати не лише явні ризики, але й приховані виклики через fallback-функції. Для невідомих контрактів ризик позначається як "Невідомий контракт — ретельно перевірте транзакцію".

Transaction simulation

Tenderly та Alchemy надають simulate API: прогнати транзакцію без відправки та отримати всі state changes.

const simulation = await alchemy.transact.simulateExecution({ from: userAddress, to: contractAddress, data: calldata, value: '0x0', }); // simulation.calls — всі internal calls // simulation.logs — всі події, які будуть емітовані // simulation.changes — зміни балансів (ERC-20, NFT) 

З simulation витягуються зміни балансів: «-100 USDC, +0.034 ETH» — це найнадійніший human-readable результат, тому що він показує, що фактично відбудеться, а не що ми думаємо про функцію.

База протоколів DeFi

Для масштабованої системи потрібна база даних протоколів:

interface ProtocolRegistry { [contractAddress: string]: { name: string; logoUrl: string; audited: boolean; interpreter: TransactionInterpreter; } } 

Відкриті реєстри: Etherscan verified contracts API, DeFi Llama protocols list, Coingecko contract database. Доповнювати кастомними записами для специфічних протоколів.

Для невідомих контрактів — fallback на ABI decoding без семантичної інтерпретації, з явним зазначенням «Невідомий контракт».

Інтеграція в UI

Transaction preview modal

До підтвердження транзакції в гаманці — показати preview:

<TransactionPreview summary="Обмін 100 USDC → ETH" protocol={{ name: 'Uniswap V3', logo: '/logos/uniswap.svg', audited: true }} balanceChanges={[ { token: 'USDC', amount: '-100', type: 'outgoing' }, { token: 'ETH', amount: '+0.034 (мін.)', type: 'incoming' }, ]} riskFlags={[]} gasFee={{ eth: '0.002', usd: '4.50' }} /> 

Історія транзакцій

Для кожної минулої транзакції — human-readable опис замість хешу та функції. «3 січня: Обмін 500 USDC → 1.2 ETH на Uniswap V3 (+$45 прибуток)». Вимагає off-chain зберігання декодованих даних — постійно перераховувати дорого.

Як впровадити систему human-readable транзакцій: покрокова інструкція

  1. Аналіз вимог: визначте, які мережі та протоколи потрібно підтримувати, оберіть провайдера RPC.
  2. Інтеграція ABI-декодування: підключіть бібліотеку viem або ethers.js, налаштуйте базу сигнатур.
  3. Розробка інтерпретаторів: напишіть модулі для топ-10 протоколів (Uniswap, Aave, Curve тощо).
  4. Налаштування симуляції: підключіть Alchemy або Tenderly Simulate API.
  5. Додавання риск-флагів: реалізуйте перевірки slippage, unlimited approve, підозрілих контрактів.
  6. Інтеграція в UI: додайте компонент попереднього перегляду транзакції перед підписом.
  7. Тестування та оптимізація: перевірте точність на реальних транзакціях, оновіть базу протоколів.

Що входить в роботу

  • ABI-декодування з підтримкою основних сигнатур (4byte.directory, openchain.xyz)
  • Інтерпретатори для топ-50 протоколів (Uniswap, Curve, Aave, Compound, 1inch та ін.) з можливістю кастомних
  • Transaction simulation через Tenderly або Alchemy
  • Система риск-флагів (slippage, unlimited approve, підозрілі контракти, фішинг)
  • База протоколів з автоматичним оновленням через Etherscan та DeFi Llama
  • Інтеграція з гаманцем (via wagmi/viem або кастомний RPC)
  • UI-компоненти (preview modal, історія)
  • Документація та підтримка під час впровадження

Наші інженери мають 5+ років досвіду в Web3 та реалізували 15+ інтеграцій human-readable систем для гаманців та dApp. Ми гарантуємо сумісність з основними мережами та високу точність симуляції. Замовте проект під ключ, і ми надамо готове рішення з повною підтримкою.

Орієнтири за термінами

Етап Час
Базова система (ABI-декодування + топ-10 протоколів + simulate) 3 дні
Повна система (з риск-флагами, розширеною базою протоколів, історією) 4-5 днів
Інтеграція в існуючий UI 1-2 дні

Зв'яжіться з нами для оцінки вашого проекту — ми проаналізуємо стек та запропонуємо рішення під ключ. Отримайте консультацію щодо впровадження human-readable транзакцій вже сьогодні.