Integração com Brave Wallet via Web3.js - Parte 2

Web3 e Blockchain

Integração com Brave Wallet via Web3.js - Parte 2

Luiz Duarte
Escrito por Luiz Duarte em 27/08/2024
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

Há algum tempo eu escrevi a primeira parte deste tutorial, sobre como fazer integração do seu site ou aplicação web com a carteira de criptomoedas Brave Wallet, usando apenas JavaScript.

Isso é especialmente útil para quem estiver criando um dapp (aplicação distribuída), aplicação para web3 ou apenas querendo integrar a Brave Wallet como meio de pagamento cripto.

No entanto, após a publicação da primeira parte, a dúvida número 1 da minha audiência foi: como lidar como outros tokens que não sejam BNB? Isso porque como conectamos na BSC (Binance Smart Chain), a criptomoeda dela é o BNB e qualquer saldo, transação, etc estará cotado nativamente nesta moeda. O mesmo vale para o Ether (ETH) se estivéssemos conectados na rede Ethereum ou o Bitcoin (BTC) se estivéssemos conectados na rede de mesmo nome.

Para entender melhor como fazer e consultar transações de outros tokens, valem algumas explicações antes.

#1 – Contratos Inteligentes

Quando o Bitcoin surgiu em 2008 para 2009 o seu foco, conforme consta no seu paper original, era ser um dinheiro eletrônico seguro e confiável P2P, ou seja, sem intermediários. O seu foco é e possivelmente sempre será ser “apenas” uma moeda digital, o que chamamos de criptomoeda 1.0.

Quando Vitalik Buterim criou o Ethereum em 2014 para 2015 ele já pensava diferente. Ele viu na tecnologia blockchain a possibilidade de construir uma plataforma. Nesta plataforma, qualquer um poderia criar algoritmos que rodariam de maneira distribuída e descentralizada, incluindo novas criptomoedas, ou tokens, como passariam a ser chamadas as moedas não-nativas de uma blockchain. A esses algoritmos deu-se o nome de contratos inteligentes ou smart contracts.

Na prática, um contrato inteligente é como se fosse uma classe Java ou C#, mas que roda na blockchain, ou seja, sem um endereço central e específico, sem estar atrelado a um servidor. O programador do contrato inteligente faz deploy dele na blockchain e então o algoritmo passa a estar disponível publicamente, sendo executado por uma máquina virtual (EVM no caso da Etehereum) toda vez que requisitado e gravando os dados de suas transações na própria blockchain (o que incorre no famoso custo de gás). Isso é o que chamamos de criptomoeda 2.0 ou de segunda geração.

Assim, contei toda essa história para lhe ajudar a entender que, qualquer que seja a atividade que você deseje fazer em uma blockchain 2.0 em diante que não seja consultar ou fazer transações com sua criptomoeda nativa, será feita através de contratos inteligentes. E isso responde, na teoria, a pergunta mais comum que recebi no tutorial anterior que é como consultar saldo e fazer transferência de outros tokens que o usuário possa ter na Brave Wallet: através de contratos inteligentes.

Curso Web3 para Iniciantes

#2 – Contratos de Tokens

O tipo de smart contract mais comum que temos são os de novos tokens. Um contrato de token é um smart contract que atende a um padrão comum como ERC20 (blockchain ETH) ou BEP20 (equivalente na blockchain BSC). Nestes padrões é dito que todo smart contract de token deve ter uma função para saldo, outra para transferência e assim por diante. Essas funções são definidas em uma interface de programação chamada de ABI (Application Binary Interface) e uma vez que o programador escreva sua ABI corretamente, todo o ecossistema de aplicações que se comunicam com ERC20, BEP20, etc vai conseguir se comunicar com o contrato dele.

No caso da Brave Wallet, ela é uma carteira que se comunica com a blockchain da Ethereum, o que inclui tokens no padrão ERC20 e compatíveis. Quando me refiro a compatíveis quero dizer a forks da blockchain ETH, como a própria BSC. O padrão de tokens da BSC é o BEP20, que é praticamente um copia e cola do ERC20. Então tanto a Brave Wallet funciona para a rede da BSC quanto qualquer programação que fizermos para uma, vai funcionar na maioria dos casos para a outra.

É por isso que uma biblioteca como a Web3.js funciona tão bem com a BSC.

E é por isso que as regras para consultar saldos e fazer transações na BSC é do mesmo jeito que na ETH: através de smart contracts. E é isso que nós vamos aprender no tutorial de hoje: como interagir com smart contracts de tokens usando a Brave Wallet.

#3 – Brave Service

Seguiremos aplicando os conhecimentos da biblioteca Web3.js na mesma aplicação ReactJS que criamos na primeira parte. Não que isso faça grande diferença já que estamos usando JS puro, aplicável a qualquer outra tecnologia de frontend web como Angular e VueJS.

Vamos começar reorganizando a nossa aplicação, criando um arquivo BraveService.js junto dos demais para que seja o nosso service, ou seja, a camada de comunicação da aplicação com recursos externos. Bem pra organização mesmo.

Neste service nós vamos começar adicionando as funções de saldo e transferência de BNB que já conhecemos e que dispensam explicações. Apenas vou dar nomes sugestivos a elas e garantir que elas sejam bem desacopladas em relação à aplicação em si, realmente fornecendo um serviço de consulta de saldo e transferência.

Repare apenas que como a verificação da existência da Brave Wallet no navegador e o carregamento do provider são tarefas comuns a qualquer ação que vamos fazer, coloquei isso dentro de uma função específica, que chamaremos sempre que necessário, a connect.

Agora você pode ajustar o código do seu App.js para que ele use as novas funções, deixando-o bem mais organizado.

E com isso voltamos ao mesmo tempo que já estávamos na lição passada, mas agora com um código mais evoluído e com um entendimento melhor do que faremos a seguir. Basicamente precisamos nos conectar aos contratos dos tokens que desejamos usar e mandar comandos para eles, através da Brave, ao invés de mandar para a BSC em si.

#4 – Token Functions

Vamos voltar ao nosso BraveService e vamos adicionar duas novas funções, bem parecidas com as anteriores, mas usando contratos.

A primeira função, getTokenBalance, espera o endereço da carteira e o endereço do contrato do token que você deseja ver o saldo. O início da função conecta na carteira Brave, como já fizemos antes. Depois, ele carrega o contrato em si, usando o endereço informado (contrato do token) e passamos ainda o CONTRACT_ABI.

E aqui valem duas explicações. Primeiro, sobre o ABI. Eu mencionei anteriormente o que é o ABI e aqui precisaremos informá-lo manualmente. Como vamos trabalhar com tokens ERC20/BEP20, eu peguei o ABI padrão disponível na documentação. Crie um arquivo ABI.json junto dos demais arquivos e coloque o seguinte conteúdo dentro:

Depois, importe este ABI no topo do BraveService.js.

Com a informação do endereço do contrato e do ABI, a biblioteca Web3.js vai conseguir fornecer um objeto de contrato que faça as ações que esperamos como ver saldo e fazer transferências. Voltando ao código, é exatamente isso que a primeira função faz, usa deste objeto de contrato carregado para chamar uma das funções do ABI que é a balanceOf.

Já na segunda função nós pegamos o objeto web3, os parâmetros da transferência (com um truque ali para pegar a carteira atualmente conectada no navegador) e usamos tudo isso junto ao contrato para fazer a transferência passando por ele, usando a função transfer do smart contract.

Agora, para que possamos usar estas funções, teremos de informar na interface da aplicação o campo para o usuário incluir o endereço do contrato.

#5 – Contrato na Interface

Ao invés de colocar um campo de texto pro usuário informar o contrato, eu vou optar por fornecer um select com várias opções comuns. Menos flexível, mas com usabilidade melhor.

Em um cenário de produção, o usuário poderia ir no site da CoinMarketCap, procurar o token que deseja manipular e pegar o endereço do contrato dele na BSC. No entanto, como estamos desenvolvendo tudo apontado para Testnet eu estou usando a Testnet do BSC Scan para encontrar os endereços dos contratos de teste, lembrando que nem todos tokens estarão por lá.

Abaixo, as alterações no App.js para termos um state pro contrato do token, um select na interface já com alguns tokens comuns (e seus endereços na Testnet) e a lógica para chamar as funções apropriadas quando o token selecionado for BNB ou outros.

O resultado é que agora o usuário pode selecionar qual token ele deseja ver o saldo, bem como fazer transferências do mesmo.

Legal, não?

Com isso, agora você tem MUITO mais ferramentas para integrar suas aplicações não só com a Brave Wallet mas com as blockchains ETH e BSC através da Brave.

Quer aprender ainda mais? Que tal este outro tutorial onde ensino como implementar autenticação nos seus dapps e aplicações web3 usando a MetaMask, mas que funcione igual com a Brave (ambas usam o mesmo protocolo e objetam window.ethereum no browser).

E este outro onde explico em detalhes como as carteiras cripto realmente funcionam (tecnicamente)?

E no vídeo abaixo ensino como fazer deploy do seu dapp de forma descentralizada.

TAGS:

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *