Auditoría de seguridad

Auditoría del contrato oficial de AutoRange

Revisión de seguridad línea por línea del contrato que custodia y opera los fondos en Arbitrum. Escrita para que se entienda sin conocimientos técnicos. Todo lo que dice acá se puede verificar por tu cuenta en el explorador de bloques (más abajo).

Sin hallazgos críticosSin hallazgos altosSin hallazgos mediosCódigo público y verificadoSin ruta de robo de fondos

Contrato oficial AutoRange V1 · Red Arbitrum One · Auditoría interna de caja blanca asistida por IA (revisión línea por línea con Claude Sonnet 5 de Anthropic, con una segunda pasada independiente con Gemini 3.6 Flash de Google, más herramientas automatizadas estándar de la industria) · Septiembre 2026. Auditoría formal externa: en proceso de postulación al Uniswap Foundation Security Fund.

01

Resumen

En simpleEl contrato pasó una revisión de seguridad completa sin encontrar ninguna vulnerabilidad crítica, alta ni media. Los 9 hallazgos son todos de severidad baja o informativa, y ninguno permite que se pierdan o roben fondos.

Lo más importante, y es una propiedad de diseño del contrato, no una opinión: ninguna función del contrato tiene un campo de "destinatario". Todo lo que sale del contrato va a un solo lugar: tu propia billetera (si eres el dueño), o de vuelta a tu posición en Uniswap. No hay ninguna instrucción que un atacante, ni el propio agente que rebalancea, pueda usar para mandar tu dinero a otra dirección.

El agente que optimiza tu rango nunca puede sacar tu capital. En el peor caso imaginable (que le roben las llaves al agente), lo único que podría hacer es ejecutar rebalanceos a peor precio — un desgaste lento, acotado por el tope de rebalanceos que tú configuras, y que puedes cortar en cualquier momento pausando el vault y retirando. Nunca un vaciado.

02

Qué se auditó

En simpleTres contratos que trabajan juntos. Están desplegados en Arbitrum y su código fuente es público.

AutoRangeVaultV1El vault (la caja fuerte)

Guarda tu depósito, abre y mantiene tu posición en Uniswap V3, y aplica los límites que configuraste. Es el que custodia el dinero. Cada usuario tiene su propia copia.

0xB2294bcC9841Ec8E412ef15e2243dBF37c3099BA

dirección de la implementación — cada vault es una copia liviana de esta

AutoRangeVaultFactoryV1La fábrica

Crea un vault nuevo cada vez que alguien lo pide desde /create. También lleva un registro para poder comprobar que un vault es auténtico y no una copia falsa.

0x288B7d7cD81620977062aa6eEdA2a64D93386502
AutoRangePlatformConfigV1La configuración de la plataforma

Guarda parámetros comunes: comisión de rendimiento (10%), comisión de creación (0,1%), tope de depósito, y la dirección de la tesorería. No custodia fondos.

0xa618111f9627cDc00B0F2329509B0E1EBfAda0c5

Desplegados en el bloque 502836514 de Arbitrum. El contrato oficial es un fork mecánico de la versión interna V9 (mismo código, sin cambios de lógica), que ya había pasado su propia revisión antes de este despliegue.

03

Cómo encajan los 3 contratos

En simplePiensa en una caja fuerte personal (tu vault), una máquina que fabrica cajas fuertes idénticas (la fábrica), y una hoja con las reglas de la casa pegada en la pared (la configuración). Tu dinero solo vive en tu caja.

el dueño (owner)
1. pides crear un vault
Fábrica de vaultscrea y registra
2. la fábrica hace una copia de la caja fuerte ↓
depositas / retiras / configuras / pausas
TU VAULTla caja fuerte — custodia el dinero
abre y rebalancea →
Uniswap V3tu posición de liquidez
↓ lee las reglas↓ pregunta el precio de ETH (solo para el gas)
Config de plataformacomisiones, tope de depósito
Oráculo Chainlinkprecio ETH/USD, solo para reembolsar gas
El AGENTEoperator — lo opera la plataforma
solo puede: rebalancear dentro de tus límites →
TU VAULTno puede depositar, retirar ni reconfigurar
  • Tu dinero vive solo en tu vault. Nunca pasa por una billetera de la plataforma, ni por la fábrica, ni por la configuración.
  • Tu vault lee la configuración, pero la configuración no toca tu vault. Si la plataforma cambia una comisión, tu vault la aplica de ahí en más — pero nadie puede mover tu capital desde ahí.
  • El oráculo de Chainlink solo se usa para calcular cuánto gas reembolsarle al agente. Nunca decide cuánto puedes retirar ni cuánto vale tu posición para ti.
  • La fábrica es un registro de autenticidad. PreguntándoleisVault(dirección) sabes si un vault es genuino o una copia falsa.
04

El ciclo de vida de tu vault

En simpleUn vault pasa por unos pocos estados bien definidos. En este cuadro: qué se puede hacer en cada uno, y quién lo puede hacer.

Estado 1Recién creadoExiste pero está vacío.Puedes: DepositarAgente: Nada todavía
configuras límites
Estado 2ConfiguradoYa tiene tu rango y tus topes. Sin posición aún.Puedes: Depositar, ajustar límitesAgente: Nada todavía
hay fondos → se abre
Estado 3ActivoHay liquidez trabajando en Uniswap.Puedes: Depositar más, retirar, ajustar, pausarAgente: Rebalancear dentro de tus límites
Estado 4PausadoLo pausaste tú, o saltó un techo/piso absoluto que configuraste.Puedes: Retirar, despausar, ajustarAgente: No puede rebalancear
despausas
Estado 5CerradoRetiraste todo. Queda vacío.Puedes: Volver a depositar (vuelve al estado 1–3)Agente: Nada

Lo que no cambia en ningún estado: siempre puedes retirar. Las funcioneswithdraw, withdrawAll, emergencyWithdrawPosition yrescuePosition no dependen de que el vault esté activo, ni de que el agente coopere, ni de que el vault esté pausado o no. Si hay algo tuyo adentro, lo puedes sacar.

El "techo/piso absoluto" es una protección opcional que configuras: si el precio cruza ese límite, el vault cierra la posición, convierte a stablecoin y se auto-pausa, dejando tu capital quieto hasta que decidas qué hacer.

05

Cómo se mueve tu dinero

En simpleCuatro momentos. En todos, el dinero se queda en tu vault o vuelve a tu billetera — nunca pasa por una billetera de la plataforma.

  1. 1Depositás. Transferís tu stablecoin (y opcionalmente el token volátil) a tu vault. El contrato la registra en tu saldo. Nadie más puede tocarla.
  2. 2Se abre la posición. El agente convierte parte a la proporción correcta y abre tu posición concentrada en Uniswap V3, con el rango que definiste. El NFT de la posición queda a nombre de tu vault.
  3. 3El agente rebalancea. Cuando el precio se sale de tu rango (o según tu período), el agente cierra y vuelve a abrir la posición centrada en el precio actual. El contrato verifica que el rango nuevo esté cerca del mercado y respeta tus topes.
  4. 4Retirás. Cuando quieras, con una firma. Podés sacar de la posición, de la reserva, del presupuesto de gas, o todo junto. Esta acción nunca depende del agente ni de que el vault esté activo.
06

Las únicas formas de que el dinero salga del contrato

En simpleEl código tiene exactamente estas rutas de salida. Cualquiera puede confirmarlo leyendo el contrato.

AcciónQuién puede llamarlaA dónde va el dineroNota
withdraw / withdrawAllSolo tú (owner)Tu billeteraNo requiere que el vault esté activo ni que el agente coopere.
emergencyWithdrawPositionSolo tú (owner)Tu billeteraSalida de emergencia. No hace ningún swap — no puede fallar por liquidez del pool.
rescuePositionSolo tú (owner)Tu billetera (el NFT de Uniswap crudo)Último recurso: te devuelve la posición para manejarla tú mismo, salteando toda la lógica del vault.
rebalance / initPositionEl agente (operator)A tu propia posición en UniswapNo hay parámetro de destinatario. El dinero no puede ir a ningún otro lado.
comisionesAutomático, al cobrar/rebalancearTesorería de la plataforma y reembolso de gas al agenteSolo sobre rendimiento (10%) y creación (0,1%). Nunca sobre tu capital.
07

¿Pueden robarte los fondos?

En simpleLa respuesta corta es no. Acá el detalle, por tipo de actor.

Un desconocido, sin haber participado nunca

No tiene ninguna función que pueda llamar sobre tu vault: todas revierten con "no eres el dueño" o "no eres el agente". No puede mover el NFT de tu posición (tu vault nunca le dio permiso a nadie). No puede volver a inicializar tu vault. Lo único que puede hacer con la fábrica es crearse un vault nuevo y vacío para él.

El agente de la plataforma, incluso con las llaves robadas

No puede transferir tu capital a ninguna dirección — no existe la función. Su techo real de daño es: la comisión de rendimiento (un % de las comisiones de Uniswap, lo fija la plataforma), el reembolso de gas honesto (limitado a ~3× el costo real y acotado al presupuesto de gas que cargaste), y un desgaste por deslizamiento en cada rebalanceo. Todo eso está acotado por el tope de rebalanceos que configuras, y puedes pausar el vault y retirar todoapenas notes algo raro. Nunca es "te vacían de un golpe".

La propia plataforma

La plataforma controla la configuración común. En el peor caso podría subir la comisión de rendimiento hasta el 100% y quedarse con el 100% de las comisiones de Uniswap futuras de todos los vaults. Nunca puede tocar tu capital ni las comisiones ya cobradas. Es un límite de confianza inherente al modelo (la plataforma opera el agente); tu principal siempre está fuera de su alcance.

¿Y si hay un bug que nadie encontró?

Para eso existe rescuePosition: te devuelve el NFT de tu posición crudo, salteando toda la matemática interna del vault. No depende del oráculo, ni del precio, ni de que el vault esté activo. Es la salida que sigue funcionando aunque algo más se rompa.

08

Cómo se hizo la auditoría

En simpleRevisión de caja blanca: con el código fuente completo a la vista, función por función.

  • 13 categorías de revisión manual

    Control de acceso, contabilidad, reentrancy, aritmética, manejo de oráculos, salidas de emergencia, y lecciones de las auditorías públicas de Uniswap V3/V4.

  • 131 pruebas automatizadas

    Con Foundry, contra una copia real de Arbitrum (y de Ethereum para un caso). 100% pasan.

  • Análisis estático (Slither)

    Herramienta estándar de la industria sobre todo el repositorio.

  • Verificación simbólica (Halmos)

    Prueba matemática, no una muestra: cubre todo el espacio de entradas posibles.

  • Simulación de despliegue on-chain

    Despliegue y creación de vault en una copia local de Arbitrum antes del despliegue real.

  • Modelo de amenaza escrito

    Documento dedicado que responde "¿se pueden robar fondos?" caso por caso.

La lógica del agente que opera fuera de la cadena (el "keeper") también se revisó en modo solo lectura: 10 observaciones, todas de severidad baja o informativa, ninguna con pérdida de fondos.

Modelos de IA y herramientas

La revisión de código línea por línea, la redacción de las 131 pruebas y el análisis de resultados los hizo Claude Sonnet 5 (Anthropic). Los contratos se revisaron además con Gemini 3.6 Flash (Google) como segundo modelo independiente — usar dos modelos de proveedores distintos reduce la chance de que un punto ciego de uno pase inadvertido. Todo bajo dirección y revisión del equipo de AutoRange, que definió el alcance y tomó las decisiones de despliegue y de aceptación de riesgo. Las herramientas automatizadas de abajo son independientes de cualquier modelo: sus resultados se pueden reproducir sin IA.

HerramientaVersiónPara qué
Claude Sonnet 5 (Anthropic)claude-sonnet-5Revisión manual de caja blanca, autoría de las pruebas, redacción del modelo de amenaza y del informe.
Gemini 3.6 Flash (Google)gemini-3.6-flashSegunda revisión independiente del código de los contratos, para contrastar hallazgos.
Foundry (forge / anvil / cast)forge 1.7.1Ejecutar las 131 pruebas contra una copia real de la cadena; simular el despliegue en local.
solc (compilador de Solidity)0.8.24Compilar el contrato; comparar byte a byte lo compilado contra lo desplegado on-chain.
Slither (Trail of Bits)0.11.4Análisis estático — detección automática de patrones de vulnerabilidad conocidos.
Halmos (a16z) + z30.1.13Ejecución simbólica — prueba matemática de propiedades sobre todo el espacio de entradas.
Arbiscan + SourcifyVerificación pública del código fuente contra el bytecode desplegado.
09

Todas las pruebas, una por una

En simpleQué se probó exactamente y qué dio cada prueba. Ninguna terminó en "pérdida de fondos".

Suites automatizadas

SuiteQué cubreResultado
Pruebas Foundry (6 archivos)Comportamiento del contrato contra una copia real de Arbitrum y de Ethereum.131 / 131 pasan
· Configuración de plataformaConstructor, los 11 ajustes solo-dueño, topes, traspaso de propiedad en 2 pasos.17 / 17
· Superficie nueva del vaultLas funciones que la versión oficial estrenó o fusionó (pausa, techo/piso, agentes extra).28 / 28
· Auditoría del vault (heredado)Retiros de 4 baldes + polvo, salidas de emergencia, oráculo de gas, guardas de la fábrica, modelo de amenaza.~55 / ~55
· Orientación invertidaEl caso en que la stablecoin es el "token 0" del par (probado en Ethereum).7 / 7
· Fidelidad de interfacesQue las interfaces que usa el contrato coincidan con los contratos reales de Uniswap/Chainlink.6 / 6
Análisis estático (Slither 0.11.4)Todo el repositorio, severidad media o más.113 alertas, 0 reales (falsos positivos conocidos)
Verificación simbólica (Halmos 0.1.13)5 propiedades matemáticas de la contabilidad de comisiones.1 probada formalmente; 4 no terminan por un límite del resolvedor (división por 10.000), cubiertas por fuzz + prueba manual
Simulación de despliegueDespliegue completo + creación de vault + las 4 funciones nuevas, en una copia local de Arbitrum.OK

Ejercicios dirigidos (Pruebas 1–11)

#Qué se probóResultado
1Atomicidad del despliegue — que crear un vault y ponerlo en marcha ocurra en una sola transacción, sin ventana para que alguien se meta en el medio.Confirmado. Además: la fábrica lee los datos de la pool de forma que un contrato malicioso no puede reentrar.
2Ataque "sandwich" / MEV — medir cuánto se pierde si el agente manda un precio mínimo de 0 y un bot intenta aprovecharlo.En una pool profunda: ~$17 de daño sobre un swap de ~$362, y el atacante pierde ~$2.850 en comisiones (no le conviene). Con el precio mínimo bien puesto, el ataque hace revertir la transacción — el rebalanceo falla entero, sin pérdida.
3Resiliencia del oráculo de gas — qué pasa si Chainlink se cae, da un dato viejo, cero, negativo o una ronda incompleta; y qué pasa si lo manipulan a un precio absurdo (ETH = $50 mil millones).Todo modo normal de fallo degrada el reembolso de gas a $0 sin bloquear ninguna función. Un feed manipulado solo puede vaciar el balde de gas, nunca el capital. Acá salió el hallazgo H (un dato imposible: fecha futura).
4Configuración de plataforma completa — que solo el dueño pueda cambiar cada parámetro, que los topes de porcentaje se respeten, y que el traspaso de propiedad exija dos pasos.17 / 17.
5Propagación de la configuración a vaults ya creados — verificar qué parámetros se leen en vivo y cuáles quedan fijos al crear el vault.6 / 6. Comprobado A/B: una plataforma comprometida puede cobrar comisiones de rendimiento futuras, nunca el capital.
6Orientación invertida (stablecoin como token 0) — todo el espejo de la lógica de precios, techo y piso, probado en Ethereum donde USDC es el token 0.7 / 7. Techo y piso disparan en la dirección correcta, opuesta a Arbitrum.
7Enfriamientos y topes — que el intervalo mínimo entre rebalanceos y el tope máximo se respeten, y que el 'forzar rebalanceo' de la plataforma tenga su propio contador y su propio enfriamiento.6 / 6.
8Contabilidad de comisiones — que un retiro parcial pague capital puro al dueño, que una comisión de 0% funcione, que la comisión de creación se cobre bien en un depósito con token de terceros.4 / 4.
9Fuzz (miles de entradas al azar) — que un retiro con 4 porcentajes cualesquiera nunca reviente y mantenga la contabilidad cerrada; que la comisión de creación en tramos dé lo mismo en 1 depósito o en 2.Sin fallos. El redondeo siempre favorece al vault.
10Desbordamientos, redondeo y decimales — que el redondeo del retiro nunca perjudique al vault; que un token volátil de 8 decimales (WBTC) se valúe bien.Acá salió el hallazgo I (un desbordamiento teórico no alcanzable en una pool real). La salida de emergencia es inmune.
11Invariante de solvencia + tokens hostiles + gas — re-chequear 'el saldo real ≥ la suma de todos los baldes' después de cada uno de 12 pasos que tocan TODAS las entradas de capital; probar un token de terceros reentrante / que miente / con comisión de transferencia; medir el gas del peor caso.Sin hallazgos nuevos. La solvencia se mantiene en todo momento; el gas del peor caso queda muy por debajo del límite.
10

Resultados y hallazgos

NivelCantidadQué significa
Crítico0Pérdida directa o robo de fondos.
Alto0Riesgo serio de fondos bajo condiciones plausibles.
Medio0Impacto acotado o difícil de explotar.
Bajo5Sin fondos en riesgo. Casos raros, autoinfligidos o desgaste acotado.
Informativo4Notas de estilo, mantenimiento o robustez. Sin impacto.

Veredicto: sin vulnerabilidades críticas, altas ni medias.

Los hallazgos de bajo riesgo, en criollo

AEl límite de deslizamiento lo controla el agente, no el contrato

Baja · aceptada a propósito

Qué es:configuras un "deslizamiento máximo" para los swaps. Hoy el contratono verifica ese número por su cuenta: confía en el precio mínimo que el agente calcula para cada operación.

Por qué es de bajo riesgo: se midió en una pool real — un ataque cuesta centavos de daño y hace que el atacante pierda mucho más en comisiones. Está acotado por tu tope de rebalanceos, y puedes pausar y retirar en cualquier momento. Se aceptó de forma deliberada y documentada; se cerrará en una versión futura con una referencia de precio on-chain (TWAP).

CEn una configuración de fondeo poco común, un rebalanceo puede rebotar

Baja

Qué es: si un vault se financia 100% por el lado del token volátil y un rebalanceo intenta reinyectar un monto menor a $1, una resta interna del cálculo de comisión puede hacer que esatransacción falle.

Por qué es de bajo riesgo:la transacción es atómica — si falla, no se movió nada, no hay dinero perdido ni trabado. El agente reintenta en el ciclo siguiente con un monto válido. Se corregirá con una resta "saturante" en la próxima versión.

HDependencia del oráculo de gas ante un dato imposible

Baja

Qué es: el contrato usa un oráculo de Chainlink para saber el precio de ETH y reembolsarle el gas al agente. Si ese oráculo alguna vez reportara una fecha en el futuro, el reembolso de gas quedaría bloqueado.

Por qué es de bajo riesgo: un feed real de Chainlink nunca reporta una fecha futura — haría falta un oráculo comprometido, lo que sería un problema para medio DeFi, no solo para AutoRange. Y aunque pasara: tus retiros no dependen del oráculo, solo se pausaría el rebalanceo automático. Corrección de una línea prevista para la próxima versión.

IUn desbordamiento matemático teórico, imposible en un pool real

Informativa

Qué es: un cálculo que alimenta un dato de un evento podría desbordarse si el precio del pool tomara un valor extremo (~13 órdenes de magnitud fuera de lo real).

Por qué no importa: una pool real de Uniswap no puede llegar a ese estado — la liquidez se agota mucho antes. Y la salida de emergencia (rescuePosition) no toca ese cálculo, así que siempre queda una vía de salida. Se endurecerá igual, por prolijidad.

D–GCuatro notas informativas de robustez

Informativa

Validaciones de cordura que el contrato podría reforzar (rangos de configuración, orden techo/piso — ya con protección en la interfaz), el margen de tamaño del contrato, y a qué billetera del propio protocolo se acredita el reembolso de gas. Ninguna afecta la seguridad de tus fondos; todas son candidatas a la próxima versión.

11

Qué NO cubre esta auditoría

En simpleSomos explícitos con el alcance.

  • No es una auditoría formal externa. Es una auto-auditoría de caja blanca rigurosa (metodología, pruebas y análisis de arriba). AutoRange está en proceso de postulación al Uniswap Foundation Security Fund para una auditoría externa.
  • El agente fuera de cadena(el "keeper") tiene su propia revisión (solo lectura, 10 observaciones bajas/informativas). El contrato es la barrera de seguridad real: aunque el agente falle, no puede sacar tu capital.
  • El contrato estándar de Celo es una base de código separada y no forma parte de esta revisión.
  • Riesgos inherentes a proveer liquidez en Uniswap V3(pérdida divergente / "impermanent loss", movimientos de mercado) no son bugs de contrato y no los cubre ninguna auditoría — son parte de la estrategia.
12

Verifícalo tú mismo

En simpleNada de esto requiere confiar en nuestra palabra. El código está publicado y verificado en Arbiscan.

Contratos oficiales — Arbitrum One (chainId 42161)

Bloque de despliegue: 502836514Comisión de rendimiento: 10% (solo sobre ganancias)Comisión de creación: 0,1% (tramo fijo $1 hasta $1000)Tope de depósito: $10.000.000

Cómo comprobar que un vault es auténtico

  1. En la página de tu vault, mira el panel "Auditar este vault": compara en vivo las direcciones que reporta el contrato (pool, gestor de posiciones, router, configuración) contra las oficiales de acá.
  2. La fábrica oficial lleva un registro: isVault(dirección) devuelve true solo para vaults que ella misma creó. Un clon falso da false.
  3. El código fuente de la implementación está verificado en Arbiscan bajo el nombre AutoRangeVaultV1, licencia BSL 1.1.
13

Glosario

En simpleLos términos que aparecen en esta página.

Vault (bóveda)
Contrato que custodia tu depósito y opera tu posición. Cada usuario tiene el suyo.
Sin custodia (non-custodial)
Ni la plataforma ni el agente pueden mover tu dinero a su billetera. Solo tú.
Owner / operator
El dueño (tú: depositas, retiras, configuras) y el agente (solo rebalancea dentro de tus límites).
Rebalancear
Cerrar y volver a abrir la posición centrada en el precio actual, para que siga generando comisiones.
Rango / posición concentrada
En Uniswap V3, tu liquidez trabaja solo entre un precio mínimo y uno máximo que eliges.
Deslizamiento (slippage)
La diferencia entre el precio esperado de un swap y el que se ejecuta de verdad.
Oráculo (Chainlink)
Servicio externo que le dice al contrato un precio confiable (acá, ETH/USD, para calcular el gas).
Fábrica / clon
La fábrica produce copias livianas (clones) del mismo código de vault. Todos comparten la lógica; cada uno guarda su propio dinero.
Invariante de solvencia
Una regla que siempre tiene que cumplirse: el saldo real del contrato nunca es menor que la suma de lo que le debe a cada balde interno.
Auditoría de caja blanca
Revisión hecha con todo el código fuente a la vista, no solo probando desde afuera.
Auditoría asistida por IA
La revisión de código, las pruebas y el análisis los hizo un modelo de IA (Claude Sonnet 5), con el equipo humano dirigiendo el alcance y tomando las decisiones. Las herramientas automatizadas son independientes del modelo.
Análisis estático
Un programa que lee el código sin ejecutarlo y marca automáticamente patrones típicos de bugs. Acá: Slither.
Foundry
El conjunto de herramientas estándar para probar contratos: ejecuta miles de escenarios contra una copia real de la cadena.
Reentrancy
Un ataque clásico donde un contrato se llama a sí mismo a mitad de una operación. El contrato está protegido en todas las funciones que mueven fondos.
Fuzz / verificación simbólica
Fuzz: probar con miles de entradas al azar. Simbólica: una prueba matemática que cubre todaslas entradas posibles a la vez.
Sandwich / MEV
Un bot que rodea tu transacción con dos suyas para sacarte tajada del precio. Se mitiga con un precio mínimo bien puesto en cada swap.
Severidad (crítico → informativo)
Escala estándar. "Crítico" = pérdida de fondos; "informativo" = una nota sin impacto.
TWAP
Precio promedio ponderado por tiempo. Una referencia de precio resistente a manipulación de un bloque; candidato para reforzar el hallazgo A.
BSL 1.1
La licencia del código (Business Source License) — fuente pública, con restricciones de uso comercial que expiran con el tiempo. Es la misma que usa Uniswap.

Documento de la auditoría interna completa: contracts/audit/AUDIT_OFFICIAL_V1.md en el repositorio. Contratos verificables en Arbiscan — ver la sección Verifícalo tú mismo.

¿Dudas? Escríbenos.