Límites y errores
Límites
| Qué | Límite |
|---|---|
| Fotogramas QR por escaneo | 2048 (BBQr: 1295) |
| Caracteres por fotograma | 4300 |
| Texto escaneado que se conserva por sesión | 1 MiB |
| Carga útil decodificada (CBOR o PSBT) | 128 KiB |
| Anidamiento / elementos CBOR | 24 niveles / 20 000 elementos |
| Carga útil de vinculación a nivel de cartera (generada) | 4096 bytes |
| ID de solicitud | 16 bytes (eth-sign-request: 1–64) |
| Origen | 256 caracteres |
| Entradas y salidas de Bitcoin | 1–100 de cada |
| Calldata de EVM | 64 KiB |
| Mensaje personal de EVM | 1–8192 bytes |
| EIP-712 | 32 tipos, 64 campos por tipo, arrays de hasta 128 elementos |
| Mensaje de TRON | 1–8192 bytes |
| Mensaje de Solana (sign-type 2) | 1–1024 bytes de texto UTF-8 |
| Transacción de Solana | 1–64 instrucciones, paquete de 1232 bytes |
Rechazos habituales
Cuando BitTool Signer rechaza una solicitud, muestra un mensaje breve en el escáner o en la pantalla de revisión. Estos son los que encuentran con más frecuencia los integradores:
| Mensaje | Causa | Solución |
|---|---|---|
| Unsupported signing UR type | El tipo UR no es ninguno de crypto-psbt, psbt, eth-sign-request, sol-sign-request, tron-sign-request | Usa los tipos del registro público; un código QR de vinculación no se puede firmar |
| Unsupported signing request field | Una clave del mapa fuera de 1–7 (ETH) o de 1–6 (SOL/TRON) | Elimina los campos personalizados |
| Invalid request UUID tag / requestId has invalid length | El ID de solicitud no va envuelto en el tag 37, o no tiene 16 bytes en SOL/TRON | 37(16 random bytes) |
| Signing path must be concrete | Un comodín *, un hijo vacío o un índice ≥ 231 | Envía la ruta completa hasta la hoja con los indicadores hardened true/false |
| Transaction data type does not match payload | data-type 1 con una transacción tipada, o 4 con RLP legacy | 1 para RLP legacy, 4 para sobres 0x01/0x02 |
| Unprotected or missing-chain-ID EVM transactions are refused | Transacción legacy sin chain ID EIP-155 | Serializa con el chain ID (v = chainId, r = s = 0) |
| Chain ID does not match the signing request | La transacción, la clave 4 y/o el dominio EIP-712 no coinciden | Haz que todos los chain IDs sean iguales |
| Unsupported network | Chain ID fuera de las ocho redes EVM compatibles, o una solicitud que no es de mainnet | Usa una red compatible |
| Typed message has extra unsigned or missing fields | Los campos de message difieren del tipo declarado | Envía exactamente los campos declarados |
| Use strings for large typed integers | Un número JSON mayor que 253 en datos EIP-712 | Codifícalo como cadena decimal |
| Full previous transactions (nonWitnessUtxo) are required … | Entrada SegWit v0 o legacy sin nonWitnessUtxo | Añade la transacción anterior completa |
| Only SIGHASH_ALL or Taproot SIGHASH_DEFAULT is accepted | Otro tipo de sighash en una entrada | Usa SIGHASH_ALL |
| No unsigned input belongs to this wallet … | Ninguna entrada tiene un bip32Derivation para la clave de esta cartera | Añade los datos de derivación con la huella y la ruta correctas |
| Exactly one TRON contract is supported per transaction | raw_data.contract tiene 0 entradas o varias | Un contrato por transacción |
| TRON contract calls require an explicit fee limit | TriggerSmartContract sin fee_limit | Define fee_limit |
| Invalid TRON timestamp or expiration | Falta timestamp, o expiration ≤ timestamp | Usa los valores de tu nodo |
| Address lookup tables require independently trusted account data … | Mensaje v0 de Solana con tablas de búsqueda de direcciones | Compila con claves de cuenta estáticas |
| This wallet is not a required signer in the transaction | La clave 4 no está entre los firmantes obligatorios del mensaje | Usa la cuenta que debe firmar |
| Solana message prefix could represent a transaction header | Se ha usado sign-type 2 para bytes que parecen una transacción | Usa sign-type 1 para las transacciones |
| Mixed UR fountain sessions / Multiple unrelated QR payloads | Fotogramas de dos códigos QR distintos en un mismo escaneo | Muestra una sola solicitud cada vez |
Los textos de error proceden únicamente de las comprobaciones propias del motor. Las excepciones inesperadas se notifican como un error genérico, de modo que una carga útil maliciosa no puede inyectar texto en la interfaz del firmante.
Resultados de la asociación
Antes de pedir la contraseña, la solicitud se asocia con las carteras del móvil. Solo se puede firmar con ready:
| Estado | Significado |
|---|---|
ready | Exactamente una cartera tiene la clave; las tareas de firma quedan fijadas |
noMatch | Ninguna cartera de este móvil tiene la clave solicitada (huella o ruta incorrectas, o la cartera no está importada) |
missingSigner | La solicitud no indica qué clave debe firmar (sin datos de derivación ni dirección) |
ambiguous | Encaja más de una cartera, por ejemplo, la misma frase importada dos veces |
setupRequired | Hay que reconstruir los datos públicos de una cartera (una introducción de la contraseña) |
invalid | La solicitud no es válida estructuralmente |