Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
99
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
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
250
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
240
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
340
新卒PdEのリアル
ryu1013
1
500
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
230
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
220
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
420
Heart of Swift Concurrency
koher
0
860
速習iPhone Duo対応
yuukiw00w
1
510
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
470
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
270
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
1.9k
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.5k
A better future with KSS
kneath
240
18k
Statistics for Hackers
jakevdp
799
230k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.2k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
660
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
420
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
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