Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Entendendo o Geth - A maior blockchain do mundo foi desenvolvida em Go!

Entendendo o Geth - A maior blockchain do mundo foi desenvolvida em Go!

Nesta talk apresentada durante a GopherCon Brasil de 2018 eu explorei a estrutura do Geth, a aplicação desenvolvida pela comunidade Ethereum que é capaz de se contectar a blockchain da criptomoeda, executar os smart contracts e muito mais.
Vídeo da talk disponível em: buff.ly/2vASUYQ

Rafael Calixto

September 28, 2018
Tweet

More Decks by Rafael Calixto

Other Decks in Programming

Transcript

  1. About me R A F A E L C A

    L I X T O M B A E M B I G D A T A ( C I Ê N C I A D E D A D O S ) P E L O I G T I D A T A E N G I N E E R N A W I S E & T R U S T E D I T O R & C U R A D O R D E A R T I G O S S O B R E C R I P T O M O E D A S N A B A R Õ E S D I G I T A L P U B L I S H I N G
  2. also... R A F A E L C A L

    I X T O E N T U S I A S T A D E B I G D A T A , D A T A S C I E N C E E C R Y P T O C U R R E N C Y P Y T H O N I S T A D E C O R A Ç Ã O F O W A R D , S E G U N D A L I N H A N O C O S T Ã O R U G B Y
  3. Design C H A L L E N G E

    Objetivo: Fazer uma introdução ao projeto Geth
  4. Criptomoedas 2009 := Bitcoin O Bitcoin foi a primeira criptomoeda

    a ser lançada e inovou ao utilizar uma blockchain como estrutura de registro e validação das transações. 1991 := Blockchain O conceito foi primeiramente idealizado por Stuart Haber e W. Scott Stornetta. Em 1992 Bayer, Haber e Stornetta aperfeiçoaram o modelo. 2015 := Ethereum Ethereum é lançado implementando os smart contracts e, em pouco tempo, se torna a criptomoeda com o maior número de transações na blockchain. 2016 := Ethereum Classic Após o hack do projeto The DAO a comunidade se divide e surge o Ethereum Classic, um fork do projeto Ethereum original.
  5. Atualmente a blockchain do Ethereum possui um volume maior de

    transações do que a blockchain do Bitcoin. https://bitinfocharts.com/ Criptomoedas
  6. Blockchain A blockchain consiste em uma rede de computadores que

    trabalha em conjunto para validar e manter todas as transações realizadas dentro da rede. No projeto Ethereum a aplicação responsável por se conectar e interagir com esta rede chama-se Geth e foi desenvolvido em Go.
  7. Blockchain A blockchain do Ethereum é capaz de armazenar bytecodes

    que podem ser interpretados por uma VM e gerar novas transações de forma automatizada. Estes códigos são chamados de Smart Contracts. EVM (Ethereum Virtual Machine) ABI (Appication Binary Interface) Solidity, Serpent, Vyper, LLL
  8. Geth Desenvolvido na versão 1.7 do Go. Gera uma CLI

    (Command Line Interface) para interação com a blockchain do Ethereum (produção ou teste) ou para criação de uma blockchain privada. Possui uma virtual machine própria (EVM - Ethereum Virtual Machine) que interpreta e executa os bytecodes dos Smart Contracts.
  9. Geth geth -> Realiza ações interagindo com a blockchain (produção,

    teste ou privada) abigen -> Gerador de código fonte para converter as definições de contratos Ethereum em pacotes Go. bootnode -> Usado para descobrir novos nós em uma blockchain privada. evm -> Capaz de executar bytecodes para ações dentro da blockchain. gethrpctest -> Ferramenta de desenvolvimento para suporte ao ethereum/rpc-test test suite que valida as conformidades do baseline para oas especificações do Ethereum JSON RPC specs. Comandos da interface:
  10. Geth rlpdump -> Ferramenta de desenvolvimento para converter binários RLP

    (Recursive Length Prefix) para uma representação hierárquica amigável ao usuário. swarm -> Ponto de entrada para a rede Swarm. puppeth -> Uma CLI para ajudar a criar uma blockchain privada. Comandos da interface:
  11. Funcionamento go-ethereum/cmd/geth/main.go go-ethereum/cmd/utils/flags.go >> CLI A interface é criada no

    pacote utils e importada para o main na variável app. Além de permitir uma pré configuração da CLI, isso também ajuda a tornar o código mais legível, pois diferencia a CLI principal de outras secundárias que são criadas no main.
  12. Funcionamento Comandos -> go-ethereum/cmd/geth/main.go >> geth Na função init( )

    é carregado um slice de comandos que o Geth poderá executar. Estas variáveis estão presentes em outros arquivos do pacote main.
  13. Funcionamento Função Before -> go-ethereum/cmd/geth/main.go >> geth A função Before

    verifica as condições do hardware e do próprio Geth sempre antes de qualquer outro comando ser executado. Para isso, utiliza as bibliotecas core runtime, context e a interface Go sigar, que é uma implementação em Go da API sigar.
  14. Funcionamento Função After -> go-ethereum/cmd/geth/main.go Função Main -> go-ethereum/cmd/geth/main.go >>

    geth Análogo a função After é executada após um comando ser executado. A função Main é extremamente simples e basicamente executa a CLI.
  15. Funcionamento Utilizando o comando geth podemos iniciar um nós em

    ambiente de desenvolvimento. Ao iniciar um nó no ambiente de desenvolvimento, uma conta é gerada automaticamente. >> Iniciando um nó na blockchain O parâmetro datadir indica o local onde as informações das contas serão armazenadas, tendo como referência o diretório indicado pela variável de ambiente GETH_HOME.
  16. Funcionamento É possível criar uma nova conta com o comando

    geth account new. Uma nova conta foi criada e as primary keys são armazenadas no diretório indicado no datadir. >> Iniciando um nó na blockchain