Saltar al contenido

Revoke.Delegate: Automatización de la revocación de aprobaciones de tokens con el kit de herramientas de delegación de MetaMask

Aprende cómo Revoke.delegate automatiza la revocación de aprobaciones de tokens para proteger a los usuarios durante exploits.

3 min de lectura
Revoke.Delegate: Automatización de la revocación de aprobaciones de tokens con el kit de herramientas de delegación de MetaMask

Los smart contracts de tokens incluyen una función approve() que permite que otra dirección gaste tokens en nombre del titular. Esta es una parte fundamental del ecosistema de smart contracts actual; sin ella, muchas aplicaciones DeFi no serían posibles. Por ejemplo, intercambiar tokens en un exchange descentralizado como Uniswap requiere la aprobación del token antes de que pueda realizarse un swap.

Sin embargo, las aprobaciones de tokens conllevan riesgos significativos. Otorgar a un smart contract permiso para gastar tokens significa que puede hacerlo en cualquier momento. Si un contrato es hackeado o contiene código malicioso, los atacantes pueden aprovechar estas aprobaciones para robar tokens.

Las soluciones existentes como Revoke.cash rastrean las aprobaciones de la wallet y permiten revocarlas bajo demanda. Sin embargo, dependen de un proceso manual que debe realizarse antes o durante un exploit, lo cual no siempre es práctico. Revoke.delegate —un proyecto de hackathon desarrollado en EthGlobal '24— ofrece una solución más eficiente al revocar automáticamente las aprobaciones durante un exploit, eliminando la necesidad de monitoreo constante o acción manual. A continuación, explicamos cómo lo logró el equipo.

Desafío: delegar permisos de wallet preservando la privacidad y la propiedad

Los usuarios deben delegar permisos específicos de su wallet a Revoke.delegate para habilitar la revocación automática de aprobaciones de tokens durante un exploit. En este contexto, delegar significa que una cuenta de smart contract (el delegador) otorga permisos específicos a otro smart contract o cuenta de propiedad externa (el delegatario) para realizar acciones definidas bajo reglas y condiciones claramente establecidas.

Este proceso permite que Revoke.delegate identifique de forma segura las direcciones de tokens afectadas, verifique condiciones predefinidas y revoque aprobaciones llamando a las funciones approve() o setApprovalForAll() para establecer las allowances en cero.

El principal desafío consiste en mantener los principios de privacidad y autogestión, garantizando que los usuarios no compartan claves privadas ni cedan el control de sus wallets al otorgar permisos ambiguos. El equipo también priorizó la compatibilidad con el ecosistema de wallets existente para facilitar una adopción fluida.

Solución: delegar y gestionar permisos de wallet de forma segura con el Delegation Toolkit (DTK)

La integración con el Delegation Toolkit (DTK) permitió que Revoke.delegate ofrezca a los usuarios la posibilidad de delegar permisos de wallet manteniendo la plena autogestión. Cada vez que se reporta un exploit, Revoke.delegate recupera de forma segura las delegaciones del usuario desde el Delegation Storage gestionado por DTK y las utiliza para revocar las aprobaciones de tokens de las wallets afectadas. A continuación, se presenta una descripción general del proceso:

  1. El usuario conecta su wallet para ver todas las aprobaciones de tokens existentes.

  2. Elige delegar los permisos de su wallet. En segundo plano, se llama a la función createRootDelegation(), especificando el smart contract de Revoke.delegate como delegatario.

  3. Los permisos requeridos se definen mediante la función addCaveats(), especificando el método approve(), como por ejemplo .addCaveat("allowedMethods", ["approve(address,uint256)"]).build().

  4. El usuario firma la nueva delegación, que luego se almacena de forma segura en el Delegation Storage gestionado por DKT.

  5. En caso de un exploit, Revoke.delegate recupera todas las delegaciones almacenadas, verifica las condiciones y revoca las aprobaciones de tokens de las wallets afectadas llamando a las funciones approve() o setApprovalForAll() para establecer las allowances en cero, todo sin requerir ninguna acción por parte del usuario.

Explora la documentación para obtener más información sobre cómo el Delegation Toolkit simplifica estos procesos.

"El Delegation Toolkit nos ayudó a garantizar que los usuarios pudieran delegar los permisos de su wallet sin ceder la propiedad." – Ayush & Aashish, creadores de Revoke.delegate y ganadores del Hackathon EthGlobal '24

Al aprovechar el DTK, el equipo de Revoke.delegate logró automatizar las revocaciones de aprobaciones de tokens, incluso en casos donde los usuarios estaban desconectados o no eran conscientes de un exploit en curso. Además, dado que el toolkit es compatible de forma nativa con ERC-7579, el equipo desarrolló una solución compatible con las principales wallets del ecosistema, incluyendo Safe, Kernel y Biconomy Nexus.

Traducido por IA. Puede contener errores. Por favor, verifique siempre la información.

Califica la traducción

Este artículo fue escrito por:

  • Kingsley Okonkwo

    Kingsley, desarrollador certificado de Ethereum Blockchain, trabaja como escritor técnico en Consensys, con un enfoque especial en herramientas para desarrolladores. Antes de unirse a Consensys, Kingsley trabajó como desarrollador backend freelance en varias plataformas, entre ellas Gigster y Braintrust. Con 5 años de experiencia en desarrollo de software, domina herramientas como JavaScript (Node.js y React), GoLang, SQL y Docker. Kingsley destaca en la creación de tutoriales paso a paso y guías prácticas, aprovechando las últimas tecnologías web3 para ayudar a otros desarrolladores a construir mejores dapps. Actualmente reside en Dubái y en su tiempo libre disfruta jugando al baloncesto y al fútbol.

    Leer todos los artículos