Resumen
En Ethereum, el token ERC20 es ampliamente utilizado por empresas o usuarios para construir aplicaciones descentralizadas (DApps). Muchos tokens ERC20 obtienen gran valor y circulan en el mercado cripto. Además, con el próspero desarrollo del ecosistema DeFi, el comercio de tokens ERC20 se vuelve más frecuente. Basándose en el estándar de ERC20, el método approve() se invoca para otorgar permiso a las DApps u otros usuarios para retirar tokens. En la realidad, muchas DApps requieren aprobación ilimitada por parte de los usuarios y este diseño ha traído un problema grave. Una serie de incidentes ocurrieron y causaron una pérdida enorme tanto para los usuarios como para las propias DApps.
0xffffff. Prefacio
Como tema que ha sido discutido durante mucho tiempo, la "Aprobación Ilimitada" surge con el próspero desarrollo de DeFi y algunos incidentes de seguridad. Con la inspiración de muchos incidentes de seguridad, intentamos nuevamente llevar a cabo una investigación exhaustiva sobre la "Aprobación Ilimitada" desde diferentes aspectos. Al mismo tiempo, también fuimos invitados a participar en la 29ª conferencia de Blockchain Village y hablar sobre este tema.
Recomendación de lectura:
- Si eres principiante en Ethereum, te recomendamos encarecidamente leer el blog completo.
- Si eres un experto en Ethereum y tienes algo de experiencia con la aprobación ilimitada, puedes comenzar a leer desde la sección 0x2.
0x0. Antecedentes
Antes de entrar en la discusión de "¿Qué es la aprobación ilimitada?", me gustaría recordarte sobre "¿Qué es la aprobación en el token ERC20?".
Tokens ERC20
En Ethereum, además del Ether, varios tokens circulan en el mercado cripto con un gran valor. ERC20 es el estándar de tokens más popular. Según nuestras estadísticas incompletas, más de 5,600 y 44,000 tokens ERC20 han sido registrados en CoinGecko (un sitio web que agrega precios de tokens) y Uniswap (actualmente uno de los intercambios descentralizados más famosos).
Mecanismo de Aprobación
El proceso de aprobación se relaciona principalmente con tres entidades (remitente, gastador y contrato de token), así como dos funciones (approve, transferFrom) y dos variables (balanceOf, allowance) en el estándar ERC20 (como se muestra en la figura a continuación).

Para entender el proceso de aprobación, presentamos la figura a continuación y explicamos cómo las funciones approve y transferFrom cambian el estado del contrato de token.

- (Paso 1) Como estado inicial, el remitente tiene 100 tokens en el contrato y el gastador no tiene ninguna
allowanceaprobada por el remitente. - (Paso 2) El remitente invoca la función
approvepara otorgar permiso de 100 tokens al gastador. Por lo tanto,allowance[sender][spender]aumenta a 100 desde 0 y no se aplica ningún cambio albalanceOfdel remitente. - (Paso 3) Por último, el gastador invoca
transferFrompara mover 80 tokens del remitente a sí mismo. Como resultado, elbalanceOftanto del remitente como del gastador se actualizan (es decir, 20 y 80) y la asignación del gastador disminuye a 20.
Tres tipos de aprobación en la realidad
En el mundo real, podemos clasificar todas las aprobaciones en tres tipos según el monto de la aprobación.
- Aprobación Cero: El monto de aprobación es igual a cero. Esto básicamente significa que el usuario/remitente intenta revocar su asignación de una determinada plataforma/gastador.
- Aprobación Ilimitada: El monto de aprobación es igual al valor máximo de
uint256(0xffff...ffff) o el suministro total de los tokens. Este tipo de aprobación es frecuentemente utilizado por muchas plataformas DeFi (como exchanges, plataformas de préstamos). - Otra Aprobación: Este tipo de aprobación cubre el resto. Los usuarios normalmente inician esta aprobación basándose en la función de modificación compatible con plataformas o billeteras.
0x1. Incidentes del Mundo Real
También hay algunos incidentes del mundo real relacionados con el problema de aprobación mencionado anteriormente. En nuestra charla, repasamos dos (UniCat, Bancor Finance) de esas historias con detalles. Si deseas obtener más información sobre esos incidentes, simplemente sigue los enlaces proporcionados a continuación:
- Incidente UniCat:Enlace
- Incidente Bancor Finance: Enlace
- Primitive Finance: Enlace1, Enlace2
- Furucombo: Enlace,Enlace (Chino)
- DeFi Saver: Enlace
- Degen Money: Twitter
0x2. Algunas Mediciones
En esta sección, presentaremos nuestra investigación detallada desde los aspectos fuera de la cadena y en la cadena. Para comprender mejor la situación actual de la "aprobación ilimitada", adoptamos el rol de usuario de frontend para llevar a cabo nuestra medición.

Proceso de Aprobación en el Mundo Real
La figura anterior muestra que los usuarios de frontend podrían seguir seis pasos para completar una transacción de aprobación. Hay cuatro entidades principales (usuarios de frontend, billeteras, plataformas, contratos de tokens). Ahora, repasemos el flujo paso a paso:
Paso 1,2: Primero, la mayoría de los usuarios de frontend (móvil, sitio web) conectan sus billeteras a la plataforma seleccionada y envían sus solicitudes de servicio.
Paso 3: Luego, desde las plataformas hasta la billetera del usuario, la plataforma construye la transacción de aprobación con los datos requeridos (más importante, el monto de aprobación) y la envía a la billetera del usuario para su confirmación.
Paso 4,5: Después de recibir la transacción de aprobación, la billetera mostrará la información correspondiente al usuario y esperará su confirmación.
Paso 6: Una vez que el usuario confirma la transacción, la billetera enviará la transacción a la red para su validación. Además, la transacción validada modificará el estado del contrato de token (Allowance[Usuario][Plataforma]).
(En la siguiente sección, primero presentaremos nuestra motivación para cada tipo de medición (fuera de la cadena y en la cadena). Luego, presentaremos nuestros resultados de medición y hallazgos con diferentes aspectos.)
Investigación Fuera de la Cadena
Motivación
En el proceso de aprobación del mundo real, podemos descubrir fácilmente que los usuarios de frontend interactúan directamente con la interfaz de usuario de la billetera y la plataforma. Por lo tanto, elegimos 15 billeteras conocidas y 24 plataformas DeFi (Finanzas Descentralizadas) y llevamos a cabo la investigación fuera de la cadena.
(Los resultados de la investigación se resumen en dos figuras que se muestran a continuación.)


Además, consideramos principalmente su explicación y flexibilidad en la aprobación:
- Explicación
- Billetera: 1) Si la billetera muestra información clara de la transacción de aprobación (incluyendo usuario, gastador, token y monto de aprobación); 2) Si la billetera da una advertencia especial o notifica a los usuarios sobre la "aprobación ilimitada"
- Plataforma:(Criterio 1)Si la plataforma proporciona una explicación clara de las transacciones de aprobación en su interfaz web;(Criterio 2)Si la plataforma notifica a los usuarios de la existencia de la transacción de aprobación;(Criterio 3)Si la plataforma notifica a los usuarios que dos transacciones se ejecutan secuencialmente
- Flexibilidad: Ya sea en billeteras o plataformas, si la interfaz proporciona una función de modificación sobre el monto de aprobación
(En la siguiente sección, mostraremos el resultado de cómo se realizan los dos aspectos anteriores tanto en billeteras como en plataformas. Seleccionamos dos casos para cada uno, tanto para la billetera como para la plataforma.)
0x222. Billeteras: Metamask & Coinbase
Presentaremos nuestro resultado de investigación sobre la billetera Coinbase y la billetera Metamask (extensión de chrome). Según la información en Google Play Store (mostrada en la figura a continuación), Coinbase y Metamask ambas tienen más de 1M de instalaciones. De alguna manera, Coinbase obtiene más reseñas de clientes y también tiene una puntuación más alta.

En cuanto a la investigación de las dos billeteras, las usamos para probar la función de intercambio en la plataforma Compound. Tenga en cuenta que la plataforma Compound establece de forma predeterminada la aprobación ilimitada para los usuarios.
Billetera 1: Metamask
Como se muestra en la figura a continuación, mientras los usuarios revisan la transacción de aprobación construida por Compound, pueden ver básicamente la información completa, incluyendo la dirección del gastador, la firma de aprobación y el monto de aprobación (Paso 2). Además, Metamask incluso permite a los usuarios modificar su monto de aprobación con el botón "Editar" (Paso 2, 3, 4).

Billetera 2: Coinbase
En comparación con la billetera Metamask, la billetera Coinbase no presenta ninguna información importante en absoluto. Los usuarios solo pueden ver más detalles después de confirmar la transacción de aprobación (figura a continuación). Tenga en cuenta que los pasos 2, 3, 4 solo se muestran durante o después de que la transacción de aprobación esté en modo pendiente o completado. Por lo tanto, la billetera Coinbase oculta la información necesaria de la transacción de aprobación y no proporciona ninguna función de modificación para el monto aprobado.

0x223. Plataformas: Bancor & Curve Finance
En esta sección, vamos a comparar Bancor y Curve Finance. Como se muestra en la figura a continuación, según las estadísticas más recientes (al 7 de agosto de 2021) de defipulse, Curve Finance y Bancor son el primero y quinto DEX (exchange descentralizado) en términos de valor total bloqueado.
Para la configuración de nuestra investigación en ambas plataformas, usaremos la billetera Metamask para probar la función de intercambio proporcionada por ambas plataformas.

Plataforma 1: Bancor
Mientras probamos la función de intercambio en Bancor, explica la necesidad de la transacción de aprobación (figura a continuación) e incluso ofrece a los usuarios dos opciones (aprobación ilimitada/limitada). Además de la aprobación ilimitada, la aprobación limitada en Bancor solo requiere la cantidad exacta de allowance que los usuarios intentan usar para el intercambio.

Plataforma 2: Curve Finance
Sin embargo, en Curve Finance, ocurre algo 'interesante'. Como se muestra en la figura a continuación, mientras solicitamos el intercambio, la interfaz de Curve Finance muestra "Por favor, aprueba 10 USDT para el intercambio" (figura a continuación), pero Metamask recibe una transacción de aprobación ilimitada. Esta es definitivamente información engañosa para los usuarios.

Posteriormente, cuando intentamos confirmar el problema con Curve Finance, reconocieron nuestra preocupación y dijeron que se debe a que "a los usuarios no les gustaba aprobar cada vez" (figura a continuación).

De manera similar a Curve Finance, la interfaz de Yearn Finance tiene el mismo problema. (También lo mencionamos y mostramos la evidencia en nuestra charla)
0x23. Investigación en la Cadena
0x231. Motivación
Para comprender mejor la situación de la "aprobación ilimitada" en la cadena, recopilamos todas las transacciones (hasta el 30 de abril de 2021) para continuar nuestra exploración. Como se muestra en la figura a continuación, el número de "aprobaciones ilimitadas" crece muy rápidamente hoy en día. En nuestra investigación, encontramos que la introducción de UniswapV2 parece ser el principal factor que estimula el crecimiento de la "aprobación ilimitada". Y explicaremos más sobre este punto en base a nuestros resultados de medición.

Al mismo tiempo, para explorar la "aprobación ilimitada" en nombre tanto del token como de la plataforma (ya que son los términos más relacionados en lugar de los propios usuarios), llevaremos a cabo nuestra investigación en dos aspectos:
- La distribución de la "Aprobación Ilimitada"
- Análisis de Riesgo
0x232. La Distribución de la "Aprobación Ilimitada"
Para ayudar a entender las gráficas a continuación, primero explicaremos cada término mencionado en las figuras:
- Eje Y (Ratio de Aprobación Máxima): Valor mayor -> Mayor porcentaje de "Aprobación Ilimitada" entre todas las transacciones de aprobación
- Eje X (Actividad): Valor mayor -> Más activas son las plataformas o tokens. El valor de actividad depende del número de transacciones de aprobación y la diferencia de tiempo entre la primera y la última transacción de aprobación
- Tamaño del punto: Tamaño mayor -> Más transacciones de aprobación están involucradas por el token o la plataforma
(Las dos figuras a continuación solo muestran los 1000 tokens/plataformas más frecuentemente involucrados en transacciones de aprobación)
(Plataforma)

(Token)

Plataforma: Al observar la gráfica de la plataforma, UniswapV2 domina claramente a cualquier otra plataforma en los tres términos. Es por eso que declaramos que "la introducción de UniswapV2 parece ser el principal factor que estimula el crecimiento de la 'aprobación ilimitada'".
Token: En cuanto a la distribución, USDC, USDT y DAI tienen el mejor desempeño según los tres términos definidos anteriormente. Estos tokens son todos monedas estables, lo que tiene sentido ya que las monedas estables generalmente se usan para realizar operaciones en el mercado cripto. En cuanto a otros tokens destacados (Top 10 tokens), son bastante similares en Ratio de Aprobación Máxima.
0x233. Análisis de Riesgo
Según los resultados anteriores, seleccionamos USDC, USDT, DAI (los 3 principales tokens) y dos plataformas (Bancor, UniCat) para llevar a cabo nuestro análisis de riesgo. Mientras tanto, también definimos dos términos (como se muestra en la figura a continuación) para ayudar a desmitificar el riesgo de los tokens aprobados.

Monto de Riesgo
- Para el token, el Monto de Riesgo equivale a la cantidad total de tokens que podrían transferirse invocando la función
transferFrom - Para la Plataforma, el Monto de Riesgo equivale a la cantidad total de un solo token que podría transferirse invocando la función
transferFrom
Tasa de Riesgo
- Con un token fijo, la Tasa de Riesgo representa el porcentaje del Monto de Riesgo sobre el suministro total de ese token fijo
Token: Como se muestra en la figura a continuación, USDC y USDT son bastante estables (su tasa de riesgo ronda el 10%) durante el año y medio. DAI experimenta una caída dramática a mitad de año y finalmente se estabiliza (también alrededor del 10%, pero con más altibajos). Este fenómeno podría indicar algunos eventos específicos o el mecanismo de funcionamiento de DAI. Por lo tanto, aún queda trabajo por hacer para explorar la causa.

Plataforma: Sobre el análisis de riesgo en plataformas, vamos a presentar un gráfico de tendencia del monto de riesgo (figura mostrada a continuación) tanto en Bancor (con token BNT) como en UniCat (con token UNI).
El gráfico de tendencia de Bancor muestra un crecimiento y caída instantáneos. Esto es en realidad una perfecta explicación de qué tan rápido el equipo transfiere sus tokens explotables del contrato defectuoso a un lugar seguro.
En cuanto al gráfico de tendencia de UniCat, confirmamos que algunas caídas obvias son en realidad causadas por los ataques de puerta trasera de UniCat.

0x3. Soluciones Existentes
Como se mencionó anteriormente, la "Aprobación Ilimitada" es un tema que existe en el ecosistema desde hace mucho tiempo. A través de diversas discusiones, se han propuesto algunas soluciones para mejorar el proceso de aprobación:
- ERC777
- EIP2612
Antes de entrar en las soluciones, nos gustaría recordarte nuevamente la motivación raíz de la "aprobación ilimitada":
- Se requieren dos transacciones tanto para approve como para transferFrom
- La aprobación personalizada obliga a los usuarios a aprobar cada vez antes de operar o depositar (lo que significa más tarifas de transacción a pagar)
- Las plataformas quieren maximizar la experiencia del usuario solicitando una aprobación ilimitada una sola vez
0x31. ERC777
Como estándar de token propuesto en 2017, ERC777 tiene los siguientes puntos utilizados para mejorar el proceso de aprobación del token ERC20:
- Los usuarios pueden "autorizar" a un operador (como un exchange) para transferir su token con el monto deseado
- Los usuarios no tienen que enviar transacciones de aprobación repetidamente
- Los usuarios no tienen que preocuparse por el riesgo de la "aprobación ilimitada"
En conclusión, con ERC777, los usuarios pueden lograr compras atómicas con cualquier operador autorizado.
Sin embargo, los inconvenientes de ERC777 también son obvios:
Alta tarifa de transacción, debido a los hooks aplicados en el estándar (para más detalles). Los usuarios deben seleccionar un operador confiable (Esto devuelve la pregunta a los usuarios nuevamente).
0x32. EIP2612
Sobre EIP2612, en esta propuesta, el autor indica que los usuarios pueden usar mensajes firmados para la validación de transacciones de modo que los usuarios no necesiten pagar ninguna tarifa de transacción para modificar su allowance. Más directamente, las transacciones de aprobación se vuelven gratuitas con EIP2612. Además, esta propuesta actualmente es utilizada por UniswapV3 para tokens de proveedor de préstamos.
0x4. Conclusión
En conclusión, la "Aprobación Ilimitada" realmente reduce el costo para los usuarios de ejecutar múltiples transacciones de aprobación. Sin embargo, a través de nuestra investigación, algunas plataformas y billeteras aún pretenden ser inofensivas en la batalla entre conveniencia y seguridad. Peor aún, algunas de ellas incluso intentan engañar a los usuarios mostrando información incorrecta. Por lo tanto, en lugar de usar la "Aprobación Ilimitada", sugerimos que las plataformas y billeteras realmente consideren desarrollar una interfaz de usuario o protocolo más seguro para proteger a los usuarios desde el principio. Como usuario de DeFi, desarrollar el sentido de seguridad no debería ser el resultado de exploits sino tener conciencia desde el principio. Creemos que construir un entorno seguro y próspero en Ethereum no es solo responsabilidad de la comunidad sino de cada uno de nosotros.
Sobre nosotros
Twitter: https://twitter.com/BlockSecTeam
Medium: https://blocksecteam.medium.com/



