🇧🇷
Ethereum Developer Pack - PT
  • Ethereum Developer Pack - PT
  • Módulo 1
    • Introdução a Smart Contracts
      • Fundamentos de Blockchain
        • Histórico
        • Bitcoin
        • O que é Blockchain
        • Conceitos-chave em Blockchain
        • Como funciona a Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • A nova Internet
        • Web 3
        • Elementos Fundamentais
        • Impacto do Ethereum em Diversos Setores
      • Wallets
        • Componentes de uma wallet
        • Tipos de Wallet
        • Códigos Mnemônicos
      • Ethereum 101
        • Smart Contracts
        • Contas
          • Tipos de contas
          • Conteúdo das contas
        • Transações
          • Componentes
          • Ciclo de vida
        • Gás
        • Solidity
        • EVM
          • A máquina de estados
          • Opcodes
          • Como funciona a EVM
          • Clientes de execução
          • DApps
      • Blockchain Explorer
        • Funções de um blockchain explorer
        • Beneficios de utilizar um blockchain explorer
      • Remix
        • Características do Remix
        • Workspaces ou espaços de trabalho
        • Carregar e compilar um contrato
        • Implantar na máquina virtual do Remix (Remix VM)
        • Interagindo com funções
        • Deployar em uma rede pública
      • Crie seu primeiro Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Dados
      • Funções
      • Variáveis
        • Exercício 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Exercício 3
      • Convenções de nomenclatura
      • Tipos de armazenamento para variáveis
      • Estruturas de Controle
        • Exercício 4
      • Modificadores
      • Eventos
        • Exercício 5
      • Tipos de Referencia
        • Arrays
          • Exercício 6
        • Mappings
          • Exercício 7
        • Structs
          • Exercício 8
      • Address Payable
      • Como os contratos e funções recebem Ether.
      • Transferências de Ether
      • Conceitos Avançados
        • Codificação de ABI
        • Hashing
        • This
        • Herança
        • Abstract
        • Interface
        • Chamada entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • ERCs, Bibliotecas e Padrões de Desenvolvimento
      • Boas Práticas de Desenvolvimento
      • Padrões de Desenvolvimento
      • EIP & ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crie um Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Kit de ferramentas para desenvolvimento na Ethereum
      • Requisitos para o módulo 4
        • Terminal
        • Git e Github
        • Node.js e npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Exercício
        • Hardhat
          • Implantação de um contrato no Hardhat
          • Implantação de um contrato em uma rede pública
        • Scaffold-ETH
          • Características do Scaffold-ETHCaracterísticas
          • Como instalar o Scaffold-ETH
  • Módulo 5
    • Segurança, Testes e Auditorias
      • Testes
        • Importância de realizar testes
        • Métodos para testar contratos inteligentes
          • Testes automatizados
          • Testes manuais
        • Conceitos importantes em testes
        • Ferramentas para testes
        • Testes com Hardhat
        • Recursos adicionais
      • Segurança
        • Uma mentalidade diferente de design
        • Principais vulnerabilidades em contratos inteligentes
          • Reentrancy attack (ataque de reentrada)
          • Replay attack (ataque de repetición)
          • Price Oracle Manipulation (Manipulación de Oráculos de Precios)
          • Missing Access Control (Pérdida de Control de Acceso)
          • Reward Manipulation (Manipulación de Recompensas)
          • Failure to Initialize (Falla al Inicializar)
          • Front-running
          • Invariant Breaks (Quebra de Invariantes)
          • Mishandling of ETH (Má gestão de ETH)
          • Denial of Service (DoS - Negação de Serviço)
          • Integer overflow and underflow (Overflow e Underflow de inteiros)
          • Phishing y Typosquatting
        • Recursos adicionais
      • Auditoria de smart contracts
        • Processo de Auditoria
        • Ferramentas
        • Como se preparar para uma auditoria
        • O teste Rekt
        • Desafios
        • Recursos adicionais
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page
  • Redes de computadores
  • Teoria dos Jogos
  • Criptografia
  1. Módulo 1
  2. Introdução a Smart Contracts
  3. Fundamentos de Blockchain

Conceitos-chave em Blockchain

PreviousO que é BlockchainNextComo funciona a Blockchain

Last updated 6 months ago

A genialidade de Satoshi Nakamoto se reflete na sua capacidade de integrar, em sua proposta, avanços realizados em áreas como: redes de computadores, teoria dos jogos e criptografia.

Vamos revisar cada um desses conceitos.

Redes de computadores

As redes se referem à forma como os nós se organizam para validar e manter a integridade da rede. As redes podem ser centralizadas, descentralizadas ou distribuídas, dependendo de como são administradas e de quem tem o controle da rede.

Centralizada

Arquitetura em que todos os nós da rede se conectam a um servidor central que possui o controle e a capacidade de tomar decisões para a rede. Isso significa que a rede não é descentralizada e que a tomada de decisões e o controle da rede estão nas mãos de uma única entidade central.

Vantagens
Desvantagens

Implementação simples e rápida

O servidor centralizado é um ponto único de falha

Fácil manutenção e controle

Falta de transparência e controle centralizado

Descentralizada

É uma arquitetura em que os nós estão distribuídos em múltiplas localizações e não são controlados por uma única entidade central. Em vez disso, cada nó possui uma cópia completa da base de dados da blockchain e os usuários da rede têm certo grau de controle e poder de decisão.

Vantagens
Desvantagens

Maior privacidade e transparência

Altos custos de gestão e manutenção

Maior segurança*

Menor controle e eficiência*

Distribuída

Uma rede distribuída de blockchain é uma rede descentralizada de nós interconectados que mantêm uma cópia idêntica do livro-razão compartilhado e trabalham juntos para validar transações e garantir a integridade da rede. Isso proporciona maior transparência, segurança e resistência à censura em comparação com os sistemas centralizados.

Vantagens
Desvantagens

Tolerância extrema a falhas

Altos custos de gestão e manutenção

Transparência aprimorada

Coordenação lenta entre os nós

Teoria dos Jogos

A teoria dos jogos é o ramo da matemática que estuda a escolha ótima para um indivíduo quando seus resultados dependem do que outros indivíduos façam.

A teoria dos jogos se aplica em diferentes aspectos do design de uma blockchain para garantir que os participantes (mineradores ou validadores) ajam de forma que não comprometa a integridade, continuidade e segurança da rede.

Dessa forma, podemos ver a aplicação da teoria dos jogos nos seguintes aspectos:

Protocolos de Consenso

A teoria dos jogos pode ser utilizada para modelar e analisar os comportamentos estratégicos dos nós em um protocolo de consenso, como no caso do Proof of Work (PoW) e do Proof of Stake (PoS). Esses protocolos garantem que todos os nós da rede concordem com o estado atual da blockchain. Isso evita a possibilidade de introdução de blocos fraudulentos ou transações inválidas na cadeia.

Incentivos

Projetar sistemas de incentivos eficazes é crucial para alinhar os interesses dos participantes em uma rede blockchain. A teoria dos jogos pode ajudar a modelar como os atores racionais respondem a diferentes incentivos e como os mecanismos de consenso podem ser ajustados para alcançar um comportamento desejado.

Por exemplo, no PoS (Proof of Stake), os nós com mais ativos têm maior probabilidade de serem selecionados para validar blocos, o que fornece um incentivo para agir de maneira honesta.

Segurança e Ataques

A teoria dos jogos é aplicada para analisar possíveis ataques e estratégias defensivas no contexto de blockchain. Por exemplo, modela-se como um atacante pode tentar realizar um gasto duplo em uma rede blockchain e como os mecanismos de consenso podem prevenir ou mitigar esses ataques.

Os mecanismos de consenso ajudam a proteger a rede contra vários tipos de ataques, como os ataques de 51% em Prova de Trabalho (PoW), onde um ator mal-intencionado controla mais da metade do poder computacional da rede. Ao implementar um mecanismo de consenso robusto, torna-se mais difícil executar ataques maliciosos.

Um conceito comum tanto na teoria dos jogos quanto na ciência da computação é o Problema dos Generais Bizantinos. Esse problema levanta a questão de como os componentes de um sistema distribuído podem alcançar consenso, mesmo quando alguns deles podem se comportar de maneira maliciosa ou, de forma mais geral, quando falhas podem ocorrer e os nós precisam tomar decisões em conjunto.

A analogia é baseada em um cenário hipotético no qual os generais de um exército bizantino devem coordenar suas ações para atacar ou recuar. No entanto, alguns desses generais podem ser traidores e fornecer ordens falsas.

Este problema é fundamental para compreender os desafios de coordenar sistemas distribuídos na presença de falhas e comportamentos maliciosos. Ele levou ao desenvolvimento de conceitos e algoritmos na teoria da computação distribuída, como o algoritmo de Tolerância a Falhas Bizantinas (Byzantine Fault Tolerance - BFT). Esses conceitos são essenciais para a construção e manutenção de sistemas descentralizados, como a blockchain.

No caso específico do Bitcoin, a solução para lidar com ataques ou falhas na conexão é o consenso por Prova de Trabalho (Proof of Work - PoW). Esse mecanismo fornece um consenso descentralizado, seguro e resistente à censura. A combinação de incentivos econômicos, esforço computacional e descentralização contribui para a robustez e a segurança da rede.

Criptografia

A criptografia é essencial na blockchain para garantir a segurança e a privacidade das transações. Na blockchain, cada transação é registrada em um bloco, que é adicionado a uma cadeia de blocos. Cada bloco contém um hash, que é uma sequência única de caracteres que identifica o bloco e todas as transações que ele contém.

O que é um hash

Um hash (ou "resumo criptográfico") é um código gerado ao aplicar uma função criptográfica a uma informação de entrada. Por exemplo, podemos aplicar uma função de hash a um documento, um vídeo, uma imagem ou um programa, e obter como resultado um código único e de tamanho fixo, conhecido como hash, que equivale a uma "impressão digital" do arquivo original.

Se alguém alterasse, acidental ou fraudulentamente, o arquivo original, o hash mudaria completamente, permitindo identificar que o arquivo foi modificado.

Para um arquivo digital, podemos gerar um hash utilizando uma função criptográfica. No entanto, não é possível reconstruir o documento original a partir do hash, pois esse processo é unidirecional.

Para gerar hashes, são utilizadas diversas funções, dependendo do nível de força de criptografia que se deseja alcançar. No caso do protocolo do Bitcoin, uma das funções hash utilizadas é a SHA-256 (SHA é Secure Hash Algorithm) e gera como resultado um código de 64 caracteres hexadecimais (256 bits).

O sistema de numeração hexadecimal possui 16 símbolos. Sua equivalência no sistema de numeração decimal é mostrada a seguir.

Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Hex. 0 1 2 3 4 5 6 7 8 9 A B C D E F

Requisitos de uma função hash

Uma função hash deve cumprir os seguintes requisitos:

  • Funcionar em uma única direção: Não deve ser possível reconstruir o conteúdo original a partir do hash.

  • Ser determinística: Para um mesmo documento, o hash deve ser sempre o mesmo.

  • Ser calculada rapidamente: O hash deve ser gerado de forma rápida e eficiente.

  • Ter efeito avalanche: Qualquer alteração mínima no arquivo original deve gerar um hash completamente diferente. Ele não deve ser previsível.

  • Evitar colisões: Não deve ocorrer que dois arquivos de origem diferentes gerem o mesmo hash; embora isso seja teoricamente possível, a probabilidade deve ser extremamente baixa.

Você pode testar como funciona um hash aqui.

Merkle Tree

É uma estrutura de dados em forma de árvore utilizada em criptografia e na construção de blockchain para garantir e verificar a integridade dos dados armazenados em blocos. Essa estrutura foi proposta por Ralph Merkle em 1979 e tornou-se fundamental em sistemas distribuídos e criptomoedas, como o Bitcoin.

A ideia básica por trás de uma árvore de Merkle é resumir uma grande quantidade de dados em uma estrutura de árvore, de forma que seja possível verificar eficientemente se um elemento específico está incluído em um conjunto e garantir a integridade dos dados.

A seguir, uma descrição simplificada de como funciona uma árvore de Merkle:

  1. Divisão em Pares:

    • Os dados a serem incluídos na árvore são divididos em blocos (ou elementos individuais).

  2. Hash de Pares:

    • Cada bloco é submetido a uma função de hash, criando assim um conjunto de resumos de hash.

  3. Combinação de Hash:

    • Os resumos de hash são combinados em pares, e esses pares também são submetidos a uma função de hash para criar um nível superior na árvore.

  4. Repetição:

    • O processo se repete até restar apenas um hash, conhecido como a "raiz de Merkle" ou "Merkle root". Essa raiz resume de forma única todos os dados da árvore.

Em uma árvore de Merkle, alterar um único dado em um bloco impactaria os resumos de hash em todos os níveis superiores da árvore, o que significa que é fácil detectar se um dado foi alterado.

Na construção de novos blocos, a raiz de Merkle é incluída no cabeçalho do bloco e utilizada para verificar a autenticidade das transações nesse bloco. Se você tiver a raiz de Merkle e um conjunto de transações, é possível verificar de forma eficiente se uma transação específica está incluída no bloco, sem a necessidade de acessar todas as transações.

Outros usos da criptografía na blockchain

A blockchain também utiliza chaves criptográficas para garantir que apenas os proprietários legítimos das criptomoedas possam realizar transações. Cada usuário possui um par de chaves, uma pública e uma privada, que são utilizadas para assinar transações.

A chave pública é compartilhada com outros usuários da rede e utilizada para verificar a assinatura digital da transação, enquanto a chave privada é mantida em segredo e utilizada para assinar as transações.

Entre as principais ferramentas de criptografia utilizadas na blockchain, temos:

  • SHA-256 é uma função hash criptográfica utilizada na blockchain para garantir a integridade dos dados. Quando um novo bloco é adicionado à cadeia de blocos, a função SHA-256 é aplicada a todo o bloco, produzindo um valor hash único que identifica o bloco. O SHA-256 é uma das funções hash mais utilizadas na blockchain devido à sua segurança e eficiência.

  • ECDSA (Algoritmo de Assinatura Digital de Curva Elíptica) é um algoritmo de assinatura digital usado na blockchain para verificar a autenticidade das transações. Cada transação na cadeia de blocos é assinada digitalmente com a chave privada do remetente utilizando o ECDSA. A rede, então, verifica a assinatura usando a chave pública do remetente para garantir que a transação é autêntica. O ECDSA é um algoritmo seguro e eficiente, amplamente utilizado na blockchain.

  • RIPEMD-160 é uma função hash criptográfica usada na blockchain para gerar endereços únicos de criptomoedas. Quando uma carteira de criptomoedas é criada, gera-se uma chave privada única. Em seguida, o RIPEMD-160 é utilizado para gerar um endereço público único a partir da chave privada. Esse endereço público é usado para enviar e receber criptomoedas. O RIPEMD-160 é uma função hash segura e eficiente, amplamente utilizada na blockchain para criar endereços únicos e proteger a privacidade dos usuários.

Por que dizemos que bitcoin é uma criptomoeda

Sempre ouvimos que o Bitcoin é uma criptomoeda. Agora podemos entender por que ele é "cripto": sua existência é sustentada por várias ferramentas de criptografia que permitem:

  • Proteger o histórico das transações armazenadas na blockchain

  • Gerar um mecanismo para recompensar os mineradores participantes

  • Verificar que quem envia os bitcoins é o proprietário das moedas

  • Garantir que as transações sejam válidas

  • Assegurar a privacidade de quem realiza transações.