This document provides an overview of building a decentralized application (DApp) with Ethereum. It discusses:
- The basics of blockchain and how it enables decentralized applications through distributed ledgers and smart contracts.
- The tools used to develop DApps with Ethereum like Truffle, Ganache, Solidity, and Web3.
- How to structure a basic DApp by creating smart contracts with functions, deploying to the blockchain, and building a front-end interface.
- Examples of building a simple medical records DApp on Ethereum to demonstrate concepts like adding user data with transactions and reading data with calls.
2. 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
6. 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
7. 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
20. 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
21. 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
23. 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.
26. 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
30. 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)
31. ENDEREO DE WALLET
ENDEREO
CHAVE PRIVADA
CHAVE PBLICA
0x14385E0E
b40e0b2Ccad
FbfC7cfff543
b513588A0
RINKEBY
KOVAN
MAIN
NA CASA DECIMAL
1.1543685070575918e+47
32. 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
38. 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
39. 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
42. 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
44. 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
45. 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.
46. 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
47. 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
48. 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
49. 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
50. 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
51. 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
52. 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
53. 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.");
}
54. 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.");
}
55. 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
56. 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.
58. 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/