WEB3DEV

Cover image for Como Criar Um Novo Token e Pool De Liquidez na Uniswap
Bernardo Perelló
Bernardo Perelló

Posted on

Como Criar Um Novo Token e Pool De Liquidez na Uniswap

Este artigo é uma tradição de Bernardo Perelló, o original feito por JAMES em 16/06/2021 pode ser encontrado aqui

Neste artigo eu vou criar um novo token e torná-lo disponível para transferência via transação descentralizada. Estarei implementando um contrato inteligente solidity no intuito de emitir um token ERC20 na Ethereum e configurar uma pool de liquidez na Uniswap.

Criar Um Novo Token E Pool De Liquidez [Vídeo]
Contrato Inteligente De Token ERC20
Implantando Um Novo Token na Ethereum
Cunhando Tokens Usando O Console Truffle
Como Configurar Um Pool De Liquidez Uniswap
Transferindo ETH Para Nosso Novo Token
Conclusão E Análise de Custos

Criar Um Novo Token E Pool De Liquidez [Vídeo]

Esse vídeo fornece uma visão geral do processo de criar um novo token e configurar uma pool de liquidez. Mais detalhes e partes dos códigos abaixo.

James On YouTube

Contrato Inteligente De Token ERC20

Primeiro vamos tirar um tempo para nos familiarizar com o contrato inteligente que será usado para criar um token de criptomoeda.

Neste tutorial, usarei os modelos de contratos inteligentes do OpenZeppelin. O contrato ERC20 tem sido muito utilizado e já foi auditado por diversas equipes.

Primeiro vamos tentar importar e mexer um dos contrato no IDE remix do https://remix.ethereum.org

Crie um novo ambiente de trabalho e adicione um arquivo nomeando-o de myToken.sol com o seguinte código.

pragma solidity >=0.7.0 <0.9.0;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol";

contract myToken is ERC20PresetMinterPauser {
    constructor() ERC20PresetMinterPauser("myToken", "MYT") {
    }
}
Enter fullscreen mode Exit fullscreen mode

Perceba que nós podemos importar contratos diretamente do Github no Remix mas não, atualmente, no Truffle que estaremos usando mais à frente. Existem duas variáveis enviadas à função de construção. A primeira é um nome para o token e a segunda é um símbolo isto é “Ethereum”, “ETH” ou “Bitcoin”, “BTC”.

Agora vamos selecionar a aba do “Solidity Compiler” pelo menu à esquerda e compilar o contrato. Então, selecione “T_est & Run Transactions_” e faça o deploy do contrato myToken.sol.

Uma vez implantado (deployed) nós podemos interagir com o nosso contrato a fim de emitir tokens, consultar saldos e etc.

Image description
Tire um tempo para se familiarizar com as funções disponíveis dentro de um contrato de token ERC20.

Implantando Um Novo Token Na Ethereum

Para o próximo passo nós precisaremos de algumas ferramentas de configuração.
NodeJS – Um ambiente de execução Javascript
Git – Uma ferramenta de gerenciamento de repositório de código
Truffle – Uma ferramenta de comando de linha para a migração de contratos inteligentes
Infura API Key – Fornece ponto de acesso para a rede Ethereum (gratuito)
Metamask – Uma carteira que podemos usar para gerenciar chaves e saldos

Image description

Eu estarei implementando à rede de teste Ropsten neste tutorial, mas o método é exatamente o mesmo para implementar na rede real Ethereum. Ao configurar a Metamask, fique atento a sua frase mnemônica (também conhecida como frase secreta) a qual estaremos usando mais a frente, troque a rede para “Rede de Teste Ropsten”, e então copie e cole o seu endereço (chave pública que se inicia com 0x……., jamais utilize sua frase secreta publicamente) na “faucet” em https://faucet.ropsten.be/ para conseguir alguns ETH falsos gratuitamente.

Uma vez que nós temos ETH (falso) em nossa carteira, nós podemos usá-lo para pagar os custos de transação ao fazer o “deploy” dos contratos.

Agora vamos criar um novo diretório chamado myToken e abrir prompt de comando dentro deste diretório.

Nossa intenção é inicializar um novo código boilerplate truffle com o comando:

truffle init
Enter fullscreen mode Exit fullscreen mode

Em seguida nós iremos clonar o contrato inteligente Open Zeppelin localmente

git clone https://github.com/OpenZeppelin/openzeppelin-contracts.git
Enter fullscreen mode Exit fullscreen mode

Finalizando, vamos instalar a ferramenta de gerenciamento de carteira usada no arquivo de configuração Truffle.

npm install @truffle/hdwallet-provider
Enter fullscreen mode Exit fullscreen mode

Vamos agora até o diretório myToken/contracts, delete migrations.sol e crie um novo arquivo com o nome de myToken.sol

Copie o código que usamos anteriormente com a linha de importação substituída com a localização do diretório local do contrato Open Zeppelin.

pragma solidity >=0.7.0 <0.9.0;

import './../openzeppelin-contracts/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol';

contract myToken is ERC20PresetMinterPauser {
    constructor() ERC20PresetMinterPauser("myToken", "MYT") {
    }
}
Enter fullscreen mode Exit fullscreen mode

Indo agora para o diretório de migração, delete o arquivo 1_initial_migration.js e crie um novo nomeado 1_deploy.js com o seguinte código

const myToken = artifacts.require('myToken');
module.exports = function(deployer) {
    deployer.deploy(myToken);
};
Enter fullscreen mode Exit fullscreen mode

Então, vamos editar o myToken/truffle-config.js

Nós precisamos substituir os dados das seguintes linhas colocando nossa chave API e nossa frase secreta. Perceba que a frase secreta fornece o acesso completo à sua carteira de criptomoedas, então isso é bem delicado. Se for usar a rede principal, considere usar uma “variável de ambiente” ou arquivo secreto para guardar esse conteúdo.

const HDWalletProvider = require('@truffle/hdwallet-provider');
const infuraKey = '23423423424242342342';

const mnemonic = 'hello world these are my secret words';
Enter fullscreen mode Exit fullscreen mode

Por volta da linha 60 na sessão de rede, nós queremos tirar a Robsten e configurar no provedor com nossa chave API e nossa frase secreta

ropsten: {
  provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/${infuraKey}`),
  network_id: 3,
  gas: 5500000,
  confirmations: 2,
  timeoutBlocks: 200,
  skipDryRun: true
}
Enter fullscreen mode Exit fullscreen mode

Encerrando, nós preparamos nosso compilador para a versão mais recente, na linha 83 aproximadamente.

version: "0.8.4",
Enter fullscreen mode Exit fullscreen mode

Está tudo configurado e deveríamos estar prontos para fazer o deploy do nosso contato.

truffle compile
truffle console --network ropsten
migrate
Enter fullscreen mode Exit fullscreen mode

Nós devemos ver o contrato implantado na rede de teste da Ropsten e na saída teremos um endereço de contrato que foi fornecido. Vamos copiar e colar esse contrato no explorer Etherscan da Ropstein. Aqui tem um que eu havia feito o deploy anteriormente:
https://ropsten.etherscan.io/address/0x1CAD653E77465bEF6580C8D637DE767E782Fa326

Cunhando Tokens Usando O Console Truffle

Enquanto nós estivermos no console Truffle, nós podemos interagir com os contratos já implantados. Primeiro vamos criar uma instância deste contrato usando.

_const instance_ = await myToken.deployed();
Enter fullscreen mode Exit fullscreen mode

Em seguida vamos tentar criar tokens para um endereço, então copie e cole a o endereço da chave pública da Matemask ou a saída do Truffle no respectivo comando:

instance.mint('0x...','1000000000000000000000');
Enter fullscreen mode Exit fullscreen mode

Note que ambos os campos são strings entre aspas. E também, o valor é a denominação mais baixa, e por padrão, o contrato é configurado para 18 decimais para que emita 1000 tokens inteiros. Se nós colocarmos nosso endereço de chave pública no ethernet explorer da Ropsten, nós veremos esses 1000 tokens em nossa conta. Podemos também transferir e checar o saldo a partir do Truffle.

instance.transfer('0x...','500000000000000000000');
instance.balanceOf('0x...');
Enter fullscreen mode Exit fullscreen mode

Para mostrar esses tokens na Metamask, vá até Ativos seguido de Adicionar Token, então cole o endereço do contrato.

Então para resumir nós temos dois endereços:

• Um endereço de chave pública, que é nosso endereço pessoal que nós configuramos na MetaMask para movimentar fundos e pagar taxas de transações. Ele também possui direito de propriedade exclusivo ao contrato do token que nos permite a emissão de novos tokens e a realização de outras tarefas administrativas.
• Um endereço de contrato onde o token foi implantado que é usado para acessar as funções deste contrato. Você pode pensar no contrato como o local onde seu novo token se encontra na rede Ethereum. Ele será utilizado quando formos configurar uma pool de liquidez.

Como Configurar Uma Pool De Liquidez na Uniswap

Configurar uma pool de liquidez permite usuários adquirirem nosso novo token em troca de seus fundos. Neste exemplo nós vamos configurar uma pool usando o Ethereum como o ativo base, contudo, poderíamos usar USDT ou qualquer outro ativo compatível a ERC20.

Vamos começar indo até https://app.uniswap.org/ para escolher a rede Ropsten no canto superior direito, em seguida selecione Pool no menu superior seguido de More > Create a Pool

Precisamos então colocar nosso endereço de contrato do token e configurar o ativo base para o ETH.

Eu vou utilizar a seguinte configuração para adicionar a liquidez inicial.

Image description

Agora que eu configurei a taxa a 0,3%, que é o padrão para tokens. Stablecoins normalmente usam 0,05% enquanto 1% é usado para “ativos exóticos”, que é justamente quando a baixa liquidez pode significar que a perda temporária excede as receitas de taxas a níveis bem baixos.

Eu coloquei o preço inicial do MYT a 0,001 ETH, e o valor fica totalmente a cargo do usuário (você) que estiver implantando a pool.

Também defini uma faixa de preço de liquidez concentrada, limitando a liquidez que estou fornecendo a um preço máximo de 1 ETH por 1 MYT. Há um equilíbrio a ser obtido aqui, onde você deseja concentrar a liquidez o máximo possível, mas para um novo ativo, se o preço sair do intervalo, corre o risco de se tornar sem liquidez. Uma solução seria configurar uma margem grande com a metade do capital e então preparar uma segunda movimentação para uma margem liquidez bem mais apertada e gerenciar ativamente essa margem.

Finalmente nós preparamos o valor de depósito para os dois tokens. Quanto mais capital você puder implantar no ativo base, menor variação de preço você terá quando as transações ocorrerem. Para criar uma pool _de liquidez nós devemos primeiro Aprovar a Transação do _token MYT para então adicionar a pool.

Trocando ETH Por Nosso Novo Token

Podemos agora trocar tokens usando a Uniswap para trocas entre ETH e nosso novo token MYT.

Image description

Se um novo usuário for até a Uniswap, ele precisará colocar o endereço de contrato do token, caso contrário, o token não estará visível na lista de tokens da Uniswap. Por padrão, a Uniswap v3 está apenas mostrando a lista dos 28 principais tokens na qual é bem difícil conseguir ser incluído. Provavelmente a lista mais fácil para conseguir ser incluído é a lista do CoinGecko que por sua vez inclui todos os tokens listados no site e pode ser ativado usando o botão seletor. Muitos usuários já possuem esse botão ativado.

Você pode requerer que seu token esteja na lista do CoinGecko aqui: https://docs.google.com/forms/d/e/1FAIpQLSdW6tbzcnfMNg3KLTCHbigVTjJhXoNU-xeu9Y03PKqiUVRM7A/viewform (Veja que essa é a forma correta na data de Junho de 2021, verifique no site oficial para garatir que ainda é o método de inclusão recomendado).

Conclusão E Análise de Custo

Isso demonstra o quão simples se tornou a criação de token de criptomoeda e torná-lo negociável usando uma exchange descentralizada.

O principal custo envolvido é com o ativo base da pool de liquidez. Não há resposta exata para qual o melhor gasto para começar bem, isso depende do volume de transações esperado e o quanto de suprimento e demanda terá disponível para esse novo token. Em uma estimativa, eu acredito que 5 vezes o volume de transações diárias seria um bom valor para começar, mas cada pool será diferente.

Os custos de implantação do contrato e configuração da pool de liquidez foram os seguintes:

O deploy do Token ERC20 custou 0.0649833 ETH

O custo da pool de liquidez custou 0.031548 ETH

Isto é, com o preço do Gas configurado a 20 Gwei. O preço do Gas na rede Ethereum costumam variar bastante, então confira as taxas atuais em https://etherscan.io/gastracker
Espero que esse tutorial tenha provado seu valor e ajudado a compreender como novos tokens são criados e negociados.

Interessado em aprender mais sobre blockchain, negócios online, marketing de performance e desenvolvimento? Confira meu canal no YouTube e me siga no Twitter para acompanhar atualizações e novos conteúdos.

https://www.youtube.com/c/JamesBachini?sub_confirmation=1
https://twitter.com/james_bachini

Se você gostou desses recursos, poderia ajudar a compartilhar este conteúdo nas mídias sociais e enviá-lo para quem você acredita que pode se beneficiar deles.

Obrigado.

Top comments (0)