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







