# Airdrop ERC20 Reclamable

## Características clave

* **Mecanismo de Auto-Reclamo**: Los usuarios pueden reclamar sus tokens directamente desde la interfaz del contrato.
* **Lista de Permitidos basada en Merkle (Opcional)**: Usa una raíz Merkle para permitir que solo direcciones específicas reclamen.
* **Soporte de Reclamo Público**: Si no se define una lista de permitidos, cualquier cartera puede reclamar tokens.
* **Límites de Reclamo**: Limita cuántos tokens puede reclamar cada cartera.
* **Marca de Tiempo de Expiración**: Define un momento después del cual los tokens ya no pueden ser reclamados.

## Parámetros de Despliegue Explicados

<figure><img src="https://3072554521-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWrjgYUyO4ch1fBehrMEq%2Fuploads%2FzwGht9PFeSzcYiPyHG4o%2Fimage.png?alt=media&#x26;token=ae3a90ef-727d-4da7-98f3-406101b1378b" alt=""><figcaption></figcaption></figure>

Antes de desplegar el contrato, debes completar los siguientes campos:

| Campo                             | Descripción                                                                                                                                                                                                                                 |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nombre**                        | Un nombre legible para el contrato (por ejemplo, “Spring Token Drop”).                                                                                                                                                                      |
| **Símbolo**                       | Un nombre corto y simbólico (por ejemplo, `SPRING`) para el etiquetado en la interfaz.                                                                                                                                                      |
| **Imagen**                        | Sube una imagen o logotipo para tu airdrop. Aparece en la interfaz de usuario.                                                                                                                                                              |
| **Propietario del Token**         | La dirección que posee los tokens y aprobará la transferencia de los tokens del airdrop. Debe llamar a `approve()` si no es el desplegador.                                                                                                 |
| **Token del Airdrop**             | Dirección del contrato del token ERC20 que se distribuirá.                                                                                                                                                                                  |
| **Cantidad del Airdrop**          | Número total de tokens disponibles para reclamar entre todos los usuarios.                                                                                                                                                                  |
| **Marca de Tiempo de Expiración** | Marca de tiempo UNIX (en segundos) después de la cual no se pueden reclamar tokens. Usa un convertidor (por ejemplo, `https://www.unixtimestamp.com/`) para obtener el valor correcto.                                                      |
| **Límite de Reclamo por Cartera** | <p>Número máximo de tokens que cada cartera puede reclamar.<br>- Usa <code>0</code> para depender únicamente de la lista de permitidos Merkle.<br>- Establece cualquier número para imponer un tope rígido por cartera en modo público.</p> |
| **Raíz Merkle**                   | <p>(Opcional) Raíz Merkle generada a partir de una lista de permitidos.<br>- Si no se necesita, ingresa <code>0x</code> (estilo dirección cero).<br>- Usada para validar reclamos fuera de la cadena y probarlos en la cadena.</p>          |
| **Agregar Lista de Airdrop**      | Herramienta opcional para subir tu lista de permitidos y generar la raíz Merkle directamente dentro de la interfaz.                                                                                                                         |

Una vez que todos los campos requeridos estén completos, haz clic **Desplegar Contrato**.

### Uso de CSV para listas grandes de direcciones

Al igual que con otros contratos, también se permite el uso de listas CSV para un gran número de carteras.

<figure><img src="https://3072554521-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWrjgYUyO4ch1fBehrMEq%2Fuploads%2Fhghw9Cr9DLaszh8gamX1%2Fimage.png?alt=media&#x26;token=815eda32-70de-42b3-ac3f-d12fdacf576f" alt=""><figcaption></figcaption></figure>

## Cómo Funcionan los Reclamos

Después del despliegue:

* Si se proporciona una **raíz Merkle** los usuarios deben **probar** que están en la lista de permitidos presentando una prueba válida al momento del reclamo.
* Si no se establece una raíz Merkle (`0x`), **cualquier usuario** puede reclamar hasta el valor establecido por `Límite de Reclamo por Cartera`.
* Todos los reclamos respetan el **Marca de Tiempo de Expiración**.

## Configuración de Ejemplo (Testnet)

| Campo                         | Valor de Ejemplo                            |
| ----------------------------- | ------------------------------------------- |
| Nombre                        | Contrato de prueba Airdrop ERC20 Reclamable |
| Símbolo                       | CAERC20                                     |
| Propietario del Token         | `0xAf16774D...BC0fB`                        |
| Token del Airdrop             | `0xf3ba6c45...0bfa8edd`                     |
| Cantidad del Airdrop          | 10                                          |
| Marca de Tiempo de Expiración | `1715385600` (11 de mayo de 2024)           |
| Límite de Reclamo por Cartera | 1                                           |
| Raíz Merkle                   | `0x` (sin lista de permitidos)              |

### Notas

* Si el token **no es propiedad del contrato**, el **el propietario del token** debe aprobar que el contrato gaste el total `Cantidad del Airdrop`.
* Puedes reutilizar la `Agregar Lista de Airdrop` opción para **generar raíces Merkle** con listas de permitidos actualizadas antes del despliegue.
* Ideal para proyectos que necesiten **airdrops públicos**, **campañas de lista blanca**, o **incentivos limitados en el tiempo**.

## Incrustando el Contrato Airdrop ERC20 Reclamable en Tu DApp (DexAppBuilder)

Después de desplegar y aprobar tu contrato de airdrop de tokens, puedes ponerlo a disposición para que los usuarios interactúen directamente desde tu DApp. DexAppBuilder proporciona una forma visual de incrustar una interfaz de reclamo ya lista.

#### Paso a Paso: Agregar Sección de Reclamo a Tu App

**1. Crear una Nueva Página**

<figure><img src="https://3072554521-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWrjgYUyO4ch1fBehrMEq%2Fuploads%2FmrPoYJNhkn8UzodwEo5k%2Fimage.png?alt=media&#x26;token=5e7eeab5-91c2-4b72-983f-385f714c71d8" alt=""><figcaption></figcaption></figure>

* Ve a **Admin > Gestionar Apps > Editar App**
* Bajo `Páginas`, haz clic **+ NUEVA PÁGINA**
* Introduce un nombre (por ejemplo, `Reclamar Tokens`) y haz clic **CREAR**

**2. Agregar una Sección**

<figure><img src="https://3072554521-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWrjgYUyO4ch1fBehrMEq%2Fuploads%2FQ08DszmiPORRYrb6xEEq%2Fimage.png?alt=media&#x26;token=f870250d-cf85-48ec-bcdb-b9ddd23afea0" alt="" width="563"><figcaption></figcaption></figure>

* Dentro de la nueva página, haz clic **+ AÑADIR SECCIÓN**

<figure><img src="https://3072554521-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWrjgYUyO4ch1fBehrMEq%2Fuploads%2F50IGLOMFVEiGuCVWckUv%2Fimage.png?alt=media&#x26;token=c5e4b41c-2142-4d1f-a0cc-7729b9990923" alt="" width="375"><figcaption></figcaption></figure>

* En el modal, desplázate o busca **Contrato DexGenerator** (bajo la categoría Web3)
* Haz clic para seleccionarlo

**3. Seleccionar el Contrato de Airdrop Desplegado**

<figure><img src="https://3072554521-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWrjgYUyO4ch1fBehrMEq%2Fuploads%2FC9xar3jZFyLpuNNAy3DH%2Fimage.png?alt=media&#x26;token=86af4b5f-fadc-4c59-bba0-e6721dbe35a2" alt="" width="563"><figcaption></figcaption></figure>

* Ahora verás una lista de tus contratos desplegados
* Elige el que tenga el tipo **AIRDROPERC20CLAIMABLE**

<figure><img src="https://3072554521-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWrjgYUyO4ch1fBehrMEq%2Fuploads%2Fmlehw2k3E9bpsxJDTpTi%2Fimage.png?alt=media&#x26;token=b2904fc2-dc20-42ef-aabb-282146a8b18e" alt=""><figcaption></figcaption></figure>

* Haz clic en él y previsualiza la interfaz de reclamo

**4. Guardar y Desplegar**

* Haz clic **GUARDAR** para añadir la sección a tu página

<figure><img src="https://3072554521-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FWrjgYUyO4ch1fBehrMEq%2Fuploads%2FvukQLqm9n0vOjaE2WHcs%2Fimage.png?alt=media&#x26;token=12a94856-176e-4b71-834f-ef6b9ffb5ce9" alt=""><figcaption></figcaption></figure>

* De vuelta en el diseño de la página, presiona **GUARDAR** de nuevo para publicar los cambios

## La Experiencia de Usuario: Reclamar Tokens

Una vez publicado, los usuarios que visiten esta página verán:

* **Información del Token del Airdrop**: Dirección, símbolo y cantidad a reclamar
* **Cantidad Disponible**: Cuánto pueden reclamar
* **Información de Expiración**: Fecha/hora de expiración si está establecida
* **Botón RECLAMAR AIRDROP**: Ejecuta la función de reclamo

{% hint style="warning" %}
Si el contrato usa un árbol Merkle (lista de permitidos), el usuario debe estar incluido y proporcionar una prueba válida (manejado automáticamente si está integrado correctamente).
{% endhint %}

#### Paso Final Opcional: Publicar Página Pública

* Activa el **VER PÁGINA PÚBLICA** interruptor para hacer la página del contrato accesible a usuarios externos.
* Esto facilita compartir páginas públicas de reclamo de airdrops sin incrustar.
