Límites y errores
Límites
| Qué | Límite |
|---|---|
| Fotogramas QR por escaneo | 2,048 (BBQr: 1,295) |
| Caracteres por fotograma | 4,300 |
| 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 del emparejamiento a nivel de billetera (generada) | 4,096 bytes |
| ID de solicitud | 16 bytes (eth-sign-request: 1–64) |
| Origen | 256 caracteres |
| Entradas y salidas de Bitcoin | 1–100 de cada una |
| Calldata de EVM | 64 KiB |
| Mensaje personal de EVM | 1–8,192 bytes |
| EIP-712 | 32 tipos, 64 campos por tipo, arreglos de hasta 128 elementos |
| Mensaje de TRON | 1–8,192 bytes |
| Mensaje de Solana (sign-type 2) | 1–1,024 bytes de texto UTF-8 |
| Transacción de Solana | 1–64 instrucciones, paquete de 1,232 bytes |
Rechazos comunes
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 los integradores encuentran con más frecuencia:
| Mensaje | Causa | Solución |
|---|---|---|
| Unsupported signing UR type | El tipo UR no es crypto-psbt, psbt, eth-sign-request, sol-sign-request ni tron-sign-request | Usa los tipos del registro público; un código QR de emparejamiento no se puede firmar |
| Unsupported signing request field | Una clave de mapa fuera de 1–7 (ETH) o 1–6 (SOL/TRON) | Elimina los campos personalizados |
| Invalid request UUID tag / requestId has invalid length | El ID de solicitud no está 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 de la hoja con indicadores de endurecimiento 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 de EIP-155 | Serialízala 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 | Agrega la transacción previa 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 billetera | Agrega datos de derivación con la huella digital y la ruta correctas |
| Exactly one TRON contract is supported per transaction | raw_data.contract tiene 0 o varias entradas | Un contrato por transacción |
| TRON contract calls require an explicit fee limit | TriggerSmartContract sin fee_limit | Establece 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 | 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 requeridos del mensaje | Usa la cuenta que debe firmar |
| Solana message prefix could represent a transaction header | sign-type 2 usado para bytes que parecen una transacción | Usa sign-type 1 para transacciones |
| Mixed UR fountain sessions / Multiple unrelated QR payloads | Fotogramas de dos códigos QR diferentes en un mismo escaneo | Muestra una sola solicitud a la vez |
Los textos de error provienen solo de las verificaciones propias del motor. Las excepciones inesperadas se reportan como un error genérico, de modo que una carga útil maliciosa no puede inyectar texto en la interfaz del firmador.
Resultados de la asociación
Antes de pedir la contraseña, la solicitud se asocia con las billeteras del teléfono. Solo se puede firmar una solicitud en estado ready:
| Estado | Significado |
|---|---|
ready | Exactamente una billetera tiene la clave; las tareas de firma están fijadas |
noMatch | Ninguna billetera de este teléfono tiene la clave solicitada (huella digital o ruta incorrecta, o la billetera no está importada) |
missingSigner | La solicitud no indica qué clave debe firmar (sin datos de derivación ni dirección) |
ambiguous | Más de una billetera encaja, por ejemplo, la misma frase importada dos veces |
setupRequired | Hay que reconstruir los datos públicos de una billetera (se ingresa la contraseña una vez) |
invalid | La solicitud es estructuralmente inválida |