Links

13. Criptografia: transações e mineração

Iremos abordar neste capítulo os aspectos mais técnicos sobre a blockchain. São elementos cruciais para se compreender os fundamentos das criptomoedas e como funcionam as suas operações. Para tanto, será necessário nos familiarizarmos com alguns conceitos novos. Assim, ao fim deste capítulo iremos entender: a relação entre criptomoedas e a criptografia; o funcionamento por trás de uma transação na blockchain; o processo de mineração e as diversas formas de consenso; as diferenças entre Proof-of-Work (PoW) e Proof-of-Stake (PoS); e como identificar os diferentes tipos de blockchains.
A blockchain é totalmente baseada em tecnologia criptográfica, como funções de hash (como SHA-256 e RIPEMD-160) e criptografia de chave pública (como ECDSA, que significa Algoritmo de Assinatura Digital de Curva Elíptica). É importante reafirmar que uma transação é um registro que informa para a rede a transferência de fundos de um dono para outro. Desse modo, a propriedade dos ativos é estabelecida por meio da relação entre as chaves públicas e a assinatura digital, produzida mediante a chave privada correspondente. A seguir, a imagem auxilia a representar o processo:

Figura 90 - O funcionamento da tecnologia blockchain

Fonte: viden.vc

13.1 Compreendendo as funções hash

Uma função de hash criptográfica é uma função matemática comumente usada para verificar a integridade de dados, transformando dados idênticos em um resumo único, representativo e de tamanho fixo. Um mesmo input gera sempre a mesma saída. Qualquer modificação dos dados de entrada altera completamente o resultado. As funções hash são utilizadas extensivamente na tecnologia blockchain:
  • Quando as transações são transmitidas pela rede, a função HASH-256 é usada para verificar a integridade dos dados, garantindo que a informação não tenha sido corrompida ou modificada durante a transmissão;
  • Os blocos são ligados (encadeados) em sequência, sempre referenciando o hash do bloco anterior, função que garante a integridade do bloco e estabelece uma ordem cronológica na Blockchain;
  • SHA-256 também faz parte do processo de mineração Proof-of-Work;
Um hash SHA-256 geralmente é apresentado como uma string de 64 caracteres hexadecimais. Cada um dos 32 bytes é representado por 2 caracteres hexadecimais. Por exemplo, a palavra “Bitcoin” produz o hash SHA-256 mostrado a seguir:

Quadro 7 - Os diferentes tipos de Hash-256

Fonte: viden.vc
Você pode comparar vários geradores de hash por aqui: https://8gwifi.org/MessageDigest.jsp

13.1.1 Entendendo a criptografia de chave pública

As informações de transação da rede são visíveis para todos e, portanto, não são criptografadas. No entanto, são utilizadas as assinaturas digitais para autenticar a veracidade dessas informações. Na criptografia de chave pública, duas chaves são necessárias:
Kpriv: a chave privada, que deve ser mantida sempre em segredo pelo proprietário.
Kpub: a chave pública, que é visível a todos os usuários da rede. Uma observação é importante: tecnicamente, o endereço é público e a chave pública é um derivado desse endereço, não sendo exposta até que haja uma movimentação de ativos na rede.
Ao enviar uma mensagem M, o remetente criptografa usando a chave pública do destinatário, produzindo a mensagem criptografada C.
O destinatário, por sua vez, descriptografa a mensagem C usando sua chave privada para ter acesso à mensagem original M.
Portanto:
  • C é o resultado da criptografia (também conhecido como “texto cifrado”).
  • M é a mensagem não criptografada/descriptografada (também conhecida como “texto simples”).

Figura 91 - Como uma informação transita pela blockchain

Fonte: viden.vc

13.1.2 Criptografia assimétrica

Se a mesma chave fosse usada para criptografar e descriptografar, consideraríamos uma relação simétrica. No entanto, existe uma relação matemática assimétrica entre as chaves públicas e privadas, porque a chave pública pode ser facilmente derivada da chave privada e a chave privada é quase impossível (ou computacionalmente inviável) de ser derivada da chave pública.
A criptografia de uma chave pública é utilizada para produzir assinaturas digitais com ECDSA (Algoritmo de Assinatura Digital de Curva Elíptica), especificamente a curva secp256k1, a fim de autorizar e validar transações.
  • A chave privada é mantida em segredo pelo proprietário, sendo usada para assinar uma hash de transação que autoriza o gasto de ativos que controla.
  • A chave pública, que fica visível para todos depois que a transferência é realizada, pode ser usada para verificar se a chave privada correspondente produziu a assinatura digital que autorizou a transação.

13.1.3 Assinaturas Digitais

Assinaturas digitais são usadas para autenticar transações válidas. Para fazer um pagamento Bitcoin, por exemplo, uma transação Bitcoin T é construída e um subconjunto M das informações na transação T é assinado da seguinte forma:
  1. 1.
    A transação T é criada;
  2. 2.
    É selecionado um subconjunto M da transação T (por exemplo, o identificador de transação, instruções de transação etc.);
  3. 3.
    É calculado o Hash H de M:
  4. 4.
    É computada uma assinatura S, utilizando-se o output da função hash anterior Fhash(M) e a chave privada do remetente, no qual o algoritmo de assinatura Fsig:
  5. 5.
    A assinatura S, a chave pública Kpub e a transação T são distribuídas pela rede para serem validadas por todos os nós.
Como dito no livro Mastering Bitcoin[1], a "verificação é o inverso da função de geração de assinatura, usando os valores R, S e a chave pública para calcular um valor P, que é um ponto na curva elíptica". Para verificar uma transação recebida com a assinatura S e a chave pública Kpub, um destinatário irá calcular:
Onde R e S são os valores das assinaturas, Kpub é a chave pública, M é a informação contida na transação assinada e G é o ponto gerado pela curva elíptica. Se a coordenada X do ponto calculado P for igual a R, então o validador pode concluir que a assinatura é válida. Uma observação: perceba que, ao verificar-se uma assinatura, a chave privada não é revelada. Em resumo:
1) Cada transação associa um ativo a um endereço e é produzida a partir de um hash da chave pública do proprietário;
2) Quando os ativos são enviados para alguém, a transação registra a transferência do endereço do atual proprietário para o endereço do novo proprietário, autorizado por uma assinatura digital válida;
3) Quando esta transação é transmitida para a blockchain, todos os validadores sabem que o novo proprietário desses ativos é o proprietário do endereço de recebimento;
4) O histórico completo de transações é mantido por todos os validadores (clientes) na rede, para que qualquer pessoa possa verificar quem é o proprietário atual de qualquer quantidade de ativos sem conhecer suas chaves privadas.

13.2 Rede P2P e a propriedade

A blockchain do Bitcoin é formada por uma rede de computadores ponto-a-ponto (P2P). Qualquer computador conectado à rede é chamado de nó (node). Qualquer pessoa pode baixar e instalar o software de código aberto gratuito para se tornar um nó. Todos os nós são tratados igualmente e nenhum nó único é confiável. O sistema assume que a maioria dos nós serão honestos, ou seja, não retransmitirão desinformação.
Os nodes rastreiam quais dos seus pares se comportam de uma maneira maliciosa ou que possa executar software com defeitos. Em resposta a tal comportamento, cada node pode desconectar ou banir o par malicioso, resguardando a rede.
Existem vários tipos de nós, com funções distintas e complementares. Os nós completos são responsáveis por verificar e manter todos os registros de propriedade de acordo com o consenso das regras. Os nós de mineração também processam transações e anexam novos blocos a blockchain, em troca de uma recompensa. Nós “podados” verificam transações e blocos, mas não armazenam uma cópia completa da blockchain.
Os usuários possuem chaves digitais que controlam a propriedade dos ativos registrados na blockchain, que é o registro público de todas as transferências de um proprietário para outro.

15.2.1 Endereços

As transações na blockchain não registram as chaves públicas ou os destinatários, mas usam uma abstração chamada de “endereço” para registrar o beneficiário de cada valor, permitindo maior flexibilidade.
Para criar um endereço, o software cliente primeiro gera um par de chaves público-privadas ECDSA, a partir de um número aleatório. O endereço é, então, gerado, aplicando a seguinte sequência:
  • A keyhash é produzida, aplicando as funções de hash SHA-256 e RIPEMD160, em série, na chave pública (2);
  • O datahash (3) é produzido, aplicando o algoritmo SHA-256 duas vezes nos dados;
  • O endereço (4) é uma concatenação de dados na codificação Base58.
Para facilitar, relembre a imagem do funcionamento de uma blockchain:

Figura 92 - O funcionamento da tecnologia blockchain

Fonte: viden.vc
A Blockchain pode ser usada para transferir informações sobre transações, blocos, nós de pares e dados diversos.

13.2.2 Os tipos de transações mais comuns

A forma mais comum de transação é a simples transferência de um endereço para outro. Outra forma comum de transação é a que agrega vários insumos em uma única saída. Isso representa o equivalente no mundo real de trocar uma pilha de moedas para uma única nota maior. Transações como essas, às vezes, são geradas por aplicativos de carteira, a fim de limpar muitas quantias menores que foram recebidas como troco.
Outra forma de transação distribui uma entrada para várias saídas, que podem ou não representar vários destinatários independentes. Este tipo de transação, às vezes, é usado por entidades comerciais, como no processamento de folha de pagamento para funcionários. Outra possibilidade é uma transação que não tenha entrada (que represente moedas recém-geradas) e uma saída (minerador de blocos)

13.3 O processo de mineração

Já vimos que o sistema de confiança da blockchain é baseado em computação. As transações são agrupadas em blocos que exigem uma enorme quantidade de poder computacional para “provar” ou “confirmar”, mas apenas uma pequena quantidade de computação para verificar (“validar”) essas informações pelo processo chamado mineração.
A mineração, no caso do Bitcoin, cria novos bitcoins em cada bloco, quase como um banco central imprimindo mais moedas. A quantidade de bitcoins a ser criada é limitada e diminui com o tempo, como já vimos anteriormente. A mineração gera confiança sistêmica ao garantir que as transações sejam confirmadas apenas quando dedicado poder computacional suficiente ao bloco que as contém. Mais blocos significam mais poder computacional na rede, o que significa mais confiança.
Mas qual é o algoritmo da mineração?
A mineração consiste nas seguintes etapas, que são executadas em um loop contínuo:
  • Agrupar transações que foram transmitidas em um bloco da rede. Cada minerador pode decidir arbitrariamente quais transações incluir em seu bloco, embora geralmente selecione transações com a maior taxa por byte;
  • Verificar se todas as transações no bloco são válidas;
  • Selecionar o bloco mais recente e que resulte na cadeia mais longa da blockchain, inserindo o hash do seu cabeçalho no novo bloco a ser criado;
  • Tentar resolver o Proof-of-Work (PoW) para o novo bloco e, simultaneamente, observar novos blocos vindos de outros nós.
Se for encontrada uma solução Proof-of-Work (PoW) a tempo, o novo bloco será adicionado à sua cópia local da blockchain e transmitido para toda a rede peer-to-peer. Os mineradores procuram blocos aceitáveis usando o seguinte procedimento, realizado em um loop:
  • Incrementar (adicionar 1) a um número arbitrário no cabeçalho do bloco chamado de nonce;
  • Pegar o hash do cabeçalho do bloco resultante;
  • Verificar se o hash do cabeçalho do bloco, quando expresso como um número, for menor que um valor alvo predeterminado.
Se o hash do cabeçalho do bloco não for menor que o valor alvo, o bloco será rejeitado pela rede. Encontrar um bloco que tenha um valor de hash suficientemente pequeno é o problema de PoW. O desempenho da mineração, portanto, é medido no cálculo de hashes por segundo. Atualmente, o desempenho dos mineradores é medido em GH/s (bilhões de hashes por segundo) ou TH/s (trilhões de hashes por segundo).

13.3.1 As dificuldades no processo de mineração

Vimos que são os nodes de mineração que regulam ativamente a validação das transações dentro da rede. À medida que mais mineradores (ou seja, mais poder computacional) se juntam à rede, maior é a taxa de criação de blocos. Quanto mais alta a taxa de criação de blocos, maior a dificuldade de mineração exigida para se encontrar o próximo bloco da cadeia. Com o aumento da dificuldade, as máquinas que forem ineficientes vão sendo desligadas, deixando a rede e ocasionando uma redução da taxa de criação de blocos novamente.
A criação de novos blocos no Bitcoin tem a duração média de dez minutos. Esse tempo foi previamente programado considerando um equilíbrio entre o tempo de confirmação e a quantidade de trabalho desperdiçada, devido às divisões de cadeia e blocos órfãos. A regulação da dificuldade é feita ajustando o valor alvo do hash a cada 2.016 blocos (cerca de 2 semanas). Os nodes calculam de acordo com uma nova dificuldade, obtida a partir do tempo médio que a rede levou para criar os últimos 2.016 blocos.
Embora a maioria dos ajustes seja pequena, houve grandes variações na taxa de hash do Bitcoin, geralmente correlacionadas a movimentos macroeconômicos: -15% em dezembro de 2018, -31% em setembro de 2019 e -40% entre maio e julho de 2021.

13.3.2 Mineração solo e mineração em pools

Os mineradores solo usam seu próprio computador ou hardware de mineração especializado para procurar blocos e só são pagos se resolverem/encontrarem um bloco de forma independente. Em setembro de 2019, a taxa de hash do Bitcoin era superior a 90 milhões de TH/s. Em setembro de 2020, estava próxima de 140 milhões de TH/s. Em fevereiro de 2021, já era superior a 150 milhões de TH/s. A taxa atual (disposta no final de julho de 2022) está próxima de 200 milhões de TH/s.
Para a pessoa comum, a mineração solo não é ideal, pois é altamente competitiva e pode exigir investimento significativo. Devido a essa característica, foi criado um método de mineração em pool. Na mineração em pool, cada minerador contribui com seu poder de hash individual para resolver a prova de trabalho como um grupo, "como um pool de loteria permite vários participantes para compartilhar seus esforços e recompensas". Quando um bloco é encontrado, a carteira das pools de mineração recebe o pagamento e depois distribui a recompensa para cada minerador em uma pool individual.
A distribuição da recompensa é baseada em sua contribuição pessoal de poder de hash. Se um minerador contribuísse com metade do poder de hash da pool, então ele receberia metade da recompensa. A maioria dos pools de mineração funciona usando o seguinte algoritmo:
  • O servidor do pool prepara um bloco com a transação coinbase (primeira transação de um bloco) apontando para o endereço do pool;
  • Os mineradores no pool entram em contato com o servidor do pool e fazem uma solicitação getwork/getblocktemplate;
  • Cada minerador tenta resolver o problema de prova de trabalho para o bloco, incrementando o nonce e a hash do cabeçalho do bloco. Cada vez que um nonce é alterado, o resultado é um valor de hash diferente. Para ganhar o bloco, o resultado deve estar abaixo do alvo de dificuldade com “0s” (zeros) iniciais suficientes;
  • Sempre que um minerador encontrar um valor de hash abaixo de um alvo mais fácil, ele o compartilha com o servidor;
  • O servidor de mineração verifica os compartilhamentos enviados e rastreia com quantos cada minerador efetivamente contribuiu;
  • Quando algum dos mineradores encontra uma solução para o problema da Proof-of-Work, o servidor paga a recompensa proporcional ao número de contribuições que cada minerador gerou desde o último pagamento.
Os pools de mineração usam diferentes esquemas de distribuição, sendo os mais populares:
PPS (Pagamento por Compartilhamento): cada minerador recebe uma quantia garantida por cada contribuição que enviar.
PPLNS (Pagamento por último número de compartilhamento): cada minerador é pago com base no último número X de compartilhamentos depois que um bloco é encontrado. Por exemplo, se um minerador contribuiu com 2,5 mil dos últimos cinco mil compartilhamentos necessários para minerar um bloco, ele recebe metade do pagamento do bloco.

13.3.3 Um histórico do avanço do hardware de mineração

Mineração de CPU: inicialmente, o software cliente Bitcoin de Satoshi fazia mineração de CPU, mas agora as CPUs foram largamente ultrapassadas por hardwares de mineração mais eficientes.
Mineração de GPU: as GPUs (Unidades de Processamento Gráfico) são projetadas para realizar muitas tarefas matemáticas em paralelo e são algumas ordens de magnitude mais rápidas que CPUs.
FPGA (matrizes de campo programáveis): FPGAs foram usados até o surgimento das ASICs, que dominaram a mineração de Bitcoin.
ASIC: os Circuitos Integrados de Aplicação Específica (ASICs) foram construídos sob medida para serem extremamente eficientes. Eles são ordens de grandeza mais rápidas que as GPUs com as quais estamos acostumados no nosso dia a dia. As ASICs são construídas para executar apenas o hash SHA-256. Hoje, a mineração ASIC é a única técnica economicamente eficiente.

13.4 Outros mecanismos de consenso

Fazendo um pequeno adendo antes de abordarmos outras formas de consenso, é importante ressaltar que as Blockchains utilizam dois mecanismos distintos no seu funcionamento: a camada de consenso que, como vimos, confirma a veracidade das informações que serão propagadas (onde os mineradores ou validadores atuam) e a camada de execução que, de fato, executa os comandos aprovados pelo consenso e onde ficam registrados os dados. Elas podem estar tanto juntas quanto separadas, dependendo da arquitetura da rede em questão.
Aprofundando a discussão nos mecanismos de consenso, desde a criação do Bitcoin muitas outras abordagens foram criadas para se distribuir consenso. Entre os mais notáveis, estão:
  • Delegated Proof-of-Stake (dPOS)
  • Proof-of-Burn
  • Byzantine Fault Tolerant (BFT)
  • Proof-of-Importance
Esses protocolos de consenso foram e estão sendo explorados por meio de criptomoedas alternativas ao bitcoin, chamadas de "altcoins".

13.4.1 O Proof-of-Stake

Proof-of-Stake (PoS) é um algoritmo de consenso em que cada indivíduo pode validar novos blocos, com base na posse e travamento de ativos. Portanto, neste cenário, quanto mais ativos você tiver, maiores serão suas chances de obter recompensas. Neste algoritmo de consenso, os validadores são previamente escolhidos para a formação do bloco. Embora o processo de escolha seja aleatório, para se qualificar como validador é necessário ter uma quantia mínima específica de tokens travados.
O processo de escolha de validadores é simples, proporcional ao número de ativos travados de cada node. Por exemplo, se você possui 10% de todas as moedas travadas, você pode validar (que é o equivalente a minerar) 10% de novos blocos. Da mesma forma que existem pools de mineração em Proof-of-Work, o mesmo método pode ser aplicado à Proof-of-Stake. Nesse caso, todos os participantes desse pool específico dividirão o lucro proporcionalmente com base no valor de ativos contribuídos ao pool.

13.4.2 As vantagens e desvantagens do PoS

Em primeiro lugar, esse tipo de algoritmo de consenso não requer qualquer investimento em hardware. Para se tornar um validador, o usuário utilizará um software e precisará de um sistema de computador funcional com conexão de internet estável, desde que possua uma quantidade de ativos suficientes travados. Dessa forma, o consenso por Proof-of-Stake é energeticamente mais eficiente do que comparado ao Proof-of-Work, já que não depende de um processo externo termodinamicamente intenso.

Figura 93 - Proof-of-Stake X Proof-of-Work

Fonte: viden.vc
Enquanto isso, a principal desvantagem desse sistema é que a descentralização total torna-se conceitualmente impossível. Isso ocorre porque apenas uma parcela dos detentores dos ativos consegue participar como validadora da rede, recebendo recompensas e controlando a maior parte do sistema. A descentralização completa só é possível com uma distribuição igualitária dos ativos. Outro ponto importante é que esse formato de consenso, por ser mais recente, foi menos testado. Além disso, sua implementação é mais complexa.

13.5 Os tipos de blockchain

inúmeros tipos de blockchains existentes. Cada um com uma funcionalidade diferente, que acrescenta possibilidades aos usuários. As principais características do uso das blockchains podem ser enumeradas da seguinte forma:
Pública: o código e todas as transações registradas na rede são publicamente verificáveis e disponíveis para todos os participantes da rede;
Aberta: qualquer pessoa pode entrar ou sair da rede, validar transações e/ou minerar novas moedas;
Peer-to-peer: as transações são enviadas de um participante para outro sem a necessidade de uma autoridade centralizada ou de um intermediário para autorizá-las;
Distribuída: o armazenamento e a validação da blockchain são realizados em uma ampla variedade de participantes da rede;
Imutável: apagar ou reescrever o histórico da blockchain se torna computacionalmente inviável;
Permissionless: sem permissão, ou seja, não existe necessidade de credenciais, IDs ou autorização para ingressar na rede;
Borderless: sem fronteiras, ou seja, a rede opera além das fronteiras geográficas, acessível praticamente em qualquer lugar com internet.
Nem todas as características acima podem ser usadas ao mesmo tempo. Diferentes blockchains estabelecem diferentes usos e propostas. Mas colocadas as características gerais das blockchains, há diferentes tipos de redes que podem ver suas propostas e usos variando de acordo com o seu algoritmo de consenso. Entre os elementos que podem sofrer modificações, estão: desempenho, velocidade de transação, escalabilidade, forma de liquidação, governança, privacidade, confidencialidade e compliance.
Algumas destas características são mais ou menos importantes (em alguns casos, até mesmo indesejadas). Tudo ocorre de acordo com as necessidades e os objetivos dos desenvolvedores e dos usuários. Priorizar certas características pode envolver a necessidade de abrir mão de alguns preceitos básicos ou de usar soluções de segunda camada, como a rede Lightning no Bitcoin ou a rede Arbitrum para o Ethereum.

13.5.1 Blockchain aberta, pública e permissionless

O modelo mais tradicional de blockchain possui como principal característica o fato de que qualquer usuário pode entrar ou sair da rede, contribuir com a validação de transações ou minerar novas moedas. Outras características são: qualquer pessoa pode manter uma cópia de toda a rede e validar suas transações; todas as transações registradas são publicamente verificáveis e disponíveis para todos os operadores; não há necessidade de credenciais, IDs ou autorização para ingressar na rede; e não há necessidade que os usuários da rede se conheçam ou confiem uns nos outros pessoalmente.
Na última década, os exemplos mais conhecidos de blockchains abertas, públicas e sem permissão incluem o Bitcoin (2009), a Litecoin (2011), a Monero (2014) e a Ethereum (2015). Essas redes públicas e sem permissão têm sua própria moeda e/ou ativo nativo: bitcoin para o Bitcoin, ether para a blockchain Ethereum etc. Como os validadores da rede distribuída precisam chegar a um consenso para atualizar o estado da rede, as transações podem ficar lentas e mais caras.

13.5.2 Blockchain aberta, pública e permissioned

Um conhecido exemplo de uma blockchain permissioned, aberta e pública é a Ripple. Essa rede tem como foco a aplicação intrabancária. Ela utiliza uma estrutura conhecida como HashTree e a validação é determinada por um número seleto de participantes conhecido como “Lista de Nodes Únicos”. Apenas os votos desses nós são usados para validar as transações.
A principal característica de uma blockchain com permissão é que nem todo mundo pode ingressar na rede, pois a permissão é fornecida a determinados participantes identificáveis. Este requisito acrescenta um nível adicional de segurança na ausência de um mecanismo de consenso robusto, os participantes são conhecidos uns dos outros e se consideram confiáveis.
Em redes permissioned também é definido o papel de cada participante: quem pode operar os nodes, quem pode validar transações, quem tem acesso ou influência a cada parte da blockchain e quem pode introduzir mudanças no sistema.

13.5.3 Privadas, híbridas e “inspiradas na blockchain”

Blockchains de consórcio são usadas por organizações ou empresas que desejam processar transações privadas dentro de um grupo autorizado de participantes conhecidos, entre organizações e localizações geográficas. Exemplos incluem: Hyperledger, um projeto abrangente da Linux Foundation Blockchain Initiative; Corda, um ledger distribuído "inspirado na blockchain" do R3; e Quorum, uma cópia autorizada do Ethereum pelo JPMorgan (adquirida pela ConsenSys).
Outra blockchain baseada em associação é a Enterprise Ethereum Alliance. A EEA é um consórcio que visa criar uma versão padrão do software do Ethereum para aplicativos corporativos, como rastreamento de contratos financeiros. Inclui mais de 450 membros corporativos como Microsoft, JPMorgan Chase, Santander, Accenture, ING, Intel e Cisco. Em outubro de 2018, a EEA e a Hyperledger anunciaram que estariam trabalhando juntas.

13.5.4 Blockchains híbridas combinam elementos de blockchains públicas e privadas.

Um conhecido exemplo de uma blockchain híbrida é a Dragonchain, focada na interoperabilidade em uma rede multi-chain de blockchains. Outras formas de organização de ledgers distribuídos é a DAG (Directed Acyclic Graph), sendo a IOTA um dos principais exemplos desse formato, focada em ser um ecossistema para transações entre dispositivos IoT.
  1. 1.
    ANTONOPOULOS, Andreas. Mastering Bitcoin: Programming the Open Blockchain. O'Reilly Media, Nova York: 2017. ↑
O primeiro mergulho no mundo da Web3. Como as criptomoedas, NFTs e metaverso irão mudar
as nossas vidas.
Primeira edição, Novembro de 2022.
Autor: João Kamradt
Colaboração: André Castelo, Henrique Ayello, Matheus Bonifácio e Rafael Lima.
Editora: W3Books
Revisão: Diane Southier
Capa: Polvo.lab
Licença: Atribuição-NãoComercial-CompartilhaIgual 4.0 Internacional (CC BY-NC-SA 4.0)
Assuntos: 1. Criptomoedas 2. Tokens e NFTs 3. Blockchain 4. Metaverso 5. Web3
Publicado em: https://viden.ventures/livro