Sui.

Publicación

Comparte tu conocimiento.

HaGiang.
Jun 15, 2025
P&R expertos

¿Cuál es el punto de los errores con el atributo # [error]?

Siguen siendo números en cadena tanto en monederos como en módulos explorers/move.

  • Sui
2
2
Cuota
Comentarios
.

Respuestas

2
0xduckmove.
Jun 15 2025, 09:24

El atributo # [error] de Move (especialmente de Move 2024) permite definir las constantes de error como mensajes legibles por humanos (como vectores), no solo como números. Se trata de una nueva función que mejora la experiencia de desarrolladores y usuarios.

#[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);
}

Para obtener más información, consulta el libro de mudanzas: https://move-book.com/move-basics/assert-and-abort.html#error-messages

2
Mejor Respuesta
Comentarios
.
harry phan.
Jun 30 2025, 07:55

El atributo # [error] de Move (especialmente de Move 2024) permite definir las constantes de error como mensajes legibles por humanos (como vectores), no solo como números. Se trata de una nueva función que mejora la experiencia de los desarrolladores y los usuarios.

¿Por qué usar # [error]?

-Mensajes de error descriptivos: En lugar de simplemente devolver un número (como anular el 1), puedes devolver un mensaje de cadena que explique qué ha fallado. -Mejor depuración: Los desarrolladores y los usuarios pueden ver claramente el motivo del error, lo que facilita la comprensión y la solución de los problemas. -Experiencia de usuario mejorada: Las carteras, los exploradores y las dApps pueden mostrar mensajes de error significativos a los usuarios, no solo códigos de error.

Ejemplos

#[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);
}

Cuando la afirmación falla, se puede mostrar el mensaje de error «El usuario no está autorizado a realizar esta acción», en lugar de solo un número.

¿Los errores siguen siendo números en las carteras o los exploradores?

-Estilo antiguo: Los errores eran solo números (p. ej., anular el 1) y los monederos/exploradores solo mostraban el código. -**Con # [error] :**Si la cartera o el explorador admiten los mensajes de error de Move 2024, puede decodificar y mostrar la cadena. De lo contrario, es posible que siga mostrando los bytes sin procesar o un número.

Por lo tanto, el atributo # [error] tiene como objetivo hacer que la gestión de errores sea más expresiva y fácil de usar, pero su compatibilidad total depende de que las herramientas (carteras, exploradores) se actualicen para mostrar estos mensajes.

Para obtener más información, consulta Move Book: Error Messages.

¿Le gustaría saber cómo definir los errores numéricos y de cadena en un módulo de Move? ¿O está interesado en cómo hacer que su dApp o billetera muestre estos mensajes?

¿Cómo decodificar los mensajes de # [error]

Cuando veas un error en un monedero, un explorador o un registro, puede que parezca un número o una cadena de bytes (por ejemplo, 0x5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e).

1. 1Si ves un número (por ejemplo,) :

  • Se trata de un código de error antiguo. Debes buscar el código en el código fuente del módulo para ver lo que significa.

2. 0x546865...Si ves una cadena hexadecimal (por ejemplo,) :

  • Se trata de un mensaje de error codificado en UTF-8 como un vector de bytes.

#####Para decodificar:

  • Elimina el prefijo0x.
  • Convierte la cadena hexadecimal en bytes.
  • Interpreta los bytes como una cadena UTF-8.

####Ejemplo

Supongamos que ve este error: 0x5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e 0x- Eliminar.

  • Convierte hexadecimal a 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
  • Esto decodifica para:
  • El usuario no está autorizado a realizar esta acción

####Cómo decodificar en código (Rust, JS, Python, etc.) :

-Rust:

let hex = «5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e»; let bytes = hex: :decode (hex) .unwrap (); let message = String: :from_utf8 (bytes) .unwrap (); imprimir! («{}», mensaje); -JavaScript:

const hex = «5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e»; const message = buffer.from (hex, «hex») .toString («utf8"); console.log (mensaje); -Python:

hex_str = «5468652075736572206973206e6f7420617574686f72697a656420746f20706572666f726d207468697320616374696f6e» mensaje = bytes.fromhex (hex_str) .decode («utf-8") imprimir (mensaje)

Resumen:

  • Si ves un número, búscalo en el código.
  • Si ves una cadena hexadecimal, decodifícala como UTF-8 para obtener el error legible por humanos.

Si quieres una herramienta rápida en línea, solo tienes que buscar «conversor de hexadecimal a texto» y pegar la cadena hexadecimal.

¿Quieres un script o una herramienta para decodificar estos errores automáticamente? ¿O quieres saber cómo hacer que tus propios errores sean más legibles en tu código de Move?

1
Comentarios
.

Sabes la respuesta?

Inicie sesión y compártalo.

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

610Publicaciones1335Respuestas
Sui.X.Peera.

Gana tu parte de 1000 Sui

Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.

Campaña de RecompensasJulio