Básico
Spot
Opera con criptomonedas libremente
Margen
Multiplica tus beneficios con el apalancamiento
Convertir e Inversión automática
0 Fees
Opera cualquier volumen sin tarifas ni deslizamiento
ETF
Obtén exposición a posiciones apalancadas de forma sencilla
Trading premercado
Opera nuevos tokens antes de su listado
Contrato
Accede a cientos de contratos perpetuos
TradFi
Oro
Plataforma global de activos tradicionales
Opciones
Hot
Opera con opciones estándar al estilo europeo
Cuenta unificada
Maximiza la eficacia de tu capital
Trading de prueba
Introducción al trading de futuros
Prepárate para operar con futuros
Eventos de futuros
Únete a eventos para ganar recompensas
Trading de prueba
Usa fondos virtuales para probar el trading sin asumir riesgos
Lanzamiento
CandyDrop
Acumula golosinas para ganar airdrops
Launchpool
Staking rápido, ¡gana nuevos tokens con potencial!
HODLer Airdrop
Holdea GT y consigue airdrops enormes gratis
Launchpad
Anticípate a los demás en el próximo gran proyecto de tokens
Puntos Alpha
Opera activos on-chain y recibe airdrops
Puntos de futuros
Gana puntos de futuros y reclama recompensas de airdrop
Inversión
Simple Earn
Genera intereses con los tokens inactivos
Inversión automática
Invierte automáticamente de forma regular
Inversión dual
Aprovecha la volatilidad del mercado
Staking flexible
Gana recompensas con el staking flexible
Préstamo de criptomonedas
0 Fees
Usa tu cripto como garantía y pide otra en préstamo
Centro de préstamos
Centro de préstamos integral
Centro de patrimonio VIP
Planes de aumento patrimonial prémium
Gestión patrimonial privada
Asignación de activos prémium
Quant Fund
Estrategias cuantitativas de alto nivel
Staking
Haz staking de criptomonedas para ganar en productos PoS
Apalancamiento inteligente
Apalancamiento sin liquidación
Acuñación de GUSD
Acuña GUSD y gana rentabilidad de RWA
Solo quiero compartir un problema de seguridad en contratos inteligentes que muchos desarrolladores todavía suelen pasar por alto: el ataque de reentrancy. Si estás desarrollando contratos inteligentes en Solidity, esto es algo que debes entender a fondo.
De manera sencilla, reentrancy ocurre cuando un contrato llama a otro contrato, y ese contrato puede volver a llamar al contrato original mientras aún se está ejecutando. Imagina que tienes ContractA con 10 Ether y ContractB envía 1 Ether a ese contrato. Cuando ContractB retira dinero, ContractA verifica si el saldo es mayor que 0, y si lo es, envía Ether de vuelta. Sin embargo, si ContractB tiene una función fallback(, puede llamar de nuevo a la función de retiro de ContractA mientras esta aún no ha terminado. ¿El resultado? El saldo de ContractB sigue registrado como 1 Ether, por lo que recibirá otro Ether, y así sucesivamente hasta que ContractA se quede sin fondos.
¿Cómo funciona este tipo de ataque? El atacante necesita dos cosas: una función attack) para comenzar, y una función fallback para volver a llamar a la función de retiro. La función fallback es una función externa especial sin nombre, sin parámetros, que cualquiera puede activar llamando a una función inexistente, enviando Ether sin datos, o simplemente enviando Ether sin datos.
Un ejemplo concreto: el contrato EtherStore tiene una función deposit( que almacena el saldo y una función withdrawAll) que retira todo. El problema es que withdrawAll( verifica el saldo, envía Ether, y solo después actualiza el saldo a 0. Esto deja un espacio para que ocurra un ataque de reentrancy.
¿Y cómo protegerse? Aquí te doy tres formas.
Primero, usar el modificador noReentrant. La idea es muy simple: bloquear el contrato mientras una función se está ejecutando. Si alguien intenta volver a llamar esa función, debe pasar la verificación del bloqueo, pero el bloqueo solo se libera después de que la función termina. El modificador es una función especial que te permite agregar condiciones a otras funciones sin reescribir toda la lógica.
Segundo, aplicar el patrón Check-Effect-Interaction. En lugar de verificar condiciones, enviar fondos y luego actualizar el saldo, debes verificar primero, actualizar el saldo inmediatamente)antes de enviar fondos(, y luego realizar la interacción externa. De esta forma, incluso si ocurre reentrancy, el saldo ya estará actualizado a 0, y el atacante no podrá retirar más.
Tercero, si tu proyecto involucra múltiples contratos que interactúan, necesitas GlobalReentrancyGuard. En lugar de bloquear solo una función, bloqueas todo el sistema con una variable de estado almacenada en un contrato separado. Cuando cualquier función en cualquier contrato se llama, verifica si el sistema está bloqueado. Si lo está, la transacción se rechaza. Esto es especialmente útil si tienes contratos como ScheduledTransfer que envían dinero a AttackTransfer: GlobalReentrancyGuard evitará que toda la cadena de ataques de reentrancy ocurra.
Lo interesante de estos tres métodos es que puedes combinarlos según la situación. ¿Una función importante? Usa noReentrant. ¿Varias funciones relacionadas? Usa Check-Effect-Interaction. ¿Un proyecto completo y complejo? Usa GlobalReentrancyGuard. Entender reentrancy y cómo prevenirla te ayudará a construir contratos inteligentes mucho más seguros.