Una aprobación de tokens (approval) es un permiso guardado en el contrato de un token ERC-20. Permite que una dirección concreta mueva en tu nombre tus tokens hasta un importe fijado. Aprobar no mueve nada por sí solo, y tampoco es una llave maestra de tu wallet: vale para un token, una dirección y una red.
Lo normal es encontrarte con una aprobación cuando una aplicación DeFi te pide permiso antes de un swap o un depósito. Con la función estándar approve, esa petición es una transacción on-chain propia, y el permiso que crea sigue ahí hasta que alguien lo cambia. Aquí se explican el mecanismo y sus riesgos, no si merece la pena usar una aplicación concreta.
¿Qué es una allowance ERC-20?
La allowance es la cifra que hay detrás de una aprobación: cuántos tokens puede retirar todavía una dirección autorizada del saldo del titular. ERC-20 es el estándar que siguen la mayoría de los tokens fungibles de Ethereum, y resuelve este mecanismo en unas pocas líneas. Su abstract dice que los tokens pueden aprobarse para que los gaste un tercero on-chain (EIP-20).
Titular, contrato del token y spender
Hay tres partes implicadas, y casi toda la confusión nace de mezclarlas.
- Titular (owner): la dirección que tiene los tokens, normalmente la de tu wallet.
- Contrato del token: el smart contract que lleva los saldos de un token. También guarda todas las allowances de ese token.
- Spender: la dirección que recibe el permiso. A menudo es el smart contract de una aplicación, pero el estándar admite cualquier dirección, también una que controla una persona.
Cada allowance corresponde a una sola combinación de titular, token y spender, en una sola cadena. Aprobar a un spender para un token no le da nada sobre otro. Una allowance en la Mainnet de Ethereum tampoco se traslada a un token con el mismo nombre en otra red, porque allí es otro contrato con sus propios registros. Y el spender es una dirección, no una web. El dominio de tu navegador no dice nada fiable sobre qué contrato aprobaste de verdad.
Approve frente a transferFrom
La EIP-20 define tres funciones que trabajan juntas (EIP-20, ethereum.org: ERC-20):
approve(spender, value)la envía el titular y fija cuánto puede tomar el spender.allowance(owner, spender)consulta cuánto queda de ese permiso.transferFrom(from, to, value)la llama el spender y es la que mueve de verdad los tokens del saldo del titular, dentro de la allowance.
Un ejemplo inventado, sin relación con ninguna wallet real: apruebas a un spender por 100 tokens. No se mueve nada. Más tarde, el spender llama a transferFrom por 30 de ellos. Si después consultas allowance, devuelve 70, y el spender puede usar esos 70 de una vez o en varias sin volver a pedirte nada.
Aprobaciones limitadas e ilimitadas
Muchas aplicaciones no piden el importe exacto que necesita una operación. Piden una allowance ilimitada, una cifra tan grande que en la práctica nunca se agota. Según ethereum.org, los proyectos lo hacen para que apruebes una sola vez y pagues la comisión de la transacción una sola vez, en lugar de repetirlo antes de cada uso (ethereum.org: How to revoke token access). Algunas wallets permiten editar el importe en la propia petición.
Lo que limita la cifra
La allowance es un techo. Indica cuánto puede mover el spender, no cuánto ha movido. Una allowance alta no significa por sí sola que haya salido ni un token de tu wallet.
Lo que sí marca es hasta dónde puede llegar un problema. Con una allowance ilimitada, el spender puede mover todos los tokens de ese tipo que haya en la dirección, incluidos los que lleguen más tarde. Ethereum.org señala que esto sigue siendo así aunque hayas retirado tus fondos de la plataforma a tu wallet, y que los permisos de contrato no caducan: una aprobación concedida hace años puede usarse hoy (ethereum.org: How to revoke token access).
Cuánto pesa ese riesgo depende del spender. Un contrato que solo retira lo que tú le pediste no es lo mismo que uno con un fallo, uno que otra persona puede modificar mediante actualizaciones, o uno con código escrito para vaciar saldos aprobados. La cifra muestra la exposición máxima posible. No predice una pérdida.
¿Cómo revisar las aprobaciones que ya existen?
Las allowances están on-chain, así que cualquiera puede leerlas, y cada llamada a approve que se ejecuta con éxito tiene que emitir un evento público Approval (EIP-20). Esos datos públicos son los que permiten que los exploradores de bloques y las herramientas para revisar aprobaciones muestren qué allowances ha concedido una dirección. Ethereum.org enumera varias de estas herramientas (ethereum.org: How to revoke token access); esta guía no responde por ninguna.
Comprobar red, token y spender
Una lista de aprobaciones solo sirve si la lees en su contexto:
- Red. La herramienta muestra las aprobaciones de la cadena que hayas elegido. El ejemplo de ethereum.org: conectado a la Mainnet de Ethereum, ves contratos de Ethereum, no los de Polygon. Cada red adicional hay que revisarla aparte.
- Dirección. Comprueba que la dirección revisada es la que de verdad tiene los tokens. Mucha gente usa más de una.
- Spender. Lee su dirección, no solo la etiqueta de al lado. Un nombre de aplicación conocido no demuestra que el contrato detrás sea el que querías aprobar, y menos aún que sea seguro.
- Importe. Fíjate en si queda una cifra concreta o una allowance prácticamente ilimitada.
Abre la herramienta desde un marcador o una dirección que hayas verificado tú, no desde un enlace que te hayan enviado.
¿Qué pasa al revocar una aprobación?
Revocar es devolver a cero la allowance de un token y un spender. ERC-20 no tiene una función de revocación aparte. En la práctica, se hace llamando a approve con valor 0, lo que sobrescribe el valor anterior (EIP-20).
Poner la allowance a cero
Como cambia datos on-chain, la revocación es una transacción nueva. Tu wallet te pide confirmarla y, como cualquier transacción, cuesta una comisión de red; en la Mainnet de Ethereum se paga en ETH, como explica la guía sobre comisiones de gas en Ethereum. Según ethereum.org, el proceso tarda entre uno y varios minutos según la red, y después conviene recargar la herramienta para confirmar que la entrada ha desaparecido (ethereum.org: How to revoke token access).
Mientras la transacción no esté en un bloque, la allowance anterior sigue vigente. La revocación solo actúa hacia delante: no devuelve la comisión de la aprobación original ni recupera nada que el spender ya haya movido.
Reducir o sustituir un límite
Una llamada estándar a approve no suma ni resta a la allowance actual. La sustituye (EIP-20). Para pasar de 100 a 50, fijas 50; no quitas 50.
Cambiar directamente de un valor distinto de cero a otro tiene un punto débil conocido. Un spender que vea venir el cambio podría usar la allowance antigua antes de que se confirme la nueva, y después también la nueva. Por eso la EIP-20 dice que las interfaces deberían poner primero la allowance a 0 y solo después el nuevo valor. También dice que el contrato del token no debería imponerlo, para seguir siendo compatible con contratos desplegados antes. Aun así, cada token puede implementar approve a su manera, así que no des por hecho que todos los tokens y todas las wallets tratan un cambio igual.
Lo que no hace una revocación
La revocación tiene un alcance limitado a propósito. Cambia una cifra en un contrato de token, en una cadena. Nada más.
Desconectar una dApp es otra cosa
Desconectar tu wallet de una web corta la conexión entre esa web y tu wallet. Las allowances que concediste mientras estabas conectado no cambian, y el spender puede seguir usándolas. La sección de preguntas de ethereum.org lo dice tal cual (ethereum.org: How to revoke token access).
Una revocación tampoco toca esto:
- Transferencias pasadas. Los tokens que un spender ya movió no vuelven.
- Posiciones abiertas. Según ethereum.org, revocar no pone fin al staking, al pooling ni al lending. Sigues en esas posiciones.
- Una wallet comprometida. Quien tenga tu clave privada o tu seed phrase puede enviar tus tokens con una transferencia normal, sin ninguna allowance.
- Permisos firmados y aprobaciones de NFT. Algunos tokens aceptan también una aprobación como mensaje firmado en lugar de una transacción (EIP-2612), y los NFT tienen sus propias funciones de aprobación. Poner a cero una allowance ERC-20 no anula una firma que todavía no se ha usado ni toca las aprobaciones de NFT.
Lo que el token check de CoinVett puede decirte y lo que no
El Token Safety Check de CoinVett analiza el contrato de un token: señales como comportamiento de honeypot, funciones de mint, estructuras proxy o lo concentradas que están las tenencias. La guía para leer un escaneo de seguridad de tokens repasa esas señales una por una.
Eso es una pregunta sobre el token. Tus allowances son una pregunta sobre ti: a qué spenders autorizaste, para qué token y en qué cadena. Un token cuyo escaneo de contrato no muestra nada llamativo puede estar en tu wallet con una aprobación ilimitada a un spender en el que ya no confías. El Token Safety Check no es una lista de tus aprobaciones ni una forma de revocarlas.
Hay un detalle que suele confundir. El ETH nativo no es un token ERC-20, aunque sirva para pagar el gas en Ethereum, así que no tiene allowances. Las aplicaciones que necesitan ETH en formato ERC-20 usan wrapped ether (WETH), y el WETH, como cualquier token ERC-20, puede tener aprobaciones (ethereum.org: WETH).
Cualquier aprobación queda descrita por completo con cuatro datos: la red, el token, la dirección del spender y el importe que sigue permitido. Juntos dicen exactamente qué puede mover otra persona desde tu dirección. Una revocación cambia eso desde el momento en que se confirma, al precio de una comisión. Lo anterior queda como está.
Aviso: los importes de tokens del ejemplo son hipotéticos; las fuentes están enlazadas en el texto. Solo con fines informativos, no es asesoramiento financiero.
Preguntas frecuentes
¿Desconectar la wallet revoca una aprobación ERC-20?
No. La conexión entre una web y tu wallet es independiente de la allowance guardada en el contrato del token. El spender puede seguir usando esa allowance hasta que se cambie con una transacción on-chain, por ejemplo una que la ponga a cero.
¿Revocar una aprobación mueve mis tokens o deshace transferencias antiguas?
Ni una cosa ni la otra. La revocación pone a cero la allowance de ese token y ese spender en esa red, de modo que el spender ya no puede usarla desde ese momento. Tus tokens se quedan donde están, las transferencias ya hechas no se revierten y la propia revocación suele costar una comisión de red.
¿Las aprobaciones de tokens ilimitadas caducan solas?
No. Una allowance ERC-20 normal no tiene fecha de caducidad. Sigue vigente hasta que se agota o se cambia, y una ilimitada no se agota en la práctica, así que sigue siendo utilizable hasta que se sustituye o se revoca. Otros tipos de autorización pueden seguir reglas distintas.