Sui.

Допис

Діліться своїми знаннями.

article banner.
harry phan.
Apr 09, 2025
Стаття

Посібник з транзакцій Sui: від налаштування до виконання та перевірки

Посібник з транзакцій Sui: від налаштування до виконання та перевірки

Якщо вам цікаво про гайки виконання транзакцій на блокчейні Sui і хочете поглиблений практичний посібник, який проведе вас через кожен крок.

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

Давайте розберемо це крок за кроком:

Що робить Суй таким особливим? 🔥

Sui пропонує високооптимізовану платформу для децентралізованих додатків (DApps) та смарт-контрактів. Його елегантний дизайн в управлінні комісіями за газ та логікою транзакцій робить його захоплюючим майданчиком для розробників, які прагнуть розширити межі технології Web3.

№2. Початок роботи: Налаштування середовища та конфігурація гаманця ⚙️

2.1. Налаштування середовища клієнта Sui

Перш ніж зануритися в транзакції, переконайтеся, що ваш клієнт Sui правильно налаштований. Sui підтримує кілька мереж (devnet, mainnet, testnet), і ви можете перевірити, яка з них активна за допомогою команди нижче:

➜ sui client envs
╭─────────┬─────────────────────────────────────┬────────╮
│ alias   │ url                                 │ active │
├─────────┼─────────────────────────────────────┼────────┤
│ devnet  │ https://fullnode.devnet.sui.io:443  │        │
│ mainnet │ https://fullnode.mainnet.sui.io:443 │        │
│ testnet │ https://fullnode.testnet.sui.io:443 │ *      │
╰─────────┴─────────────────────────────────────┴────────╯

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

2.2. Перевірка активного гаманця

Далі перевірте свою активну адресу гаманця. Це має вирішальне значення, оскільки кожна транзакція пов'язана з ідентифікацією вашого гаманця:

➜ sui client active-address
0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73

2.3. Запит на об'єкти, що належать

Використовуючи API Suix_GetOwnEdObjects, ви можете отримати деталі про об'єкти (наприклад, монети), якими ви володієте, на блокчейні. Ця команда допомагає перевірити баланс вашого рахунку та активи, доступні для транзакцій:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "suix_getOwnedObjects",
  "params": [
      "0x35370841d2e69b495b1e2f944a3087e4242f314e503691a00b054e0ee2a45a73",
      {
          "filter": {
              "MatchAll": [
                  {
                      "StructType": "0x2::coin::Coin<0x2::sui::SUI>"
                  }
              ]
          },
          "options": {
              "showType": true,
              "showOwner": true,
              "showPreviousTransaction": true
          }
      }
  ]
}

Цей крок є життєво важливим для перевірки того, що у вашому гаманці є необхідні монети (в даному випадку монети SUI), перш ніж робити будь-які транзакції.

№3. Розрахунок газу: Бюджетування транзакційних витрат 💸

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

3.1. Підвищення ціни на газ

Поточну ціну газу можна отримати за допомогою виклику API SUIX_getReferenceGasPrice:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "suix_getReferenceGasPrice",
  "params": []
}

Якщо API повертає «1000", це означає, що кожна одиниця газу коштує 1000 MIST. Пам'ятайте, що 1 SUI дорівнює 10 ^ 9 MIST, тому навіть невеликі цифри в MIST можуть скластися під час складання бюджету.

3.2. Встановлення бюджету на газ

Ваш бюджет газу - це максимальна кількість газу (у MIST), яку ви готові витратити. Для нашого прикладу, припустимо, ваш бюджет газу становить 4964000 MIST. Загальна вартість транзакції зазвичай обчислюється як:

Загальна вартість = Вартість обчислення+вартість зберігання - знижка на зберігання

Наприклад: • Вартість обчислення: 1 000 000 MIST • Вартість зберігання: 2,964,000 MIST • Знижка на зберігання: 978,120 MIST

Отже, чиста вартість стає 1 000 000 + 2 964 000 - 978 120 = 2 985 880 МІСТ.

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

№4. Створення транзакції: сухий біг для впевненості 🔧

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

4.1. Побудова транзакції сухого запуску

Ось зразок функції TypeScript, яка демонструє, як підготувати та виконати транзакцію сухого запуску. У цьому коді описано, як розділити монети та підготувати операції з переказу:

export const signSuiDryRunTransaction = async (requestParams: SignDryRequestParams): Promise<string> => {
  const { gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
  const keypair = Ed25519Keypair.fromSecretKey(privateKey);
  const tx = newTransaction();

  // Configure gas payment, price, and sender
  tx.setGasPayment(coinRefs);
  tx.setGasPrice(gasPrice);
  tx.setSender(keypair.toSuiAddress());

  // Split coins based on each recipient's amount
  const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
  recipients.forEach((transfer, index) => {
    tx.transferObjects([coins[index]], transfer.to);
  });

  // Build and sign the transaction with the client
  const client = newSuiClient({ url: getFullnodeUrl(network) });
  const bytes = await tx.build({ client });
  const { signature } = await keypair.signTransaction(bytes);
  await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });

  return JSON.stringify([toBase64(bytes), signature]);
};

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

№5. Підписання та виконання транзакції: об'єднання всього ✍️

Після успішного сухого запуску наступним кроком є підписання та відправка транзакції на блокчейні.

5.1. Підписання транзакції

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

const signSuiTransaction = async (requestParams: SignRequestParams): Promise<string> => {
  const { gasBudget, gasPrice, privateKey, coinRefs, network, recipients } = requestParams;
  const keypair = Ed25519Keypair.fromSecretKey(privateKey);
  const tx = newTransaction();

  // Set up gas parameters, including the gas budget
  tx.setGasPayment(coinRefs);
  tx.setGasPrice(gasPrice);
  tx.setGasBudget(gasBudget);
  tx.setSender(keypair.toSuiAddress());

  // Split coins for each recipient
  const coins = tx.splitCoins(tx.gas, recipients.map((transfer) => transfer.amount));
  recipients.forEach((transfer, index) => {
    tx.transferObjects([coins[index]], transfer.to);
  });

  // Build the transaction and sign it
  const client = newSuiClient({ url: getFullnodeUrl(network) });
  const bytes = await tx.build({ client });
  const { signature } = await keypair.signTransaction(bytes);
  await verifyTransactionSignature(bytes, signature, { address: keypair.getPublicKey().toSuiAddress() });

  return JSON.stringify([toBase64(bytes), signature]);
};

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

5.2. Виконання транзакції

Після підписання транзакція надсилається в блокчейн за допомогою кінцевої точки API SUI_ExecuteTransactionBlock:

curl --location 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sui_executeTransactionBlock",
  "params": [
    "<base64-encoded-transaction>",
    ["<signature>"],
    {
      "showInput": true,
      "showRawInput": true,
      "showEffects": true,
      "showEvents": true,
      "showObjectChanges": true,
      "showBalanceChanges": true
    },
    "WaitForLocalExecution"
  ]
}'

Цей виклик повертає детальну відповідь JSON з такою інформацією, як дайджест транзакцій, споживання газу, модифікації об'єктів та оновлення балансу.

№6. Перевірка вашої транзакції: Перевірте все 🔍

Після виконання транзакції важливо переконатися, що все виконано, як очікувалося.

6.1. Перевірка браузера

Ви можете перевірити свою транзакцію на блокчейн-провіднику, наприклад Suivision Testnet Explorer. Провідник відображає всі деталі транзакції в інтуїтивно зрозумілому візуальному форматі, що полегшує виявлення будь-яких проблем.

6.2. Перевірка командного рядка

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

sui client tx-block -- 3FopuDy5qzKm1kLRFZCdi8Lynadym9j15NaVxzUH6nYD

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

№7. Аналіз відповіді JSON: розуміння шарів транзакції

Давайте розпакуємо відповідь JSON, яку ви отримаєте після виконання транзакції:

7.1. Огляд транзакцій

  • jsonrpc & id: Стандартні поля для протоколу JSON-RPC.
  • дайджест: Унікальний хеш транзакції (наприклад, «3fOPudy5qzkm1klrfzcdi8lynadym9j15navxzuH6nyd»), який використовується для відстеження.
  • TimeStamps & checkpoint: Надайте контекст щодо того, коли транзакція була виконана, та контрольну точку блокчейну в цей момент.

7.2. Зміст транзакції

  • Дані відправника та газу: включає адресу відправника та всі конфігурації, пов'язані з газом (оплата, ціна, бюджет).
  • Операції (транзакції): Логіка транзакцій включає такі операції, як:
  • SplitCoins: Розбивання газової монети на менші частини.
  • TransferObjects: переміщення сегментів монет на вказані адреси одержувачів.
  • Підписи: Криптографічні підписи (кодовані Base64) забезпечують автентичність транзакції.

7.3. Ефекти виконання

  • Статус: статус «успіх» підтверджує, що транзакція була оброблена без помилок.
  • Використання газу: Детально описує витрати на обчислення та зберігання разом із будь-якими відповідними знижками.
  • Зміни об'єктів: Визначає, які об'єкти були змінені, створені або оновлені в результаті транзакції.
  • Залежності: перераховує пов'язані хеші транзакцій, від яких залежить ця транзакція.

Ця детальна розбивка має важливе значення для налагодження та підвищення продуктивності DApp.

№8. Практична інформація для розробників: поради та висновки

Розуміння кожного кроку цього процесу дає вам навички створення безпечних, ефективних програм Web3 на Sui. Ці відомості не тільки допомагають вирішити проблеми, але й дають вам змогу впевнено впроваджувати інновації в екосистемі Sui.

  • Sui
  • SDKs and Developer Tools
  • Transaction Processing
3
Поділитися
Коментарі
.
Ми використовуємо файли cookie, щоб гарантувати вам найкращий досвід на нашому сайті.
Детальніше