25 de Outubro de 2022
Implante um contrato airdrop para Celo e solicite tokens ERC20 usando a web3 SDK.
Olá, desenvolvedores 🌱
Não posso dizer que tenho um análogo na Web2 para airdrops de criptomoedas. É um método exclusivo para o espaço da Web3 e tem uma reputação para construir comunidades em questão de dias em torno de um produto, protocolo ou causa.
Além de juntar pessoas, os airdrops são tipicamente usados para diferentes razões como marketing/conscientização, recompensar os primeiros contribuidores, gerar buzz e distribuir governança. É um método em grande crescimento para engajamento com usuários e até mesmo deu origem a tokens com capitais de mercado de centenas de milhões de dólares.
Então, quer aprender como construir e implantar um contrato Airdrop na única blockchain destinada a dispositivos móveis, carbono negativa e ReFi (Regenerative Finance ou Finanças Regenerativas) do mundo? A seguir está um tutorial direto ao ponto que o colocará em funcionamento rapidamente!
Aqui estão as etapas que seguiremos 🗒
- ✅Etapa 1: crie sua conta
- ✅Etapa 2: adicione endereços elegíveis
- ✅Etapa 3: gere raiz e provas na Merkle
- ✅Etapa 4: atualize o arquivo de migração
- ✅Etapa 5: implante o contrato airdrop
- ✅Etapa 6: financie o contrato
- ✅Etapa 7: solicite o airdrop
Ao final deste post, você estará apto a implantar um contrato airdrop na Alfajores (rede de testes da Celo), financiar o contrato usando a Alfajores faucet (Torneira da Alfajores) e reinvidicar os tokens ERC-20 usando a web3 SDK.
DICA: este tutorial foi inspirado pela Distribuidora Merkle da Uniswap.
Vamos nessa! 🚀
Antes de começar
Para começar com este tutorial, confira as ferramentas a seguir e configure o código boilerplate no seu ambiente local.
Pré-requisitos
- O Truffle v5.5.10 instalado https://trufflesuite.com/docs/truffle/getting-started/installation/
- Noções básicas de Nodejs
Configuração do ambiente
Abra seu terminal e clone o repositório celo-airdrop.
git clone https://github.com/Jesse-Sawa/celo-airdrop.git
Mude para a pasta do projeto.
cd celo-airdrop
Instale as dependências.
yarn
Uma vez que a instalação for concluída, você está pronto para começar com o tutorial!
Como funcionam os tokens de airdrop com um contrato ERC-20
A proposta de alto-nível de um airdrop é permitir a um conjunto pré-configurado de usuários solicitar tokens baseados em alguns dados históricos. Neste tutorial, implantaremos um contrato airdrop na rede de testes da Celo, que exige dois parâmetros na sua criação;
- O endereço do contrato do token ERC-20 (você pode encontrá-lo em Blockscout).
- A raiz da árvore Merkle que contém os usuários da withelist e os valores correspondentes.
No contexto deste tutorial, usar uma árvore Merkle nos permite verificar se um usuário é elegível para o airdrop sem ter que manter esses dados na cadeia, portanto, economizando recursos computacionais. Apenas armazenando a raiz da árvore Merkle na cadeia, podemos verificar se um usuário específico é elegível, desde que a solicitação seja acompanhada por dados adicionais. Por exemplo, quantidade elegível, provas relacionadas e anexadas na árvore. Você pode aprender mais sobre as árvores Merkle aqui.
✅ Etapa 1: crie sua conta
Financie seu endereço da Celo usando a Alfajores faucet (para gerar um novo par de chaves, execute o nó tutorial/createAccount.js
do diretório raiz).
Depois, crie o arquivo .env
executando o comando a seguir:
cp .env.example .env
Finalmente, cole seu endereço e chave privada como os valores de chave correspondentes no arquivo .env
.
✅ Etapa 2: adicione endereços elegíveis
Vamos adicionar um arquivo json ao projeto contendo uma matriz de endereços que são elegíveis para o airdrop. Essa lista deve conter um mapeamento simples de endereços e valores de token definidos em WEI.
Para os fins deste tutorial, há um exemplo de lista de elegibilidade no diretório do tutorial que você pode usar. Se você decidir usar o exemplo de lista fornecido, nada mais precisa ser feito e você pode seguir para a próxima etapa. Caso contrário, tenha certeza que o arquivo json que você adicionou está no mesmo formato.
✅ Etapa 3: gere raiz e provas na Merkle
Vamos gerar o arquivo contendo a raiz da Merkle e as respectivas provas que serão necessárias para criar o contrato e solicitar os tokens.
No diretório scripts/merkle-tree
há um arquivo chamado generate-merkle-root.ts
. Podemos executar esse script passando o caminho para a lista de elegibilidade especificada na etapa anterior.
Depois que o script for executado com sucesso, outro arquivo chamado generated-merkle-root.json
será criado no diretório raiz, que contém detalhes como a raiz Merkle, endereços elegíveis e respectivas provas etc.
Aqui está o comando a ser executado (do diretório raiz) usando o caminho para o exemplo de lista de elegibilidade:
ts-node scripts/merkle-tree/generate-merkle-root.ts -i tutorial/example-eligibility-list.json
✅ Etapa 4: atualize o arquivo de migração
Agora, vamos trabalhar no arquivo de migração que o Truffle usará para implantar o contrato airdrop.
Pelo bem deste tutorial, eu já criei o arquivo de migração chamado 2_deploy_airdrop.js
no diretório de migrações. Tudo o que resta fazer é preencher os valores.
Neste ponto, se você não olhou para o arquivo Airdrop.sol no diretório de contratos, agora seria um bom momento de fazê-lo. Note que o construtor necessita de dois parâmetros: o endereço do token ERC-20 e a raiz Merkle. Esses são parâmetros imutáveis que são enviados quando o contrato é criado.
Ok, agora abra o arquivo 2_deploy_airdrop.js
no diretório de migrações. Dentro da definição de funções há uma chamada para o método Deployer.deploy, que é o wrapper do Truffle para implantar contratos na rede especificada.
Quando estava criando esse tutorial, eu usei o endereço de token da Celo na Alfajores, mas você pode usar outro token ERC-20, se quiser. Apenas saiba que o contrato terá que ser financiado com esse token.
Defina o primeiro parâmetro para o endereço do token e o segundo parâmetro para a raiz Merkle (obtenha este do arquivo que geramos na etapa 2 generated-merkle-root.json
).
O arquivo deve ficar parecido com isto:
var Airdrop = artifacts.require("Airdrop");
module.exports = function (deployer) {
deployer.deploy(
Airdrop,
"0xF194afDf50B03e69Bd7D057c1Aa9e10c9954E4C9",
"0x7ecb997833ad5774cf633610d0fab6ba8cc826f1e910596b2c3943899fadcdef"
);
};
✅ Etapa 5: implante o contrato airdrop
Nessa etapa, vamos implantar o contrato Airdrop.
Certifique-se de que a chave do endereço que você colocou no arquivo .env
na etapa 1 tenha \$celo suficiente -> precisamos dele para pagar o gas.
Execute o comando a seguir do diretório raiz para implantar o contrato airdrop na Alfajores.
truffle migrate --network alfajores
A saída deve ficar semelhante à seguinte:
Compiling your contracts...
===========================
✓ Fetching solc version list from solc-bin. Attempt #1
✓ Fetching solc version list from solc-bin. Attempt #1
> Everything is up to date, there is nothing to compile.
Starting migrations...
======================
> Network name: 'alfajores'
> Network id: 44787
> Block gas limit: 0 (0x0)
1_initial_migration.js
======================
Deploying 'Migrations'
----------------------
> transaction hash: 0xa6f66270e128cfc1837f7874757029ebfae59bba4ffd7fe5589ed949390f6241
> Blocks: 1 Seconds: 4
> contract address: 0xA2b066d5603d7ef3E9BbAFe113A69A08983dBcB5
> block number: 11160409
> block timestamp: 1651160747
> account: 0x0659f79530111c8b584af5EF499c4AfeD79a04DF
> balance: 15.994621759219476753
> gas used: 186963 (0x2da53)
> gas price: 0.5 gwei
> value sent: 0 ETH
> total cost: 0.0000934815 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.0000934815 ETH
2_deploy_airdrop.js
===================
Deploying 'Airdrop'
-------------------
> transaction hash: 0xec7fedd24acad3d7efdcccb7e481c163393257ad87ba0bb1db5ae2c3bab34828
> Blocks: 0 Seconds: 0
> contract address: 0x6cA1217BdA63ff36c37F48516803015138D66cE6
> block number: 11160411
> block timestamp: 1651160757
> account: 0x0659f79530111c8b584af5EF499c4AfeD79a04DF
> balance: 15.994376757219476753
> gas used: 446869 (0x6d195)
> gas price: 0.5 gwei
> value sent: 0 ETH
> total cost: 0.0002234345 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.0002234345 ETH
Summary
=======
> Total deployments: 2
> Final cost: 0.000316916 ETH
(Não limpe seu terminal 👀)
✅ Etapa 6: financie o contrato
Nesse ponto, nós:
Criamos uma árvore Merkle com os endereços e valores correspondentes
Implantamos um contrato Airdrop na Alfajores com a correspondente raiz Merkle e o endereço do token. Em seguida, precisamos financiar o contrato. Obtenha o endereço do contrato da saída do comando que foi executado na etapa 4.
No exemplo acima, seria:
0x6cA1217BdA63ff36c37F48516803015138D66cE6
Se você estiver usando um token que não seja Celo ou uma das suas stable coins (moedas estáveis), precisará enviar uma quantia suficiente a esse endereço para receber esse airdrop. Caso contrário, vá de volta para a Alfajores faucet e financie o endereço do contrato.
DICA: certifique-se de confirmar que o endereço do contrato tem os fundos visitando blackscout.
✅ Etapa 7: solicite o airdrop
Agora, para a parte divertida. 😎
Para solicitar cada endereço especificado na lista de elegibilidade, execute o seguinte comando com o caminho para o arquivo generate-merkle-root.ts
:
ts-node scripts/contract-interaction/claim-airdrop.ts -i generated-merkle-root.json
Para solicitar apenas um endereço especificado, basta adicionar o sinalizador -a
, seguido do endereço. Por exemplo:
ts-node scripts/contract-interaction/claim-airdrop.ts -i generated-merkle-root.json -a 0x6cA1217BdA63ff36c37F48516803015138D66cE6
Agora você pode navegar para o bockscout, colar o endereço dos tokens que você solicitou e ver a transação que solicitou os tokens!
Parabéns 🎉
Nesse tutorial, examinamos o que é necessário para implantar e solicitar um airdrop na Celo em um nível muito alto.
Porém, para um ambiente de nível de produção, existem algumas coisas que devemos alterar/adicionar. Por exemplo, o design e implementação de uma função de reembolso de token, que pode ser invocada pelo proprietário do contrato. As equipes geralmente implementam um reembolso automático de tokens não solicitados depois de algum tempo para evitar perdas desnecessárias.
Além disso, usuários geralmente preferem uma interface de usuário agradável em vez de executar scripts via terminal. Isso significa construir a transação para o usuário se ele for elegível para o airdrop.
Por fim, existem incontáveis possibilidades de fazer airdrops de tokens. Este é meramente um exemplo de um. Se você tiver algum comentário, por favor, compartilhe! Espero que você tenha gostado!
Esse artigo foi escrito por Jesse Sawa e traduzido por Isabela Curado Nehme. Seu original pode ser lido aqui.
Top comments (0)