Sui.

Пост

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

Награда+15

Xavier.eth.
Jun 27, 2025
Экспертные Вопросы и Ответы

Сбой транзакции Sui: объекты, зарезервированные для другой транзакции

JsonRpcErrorПри попытке выполнить транзакции на Sui возникает постоянная ошибка. Ошибка означает, что объекты зарезервированы для другой транзакции, несмотря на то, что я реализовал последовательную обработку транзакций с задержками.

JsonRpcError: Failed to sign transaction by a quorum of validators because one or more of its objects is reserved for another transaction. Other transactions locking these objects:
- AV7coSQHWg5vN3S47xada6UiZGW54xxUNhRv1QUPqWK (stake 33.83)
    - 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9
    - 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9
    - 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9

Я попробовал:

  • Последовательное выполнение транзакции (ожидание завершения предыдущей транзакции)
  • Добавлены 3-секундные задержки между транзакциями

И все еще постоянно возникает одна и та же ошибка.

Использование Sui RPC для отправки транзакций. Один и тот же идентификатор объекта несколько раз появляется в списке блокировок. Ошибка возникает даже при тщательном определении последовательности транзакций.

  1. Почему объекты «зарезервированы» для других транзакций?
  2. Как правильно проверить, доступен ли объект, прежде чем использовать его в транзакции?
  3. Существуют ли передовые методы работы с замками объектов в Sui?
  4. Может ли это быть связано со сроками завершения транзакции?

Кто-нибудь сталкивался с этой проблемой раньше? Мы будем очень признательны за любую информацию о правильном управлении объектами в транзакциях Sui!

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

Ответы

4
Owen.
Owen496
Jun 30 2025, 11:03

Sui используетоптимистичное управление параллелизмом, то есть объекты блокируются при использовании в транзакции до завершения транзакции или истечения срока ее действия.

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


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

Используйте метод Sui RPC:

sui_getObject

Проверьте ответ на вопрос "status": "Locked"или"owner": "locked".

Пример запроса:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sui_getObject",
  "params": ["0x...object_id..."]
}

Если заблокировано, подождите еще раз и повторите попытку позже.

4
Комментарии
.
0xduckmove.
Jun 30 2025, 07:04

Эй, вы пытаетесь выполнить транзакцию слишком быстро, и объекты заблокированы.

Попробуйте отправлять по одной транзакции с одними и теми же объектами за раз. Если вы отправите две транзакции, некоторые валидаторы могут принять первую транзакцию, другие могут принять вторую, а ваши объекты будут заблокированы, так как для каждой транзакции требуется 66,7% валидаторов, а вы, возможно, получаете только 50%.

=> просто дождитесь перезагрузки эпохи, скоро

Узнайте больше: https://forums.sui.io/t/beginner-tutorial-error-when-deploying-simple-sui-package/44842

3
Комментарии
.
MiniBob.
Jun 30 2025, 11:50

Ошибка означает, что объекты, используемые в транзакции, по-прежнему заблокированы предыдущими транзакциями, которые еще не завершены. Даже несмотря на задержки, объекты остаются зарезервированными до завершения транзакций в блокчейне.

Для исправления:

  1. Всегда проверяйте, что предыдущие транзакции с объектами полностью завершены, прежде чем использовать их снова.
  2. Проверьте состояние объектов с помощью Sui RPC, чтобы убедиться, что они разблокированы.
  3. Избегайте параллельной или быстрой отправки транзакций по одним и тем же объектам.
  4. Вместо фиксированных задержек применяйте повторные попытки с проверкой сроков выполнения заказа и выполнения заказа.

Такая блокировка предотвращает появление конфликтующих обновлений и является обычным явлением в объектной модели Sui. JsonRpcErrorПравильная последовательность действий и подтверждение окончательности — ключ к тому, чтобы избежать ошибок.

3
Комментарии
.
harry phan.
Jun 30 2025, 15:00

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

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

В конце эпохи (они длятся примерно один день — вы можете следить за переходом к следующей эпохе на сайте https://suiexplorer.com) все блокировки снимаются, поэтому вы можете снова использовать объекты, но если вы не меняли эпоху с момента последней попытки, вам нужно будет купить больше газа.

3
Комментарии
.

Знаете ответ?

Пожалуйста, войдите в систему и поделитесь им.