Los tokens SPL almacenan montos enteros brutos en la cadena. Los decimales en la "mint" definen cómo mostrar valores legibles por humanos. Los errores de un decimal de diferencia se encuentran entre los bugs más costosos en las integraciones de tokens.
Matemáticas de flotantes de JavaScript - Errores de redondeo de 1.1 * 1e6. Solución: conversión de cadena/BigInt como toRawAmount.
Asumir 9 decimales - USDC usa 6. Solución: siempre leer los decimales de la cuenta "mint".
Omitir transfer_checked en programas - ataques de confusión de decimales entre activos no coincidentes. Solución: usar transfer_checked con los decimales de la "mint".
Mostrar bruto como UI - diferencia de 10^6 en la UI. Solución: formatear con los decimales de la "mint" en todas partes.
Desbordamiento de u64 en matemáticas fuera de la cadena - suministros enormes exceden el entero seguro de JS. Solución: usar BigInt de principio a fin.
Alimentar unidades brutas a la CLI de spl-token - los argumentos de monto de la CLI son montos de UI, por lo que un valor "bruto" gasta de más por 10^decimals. Solución: pasar 2.5, no 2500000; reservar unidades brutas para los datos de instrucción.
Solo en la cuenta "mint". Las cuentas de token almacenan el monto bruto.
¿Pueden cambiar los decimales después de la creación de la 'mint'?
No. Inmutable en la inicialización de la "mint".
¿Qué es el monto bruto?
Entero almacenado en la cadena; el único valor que usan las instrucciones.
¿Por qué USDC muestra 6 decimales?
Convención industrial que coincide con la precisión fiduciaria del emisor.
¿Qué es `transfer_checked`?
Transferencia que incluye los decimales esperados; previene ciertos errores entre activos en programas.
¿Pueden los decimales ser 0?
Sí. Común para NFTs (suministro 1, monto 1).
¿Cómo manejan los comandos CLI los decimales?
Lo opuesto a la codificación de instrucciones: los argumentos de monto de spl-token son montos de UI, y la CLI los escala por los decimales de la "mint" por ti. spl-token transfer <MINT> 2.5 <RECIPIENT> envía 2.5 tokens; pasar 2500000 enviaría 2,500,000 tokens. Las unidades base brutas aparecen solo en los datos de instrucción (y en la salida de spl-token display).
¿Difieren los decimales de Token-2022?
Mismo campo de decimales a nivel de "mint" y semántica de monto bruto.
¿Cuál es el suministro máximo de u64?
~1.8e19 unidades brutas; combínalo con decimales para planificar el límite realista de la UI.
¿Debería la UI redondear o truncar?
Decisión del producto; siempre documentar. Los pagos a menudo truncan; las visualizaciones pueden redondear.
¿Cómo pasan las oráculos los montos?
A menudo brutos o de punto fijo con decimales explícitos en el diseño de la cuenta; leer la documentación del protocolo.
¿BigInt en @solana/kit?
Usa BigInt para montos brutos en la construcción de transacciones de kit 7.0.0 cuando los valores excedan Number.MAX_SAFE_INTEGER.