Blockchain e PHP
Criando uma criptomoeda
@gabrielrcouto
Bitcoin
Bitcoin
Criptomoedas
2017 >< 2016
Prêmio de $1000 na AWS
Como vou gastar?
$10 na AWS = $1 em BTC
Vendi antes de 2017
Acho que não sou a melhor pessoa para responder :-P
2017
Todo mundo falou disso
Mas afinal, como é feita uma
criptomoeda?
Bob lendo código-fonte
Implementar
ajuda a
Compreender
PHP Made Cryptocurrency
https://github.com/gabrielrcouto/phplata
Problema
Bob, me empresta R$9,99
para eu comer uma
coxinha e tomar um guaraná?
Te pago depois via depósito.
Claro!
Quando depositar na minha conta, me
manda uma mensagem!
showMe($theCode);
Depositei
R$9,99
O Pokemao
disse:
"Depositei
R$9,99”
O Pokemao
disse:
"Depositei
R$9,99”
O Pokemao
disse:
"Depositei
R$9,99”O Pokemao
disse:
"Depositei
R$9,99”
O Pokemao
disse:
"Depositei
R$9,99”
O Pokemao
disse:
"Depositei
R$9,99”
O Pokemao
disse:
"Depositei
R$9,99”
O Pokemao
disse:
"Depositei
R$9,99”
O Pokemao
disse:
"Depositei
R$9,99”
Será que foi o Pokemao
mesmo?
Chaves Criptográficas
Provando “o dono de algo”
showMe($theCode);
O 492c158d
disse:
"Depositei
R$9,99”O 492c158d
disse:
"Depositei
R$9,99”
O 492c158d
disse:
"Depositei
R$9,99”
O 492c158d
disse:
"Depositei
R$9,99”
O 492c158d
disse:
"Depositei
R$9,99”
O 492c158d
disse:
"Depositei
R$9,99”
O 492c158d
disse:
"Depositei
R$9,99”
Hmm, foi assinada pelo
492c158d, que é o
Pokemao!
O 492c158d
disse:
"Depositei
R$9,99”
Mais R$9,99?
showMe($theCode);
Transaction
8516bd228fe09a2f
Previous Tx
ba1b15e3ee9faaff
From
492c158d8c9707bb
To
afbcd123123123122
Value
5.00
Transaction
ba1b15e3ee9faaff
Previous Tx
16dadf2cbc7e6800
From
492c158d8c9707bb
To
c69a789a9481fdba
Value
10.00
Transaction
41e4fc9060d0ab91
Previous Tx
8516bd228fe09a2f
From
492c158d8c9707bb
To
c69a789a9481fdba
Value
9.99
O Pokemao
tem todo
esse dinheiro?
O 492c158d
disse:
"Depositei
R$1.000.000”
Transaction
Vin
Txin
Previous Tx
16dadf2cbc7e6800
Index
0
Txin
Previous Tx
ba1b15e3ee9faaff
Index
5
Vout
Txout
Value
9.99
To
afbcd123123123122
Txout
Value
10.01
To
492c158d8c9707bb
Transaction 41e4fc…
Vin
Txin
Previous Tx
16dadf2cbc7e6800
Index
0
Txin
Previous Tx
ba1b15e3ee9faaff
Index
5
Vout
Txout #0
Transaction 16dadf…
Vout
Txout #0
Transaction ba1b15…
Txout #5
…
Transaction
Vin - R$16.00
Txin - R$8.00
…
…
…
Txin - R$8.00
…
…
…
Vout - R$16.00
Txout - To Bob
Value
9.99
To
afbcd123123123122
Txout - Change
Value
6.01
To
492c158d8c9707bb
Script
Txout
Script
A pessoa que pode usar esse dinheiro é quem
tem a chave pública = “afbcd123123123122"
Txin
Script
Eu tenho a chave pública “afbcd123123123122”,
veja essa assinatura “3128hfdkvnalk931283901".
Bitcoin Script
• Forth-like
• Not Turing-complete (with no loops)
• Stack-based
pay-to-pubkey-hash
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <sig> <pubKey>
anyone-can-spend
scriptPubKey: (empty)
scriptSig: OP_TRUE
Contratos
• Depósito calção
• Mercado Livre
• Crowdfunding
• Testamento
• Pay-for-proof
• Multi-party decentralised lotteries
showMe($theCode);
Esses R$10
para Bob
Os mesmos
R$10
para João
Ei, você não pode gastar
duas vezes!
Transaction 41e4fc…
Vin
Txin
Vout
Txout #0
Transaction 16dadf…
Vin
Txin
Transaction 12ffab…
Irreversible Transactions
Evitando double-spending e garantindo a integridade do histórico
Block
Transactions
Transaction 12afcd…
Transaction ef5432…
Transaction cde109…
Transaction 0b0be4…
Transaction f0da00…
Block b70c312…
Previous Block Hash
Nonce / Bits / Time / Version…
Transactions
…
…
…
…
…
…
…
…
Block b70c312…
Previous Block Hash
Nonce / Bits / Time / Version…
Transactions
…
…
…
…
…
…
…
…
Block b70c312…
Previous Block Hash
Nonce / Bits / Time / Version…
Transactions
…
…
…
…
…
…
…
…
Blockchain
Blockchain
Um bloco é “trancado” através de
um desafio computacional
(Proof-of-work)
hash($dadosDoBloco)
<
$desafioAlvo
22c2044d57a99cae6429de9002441f1690f4487de082f5679d08f3a
<
404CB000000000000000000000000000000000000000000000000
Block Time
• Cada criptomoeda altera a dificuldade para que um bloco seja
encontrado em X tempo
• Bitcoin: 10 minutos
• Litecoin: 2,5 minutos
• Ethereum: 15 segundos
“A block header with no transactions would be about 80 bytes. If we suppose
blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year.
With computer systems typically selling with 2GB of RAM as of 2008, and Moore’s
Law predicting current growth of 1.2GB per year, storage should not be a problem
even if the block headers must be kept in memory.”
Block
Previous Block Hash = 1fadbc…
Nonce = 1
Transactions
…
…
…
…
…
…
…
…
}hash($dadosDoBloco)
7845674d57a99cae642
9de9002441f1690f4487
de082f5679d08f3a
Block
Previous Block Hash = 1fadbc…
Nonce = 2
Transactions
…
…
…
…
…
…
…
…
}hash($dadosDoBloco)
99aabb74d57a99cae64
29de9002441f1690f448
7de082f5679d08f3a
Block
Previous Block Hash = 1fadbc…
Nonce = 6467532545466
Transactions
…
…
…
…
…
…
…
…
}hash($dadosDoBloco)
22c2044d57a99cae642
9de9002441f1690f4487
de082f5679d08f3a
Achei um
bloco!
showMe($theCode);
Miner
• Quem “tranca” blocos
• Antes de trancar, verifica se as transações
que serão colocadas são válidas. Precisa
percorrer a block chain
• Faz um trabalho computacional pesado
• Precisa estar sincronizado com a rede para
minerar
• Recebe retribuições pelo seu trabalho
Coinbase
• É uma transação especial, que o minerador coloca como sendo a primeira
do bloco. Nela, o minerador transfere para si mesmo uma quantidade de
moedas.
• É a forma como as moedas são “criadas”.
• No começo do Bitcoin, cada bloco gerava 50 moedas, e a cada 210.000
blocos, o valor de moedas é dividido pela metade. Hoje está em 12,5
moedas por bloco.
Miner Fee
• Quando uma transação é criada, Vout pode ser menor que Vin, o que
dará direito do minerador de pegar a diferença.
• Mineradores dão prioridade para transações com fees altos.
• Na rede Bitcoin, para ter sua transação em um bloco nos próximos 30
minutos, você paga $0.85, e na próxima hora $0.28.
• Essa será a única forma de incentivar os mineradores quando a geração
de moedas acabar.
Achei um
bloco!
Achei um
bloco!
Eita, quem está certo?
Chain Height
Você sempre acredita
na mais alta
Consensus
• São regras, que todos os nós da rede devem concordar
• A geração de X moedas por bloco, por exemplo, é uma regra
• Outra regra é de não existirem transações com valores negativos
• E outra regra, é de não existirem transações com saída > entrada
O básico de uma
criptomoeda é até aqui
Mas existe muito mais
• PoW x PoS
• Protocolo P2P
• Protocolo RPC
• Blockchain x Tangle
• Smart Contracts (Ethereum)
• Mineração CPU x GPU x ASIC
• Lightning network
• Trading
• Cardano x IOTA x Decred
• Cross chain (Waves)
• Quorum x Corda
• DAPPS
Conclusões
Pare de comer coxinha!
Blockchain é uma forma
atômica de guardar dados
–w3techs.com
“PHP is used by 83.2% of all the websites whose server-side
programming language we know.”
Podemos ser a maior rede distribuída
PHP Made Cryptocurrency
https://github.com/gabrielrcouto/phplata
Amanhã
11:30 - 12:30
Está com dúvidas sobre PHP?
Quer fazer gambiarras junto
comigo?
Essa é a hora!
Muito obrigado
@gabrielrcouto
github.com/gabrielrcouto
Venha trabalhar comigo na Memed
e ajudar a mudar a saúde do Brasil!
gabriel.couto@memed.com.br

PHP Experience 2018 - Blockchain e PHP