Sui.

Пост

Поделитесь своими знаниями.

article banner.
Owen.
Owen486
Jun 30, 2025
Статья

Распространенные ошибки Sui Blockchain: блокировка объектов и ограничения скорости кранов

При разработке или тестировании приложений на блокчейне Sui разработчики часто сталкиваются с двумя распространенными проблемами:

1.Ошибки блокировки объектовво время выполнения транзакции 2.Запросы кранов с ограниченной ставкойпри попытке получить тестовые токены

В этой статье подробно описываются обе проблемы и предлагаются действенные решения, которые помогут вам избежать проблем во время разработки.


1. Ошибка: объекты зарезервированы для другой транзакции

🔍 Что это значит

Вы можете столкнуться с такой ошибкой:

JsonRpcError: Failed to sign transaction by a quorum of validators because one or more of its objects is reserved for another transaction.

Это означает, что один или несколько объектов (например, газовых монет или предметов общего пользования), участвующих в транзакции, в настоящее время заблокированы ранее отправленной транзакцией, даже если она еще не завершена.

Sui используетоптимистичное управление параллелизмом, которое блокирует объекты до завершения транзакции или истечения срока ее действия (~30—60 секунд). Если несколько транзакций попытаются использовать один и тот же объект до завершения обработки, они не смогут выполнить эту ошибку.


Как проверить, доступен ли объект

Используйте sui_getObjectметод RPC для проверки состояния объекта:

curl --location --request POST 'https://fullnode.testnet.sui.io:443' \
--header 'Content-Type: application/json' \
--data-raw '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sui_getObject",
  "params": ["<object_id>"]
}'

Если ответ содержит "status": "Locked"или"owner": "locked", подождите, прежде чем снова использовать объект.


Рекомендации по предотвращению проблем с блокировкой объектов

1.Дождитесь завершения, прежде чем отправлять новые транзакции

waitForTransactionИспользуйте из SDK:

  import { JsonRpcProvider } from '@mysten/sui.js';

  const provider = new JsonRpcProvider('https://fullnode.testnet.sui.io:443');
  await provider.waitForTransaction('<tx_digest>');

2.Используйте несколько газовых монет

Чтобы избежать ссор, разделите свою газовую монету:

  sui client split-coin --coin-id <gas_coin_id> --amounts <amt1> <amt2>

Затем используйте разные газовые монеты для каждой транзакции.

3.Повторите попытку с экспоненциальным прерыванием

При возникновении ошибок блокировки повторите попытку после увеличения задержки (например, 1 с, 2 с, 4 с).

4.Мониторинг через Explorer

Используйте Sui Explorer для отслеживания статуса блокирующей транзакции с помощью дайджеста.


2. Ошибка: 429 Слишком много запросов — ограничение скорости кранов

Что это значит

При запросе тестовых токенов из крана Sui вы можете увидеть следующее:

API Error: 429 POST /v2/gas - “429 Too Many Requests”

Это означает, что вы превысили лимит скорости — обычно из-за слишком большого количества запросов с одного и того же IP-адреса или учетной записи в течение 24 часов.


Решения

Попробуйте альтернативные смесители

Официальный faucet (faucet.testnet.sui.io) имеет строгие ограничения. Вы можете попробовать альтернативные сервисы:

Эти краны часто имеют более мягкую политику или отдельные ограничения по тарифам.

Повторное использование тестовых учетных записей

Вместо того чтобы каждый раз создавать новые учетные записи, повторно используйте существующие, чтобы сократить количество запросов на краны.

Запустите локальную тестовую сеть

Для интенсивной разработки и тестирования рассмотрите возможность запуска собственной локальной сети Sui:

sui start --local-rpc-address

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

  • Sui
  • Transaction Processing
5
Поделиться
Комментарии
.