Cripto y monederos

Inspector de solicitudes de firma

Se ejecuta localmenteNueva

La herramienta en sí está en inglés; en esta página se explica en tu idioma.

Utiliza Inspector de solicitudes de firma

Para qué sirve

Pega lo que una cartera o un sitio te pide firmar y ve en lenguaje claro lo que autorizaría. Las aprobaciones de tokens, los permits, las firmas Permit2 y los listados de Seaport que pagan a otra persona se marcan en rojo.

Funciona íntegramente en tu navegador: no se sube nada de lo que introduzcas.

Cómo utilizar Inspector de solicitudes de firma

  1. Copia la solicitud sin procesar. Toma el texto exacto que se te pide firmar: el JSON EIP-712, los datos 0x de una transacción, el objeto de transacción completo, una solicitud JSON-RPC o el texto del mensaje.
  2. Pega e inspecciona. Pégalo en el recuadro. La inspección empieza al pegar; también puedes pulsar Inspect (Inspeccionar) o Ctrl+Intro.
  3. Comprueba cómo se interpretó. La primera línea dice cómo se interpretó la entrada, por ejemplo transaction object. Si es incorrecto, elige el tipo adecuado en Read the input as (Interpretar la entrada como).
  4. Lee la placa de color. La etiqueta, el título y el resumen dicen en lenguaje claro lo que permitiría la firma. La lista de debajo contiene los indicadores; los más graves aparecen en negrita.
  5. Revisa los campos. Mira en la tabla el spender u operator, el token, la cantidad, la caducidad y la cadena. Abre Decoded arguments o Message fields para ver los valores sin procesar.
  6. Decide y comparte. Si no conoces al spender, rechaza la solicitud en tu cartera y busca las direcciones en un explorador de bloques. Copy report (Copiar informe) da un resumen en texto con los enlaces neutralizados.

Ejemplo

Firma Permit2 para una asignación ilimitada de USDC

Entrada
{
  "types": {
    "EIP712Domain": [
      {
        "name": "name",
        "type": "string"
      },
      {
        "name": "chainId",
        "type": "uint256"
      },
      {
        "name": "verifyingContract",
        "type": "address"
      }
    ],
    "PermitSingle": [
      {
        "name": "details",
        "type": "PermitDetails"
      },
      {
        "name": "spender",
        "type": "address"
      },
      {
        "name": "sigDeadline",
        "type": "uint256"
      }
    ],
    "PermitDetails": [
      {
        "name": "token",
        "type": "address"
      },
      {
        "name": "amount",
        "type": "uint160"
      },
      {
        "name": "expiration",
        "type": "uint48"
      },
      {
        "name": "nonce",
        "type": "uint48"
      }
    ]
  },
  "primaryType": "PermitSingle",
  "domain": {
    "name": "Permit2",
    "chainId": 1,
    "verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
  },
  "message": {
    "details": {
      "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "amount": "1461501637330902918203684832716283019655932542975",
      "expiration": "281474976710655",
      "nonce": "0"
    },
    "spender": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB",
    "sigDeadline": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
  }
}
Resultado (registrado el 2026-10-20)
Read as: EIP-712 typed data. Change this with “Read the input as”.

DangerousPermit2 PermitSingle: token allowance by signature (UNLIMITED)

Signing lets 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB move an unlimited amount of 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 (USDC token on Ethereum) out of your wallet through Permit2. The allowance never expires in practice. The spender submits this signature itself, so you will not see another prompt. Drainers favour Permit2 because many wallets have already approved Permit2 for apps such as Uniswap.

Unlimited amount: the spender can take your whole balance of the token.
The allowance never expires in practice.
The signature never expires in practice.
SPENDER	0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB
TOKEN	0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
USDC token on Ethereum

AMOUNT	Unlimited: 2^160−1, the Permit2 maximum (1461501637330902918203684832716283019655932542975)
ALLOWANCE EXPIRES	2^48−1 (Permit2 maximum): no practical expiry (beyond the year 5000)
NONCE	0
SIGNATURE VALID UNTIL (SIGDEADLINE)	2^256−1: no practical expiry (beyond the year 5000)
DOMAIN	name "Permit2"
CHAIN	Ethereum (chain ID 1)
VERIFYING CONTRACT	0x000000000022D473030F116dDEE9F6B43aC78BA3
Permit2 (Uniswap)

EIP-712 DIGEST (WHAT IS SIGNED)	0x579baa31b8f7279c82034e935d103d07caa27a817903937e201389d81d55984c
DOMAIN SEPARATOR	0x866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f28
MESSAGE HASH (HASHSTRUCT)	0xb646364eb4dc82faf68b61d79beb585797490532ff745845f3821e6f8573463c
PRIMARY TYPE	PermitSingle(PermitDetails details,address spender,uint256
…

Placa roja: el spender (quien gasta) 0xbBbB…BBbB podría mover una cantidad ilimitada de USDC a través de Permit2, y ni la asignación ni la firma caducan. Se calcula el digest EIP-712.

Qué comprueba

SeñalQué significa
Etiqueta de riesgo: Dangerous, Check carefully, Low risk o NoteDangerous (peligroso) significa que la solicitud puede entregar tokens o NFT. Las aprobaciones lo reciben incluso para una aplicación conocida, porque el poder concedido es el mismo. Una revocación, como approve con cantidad 0, se muestra como Low risk (riesgo bajo).
Spender u operator en rojoLa dirección que obtendría el derecho a mover tus activos. Algunos contratos se identifican por su nombre, como Permit2, Seaport y el conduit de OpenSea; cualquier otra dirección hay que comprobarla.
Cantidad ilimitadaSe muestra para 2^256−1 o cualquier valor de 2^255 o más, y en las solicitudes Permit2 para 2^160−1. El spender podría llevarse todo tu saldo de ese token, ahora y más adelante.
Cantidad con los decimales del tokenPara USDC, USDT, DAI y WETH en Ethereum se convierte el número sin procesar, por ejemplo 1000000 pasa a ser 1 USDC. Para otros tokens ves el entero sin procesar leído con 18 y con 6 decimales.
Caducidad y plazoNo caduca en la práctica (más allá del año 5000), válido durante más de un año o ya caducado. Un permit o una asignación que nunca caduca sigue siendo utilizable mucho después de que lo olvides.
Firma a ciegas de un hash de 32 bytesLa cartera no puede mostrar lo que representa el hash, y con eth_sign puede ser una transacción o un permit. Firma solo un hash que hayas generado tú.
Comprobaciones de órdenes de SeaportListado a precio cero, otros destinatarios reciben más que quien ofrece, o los artículos ofrecidos reaparecen con otro destinatario: típico de listados falsos de NFT que pagan al atacante.
Dominio de Sign-In with EthereumUn mensaje de inicio de sesión nombra el sitio que lo pide. Si ese dominio no es exactamente el sitio en el que estás, la firma podría iniciar la sesión de otra persona como si fueras tú.
Dos lecturas de un mismo selectorapprove(address,uint256) es la misma llamada en ERC-20 y en ERC-721. Salvo que el contrato sea uno de los pocos tokens que conoce la herramienta, se muestran ambas lecturas.

Más ejemplos

Aprobación de NFT para toda una colección

Entrada
0xa22cb465000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000000000000000000000000000000000000000001
Resultado

Read as: transaction calldata (known function selector). Dangerous: setApprovalForAll: control de TODOS tus NFT de esta colección. Operator 0x000000000000000000000000000000000000dEaD, Approved true, Collection (to) no indicada.

Aprobación limitada de USDC en una transacción

Entrada
{"to":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","data":"0x095ea7b3000000000000000000000000000000000000000000000000000000000000dead00000000000000000000000000000000000000000000000000000000000f4240","value":"0x0","chainId":1}
Resultado

Read as: transaction object. Dangerous: ERC-20 approval. El resumen dice que 0x000000000000000000000000000000000000dEaD podría mover hasta 1000000 unidades del token USDC en Ethereum sin volver a preguntar. La tabla muestra Chain Ethereum (chain ID 1), Value 0 ETH (0 wei) y Amount 1000000 con la nota 1 USDC (6 decimals).

Solicitud eth_sign a ciegas

Entrada
{"method":"eth_sign","params":["0x0000000000000000000000000000000000000001","0xabababababababababababababababababababababababababababababababab"]}
Resultado

Read as: JSON-RPC eth_sign request. Dangerous: Blind signature: un hash de 32 bytes en lugar de texto, con el indicador de que la mayoría de las carteras desactivaron u ocultaron eth_sign porque lo usaban los drainers.

Preguntas frecuentes

¿Qué comprueba el inspector de solicitudes de firma?

Decodifica typed data EIP-712, calldata de transacciones, objetos de transacción y mensajes personal_sign o eth_sign, y calcula el digest EIP-712. Señala las aprobaciones de tokens, setApprovalForAll, los permits EIP-2612 y de DAI, las firmas Permit2, las órdenes de Seaport que pagan a alguien distinto de ti y las firmas a ciegas sobre un hash de 32 bytes.

¿Puede ser dañina una solicitud que no se marca en rojo?

Sí. La herramienta solo lee la propia solicitud: no puede ver saldos, aprobaciones existentes ni si un contrato es malicioso, y las funciones que no están en su tabla se muestran como desconocidas. Las aprobaciones para aplicaciones legítimas también se marcan en rojo, porque la firma concede el mismo poder en cualquier caso.

¿Se envía a algún sitio la solicitud pegada?

No. La decodificación y el cálculo de hashes se ejecutan en tu navegador, y la página no hace ninguna solicitud de red con lo que introduces. Una solicitud de firma no contiene ningún secreto, pero nunca pegues una clave privada ni una frase semilla en ningún sitio web.

¿Una cantidad pequeña hace segura una aprobación?

Limita lo que se puede llevar a esa cantidad, pero el spender puede usarla en cualquier momento sin volver a preguntarte. Por eso la herramienta sigue mostrando una aprobación de 1 USDC como Dangerous. Aprueba solo la cantidad que necesites, para un spender que hayas comprobado.

¿Por qué veo una lectura ERC-20 y otra ERC-721 para un mismo approve?

Ambos estándares usan el mismo nombre de función y los mismos tipos de argumentos, así que los datos 0x por sí solos no dicen cuál es. Pega la transacción completa con la dirección to y comprueba en un explorador de bloques si ese contrato es un token o una colección de NFT.

Ya firmé una solicitud que aquí aparece en rojo. ¿Y ahora qué?

Actúa rápido. Revoca las aprobaciones en la cadena y mueve lo que quede a una cartera nueva. Un permit firmado que todavía no se ha usado no aparece como aprobación, así que mover los tokens es el paso más seguro. La guía de emergencia enumera el orden de las acciones.

Explicación de los términos

Investigación de PhishDestroy