Перейти до основного вмісту
Change page

Взаємодія зі смарт-контрактами

Вам не завжди потрібно писати та розгортати власний смарт-контракт. Здебільшого, як розробник, ви захочете взаємодіяти зі смарт-контрактами, які інші вже розгорнули в мережі Етеріум.

На цій сторінці розглядаються два основні способи взаємодії зі смарт-контрактом — зчитування даних і запис даних — а також інструменти, необхідні для обох дій.

Передумови

Ви повинні розуміти:

Два способи взаємодії зі смарт-контрактом

Взаємодія зі смарт-контрактом поділяється на дві категорії:

Зчитування з контракту

Зчитування — це безкоштовна операція, яка не створює транзакцію і не змінює жодного стану в блокчейні.

Коли ви зчитуєте дані з контракту, ви просто запитуєте дані, які вже існують. Наприклад:

  • Перевірка балансу токенів ERC-20
  • Зчитування поточної ціни з децентралізованої біржі
  • Отримання власника NFT

Оскільки зчитування не змінює стан, воно не потребує витрат на газ і може бути виконане будь-ким без необхідності мати ETH.

Запис у контракт

Запис — це операція, що змінює стан, яка вимагає транзакції та витрат на газ.

Коли ви записуєте дані в контракт, ви викликаєте функцію, яка змінює стан блокчейну. Наприклад:

  • Переказ токенів
  • Обмін токенів на децентралізованій біржі
  • Карбування NFT

Запис завжди вимагає:

  1. Зовнішній акаунт (EOA) з достатньою кількістю ETH для оплати газу
  2. Транзакцію, підписану приватним ключем акаунта
  3. Щоб транзакція була видобута та включена в блок

Завдяки абстракції облікового запису, акаунт смарт-контракту також може ініціювати запис, а пеймайстер може покрити витрати на газ від імені користувача — тому EOA з ETH не є суворо обов'язковим.

Розуміння ABI контракту

Щоб взаємодіяти зі смарт-контрактом, ваш застосунок повинен знати, що контракт може робити. Саме тут на допомогу приходить двійковий інтерфейс застосунку (ABI).

ABI — це JSON-документ, який описує:

  • Кожну функцію, яку надає контракт (ім'я, вхідні та вихідні дані)
  • Кожну подію, яку контракт може генерувати
  • Як кодувати та декодувати дані під час взаємодії з контрактом

Уявіть ABI як інструкцію до контракту — без неї ваш застосунок не знатиме, які функції існують або які параметри вони очікують.

Де знайти ABI контракту

  • Верифіковані контракти на EtherscanEtherscan (відкривається в новій вкладці) автоматично надає ABI для верифікованого вихідного коду
  • Від розробника — багато проєктів публікують свої ABI у документації або npm-пакетах
  • Згенерувати з вихідного коду — якщо у вас є вихідний код Solidity, ви можете скомпілювати його, щоб отримати ABI

Інструменти та бібліотеки для взаємодії з контрактами

Розробники зазвичай використовують бібліотеку JavaScript/TypeScript для взаємодії з контрактами з вебзастосунку, бекенду або скрипту.

Клієнтські бібліотеки (JavaScript/TypeScript)

Бекенд-бібліотеки

Приклад: зчитування балансу токенів за допомогою Viem

Приклад: надсилання транзакції за допомогою Ethers.js

Події та журнали

Смарт-контракти можуть генерувати події, щоб сигналізувати про те, що щось сталося. Ваш застосунок може прослуховувати ці події, щоб реагувати в режимі реального часу.

Симуляція транзакцій

Перед надсиланням транзакції ви можете симулювати її, щоб перевірити, чи буде вона успішною, і побачити її значення, що повертається, без витрат на газ. Це корисно для раннього виявлення помилок і попереднього перегляду результатів.

Більшість клієнтських бібліотек підтримують це через eth_call:

// З Viem
const result = await client.simulateContract({
  address: contractAddress,
  abi,
  functionName: 'swap',
  args: [amountIn],
  account: userAddress,
})

Гаманці та підписання

У децентралізованому застосунку (dapp) гаманець користувача (наприклад, МетаМаск, Rainbow або WalletConnect) обробляє підписання. Ви не керуєте приватними ключами безпосередньо.

Бібліотеки гаманців та інструменти підключення абстрагують це, щоб ви могли зосередитися на створенні логіки вашого застосунку.

Додаткові матеріали