Publication
Partagez vos connaissances.
à quoi servent les erreurs avec l'attribut # [error] ?
Ce sont toujours des nombres dans une chaîne à la fois dans les modules wallets/explorers/move.
- Sui
Réponses
2L'attribut # [error] de Move (en particulier dans Move 2024) vous permet de définir les constantes d'erreur sous forme de messages lisibles par l'homme (sous forme de vecteurs
#[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);
}
Pour plus de détails, consultez le Move Book : https://move-book.com/move-basics/assert-and-abort.html#error-messages
L'attribut # [error] de Move (en particulier dans Move 2024) vous permet de définir les constantes d'erreur sous forme de messages lisibles par l'homme (sous forme de vecteurs
Pourquoi utiliser # [error] ?
-**Messages d'erreur descriptifs :**Au lieu de simplement renvoyer un chiffre (comme abort 1), vous pouvez renvoyer un message de chaîne expliquant le problème. -**Meilleur débogage :**Les développeurs et les utilisateurs peuvent identifier la raison claire de l'échec, ce qui facilite la compréhension et la résolution des problèmes. -**Expérience utilisateur améliorée :**Les portefeuilles, les explorateurs et les DApps peuvent afficher des messages d'erreur significatifs aux utilisateurs, et pas seulement des codes d'erreur.
Exemples
#[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);
}
Lorsque l'assertion échoue, le message d'erreur « L'utilisateur n'est pas autorisé à effectuer cette action » peut être affiché, au lieu d'un simple chiffre.
Les erreurs sont-elles toujours numérotées dans les portefeuilles et les explorateurs ?
-**Ancien style :**Les erreurs n'étaient que des chiffres (par exemple, abandonner 1), et les portefeuilles et les explorateurs n'affichaient que le code. -**Avec # [error] :**Si le portefeuille/l'explorateur prend en charge les messages d'erreur Move 2024, il peut décoder et afficher la chaîne. Sinon, il peut toujours afficher les octets bruts ou un nombre.
L'attribut # [error] vise donc à rendre la gestion des erreurs plus expressive et plus conviviale, mais la prise en charge complète dépend des outils (portefeuilles, explorateurs) mis à jour pour afficher ces messages.
Pour plus de détails, consultez le Move Book : Messages d'erreur.
Aimeriez-vous savoir comment définir les erreurs numériques et les erreurs de chaîne dans un module Move ? Ou souhaitez-vous savoir comment faire en sorte que votre DApp ou votre portefeuille affiche ces messages ?
Comment décoder les messages # [d'erreur]
Lorsqu'une erreur apparaît dans un portefeuille, un explorateur ou un journal, elle peut ressembler à un nombre ou à une chaîne d'octets (par exemple, 0x5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e).
1.Si vous voyez un chiffre (par exemple,1
) :
- Il s'agit d'un ancien code d'erreur. Vous devez rechercher le code dans la source du module pour voir ce que cela signifie.
2. 0x546865...
Si vous voyez une chaîne hexadécimale (par exemple,) :
- Il s'agit d'un message d'erreur codé en UTF-8 sous forme de vecteur d'octets.
#####Pour décoder :
- Supprimez le
0x
préfixe. - Convertissez la chaîne hexadécimale en octets.
- Interprétez les octets comme une chaîne UTF-8.
####Exemple
Supposons que l'erreur suivante s'affiche : 0x5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e
- Supprimer
0x
. - Convertissez l'hexadécimal en ASCII/UTF-8 :
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
- Cela se décode pour :
- L'utilisateur n'est pas autorisé à effectuer cette action
####Comment décoder en code (Rust, JS, Python, etc.) :
-Rouille :
let hex = « 5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e » ; let bytes = hex : :decode (hex) .unwrap () ; let message = String : :from_utf8 (octets) .unwrap () ; Println ! (« {} », message) ; -Javascript :
const hex = « 5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e » ; const message = Buffer.from (hex, « hex ») .toString (« utf8 ») ; console.log (message) ; -Python :**
hex_str = « 5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e » message = octets.fromhex (hex_str) .decode (« utf-8 ») imprimer (message)
Résumé :
- Si vous voyez un chiffre, recherchez-le dans le code.
- Si vous voyez une chaîne hexadécimale, décodez-la en UTF-8 pour obtenir l'erreur lisible par l'homme.
Si vous voulez un outil en ligne rapide, recherchez simplement « convertisseur hexadécimal en texte » et collez votre chaîne hexadécimale.
Souhaitez-vous un script ou un outil pour décoder automatiquement ces erreurs ? Ou souhaitez-vous savoir comment rendre vos propres erreurs plus lisibles dans votre code Move ?
Connaissez-vous la réponse ?
Veuillez vous connecter et la partager.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Gagne ta part de 1000 Sui
Gagne des points de réputation et obtiens des récompenses pour avoir aidé la communauté Sui à se développer.

- ... SUIBigSneh+1396
- ... SUISuiLover+1333
- ... SUI0xduckmove+1207
- ... SUIThorfin+1202
- ... SUIOwen+970
- ... SUIharry phan+847
- ... SUItheking+742
- Pourquoi BCS exige-t-il un ordre de champs exact pour la désérialisation alors que les structures Move ont des champs nommés ?53
- « Erreurs de vérification de sources multiples » dans les publications du module Sui Move - Résolution automatique des erreurs43
- Échec de la transaction Sui : objets réservés pour une autre transaction25
- Comment les contraintes de capacité interagissent-elles avec les champs dynamiques dans des collections hétérogènes ?05