Визначення
ABI-кодування — це механізм, який перетворює зрозумілі людині сигнатури функцій і структуровані дані в низькорівневе бінарне подання, визначене Application Binary Interface (ABI). Воно точно задає, як аргументи, значення, що повертаються, і складні типи даних розміщуються в байтах, щоб smart contracts і зовнішні виклики інтерпретували їх однаково. Дотримуючись правил ABI, різні інструменти, wallets та застосунки можуть взаємодіяти з одним і тим самим контрактом без неоднозначностей у форматуванні даних.
Таке кодування є ключовим для викликів контрактів, логів подій та форматів зберігання даних на багатьох платформах smart contracts. Воно гарантує, що коли функцію викликають, контракт отримує її параметри в передбачуваному порядку та розмірі, а повернені значення коректно декодуються. Без ABI-кодування on-chain та off-chain компоненти не мали б спільної «мови» для обміну структурованими даними зі smart contracts.
Контекст і використання
ABI-кодування зазвичай визначається разом зі специфікацією ABI, яка перелічує функції, події та типи даних, що надаються smart contract. Коли транзакція спрямована на функцію контракту, поле call data формується за допомогою ABI-кодування, щоб контракт міг ідентифікувати функцію та розібрати її вхідні дані. Ті самі правила застосовуються під час декодування логів подій або інтерпретації даних, повернутих у результаті виконання контракту.
На практиці ABI-кодування виступає bridge між мовами програмування високого рівня та низькорівневою віртуальною машиною, яка виконує smart contracts. Воно дозволяє on-chain логіці та off-chain застосункам використовувати спільний, детермінований формат даних, зменшуючи кількість помилок, спричинених невідповідністю типів або порядку. Цей термін тісно пов’язаний із самим ABI, яке визначає схему, якої має дотримуватися механізм кодування.