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
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
98
Organizando aplicações com React
matheusml
0
110
Elm: Front-End do Jeito Certo
matheusml
2
610
O verdadeiro porquê da Programação Funcional
matheusml
1
670
Programação Funcional com ES6
matheusml
0
590
Other Decks in Programming
See All in Programming
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
460
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
360
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
1.1k
不幸な GC
chencmd
0
790
AWS Transform Customによる Spring Boot 2.xから4.xへのVerUp
satoshi256kbyte
2
110
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
170
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
390
プロポーザルを書いてもらう
pvcresin
0
580
Oxlintはいいぞ(続)
yug1224
1
470
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
640
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
160
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
Featured
See All Featured
Amusing Abliteration
ianozsvald
1
270
Designing for humans not robots
tammielis
254
26k
ラッコキーワード サービス紹介資料
rakko
1
4.6M
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
300
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
300
A Soul's Torment
seathinner
6
3.5k
Producing Creativity
orderedlist
PRO
348
40k
Designing Powerful Visuals for Engaging Learning
tmiket
1
510
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Balancing Empowerment & Direction
lara
6
1.2k
Unsuck your backbone
ammeep
672
58k
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