Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript e Blockchain, onde eles se encontram
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Matheus Lima
July 13, 2018
Programming
1.1k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaScript e Blockchain, onde eles se encontram
Matheus Lima
July 13, 2018
More Decks by Matheus Lima
See All by Matheus Lima
Qual é a dos Progressive Web Apps?
matheusml
1
95
Organizando aplicações com React
matheusml
0
100
Elm: Front-End do Jeito Certo
matheusml
2
610
O verdadeiro porquê da Programação Funcional
matheusml
1
660
Programação Funcional com ES6
matheusml
0
590
Other Decks in Programming
See All in Programming
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
280
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
3
740
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
810
霧の中の代数的エフェクト
funnyycat
1
460
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
9
4.7k
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
240
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
210
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.5k
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
180
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
450
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
200
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
350
Featured
See All Featured
Music & Morning Musume
bryan
47
7.3k
エンジニアに許された特別な時間の終わり
watany
108
250k
Claude Code のすすめ
schroneko
67
230k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.7k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
620
Context Engineering - Making Every Token Count
addyosmani
9
1k
The Curious Case for Waylosing
cassininazir
1
450
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
530
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Transcript
Matheus Lima JavaScript e Blockchain, onde eles se encontram
None
None
None
https://medium.com/@matheusml
Capítulo 1: Web 1.0 x 2.0
Web 1.0 • 1996
Web 1.0 • 1996 • estática (HTML)
Web 1.0 • 1996 • estática (HTML) • read-only
Web 1.0 • 1996 • estática (HTML) • read-only •
taxonomia
Web 1.0 • 1996 • estática (HTML) • read-only •
taxonomia • protocolos abertos (descentralização)
Web 1.0 • 1996 • estática (HTML) • read-only •
taxonomia • protocolos abertos (descentralização) • pouca inovação (pouco dinheiro)
None
Web 2.0 • 2004
Web 2.0 • 2004 • dinâmica (php, asp, etc)
Web 2.0 • 2004 • dinâmica (php, asp, etc) •
read-write
Web 2.0 • 2004 • dinâmica (php, asp, etc) •
read-write • busca, keywords, categorias, tags
Web 2.0 • 2004 • dinâmica (php, asp, etc) •
read-write • busca, keywords, categorias, tags • protocolos fechados (centralização)
Web 2.0 • 2004 • dinâmica (php, asp, etc) •
read-write • busca, keywords, categorias, tags • protocolos fechados (centralização) • muita inovação (muito dinheiro)
None
Problemas da Web 2.0 • Falta de privacidade
Problemas da Web 2.0 • Falta de privacidade • Monetização
(regras mudam)
Problemas da Web 2.0 • Falta de privacidade • Monetização
(regras mudam) • Termos de uso
Problemas da Web 2.0 • Falta de privacidade • Monetização
(regras mudam) • Termos de uso • Monopólios
Problemas da Web 2.0 • Falta de privacidade • Monetização
(regras mudam) • Termos de uso • Monopólios • Bolhas
Problemas da Web 2.0 • Falta de privacidade • Monetização
(regras mudam) • Termos de uso • Monopólios • Bolhas = Centralização
Existe problema na centralização?
1. Informação é dinheiro
2. O número de usuários da internet subiu de 45
milhões para 3 bilhões
3. Os usuários trocaram sua privacidade por comodidade
Resumindo: muitos dados, muitos usuários e zero privacidade =
None
None
None
None
None
Paradoxo
Paradoxo • Descentralizado, mas sem inovação
Paradoxo • Descentralizado, mas sem inovação • Centralizado, mas com
inovação
É possível fazer um merge dos pontos positivos da Web
1.0 com os da Web 2.0?
Sim, é possível. Mas quais seriam os requisitos?
Requisitos para a Web 3.0:
Requisitos para a Web 3.0: • Protocolos abertos
Requisitos para a Web 3.0: • Protocolos abertos • Descentralização
Requisitos para a Web 3.0: • Protocolos abertos • Descentralização
• Privacidade
Requisitos para a Web 3.0: • Protocolos abertos • Descentralização
• Privacidade • Inovação
Tá bom, mas como fazer isso?
Capítulo 2: O Blockchain
MAS ANTES
Capítulo 1.1: Criptografia básica
hash(x) = y
hash(“front in sampa 2018”) = B5D2037AA740FA3D6064532969A783827DF4B298C3A6 77E131DB0BC0B4AC4945
hash(“front in sampa 2017”) = F3641B82D514E743172126A1E7F8EB87AA10C56CD322C26 3A7A38D74762AF3CC
hash({ language: ‘JavaScript’ }) = 62F5D1D580D6C81A0D8E5DD83931982BCF067AEED8AA BE0AB3DB81D2D244B8EF
hash(x) y
hash(x) y
Capítulo 2: O Blockchain
Block = Bloco
Block = Bloco Chain = Cadeia
Blockchain = Cadeia de Blocos
Blockchain = Corrente de Blocos
Blockchain = Série de Blocos
Blockchain = Sequência de Blocos
Ok. Mas o que é um Bloco?
Bloco #527324
Bloco #527324 Timestamp: 2018-06-13 21:43:25
Bloco #527324 Timestamp: 2018-06-13 21:43:25 PreviousHash: 0000...f478
Bloco #527324 Timestamp: 2018-06-13 21:43:25 PreviousHash: 0000...f478 Hash: 0000...7bae
Bloco #527324 Timestamp: 2018-06-13 21:43:25 PreviousHash: 0000...f478 Hash: 0000...7bae Transactions:
[ { 26c7...9225: 1KFH...DbYY }, { 87f3...3cff: 1jkX...app7 }, … ]
Como eu faço pra gerar um hash que comece com
4 zeros?
Força bruta (tentativa e erro)
hash({ language: ‘JavaScript’, nonce: 0 }) = C7T0...743F
hash({ language: ‘JavaScript’, nonce: 0 }) = C7T0...743F hash({ language:
‘JavaScript’, nonce: 1 }) = D536...FDDB
hash({ language: ‘JavaScript’, nonce: 0 }) = C7T0...743F hash({ language:
‘JavaScript’, nonce: 1 }) = D536...FDDB hash({ language: ‘JavaScript’, nonce: 2 }) = 31YA...0971
hash({ language: ‘JavaScript’, nonce: 0 }) = C7T0...743F hash({ language:
‘JavaScript’, nonce: 1 }) = D536...FDDB hash({ language: ‘JavaScript’, nonce: 2 }) = 31YA...0971 hash({ language: ‘JavaScript’, nonce: 3 }) = F398...4B06
hash({ language: ‘JavaScript’, nonce: 0 }) = C7T0...743F hash({ language:
‘JavaScript’, nonce: 1 }) = D536...FDDB hash({ language: ‘JavaScript’, nonce: 2 }) = 31YA...0971 hash({ language: ‘JavaScript’, nonce: 3 }) = F398...4B06 … hash({ language: ‘JavaScript’, nonce: 41087 }) = 0000...4B06
A quantidade de zeros para encontrar o hash do Bloco,
se chama dificuldade do sistema
E cada zero adicionado, a dificuldade sobe de forma exponencial
dificuldade tempo (ms)
Esse processo de buscar o hash ideal que comece com
um número de zeros se chama...
Mineração
A mineração nada mais é do que uma busca, por
tentativa e erro, do hash ideal de cada Bloco
O minerador que encontra o hash ideal primeiro é recompensado
financeiramente
Bloco #527324 Timestamp: 2018-06-13 21:43:25 PreviousHash: 0000...f478 Hash: 0000...7bae Transactions:
[ { 26c7...9225: 1KFH...DbYY }, { 87f3...3cff: 1jkX...app7 }, … ]
Bloco #527324 Timestamp: 2018-06-13 21:43:25 PreviousHash: 0000...f478 Hash: 0000...7bae Transactions:
[ { 26c7...9225: 1KFH...DbYY }, { 87f3...3cff: 1jkX...app7 }, … ] Nonce: 348270763
https://bit.ly/2t36ItG
Ponto importante:
Ponto importante: • Encontrar o nonce correto é demorado e
computacionalmente caro
Ponto importante: • Encontrar o nonce correto é demorado e
computacionalmente caro • Mas verificar o resultado é rápido
Mas pra que tudo isso?
1. Para limitar a quantidade de Blocos criados
2. Para se alcançar consenso
Consenso?!
Consenso é a forma de garantir que os participantes não
estão fraudando mesmo sem uma autoridade central
O Problema dos Generais Bizantinos:
1. Os generais estão muito longe dos seus superiores (autoridade
central)
2. Para vencer a batalha todos precisam atacar ao mesmo
tempo
None
No Blockchain, esse problema foi resolvido com a mineração
O primeiro minerador que encontrar o hash do Bloco, avisa
a toda rede
E assim, o consenso no Blockchain é atingido
Todo esse processo se chama Proof of Work (prova de
trabalho)
Graças a ele o clássico problema dos Generais Bizantinos foi
resolvido
Por isso o Blockchain é descentralizado
Legal, entendi o que é um Bloco!
Mas e a Sequência de Blocos?
Bloco #527325 Timestamp: 2018-06-13 21:53 PreviousHash: 0000...7bae Hash: 0000...6e4ef Transactions:
[ { 310a...e98a: 10kla...010a }, { affa...bcc3: 1KkA...B113 }, … ] Nonce: 482791030 ... Bloco #527324 Timestamp: 2018-06-13 21:43 PreviousHash: 0000...f478 Hash: 0000...7bae Transactions: [ { 26c7...9225: 1KFH...DbYY }, { 87f3...3cff: 1jkX...app7 }, … ] Nonce: 348270763 ...
Bloco #527325 Timestamp: 2018-06-13 21:53 PreviousHash: 0000...7bae Hash: 0000...6e4ef Transactions:
[ { 310a...e98a: 10kla...010a }, { affa...bcc3: 1KkA...B113 }, … ] Nonce: 482791030 ... Bloco #527324 Timestamp: 2018-06-13 21:43 PreviousHash: 0000...f478 Hash: 0000...7bae Transactions: [ { 26c7...9225: 1KFH...DbYY }, { 87f3...3cff: 1jkX...app7 }, … ] Nonce: 348270763 ...
hash(“front in sampa 2017”) = F3641B82D514E743172126A1E7F8EB87AA10C56CD322C26 3A7A38D74762AF3CC
Bloco #527325 Timestamp: 2018-06-13 21:53 PreviousHash: 0000...7bae Hash: 0000...6e4ef Transactions:
[ { 310a...e98a: 10kla...010a }, { affa...bcc3: 1KkA...B113 }, … ] Nonce: 482791030 ... Bloco #527324 Timestamp: 2018-06-13 21:43 PreviousHash: 0000...f478 Hash: 0000...7bae Transactions: [ { 26c7...9225: 1KFH...DbYY }, { 87f3...3cff: 1jkX...app7 }, … ] Nonce: 348270763 ...
Bloco #527325 Timestamp: 2018-06-13 21:53 PreviousHash: 0000...7bae Hash: 0000...6e4ef Transactions:
[ { 310a...e98a: 10kla...010a }, { affa...bcc3: 1KkA...B113 }, … ] Nonce: 482791030 ... Bloco #527324 Timestamp: 2018-06-13 21:43 PreviousHash: 0000...f478 Hash: 0000...7bae Transactions: [ { 26c7...9225: 1oZ3... aEe1}, { 87f3...3cff: 1jkX...app7 }, … ] Nonce: 348270763 ...
Bloco #527325 Timestamp: 2018-06-13 21:53 PreviousHash: 0000...7bae Hash: 0000...6e4ef Transactions:
[ { 310a...e98a: 10kla...010a }, { affa...bcc3: 1KkA...B113 }, … ] Nonce: 482791030 ... Bloco #527324 Timestamp: 2018-06-13 21:43 PreviousHash: 0000...f478 Hash: 0000...Cb4t Transactions: [ { 26c7...9225: 1oZ3... aEe1}, { 87f3...3cff: 1jkX...app7 }, … ] Nonce: 348270763 ...
Bloco #527325 Timestamp: 2018-06-13 21:53 PreviousHash: 0000...7bae Hash: 0000...6e4ef Transactions:
[ { 310a...e98a: 10kla...010a }, { affa...bcc3: 1KkA...B113 }, … ] Nonce: 482791030 ... Bloco #527324 Timestamp: 2018-06-13 21:43 PreviousHash: 0000...f478 Hash: 0000...Cb4t Transactions: [ { 26c7...9225: 1oZ3... aEe1}, { 87f3...3cff: 1jkX...app7 }, … ] Nonce: 348270763 ...
Bloco #527325 Timestamp: 2018-06-13 21:53 PreviousHash: 0000...7bae Hash: 0000...6e4ef Transactions:
[ { 310a...e98a: 10kla...010a }, { affa...bcc3: 1KkA...B113 }, … ] Nonce: 482791030 ... Bloco #527324 Timestamp: 2018-06-13 21:43 PreviousHash: 0000...f478 Hash: 0000...Cb4t Transactions: [ { 26c7...9225: 1oZ3... aEe1}, { 87f3...3cff: 1jkX...app7 }, … ] Nonce: 348270763 ...
None
Ou seja, se eu quiser alterar qualquer valor de um
Bloco eu tenho que alterar de todos os posteriores
E se minerar apenas um Bloco já é custoso, minerar
múltiplos Blocos é inviável.
Por isso o Blockchain é imutável
Resumindo
1. Os mineradores competem para encontrar um hash ideal de
um Bloco antes de adicionar no Blockchain
2. Isso requer um grande poder computacional
3. Quando um minerador encontra o hash ideal, ele informa
para toda a rede
4. Validar que o hash ideal foi encontrado é extremamente
fácil
Capítulo 3: O Ethereum
Tudo o que a gente discutiu até agora está relacionado
ao Bitcoin
Mas existem outros Blockchains
E pra nós, desenvolvedores, o Blockchain do Ethereum é o
que mais faz sentido
None
Qual a diferença em relação ao Bitcoin?
Enquanto o Bitcoin quer descentralizar o dinheiro mundial
O Ethereum quer ser o computador do mundo
Isso tudo graças a um conceito que pode ser uma
enorme disrupção:
Smart Contracts (contratos inteligentes)
MAS ANTES
Capítulo 1.2: Contratos
1. Ana quer vender seu imóvel
2. Maria o quer comprar
Ana e Maria não se confiam
Então elas procuram um intermediário que ambas confiam
Como um cartório
O problema é que cartórios são caros, ineficientes e prestam
um péssimo serviço.
E é aqui que entram os Smart Contracts
Um Smart Contract é contrato que ao invés de caneta
e papel, funciona na base do código
None
Eles funcionam sem intermediários, “deployados” no Blockchain
None
O principal objectivo do Smart Contracts é:
Fazer com que indivíduos, que não se confiam, consigam fazer
negócios de maneira segura, barata e sem intermediários
OPA, PERA AÍ...
None
None
None
None
None
None
O modelo de negócios das empresas de tecnologia atuais está
em risco
Com o Ethereum, tudo que poderá ser descentralizado eventualmente será
OPA, PERA AÍ (2) ...
Problemas da Web 2.0 • Falta de privacidade • Monetização
(regras mudam) • Termos de uso • Monopólios • Bolhas = Centralização
O Ethereum tem potencial para resolver esse problema
E se tornar a base da Web 3.0
Resumindo
1. O Ethereum é um tipo diferente de Blockchain
2. Nele, o foco é ser o computador do mundo
3. É possível também a criação de Smart Contracts
4. Com isso, é possível construir dApps (aplicações descentralizadas)
5. E resolver o grande problema da Web 2.0: a
centralização
Capítulo 4: O JavaScript
Tá, mas onde o JavaScript se encaixa nessa história toda?
web3.js
Uma biblioteca para se conectar ao Blockchain do Ethereum em
JavaScript
None
None
None
None
None
truffle
Um framework completo para trabalhar com Ethereum e React
None
https://truffleframework.com/tutorials
blockstack
Um marketplace para dApps, onde os usuários são donos dos
próprios dados
None
None
None
https://blockstack.org/tutorials
Resumindo
1. web3.js Biblioteca que conecta o Ethereum no JavaScript
2. truffle Framework completo, em React, para construir dApps
3. blockstack Marketplace da nova web 3.0 para usar e
desenvolver dApps
Capítulo 5: Conclusão
1. A web 1.0 fracassou
2. A web 2.0 está fracassando por causa da centralização
3. O Blockchain resolve o problema da centralização
4. O Ethereum vai ser um grande candidato para dominar
a Web 3.0
5. Os dApps podem impactar o modelo de negócios atual
das grandes empresas de tecnologia
6. Nós, desenvolvedores JavaScript, podemos construir dApps hoje
7. Usando ferramentas maduras, já existentes
8. Como o web3.js, truffle e o blockstack
@matheusml