From e3bf8f4659d077306857e8e59cf13fe8e320eb57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Fri, 30 Jun 2017 20:42:46 -0300 Subject: [PATCH 01/10] Added README.pt-br.adoc --- .gitignore | 1 + README.pt-br.adoc | 106 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 README.pt-br.adoc diff --git a/.gitignore b/.gitignore index 7caf954..3431e9b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules/ tools/runkeeper/ docker-compose.override.yml +README.pt-br.html diff --git a/README.pt-br.adoc b/README.pt-br.adoc new file mode 100644 index 0000000..d8f0106 --- /dev/null +++ b/README.pt-br.adoc @@ -0,0 +1,106 @@ += Demonstração Blockchain +:author: Paulo Jerônimo +:toc: +:toc-title: Conteúdo +:toclevels: 4 +:numbered: + +:blockchain: pass:[blockchain] + +Uma aplicação web para demonstrar conceitos de básicos e fundamentais de uma {blockchain} (ou, traduzindo ao pé da letra para o português: cadeia de blocos). + +Essa demonstração pode ser visualizada em duas versões: + +* Versão original (em inglês) (criada por https://github.com/anders94[Anders Brownworth]): https://www.youtube.com/watch?v=_160oMzblY8[Blockchain 101 - Demo] +* Versão brasileira (criada por https://github.com/paulojeronimo[Paulo Jerônimo] para a http://blockchain4devs.com[blockchain4devs.com]): + +Através dos vídeos acima é feita uma apresentação, visual, que consideramos ser bastante elucidante para os conceitos por trás de uma {blockchain}. +É introduzido o conceito de um https://pt.wikipedia.org/wiki/Raz%C3%A3o_(contabilidade)[livro-razão] (distribuído) um aplicação web interativa. +Ela está disponível em: + +http://anders.com/blockchain/ + +== Instalação/configuração + +=== Direta, utilizando o teu próprio sistema operacional (SO) + +Baixe o código: + +[source,bash] +---- +git clone https://github.com/anders94/blockchain-demo.git +---- + +Instale as dependências: + +---- +cd blockchain-demo +npm install +---- + +Execute o servidor: + +---- +./bin/www +---- + +Abra o teu browser e acesse a URL da página de demonstração: http://localhost:3000. + +=== Utilizando o Docker + +Baixe o código: + +---- +git clone https://github.com/anders94/blockchain-demo.git +---- + +Faça a construção do contêiner Docker: + +---- +cd blockchain-demo +docker-compose up -d +---- + +Abra o teu browser e acesse a URL da página de demonstração: http://localhost:3000. + +[NOTE] +==== +Se você estiver utilizando outro SO que não o Linux, macOS por exemplo, antes de executar o `docker-compose`, será necessário a instalação e a configuração do https://docs.docker.com/machine/[docker-machine]. +Além disso, a URL que você acessará no browser não estará em `localhost`. +Nesse caso, siga os passos no subtópico a seguir. +Ele demonstra como utilizar o `docker-machine` para criar uma máquina virtual utilizando o https://virtualbox.org[VirtualBox]. +==== + +==== Numa máquina virtual (criada no VirtualBox e gerenciada pelo docker-machine) + +---- +docker-machine create --driver virtualbox default +eval "$(docker-machine env default)" +---- + +Abra o teu browser e acesse a URL da página de demonstração que devera ser `http://:3000`. + +[NOTE] +==== +O comando `docker-machine ip` pode ser chamada para determinar o IP da máquina virtual executando o docker. +Então, no macOS, o seguinte comando pode ser utilizado para abrir a browser na URL da demonstração: + +---- +open http://$(docker-machine ip):3000 +---- +==== + +== Demonstração, passo a passo + +=== Entendendo o que são hashes + +Hashes são parte de várias informações armazenadas na {blockchain}. + +Via linha de comando também é possível gerar o hash de uma string informada no quadro da aba `Hash`. Para testar isso, num macOS, execute: +---- +echo -n 'Paulo Jerônimo'|shasum -a 256 +---- + +== Envie seu obrigado + +Bitcoin é aceito agradecidamente neste endereço: `1K3NvcuZzVTueHW1qhkG2Cm3viRkh2EXJp` From d767c12257a8b05a22c1cf6179efd701b43770c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Wed, 19 Jul 2017 17:25:01 -0300 Subject: [PATCH 02/10] Split README.pt-br.adoc into several documents bellow docs/pt-br/ --- .gitignore | 2 +- README.md | 1 + README.pt-br.adoc | 106 ------------------ docs/pt-br/.gitignore | 3 + docs/pt-br/build | 37 ++++++ docs/pt-br/demonstracao/index.adoc | 14 +++ docs/pt-br/demonstracao/o-que-e-um-bloco.adoc | 34 ++++++ docs/pt-br/demonstracao/o-que-e-um-hash.adoc | 57 ++++++++++ .../demonstracao/o-que-e-uma-blockchain.adoc | 75 +++++++++++++ docs/pt-br/enviando-um-obrigado.adoc | 14 +++ ...lockchain-fora-do-contexto-financeiro.adoc | 3 + docs/pt-br/extras/ethereum/index.adoc | 7 ++ .../ethereum/o-computador-e-a-rede.adoc | 1 + docs/pt-br/extras/hyperledger/index.adoc | 5 + docs/pt-br/extras/index.adoc | 11 ++ docs/pt-br/index.adoc | 39 +++++++ docs/pt-br/instalacao/index.adoc | 10 ++ docs/pt-br/instalacao/instalacao-direta.adoc | 29 +++++ .../instalacao/instalacao-via-docker.adoc | 46 ++++++++ docs/pt-br/introducao.adoc | 23 ++++ docs/pt-br/todo.adoc | 8 ++ docs/pt-br/uris.conf | 24 ++++ 22 files changed, 442 insertions(+), 107 deletions(-) delete mode 100644 README.pt-br.adoc create mode 100644 docs/pt-br/.gitignore create mode 100755 docs/pt-br/build create mode 100644 docs/pt-br/demonstracao/index.adoc create mode 100644 docs/pt-br/demonstracao/o-que-e-um-bloco.adoc create mode 100644 docs/pt-br/demonstracao/o-que-e-um-hash.adoc create mode 100644 docs/pt-br/demonstracao/o-que-e-uma-blockchain.adoc create mode 100644 docs/pt-br/enviando-um-obrigado.adoc create mode 100644 docs/pt-br/extras/blockchain-fora-do-contexto-financeiro.adoc create mode 100644 docs/pt-br/extras/ethereum/index.adoc create mode 100644 docs/pt-br/extras/ethereum/o-computador-e-a-rede.adoc create mode 100644 docs/pt-br/extras/hyperledger/index.adoc create mode 100644 docs/pt-br/extras/index.adoc create mode 100644 docs/pt-br/index.adoc create mode 100644 docs/pt-br/instalacao/index.adoc create mode 100644 docs/pt-br/instalacao/instalacao-direta.adoc create mode 100644 docs/pt-br/instalacao/instalacao-via-docker.adoc create mode 100644 docs/pt-br/introducao.adoc create mode 100644 docs/pt-br/todo.adoc create mode 100644 docs/pt-br/uris.conf diff --git a/.gitignore b/.gitignore index 3431e9b..ff262b6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ node_modules/ tools/runkeeper/ docker-compose.override.yml -README.pt-br.html +package-lock.json diff --git a/README.md b/README.md index 1c2abbc..8b38c71 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Blockchain Demo A web-based demonstration of blockchain concepts. +_(If you want to read this in Brazilian Portuguese [click this link](docs/pt-br/index.html))_. [![Blockchain 101 - Demo](https://img.youtube.com/vi/_160oMzblY8/0.jpg)](https://www.youtube.com/watch?v=_160oMzblY8) diff --git a/README.pt-br.adoc b/README.pt-br.adoc deleted file mode 100644 index d8f0106..0000000 --- a/README.pt-br.adoc +++ /dev/null @@ -1,106 +0,0 @@ -= Demonstração Blockchain -:author: Paulo Jerônimo -:toc: -:toc-title: Conteúdo -:toclevels: 4 -:numbered: - -:blockchain: pass:[blockchain] - -Uma aplicação web para demonstrar conceitos de básicos e fundamentais de uma {blockchain} (ou, traduzindo ao pé da letra para o português: cadeia de blocos). - -Essa demonstração pode ser visualizada em duas versões: - -* Versão original (em inglês) (criada por https://github.com/anders94[Anders Brownworth]): https://www.youtube.com/watch?v=_160oMzblY8[Blockchain 101 - Demo] -* Versão brasileira (criada por https://github.com/paulojeronimo[Paulo Jerônimo] para a http://blockchain4devs.com[blockchain4devs.com]): - -Através dos vídeos acima é feita uma apresentação, visual, que consideramos ser bastante elucidante para os conceitos por trás de uma {blockchain}. -É introduzido o conceito de um https://pt.wikipedia.org/wiki/Raz%C3%A3o_(contabilidade)[livro-razão] (distribuído) um aplicação web interativa. -Ela está disponível em: - -http://anders.com/blockchain/ - -== Instalação/configuração - -=== Direta, utilizando o teu próprio sistema operacional (SO) - -Baixe o código: - -[source,bash] ----- -git clone https://github.com/anders94/blockchain-demo.git ----- - -Instale as dependências: - ----- -cd blockchain-demo -npm install ----- - -Execute o servidor: - ----- -./bin/www ----- - -Abra o teu browser e acesse a URL da página de demonstração: http://localhost:3000. - -=== Utilizando o Docker - -Baixe o código: - ----- -git clone https://github.com/anders94/blockchain-demo.git ----- - -Faça a construção do contêiner Docker: - ----- -cd blockchain-demo -docker-compose up -d ----- - -Abra o teu browser e acesse a URL da página de demonstração: http://localhost:3000. - -[NOTE] -==== -Se você estiver utilizando outro SO que não o Linux, macOS por exemplo, antes de executar o `docker-compose`, será necessário a instalação e a configuração do https://docs.docker.com/machine/[docker-machine]. -Além disso, a URL que você acessará no browser não estará em `localhost`. -Nesse caso, siga os passos no subtópico a seguir. -Ele demonstra como utilizar o `docker-machine` para criar uma máquina virtual utilizando o https://virtualbox.org[VirtualBox]. -==== - -==== Numa máquina virtual (criada no VirtualBox e gerenciada pelo docker-machine) - ----- -docker-machine create --driver virtualbox default -eval "$(docker-machine env default)" ----- - -Abra o teu browser e acesse a URL da página de demonstração que devera ser `http://:3000`. - -[NOTE] -==== -O comando `docker-machine ip` pode ser chamada para determinar o IP da máquina virtual executando o docker. -Então, no macOS, o seguinte comando pode ser utilizado para abrir a browser na URL da demonstração: - ----- -open http://$(docker-machine ip):3000 ----- -==== - -== Demonstração, passo a passo - -=== Entendendo o que são hashes - -Hashes são parte de várias informações armazenadas na {blockchain}. - -Via linha de comando também é possível gerar o hash de uma string informada no quadro da aba `Hash`. Para testar isso, num macOS, execute: ----- -echo -n 'Paulo Jerônimo'|shasum -a 256 ----- - -== Envie seu obrigado - -Bitcoin é aceito agradecidamente neste endereço: `1K3NvcuZzVTueHW1qhkG2Cm3viRkh2EXJp` diff --git a/docs/pt-br/.gitignore b/docs/pt-br/.gitignore new file mode 100644 index 0000000..97f9b08 --- /dev/null +++ b/docs/pt-br/.gitignore @@ -0,0 +1,3 @@ +/index.html +/index.xml +/blockchain-demo.pdf diff --git a/docs/pt-br/build b/docs/pt-br/build new file mode 100755 index 0000000..dbd492f --- /dev/null +++ b/docs/pt-br/build @@ -0,0 +1,37 @@ +#!/bin/bash +set +x +set -e + +BASE_DIR=`cd "$(dirname "$0")"; pwd` +pdf_generate=${pdf_generate:-true} +use_fopub=${use_fopub:-false} +fopub=${fopub:-~/Projects/github.com/asciidoctor/asciidoctor-fopub/bin/fopub} + +cd "$BASE_DIR" + +which asciidoctor > /dev/null || { echo "Install asciidoctor first!"; exit 1; } + +clean() { + rm -f index.{html,xml} + rm -f blockchain-demo.pdf +} + +main() { + asciidoctor index.adoc + result=$? + + $pdf_generate || exit $result + + if $use_fopub + then + asciidoctor -b docbook -d book -a data-uri! index.adoc + [ -x "$fopub" ] || { echo "WARN: $fopub not executable. PDF will not be generated!"; exit 0; } + $fopub index.xml + else + asciidoctor-pdf -o blockchain-demo.pdf index.adoc + fi +} + +op=$1 +[ "$op" ] || op=main +type $op &> /dev/null && $op || { echo "\"$op\" isn't an option!"; exit 1; } diff --git a/docs/pt-br/demonstracao/index.adoc b/docs/pt-br/demonstracao/index.adoc new file mode 100644 index 0000000..fad3c18 --- /dev/null +++ b/docs/pt-br/demonstracao/index.adoc @@ -0,0 +1,14 @@ +[[demonstracao]] += Demonstração + +:srcdir: ../../.. + +:leveloffset: +1 + +include::o-que-e-um-hash.adoc[] + +include::o-que-e-um-bloco.adoc[] + +include::o-que-e-uma-blockchain.adoc[] + +:leveloffset: -1 diff --git a/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc b/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc new file mode 100644 index 0000000..e558571 --- /dev/null +++ b/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc @@ -0,0 +1,34 @@ +[[o-que-e-um-bloco]] += O que é um Bloco? + +Vamos agora para a aba {uri-blockchain-demo-block}[Block]. +Adicionaremos, acima do campo `Data` aprensentado na aba `Hash`, dois outros campos: `Block` e `Nonce`. +Eles serão explicados agora. +Também vamos criar um botão `Miner` e explicar qual será sua utilidade. +Com a adição desses novos elementos, estamos criando o que chamaremos de *Bloco*. + +Um bloco, então, tem um número identificador (`Block`), um `Nonce`, e pode ser "minerado" quado clicarmos no botão `Miner`. +Também notemos que o campo `Hash` agora possui um valor interessante, iniciado por quatro zeros ("0000"). +Esse valor de `Hash` é bastante singular. +Ele é criado através de uma *regra que é utilizada para verificar se o bloco é válido*. +Nesse nosso caso, a regra é bem simples: o valor do `Hash`, calculado em função do valor inserido em `Data` (e dos outros campos), precisará começar com esses quatro zeros. + +Para encontar um `Hash` que safisfaça essa regra, após inserir os dados que desejamos no campo `Data`, iremos alterar o valor de `Nonce`. +O número identificador do bloco (`Block`) será gerado automaticamente (apesar de podermos modificá-lo, para testes, nesse exemplo). +Esse cáculo do `Hash` será repetidamente refeito, até encontarmos um `Hash` que comece com esses quatro zeros. + +Você pode notar também que, qualquer mudança nos campos (`Block`, `Nonce` e `Data`) altera o valor de `Hash`. + +Manualmente, poderíamos ficar tentando modificar o valor de `Nonce` até encontarmos a solução para esse problema. +Mas, fazendo isso, poderemos passar vários minutos ou horas (ou mesmo dias) em tentativas. +Então, o botão `Miner` servirá para realizar essa tarefa pra nós. + +A atividade de {uri-mining}["mineração"], então, é nesse nosso caso uma tarefa que será executada pelo computador. +Ela será realizada em função do valor de todos os campos e buscará um `Hash` que atenda a regra estabelecida: começar com quatro zeros. +Essa regra também é conhecida por "desafio matemático". +Você pode notar que esse desafio (no nosso caso e em várias outras formas de propô-lo) não é uma função complexa. +Por outro lado, ela é onerosa pois pode cosumir muito tempo de processamento. +O trabalho de "mineração" realizado dessa forma é também conhecido por {uri-proof-of-work}["Proof of Work"]. + +Após um bloco ser "minerado", a conferência de sua validade é algo extremamente simples e rápido. +Essa conferência é apenas o cálculo do `Hash` de `Data` + `Nonce` e a obediência a regra estabelecida (em nosso caso, um `Hash` começando com quatro zeros iniciais). diff --git a/docs/pt-br/demonstracao/o-que-e-um-hash.adoc b/docs/pt-br/demonstracao/o-que-e-um-hash.adoc new file mode 100644 index 0000000..287f785 --- /dev/null +++ b/docs/pt-br/demonstracao/o-que-e-um-hash.adoc @@ -0,0 +1,57 @@ +[[o-que-e-um-hash]] += O que é um Hash? + +Hashes são parte de várias informações armazenadas na {blockchain} e são essenciais para garantir sua segurança. + +Matematicamente falando, uma {uri-funcao-hash}[função hash] é um algoritmo que mapeia dados de comprimento variável para dados de comprimento fixo. +Os valores retornados por uma função hash são chamados valores hash, códigos hash, somas hash, checksums ou, simplesmente, hashes. + +Nessa demonstração, a aba {uri-blockchain-demo-hash}[Hash] possibilita a entrada de uma informação de tamanho qualquer (no campo `Data`) e produz um `Hash` de tamanho fixo. +A função SHA256 é uma das variantes do {uri-sha-2}[SHA-2] e utilizada para gerar esse código hash. +Esse código é geralmente representado por uma string de 64 caracteres hexadecimais (de "0" a "9" e de "a" a "f"). +Obviamente, além dessa função, existem várias outras que poderiam ser utilizadas para gerar uma string de tamanho fixo a partir de uma quantidade de dados variáveis. +Outros exemplos de funções (dentre várias) são o MD5 e o SHA-1. + +Ao se gerar um hash, espera-se que a cadeia fixa produzida a partir de um conjunto de informações tenha sempre um valor diferente para outro conjunto de entrada. +Se o hash gerado num conjunto de dados for igual ao de outro, ocorre o que chamamos de colisão. +Quanto menos colisões houverem ao se gerar um hash para um conjunto de informações diferentes, melhor o algoritmo de Hash. + +Foram necessários 20 anos para que fosse {uri-announcing-first-sha1-collision}[anunciada a primeira colisão de hash para a função SHA-1]. +Isso quer dizer que esse algoritmo foi considerado seguro e utilizado por todo esse espaço de tempo, sem problemas. +O site {uri-shattered} demonstra que, para se proferir um ataque onde se tentaria obter um hash igual para um `input` diferente utilizando o algoritmo SHA-1, seriam necessárias 9.223.372.036.854.775.808 de execuções do algoritmo. +Ou seja, um número monstruoso de compressões. +Para ser realizado esse número de compressões, seriam necessários 6.500 anos de processamento de uma CPU comum (ou 110 anos de uma GPU). + +Uma colisão de SHA-1 é demonstrada na saída dos seguintes comandos (executados num macOS): + +---- +for i in 1 2; do curl -O https://shattered.it/static/shattered-i.pdf; done +diff shattered-*.pdf +shasum shattered-*.pdf +---- + +O código JavaScript da {uri-blockchain-demo-hash}[página Hash] é um código escrito em Jade (link:{rootdir}/views/hash.jade[]). +Ele calcula o hash através de um código (em JavaScript) que executa a função sha256. + +[source,javascript] +.{rootdir}/public/javascripts/lib/sha256.js +---- +include::{srcdir}/public/javascripts/blockchain.js[lines=1..4] +---- + +Obviamente, a função hash implementada em JavaScript também deve produzir o mesmo resultado que uma função que pode ser chamada via linha de comando. +Sendo assim, também é possível gerar o hash de uma string informada no quadro `Data` através de uma linha de comando (em Bash, por exemplo). + +O Hash para a string vazia (valor inicial do quadro), pode ser calculado assim: + +---- +echo -n ''|shasum -a 256 +---- + +Então, o hash de "Paulo Jerônimo" poderia ser calculado assim: + +---- +echo -n 'Paulo Jerônimo'|shasum -a 256 +---- + +Para se aprofundar um pouco mais em funções hash aplicadas a moedas digitais e saber quando um colisões em valores de hash tem importância nesse contexto, recomenda-se a leitura do artigo {uri-history-of-hash-function-attacks}["Lessons From The History Of Attacks On Secure Hash Functions"]. diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain.adoc new file mode 100644 index 0000000..d768cff --- /dev/null +++ b/docs/pt-br/demonstracao/o-que-e-uma-blockchain.adoc @@ -0,0 +1,75 @@ +[[o-que-e-uma-blockchain]] += O que é uma Blockchain? + +== Uma visualização gráfica + +Finalmente, vamos à {uri-blockchain-demo-blockchain}[aba {blockchain}] para entender o que é esse conceito genial, numa visualização gráfica! 😃 + +Nessa aba, apenas para fins de demonstração, apresentamos cinco (5) blocos encadeados. +Observe que, agora, foi adicionado o campo `Prev`. +Esse campo também é um `Hash`. +No primeiro bloco, seu valor é nulo. +Para todos os demais blocos, o campo `Prev` armazena o valor do `Hash` do bloco anterior. +Assim, agora há um encademento que forma o que chamamos de "corrente de blocos". +Ou, o nome bonito em inglês: {blockchain}. + +O objetivo desse encadeamento entre os blocos é muito simples. +Se você fizer uma alteração em qualquer campo do bloco o seu `Hash` será alterado. +Consequentemente, todos os blocos posteriores a essa alteração também não serão mais considerados válidos. +O motivo para isso é que, a partir do momento em que é modificado o `Hash` de um bloco, o valor de `Prev`, registrado no bloco posterior, não coincidirá mais. +Logo, uma {blockchain} considerará todos os blocos inválidos a partir de algum que tenha sido adulterado em qualquer um de seus campos. + +Para fazer uma {blockchain} adulterada ser novamente considerada válida, alguns passos seriam necessários. +Por exemplo, vamos supor que estamos fazendo uma alteração de dados apenas no último bloco. +Nesse caso, tornar a {blockchain} válida é algo simples: basta recalcular o `Hash` desse bloco executando a operação `Miner`. +Ou seja, executar o processo de mineração. + +O problema real surge ao ser feita uma tentativa de alterar um bloco que não é o último! +Vamos ver também que a dificuldade de se alterar um bloco é gradativamente aumentada quando ele vai se aproximando do primeiro bloco (ou se distanciando do último). +Suponhamos, por exemplo, que alguém tentasse fazer a adulteração de um dado no bloco 3. +Para que isso fosse possível, a operação de mineração para todos deveria ser novamente realizada a partir desse bloco. +Assim, o custo de tornar um bloco válido vai aumentando exponencialmente a medida em que ele se aproxima do primeiro bloco. + +Podemos observar, então, que uma {blockchain} é uma estrutura (ou um banco) de dados que rejeita modificações que não sejam no último bloco. +Poderíamos fazer uma comparação com um livro onde só é possível se escrever na última página. +E, continuando nessa linha, esse livro só poderia ser escrito a caneta. +Por fim, qualquer tentativa de se modificar um dado registrado nesse livro o deixaria manchado (ou rasurado) para sempre. + +Uma {blockchain} é citada por muitos como sendo "o protocolo da confiança". +Um dos motivos é decorrente do fato de somente ser possível se adicionar informações. +Não são permitidas alterações de informação, pois, pelo que vimos, a rede rejeita mudanças através de seu protocolo. +Finalmente, é importante entender que uma {blockchain} é uma estrutura de dados que fica "na mão de muitos". +Ou seja, é descentralizada. +Vamos agora entender como uma {blockchain} é considerada ainda mais segura quando ela é distribuída entre vários nós de uma rede. + +== A Blockchain é distribuída + +Vimos que uma {blockchain} é uma estrutura de dados confiável que só aceita inserções de dados. +Ou seja, ela é resistente a mudanças. +Mas, além disso, uma {blockchain} é também uma rede de computadores onde essa estrutura de dados é replicada. +Dessa forma, sua estrutura de dados existe, distribuída, em cada um dos computadores (nós) dessa rede. + +O objetivo principal da distribuição de uma {blockchain} entre vários nós é impedir que mesmo sendo ela válida num único nó, ela só seja totalmente válida quando houver um consenso (na rede) de que suas informações também são válidas em todos os outros nós. +Numa {blockchain}, os nós pertencentes a sua rede são responsáveis por validar dados e retransmití-los de forma que eles sejam replicados em todos os nós. +Mais especificamente, quando dados precisam ser inseridos num bloco, todos os nós devem verificar se esses dados são válidos. +Caso não sejam, esses dados serão descartados e não retransmitidos aos próximos nós. + +A validação de dados, obviamente, depende do que são esses dados. +A primeira {blockchain} foi construída para resolver um problema complexo: a tranferência de valores. +Dando crédito: *os conceitos de {blockchain} que estamos aprendendo surgiram para fazer a moeda digital {uri-bitcoin}[Bitcoin] entrar em funcionamento*. +Perceba que só agora estamos falando de uma das várias possibilidades de aplicação da {blockchain}. +Apresentaremos, ainda, vários outros casos de uso de uma {blockchain}. + +O que diferencia a solução da {blockchain}, dada para o Bitcoin, de soluções bancárias tradicionais que resolvem esse problema, entretanto, é a descentralização. +Detalharemos mais sobre transações, logo a frente. +Mas, por enquanto, é importante saber que uma {blockchain}, por ser descentralizada, precisa criar algoritmos que promovam a manutenção de um consenso entre os nós. + +É através de consenso que uma {blockchain} identifica se uma cópia de seus dados, que está num nó, é realmente válida ou não. +Acessando a aba {uri-blockchain-demo-distributed}[Distributed] podemos identificar que a alteração de uma das cópias da {blockchain} num dos nós é possível de ser realizada. +E, essa alteração pode, com certeza, tornar a cópia da {blockchain} válida nesse nó. +Como vimos, para isso ocorrer, seria necessário refazer os cálculos de `Hash` para cada bloco a partir do que for modificado. +Mas, caso isso ocorra, outros nós da rede percebem a diferença e, automaticamente, eliminam a participação do nó que possui a {blockchain} adulterada. +Isso é feito através de consenso. +A rede que está certa é a rede que detém a maioria do consenso (51%). + +== A Blockchain utilizada no controle de transações: o Bitcoin diff --git a/docs/pt-br/enviando-um-obrigado.adoc b/docs/pt-br/enviando-um-obrigado.adoc new file mode 100644 index 0000000..e5d36bc --- /dev/null +++ b/docs/pt-br/enviando-um-obrigado.adoc @@ -0,0 +1,14 @@ +[[enviando-um-obrigado]] += Enviando um obrigado + +Se você gostou deste projeto, incluindo seu texto e vídeos, e deseja enviar um "obrigado", saiba que Bitcoin e Ethereum são, agradecidamente, aceitos por seus desenvolvedores nos seguintes endereços: + +* {uri-andersbrownworth}[Anders Brownworth] (criador do projeto): +** Bitcoin (BTC): `1K3NvcuZzVTueHW1qhkG2Cm3viRkh2EXJp` +* {uri-paulojeronimo}[Paulo Jerônimo] (criador deste documento e de vídeos em português) +** Bitcoin (BTC): `1LTrDUdUw2zCS7LE93hDuvYiG326VnxL6k` +** Ether (ETH): `0xc8780E07eE3C0f058315a20D2fD7dE6d2505f7a3` + +Claramente, parte do valor depositado será revertido em melhorias para este projeto. + +include::todo.adoc[leveloffset=+1] diff --git a/docs/pt-br/extras/blockchain-fora-do-contexto-financeiro.adoc b/docs/pt-br/extras/blockchain-fora-do-contexto-financeiro.adoc new file mode 100644 index 0000000..9a9ce3d --- /dev/null +++ b/docs/pt-br/extras/blockchain-fora-do-contexto-financeiro.adoc @@ -0,0 +1,3 @@ += A Blockchain utilizada fora do contexto financeiro + +== Em desenvolvimento: run4.money (uma nova forma de ganhar prêmios em corridas) diff --git a/docs/pt-br/extras/ethereum/index.adoc b/docs/pt-br/extras/ethereum/index.adoc new file mode 100644 index 0000000..8d27a3b --- /dev/null +++ b/docs/pt-br/extras/ethereum/index.adoc @@ -0,0 +1,7 @@ += Ethereum + +:leveloffset: +1 + +include::o-computador-e-a-rede.adoc[] + +:leveloffset: -1 diff --git a/docs/pt-br/extras/ethereum/o-computador-e-a-rede.adoc b/docs/pt-br/extras/ethereum/o-computador-e-a-rede.adoc new file mode 100644 index 0000000..9cf623e --- /dev/null +++ b/docs/pt-br/extras/ethereum/o-computador-e-a-rede.adoc @@ -0,0 +1 @@ += O computador é a rede! diff --git a/docs/pt-br/extras/hyperledger/index.adoc b/docs/pt-br/extras/hyperledger/index.adoc new file mode 100644 index 0000000..0a1e41b --- /dev/null +++ b/docs/pt-br/extras/hyperledger/index.adoc @@ -0,0 +1,5 @@ += Hyperledger + +:leveloffset: +1 + +:leveloffset: -1 diff --git a/docs/pt-br/extras/index.adoc b/docs/pt-br/extras/index.adoc new file mode 100644 index 0000000..53e7dc7 --- /dev/null +++ b/docs/pt-br/extras/index.adoc @@ -0,0 +1,11 @@ += Extras + +:leveloffset: +1 + +include::blockchain-fora-do-contexto-financeiro.adoc[] + +include::ethereum/index.adoc[] + +include::hyperledger/index.adoc[] + +:leveloffset: -1 diff --git a/docs/pt-br/index.adoc b/docs/pt-br/index.adoc new file mode 100644 index 0000000..5d00b97 --- /dev/null +++ b/docs/pt-br/index.adoc @@ -0,0 +1,39 @@ += Blockchain: Uma visualização gráfica +:author: Paulo Jerônimo +:toc: +:toc-title: Conteúdo +:toclevels: 4 +:numbered: +:icons: font + +:srcdir: ../.. + +ifdef::backend-html5[] +:rootdir: ../.. +:blockchain: pass:[Blockchain] +endif::[] + +ifdef::backend-pdf[] +:rootdir: blockchain-demo +:blockchain: Blockchain +endif::[] + +include::uris.conf[] + +:leveloffset: +1 + +include::introducao.adoc[] + +<<< +include::instalacao/index.adoc[] + +<<< +include::demonstracao/index.adoc[] + +<<< +include::extras/index.adoc[] + +<<< +include::enviando-um-obrigado.adoc[] + +:leveloffset: -1 diff --git a/docs/pt-br/instalacao/index.adoc b/docs/pt-br/instalacao/index.adoc new file mode 100644 index 0000000..887731e --- /dev/null +++ b/docs/pt-br/instalacao/index.adoc @@ -0,0 +1,10 @@ +[[instalacao]] += Instalação + +:leveloffset: +1 + +include::instalacao-direta.adoc[] + +include::instalacao-via-docker.adoc[] + +:leveloffset: -1 diff --git a/docs/pt-br/instalacao/instalacao-direta.adoc b/docs/pt-br/instalacao/instalacao-direta.adoc new file mode 100644 index 0000000..099da58 --- /dev/null +++ b/docs/pt-br/instalacao/instalacao-direta.adoc @@ -0,0 +1,29 @@ +[[instalacao-direta]] += Direta, utilizando o teu próprio sistema operacional (SO) + +Baixe o código: + +[source,bash,subs="attributes"] +---- +git clone {uri-blockchain-demo} +---- + +Para rodar essa aplicação, você deverá ter instalado o {uri-nodejs}[Node.js]. Em seguida, instale as dependências dessa aplicação através do {uri-npm}[npm]. + +[NOTE] +==== +A instalação do comando npm pode ser executada, no macOS, através de um único comando: `brew install npm`. Isso é tudo que é necessário fazer neste sistema operacional. +==== + +---- +cd blockchain-demo +npm install +---- + +Execute o servidor: + +---- +./bin/www +---- + +Abra o teu browser e acesse a URL da página de demonstração: http://localhost:3000. diff --git a/docs/pt-br/instalacao/instalacao-via-docker.adoc b/docs/pt-br/instalacao/instalacao-via-docker.adoc new file mode 100644 index 0000000..800b2d2 --- /dev/null +++ b/docs/pt-br/instalacao/instalacao-via-docker.adoc @@ -0,0 +1,46 @@ +[[instalacao-via-docker]] += Utilizando o Docker + +Baixe o código: + +[source,bash,subs="attributes"] +---- +git clone {uri-blockchain-demo} +---- + +Faça a construção do contêiner Docker: + +---- +cd blockchain-demo +docker-compose up -d +---- + +Abra o teu browser e acesse a URL da página de demonstração: http://localhost:3000. + +[NOTE] +==== +Se você estiver utilizando outro SO que não o Linux, no macOS por exemplo, antes de executar o `docker-compose`, será necessário a instalação e a configuração do {uri-docker-machine}[docker-machine]. +Além disso, a URL que você acessará no browser não estará em `localhost`. +Nesse caso, siga os passos no subtópico a seguir. +Ele demonstra como utilizar o `docker-machine` para criar uma máquina virtual utilizando o {uri-virtualbox}[VirtualBox]. +==== + +[[instalacao-via-docker-virtualbox]] +== Numa máquina virtual (criada no VirtualBox e gerenciada pelo docker-machine) + +---- +docker-machine create --driver virtualbox default +eval "$(docker-machine env default)" +---- + +Abra o teu browser e acesse a URL da página de demonstração que devera ser `http://:3000`. + +[NOTE] +==== +O comando `docker-machine ip` pode ser chamada para determinar o IP da máquina virtual executando o docker. +Então, no macOS, o seguinte comando pode ser utilizado para abrir a browser na URL da demonstração: + +---- +open http://$(docker-machine ip):3000 +---- +==== diff --git a/docs/pt-br/introducao.adoc b/docs/pt-br/introducao.adoc new file mode 100644 index 0000000..9fd3fd5 --- /dev/null +++ b/docs/pt-br/introducao.adoc @@ -0,0 +1,23 @@ +[[introducao]] += Introdução + +Este projeto provê uma aplicação web para demonstrar conceitos básicos e fundamentais de uma {blockchain} (ou, traduzindo ao pé da letra para o português, corrente de blocos). + +Essa demonstração pode ser visualizada em duas versões: + +* Versão original (em inglês) (criada por {uri-andersbrownworth}[Anders Brownworth]). Vídeos: +** {uri-blockchain-101-demo}[Blockchain 101 - Demo] +* Versão brasileira (criada por {uri-paulojeronimo}[Paulo Jerônimo] para a organização {uri-blockchain4devs}. Vídeos [red]#(em produção)#: +** blockchain-demo - instalação +** blockchain-demo - o que é um Hash? +** blockchain-demo - o que é um Bloco? +** blockchain-demo - uma visualização gráfica da Blockchain +** blockchain-demo - a blockchain é distribuída +** blockchain-demo - a blockchain utilizada no controle de transações (o Bitcoin) + +Através dos vídeos acima é feita uma apresentação, visual, que consideramos ser bastante elucidante nos conceitos elementares de uma {blockchain}. +É introduzido o conceito de um {uri-livro-razao}[livro-razão] (distribuído) através de uma aplicação web interativa. + +Essa aplicação web está disponível (em execução) no seguinte endereço: + +* {uri-anders-blockchain} diff --git a/docs/pt-br/todo.adoc b/docs/pt-br/todo.adoc new file mode 100644 index 0000000..b9990c1 --- /dev/null +++ b/docs/pt-br/todo.adoc @@ -0,0 +1,8 @@ += Melhorias que você pode aguardar + +Próximas melhorias esperadas para a versão em português: + +* Criação de closed captions (em inglês) para os vídeos disponibibilizados em pt-br. +* Internacionalização da aplicação para pt-br. +* Disponiblização da aplicação em execução, também, em {uri-blockchain4devs}. +* Apresentação de links, na página principal da aplicação, para a visualização dos vídeos em português. diff --git a/docs/pt-br/uris.conf b/docs/pt-br/uris.conf new file mode 100644 index 0000000..6463874 --- /dev/null +++ b/docs/pt-br/uris.conf @@ -0,0 +1,24 @@ +:uri-nodejs: https://nodejs.com +:uri-npm: https://docs.npmjs.com/getting-started/what-is-npm +:uri-docker-machine: https://docs.docker.com/machine/ +:uri-virtualbox: https://virtualbox.org +:uri-andersbrownworth: https://github.com/anders94 +:uri-blockchain-101-demo: https://www.youtube.com/watch?v=_160oMzblY8 +:uri-paulojeronimo: http://paulojeronimo.com +:uri-blockchain4devs: http://github.com/blockchain4devs +:uri-livro-razao: https://pt.wikipedia.org/wiki/Raz%C3%A3o_(contabilidade) +:uri-anders-blockchain: http://anders.com/blockchain/ +:uri-funcao-hash: https://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_hash +:uri-sha-2: https://pt.wikipedia.org/wiki/SHA-2 +:uri-announcing-first-sha1-collision: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html +:uri-shattered: https://shattered.it/ +:uri-history-of-hash-function-attacks: https://z.cash/technology/history-of-hash-function-attacks.html +:uri-mining: https://en.wikipedia.org/wiki/Bitcoin_network#Mining +:uri-proof-of-work: https://en.wikipedia.org/wiki/Proof-of-work_system +:uri-bitcoin: https://bitcoin.org + +:uri-blockchain-demo: http://anders.com/blockchain +:uri-blockchain-demo-hash: {uri-blockchain-demo}/hash.html +:uri-blockchain-demo-block: {uri-blockchain-demo}/block.html +:uri-blockchain-demo-blockchain: {uri-blockchain-demo}/blockchain.html +:uri-blockchain-demo-distributed: {uri-blockchain-demo}/distributed.html From 22ace2f34ecdc78c2727a423a85bf3cbf9a3e8d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Thu, 20 Jul 2017 16:30:00 -0300 Subject: [PATCH 03/10] pt-br docs updates --- docs/pt-br/.gitignore | 6 +- docs/pt-br/build | 83 +++++++++++++++---- docs/pt-br/build.conf.sample | 7 ++ docs/pt-br/demonstracao/index.adoc | 2 +- .../a-blockchain-e-distribuida.adoc | 30 +++++++ ...n-utilizada-no-controle-de-transacoes.adoc | 2 + .../o-que-e-uma-blockchain/index.adoc | 12 +++ .../uma-visualizacao-grafica.adoc} | 38 +-------- docs/pt-br/index.adoc | 10 +-- docs/pt-br/introducao.adoc | 8 ++ docs/pt-br/uris.conf | 5 ++ 11 files changed, 143 insertions(+), 60 deletions(-) create mode 100644 docs/pt-br/build.conf.sample create mode 100644 docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida.adoc create mode 100644 docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-utilizada-no-controle-de-transacoes.adoc create mode 100644 docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc rename docs/pt-br/demonstracao/{o-que-e-uma-blockchain.adoc => o-que-e-uma-blockchain/uma-visualizacao-grafica.adoc} (52%) diff --git a/docs/pt-br/.gitignore b/docs/pt-br/.gitignore index 97f9b08..59798f6 100644 --- a/docs/pt-br/.gitignore +++ b/docs/pt-br/.gitignore @@ -1,3 +1,3 @@ -/index.html -/index.xml -/blockchain-demo.pdf +/index.* +!/index.adoc +/blockchain-demo.* diff --git a/docs/pt-br/build b/docs/pt-br/build index dbd492f..22126ca 100755 --- a/docs/pt-br/build +++ b/docs/pt-br/build @@ -3,35 +3,90 @@ set +x set -e BASE_DIR=`cd "$(dirname "$0")"; pwd` -pdf_generate=${pdf_generate:-true} -use_fopub=${use_fopub:-false} -fopub=${fopub:-~/Projects/github.com/asciidoctor/asciidoctor-fopub/bin/fopub} +PROJECT_DIR=`cd "$BASE_DIR/../.."; pwd` +RELATIVE_DIR=${BASE_DIR##$PROJECT_DIR/} -cd "$BASE_DIR" +config=build.conf +[ -f "$BASE_DIR"/$config ] || config=$config.sample +source "$BASE_DIR"/$config + +check_prerequisites() { + which asciidoctor > /dev/null || { + echo "ERROR: install asciidoctor first!" + exit 1 + } -which asciidoctor > /dev/null || { echo "Install asciidoctor first!"; exit 1; } + if $generate_pdf + then + if $use_fopub + then + [ -x "$fopub" ] || { + echo "ERROR: can't execute $fopub!" + exit 1 + } + else + which asciidoctor-pdf > /dev/null || { + echo "ERROR: install asciidoctor-pdf first!" + exit 1 + } + fi + fi +} clean() { rm -f index.{html,xml} - rm -f blockchain-demo.pdf + rm -f $pdf_name $xml_name } -main() { +build() { + local result + asciidoctor index.adoc result=$? - $pdf_generate || exit $result + $generate_pdf || exit $result if $use_fopub then - asciidoctor -b docbook -d book -a data-uri! index.adoc - [ -x "$fopub" ] || { echo "WARN: $fopub not executable. PDF will not be generated!"; exit 0; } - $fopub index.xml + asciidoctor -b docbook -d book -a data-uri! index.adoc -o $xml_name + $fopub $xml_name else - asciidoctor-pdf -o blockchain-demo.pdf index.adoc + asciidoctor-pdf -o $pdf_name index.adoc fi } +publish() { + local published_dir=`mktemp -d` + local remote_repo=`git config --get remote.origin.url` + [ ".$remote_repo" = "." ] && { + echo 'The remote repository is not configured!' + return 1 + } + + mkdir -p "$published_dir/$RELATIVE_DIR" + rsync -av --delete \ + --include='*.html' \ + --include='*.pdf' \ + --include='images/' \ + --include='images/**' \ + --exclude='*' \ + . $published_dir/$RELATIVE_DIR/ + + local msg="Published at `date`" + cd "$published_dir" + git init + git add -A + git commit -m "$msg" + git push --force $remote_repo master:gh-pages + cd - &> /dev/null +} + +check_prerequisites +cd "$BASE_DIR" op=$1 -[ "$op" ] || op=main -type $op &> /dev/null && $op || { echo "\"$op\" isn't an option!"; exit 1; } +[ "$op" ] || op=build +type $op &> /dev/null || { + echo "\"$op\" isn't an option!" + exit 1 +} +$op diff --git a/docs/pt-br/build.conf.sample b/docs/pt-br/build.conf.sample new file mode 100644 index 0000000..a2c26e4 --- /dev/null +++ b/docs/pt-br/build.conf.sample @@ -0,0 +1,7 @@ +#!/bin/bash + +generate_pdf=${generate_pdf:-true} +use_fopub=${use_fopub:-false} +pdf_name=${pdf_name:-blockchain-demo.pdf} +xml_name=${pdf_name%.pdf}.xml +fopub=${fopub:-~/Projects/github.com/asciidoctor/asciidoctor-fopub/bin/fopub} diff --git a/docs/pt-br/demonstracao/index.adoc b/docs/pt-br/demonstracao/index.adoc index fad3c18..3e8c2b6 100644 --- a/docs/pt-br/demonstracao/index.adoc +++ b/docs/pt-br/demonstracao/index.adoc @@ -9,6 +9,6 @@ include::o-que-e-um-hash.adoc[] include::o-que-e-um-bloco.adoc[] -include::o-que-e-uma-blockchain.adoc[] +include::o-que-e-uma-blockchain/index.adoc[] :leveloffset: -1 diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida.adoc new file mode 100644 index 0000000..9eb444e --- /dev/null +++ b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida.adoc @@ -0,0 +1,30 @@ +[[a-blockchain-e-distribuida]] += A Blockchain é distribuída + +Vimos que uma {blockchain} é uma estrutura de dados confiável que só aceita inserções de dados. +Ou seja, ela é resistente a mudanças. +Mas, além disso, uma {blockchain} é também uma rede de computadores onde essa estrutura de dados é replicada. +Dessa forma, sua estrutura de dados existe, distribuída, em cada um dos computadores (nós) dessa rede. + +O objetivo principal da distribuição de uma {blockchain} entre vários nós é impedir que mesmo sendo ela válida num único nó, ela só seja totalmente válida quando houver um consenso (na rede) de que suas informações também são válidas em todos os outros nós. +Numa {blockchain}, os nós pertencentes a sua rede são responsáveis por validar dados e retransmití-los de forma que eles sejam replicados em todos os nós. +Mais especificamente, quando dados precisam ser inseridos num bloco, todos os nós devem verificar se esses dados são válidos. +Caso não sejam, esses dados serão descartados e não retransmitidos aos próximos nós. + +A validação de dados, obviamente, depende do que são esses dados. +A primeira {blockchain} foi construída para resolver um problema complexo: a tranferência de valores. +Dando crédito: *os conceitos de {blockchain} que estamos aprendendo surgiram para fazer a moeda digital {uri-bitcoin}[Bitcoin] entrar em funcionamento*. +Perceba que só agora estamos falando de uma das várias possibilidades de aplicação da {blockchain}. +Apresentaremos, ainda, vários outros casos de uso de uma {blockchain}. + +O que diferencia a solução da {blockchain}, dada para o Bitcoin, de soluções bancárias tradicionais que resolvem esse problema, entretanto, é a descentralização. +Detalharemos mais sobre transações, logo a frente. +Mas, por enquanto, é importante saber que uma {blockchain}, por ser descentralizada, precisa criar algoritmos que promovam a manutenção de um consenso entre os nós. + +É através de consenso que uma {blockchain} identifica se uma cópia de seus dados, que está num nó, é realmente válida ou não. +Acessando a aba {uri-blockchain-demo-distributed}[Distributed] podemos identificar que a alteração de uma das cópias da {blockchain} num dos nós é possível de ser realizada. +E, essa alteração pode, com certeza, tornar a cópia da {blockchain} válida nesse nó. +Como vimos, para isso ocorrer, seria necessário refazer os cálculos de `Hash` para cada bloco a partir do que for modificado. +Mas, caso isso ocorra, outros nós da rede percebem a diferença e, automaticamente, eliminam a participação do nó que possui a {blockchain} adulterada. +Isso é feito através de consenso. +A rede que está certa é a rede que detém a maioria do consenso (51%). diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-utilizada-no-controle-de-transacoes.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-utilizada-no-controle-de-transacoes.adoc new file mode 100644 index 0000000..53d0edb --- /dev/null +++ b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-utilizada-no-controle-de-transacoes.adoc @@ -0,0 +1,2 @@ +[[a-blockchain-utilizada-no-controle-de-transacaoes]] += A Blockchain utilizada no controle de transações: o Bitcoin diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc new file mode 100644 index 0000000..2c1422b --- /dev/null +++ b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc @@ -0,0 +1,12 @@ +[[o-que-e-uma-blockchain]] += O que é uma Blockchain? + +:leveloffset: +1 + +include::uma-visualizacao-grafica.adoc[] + +include::a-blockchain-e-distribuida.adoc[] + +include::a-blockchain-utilizada-no-controle-de-transacoes.adoc[] + +:leveloffset: -1 diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/uma-visualizacao-grafica.adoc similarity index 52% rename from docs/pt-br/demonstracao/o-que-e-uma-blockchain.adoc rename to docs/pt-br/demonstracao/o-que-e-uma-blockchain/uma-visualizacao-grafica.adoc index d768cff..022e95c 100644 --- a/docs/pt-br/demonstracao/o-que-e-uma-blockchain.adoc +++ b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/uma-visualizacao-grafica.adoc @@ -1,7 +1,5 @@ -[[o-que-e-uma-blockchain]] -= O que é uma Blockchain? - -== Uma visualização gráfica +[[uma-visualizacao-grafica]] += Uma visualização gráfica Finalmente, vamos à {uri-blockchain-demo-blockchain}[aba {blockchain}] para entender o que é esse conceito genial, numa visualização gráfica! 😃 @@ -41,35 +39,3 @@ Não são permitidas alterações de informação, pois, pelo que vimos, a rede Finalmente, é importante entender que uma {blockchain} é uma estrutura de dados que fica "na mão de muitos". Ou seja, é descentralizada. Vamos agora entender como uma {blockchain} é considerada ainda mais segura quando ela é distribuída entre vários nós de uma rede. - -== A Blockchain é distribuída - -Vimos que uma {blockchain} é uma estrutura de dados confiável que só aceita inserções de dados. -Ou seja, ela é resistente a mudanças. -Mas, além disso, uma {blockchain} é também uma rede de computadores onde essa estrutura de dados é replicada. -Dessa forma, sua estrutura de dados existe, distribuída, em cada um dos computadores (nós) dessa rede. - -O objetivo principal da distribuição de uma {blockchain} entre vários nós é impedir que mesmo sendo ela válida num único nó, ela só seja totalmente válida quando houver um consenso (na rede) de que suas informações também são válidas em todos os outros nós. -Numa {blockchain}, os nós pertencentes a sua rede são responsáveis por validar dados e retransmití-los de forma que eles sejam replicados em todos os nós. -Mais especificamente, quando dados precisam ser inseridos num bloco, todos os nós devem verificar se esses dados são válidos. -Caso não sejam, esses dados serão descartados e não retransmitidos aos próximos nós. - -A validação de dados, obviamente, depende do que são esses dados. -A primeira {blockchain} foi construída para resolver um problema complexo: a tranferência de valores. -Dando crédito: *os conceitos de {blockchain} que estamos aprendendo surgiram para fazer a moeda digital {uri-bitcoin}[Bitcoin] entrar em funcionamento*. -Perceba que só agora estamos falando de uma das várias possibilidades de aplicação da {blockchain}. -Apresentaremos, ainda, vários outros casos de uso de uma {blockchain}. - -O que diferencia a solução da {blockchain}, dada para o Bitcoin, de soluções bancárias tradicionais que resolvem esse problema, entretanto, é a descentralização. -Detalharemos mais sobre transações, logo a frente. -Mas, por enquanto, é importante saber que uma {blockchain}, por ser descentralizada, precisa criar algoritmos que promovam a manutenção de um consenso entre os nós. - -É através de consenso que uma {blockchain} identifica se uma cópia de seus dados, que está num nó, é realmente válida ou não. -Acessando a aba {uri-blockchain-demo-distributed}[Distributed] podemos identificar que a alteração de uma das cópias da {blockchain} num dos nós é possível de ser realizada. -E, essa alteração pode, com certeza, tornar a cópia da {blockchain} válida nesse nó. -Como vimos, para isso ocorrer, seria necessário refazer os cálculos de `Hash` para cada bloco a partir do que for modificado. -Mas, caso isso ocorra, outros nós da rede percebem a diferença e, automaticamente, eliminam a participação do nó que possui a {blockchain} adulterada. -Isso é feito através de consenso. -A rede que está certa é a rede que detém a maioria do consenso (51%). - -== A Blockchain utilizada no controle de transações: o Bitcoin diff --git a/docs/pt-br/index.adoc b/docs/pt-br/index.adoc index 5d00b97..4605726 100644 --- a/docs/pt-br/index.adoc +++ b/docs/pt-br/index.adoc @@ -1,5 +1,5 @@ = Blockchain: Uma visualização gráfica -:author: Paulo Jerônimo +Paulo Jerônimo :toc: :toc-title: Conteúdo :toclevels: 4 @@ -8,16 +8,14 @@ :srcdir: ../.. +:blockchain: Blockchain +:rootdir: blockchain-demo + ifdef::backend-html5[] :rootdir: ../.. :blockchain: pass:[Blockchain] endif::[] -ifdef::backend-pdf[] -:rootdir: blockchain-demo -:blockchain: Blockchain -endif::[] - include::uris.conf[] :leveloffset: +1 diff --git a/docs/pt-br/introducao.adoc b/docs/pt-br/introducao.adoc index 9fd3fd5..03eed2e 100644 --- a/docs/pt-br/introducao.adoc +++ b/docs/pt-br/introducao.adoc @@ -3,6 +3,14 @@ Este projeto provê uma aplicação web para demonstrar conceitos básicos e fundamentais de uma {blockchain} (ou, traduzindo ao pé da letra para o português, corrente de blocos). +ifdef::backend-html5[] +[NOTE] +==== +Você também pode baixar e ler este documento em formato PDF. Para isso, acesse: +{uri-blockchain-demo-2-docs-pt-br}/blockchain-demo.pdf. +==== +endif::[] + Essa demonstração pode ser visualizada em duas versões: * Versão original (em inglês) (criada por {uri-andersbrownworth}[Anders Brownworth]). Vídeos: diff --git a/docs/pt-br/uris.conf b/docs/pt-br/uris.conf index 6463874..fb10e00 100644 --- a/docs/pt-br/uris.conf +++ b/docs/pt-br/uris.conf @@ -22,3 +22,8 @@ :uri-blockchain-demo-block: {uri-blockchain-demo}/block.html :uri-blockchain-demo-blockchain: {uri-blockchain-demo}/blockchain.html :uri-blockchain-demo-distributed: {uri-blockchain-demo}/distributed.html + +:uri-blockchain4devs-github-io: http://blockchain4devs.github.io +:uri-blockchain-demo-2: {uri-blockchain4devs-github-io}/blockchain-demo +:uri-blockchain-demo-2-docs: {uri-blockchain-demo-2}/docs +:uri-blockchain-demo-2-docs-pt-br: {uri-blockchain-demo-2-docs}/pt-br From 8bf1f77c3eb415d646764c62306afdd60b321770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Fri, 21 Jul 2017 11:06:36 -0300 Subject: [PATCH 04/10] pt-br docs updates --- docs/pt-br/build | 16 ++++++++++------ docs/pt-br/definitions.adoc | 3 +++ ...hain-utilizada-no-controle-de-transacoes.adoc | 2 ++ docs/pt-br/demonstracao/index.adoc | 2 ++ ...hain-utilizada-no-controle-de-transacoes.adoc | 2 -- .../o-que-e-uma-blockchain/index.adoc | 2 -- .../blockchain-fora-do-contexto-financeiro.adoc | 3 --- docs/pt-br/extras/ethereum/index.adoc | 7 ------- .../extras/ethereum/o-computador-e-a-rede.adoc | 1 - docs/pt-br/extras/hyperledger/index.adoc | 5 ----- docs/pt-br/extras/index.adoc | 11 ----------- docs/pt-br/index.adoc | 10 +++++----- docs/pt-br/instalacao/index.adoc | 2 +- docs/pt-br/introducao.adoc | 4 ++-- docs/pt-br/todo.adoc | 14 ++++++++------ 15 files changed, 33 insertions(+), 51 deletions(-) create mode 100644 docs/pt-br/definitions.adoc create mode 100644 docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes.adoc delete mode 100644 docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-utilizada-no-controle-de-transacoes.adoc delete mode 100644 docs/pt-br/extras/blockchain-fora-do-contexto-financeiro.adoc delete mode 100644 docs/pt-br/extras/ethereum/index.adoc delete mode 100644 docs/pt-br/extras/ethereum/o-computador-e-a-rede.adoc delete mode 100644 docs/pt-br/extras/hyperledger/index.adoc delete mode 100644 docs/pt-br/extras/index.adoc diff --git a/docs/pt-br/build b/docs/pt-br/build index 22126ca..cb95de2 100755 --- a/docs/pt-br/build +++ b/docs/pt-br/build @@ -10,6 +10,7 @@ config=build.conf [ -f "$BASE_DIR"/$config ] || config=$config.sample source "$BASE_DIR"/$config +# called automatically when you invoke this script check_prerequisites() { which asciidoctor > /dev/null || { echo "ERROR: install asciidoctor first!" @@ -33,12 +34,14 @@ check_prerequisites() { fi } -clean() { +# used to remove generated docs (HTML and/or PDF) +_clean() { rm -f index.{html,xml} rm -f $pdf_name $xml_name } -build() { +# used to build the main doc (HTML and/or PDF) +_build() { local result asciidoctor index.adoc @@ -55,7 +58,8 @@ build() { fi } -publish() { +# used to publish the generated docs to GitHub Pages +_publish() { local published_dir=`mktemp -d` local remote_repo=`git config --get remote.origin.url` [ ".$remote_repo" = "." ] && { @@ -85,8 +89,8 @@ check_prerequisites cd "$BASE_DIR" op=$1 [ "$op" ] || op=build -type $op &> /dev/null || { - echo "\"$op\" isn't an option!" +type _$op &> /dev/null || { + echo "Usage: `basename $0` [build]|" exit 1 } -$op +_$op diff --git a/docs/pt-br/definitions.adoc b/docs/pt-br/definitions.adoc new file mode 100644 index 0000000..2b903f3 --- /dev/null +++ b/docs/pt-br/definitions.adoc @@ -0,0 +1,3 @@ +:PauloJeronimo: {uri-paulojeronimo}[Paulo Jerônimo] +:AndersBrownworth: {uri-andersbrownworth}[Anders Brownworth] +:blockchain4devs: {uri-blockchain4devs}[blockchain4devs] diff --git a/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes.adoc b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes.adoc new file mode 100644 index 0000000..d28993c --- /dev/null +++ b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes.adoc @@ -0,0 +1,2 @@ +[[a-blockchain-utilizada-no-controle-de-transacaoes]] += icon:dollar[] A Blockchain utilizada no controle de transações: o Bitcoin diff --git a/docs/pt-br/demonstracao/index.adoc b/docs/pt-br/demonstracao/index.adoc index 3e8c2b6..3e16f68 100644 --- a/docs/pt-br/demonstracao/index.adoc +++ b/docs/pt-br/demonstracao/index.adoc @@ -11,4 +11,6 @@ include::o-que-e-um-bloco.adoc[] include::o-que-e-uma-blockchain/index.adoc[] +include::a-blockchain-utilizada-no-controle-de-transacoes.adoc[] + :leveloffset: -1 diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-utilizada-no-controle-de-transacoes.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-utilizada-no-controle-de-transacoes.adoc deleted file mode 100644 index 53d0edb..0000000 --- a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-utilizada-no-controle-de-transacoes.adoc +++ /dev/null @@ -1,2 +0,0 @@ -[[a-blockchain-utilizada-no-controle-de-transacaoes]] -= A Blockchain utilizada no controle de transações: o Bitcoin diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc index 2c1422b..233bed3 100644 --- a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc +++ b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc @@ -7,6 +7,4 @@ include::uma-visualizacao-grafica.adoc[] include::a-blockchain-e-distribuida.adoc[] -include::a-blockchain-utilizada-no-controle-de-transacoes.adoc[] - :leveloffset: -1 diff --git a/docs/pt-br/extras/blockchain-fora-do-contexto-financeiro.adoc b/docs/pt-br/extras/blockchain-fora-do-contexto-financeiro.adoc deleted file mode 100644 index 9a9ce3d..0000000 --- a/docs/pt-br/extras/blockchain-fora-do-contexto-financeiro.adoc +++ /dev/null @@ -1,3 +0,0 @@ -= A Blockchain utilizada fora do contexto financeiro - -== Em desenvolvimento: run4.money (uma nova forma de ganhar prêmios em corridas) diff --git a/docs/pt-br/extras/ethereum/index.adoc b/docs/pt-br/extras/ethereum/index.adoc deleted file mode 100644 index 8d27a3b..0000000 --- a/docs/pt-br/extras/ethereum/index.adoc +++ /dev/null @@ -1,7 +0,0 @@ -= Ethereum - -:leveloffset: +1 - -include::o-computador-e-a-rede.adoc[] - -:leveloffset: -1 diff --git a/docs/pt-br/extras/ethereum/o-computador-e-a-rede.adoc b/docs/pt-br/extras/ethereum/o-computador-e-a-rede.adoc deleted file mode 100644 index 9cf623e..0000000 --- a/docs/pt-br/extras/ethereum/o-computador-e-a-rede.adoc +++ /dev/null @@ -1 +0,0 @@ -= O computador é a rede! diff --git a/docs/pt-br/extras/hyperledger/index.adoc b/docs/pt-br/extras/hyperledger/index.adoc deleted file mode 100644 index 0a1e41b..0000000 --- a/docs/pt-br/extras/hyperledger/index.adoc +++ /dev/null @@ -1,5 +0,0 @@ -= Hyperledger - -:leveloffset: +1 - -:leveloffset: -1 diff --git a/docs/pt-br/extras/index.adoc b/docs/pt-br/extras/index.adoc deleted file mode 100644 index 53e7dc7..0000000 --- a/docs/pt-br/extras/index.adoc +++ /dev/null @@ -1,11 +0,0 @@ -= Extras - -:leveloffset: +1 - -include::blockchain-fora-do-contexto-financeiro.adoc[] - -include::ethereum/index.adoc[] - -include::hyperledger/index.adoc[] - -:leveloffset: -1 diff --git a/docs/pt-br/index.adoc b/docs/pt-br/index.adoc index 4605726..8d1e5e1 100644 --- a/docs/pt-br/index.adoc +++ b/docs/pt-br/index.adoc @@ -1,9 +1,9 @@ = Blockchain: Uma visualização gráfica Paulo Jerônimo -:toc: +V1.0, {localdatetime} +:toc: left :toc-title: Conteúdo :toclevels: 4 -:numbered: :icons: font :srcdir: ../.. @@ -17,20 +17,20 @@ ifdef::backend-html5[] endif::[] include::uris.conf[] +include::definitions.adoc[] :leveloffset: +1 +:numbered!: include::introducao.adoc[] <<< +:numbered: include::instalacao/index.adoc[] <<< include::demonstracao/index.adoc[] -<<< -include::extras/index.adoc[] - <<< include::enviando-um-obrigado.adoc[] diff --git a/docs/pt-br/instalacao/index.adoc b/docs/pt-br/instalacao/index.adoc index 887731e..b04d88d 100644 --- a/docs/pt-br/instalacao/index.adoc +++ b/docs/pt-br/instalacao/index.adoc @@ -1,5 +1,5 @@ [[instalacao]] -= Instalação += Instalação local :leveloffset: +1 diff --git a/docs/pt-br/introducao.adoc b/docs/pt-br/introducao.adoc index 03eed2e..2e49262 100644 --- a/docs/pt-br/introducao.adoc +++ b/docs/pt-br/introducao.adoc @@ -13,9 +13,9 @@ endif::[] Essa demonstração pode ser visualizada em duas versões: -* Versão original (em inglês) (criada por {uri-andersbrownworth}[Anders Brownworth]). Vídeos: +* Versão original (em inglês) (criada por {AndersBrownworth}). Vídeos: ** {uri-blockchain-101-demo}[Blockchain 101 - Demo] -* Versão brasileira (criada por {uri-paulojeronimo}[Paulo Jerônimo] para a organização {uri-blockchain4devs}. Vídeos [red]#(em produção)#: +* Versão brasileira (criada por {PauloJeronimo} para a organização {blockchain4devs}. Vídeos [red]#(em produção)#: ** blockchain-demo - instalação ** blockchain-demo - o que é um Hash? ** blockchain-demo - o que é um Bloco? diff --git a/docs/pt-br/todo.adoc b/docs/pt-br/todo.adoc index b9990c1..6ed915a 100644 --- a/docs/pt-br/todo.adoc +++ b/docs/pt-br/todo.adoc @@ -1,8 +1,10 @@ = Melhorias que você pode aguardar -Próximas melhorias esperadas para a versão em português: - -* Criação de closed captions (em inglês) para os vídeos disponibibilizados em pt-br. -* Internacionalização da aplicação para pt-br. -* Disponiblização da aplicação em execução, também, em {uri-blockchain4devs}. -* Apresentação de links, na página principal da aplicação, para a visualização dos vídeos em português. +* Criação de legendas (_closed captions_) em inglês para os vídeos disponibibilizados em português (pt-br). +* Internacionalização da aplicação para português. +* Adição de uma cópia da aplicação (em execução) no endereço {uri-blockchain-demo-2}. +** Geração de um site estático (para publicação no endereço acima sem a necessidade de um servidor executando o Node.js). +*** Utilização do Gulp. +*** Atualização da camada de visualização (de Jade p/ Pug). +* Alteração da página principal da aplicação, para que ela também apresente links para a visualização dos vídeos em português. +* QR Code para os endereços publicados neste documento. From 351ca5743d68727eddee396d90c64449c2ac3b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Fri, 21 Jul 2017 11:21:47 -0300 Subject: [PATCH 05/10] README.md Brazilian note updated --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8b38c71..59f4b4a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Blockchain Demo A web-based demonstration of blockchain concepts. -_(If you want to read this in Brazilian Portuguese [click this link](docs/pt-br/index.html))_. + +_NOTE: If you want to read a documentation in Brazilian Portuguese [click this link](https://blockchain4devs.github.io/blockchain-demo/docs/pt-br/). +Also, the source code for these docs are available in [docs/pt-br](docs/pt-br) directory_. [![Blockchain 101 - Demo](https://img.youtube.com/vi/_160oMzblY8/0.jpg)](https://www.youtube.com/watch?v=_160oMzblY8) From 11f815750300fb902fc41a9c20111dbbfcf49c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Sat, 22 Jul 2017 15:13:41 -0300 Subject: [PATCH 06/10] pt-br docs updates --- docs/pt-br/definitions.adoc | 8 ++++ ...n-utilizada-no-controle-de-transacoes.adoc | 2 - .../coinbase-transactions.adoc | 46 +++++++++++++++++++ .../index.adoc | 10 ++++ .../tokens.adoc | 41 +++++++++++++++++ docs/pt-br/demonstracao/index.adoc | 2 +- docs/pt-br/demonstracao/o-que-e-um-bloco.adoc | 2 +- docs/pt-br/demonstracao/o-que-e-um-hash.adoc | 6 +-- ...hain-e-distribuida-e-descentralizada.adoc} | 10 ++-- .../o-que-e-uma-blockchain/index.adoc | 2 +- docs/pt-br/enviando-um-obrigado.adoc | 6 +-- docs/pt-br/index.adoc | 9 +--- docs/pt-br/introducao.adoc | 39 ++++++++++------ docs/pt-br/todo.adoc | 24 ++++++---- docs/pt-br/uris.conf | 15 ++++++ 15 files changed, 176 insertions(+), 46 deletions(-) delete mode 100644 docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes.adoc create mode 100644 docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/coinbase-transactions.adoc create mode 100644 docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/index.adoc create mode 100644 docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/tokens.adoc rename docs/pt-br/demonstracao/o-que-e-uma-blockchain/{a-blockchain-e-distribuida.adoc => a-blockchain-e-distribuida-e-descentralizada.adoc} (82%) diff --git a/docs/pt-br/definitions.adoc b/docs/pt-br/definitions.adoc index 2b903f3..a987215 100644 --- a/docs/pt-br/definitions.adoc +++ b/docs/pt-br/definitions.adoc @@ -1,3 +1,11 @@ :PauloJeronimo: {uri-paulojeronimo}[Paulo Jerônimo] :AndersBrownworth: {uri-andersbrownworth}[Anders Brownworth] :blockchain4devs: {uri-blockchain4devs}[blockchain4devs] +:blockchain-demo-src: {uri-blockchain4devs}/blockchain-demo +:blockchain: Blockchain +:rootdir: link:{uri-blockchain-demo-2}[blockchain-demo] + +ifdef::backend-html5[] +:rootdir: ../.. +:blockchain: pass:[Blockchain] +endif::[] diff --git a/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes.adoc b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes.adoc deleted file mode 100644 index d28993c..0000000 --- a/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes.adoc +++ /dev/null @@ -1,2 +0,0 @@ -[[a-blockchain-utilizada-no-controle-de-transacaoes]] -= icon:dollar[] A Blockchain utilizada no controle de transações: o Bitcoin diff --git a/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/coinbase-transactions.adoc b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/coinbase-transactions.adoc new file mode 100644 index 0000000..f17f246 --- /dev/null +++ b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/coinbase-transactions.adoc @@ -0,0 +1,46 @@ +[[coinbase-transactions]] += Transações Gênese + +Como vimos uma {blockchain} voltada ao controle de transações precisa manter um registro imutável dessas transações. +Mas, além disso, em se tratando de transações, é essencial conseguirmos verificar se elas realmente são válidas. +Num sistema financeiro, para que uma pessoa possa gastar algum dinheiro, ela precisa ter saldo, óbvio. +Então, esse dinheiro deve ter vindo de alguém que, por sua vez, recebeu de outro alguém e assim suscessivamente. +Voltando no tempo dessa forma, chegaremos até o ponto em que o dinheiro surgiu. + +Poderíamos nos imaginar na figura de mineradores reais. +Encontrando uma mina de ouro, utilizaríamos parte do ouro que minerássesmos para trocá-lo por coisas. +Devemos nos lembrar que toda mina de ouro é finita. +A moeda (o ouro nesse caso) é simplesmente algo que utilizamos para facilitar uma troca por algo que queremos. +As pessoas que recebem esse ouro, por sua vez, poderiam dividí-lo em porções ainda menores para comprar coisas de outras pessoas. +O Bitcoin funciona exatamente assim, como o ouro. + +Vamos fazer uma representação sistêmica desse processo. +Para entender como surge o dinheiro numa {blockchain}, precisamos definir o {uri-coinbase-transaction}[conceito de transação gênese] (ou transação coinbase). + +Nessa demonstração, {AndersBrownworth} é o "descobridor de uma mina". +Sendo assim, a primeira coisa que ele faz é criar para si um {uri-genesis-block}[bloco gênese], de identificador 1. +Esse bloco não contém nenhuma transação além de uma, especial, chamada de `Coinbase`. +Essa transação especial é de "ninguém" para a pessoa que criou o bloco, no caso, um minerador. +Nessa {blockchain}, Anders resolve se dar 100 dólares no primeiro bloco (1). + +[NOTE] +==== +* O {uri-blockchain-genesis-block}[bloco gênese na Blockchain do Bitcoin], criada por {uri-satoshi-nakamoto}[Satoshi Nakamoto] tem o identificador 0. +* No caso do Bitcoin, o valor de {uri-coinbase}[Coinbase] foi de 50 BTC quando a rede foi criada. +Em seguida, caiu para 25 e, no ano passado, foi para 12.5 BTC. Esse valor sempre decairá. +* No Bitcoin, o valor de `Coinbase` é um valor que é reivindicado por um minerador como prêmio pela mineração do bloco. +==== + +No bloco 2, existem transações. +O importante nessa implementação de {blockchain} é que, agora, dá pra saber se uma transação é válida. +Vejamos como. + +No bloco 4, por exemplo, Sophia transfere para Jackson, 8 dólares. +Será que Sophia realmente tinha 8 dólares? +Para saber isso, vamos ao bloco anterior (3). +Sophia não teve transações nesse bloco. +Vamos ao anterior novamente (2). +Nesse bloco, Sophia recebeu, de Anders, 10 dólares. +Então, sem dúvida, Sophia pode gastar esse dinheiro. + +Portanto, com essa nova implementação de {blockchain}, agora conseguimos verificar se uma transação é válida. diff --git a/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/index.adoc b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/index.adoc new file mode 100644 index 0000000..fdf7372 --- /dev/null +++ b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/index.adoc @@ -0,0 +1,10 @@ +[[a-blockchain-utilizada-no-controle-de-transacoes]] += A Blockchain utilizada no controle de transações icon:dollar[] + +:leveloffset: +1 + +include::tokens.adoc[] + +include::coinbase-transactions.adoc[] + +:leveloffset: -1 diff --git a/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/tokens.adoc b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/tokens.adoc new file mode 100644 index 0000000..ffdf75b --- /dev/null +++ b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/tokens.adoc @@ -0,0 +1,41 @@ +[[tokens]] += Tokens + +Na {uri-blockchain-demo-tokens}[aba Tokens] visualizamos uma das possíveis aplicações da {blockchain}. +Ela pode ser utilizada para um sistema financeiro. +Em essência, <>, a origem da {blockchain} foi para tornar possível a existência do {uri-bitcoin-paper}[Bitcoin]. +Em inglês, o termo https://www.google.com.br/search?q=what+is+a+token[token] é dado para uma coisa que esteja servindo como uma representação visível ou tangível de um fato, qualidade, sentimento, etc. +Dessa forma o campo `Data` numa {blockchain} pode representar um `token` que, nesse contexto, significa um registro de várias transações. +Cada transação, por sua vez, registra que pessoa está enviando uma quantia (em moeda icon:dollar[]) para outra pessoa. + +Como já vimos, o registro de dados numa {blockchain} é imutável. +Logo, se esses dados forem transações, elas também serão imutáveis. +E, num registro dessa espécie, é essencial essa imutabilidade pois nenhuma pessoa de boa fé gostaria de ver transações sendo adulteradas. +A {blockchain} resolve isso. +Se tentarmos fazer uma alteração nos dados de qualquer transação poderemos notar que o bloco será invalidado. + +Nessa demonstração, as transações são representadas de forma muito simplificada. +Basicamente, cada transação possui apenas três (3) campos: quem está enviando um valor, quem está recebendo e, por fim, o valor. +Fundamentalmente, para um sistema de transações, essas são as três informações chave. +É muito importante que saibamos de onde uma quantia saiu e para onde ela foi. + +É claro que apenas essas três informações não são suficientes para se contruir um sistema realmente utilizável. +Afinal, as pessoas querem privacidade e anonimato por razões óbvia (de segurança). +Ninguém utilizaria um sistema, como esse, onde estão públicas as informações do nome da pessoa e dos valores que ela movimenta. +Então, num sistema como o Bitcoin, ao invés de utilizarmos nomes, utilizamos endereços. + +Da mesma forma que não queremos adulterações nos dados, devemos evitar outras possibilidades de fraudes. +Há um tipo de fraude que não seria possível de ser verificada numa {blockchain} implementada da forma como estamos fazendo agora. +Essa fraude seria uma pessoa tentar querer "gastar" o mesmo diheiro duas vezes. +Isso é conhecido como "gasto duplo". + +Exemplificando a possibilidade de gasto duplo através de um passo a passo: + +. Darcy tem 25 dólares e quer comprar algo de Bingley. +. Ela passa seus 25 dólares para o Bingley. +. Utilizando essa {blockchain}, ela também tenta comprar algo de Jane, gastando mais 25 dólares. +. O problema: será que Darcy tinha, realmente, 50 dólares? +Ou será que ela está tentando gastar os mesmos 25 dólares que já possuia? +Como nessa {blockchain} não há o registro do saldo anterior de Darcy, isso poderia ser possível. Concorda? + +Então, claramente, essa {blockchain} precisa ser evoluída. diff --git a/docs/pt-br/demonstracao/index.adoc b/docs/pt-br/demonstracao/index.adoc index 3e16f68..0325077 100644 --- a/docs/pt-br/demonstracao/index.adoc +++ b/docs/pt-br/demonstracao/index.adoc @@ -11,6 +11,6 @@ include::o-que-e-um-bloco.adoc[] include::o-que-e-uma-blockchain/index.adoc[] -include::a-blockchain-utilizada-no-controle-de-transacoes.adoc[] +include::a-blockchain-utilizada-no-controle-de-transacoes/index.adoc[] :leveloffset: -1 diff --git a/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc b/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc index e558571..b289a31 100644 --- a/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc +++ b/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc @@ -1,7 +1,7 @@ [[o-que-e-um-bloco]] = O que é um Bloco? -Vamos agora para a aba {uri-blockchain-demo-block}[Block]. +Vamos agora para a {uri-blockchain-demo-block}[aba Block]. Adicionaremos, acima do campo `Data` aprensentado na aba `Hash`, dois outros campos: `Block` e `Nonce`. Eles serão explicados agora. Também vamos criar um botão `Miner` e explicar qual será sua utilidade. diff --git a/docs/pt-br/demonstracao/o-que-e-um-hash.adoc b/docs/pt-br/demonstracao/o-que-e-um-hash.adoc index 287f785..5efc7fd 100644 --- a/docs/pt-br/demonstracao/o-que-e-um-hash.adoc +++ b/docs/pt-br/demonstracao/o-que-e-um-hash.adoc @@ -6,7 +6,7 @@ Hashes são parte de várias informações armazenadas na {blockchain} e são es Matematicamente falando, uma {uri-funcao-hash}[função hash] é um algoritmo que mapeia dados de comprimento variável para dados de comprimento fixo. Os valores retornados por uma função hash são chamados valores hash, códigos hash, somas hash, checksums ou, simplesmente, hashes. -Nessa demonstração, a aba {uri-blockchain-demo-hash}[Hash] possibilita a entrada de uma informação de tamanho qualquer (no campo `Data`) e produz um `Hash` de tamanho fixo. +Nessa demonstração, a {uri-blockchain-demo-hash}[aba Hash] possibilita a entrada de uma informação de tamanho qualquer (no campo `Data`) e produz um `Hash` de tamanho fixo. A função SHA256 é uma das variantes do {uri-sha-2}[SHA-2] e utilizada para gerar esse código hash. Esse código é geralmente representado por uma string de 64 caracteres hexadecimais (de "0" a "9" e de "a" a "f"). Obviamente, além dessa função, existem várias outras que poderiam ser utilizadas para gerar uma string de tamanho fixo a partir de uma quantidade de dados variáveis. @@ -30,11 +30,11 @@ diff shattered-*.pdf shasum shattered-*.pdf ---- -O código JavaScript da {uri-blockchain-demo-hash}[página Hash] é um código escrito em Jade (link:{rootdir}/views/hash.jade[]). +O código JavaScript da {uri-blockchain-demo-hash}[aba Hash] (`views/hash.jade`) é um código escrito em {uri-jade}[Jade]. Ele calcula o hash através de um código (em JavaScript) que executa a função sha256. [source,javascript] -.{rootdir}/public/javascripts/lib/sha256.js +.public/javascripts/lib/sha256.js ---- include::{srcdir}/public/javascripts/blockchain.js[lines=1..4] ---- diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida-e-descentralizada.adoc similarity index 82% rename from docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida.adoc rename to docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida-e-descentralizada.adoc index 9eb444e..0c53f52 100644 --- a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida.adoc +++ b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/a-blockchain-e-distribuida-e-descentralizada.adoc @@ -1,19 +1,19 @@ -[[a-blockchain-e-distribuida]] -= A Blockchain é distribuída +[[a-blockchain-e-distribuida-e-descentralizada]] += A Blockchain é distribuída e descentralizada Vimos que uma {blockchain} é uma estrutura de dados confiável que só aceita inserções de dados. Ou seja, ela é resistente a mudanças. Mas, além disso, uma {blockchain} é também uma rede de computadores onde essa estrutura de dados é replicada. Dessa forma, sua estrutura de dados existe, distribuída, em cada um dos computadores (nós) dessa rede. -O objetivo principal da distribuição de uma {blockchain} entre vários nós é impedir que mesmo sendo ela válida num único nó, ela só seja totalmente válida quando houver um consenso (na rede) de que suas informações também são válidas em todos os outros nós. +O objetivo principal da distribuição de uma {blockchain} entre vários nós é impedir que mesmo sendo ela válida num único nó, ela só seja totalmente válida quando houver um {uri-consenso}[consenso] (na rede) de que suas informações também são válidas em todos os outros nós. Numa {blockchain}, os nós pertencentes a sua rede são responsáveis por validar dados e retransmití-los de forma que eles sejam replicados em todos os nós. Mais especificamente, quando dados precisam ser inseridos num bloco, todos os nós devem verificar se esses dados são válidos. Caso não sejam, esses dados serão descartados e não retransmitidos aos próximos nós. A validação de dados, obviamente, depende do que são esses dados. A primeira {blockchain} foi construída para resolver um problema complexo: a tranferência de valores. -Dando crédito: *os conceitos de {blockchain} que estamos aprendendo surgiram para fazer a moeda digital {uri-bitcoin}[Bitcoin] entrar em funcionamento*. +Dando crédito: [[a-origem-da-blockchain]]*os conceitos de {blockchain} que estamos aprendendo surgiram para fazer a moeda digital {uri-bitcoin}[Bitcoin] entrar em funcionamento*. Perceba que só agora estamos falando de uma das várias possibilidades de aplicação da {blockchain}. Apresentaremos, ainda, vários outros casos de uso de uma {blockchain}. @@ -22,7 +22,7 @@ Detalharemos mais sobre transações, logo a frente. Mas, por enquanto, é importante saber que uma {blockchain}, por ser descentralizada, precisa criar algoritmos que promovam a manutenção de um consenso entre os nós. É através de consenso que uma {blockchain} identifica se uma cópia de seus dados, que está num nó, é realmente válida ou não. -Acessando a aba {uri-blockchain-demo-distributed}[Distributed] podemos identificar que a alteração de uma das cópias da {blockchain} num dos nós é possível de ser realizada. +Acessando a {uri-blockchain-demo-distributed}[aba Distributed] podemos identificar que a alteração de uma das cópias da {blockchain} num dos nós é possível de ser realizada. E, essa alteração pode, com certeza, tornar a cópia da {blockchain} válida nesse nó. Como vimos, para isso ocorrer, seria necessário refazer os cálculos de `Hash` para cada bloco a partir do que for modificado. Mas, caso isso ocorra, outros nós da rede percebem a diferença e, automaticamente, eliminam a participação do nó que possui a {blockchain} adulterada. diff --git a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc index 233bed3..87feba2 100644 --- a/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc +++ b/docs/pt-br/demonstracao/o-que-e-uma-blockchain/index.adoc @@ -5,6 +5,6 @@ include::uma-visualizacao-grafica.adoc[] -include::a-blockchain-e-distribuida.adoc[] +include::a-blockchain-e-distribuida-e-descentralizada.adoc[] :leveloffset: -1 diff --git a/docs/pt-br/enviando-um-obrigado.adoc b/docs/pt-br/enviando-um-obrigado.adoc index e5d36bc..4c60283 100644 --- a/docs/pt-br/enviando-um-obrigado.adoc +++ b/docs/pt-br/enviando-um-obrigado.adoc @@ -3,12 +3,12 @@ Se você gostou deste projeto, incluindo seu texto e vídeos, e deseja enviar um "obrigado", saiba que Bitcoin e Ethereum são, agradecidamente, aceitos por seus desenvolvedores nos seguintes endereços: -* {uri-andersbrownworth}[Anders Brownworth] (criador do projeto): +* {uri-andersbrownworth}[Anders Brownworth] (desenvolvedor/criador deste projeto): ** Bitcoin (BTC): `1K3NvcuZzVTueHW1qhkG2Cm3viRkh2EXJp` -* {uri-paulojeronimo}[Paulo Jerônimo] (criador deste documento e de vídeos em português) +* {uri-paulojeronimo}[Paulo Jerônimo] (desenvolvedor/criador deste documento e de vídeos em português) ** Bitcoin (BTC): `1LTrDUdUw2zCS7LE93hDuvYiG326VnxL6k` ** Ether (ETH): `0xc8780E07eE3C0f058315a20D2fD7dE6d2505f7a3` -Claramente, parte do valor depositado será revertido em melhorias para este projeto. +Claramente, parte do valor depositado será revertido em melhorias neste projeto. include::todo.adoc[leveloffset=+1] diff --git a/docs/pt-br/index.adoc b/docs/pt-br/index.adoc index 8d1e5e1..200bc1d 100644 --- a/docs/pt-br/index.adoc +++ b/docs/pt-br/index.adoc @@ -5,17 +5,10 @@ V1.0, {localdatetime} :toc-title: Conteúdo :toclevels: 4 :icons: font +:setanchors: :srcdir: ../.. -:blockchain: Blockchain -:rootdir: blockchain-demo - -ifdef::backend-html5[] -:rootdir: ../.. -:blockchain: pass:[Blockchain] -endif::[] - include::uris.conf[] include::definitions.adoc[] diff --git a/docs/pt-br/introducao.adoc b/docs/pt-br/introducao.adoc index 2e49262..b343daf 100644 --- a/docs/pt-br/introducao.adoc +++ b/docs/pt-br/introducao.adoc @@ -1,31 +1,44 @@ [[introducao]] = Introdução -Este projeto provê uma aplicação web para demonstrar conceitos básicos e fundamentais de uma {blockchain} (ou, traduzindo ao pé da letra para o português, corrente de blocos). +Este projeto provê uma aplicação web, interativa, para demonstrar conceitos básicos e fundamentais de uma {blockchain} (ou, traduzindo ao pé da letra para o português, corrente de blocos). + +[NOTE] +==== +O {uri-blockchain-demo-2-src}[código fonte deste projeto] (incluindo este documento) é aberto e está disponível. +==== ifdef::backend-html5[] [NOTE] ==== -Você também pode baixar e ler este documento em formato PDF. Para isso, acesse: -{uri-blockchain-demo-2-docs-pt-br}/blockchain-demo.pdf. +Você também pode {uri-blockchain-demo-2-docs-pt-br}/blockchain-demo.pdf[baixar e ler este documento em formato PDF]. ==== endif::[] -Essa demonstração pode ser visualizada em duas versões: +ifndef::backend-html5[] +[NOTE] +==== +Você pode visualizar uma versão online deste documento acessando o endereço {uri-blockchain-demo-2-docs-pt-br}. +==== +endif::[] + +A demonstração de uso da aplicação deste projeto pode ser visualizada em duas (2) versões: -* Versão original (em inglês) (criada por {AndersBrownworth}). Vídeos: +* 1) Versão original (em inglês) (criada por {AndersBrownworth}). Vídeos: ** {uri-blockchain-101-demo}[Blockchain 101 - Demo] -* Versão brasileira (criada por {PauloJeronimo} para a organização {blockchain4devs}. Vídeos [red]#(em produção)#: -** blockchain-demo - instalação -** blockchain-demo - o que é um Hash? -** blockchain-demo - o que é um Bloco? +* 2) Versão brasileira (criada por {PauloJeronimo} para a organização {blockchain4devs}. Vídeos [red]#(em produção)#: +** blockchain-demo - instalação local +** blockchain-demo - o que é um hash? +** blockchain-demo - o que é um bloco? ** blockchain-demo - uma visualização gráfica da Blockchain ** blockchain-demo - a blockchain é distribuída -** blockchain-demo - a blockchain utilizada no controle de transações (o Bitcoin) +** blockchain-demo - a blockchain utilizada no controle de transações - o Bitcoin Através dos vídeos acima é feita uma apresentação, visual, que consideramos ser bastante elucidante nos conceitos elementares de uma {blockchain}. -É introduzido o conceito de um {uri-livro-razao}[livro-razão] (distribuído) através de uma aplicação web interativa. - -Essa aplicação web está disponível (em execução) no seguinte endereço: +A aplicação apresentada introduz o conceito de um {uri-livro-razao}[livro-razão] (distribuído). +Ela está em execução, neste momento, no seguinte endereço: * {uri-anders-blockchain} + +Você também pode fazer o {uri-blockchain-demo-2-src}[download deste projeto] a partir do GitHub e fazer a execução dessa aplicação, localmente, em teu ambiente. +Isso é explicado logo a seguir, no primeiro tópico desse documento. diff --git a/docs/pt-br/todo.adoc b/docs/pt-br/todo.adoc index 6ed915a..2170003 100644 --- a/docs/pt-br/todo.adoc +++ b/docs/pt-br/todo.adoc @@ -1,10 +1,16 @@ -= Melhorias que você pode aguardar +[[melhorias-que-voce-pode-aguardar]] += Melhorias que você pode aguardar neste projeto -* Criação de legendas (_closed captions_) em inglês para os vídeos disponibibilizados em português (pt-br). -* Internacionalização da aplicação para português. -* Adição de uma cópia da aplicação (em execução) no endereço {uri-blockchain-demo-2}. -** Geração de um site estático (para publicação no endereço acima sem a necessidade de um servidor executando o Node.js). -*** Utilização do Gulp. -*** Atualização da camada de visualização (de Jade p/ Pug). -* Alteração da página principal da aplicação, para que ela também apresente links para a visualização dos vídeos em português. -* QR Code para os endereços publicados neste documento. +Para o {uri-blockchain-demo-2-src}[fork] do {uri-blockchain-demo-src}[projeto original] são esperadas as seguintes evoluções: + +. Criação de legendas (_closed captions_) em inglês para os vídeos disponibibilizados em português (pt-br). +. Internacionalização da aplicação para português. +. Adição de uma cópia da aplicação (em execução) no endereço {uri-blockchain-demo-2}. +.. Geração de um site estático (para publicação no endereço acima sem a necessidade de um servidor executando o Node.js). +... Substituição do gerenciador de pacotes (de {uri-npm}[npm] p/ {uri-yarn}[yarn]). +... Utilização do {uri-gulp}[Gulp] para a construção desse site estático. +... Substituição da camada de visualização (de {uri-jade}[Jade] p/ {uri-pug}[Pug]). +. Alteração da página principal da aplicação, para que ela também apresente links para a visualização dos vídeos em português. +. Criação de https://en.wikipedia.org/wiki/QR_code[QR Code] para os endereços (de Bitcoin e/ou Ethereum) publicados neste documento. + +Por fim, espera-se que as adições realizadas neste fork sejam aceitas e incorporadas ao {uri-blockchain-demo-src}[projeto original]. diff --git a/docs/pt-br/uris.conf b/docs/pt-br/uris.conf index fb10e00..50e7ccb 100644 --- a/docs/pt-br/uris.conf +++ b/docs/pt-br/uris.conf @@ -16,14 +16,29 @@ :uri-mining: https://en.wikipedia.org/wiki/Bitcoin_network#Mining :uri-proof-of-work: https://en.wikipedia.org/wiki/Proof-of-work_system :uri-bitcoin: https://bitcoin.org +:uri-bitcoin-paper: https://bitcoin.org/bitcoin.pdf +:uri-jade: http://jadelang.net/ +:uri-pug: https://pugjs.org +:uri-gulp: http://gulpjs.com/ +:uri-yarn: https://yarnpkg.com +:uri-consenso: https://pt.wikipedia.org/wiki/Consenso :uri-blockchain-demo: http://anders.com/blockchain +:uri-blockchain-demo-src: {uri-andersbrownworth}/blockchain-demo :uri-blockchain-demo-hash: {uri-blockchain-demo}/hash.html :uri-blockchain-demo-block: {uri-blockchain-demo}/block.html :uri-blockchain-demo-blockchain: {uri-blockchain-demo}/blockchain.html :uri-blockchain-demo-distributed: {uri-blockchain-demo}/distributed.html +:uri-blockchain-demo-tokens: {uri-blockchain-demo}/tokens.html :uri-blockchain4devs-github-io: http://blockchain4devs.github.io :uri-blockchain-demo-2: {uri-blockchain4devs-github-io}/blockchain-demo +:uri-blockchain-demo-2-src: {uri-blockchain4devs}/blockchain-demo :uri-blockchain-demo-2-docs: {uri-blockchain-demo-2}/docs :uri-blockchain-demo-2-docs-pt-br: {uri-blockchain-demo-2-docs}/pt-br + +:uri-satoshi-nakamoto: https://en.bitcoin.it/wiki/Satoshi_Nakamoto +:uri-coinbase: https://en.bitcoin.it/wiki/Coinbase +:uri-coinbase-transaction: https://bitcoin.org/en/glossary/coinbase-transaction +:uri-genesis-block: https://en.bitcoin.it/wiki/Genesis_block +:uri-blockchain-genesis-block: https://blockchain.info/pt/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f From bf908fb7f6295d6dcf5df60f834b33c0d27ad79f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Mon, 24 Jul 2017 11:53:00 -0300 Subject: [PATCH 07/10] pt-br docs updates --- docs/pt-br/definitions.adoc | 1 + docs/pt-br/demonstracao/o-que-e-um-hash.adoc | 18 ++++++++++++++---- docs/pt-br/instalacao/instalacao-direta.adoc | 2 +- .../instalacao/instalacao-via-docker.adoc | 4 ++-- docs/pt-br/uris.conf | 1 + 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/pt-br/definitions.adoc b/docs/pt-br/definitions.adoc index a987215..8f8cb38 100644 --- a/docs/pt-br/definitions.adoc +++ b/docs/pt-br/definitions.adoc @@ -4,6 +4,7 @@ :blockchain-demo-src: {uri-blockchain4devs}/blockchain-demo :blockchain: Blockchain :rootdir: link:{uri-blockchain-demo-2}[blockchain-demo] +:macOS: {uri-macOS}[macOS] ifdef::backend-html5[] :rootdir: ../.. diff --git a/docs/pt-br/demonstracao/o-que-e-um-hash.adoc b/docs/pt-br/demonstracao/o-que-e-um-hash.adoc index 5efc7fd..5edf263 100644 --- a/docs/pt-br/demonstracao/o-que-e-um-hash.adoc +++ b/docs/pt-br/demonstracao/o-que-e-um-hash.adoc @@ -22,12 +22,22 @@ O site {uri-shattered} demonstra que, para se proferir um ataque onde se tentari Ou seja, um número monstruoso de compressões. Para ser realizado esse número de compressões, seriam necessários 6.500 anos de processamento de uma CPU comum (ou 110 anos de uma GPU). -Uma colisão de SHA-1 é demonstrada na saída dos seguintes comandos (executados num macOS): +Uma colisão de SHA-1 pode ser visualizada, como na execução/resultado dos comandos apresentados a seguir: + +[NOTE] +==== +Essa execução/resultado de comandos é feita num shell (Bash) de um {macOS}. +Mas, ela também pode ser adaptada e realizada em outros sistemas operacionais. +==== ---- -for i in 1 2; do curl -O https://shattered.it/static/shattered-i.pdf; done -diff shattered-*.pdf -shasum shattered-*.pdf +$ for n in 1 2; do curl -s -O https://shattered.it/static/shattered-$n.pdf; done +$ open shattered-*.pdf +$ diff shattered-*.pdf +Binary files shattered-1.pdf and shattered-2.pdf differ +$ shasum shattered-*.pdf +38762cf7f55934b34d179ae6a4c80cadccbb7f0a shattered-1.pdf +38762cf7f55934b34d179ae6a4c80cadccbb7f0a shattered-2.pdf ---- O código JavaScript da {uri-blockchain-demo-hash}[aba Hash] (`views/hash.jade`) é um código escrito em {uri-jade}[Jade]. diff --git a/docs/pt-br/instalacao/instalacao-direta.adoc b/docs/pt-br/instalacao/instalacao-direta.adoc index 099da58..8558729 100644 --- a/docs/pt-br/instalacao/instalacao-direta.adoc +++ b/docs/pt-br/instalacao/instalacao-direta.adoc @@ -12,7 +12,7 @@ Para rodar essa aplicação, você deverá ter instalado o {uri-nodejs}[Node.js] [NOTE] ==== -A instalação do comando npm pode ser executada, no macOS, através de um único comando: `brew install npm`. Isso é tudo que é necessário fazer neste sistema operacional. +A instalação do comando npm pode ser executada, no {macOS}, através de um único comando: `brew install npm`. Isso é tudo que é necessário fazer neste sistema operacional. ==== ---- diff --git a/docs/pt-br/instalacao/instalacao-via-docker.adoc b/docs/pt-br/instalacao/instalacao-via-docker.adoc index 800b2d2..544418b 100644 --- a/docs/pt-br/instalacao/instalacao-via-docker.adoc +++ b/docs/pt-br/instalacao/instalacao-via-docker.adoc @@ -19,7 +19,7 @@ Abra o teu browser e acesse a URL da página de demonstração: http://localhost [NOTE] ==== -Se você estiver utilizando outro SO que não o Linux, no macOS por exemplo, antes de executar o `docker-compose`, será necessário a instalação e a configuração do {uri-docker-machine}[docker-machine]. +Se você estiver utilizando outro SO que não o Linux (um {macOS} por exemplo) antes de executar o `docker-compose`, será necessário a instalação e a configuração do {uri-docker-machine}[docker-machine]. Além disso, a URL que você acessará no browser não estará em `localhost`. Nesse caso, siga os passos no subtópico a seguir. Ele demonstra como utilizar o `docker-machine` para criar uma máquina virtual utilizando o {uri-virtualbox}[VirtualBox]. @@ -38,7 +38,7 @@ Abra o teu browser e acesse a URL da página de demonstração que devera ser `h [NOTE] ==== O comando `docker-machine ip` pode ser chamada para determinar o IP da máquina virtual executando o docker. -Então, no macOS, o seguinte comando pode ser utilizado para abrir a browser na URL da demonstração: +Então, no {macOS}, o seguinte comando pode ser utilizado para abrir a browser na URL da demonstração: ---- open http://$(docker-machine ip):3000 diff --git a/docs/pt-br/uris.conf b/docs/pt-br/uris.conf index 50e7ccb..10e5367 100644 --- a/docs/pt-br/uris.conf +++ b/docs/pt-br/uris.conf @@ -22,6 +22,7 @@ :uri-gulp: http://gulpjs.com/ :uri-yarn: https://yarnpkg.com :uri-consenso: https://pt.wikipedia.org/wiki/Consenso +:uri-macOS: https://en.wikipedia.org/wiki/MacOS :uri-blockchain-demo: http://anders.com/blockchain :uri-blockchain-demo-src: {uri-andersbrownworth}/blockchain-demo From 3cbb06598258d5fae875ceb1a888345f3b5303a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Thu, 27 Jul 2017 06:24:27 -0300 Subject: [PATCH 08/10] README.md reverted to original and addition of README.pt-br --- README.md | 3 --- README.pt-br.md | 10 ++++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 README.pt-br.md diff --git a/README.md b/README.md index 59f4b4a..1c2abbc 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ # Blockchain Demo A web-based demonstration of blockchain concepts. -_NOTE: If you want to read a documentation in Brazilian Portuguese [click this link](https://blockchain4devs.github.io/blockchain-demo/docs/pt-br/). -Also, the source code for these docs are available in [docs/pt-br](docs/pt-br) directory_. - [![Blockchain 101 - Demo](https://img.youtube.com/vi/_160oMzblY8/0.jpg)](https://www.youtube.com/watch?v=_160oMzblY8) This is a very basic visual introduction to the concepts behind a blockchain. We introduce diff --git a/README.pt-br.md b/README.pt-br.md new file mode 100644 index 0000000..9aa58d5 --- /dev/null +++ b/README.pt-br.md @@ -0,0 +1,10 @@ +# Blockchain Demo + +Uma demonstração web sobre conceitos de blockchain. + +Leia em: + +1. https://blockchain4devs.github.io/blockchain-demo/docs/pt-br/ +2. [https://blockchain4devs.github.io/blockchain-demo/docs/pt-br/blockchain-demo.pdf (PDF)](https://blockchain4devs.github.io/blockchain-demo/docs/pt-br/blockchain-demo.pdf) + +Os fontes desses docucumentos estão disponíveis no diretório [docs/pt-br](docs/pt-br). From a0ca27691ccf4b36b477abd8f3f4fdf98d4dcf39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Fri, 28 Jul 2017 18:28:10 -0300 Subject: [PATCH 09/10] pt-br-docs updates --- docs/pt-br/instalacao/instalacao-direta.adoc | 2 +- docs/pt-br/instalacao/instalacao-via-docker.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pt-br/instalacao/instalacao-direta.adoc b/docs/pt-br/instalacao/instalacao-direta.adoc index 8558729..d9a5e8a 100644 --- a/docs/pt-br/instalacao/instalacao-direta.adoc +++ b/docs/pt-br/instalacao/instalacao-direta.adoc @@ -5,7 +5,7 @@ Baixe o código: [source,bash,subs="attributes"] ---- -git clone {uri-blockchain-demo} +git clone {uri-blockchain-demo-src} ---- Para rodar essa aplicação, você deverá ter instalado o {uri-nodejs}[Node.js]. Em seguida, instale as dependências dessa aplicação através do {uri-npm}[npm]. diff --git a/docs/pt-br/instalacao/instalacao-via-docker.adoc b/docs/pt-br/instalacao/instalacao-via-docker.adoc index 544418b..9fbdfae 100644 --- a/docs/pt-br/instalacao/instalacao-via-docker.adoc +++ b/docs/pt-br/instalacao/instalacao-via-docker.adoc @@ -5,7 +5,7 @@ Baixe o código: [source,bash,subs="attributes"] ---- -git clone {uri-blockchain-demo} +git clone {uri-blockchain-demo-src} ---- Faça a construção do contêiner Docker: From bd303035d54012ce8c77d071376fd3185944de43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paulo=20Jer=C3=B4nimo?= Date: Sat, 29 Jul 2017 02:17:01 -0300 Subject: [PATCH 10/10] pt-br docs updates (after create youtube playlist) --- .../tokens.adoc | 2 +- docs/pt-br/demonstracao/o-que-e-um-bloco.adoc | 2 +- docs/pt-br/demonstracao/o-que-e-um-hash.adoc | 2 +- docs/pt-br/introducao.adoc | 11 ++--------- docs/pt-br/uris.conf | 4 ++++ 5 files changed, 9 insertions(+), 12 deletions(-) diff --git a/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/tokens.adoc b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/tokens.adoc index ffdf75b..574d46e 100644 --- a/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/tokens.adoc +++ b/docs/pt-br/demonstracao/a-blockchain-utilizada-no-controle-de-transacoes/tokens.adoc @@ -26,7 +26,7 @@ Então, num sistema como o Bitcoin, ao invés de utilizarmos nomes, utilizamos e Da mesma forma que não queremos adulterações nos dados, devemos evitar outras possibilidades de fraudes. Há um tipo de fraude que não seria possível de ser verificada numa {blockchain} implementada da forma como estamos fazendo agora. -Essa fraude seria uma pessoa tentar querer "gastar" o mesmo diheiro duas vezes. +Essa fraude seria uma pessoa tentar "gastar" o mesmo diheiro duas vezes. Isso é conhecido como "gasto duplo". Exemplificando a possibilidade de gasto duplo através de um passo a passo: diff --git a/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc b/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc index b289a31..b3c52a4 100644 --- a/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc +++ b/docs/pt-br/demonstracao/o-que-e-um-bloco.adoc @@ -31,4 +31,4 @@ Por outro lado, ela é onerosa pois pode cosumir muito tempo de processamento. O trabalho de "mineração" realizado dessa forma é também conhecido por {uri-proof-of-work}["Proof of Work"]. Após um bloco ser "minerado", a conferência de sua validade é algo extremamente simples e rápido. -Essa conferência é apenas o cálculo do `Hash` de `Data` + `Nonce` e a obediência a regra estabelecida (em nosso caso, um `Hash` começando com quatro zeros iniciais). +Essa conferência é apenas o cálculo do `Hash` de todos os campos (`Block` + `Nonce` + `Data`) e a obediência a regra estabelecida (em nosso caso, um `Hash` começando com quatro zeros iniciais). diff --git a/docs/pt-br/demonstracao/o-que-e-um-hash.adoc b/docs/pt-br/demonstracao/o-que-e-um-hash.adoc index 5edf263..9876109 100644 --- a/docs/pt-br/demonstracao/o-que-e-um-hash.adoc +++ b/docs/pt-br/demonstracao/o-que-e-um-hash.adoc @@ -64,4 +64,4 @@ Então, o hash de "Paulo Jerônimo" poderia ser calculado assim: echo -n 'Paulo Jerônimo'|shasum -a 256 ---- -Para se aprofundar um pouco mais em funções hash aplicadas a moedas digitais e saber quando um colisões em valores de hash tem importância nesse contexto, recomenda-se a leitura do artigo {uri-history-of-hash-function-attacks}["Lessons From The History Of Attacks On Secure Hash Functions"]. +Para se aprofundar um pouco mais em funções hash aplicadas a moedas digitais e saber quando colisões em valores de hash tem importância nesse contexto, recomenda-se a leitura do artigo {uri-history-of-hash-function-attacks}["Lessons From The History Of Attacks On Secure Hash Functions"]. diff --git a/docs/pt-br/introducao.adoc b/docs/pt-br/introducao.adoc index b343daf..19332d7 100644 --- a/docs/pt-br/introducao.adoc +++ b/docs/pt-br/introducao.adoc @@ -24,15 +24,8 @@ endif::[] A demonstração de uso da aplicação deste projeto pode ser visualizada em duas (2) versões: -* 1) Versão original (em inglês) (criada por {AndersBrownworth}). Vídeos: -** {uri-blockchain-101-demo}[Blockchain 101 - Demo] -* 2) Versão brasileira (criada por {PauloJeronimo} para a organização {blockchain4devs}. Vídeos [red]#(em produção)#: -** blockchain-demo - instalação local -** blockchain-demo - o que é um hash? -** blockchain-demo - o que é um bloco? -** blockchain-demo - uma visualização gráfica da Blockchain -** blockchain-demo - a blockchain é distribuída -** blockchain-demo - a blockchain utilizada no controle de transações - o Bitcoin +. {uri-blockchain-101-demo}[Blockchain 101 - Demo]: Vídeo original (em inglês) (criado por {AndersBrownworth}). +. {uri-blockchain-demo-2-playlist}[Blockchain: uma visualização gráfica]: Playlist com 10 vídeos, em português do Brasil, criados por {PauloJeronimo} para a organização {blockchain4devs}. `Plus`: {uri-blockchain-dfjug}[Blockchain]: hangout (apresentação), sobre esse assunto, com o {uri-dfjug}[DFJUG]. Através dos vídeos acima é feita uma apresentação, visual, que consideramos ser bastante elucidante nos conceitos elementares de uma {blockchain}. A aplicação apresentada introduz o conceito de um {uri-livro-razao}[livro-razão] (distribuído). diff --git a/docs/pt-br/uris.conf b/docs/pt-br/uris.conf index 10e5367..49485fc 100644 --- a/docs/pt-br/uris.conf +++ b/docs/pt-br/uris.conf @@ -37,9 +37,13 @@ :uri-blockchain-demo-2-src: {uri-blockchain4devs}/blockchain-demo :uri-blockchain-demo-2-docs: {uri-blockchain-demo-2}/docs :uri-blockchain-demo-2-docs-pt-br: {uri-blockchain-demo-2-docs}/pt-br +:uri-blockchain-demo-2-playlist: https://goo.gl/To4bPb :uri-satoshi-nakamoto: https://en.bitcoin.it/wiki/Satoshi_Nakamoto :uri-coinbase: https://en.bitcoin.it/wiki/Coinbase :uri-coinbase-transaction: https://bitcoin.org/en/glossary/coinbase-transaction :uri-genesis-block: https://en.bitcoin.it/wiki/Genesis_block :uri-blockchain-genesis-block: https://blockchain.info/pt/block/000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f + +:uri-dfjug: http://www.dfjug.org/ +:uri-blockchain-dfjug: https://goo.gl/fJ9QuD