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

Надсилання транзакцій за допомогою Web3

транзакції
web3.js
Alchemy
Для початківців
Елан Гальперн
4 листопада 2020 р.
9 хвилин на читання
Редагувати сторінку (opens in a new tab)

Це посібник для початківців щодо надсилання транзакцій Етеріуму за допомогою Web3. Щоб надіслати транзакцію до блокчейну Етеріуму, потрібно виконати три основні кроки: створити, підписати та транслювати. Ми розглянемо всі три, і сподіваємося, що відповімо на будь-які ваші запитання! У цьому посібнику ми будемо використовувати Alchemy (opens in a new tab) для надсилання наших транзакцій до ланцюга Етеріуму. Ви можете створити безкоштовний акаунт Alchemy тут (opens in a new tab).

ПРИМІТКА: Цей посібник призначений для підписання транзакцій на бекенді вашого застосунку. Якщо ви хочете інтегрувати підписання транзакцій на фронтенді, перегляньте статтю про інтеграцію Web3 з браузерним провайдером (opens in a new tab).

Основи

Як і більшість розробників блокчейну на початку свого шляху, ви, можливо, шукали інформацію про те, як надіслати транзакцію (щось, що має бути досить простим), і натрапили на безліч посібників, кожен з яких говорить різні речі, залишаючи вас трохи спантеличеними та розгубленими. Якщо ви опинилися в такій ситуації, не хвилюйтеся; ми всі колись там були! Отже, перш ніж ми почнемо, давайте з'ясуємо кілька речей:

1. Alchemy не зберігає ваші приватні ключі

  • Це означає, що Alchemy не може підписувати та надсилати транзакції від вашого імені. Причиною цього є міркування безпеки. Alchemy ніколи не попросить вас поділитися своїм приватним ключем, і ви ніколи не повинні ділитися своїм приватним ключем з розміщеним вузлом (або з будь-ким іншим).
  • Ви можете зчитувати дані з блокчейну за допомогою основного API Alchemy, але щоб записувати в нього, вам знадобиться щось інше для підписання транзакцій перед їх надсиланням через Alchemy (це стосується будь-якого іншого сервісу вузлів).

2. Що таке «підписувач» (signer)?

  • Підписувачі підписуватимуть транзакції для вас, використовуючи ваш приватний ключ. У цьому посібнику ми будемо використовувати Alchemy Web3 (opens in a new tab) для підписання нашої транзакції, але ви також можете використовувати будь-яку іншу бібліотеку Web3.
  • На фронтенді хорошим прикладом підписувача є МетаМаск (opens in a new tab), який підписуватиме та надсилатиме транзакції від вашого імені.

3. Навіщо мені підписувати свої транзакції?

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

4. Як мені захистити свій приватний ключ?

  • Існує багато способів захистити свій приватний ключ і використовувати його для надсилання транзакцій. У цьому посібнику ми будемо використовувати файл .env. Однак ви також можете використовувати окремого провайдера, який зберігає приватні ключі, використовувати файл сховища ключів або інші варіанти.

5. Яка різниця між eth_sendTransaction та eth_sendRawTransaction?

eth_sendTransaction та eth_sendRawTransaction — це функції API Етеріуму, які транслюють транзакцію в мережу Етеріум, щоб її було додано до майбутнього блоку. Вони відрізняються тим, як обробляють підписання транзакцій.

  • eth_sendTransaction (opens in a new tab) використовується для надсилання непідписаних транзакцій, що означає, що вузол, на який ви надсилаєте, повинен керувати вашим приватним ключем, щоб він міг підписати транзакцію перед її трансляцією в ланцюг. Оскільки Alchemy не зберігає приватні ключі користувачів, вони не підтримують цей метод.
  • eth_sendRawTransaction (opens in a new tab) використовується для трансляції транзакцій, які вже були підписані. Це означає, що спочатку вам потрібно використати signTransaction(tx, private_key) (opens in a new tab), а потім передати результат у eth_sendRawTransaction.

При використанні Web3 доступ до eth_sendRawTransaction здійснюється шляхом виклику функції web3.eth.sendSignedTransaction (opens in a new tab).

Саме це ми будемо використовувати в цьому посібнику.

6. Що таке бібліотека Web3?

  • Web3.js — це бібліотека-обгортка навколо стандартних викликів JSON-RPC, яку досить часто використовують у розробці для Етеріуму.
  • Існує багато бібліотек Web3 для різних мов. У цьому посібнику ми будемо використовувати Alchemy Web3 (opens in a new tab), яка написана на JavaScript. Ви можете переглянути інші варіанти тут (opens in a new tab), наприклад Ethers.js (opens in a new tab).

Гаразд, тепер, коли ми розібралися з деякими з цих питань, давайте перейдемо до посібника. Не соромтеся ставити запитання в будь-який час у Discord (opens in a new tab) Alchemy!

7. Як надсилати безпечні, оптимізовані за газом та приватні транзакції?

  • Alchemy має набір API для транзакцій (Transact APIs) (opens in a new tab). Ви можете використовувати їх для надсилання посилених транзакцій, симуляції транзакцій до їх виконання, надсилання приватних транзакцій та транзакцій, оптимізованих за газом.
  • Ви також можете використовувати Notify API (opens in a new tab), щоб отримувати сповіщення, коли ваша транзакція вилучається з мемпулу та додається до ланцюга.

ПРИМІТКА: Для цього посібника потрібен акаунт Alchemy, адреса Етеріуму або гаманець МетаМаск, а також встановлені Node.js та npm. Якщо у вас їх немає, виконайте такі кроки:

  1. Створіть безкоштовний акаунт Alchemy (opens in a new tab)
  2. Створіть акаунт МетаМаск (opens in a new tab) (або отримайте адресу Етеріуму)
  3. Виконайте ці кроки, щоб встановити Node.js та npm (opens in a new tab)

Кроки для надсилання вашої транзакції

1. Створіть застосунок Alchemy в тестовій мережі Sepolia

Перейдіть до вашої панелі керування Alchemy (opens in a new tab) та створіть новий застосунок, вибравши Sepolia (або будь-яку іншу тестову мережу) як вашу мережу.

2. Запросіть ETH з крана Sepolia

Дотримуйтесь інструкцій на крані Sepolia від Alchemy (opens in a new tab), щоб отримати ETH. Переконайтеся, що ви вказали свою адресу Етеріуму в мережі Sepolia (з МетаМаск), а не в іншій мережі. Після виконання інструкцій ще раз перевірте, чи отримали ви ETH на свій гаманець.

3. Створіть нову директорію проєкту та перейдіть до неї за допомогою cd

Створіть нову директорію проєкту з командного рядка (терміналу для Mac) і перейдіть до неї:

mkdir sendtx-example
cd sendtx-example

4. Встановіть Alchemy Web3 (або будь-яку бібліотеку Web3)

Виконайте наступну команду у директорії вашого проєкту, щоб встановити Alchemy Web3 (opens in a new tab):

Зверніть увагу, якщо ви хочете використовувати бібліотеку Ethers.js, дотримуйтесь інструкцій тут (opens in a new tab).

npm install @alch/alchemy-web3

5. Встановіть dotenv

Ми будемо використовувати файл .env для безпечного зберігання нашого ключа API та приватного ключа.

npm install dotenv --save

6. Створіть файл .env

Створіть файл .env у директорії вашого проєкту та додайте наступне (замінивши «your-api-url» та «your-private-key»):

  • Щоб знайти URL-адресу вашого API Alchemy, перейдіть на сторінку деталей щойно створеного застосунку на вашій панелі керування, натисніть «View Key» (Переглянути ключ) у верхньому правому куті та скопіюйте HTTP URL.
  • Щоб знайти свій приватний ключ за допомогою МетаМаск, перегляньте цей посібник (opens in a new tab).
API_URL = "ваш-api-url"
PRIVATE_KEY = "ваш-приватний-ключ"
Не робіть коміт файлу .env! Будь ласка, ніколи не діліться і не розкривайте свій файл .env нікому, оскільки цим ви ставите під загрозу свої секретні дані. Якщо ви використовуєте систему контролю версій, додайте свій .env до файлу gitignore.

7. Створіть файл sendTx.js

Чудово, тепер, коли наші конфіденційні дані захищені у файлі .env, давайте почнемо писати код. Для нашого прикладу надсилання транзакції ми будемо надсилати ETH назад на кран Sepolia.

Створіть файл sendTx.js, де ми налаштуємо та надішлемо нашу тестову транзакцію, і додайте до нього такі рядки коду:

Обов'язково замініть адресу в рядку 6 на власну публічну адресу.

Тепер, перш ніж ми перейдемо до запуску цього коду, давайте поговоримо про деякі його компоненти.

  • nonce: Специфікація нонсу використовується для відстеження кількості транзакцій, надісланих з вашої адреси. Це потрібно з міркувань безпеки та для запобігання атакам повторного відтворення (opens in a new tab). Щоб отримати кількість транзакцій, надісланих з вашої адреси, ми використовуємо getTransactionCount (opens in a new tab).
  • transaction: Об'єкт транзакції має кілька аспектів, які нам потрібно вказати:
    • to: Це адреса, на яку ми хочемо надіслати ETH. У цьому випадку ми надсилаємо ETH назад на кран Sepolia (opens in a new tab), з якого ми їх спочатку запитували.
    • value: Це сума, яку ми хочемо надіслати, вказана у Wei, де 10^18 Wei = 1 ETH.
    • gas: Існує багато способів визначити правильну кількість газу для вашої транзакції. Alchemy навіть має вебхук ціни газу (opens in a new tab), який сповіщає вас, коли ціна газу падає до певного порогу. Для транзакцій у Головній мережі хорошою практикою є перевірка оцінювача газу, такого як ETH Gas Station (opens in a new tab), щоб визначити правильну кількість газу. 21000 — це мінімальна кількість газу, яку використовуватиме операція в Етеріумі, тому, щоб гарантувати виконання нашої транзакції, ми вказуємо тут 30000.
    • nonce: див. визначення нонсу вище. Нонс починає відлік з нуля.
    • [НЕОБОВ'ЯЗКОВО] data: Використовується для надсилання додаткової інформації разом із вашим переказом або для виклику смарт-контракту; не вимагається для переказів балансу, перегляньте примітку нижче.
  • signedTx: Щоб підписати наш об'єкт транзакції, ми використаємо метод signTransaction з нашим PRIVATE_KEY.
  • sendSignedTransaction: Щойно ми отримаємо підписану транзакцію, ми можемо надіслати її для включення до наступного блоку за допомогою sendSignedTransaction.

Примітка щодо даних (data) В Етеріумі можна надсилати два основні типи транзакцій.

  • Переказ балансу: Надсилання ETH з однієї адреси на іншу. Поле даних не вимагається, однак, якщо ви хочете надіслати додаткову інформацію разом із транзакцією, ви можете включити цю інформацію у форматі HEX у це поле.
    • Наприклад, припустимо, ми хочемо записати хеш документа IPFS у ланцюг Етеріуму, щоб надати йому незмінну мітку часу. Тоді наше поле даних має виглядати так: data: web3.utils.toHex(‘IPFS hash‘). І тепер будь-хто може зробити запит до ланцюга і побачити, коли цей документ було додано.
  • Транзакція смарт-контракту: Виконання певного коду смарт-контракту в ланцюзі. У цьому випадку поле даних має містити смарт-функцію, яку ви хочете виконати, разом із будь-якими параметрами.

8. Запустіть код за допомогою node sendTx.js

Поверніться до свого терміналу або командного рядка та виконайте:

node sendTx.js

9. Перегляньте свою транзакцію в мемпулі

Відкрийте сторінку мемпулу (opens in a new tab) на вашій панелі керування Alchemy та відфільтруйте за створеним вами застосунком, щоб знайти свою транзакцію. Саме тут ми можемо спостерігати за переходом нашої транзакції зі стану очікування (pending) до стану видобутку (mined), якщо вона успішна, або до стану відхилення (dropped), якщо вона неуспішна. Переконайтеся, що вибрано «All» (Усі), щоб ви могли бачити «видобуті», «очікуючі» та «відхилені» транзакції. Ви також можете знайти свою транзакцію, шукаючи транзакції, надіслані на адресу 0x31b98d14007bdee637298086988a0bbd31184523.

Щоб переглянути деталі вашої транзакції після того, як ви її знайшли, виберіть хеш транзакції, що має перенаправити вас до вигляду, схожого на цей:

Mempool watcher screenshot

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

Ура! Ви щойно надіслали свою першу транзакцію Етеріуму за допомогою Alchemy 🎉

Для відгуків та пропозицій щодо цього посібника, будь ласка, напишіть Елану в Discord (opens in a new tab) Alchemy!

Вперше опубліковано на https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab)

Останнє оновлення сторінки: 3 березня 2026 р.