SlideShare uma empresa Scribd logo
Fabio Akita
@akitaonrails,
@codeminer42,
@theconf_br
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
21-22 Set 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
 > require "digest"
 => true
 > Digest::SHA256.hexdigest("hello world")
 => "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"
 > Digest::SHA256.hexdigest("hello world!")
 => "7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9"
 > Digest::SHA256.hexdigest("Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla
consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec,
vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo.
Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus.
Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo
ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante,
dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius
laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue.
Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas
tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet
adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar,
hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae
sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget
eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec
sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit
cursus nunc,")
 => "4d0fcee44bd65ea0a0c983da992b053d6f5d94a25e91eae6a783f59fb5ef0cc1"
 De:
 Para:
 Valor: 0.01234567 BTC
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
git branch –b mempool
git add panda_sapo.transaction
git commit –m “de panda, p/ sapo,
0.0123456 BTC”
git push origin mempool
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
git branch –b mempool
git add panda_sapo.transaction
git commit –m “de panda, p/ sapo,
0.0123456 BTC”
git push origin mempool
git checkout master
git merge mempool
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
def compute_hash_with_proof_of_work( difficulty, hash )
nonce = 0
loop do
signature = calc_hash_with_nonce( nonce, hash )
if signature.start_with?( difficulty )
return [nonce, signature]
else
nonce += 1
end
end
end
def calc_hash_with_nonce( nonce, hash )
Digest::SHA256.new.tap do |sha|
sha.update( nonce.to_s + hash )
sha.hexdigest
end
end
> hash = Digest::SHA256.hexdigest("hello world")
> puts Benchmark.measure {
compute_hash_with_proof_of_work("0000", hash) }
0.040000 0.000000 0.040000 ( 0.044949)
> puts Benchmark.measure {
compute_hash_with_proof_of_work("00000", hash) }
1.030000 0.000000 1.030000 ( 1.047740)
> puts Benchmark.measure {
compute_hash_with_proof_of_work("000000", hash) }
42.920000 0.040000 42.960000 ( 43.642561)
RICO COM MEU PC VELHO?
 Para Bitcoin (SHA256):
980 MH/s
(milhões de hash/seg)
 > R$ 3.400
 NÃO TEM ROI!
 Para Bitcoin (SHA256):
20 TH/s
(TRILHÕES de hashes)
 > R$ 14.000 (fila de espera)
 > 1 ano e meio p/ ROI
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
17.468 tubos a vácuo
70 mil resistors
1.500 relays
6.000 switches manuais
5 milhões de pontos de solda
167 m2
30 toneladas
180 kW
1.468 GWh/ano
(DUAS ISLÂNDIAS)
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
 17 mil vezes mais BARATO
 40 MILHÕES de vezes MENOR
 400 MIL vezes menos energia
 120 MIL vezes mais leve
1.300xmais PODEROSO!
 17 mil vezes mais BARATO
 40 MILHÕES de vezes MENOR
 400 MIL vezes menos energia
 120 MIL vezes mais leve
1.300xmais PODEROSO!
Cada habitante da Terra
precisaria doar USD
10 BILHÕES
para minerar UM BITCOIN
E levaria 35 MIL
vezes a IDADE DO
UNIVERSO até assinar 1
BLOCO
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
334 mil
habitantes
700 GWh
/ano
+14.500 GWh
/ano
99%
renovável!
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
~ 30 blocos por dia (1Mb/bloco)
~ 12 BTC por bloco
~ 360 BTC por dia
(~ USD 3.6 milhões por dia)
~ 6.122 PH/s
(= 6.2 milhões de GTX 1080 Ti)
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
pragma solidity ^0.4.19;
contract BancoSimples {
mapping (address => uint) private saldos;
address public dono;
function BancoSimples() public {
dono = msg.sender;
}
function depositar() public payable returns (uint) {
require(msg.value > 0);
saldos[msg.sender] += msg.value;
return saldos[msg.sender];
}
function sacar(uint valor) public returns (uint) {
require(valor <= saldos[msg.sender]);
saldos[msg.sender] -= valor;
msg.sender.transfer(valor);
return saldos[msg.sender];
}
function verSaldo() constant public returns (uint) {
return saldos[msg.sender];
}
}
pragma solidity ^0.4.19;
contract BancoSimples {
mapping (address => uint) private saldos;
address public dono;
function BancoSimples() public {
dono = msg.sender;
}
….
function verSaldo() constant public returns (uint) {
return saldos[msg.sender];
}
}
pragma solidity ^0.4.19;
contract BancoSimples {
….
function depositar() public payable returns (uint) {
require(msg.value > 0);
saldos[msg.sender] += msg.value;
return saldos[msg.sender];
}
….
}
pragma solidity ^0.4.19;
contract BancoSimples {
….
function sacar(uint valor) public returns (uint) {
require(valor <= saldos[msg.sender]);
saldos[msg.sender] -= valor;
msg.sender.transfer(valor);
return saldos[msg.sender];
}
…
}
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
 Contratos Inteligentes
 Identidade Digital
 Armazenamento
Distribuído
 Registro de Terras
 Eleições Digitais (de
verdade)
 Infraestrutura de
pagamentos
 Ativos digitais
 Eficiência e Transparência
no Governo
 Basicamente, a extinção do
Cartório
 Basicamente, a extinção de
todo centralizador de dados
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
OBRIGADO!

Mais conteúdo relacionado

PDF
Devconf 2019 - São Carlos
PDF
Meetup Nerdzão - English Talk about Languages
PDF
Desmistificando Blockchains - 20o Encontro Locaweb SP
PDF
Desmistificando Blockchains - Insiter Goiania
PDF
Blockchain em 7 minutos - 7Masters
PDF
Elixir -Tolerância a Falhas para Adultos - GDG Campinas
PDF
Desmistificando Mitos de Tech Startups - Intercon 2017
PDF
30 Days to Elixir and Crystal and Back to Ruby
Devconf 2019 - São Carlos
Meetup Nerdzão - English Talk about Languages
Desmistificando Blockchains - 20o Encontro Locaweb SP
Desmistificando Blockchains - Insiter Goiania
Blockchain em 7 minutos - 7Masters
Elixir -Tolerância a Falhas para Adultos - GDG Campinas
Desmistificando Mitos de Tech Startups - Intercon 2017
30 Days to Elixir and Crystal and Back to Ruby

Mais de Fabio Akita (20)

PDF
Uma Discussão sobre a Carreira de TI
PDF
THE CONF - Opening Keynote
PDF
A Journey through New Languages - Rancho Dev 2017
PDF
Desmistificando Mitos de Startups - Sebrae - AP
PDF
A Journey through New Languages - Guru Sorocaba 2017
PDF
A Journey through New Languages - Insiter 2017
PDF
A Journey through New Languages - Locaweb Tech Day
PDF
A Journey through new Languages - Intercon 2016
PDF
Premature Optimization 2.0 - Intercon 2016
PDF
Conexão Kinghost - Otimização Prematura
PDF
The Open Commerce Conference - Premature Optimisation: The Root of All Evil
PDF
Premature optimisation: The Root of All Evil
PDF
Elixir - Tolerância a Falhas para Adultos - Secot VIII Sorocaba
PDF
Elixir: Tolerância a Falhas para Adultos - OneDay Baixada Santista
PDF
Evento Codeminer UFRN 2016
PDF
QCON SP 2016 - Elixir: Tolerância a Falhas para Adultos
PDF
"Elixir of Life" - Dev In Santos
PDF
Restrição == inovação - 17o Encontro Locaweb SP
PDF
languages.map(&:latest).reduce(&:future).sort.first - Rupy Campinas 2015
PDF
QConSP 2015 - Dicas de Performance para Aplicações Web
Uma Discussão sobre a Carreira de TI
THE CONF - Opening Keynote
A Journey through New Languages - Rancho Dev 2017
Desmistificando Mitos de Startups - Sebrae - AP
A Journey through New Languages - Guru Sorocaba 2017
A Journey through New Languages - Insiter 2017
A Journey through New Languages - Locaweb Tech Day
A Journey through new Languages - Intercon 2016
Premature Optimization 2.0 - Intercon 2016
Conexão Kinghost - Otimização Prematura
The Open Commerce Conference - Premature Optimisation: The Root of All Evil
Premature optimisation: The Root of All Evil
Elixir - Tolerância a Falhas para Adultos - Secot VIII Sorocaba
Elixir: Tolerância a Falhas para Adultos - OneDay Baixada Santista
Evento Codeminer UFRN 2016
QCON SP 2016 - Elixir: Tolerância a Falhas para Adultos
"Elixir of Life" - Dev In Santos
Restrição == inovação - 17o Encontro Locaweb SP
languages.map(&:latest).reduce(&:future).sort.first - Rupy Campinas 2015
QConSP 2015 - Dicas de Performance para Aplicações Web
Anúncio

Último (7)

PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
Evolução em código: algoritmos genéticos com PHP
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
apresentacao introducao computacao ead.pdf
PDF
Dos requisitos ao código: como criar código rastreável em PHP
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Mapeamento de Objeto para Tabela Relacional
Evolução em código: algoritmos genéticos com PHP
Curso de Windows 11 resumido na prática.pptx
apresentacao introducao computacao ead.pdf
Dos requisitos ao código: como criar código rastreável em PHP
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Anúncio

Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018

  • 7.  > require "digest"  => true  > Digest::SHA256.hexdigest("hello world")  => "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"  > Digest::SHA256.hexdigest("hello world!")  => "7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9"
  • 8.  > Digest::SHA256.hexdigest("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,")  => "4d0fcee44bd65ea0a0c983da992b053d6f5d94a25e91eae6a783f59fb5ef0cc1"
  • 9.  De:  Para:  Valor: 0.01234567 BTC
  • 12. git branch –b mempool git add panda_sapo.transaction git commit –m “de panda, p/ sapo, 0.0123456 BTC” git push origin mempool
  • 18. git branch –b mempool git add panda_sapo.transaction git commit –m “de panda, p/ sapo, 0.0123456 BTC” git push origin mempool git checkout master git merge mempool
  • 25. def compute_hash_with_proof_of_work( difficulty, hash ) nonce = 0 loop do signature = calc_hash_with_nonce( nonce, hash ) if signature.start_with?( difficulty ) return [nonce, signature] else nonce += 1 end end end def calc_hash_with_nonce( nonce, hash ) Digest::SHA256.new.tap do |sha| sha.update( nonce.to_s + hash ) sha.hexdigest end end
  • 26. > hash = Digest::SHA256.hexdigest("hello world") > puts Benchmark.measure { compute_hash_with_proof_of_work("0000", hash) } 0.040000 0.000000 0.040000 ( 0.044949) > puts Benchmark.measure { compute_hash_with_proof_of_work("00000", hash) } 1.030000 0.000000 1.030000 ( 1.047740) > puts Benchmark.measure { compute_hash_with_proof_of_work("000000", hash) } 42.920000 0.040000 42.960000 ( 43.642561)
  • 27. RICO COM MEU PC VELHO?  Para Bitcoin (SHA256): 980 MH/s (milhões de hash/seg)  > R$ 3.400  NÃO TEM ROI!
  • 28.  Para Bitcoin (SHA256): 20 TH/s (TRILHÕES de hashes)  > R$ 14.000 (fila de espera)  > 1 ano e meio p/ ROI
  • 35. 17.468 tubos a vácuo 70 mil resistors 1.500 relays 6.000 switches manuais 5 milhões de pontos de solda 167 m2 30 toneladas 180 kW 1.468 GWh/ano (DUAS ISLÂNDIAS)
  • 37.  17 mil vezes mais BARATO  40 MILHÕES de vezes MENOR  400 MIL vezes menos energia  120 MIL vezes mais leve 1.300xmais PODEROSO!
  • 38.  17 mil vezes mais BARATO  40 MILHÕES de vezes MENOR  400 MIL vezes menos energia  120 MIL vezes mais leve 1.300xmais PODEROSO!
  • 39. Cada habitante da Terra precisaria doar USD 10 BILHÕES para minerar UM BITCOIN E levaria 35 MIL vezes a IDADE DO UNIVERSO até assinar 1 BLOCO
  • 48. ~ 30 blocos por dia (1Mb/bloco) ~ 12 BTC por bloco ~ 360 BTC por dia (~ USD 3.6 milhões por dia) ~ 6.122 PH/s (= 6.2 milhões de GTX 1080 Ti)
  • 71. pragma solidity ^0.4.19; contract BancoSimples { mapping (address => uint) private saldos; address public dono; function BancoSimples() public { dono = msg.sender; } function depositar() public payable returns (uint) { require(msg.value > 0); saldos[msg.sender] += msg.value; return saldos[msg.sender]; } function sacar(uint valor) public returns (uint) { require(valor <= saldos[msg.sender]); saldos[msg.sender] -= valor; msg.sender.transfer(valor); return saldos[msg.sender]; } function verSaldo() constant public returns (uint) { return saldos[msg.sender]; } }
  • 72. pragma solidity ^0.4.19; contract BancoSimples { mapping (address => uint) private saldos; address public dono; function BancoSimples() public { dono = msg.sender; } …. function verSaldo() constant public returns (uint) { return saldos[msg.sender]; } }
  • 73. pragma solidity ^0.4.19; contract BancoSimples { …. function depositar() public payable returns (uint) { require(msg.value > 0); saldos[msg.sender] += msg.value; return saldos[msg.sender]; } …. }
  • 74. pragma solidity ^0.4.19; contract BancoSimples { …. function sacar(uint valor) public returns (uint) { require(valor <= saldos[msg.sender]); saldos[msg.sender] -= valor; msg.sender.transfer(valor); return saldos[msg.sender]; } … }
  • 90.  Contratos Inteligentes  Identidade Digital  Armazenamento Distribuído  Registro de Terras  Eleições Digitais (de verdade)  Infraestrutura de pagamentos  Ativos digitais  Eficiência e Transparência no Governo  Basicamente, a extinção do Cartório  Basicamente, a extinção de todo centralizador de dados