Sui.

Beitrag

Teile dein Wissen.

Prämie+15

Xavier.eth.
Jun 27, 2025
Experten Q&A

Sui-Transaktion schlägt fehl: Objekte sind für eine andere Transaktion reserviert

JsonRpcErrorBeim Versuch, Transaktionen auf Sui auszuführen, stoße ich auf eine persistente Störung. Der Fehler weist darauf hin, dass Objekte für eine andere Transaktion reserviert sind, obwohl ich eine sequentielle Transaktionsverarbeitung mit Verzögerungen implementiert habe.

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

Ich habe versucht:

  • Sequentielle Transaktionsausführung (Warten auf den Abschluss der vorherigen Transaktion)
  • Es wurden Verzögerungen von 3 Sekunden zwischen Transaktionen hinzugefügt

Und immer noch der gleiche Fehler.

Verwendung von Sui RPC für die Übermittlung von Transaktionen. Dieselbe Objekt-ID erscheint mehrfach in der Sperrliste. Selbst bei sorgfältiger Transaktionssequenzierung tritt ein Fehler auf.

  1. Was bewirkt, dass Objekte für andere Transaktionen „reserviert“ werden?
  2. Wie kann ich richtig überprüfen, ob ein Objekt verfügbar ist, bevor ich es in einer Transaktion verwende?
  3. Gibt es bewährte Methoden für den Umgang mit Objektsperren in Sui?
  4. Könnte das mit dem Zeitpunkt der Finalität der Transaktion zusammenhängen?

Ist jemand schon einmal auf dieses Problem gestoßen? Alle Einblicke in das richtige Objektmanagement bei Sui-Transaktionen wären sehr willkommen!

  • Sui
  • Transaction Processing
  • Move
2
4
Teilen
Kommentare
.

Antworten

4
Owen.
Owen496
Jun 30 2025, 11:03

Sui verwendetOptimistic Concurrency Control, was bedeutet, dass Objekte gesperrt werden, wenn sie in einer Transaktion verwendet werden, bis diese Transaktion abgeschlossen ist oder abläuft.

Selbst wenn Sie zwischen den Transaktionen 3 Sekunden warten, bleibt das Objekt gesperrt, wenn die vorherige noch nicht abgeschlossen wurde. Das bedeutet, dass die Transaktion immer noch aussteht und exklusiven Zugriff auf das Objekt hat.


So überprüfen Sie, ob ein Objekt verfügbar ist

Verwenden Sie die Sui RPC-Methode:

sui_getObject

Überprüfen Sie die Antwort auf "status": "Locked"oder"owner": "locked".

Beispiel für eine Anfrage:

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

Wenn gesperrt, warten Sie einfach länger und versuchen Sie es später erneut.

4
Kommentare
.
0xduckmove.
Jun 30 2025, 07:04

Hey, du versuchst zu schnell eine Transaktion durchzuführen und die Objekte wurden gesperrt.

Versuchen Sie, jeweils eine Transaktion mit denselben Objekten zu senden. Wenn Sie zwei Transaktionen senden, akzeptieren einige Validatoren möglicherweise die erste, einige akzeptieren die zweite und Ihre Objekte werden gesperrt, da jede Transaktion 66,7% der Validatoren benötigt und Sie möglicherweise nur 50% erhalten.

=> warte einfach auf den Epochen-Reset, es ist bald

Überprüfe mehr: https://forums.sui.io/t/beginner-tutorial-error-when-deploying-simple-sui-package/44842

3
Kommentare
.
MiniBob.
Jun 30 2025, 11:50

Der Fehler bedeutet, dass die Objekte, die Ihre Transaktion verwendet, immer noch durch frühere Transaktionen gesperrt sind, die noch nicht abgeschlossen sind. Selbst bei Verzögerungen bleiben Objekte reserviert, bis diese Transaktionen in der Kette abgeschlossen sind.

Um das Problem zu beheben:

  1. Vergewissern Sie sich immer, dass frühere Transaktionen mit den Objekten vollständig abgeschlossen wurden, bevor Sie sie erneut verwenden.
  2. Überprüfen Sie den Objektstatus über Sui RPC, um sicherzustellen, dass sie entsperrt sind.
  3. Vermeiden Sie es, parallele oder schnelle Transaktionen auf denselben Objekten zu senden.
  4. Implementieren Sie Wiederholungsversuche mit Backoff- und Finalitätsprüfungen statt fester Verzögerungen.

Diese Sperrung verhindert widersprüchliche Aktualisierungen und ist im Objektmodell von Sui normal. JsonRpcErrorEine korrekte Sequenzierung und Bestätigung der Endgültigkeit sind der Schlüssel zur Vermeidung.

3
Kommentare
.
harry phan.
Jun 30 2025, 15:00

Dieser Fehler tritt auf, wenn Sie versuchen, zwei Transaktionen gleichzeitig auszuführen (z. B. eine starten, bevor die vorherige abgeschlossen ist). Wenn Sie erneut versuchen, die Veröffentlichungstransaktion auszuführen, ohne vorher oder gleichzeitig eine weitere Transaktion auszuführen, sollte sie erfolgreich sein. Möglicherweise müssen Sie auch mehr Gas aus dem Wasserhahn holen (oder einen Tag warten, bis sich die Epoche überschlägt — bis sich die Objekte entriegeln)

Wenn Sie eine Transaktion ausführen, die Objekte beinhaltet, die Ihrer Adresse gehören (wie die Gasobjekte), reservieren Validatoren die neueste Version des Objekts für die Transaktion, die gerade signiert wird. Wenn Sie versuchen, zwei Transaktionen gleichzeitig auszuführen und sie sich auf dasselbe Objekt beziehen, konkurrieren sie miteinander um Signaturen von Validatoren. Im glücklichen Fall gewinnt eine der Transaktionen und wird ausgeführt, und die andere Transaktion erhält nicht genügend Signaturen. Im unglücklichen Fall können beide Transaktionen nicht genügend Signaturen erhalten (wenn beide mehr als ein Drittel der Signaturen des Validators erhalten haben, kann keine der beiden Transaktionen mehr als zwei Drittel erreichen, was der Schwellenwert ist). Dies wird als Äquivokation bezeichnet, und ab diesem Zeitpunkt können die Objekte, die in beide Transaktionen eingegeben wurden, für keine anderen Transaktionen verwendet werden.

Am Ende der Epoche (sie dauern ungefähr einen Tag — du kannst den Fortschritt bis zum nächsten Epochenwechsel auf https://suiexplorer.com überprüfen) werden alle Sperren aufgehoben, sodass du die Objekte wieder verwenden kannst, aber wenn du seit deinem letzten Versuch keinen Epochenwechsel hattest, musst du mehr Gas erwerben.

3
Kommentare
.

Weißt du die Antwort?

Bitte melde dich an und teile sie.