際際滷

際際滷Share a Scribd company logo
Blockchain DApps:
Construindo uma
Aplica巽達o
Descentralizada com
Ethereum
webminar imasters 2o. Semestre/2018
MICHEL PEREIRA FERNANDES
Chief Engineering do BeyondLabs, centro
de inova巽達o da EY
Coordenador de cursos de MBA da FIAP,
Mobile Development e Blockchain
TechnologiesNEW
Professor dos cursos MBA Fullstack
Development e Artificial Intelligence &
Machine Learning
br.linkedin.com/in/michelpf/
github.com/michelpf
michelpf@gmail.com
@michelpf
ANTES, POR QUE
B L O C K C H
A
I N
?
O MUNDO
EST CADA
VEZ MAIS
CONECTADO.
MAS
CONFIVEL?
BANCOS DE DADOS
ARMAZENAM
QUALQUER TIPO DE
INFORMAO
ID PRIMEIRO_NOME ULTIMO_NOME DATA_NASCIMENTO
1 MICHEL FERNANDES 08/01/1981
2 JOO PEDRO 01/01/1976
3 ERNESTO HENRIQUE 20/05/1974
4 MARIA DIAS 12/03/1982
ESTRUTURADO
ID PRIMEIRO_NOME ULTIMO_NOME DATA_NASCIMENTO
1 MICHEL FERNANDES 08/01/1981
2 JOO PEDRO 01/01/1976
3 ERNESTO HENRIQUE 20/05/1974
4 MARIA DIAS 12/03/1982
ESTRUTURADO
TABELA A
TABELA B
TABELA C
NO ESTRUTURADO
{
}
TOPOLOGIA CENTRALIZADAS
BANCO DE DADOS
CLIENTE
CLIENTE
CLIENTE
CLIENTE
AUTORIDADE CENTRALIZADA
CLIENTE CLIENTE CLIENTE CLIENTE
ADMINISTRADOR DO
BANCO DE DADOS
RASTREAMENTO DA
TEMPERATURA
Blockchain DApps
RASTREAMENTO DA
TEMPERATURA
TOPOLOGIA DESCENTRALIZADA
CLIENTE
CLIENTE
CLIENTE
CLIENTE
TOPOLOGIA DESCENTRALIZADA
CLIENTE
CLIENTE
CLIENTE
CLIENTE
ALTERAO
OLD NEW
TOPOLOGIA DESCENTRALIZADA
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CONSENSO
TOPOLOGIA DESCENTRALIZADA
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CONSENSO
TOPOLOGIA DESCENTRALIZADA
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CONSENSO
TOPOLOGIA DESCENTRALIZADA
CLIENTE
CLIENTE
CLIENTE
CLIENTE
CONSENSO
BLOCKCHAIN, UM NOVO BANCO DE DADOS
DESCENTRALIZADO IMUTVEL
PROTOCOLO DE
CONFIANA
NO DEPENDE DE UMA
AUTORIDADE CENTRAL
NADA  ALTERVEL
LIVRO-RAZO aka
LEDGER
GARANTIA QUE A
INFORMAO 
INTEGRA E SEGURA
BLOCKCHAIN, UM NOVO BANCO DE DADOS
DESCENTRALIZADO IMUTVEL
PROTOCOLO DE
CONFIANA
NO DEPENDE DE UMA
AUTORIDADE CENTRAL
NADA  ALTERVEL
LIVRO-RAZO aka LEDGER
GARANTIA QUE A
INFORMAO  INTEGRA E
SEGURADISTRIBUTED LEDGER
aka DLT, DISTRIBUTED LEDGER TECHNOLOGY
O PROBLEMA
DOS
GENERAIS
BIZANTINOS
https://pt.wikipedia.org/wiki/Problema_dos_dois_generais
ALGUNS ALGORTIMOS DE CONSENSO
PROVA DE TRABALHO
aka PROVE OF WORK (PoW)
PROVA DE PARTICIPAO
aka PROVE OF STAKE (PoS)
GERA UMA FUNO HASH (SHA-
256) DE UMA INFORMAO.
A COMPLEXIDADE DO CLCULO
TRAZ UM NVEL DE CONFIANA.
BLOCOS SERO GERADOS POR
ENTIDADES CONFIVEIS NA
REDE, OS QUE POSSUEM MAIOR
REPUTAO POR MEIO DA
QUANTIDADE DE MOEDAS.
SATOSHI NAKAMOTO
https://cointimes.com.br/whitepaper-do-bitcoin-traduzido
PAPER EM PORTUGUS
BITCOIN: A PEER-TO-PEER
SYSTEMELECTRONIC CASH
https://bitcoin.org/bitcoin.pdf
PAPER ORIGINAL
DESCRIO SOB ASPECTOS
TCNICOS DO QUE SERIA UMA
REDE DE BLOCKCHAIN, UTILIZADA
NA IMPLEMENTAO DO BITCOIN
DEMO
https://anders.com/blockchain/
CRIADOR DO ETHEREUM
ESTUDOU PROFUNDAMENTE A
PLATAFORMA DO BITCOIN
PROPS UMA NOVA PLATAFORMA
COM AS SEGUINTES MUDANAS:
 MOEDA SEM LIMITE
 CONTRATOS INTELIGENTES
 RECOMPENSA FIXA DE PROVA
DE TRABALHO
 TRANSAES MAIS RPIDAS
QUE O BITCOIN
VITALIK BUTERIN
ETHEREUM BLOCKCHAIN
ETHEREUM BLOCKCHAIN
APPS USERS
https://web3js.readthedocs.io https://metamask.io
INSTALANDO O METAMASK
https://metamask.io
WALLET
ENDEREO
CHAVE PRIVADA
CHAVE PBLICA
O METAMASK GERA UM
MNEUMNICO QUE  CAPAZ DE
CRIAR UM CONJUNTO DE
ENDEREOS, CHAVES PRIVADAS E
PBLICAS
OS ENDEREOS GERADOS PODEM
SER UTILIZADOS EM QUAISQUER
REDES ETHEREUM (PBLICA,
PRIVADA OU TESTES)
ENDEREO DE WALLET
ENDEREO
CHAVE PRIVADA
CHAVE PBLICA
0x14385E0E
b40e0b2Ccad
FbfC7cfff543
b513588A0
RINKEBY
KOVAN
MAIN
NA CASA DECIMAL
1.1543685070575918e+47
TRANSAO
NONCE
TO
VALUE
GAS PRICE
GAS LIMIT
V
R
S
VALOR QUE SATISFAZ A PROVA DE TRABALHO
ENDEREO DESTINO (OU CONTRATO)
ETHERES A SEREM TRANSFERIDOS
FATOR MULTIPLICADOR DISPOSTO A PAGAR PARA
A CONFIRMAR A TRANSAO
VALOR LIMITE DE CONFIRMAO DA TRANSAO
VALORES QUE GERAM O ENDEREO DE ORIGEM.
SO CALCULADOS A PARTIR DA CHAVE PRIMRIA
DO WALLET DE ORIGEM.
ASSINATURA DIGITAL
TUDO QUE  ARMAZENADO NO BLOCKCHAIN
EXEMPLO DE TRANSAO
https://goo.gl/voRfCi
ENVIANDO UMA TRANSAO
TRANSACTION
POOL
TX
ENVIANDO UMA TRANSAO
TX
TRANSACTION
POOL
TX
TO: ZZ
GAS PRICE: XX
GAS LIMIT: YY
ENVIANDO UMA TRANSAO
TX
TRANSACTION
POOL
TX
TO: ZZ
GAS PRICE: XX
GAS LIMIT: YY
ENVIANDO UMA TRANSAO
TRANSACTION
POOL
TX
TO: ZZ
GAS PRICE: XX
GAS LIMIT: YY
SMART CONTRACT
LINGUAGEM DE SMART
CONTRACT  SOLIDITY
SIMILAR AO JAVASCRIPT
FORTEMENTE TIPADO
PARADIGMA ORIENTADO A
OBJETOS
CADA DEPLOYMENT DO
CONTRATO (CLASS)
 COMO SE FOSSE UMA
INSTNCIA
https://solidity.readthedocs.io
HELLO WORLD CONTRACT
https://remix.ethereum.org/#optimize=true
IDE WEB BASED PARA DESENVOLVIMENTO DE SMART
CONTRACTS
INDICADO PARA PEQUENOS TESTES E ENTENDIMENTO BSICO
DOS CONCEITOS DE SMART CONTRACTS
NO  INDICADO PARA APLICAES PROFISSIONAIS, APESAR DE
SER BEM ROBUSTO, POIS DEPENDE DE ACESSO A INTERNET
COMPILAO
SMART CONTRACT
SOLIDY FILE (.SOL)
COMPILADOR
SOLIDITY
BYTECODE
NODE DEPLOYMENT
ABI (JS APPS)
APPLICATION BINARY
INTERFACE
DAPP VS APP
FRONT-END BACK-END STORAGE
FRONT-END BACK-END
FRONT-END
APP
DAPP
DAPP
O DESAFIO
CRIAR UMA
VERSO
SIMPLIFICADA DE
UMA CARTEIRA DE
VACINAO
BASEADA EM
BLOCKCHAIN
ETHEREUM
CARTEIRA DE VACINAO
MICHEL FERNANDES
0x14385e0eb40e0b2ccadfbfc7cfff543b513588a0
SARAMPO
DOSE 1
LOTE 12/05/2018 A
SO PAULO
GRIPE TTANO
FERRAMENTAS
truffleframework.com/truffle
TRUFFLE
DESENVOLVIMENTO, TESTE
E DEPLOY DE SMART
CONTRACTS
truffleframework.com/ganache
GANACHE
N DE REDE ETHEREUM DE
TESTES (EX. TEST RPC)
WEB3
INTERFACE ENTRE
SMARTCONTRACT E APP
JS
web3js.readthedocs.io
FERRAMENTAS
truffleframework.com/truffle
TRUFFLE
DESENVOLVIMENTO, TESTE
E DEPLOY DE SMART
CONTRACTS
truffleframework.com/ganache
GANACHE
N DE REDE ETHEREUM DE
TESTES (EX. TEST RPC)
WEB3
INTERFACE ENTRE
SMARTCONTRACT E APP
JS
web3js.readthedocs.io
npm install truffle g
crie uma pasta e depois
truffle init
download na web npm install web3
TRUFFLE INIT
DEPOIS DE CRIAR UM DIRETRIO DE PROJETO E ENVIAR O
COMANDO
truffle init
O TRUFFLE IR CRIAR UMA ESTRUTURA PRONTA DE PROJETO.
OS CONTRATOS DEVERO SER EDITADOS NA PASTA contracts.
DEVER SER ACRESCENTADO UM ARQUIVO NA PASTA migrations
PARA EXPORTAR CONTRATOS PARA TESTE/DEPLOY.
O ARQUIVO truffle.js, na RAIZ, PRECISA SER EDITADO PARA INCLUIR
A REDE DE TESTES DO GANACHE.
TRUFFLE.JS
module.exports = {
migrations_directory: "./migrations",
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*", // Match any network id
}
},
solc: {
optimizer: {
enabled: true,
runs: 500
}
}
};
VERIFIQUE SE A
PORTA DO
GANACHE  A
MESMA
CONFIGURADA NO
TRUFFLE.
SOLC  O
COMPILADOR, O
VALOR runs 
QUANTAS VEZES
O COMPILADOR
OTIMIZAR O
CONTRATO
ESTRUTURAS
struct Person {
address personAddress;
string firstName;
string lastName;
bool created;
mapping(uint => Vaccine)
vaccines;
}
struct Vaccine {
uint dose;
string batch;
string place;
}
SARAMPO
DOSE 1
LOTE 12/05/2018 A
SO PAULO
MICHEL FERNANDES
0x14385e0eb40e0b2ccadfbfc7cfff543b51
3588a0
MTODOS
function addPerson(string _firstName, string _lastName) public returns (bool) {
address _address = msg.sender;
Person storage person = persons[_address];
person.firstName = _firstName;
person.lastName = _lastName;
person.created = true;
emit statusEvent(100);
return true;
}
ADICIONAR OU SUBSTITUIR UMA NOVA PESSOA
TRANSACTION: ARMAZENA DADOS
MTODOS
function getPerson() public view returns (string, string) {
address _address = msg.sender;
return (persons[_address].firstName, persons[_address].lastName);
}
RETORNAR DADOS DE UMA PESSOA
CALL: SOMENTE LEITURA
MTODOS
unction addVaccine(uint _vaccineId, uint _dose, string _batch, string _place) public
returns(bool)
{
address _address = msg.sender;
Vaccine storage vaccine = persons[_address].vaccines[_vaccineId];
vaccine.dose = _dose;
vaccine.batch = _batch;
vaccine.place = _place;
persons[_address].vaccines[_vaccineId] = vaccine;
emit statusEvent(101);
return true;
}
ADICIONAR UMA VACINA A UMA PESSOA
TRANSACTION: ARMAZENA DADOS
MTODOS
function getVaccine(uint _vaccineId) public view returns (uint, string, string) {
address _address = msg.sender;
return (persons[_address].vaccines[_vaccineId].dose,
persons[_address].vaccines[_vaccineId].batch,
persons[_address].vaccines[_vaccineId].place);
}
RETORNAR VACINA DE UMA PESSOA
CALL: SOMENTE LEITURA
TESTES
PODEM SER FEITOS COM O MOCHA (JS) OU NO PRPRIO
SOLIDITY.
pragma solidity ^0.4.23;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/VaccineControl.sol";
contract TestVaccineControl {
}
FUNES DE TESTE
TESTES
TESTE
PARA
ADICIONAR
NOVA
PESSOA
function testAddingNewPerson() public {
VaccineControl vaccineControl =
VaccineControl(DeployedAddresses.VaccineControl());
string memory firstName = "Michel";
string memory lastName = "Fernandes";
bool result;
result = vaccineControl.addPerson(firstName,
lastName);
Assert.equal(result, true, "Adding new person.");
}
TESTES
TESTE
PARA
ADICIONAR
NOVA
VACINA
function testAddingNewVaccine() public {
VaccineControl vaccineControl =
VaccineControl(DeployedAddresses.VaccineControl());
uint idVaccine = 1;
uint dose = 1;
string memory batch = "12-2018-ABC";
string memory place = "Posto de Sa炭de Santa Maria";
bool result;
result = vaccineControl.addVaccine(idVaccine, dose,
batch, place);
Assert.equal(result, true, "Adding new vaccine.");
}
DEPLOY
CONSISTEM EM 3 PASSOS:
truffle compile
truffle test
truffle migrate --reset
VERIFICAO DE ERROS DE SINTAXE
GERA OS BYTECODES E ABI (JSON)
TESTES INTEGRADOS
MIGRAO DE CONTRATO
WEB APP
NOSSO WEB APP FOI CONSTRUDO DA FORMA MAIS SIMPLES O
POSSVEL, VISANDO O ENTENDIMENTO DE UM DAPP NO NVEL
DE FUNDAMENTO.
POR ISSO O STACK ENVOLVIDO FOI SIMPLIFICADO/
O WEB SERVER UTILIZADO FOI O LITE-SERVER DO NPM (NPM
INSTALL LITE-SERVER).
O FRONT-END FOI DESENVOLVIDO COM BOOTSTRAP E JQUERY.
ATULAMENTE, O TRUFFLE, COM DRIZZLE OFERECE SUPORTE
AO REACT.
Blockchain DApps
ONDE APRENDER MAIS?
https://github.com/michelpf/bck-eth-dapp-vaccine-control
DOCUMENTAO DO TRUFFLE, ESTUDE DRIZZLE E REACT
OPEN ZEPELLIN (IMPLEMENTAO DE TOKENS E CONTRATOS
PADRONIZADOS, ERC20, ERC70, ETC.)
CURSOS CURTOS (BLOCKCHAIN ACADEMY, UDEMY, ETC.)
FORMAO MBA (FIAP MBA BLOCKCHAIN DEV & TECH)
www.fiap.com.br/mba/mba-em-blockchain-development-e-
technologies/

More Related Content

Blockchain DApps