Olá a todos! Há muito tempo sem postagem, mas estou de volta com um simples tutorial para uma Bridge ERC20 gerenciada por um script do Node.js.
O que você precisa para completar este tutorial?
- Node.js instalado em sua máquina;
- Metamask - uma carteira novinha em folha;
- Fundos de teste para BSC Testnet (rede de teste) e Polygon Mumbai;
O que é uma Ponte?
"Uma ponte de blockchain é uma ferramenta que permite a portabilidade de bens de uma blockchain para outra, resolvendo um dos principais pontos de dor dentro das blockchains - a falta de interoperabilidade.
Uma vez que os ativos da blockchains muitas vezes não são compatíveis entre si, as pontes criam derivados sintéticos que representam um ativo de outra blockchain". - CoinDesk
A arquitetura
Para criar uma ponte ERC20, precisaremos implantar 4 contratos inteligentes e um script Node.js que ouvirá os eventos emitidos e executará ações usando uma "carteira quente" (hot wallet).
- Contrato inteligente simples ERC20 que será implantado na BSC Testnet e na Polygon Mumbai.
- Um contrato inteligente personalizado que receberá e enviará os tokens ERC20. Além disso, isto será implantado em ambas as redes.
- Script do Node.js que ouvirá os eventos de transferência emitidos pelos tokens de contratos inteligentes em ambas as cadeias.
O código
Para implantar os contratos inteligentes em ambas as cadeias, você pode usar o Remix - Ethereum IDE. Mas para fazer isso, você precisará 1) Adicionar ambas as redes em sua Metamask; 2) Solicitar fundos da faucet (torneira) em ambas as redes: Faucet BSC Testnet & Faucet Polygon Mumbai;
1. Contrato inteligente ERC20
2. Contrato inteligente personalizado
Agora precisaremos de um contrato inteligente personalizado onde os usuários enviarão tokens na Cadeia A a fim de recebê-las na Cadeia B.
Agora, deixe-me explicar cada linha deste contrato inteligente. (Se você é um desenvolvedor experiente de Solidity, você pode pular para o terceiro passo depois de ter implantado este contrato inteligente em ambas as cadeias).
Linhas 1 e 3: A licença SPDX e a versão de Solidity que estamos utilizando.
Linha 6-10: Declaramos a interface IERC20. Precisamos disso para poder interagir com nosso token ERC20.
Linha 12-18: Declaramos o contrato inteligente e as variáveis necessárias. Em nosso caso, temos 1) A carteira quente - que é uma EOA; 2) O endereço do token que você implantou recentemente.
Linha 21-24: O construtor - um pedaço de código que é executado quando você implanta o contrato inteligente. Ali damos valores ao hotWallet e ao myToken (objeto IERC20).
Linha 28: Declare um evento que será emitido quando o contrato inteligente transferir os tokens para um endereço. Para emitir um evento, você consome gás. É uma boa prática tê-los e muitos auditores vão pedir esse aspecto, mas você pode evitá-los em funções internas.
Linha 32-34: O modificador onlyHotWallet. Se uma função estiver usando um modificador, o pedaço de código que está escrito no modificador será executado antes do corpo da função. Em nosso caso, nós o usamos para a função "sendTokens" e exigimos que o remetente msg.sender (que chama a função) seja igual ao endereço da carteira quente.
Linha 37-45: A função "sendTokens" - aceita dois parâmetros como entrada: 1) _to - o endereço do receptor e 2) _amount - a quantidade que enviamos. A primeira linha da função exige que o saldo do contrato inteligente para nosso token ERC20 seja maior ou igual à quantia que enviamos.
Depois disso, chamamos a função "approve" e permitimos que o receptor gaste os tokens.
Finalmente, enviamos os tokens do contrato inteligente e emitimos o evento.
3. O script Node.js
Explicação do código:
Linhas 1-2: Importamos os módulos "ethers e "dotenv".
Linhas 5-15: Buscamos as variáveis do arquivo .env
Linhas 18-21: Importamos a ABI (Aplicação de interface Binária) para nossos contratos inteligentes. Você pode encontrar os arquivos lá.
Linha 24: O início da função principal.
Linhas 27-35: Conectar nossa aplicação à carteira quente em ambas as redes.
Linhas 38-44: Conecte nossa carteira quente ao contrato inteligente personalizado em ambas as redes.
Linhas 47-53: Conecte nossa carteira quente ao token do contrato inteligente em ambas as redes.
Linhas 56-74: Criamos uma função que chama o método "sendTokens" a partir de nosso contrato inteligente personalizado na BSC Testnet.
Linhas 77-95: Criamos uma função que chama o método "sendTokens" a partir de nosso contrato inteligente personalizado na Polygon Mumbai.
E agora, A PARTE INTERESSANTE
Linhas 98-129: Estamos ouvindo os eventos de "Transferência" que foram emitidos por nosso contrato inteligente ERC20, consultamos os dados desse evento e verificamos se o receptor é o contrato inteligente personalizado - se este for o caso, enviamos os tokens do contrato inteligente.
Basicamente, se alguém quiser conectar seu token erc20 da BSC Testnet àao Polygon Mumbai, precisa enviar seus tokens ao contrato inteligente personalizado implantado na BSC Testnet, enquanto seu script estiver rodando em um servidor ou em sua máquina local.
Requisito: Para que tudo funcione bem, você precisa aprovar o contrato inteligente para usar os tokens que lhe foram enviados (você pode fazer isso chamando a função approve do contrato inteligente ERC20) e enviar os tokens para o contrato inteligente.
O código fonte: https://github.com/DRIVENpol/bridge
Se você quiser implantar o bot, você simplesmente precisa:
- Implantar o contrato inteligente ERC20 em ambas as cadeias
- Implantar o contrato inteligente personalizado em ambas as cadeias
- Criar uma nova pasta e baixar o código a partir do meu GitHub
- Abrir o terminal e navegar até o diretório do projeto. Depois disso, execute npm install
- Criar um arquivo .env e alterar as variáveis
- Executar node bot.js em seu terminal
Voilà!
Se você estiver procurando uma equipe de desenvolvedores para seu projeto DeFi ou se precisar de auditorias de segurança para seus contratos inteligentes, não hesite em me contatar no Twitter em https://twitter.com/polthedev ou por e-mail: [email protected].
Artigo escrito no por Paul Socarde . A versão original pode ser encontrada aqui. Traduzido e adaptado por Dimitris Calixto.
Latest comments (0)