# Airdrop ERC20 reivindicável

## Principais Recursos

* **Mecanismo de Auto-Reclamação**: Os usuários podem reivindicar seus tokens diretamente pela interface do contrato.
* **Lista de Permissão (Allowlist) Baseada em Merkle (Opcional)**: Use uma raiz Merkle para permitir que apenas endereços específicos reivindiquem.
* **Suporte a Reivindicação Pública**: Se nenhuma allowlist for definida, qualquer carteira pode reivindicar tokens.
* **Limites de Reivindicação**: Limite quantos tokens cada carteira pode reivindicar.
* **Carimbo de Data/Hora de Expiração**: Defina um horário após o qual os tokens não podem mais ser reivindicados.

## Parâmetros de Implantação Explicados

<figure><img src="https://1903426557-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 implantar o contrato, você deve preencher os campos a seguir:

| Campo                                    | Descrição                                                                                                                                                                                                                         |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Nome**                                 | Um nome legível para humanos para o contrato (por exemplo, “Spring Token Drop”).                                                                                                                                                  |
| **Símbolo**                              | Um nome curto e simbólico (por exemplo, `SPRING`) para rotulagem na interface do usuário.                                                                                                                                         |
| **Imagem**                               | Faça upload de uma imagem ou logotipo para seu airdrop. Aparece na interface do usuário.                                                                                                                                          |
| **Proprietário do Token**                | O endereço que possui os tokens e que aprovará a transferência dos tokens do airdrop. Deve chamar `approve()` se não for o implantador.                                                                                           |
| **Token do Airdrop**                     | Endereço do contrato do token ERC20 a ser distribuído.                                                                                                                                                                            |
| **Quantidade do Airdrop**                | Número total de tokens disponíveis para reivindicação entre todos os usuários.                                                                                                                                                    |
| **Carimbo de Data/Hora de Expiração**    | Timestamp UNIX (em segundos) após o qual os tokens não podem ser reivindicados. Use um conversor (por exemplo, `https://www.unixtimestamp.com/`) para obter o valor correto.                                                      |
| **Limite de Reivindicação por Carteira** | <p>Número máximo de tokens que cada carteira pode reivindicar.<br>- Use <code>0</code> para confiar exclusivamente na allowlist Merkle.<br>- Defina qualquer número para impor um limite rígido por carteira no modo público.</p> |
| **Raiz Merkle**                          | <p>(Opcional) Raiz Merkle gerada a partir de uma allowlist.<br>- Se nenhuma for necessária, insira <code>0x</code> (estilo endereço zero).<br>- Usado para validar reivindicações off-chain e prová-las on-chain.</p>             |
| **Adicionar Lista de Airdrop**           | Ferramenta opcional para fazer upload da sua allowlist e gerar a raiz Merkle diretamente na interface.                                                                                                                            |

Uma vez que todos os campos obrigatórios estejam preenchidos, clique **Implantar Contrato**.

### Usando CSV para lista grande de endereços

Como com outros contratos, o uso de listas CSV também é permitido para um grande número de carteiras.

<figure><img src="https://1903426557-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>

## Como as Reivindicações Funcionam

Após a implantação:

* Se uma **raiz Merkle** for fornecida, os usuários devem **provar** que estão na allowlist submetendo uma prova válida no momento da reivindicação.
* Se nenhuma raiz Merkle for definida (`0x`), **qualquer usuário** pode reivindicar até o valor definido por `Limite de Reivindicação por Carteira`.
* Todas as reivindicações respeitam o **Carimbo de Data/Hora de Expiração**.

## Configuração de Exemplo (Testnet)

| Campo                                | Valor de Exemplo                          |
| ------------------------------------ | ----------------------------------------- |
| Nome                                 | Contrato de teste Airdrop ERC20 Claimable |
| Símbolo                              | CAERC20                                   |
| Proprietário do Token                | `0xAf16774D...BC0fB`                      |
| Token do Airdrop                     | `0xf3ba6c45...0bfa8edd`                   |
| Quantidade do Airdrop                | 10                                        |
| Carimbo de Data/Hora de Expiração    | `1715385600` (11 de maio de 2024)         |
| Limite de Reivindicação por Carteira | 1                                         |
| Raiz Merkle                          | `0x` (sem allowlist)                      |

### Notas

* Se o token não for **de propriedade do contrato**, o **o proprietário do token** deve aprovar o contrato para gastar o total `Quantidade do Airdrop`.
* Você pode reutilizar a `Adicionar Lista de Airdrop` opção para **gerar raízes Merkle** com allowlists atualizadas antes da implantação.
* Ideal para projetos que precisam de **airdrops públicos**, **campanhas de whitelist**, ou **incentivos com tempo limitado**.

## Incorporando o Contrato Airdrop ERC20 Claimable no Seu DApp (DexAppBuilder)

Após implantar e aprovar seu contrato de airdrop de token, você pode torná-lo disponível para os usuários interagirem diretamente do seu DApp. O DexAppBuilder fornece uma forma visual de incorporar uma interface de reivindicação pronta.

#### Passo a Passo: Adicionar Seção de Reivindicação ao Seu App

**1. Criar uma Nova Página**

<figure><img src="https://1903426557-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>

* Vá para **Admin > Gerenciar Apps > Editar App**
* Em `Páginas`, clique **+ NOVA PÁGINA**
* Insira um nome (por exemplo, `Reivindicar Tokens`) e clique **CRIAR**

**2. Adicionar uma Seção**

<figure><img src="https://1903426557-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 da nova página, clique **+ ADICIONAR SEÇÃO**

<figure><img src="https://1903426557-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>

* No modal, role ou pesquise por **DexGenerator Contract** (sob a categoria Web3)
* Clique para selecioná-lo

**3. Selecionar o Contrato de Airdrop Implantado**

<figure><img src="https://1903426557-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>

* Você verá agora uma lista dos seus contratos implantados
* Escolha aquele com o tipo **AIRDROPERC20CLAIMABLE**

<figure><img src="https://1903426557-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>

* Clique nele e visualize a interface de reivindicação

**4. Salvar e Publicar**

* Clique **SALVAR** para adicionar a seção à sua página

<figure><img src="https://1903426557-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 volta ao layout da página, pressione **SALVAR** novamente para publicar as alterações

## A Experiência do Usuário: Reivindicando Tokens

Uma vez publicado, os usuários que visitarem esta página verão:

* **Informações do Token do Airdrop**: Endereço, símbolo e quantidade a reivindicar
* **Quantidade Disponível**: Quanto eles podem reivindicar
* **Informações de Expiração**: Data/hora de expiração se definida
* **Botão CLAIM AIRDROP**: Executa a função de reivindicação

{% hint style="warning" %}
Se o contrato usar uma árvore Merkle (allowlist), o usuário deve estar incluído e fornecer uma prova válida (tratada automaticamente se integrada corretamente).
{% endhint %}

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

* Ative o **VER PÁGINA PÚBLICA** interruptor para tornar a página do contrato acessível a usuários externos.
* Isso facilita o compartilhamento de páginas de reivindicação de airdrop sem incorporação.
