Uma carteira de criptomoedas é um software web, mobile ou desktop, que conecta você à blockchain e suas aplicações, estas últimas que formam o que chamamos de web3. Sem uma carteira cripto você até consegue interagir em modo “somente leitura” com tais aplicações, mas somente com uma é que você consegue enviar dados, registrar informações e de fato se tornar um usuário deste novo mundo e também desta nova economia.
Ou seja, a primeira coisa que você precisa entender é que uma carteira cripto não serve apenas para “guardar” suas criptomoedas. Na verdade ela sequer as guarda de fato, e depois deste artigo você finalmente vai entender o que as crypto wallets são de fato, para quê servem e como funcionam, conhecimentos fundamentais para todo dev web3/blockchain.
Se preferir, você pode assistir ao início do vídeo abaixo, que tem o mesmo conteúdo.
Vamos lá!
![Curso Beholder](https://www.luiztools.com.br/wp-content/uploads/2021/05/banner-beholder.jpg)
#1 – Como funciona uma carteira de criptomoedas?
O nome “carteira” nos remete a algo que usamos para guardar nosso dinheiro e documentos, certo? Desta forma, é um instrumento no mundo real para gerenciar economias e identidades. E por isso esse nome foi escolhido também para as “carteiras de criptomoedas”.
Assim como suas contrapartes físicas, as carteiras cripto ou simplesmente “wallets” servem para gerenciar nossas economias e identidade no mundo web3. No entanto, diferente do que o nome sugere, você não guarda as suas economias dentro do seu software de carteira, mas apenas gerencia elas. Neste sentido, as carteiras cripto se parecem mais como “chaveiros” pois a única coisa armazenada dentro delas realmente são as suas chaves, que servem tanto para lhe identificar, quanto para transacionar seus recursos.
Mas se as criptomoedas não ficam nas wallets, onde elas ficam?
Na blockchain e sempre na blockchain. Lembre-se que a blockchain é um grande livro de registros (ledger) de transações quaisquer. Assim, se quero saber quanto de saldo a conta A possui, eu consulto na blockchain o endereço dele e descubro essa informação. Agora, se eu quiser movimentar criptomoedas desta conta para outras, aí que entram as wallets: somente uma wallet com a chave certa pode fazer essa transação.
Assim, podemos resumir basicamente o funcionamento de uma carteira de criptomoedas como:
- guardar as chaves de uma conta da blokchain;
- consultar os ativos (tokens) desta conta;
- fazer transações nesta conta usando as chaves;
Quaisquer outras funcionalidades além dessas são secundárias e mudam de aplicação para aplicação como por exemplo a criação de novas contas, agenda de contatos frequentes, histórico de atividades, alertas, compra de criptomoedas e muito mais. Aliás, pensando em modelo de negócios, é justamente nessas funcionalidades adicionais é que você pode criar um negócio lucrativo e uma aplicação interessante.
Mas voltando ao que nos interessa, todas essas funcionalidades exigem que o software se comuniquem com ao menos um nó de uma blockchain, para poder consultar e escrever no livro-razão. Assim, em última instância, uma carteira de criptomoedas nada mais é do que um client de blockchain.
#2 – Como a carteira se comunica com a blockchain?
Isso pode variar entre os fabricantes de blockchain, mas basicamente todo nó de blockchain expõe uma série de APIs com as quais as carteiras podem interagir, seja consultando, seja enviando transações para registro na mesma. No caso das blockchains baseadas em Ethereum/EVM, que correspondem a 80% do mercado, essas APIs estão em um padrão chamado JSON RPC. Ou seja, é como se fosse um padrão HTTP REST, mas mais “simplificado”.
Assim, um software de wallet deve ter na sua implementação as chamadas básicas de comunicação JSON RPC com um nó, além da configuração de ao menos um nó que receberá estas chamadas. Desta forma, todo software de wallet deve possuir além do software em si, um nó à sua disposição, geralmente contratado em empresas de blockchain as a service (como Infura, QuickNode e outras) ou mantido pela mesma empresa fabricante da carteira, para garantir a disponibilidade do mesmo e baixo tempo de resposta às requisições.
Para auxiliar nestas chamadas é muito comum que os desenvolvedores utilizem de bibliotecas web3 que encapsulam o padrão JSON RPC e expõem objetos nativos das linguagens de programação com funções e classes utilitárias, como no caso das bibliotecas Ethers JS e Web3.js disponíveis para o ecossistema JavaScript, que já usamos algumas vezes aqui no blog. Desta forma, o desenvolvimento de um software de carteira não se torna diferente do desenvolvimento de uma aplicaçõa de frontend que usa de um “banco de dados” de terceiros, no caso a blockchain, mapeado em objetos, assim como seria feito com um ORM.
Concluindo, quando você abre a sua MetaMask ou Brave Wallet e ela carrega o seu saldo, por trás dos panos ela montou uma requisição JSON RPC do tipo call com o comando de obter saldo e passou como argumento o endereço da sua carteira. Agora quando você realiza uma transferência de fundos, ela monta uma requisição JSON RPC do tipo send com o comando de transaction incluindo nos argumentos o destino (outra carteira ou smart contract), a quantidade de valor a ser transferido e quaisquer outros argumentos específicos do contrato-alvo (quando houver). Essa transação por sua vez, como incorre em taxas de transação, é assinada criptograficamente com a chave privada da carteira, a fim de que a blockchain consiga validá-la.
#3 – Para usar Web3 sou obrigado a ter uma carteira de criptomoedas?
Em última instância, sim. Como mencionado anteriormente, a sua carteira cripto é a sua identidade online no mundo web3, mas mais do que isso, é com ela que você consegue interagir com as aplicações. Embora existam diversas formas de você transformar a experiência do usuário web3 através de abstração de contas, permissionamento de transações e outras, sempre vai haver a necessidade de ter uma conta associada a cada usuário na blockchain, através da qual seja possível mantermos a individualidade de cada um como na web tradicional e seus endereços de emails.
Aliás, pensar dessa forma ajuda a entender melhor essa necessidade: assim como os endereços de email são usados para identificação e interação nos sites web2, as carteiras cripto o são no mundo web3. Muitos browsers inclusive já estão vindo com carteiras embutidas, como é o caso do Brave, entendendo que isto torna a experiência mais fluida para este novo mundo.
Para nós, programadores web, é importantíssimo entendermos como funcionam estes softwares, como podemos criar eles, nos integrarmos a eles e cada vez mais aproveitarmos das oportunidades trazidas por este novo contexto.
Quer aprender a criar a sua carteira MetaMask para usar em desenvolvimento? Use este tutorial.
Quer aprender a programar a sua própria carteira cripto? Use este tutorial para redes ETH ou este para rede BTC.
Até a próxima!
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.