Sui.

Beitrag

Teile dein Wissen.

HaGiang.
Jun 15, 2025
Experten Q&A

Was ist der Sinn von Fehlern mit dem Attribut # [error]?

Sie sind immer noch Zahlen in einer Zeichenfolge, sowohl in Wallets/Explorern als auch in Move-Modulen.

  • Sui
2
2
Teilen
Kommentare
.

Antworten

2
0xduckmove.
Jun 15 2025, 09:24

Das # [error] -Attribut in Move (insbesondere in Move 2024) ermöglicht es Ihnen, Fehlerkonstanten als menschenlesbare Nachrichten (als Vektor) zu definieren, nicht nur als Zahlen. Dies ist eine neue Funktion, die das Entwickler- und Benutzererlebnis verbessert.

#[error]
const ENotAuthorized: vector<u8> = b"The user is not authorized to perform this action";

public fun update_value(user: &mut User, value: u64) {
    assert!(user.is_authorized, ENotAuthorized);
}

Weitere Informationen finden Sie im Move Book: https://move-book.com/move-basics/assert-and-abort.html#error-messages

2
Beste Antwort
Kommentare
.
harry phan.
Jun 30 2025, 07:55

Das # [error] -Attribut in Move (insbesondere in Move 2024) ermöglicht es Ihnen, Fehlerkonstanten als menschenlesbare Nachrichten (als Vektor) zu definieren, nicht nur als Zahlen. Dies ist eine neue Funktion, die das Entwickler- und Benutzererlebnis verbessert.

Warum # [error] verwenden?

-Beschreibende Fehlermeldungen: Anstatt nur eine Zahl zurückzugeben (wie Abbruch 1), können Sie eine Zeichenkettenmeldung zurückgeben, die erklärt, was schief gelaufen ist. -Besseres Debugging: Entwickler und Benutzer können einen klaren Grund für den Fehler erkennen, sodass Probleme leichter zu verstehen und zu beheben sind. -Verbesserte Benutzeroberfläche: Wallets, Explorer und DApps können Benutzern aussagekräftige Fehlermeldungen anzeigen, nicht nur Fehlercodes.

Beispiele

#[error]
const ENotAuthorized: vector<u8> = b"The user is not authorized to perform this action";

public fun update_value(user: &mut User, value: u64) {
    assert!(user.is_authorized, ENotAuthorized);
}

Wenn die Assertion fehlschlägt, kann anstelle einer Zahl die Fehlermeldung „Der Benutzer ist nicht autorisiert, diese Aktion auszuführen“ angezeigt werden.

Sind Fehler immer noch Zahlen in Wallets/Explorern?

-Alter Stil: Fehler waren nur Zahlen (z. B. Abort 1), und Wallets/Explorer zeigten nur den Code an. -**Mit # [error] :**Wenn das Wallet/Explorer Move 2024-Fehlermeldungen unterstützt, kann es die Zeichenfolge dekodieren und anzeigen. Wenn nicht, werden möglicherweise immer noch die Rohbytes oder eine Zahl angezeigt.

Beim # [error] -Attribut geht es also darum, die Fehlerbehandlung aussagekräftiger und benutzerfreundlicher zu gestalten. Die vollständige Unterstützung hängt jedoch davon ab, ob die Tools (Wallets, Explorer) aktualisiert werden, um diese Meldungen anzuzeigen.

Weitere Informationen finden Sie im Move Book: Fehlermeldungen.

Möchten Sie sehen, wie Sie sowohl numerische als auch Zeichenkettenfehler in einem Move-Modul definieren? Oder sind Sie daran interessiert, wie Sie Ihre dApp oder Ihr Wallet dazu bringen können, diese Nachrichten anzuzeigen?

Wie dekodiert man # [error] -Meldungen

Wenn du einen Fehler in einer Wallet, einem Explorer oder einem Log siehst, könnte das wie eine Zahl oder eine Zeichenfolge von Bytes aussehen (z. B. 0x5468652075736572206973206e6f7420617574686f72697a656420746f20746f20706572666f726d20746d20726d20746d20726d20746f6e).

1. 1Wenn Sie eine Zahl sehen (z. B.) :

  • Dies ist ein älterer Fehlercode. Sie müssen den Code in der Quelle des Moduls nachschlagen, um zu sehen, was er bedeutet.

2. 0x546865...Wenn Sie eine Hex-Zeichenfolge sehen (z. B.) :

  • Dies ist eine UTF-8-kodierte Fehlermeldung als Byte-Vektor.

#####Um zu dekodieren:

  • Entferne das 0xPräfix.
  • Konvertiert die Hexadezimalzeichenfolge in Byte.
  • Interpretieren Sie die Bytes als UTF-8-String.

####Beispiel

Angenommen, Sie sehen diesen Fehler: 0x5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e 0x- Entfernen.

  • Hex in ASCII/UTF-8 umwandeln:
  • 54 68 65 20 75 73 65 72 20 69 73 20 6e 6f 74 20 61 75 74 68 6f 72 69 7a 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 74 68 69 73 20 61 63 74 69 6f 6e
  • Das dekodiert zu:
  • Der Benutzer ist nicht berechtigt, diese Aktion auszuführen

####Wie dekodiert man im Code (Rust, JS, Python usw.) :

-Rust:

sei hex = „5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e“; let bytes = hex: :decode (hex) .unwrap (); let message = Zeichenfolge: :from_utf8 (bytes) .unwrap (); drucken! („{}“, Nachricht); -JavaScript:

const hex = „5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e“; const message = Buffer.from (hex, „hex“) .toString („utf8“); console.log (Nachricht); -Python:

hex_str = „5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e“ Nachricht = bytes.fromhex (hex_str) .decode („utf-8“) drucken (Nachricht)

Zusammenfassung:

  • Wenn Sie eine Zahl sehen, schlagen Sie sie im Code nach.
  • Wenn Sie eine Hex-Zeichenfolge sehen, dekodieren Sie sie als UTF-8, um den menschenlesbaren Fehler zu erhalten.

Wenn Sie ein schnelles Online-Tool benötigen, suchen Sie einfach nach „Hex-Text-Konverter“ und fügen Sie Ihre Hexzeichenfolge ein.

Möchten Sie ein Skript oder ein Tool zum automatischen Dekodieren dieser Fehler? Oder möchten Sie wissen, wie Sie Ihre eigenen Fehler in Ihrem Move-Code lesbarer machen können?

1
Kommentare
.

Weißt du die Antwort?

Bitte melde dich an und teile sie.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

610Beiträge1335Antworten
Sui.X.Peera.

Verdiene deinen Anteil an 1000 Sui

Sammle Reputationspunkte und erhalte Belohnungen für deine Hilfe beim Wachstum der Sui-Community.

BelohnungskampagneJuli