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 │ *      │
╰─────────┴─────────────────────────────────────┴────────╯

Это подтверждает, что вы подключены к тестовой сети. Подключение к правильной сети — это первый шаг к успешной транзакции.

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 MIST.

Четкое определение бюджета на газ гарантирует, что на транзакцию будет достаточно средств для успешного выполнения.

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»), который используется для отслеживания.
  • TimestampMS и контрольная точка: укажите контекст того, когда транзакция была выполнена, и контрольную точку блокчейна в данный момент.

7.2. Содержимое транзакции

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

7.3. Эффекты выполнения

  • Статус: статус «успешный» подтверждает, что транзакция была обработана без ошибок.
  • Использование газа: подробная информация о вычислительных затратах и расходах на хранение, а также о применимых скидках.
  • Изменения объектов: описание объектов, которые были изменены, созданы или обновлены в результате транзакции.
  • Зависимости: список связанных хэшей транзакций, от которых зависит эта транзакция.

Эта детальная разбивка необходима для отладки и повышения производительности вашего dApp.

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

Понимая каждый этап этого процесса, вы приобретете навыки создания безопасных и эффективных приложений Web3 на Sui. Эти сведения не только помогают устранять неполадки, но и позволяют уверенно внедрять инновации в экосистеме Sui.

  • Sui
  • SDKs and Developer Tools
  • Transaction Processing
3
Поделиться
Комментарии
.
Мы используем файлы cookie, чтобы гарантировать вам лучший опыт на нашем сайте.
Подробнее