SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
Desenvolvendo aplicações reais
para Blockchain Ethereum
Edilson Osorio Junior
OriginalMy.com
Fev/2017
2
Agenda
Tópicos que serão abordados durante o workshop
Interação Infraestrutura Desenvolvimento Segurança
Interação entre Smart-Contracts
Aplicações modulares e descentralizadas,
conversando entre si
Avançando no desenvolvimento
Detalhes técnicos avançados, com técnicas,
abordagens e desenvolvimento para blockchains
Aplicações Standalone sem
Infraestrutura
Como conectar sua aplicação
diretamente no blockchain
Aspectos de segurança
Controle de acesso, redução de
custos e como o blockchain trata
seu código
Workshop de desenvolvimento para blockchain Ethereum
4
Problemas (!?) do Jogo
O que falta em Pokémon Go?
Não é possível trocar
Pokémons e outros itens
por coisas de interesse ou
Pokecoins
Trocar Pokémons
O jogo não permite que
os usuários coloquem
seus artigos a venda
Vender artigos e
PokémonsMercado
Pokémon
5
O Blockchain em Pokémon Go
Segurança - Transparência - Contabilidade
Lançamento de
Pokémons
Permite o controle de
quantos pokémons são
disponibilizados e para
quem
Emissão de
(cripto)moeda
Utiliza uma moeda própria
(pokecoin) para as
transações de compra e
venda
Mercado Global
interno e secundário
Permite a compra e venda
de pokémons em um
marketplace dedicado ou
através de aplicativos
Reduz problemas
com infraestrutura
Infraestrutura utilizada seja
distribuída e
descentralizada,
desafogando o tráfego em
nós dedicados
6
Aplicações modulares e descentralizadas
Aplicações monolíticas? Esqueça isso.
São o insumo da plataforma
Emissão de Pokecoins
Cada pokémon, com seus
atributos exclusivos
Pokémons
Cada treinador é
identificado, junto com seu
catálogo de pokémons
Treinadores
Local onde você compra e
vende os bichinhos virtuais
Mercado Pokémon
Garante que cada transação
aconteceu com transparência,
imutabilidade e
rastreabilidade
Blockchain
7
Aplicações Standalone
P2P sem possibilidade de bloqueio
Dependendo do seu modelo de negócio, a sua
aplicação não precisa de infraestrutura além
da que o blockchain proporciona.
Aplicações que funcionam sozinhas
Economia com infraestrutura e
fornecimento de API's
HMTL, Javascript, CSS, Bootstrap,
Angular
Acompanhe todas as transações
Alcance global sem intermediários
Pode ajudar pequenos
negócios $$
Toda a comunicação intra-software
acontece diretamente no blockchain
e pode ser criptografada
Acesso em nível global,
sem risco de DoS ou
ataques de negação
A sua aplicação pode depender apenas de
um html ou uma aplicação mobile
compartilhada no P2P
Vamos falar de
programação? 15 dicas de desenvolvimento
Structs e Mappings
9
Sempre que possível acompanhe um Struct com um Mapping como índice
struct PokemonMaster {
address pokeMaster;
uint[] pokemons;
}
mapping (address => uint256) public pokeOwnerIndex;
Structs ou Mappings
10
É possível fazer um mapping de um struct.
Ex.: mapping(address => PokemonMaster) public pokemons
Struct permite alterar apenas um item do registro (array)
Mapping tem que recarregar o array inteiro para substituir um item
Arrays
11
O Blockchain NUNCA apaga uma informação, nem quando você manda excluir
um item de um array
array[] = [ 1, 2, 3, 4 ]
delete array[3];
array[] = [ 1, 2, 0, 4 ]
Possíveis soluções: reorganizar o array a custo de gas ou inserir novos dados no gap (0)
Índices de índices podem ser um problema
12
Criar índices de índices muitas vezes não funciona pois o primeiro item sempre é zero,
e o blockchain substitui itens de array por zero quando excluídos.
Então algumas vezes é necessário gravar algum dado descartável no primeiro item e
administrar o array a partir do item 1
Arrays
13
A função array.push nem sempre é a melhor alternativa
array[] = [ 1, 2, 3, 4 ]
array.push(5);
array[] = [ 1, 2, 3, 4, 0, 5 ]
Como contornar?
uint arrayLength = array.length++;
array[arrayLength] = novoItem;
Interação entre contratos
14
Prototipe no cabeçalho as funções dos outros contratos que você deseja chamar
contract pokeCoinContract { mapping (address => uint256) public balanceOf; function
transferFrom(address _from, address _to, uint256 _value){ } };
contract pokeCentralContract { mapping (uint256 => address) public pokemonToMaster; function
transferPokemon(address _from, address _to, uint256 _pokemonID) { } };
Interação entre contratos
15
Na área pública do contrato você prototipa as variáveis
pokeCoinContract public pokeCoin;
pokeCentralContract public pokeCentral;
E em uma chamada você aponta os endereços dos contratos
function pokeMarket(pokeCoinContract pokeCoinAddress, pokeCentralContract pokeCentralAddress) {
pokeCoin = pokeCoinContract(pokeCoinAddress);
pokeCentral = pokeCentralContract(pokeCentralAddress);
}
Modifiers
16
Funções que adicionam funcionalidades a outra função
modifier onlyOwner {
if (msg.sender != owner) throw;
_; }
function stopSale(address pokeSellerAddress, uint pokemonID) onlyOwner {
Oculte tudo aquilo que não é público
17
Se não é necessário que a variável seja pública, não a torne pública
O mesmo serve para funções
function cleanArray(uint[] pokeList) onlyOwner internal returns (uint[]) {
function addPokemonToSellingList(uint pokemonID) onlyOwner internal {
Eventos de Log as vezes são úteis
18
event Log1(uint number);
event Log2(string message);
Envio de transações
19
Sempre que possível determine a quantidade de gas e o preço
pokeMarket.newSale('0x'+accountAddress, pokeIDSell, pokePriceSell, {value: 0, gas: 290654, gasPrice: 20000000000}
Utilize o Mist ou Browser Solidity para calcular o gasto médio de gas
Mensagens de erro nem sempre ajudam
20
Browser Solidity
21
Muito bom para depurar transações
Mostra o custo da transação em gas
Conecta e lança contratos no blockchain
Não mostra conteúdo de array
Browser Solidity
22
Lento para contratos extensos
Ruim para trabalhar com múltiplos contratos simult.
Precisa rodar localmente para conectar no seu node
https://ethereum.github.io/browser-solidity/
Controle e acesso central ou por wallet
23
Depende do seu modelo de negócio
Controle de acesso sempre
24
contract accessControlled {
address public owner;
function owned() {
owner = msg.sender;
}
modifier onlyOwner {
if (msg.sender != owner) throw;
/* o caracter "_" é substituído pelo corpo da funcao onde o modifier é utilizado */
_
}
function transferOwnership(address newOwner) onlyOwner {
owner = newOwner;
}
}
contract pokeMarket is accessControlled {
if (pokeBuyerAddress == pokeCentral.pokemonToMaster(pokemonID)) throw;
Crie whitelists e/ou blacklists
25
mapping (address => bool) public frozenAccount;
/* Token Rules */
function freezeAccount(address target, bool freeze) onlyOwner {
frozenAccount[target] = freeze;
FrozenFunds(target, freeze);
}
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
// In case of whitelist instead of blacklist, change all frozen/freeze to approve
if (frozenAccount[msg.sender]) throw;
* contribuição com o Ethereum
26
Não esqueça
Blockchain serve para muita coisa, mas não serve para tudo
1 Aplicações com volumes muito grandes de transações podem gerar alto
custo. Registros complexos também aumentam o preço
2 Tudo que você registrar no Blockchain se torna público
3 Criar aplicações para blockchain precisa de um novo mindset
4 Abuse dos controles de segurança e pesquise sempre
27
Revisando o Workshop
Com os códigos e a plataforma apresentada você aprendeu a fazer:
Modelos de
negócio criativos
Dependem unicamente
da sua capacidade de
materializar ideias
Criar uma moeda própria
Essa moeda pode ser usada
livremente, dentro ou fora da
sua aplicação
Criar ativos únicos
Ativos únicos e exclusivos (ou
não) para a sua plataforma
Criar um marketplace/exchange
Você aprendeu a criar um
ambiente real para a livre
negociação dos seus ativos.
Criar e administrar contas/wallets
Como criar, identificar e
administrar seus usuários
através de contas no blockchain
Programação avançada no Ethereum
De um html standalone a diversas
abordagens avançadas para
desenvolver uma aplicação
descentralizada muito melhor
Redução de custos
Você aprendeu formas de analisar
os custos de desenvolvimento e
infraestrutura com blockchain,
além de como otimizá-los
Onde eu encontro os
códigos e exemplos
apresentados? https://github.com/eddieoz
truffle-mercado-pokemon
Licença MIT
A transfer of trust in a
trustless world
Workshop Ethereum Básico para Desenvolvedores
Fev/2017
Edilson Osorio Junior
originalmy.com osoriojr@originalmy.com @eddieoz fb.com/osoriojr github.com/eddieoz
Workshop de desenvolvimento para blockchain Ethereum

Más contenido relacionado

La actualidad más candente

Zabbix e SNMP - Zabbix Conference LatAm - André Déo
Zabbix e SNMP - Zabbix Conference LatAm - André DéoZabbix e SNMP - Zabbix Conference LatAm - André Déo
Zabbix e SNMP - Zabbix Conference LatAm - André DéoAndré Déo
 
Calico seguranca para containers e mais
Calico   seguranca para containers e maisCalico   seguranca para containers e mais
Calico seguranca para containers e maisRicardo Katz
 
Começando com Quorum - versão 2.6
Começando com Quorum - versão 2.6Começando com Quorum - versão 2.6
Começando com Quorum - versão 2.6Jeff Prestes
 
Pilares do desenvolvimento Mobile no Nubank
 Pilares do desenvolvimento Mobile no Nubank Pilares do desenvolvimento Mobile no Nubank
Pilares do desenvolvimento Mobile no NubankDevCamp Campinas
 
Boas práticas no desenvolvimento de smart contracts, The Dev Conf - TDC SP 2019
Boas práticas no desenvolvimento de smart contracts, The Dev Conf - TDC SP 2019Boas práticas no desenvolvimento de smart contracts, The Dev Conf - TDC SP 2019
Boas práticas no desenvolvimento de smart contracts, The Dev Conf - TDC SP 2019Rafael Capaci Pereira
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraCaelum
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 

La actualidad más candente (8)

Zabbix e SNMP - Zabbix Conference LatAm - André Déo
Zabbix e SNMP - Zabbix Conference LatAm - André DéoZabbix e SNMP - Zabbix Conference LatAm - André Déo
Zabbix e SNMP - Zabbix Conference LatAm - André Déo
 
Calico seguranca para containers e mais
Calico   seguranca para containers e maisCalico   seguranca para containers e mais
Calico seguranca para containers e mais
 
JavaScript Hacks
JavaScript HacksJavaScript Hacks
JavaScript Hacks
 
Começando com Quorum - versão 2.6
Começando com Quorum - versão 2.6Começando com Quorum - versão 2.6
Começando com Quorum - versão 2.6
 
Pilares do desenvolvimento Mobile no Nubank
 Pilares do desenvolvimento Mobile no Nubank Pilares do desenvolvimento Mobile no Nubank
Pilares do desenvolvimento Mobile no Nubank
 
Boas práticas no desenvolvimento de smart contracts, The Dev Conf - TDC SP 2019
Boas práticas no desenvolvimento de smart contracts, The Dev Conf - TDC SP 2019Boas práticas no desenvolvimento de smart contracts, The Dev Conf - TDC SP 2019
Boas práticas no desenvolvimento de smart contracts, The Dev Conf - TDC SP 2019
 
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo SilveiraServlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
Servlets 3: o contexto assíncrono - JavaOne 2010 - Paulo Silveira
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 

Destacado

Blockchain e Aplicações Descentralizadas
Blockchain e Aplicações DescentralizadasBlockchain e Aplicações Descentralizadas
Blockchain e Aplicações DescentralizadasOriginalMy.com
 
As pessoas, os dados e a privacidade
As pessoas, os dados e a privacidadeAs pessoas, os dados e a privacidade
As pessoas, os dados e a privacidadeOriginalMy.com
 
Blockchain e Aplicações Descentralizadas - Fev/2017
Blockchain e Aplicações Descentralizadas - Fev/2017Blockchain e Aplicações Descentralizadas - Fev/2017
Blockchain e Aplicações Descentralizadas - Fev/2017Edilson Osorio Junior
 
A tecnologia blockchain (cryptoledger) e ecossistema disruptivo “pós-cloud”
A tecnologia blockchain (cryptoledger) e ecossistema disruptivo “pós-cloud” A tecnologia blockchain (cryptoledger) e ecossistema disruptivo “pós-cloud”
A tecnologia blockchain (cryptoledger) e ecossistema disruptivo “pós-cloud” Fabrício Vargas Matos
 
140916 Conferência Blockchain RTM - Rony Sakuragui - Bradesco
140916 Conferência Blockchain RTM - Rony Sakuragui - Bradesco140916 Conferência Blockchain RTM - Rony Sakuragui - Bradesco
140916 Conferência Blockchain RTM - Rony Sakuragui - BradescoRTM
 
Blockchain e Aplicações Corporativas - CoinBR Summit 2016
Blockchain e Aplicações Corporativas - CoinBR Summit 2016Blockchain e Aplicações Corporativas - CoinBR Summit 2016
Blockchain e Aplicações Corporativas - CoinBR Summit 2016Edilson Osorio Junior
 
Blockchain 2.0 - O Bitcoin além do dinheiro digital
Blockchain 2.0 - O Bitcoin além do dinheiro digitalBlockchain 2.0 - O Bitcoin além do dinheiro digital
Blockchain 2.0 - O Bitcoin além do dinheiro digitalEdilson Osorio Junior
 
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú UnibancoRTM
 
140916 Conferência Blockchain RTM - Joaquim Kiyoshi Kavakama - CIP
140916 Conferência Blockchain RTM - Joaquim Kiyoshi Kavakama - CIP140916 Conferência Blockchain RTM - Joaquim Kiyoshi Kavakama - CIP
140916 Conferência Blockchain RTM - Joaquim Kiyoshi Kavakama - CIPRTM
 
Crowdsourcing, Crowdfunding & Outros tópicos
Crowdsourcing, Crowdfunding & Outros tópicosCrowdsourcing, Crowdfunding & Outros tópicos
Crowdsourcing, Crowdfunding & Outros tópicosASAAS
 
Bitknock Slides - Apresentação Oficial em Português
Bitknock Slides - Apresentação Oficial em PortuguêsBitknock Slides - Apresentação Oficial em Português
Bitknock Slides - Apresentação Oficial em PortuguêsBitKnock
 
Cloud Sha - 256, Scrypt, Cloud Folding, x11 - Português BR:
Cloud Sha - 256, Scrypt, Cloud Folding, x11 - Português BR:Cloud Sha - 256, Scrypt, Cloud Folding, x11 - Português BR:
Cloud Sha - 256, Scrypt, Cloud Folding, x11 - Português BR:Jefferson Tavares
 
Bitcoin e as Tecnologias de Criptomoeda
Bitcoin e as Tecnologias de CriptomoedaBitcoin e as Tecnologias de Criptomoeda
Bitcoin e as Tecnologias de CriptomoedaRuy De Queiroz
 
140916 Conferência Blockchain RTM - André Mello - RTM
140916 Conferência Blockchain RTM - André Mello - RTM140916 Conferência Blockchain RTM - André Mello - RTM
140916 Conferência Blockchain RTM - André Mello - RTMRTM
 
Registro de Informações no Blockchain da rede Bitcoin
Registro de Informações no Blockchain da rede BitcoinRegistro de Informações no Blockchain da rede Bitcoin
Registro de Informações no Blockchain da rede BitcoinEdilson Osorio Junior
 

Destacado (20)

Blockchain e Aplicações Descentralizadas
Blockchain e Aplicações DescentralizadasBlockchain e Aplicações Descentralizadas
Blockchain e Aplicações Descentralizadas
 
As pessoas, os dados e a privacidade
As pessoas, os dados e a privacidadeAs pessoas, os dados e a privacidade
As pessoas, os dados e a privacidade
 
Por trás do Bitcoin - O Blockchain
Por trás do Bitcoin - O BlockchainPor trás do Bitcoin - O Blockchain
Por trás do Bitcoin - O Blockchain
 
Blockchain e Aplicações Descentralizadas - Fev/2017
Blockchain e Aplicações Descentralizadas - Fev/2017Blockchain e Aplicações Descentralizadas - Fev/2017
Blockchain e Aplicações Descentralizadas - Fev/2017
 
A tecnologia blockchain (cryptoledger) e ecossistema disruptivo “pós-cloud”
A tecnologia blockchain (cryptoledger) e ecossistema disruptivo “pós-cloud” A tecnologia blockchain (cryptoledger) e ecossistema disruptivo “pós-cloud”
A tecnologia blockchain (cryptoledger) e ecossistema disruptivo “pós-cloud”
 
140916 Conferência Blockchain RTM - Rony Sakuragui - Bradesco
140916 Conferência Blockchain RTM - Rony Sakuragui - Bradesco140916 Conferência Blockchain RTM - Rony Sakuragui - Bradesco
140916 Conferência Blockchain RTM - Rony Sakuragui - Bradesco
 
Blockchain e Aplicações Corporativas - CoinBR Summit 2016
Blockchain e Aplicações Corporativas - CoinBR Summit 2016Blockchain e Aplicações Corporativas - CoinBR Summit 2016
Blockchain e Aplicações Corporativas - CoinBR Summit 2016
 
Blockchain 2.0 - O Bitcoin além do dinheiro digital
Blockchain 2.0 - O Bitcoin além do dinheiro digitalBlockchain 2.0 - O Bitcoin além do dinheiro digital
Blockchain 2.0 - O Bitcoin além do dinheiro digital
 
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
140916 Conferência Blockchain RTM - Maurício Alban-Salas - Itaú Unibanco
 
Os Cartórios e a nova Era Tecnológica
Os Cartórios e a nova Era TecnológicaOs Cartórios e a nova Era Tecnológica
Os Cartórios e a nova Era Tecnológica
 
140916 Conferência Blockchain RTM - Joaquim Kiyoshi Kavakama - CIP
140916 Conferência Blockchain RTM - Joaquim Kiyoshi Kavakama - CIP140916 Conferência Blockchain RTM - Joaquim Kiyoshi Kavakama - CIP
140916 Conferência Blockchain RTM - Joaquim Kiyoshi Kavakama - CIP
 
Crowdsourcing, Crowdfunding & Outros tópicos
Crowdsourcing, Crowdfunding & Outros tópicosCrowdsourcing, Crowdfunding & Outros tópicos
Crowdsourcing, Crowdfunding & Outros tópicos
 
Bitknock Slides - Apresentação Oficial em Português
Bitknock Slides - Apresentação Oficial em PortuguêsBitknock Slides - Apresentação Oficial em Português
Bitknock Slides - Apresentação Oficial em Português
 
Ethereum - Guia Básico:
Ethereum - Guia Básico:Ethereum - Guia Básico:
Ethereum - Guia Básico:
 
Apresentação bitcoin Paymony 2.0- Portal SOS
Apresentação bitcoin Paymony 2.0- Portal SOSApresentação bitcoin Paymony 2.0- Portal SOS
Apresentação bitcoin Paymony 2.0- Portal SOS
 
Cloud Sha - 256, Scrypt, Cloud Folding, x11 - Português BR:
Cloud Sha - 256, Scrypt, Cloud Folding, x11 - Português BR:Cloud Sha - 256, Scrypt, Cloud Folding, x11 - Português BR:
Cloud Sha - 256, Scrypt, Cloud Folding, x11 - Português BR:
 
Bitcoin e as Tecnologias de Criptomoeda
Bitcoin e as Tecnologias de CriptomoedaBitcoin e as Tecnologias de Criptomoeda
Bitcoin e as Tecnologias de Criptomoeda
 
140916 Conferência Blockchain RTM - André Mello - RTM
140916 Conferência Blockchain RTM - André Mello - RTM140916 Conferência Blockchain RTM - André Mello - RTM
140916 Conferência Blockchain RTM - André Mello - RTM
 
Blockchain presentation
Blockchain presentationBlockchain presentation
Blockchain presentation
 
Registro de Informações no Blockchain da rede Bitcoin
Registro de Informações no Blockchain da rede BitcoinRegistro de Informações no Blockchain da rede Bitcoin
Registro de Informações no Blockchain da rede Bitcoin
 

Similar a Workshop de desenvolvimento para blockchain Ethereum

DevBlockOps: Devops em ambientes Blockchain
DevBlockOps: Devops em ambientes BlockchainDevBlockOps: Devops em ambientes Blockchain
DevBlockOps: Devops em ambientes BlockchainMisael Santos
 
TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
TDC 2018 - Boas práticas no desenvolvimento de Smart ContractsTDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
TDC 2018 - Boas práticas no desenvolvimento de Smart ContractsAndré Ferreira
 
Workshop: Ethereum e Smart contracts
Workshop: Ethereum e Smart contractsWorkshop: Ethereum e Smart contracts
Workshop: Ethereum e Smart contractsAndré Ferreira
 
Blockchain - O Futuro da Economia P2P
Blockchain - O Futuro da Economia P2PBlockchain - O Futuro da Economia P2P
Blockchain - O Futuro da Economia P2PAndré Ferreira
 
TDC 2017 - Blockchain Para Nós Desenvolvedores
TDC 2017 - Blockchain Para Nós DesenvolvedoresTDC 2017 - Blockchain Para Nós Desenvolvedores
TDC 2017 - Blockchain Para Nós DesenvolvedoresRoberto Santacroce Martins
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Rodrigo Stefani Domingues
 
TechLaw Summit 2018 - Blockchain, o futuro da economia P2P
TechLaw Summit 2018 - Blockchain, o futuro da economia P2PTechLaw Summit 2018 - Blockchain, o futuro da economia P2P
TechLaw Summit 2018 - Blockchain, o futuro da economia P2PRafael Capaci Pereira
 
API PHP para blockchain
API PHP para blockchainAPI PHP para blockchain
API PHP para blockchainFlávio Lisboa
 
TDC2016SP - Trilha Fintech
TDC2016SP - Trilha FintechTDC2016SP - Trilha Fintech
TDC2016SP - Trilha Fintechtdc-globalcode
 
Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015talkitbr
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on GoogleAlvaro Viebrantz
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP worldElton Minetto
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
RAD Studio XE8 - Delphi Tour 2015
RAD Studio XE8 - Delphi Tour 2015RAD Studio XE8 - Delphi Tour 2015
RAD Studio XE8 - Delphi Tour 2015Fernando Rizzato
 
Blockchain e Bitcoin Introdução e Prática com C#
Blockchain e Bitcoin Introdução e Prática com C#Blockchain e Bitcoin Introdução e Prática com C#
Blockchain e Bitcoin Introdução e Prática com C#Alisson Solitto
 

Similar a Workshop de desenvolvimento para blockchain Ethereum (20)

DevBlockOps: Devops em ambientes Blockchain
DevBlockOps: Devops em ambientes BlockchainDevBlockOps: Devops em ambientes Blockchain
DevBlockOps: Devops em ambientes Blockchain
 
TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
TDC 2018 - Boas práticas no desenvolvimento de Smart ContractsTDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts
 
Blockchain - Uma breve explicação
Blockchain - Uma breve explicaçãoBlockchain - Uma breve explicação
Blockchain - Uma breve explicação
 
Blockchain - Uma breve explicação
Blockchain - Uma breve explicaçãoBlockchain - Uma breve explicação
Blockchain - Uma breve explicação
 
Workshop: Ethereum e Smart contracts
Workshop: Ethereum e Smart contractsWorkshop: Ethereum e Smart contracts
Workshop: Ethereum e Smart contracts
 
Blockchain - O Futuro da Economia P2P
Blockchain - O Futuro da Economia P2PBlockchain - O Futuro da Economia P2P
Blockchain - O Futuro da Economia P2P
 
TDC 2017 - Blockchain Para Nós Desenvolvedores
TDC 2017 - Blockchain Para Nós DesenvolvedoresTDC 2017 - Blockchain Para Nós Desenvolvedores
TDC 2017 - Blockchain Para Nós Desenvolvedores
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
TechLaw Summit 2018 - Blockchain, o futuro da economia P2P
TechLaw Summit 2018 - Blockchain, o futuro da economia P2PTechLaw Summit 2018 - Blockchain, o futuro da economia P2P
TechLaw Summit 2018 - Blockchain, o futuro da economia P2P
 
API PHP para blockchain
API PHP para blockchainAPI PHP para blockchain
API PHP para blockchain
 
TDC2016SP - Trilha Fintech
TDC2016SP - Trilha FintechTDC2016SP - Trilha Fintech
TDC2016SP - Trilha Fintech
 
Threads 09: Paralelismo
Threads 09: ParalelismoThreads 09: Paralelismo
Threads 09: Paralelismo
 
Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015Live Tiles e Background Executions - TDC SP 2015
Live Tiles e Background Executions - TDC SP 2015
 
Codelab - Actions on Google
Codelab - Actions on GoogleCodelab - Actions on Google
Codelab - Actions on Google
 
12 factor in the PHP world
12 factor in the PHP world12 factor in the PHP world
12 factor in the PHP world
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
RAD Studio XE8 - Delphi Tour 2015
RAD Studio XE8 - Delphi Tour 2015RAD Studio XE8 - Delphi Tour 2015
RAD Studio XE8 - Delphi Tour 2015
 
Blockchain e Bitcoin Introdução e Prática com C#
Blockchain e Bitcoin Introdução e Prática com C#Blockchain e Bitcoin Introdução e Prática com C#
Blockchain e Bitcoin Introdução e Prática com C#
 

Workshop de desenvolvimento para blockchain Ethereum

  • 1. Desenvolvendo aplicações reais para Blockchain Ethereum Edilson Osorio Junior OriginalMy.com Fev/2017
  • 2. 2 Agenda Tópicos que serão abordados durante o workshop Interação Infraestrutura Desenvolvimento Segurança Interação entre Smart-Contracts Aplicações modulares e descentralizadas, conversando entre si Avançando no desenvolvimento Detalhes técnicos avançados, com técnicas, abordagens e desenvolvimento para blockchains Aplicações Standalone sem Infraestrutura Como conectar sua aplicação diretamente no blockchain Aspectos de segurança Controle de acesso, redução de custos e como o blockchain trata seu código
  • 4. 4 Problemas (!?) do Jogo O que falta em Pokémon Go? Não é possível trocar Pokémons e outros itens por coisas de interesse ou Pokecoins Trocar Pokémons O jogo não permite que os usuários coloquem seus artigos a venda Vender artigos e PokémonsMercado Pokémon
  • 5. 5 O Blockchain em Pokémon Go Segurança - Transparência - Contabilidade Lançamento de Pokémons Permite o controle de quantos pokémons são disponibilizados e para quem Emissão de (cripto)moeda Utiliza uma moeda própria (pokecoin) para as transações de compra e venda Mercado Global interno e secundário Permite a compra e venda de pokémons em um marketplace dedicado ou através de aplicativos Reduz problemas com infraestrutura Infraestrutura utilizada seja distribuída e descentralizada, desafogando o tráfego em nós dedicados
  • 6. 6 Aplicações modulares e descentralizadas Aplicações monolíticas? Esqueça isso. São o insumo da plataforma Emissão de Pokecoins Cada pokémon, com seus atributos exclusivos Pokémons Cada treinador é identificado, junto com seu catálogo de pokémons Treinadores Local onde você compra e vende os bichinhos virtuais Mercado Pokémon Garante que cada transação aconteceu com transparência, imutabilidade e rastreabilidade Blockchain
  • 7. 7 Aplicações Standalone P2P sem possibilidade de bloqueio Dependendo do seu modelo de negócio, a sua aplicação não precisa de infraestrutura além da que o blockchain proporciona. Aplicações que funcionam sozinhas Economia com infraestrutura e fornecimento de API's HMTL, Javascript, CSS, Bootstrap, Angular Acompanhe todas as transações Alcance global sem intermediários Pode ajudar pequenos negócios $$ Toda a comunicação intra-software acontece diretamente no blockchain e pode ser criptografada Acesso em nível global, sem risco de DoS ou ataques de negação A sua aplicação pode depender apenas de um html ou uma aplicação mobile compartilhada no P2P
  • 8. Vamos falar de programação? 15 dicas de desenvolvimento
  • 9. Structs e Mappings 9 Sempre que possível acompanhe um Struct com um Mapping como índice struct PokemonMaster { address pokeMaster; uint[] pokemons; } mapping (address => uint256) public pokeOwnerIndex;
  • 10. Structs ou Mappings 10 É possível fazer um mapping de um struct. Ex.: mapping(address => PokemonMaster) public pokemons Struct permite alterar apenas um item do registro (array) Mapping tem que recarregar o array inteiro para substituir um item
  • 11. Arrays 11 O Blockchain NUNCA apaga uma informação, nem quando você manda excluir um item de um array array[] = [ 1, 2, 3, 4 ] delete array[3]; array[] = [ 1, 2, 0, 4 ] Possíveis soluções: reorganizar o array a custo de gas ou inserir novos dados no gap (0)
  • 12. Índices de índices podem ser um problema 12 Criar índices de índices muitas vezes não funciona pois o primeiro item sempre é zero, e o blockchain substitui itens de array por zero quando excluídos. Então algumas vezes é necessário gravar algum dado descartável no primeiro item e administrar o array a partir do item 1
  • 13. Arrays 13 A função array.push nem sempre é a melhor alternativa array[] = [ 1, 2, 3, 4 ] array.push(5); array[] = [ 1, 2, 3, 4, 0, 5 ] Como contornar? uint arrayLength = array.length++; array[arrayLength] = novoItem;
  • 14. Interação entre contratos 14 Prototipe no cabeçalho as funções dos outros contratos que você deseja chamar contract pokeCoinContract { mapping (address => uint256) public balanceOf; function transferFrom(address _from, address _to, uint256 _value){ } }; contract pokeCentralContract { mapping (uint256 => address) public pokemonToMaster; function transferPokemon(address _from, address _to, uint256 _pokemonID) { } };
  • 15. Interação entre contratos 15 Na área pública do contrato você prototipa as variáveis pokeCoinContract public pokeCoin; pokeCentralContract public pokeCentral; E em uma chamada você aponta os endereços dos contratos function pokeMarket(pokeCoinContract pokeCoinAddress, pokeCentralContract pokeCentralAddress) { pokeCoin = pokeCoinContract(pokeCoinAddress); pokeCentral = pokeCentralContract(pokeCentralAddress); }
  • 16. Modifiers 16 Funções que adicionam funcionalidades a outra função modifier onlyOwner { if (msg.sender != owner) throw; _; } function stopSale(address pokeSellerAddress, uint pokemonID) onlyOwner {
  • 17. Oculte tudo aquilo que não é público 17 Se não é necessário que a variável seja pública, não a torne pública O mesmo serve para funções function cleanArray(uint[] pokeList) onlyOwner internal returns (uint[]) { function addPokemonToSellingList(uint pokemonID) onlyOwner internal {
  • 18. Eventos de Log as vezes são úteis 18 event Log1(uint number); event Log2(string message);
  • 19. Envio de transações 19 Sempre que possível determine a quantidade de gas e o preço pokeMarket.newSale('0x'+accountAddress, pokeIDSell, pokePriceSell, {value: 0, gas: 290654, gasPrice: 20000000000} Utilize o Mist ou Browser Solidity para calcular o gasto médio de gas
  • 20. Mensagens de erro nem sempre ajudam 20
  • 21. Browser Solidity 21 Muito bom para depurar transações Mostra o custo da transação em gas Conecta e lança contratos no blockchain Não mostra conteúdo de array
  • 22. Browser Solidity 22 Lento para contratos extensos Ruim para trabalhar com múltiplos contratos simult. Precisa rodar localmente para conectar no seu node https://ethereum.github.io/browser-solidity/
  • 23. Controle e acesso central ou por wallet 23 Depende do seu modelo de negócio
  • 24. Controle de acesso sempre 24 contract accessControlled { address public owner; function owned() { owner = msg.sender; } modifier onlyOwner { if (msg.sender != owner) throw; /* o caracter "_" é substituído pelo corpo da funcao onde o modifier é utilizado */ _ } function transferOwnership(address newOwner) onlyOwner { owner = newOwner; } } contract pokeMarket is accessControlled { if (pokeBuyerAddress == pokeCentral.pokemonToMaster(pokemonID)) throw;
  • 25. Crie whitelists e/ou blacklists 25 mapping (address => bool) public frozenAccount; /* Token Rules */ function freezeAccount(address target, bool freeze) onlyOwner { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { // In case of whitelist instead of blacklist, change all frozen/freeze to approve if (frozenAccount[msg.sender]) throw; * contribuição com o Ethereum
  • 26. 26 Não esqueça Blockchain serve para muita coisa, mas não serve para tudo 1 Aplicações com volumes muito grandes de transações podem gerar alto custo. Registros complexos também aumentam o preço 2 Tudo que você registrar no Blockchain se torna público 3 Criar aplicações para blockchain precisa de um novo mindset 4 Abuse dos controles de segurança e pesquise sempre
  • 27. 27 Revisando o Workshop Com os códigos e a plataforma apresentada você aprendeu a fazer: Modelos de negócio criativos Dependem unicamente da sua capacidade de materializar ideias Criar uma moeda própria Essa moeda pode ser usada livremente, dentro ou fora da sua aplicação Criar ativos únicos Ativos únicos e exclusivos (ou não) para a sua plataforma Criar um marketplace/exchange Você aprendeu a criar um ambiente real para a livre negociação dos seus ativos. Criar e administrar contas/wallets Como criar, identificar e administrar seus usuários através de contas no blockchain Programação avançada no Ethereum De um html standalone a diversas abordagens avançadas para desenvolver uma aplicação descentralizada muito melhor Redução de custos Você aprendeu formas de analisar os custos de desenvolvimento e infraestrutura com blockchain, além de como otimizá-los
  • 28. Onde eu encontro os códigos e exemplos apresentados? https://github.com/eddieoz truffle-mercado-pokemon Licença MIT
  • 29. A transfer of trust in a trustless world Workshop Ethereum Básico para Desenvolvedores Fev/2017 Edilson Osorio Junior originalmy.com osoriojr@originalmy.com @eddieoz fb.com/osoriojr github.com/eddieoz