Workshop de desenvolvimento para blockchain Ethereum

81 visualizações

Publicada em

Este workshop utiliza o Mercado Pokémon como plataforma de exemplo, utilizando blockchain para:
- Criar uma criptomoeda
- Criar ativos digitais únicos e exclusivos
- Apresentar uma plataforma de trade e negociação de ativos

Além disso é possível criar uma aplicação totalmente standalone, distribuída no P2P, se conectando diretamente no blockchain para utilizá-lo como infraestrutura distribuída e descentralizada.

O workshop também apresenta 15 dicas avançadas de desenvolvimento.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
81
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Workshop de desenvolvimento para blockchain Ethereum

  1. 1. Desenvolvendo aplicações reais para Blockchain Ethereum Edilson Osorio Junior OriginalMy.com Nov/2016
  2. 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
  3. 3. 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
  4. 4. 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
  5. 5. 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
  6. 6. 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
  7. 7. Vamos falar de programação? 15 dicas de desenvolvimento
  8. 8. 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;
  9. 9. 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
  10. 10. 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)
  11. 11. Í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
  12. 12. 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;
  13. 13. 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) { } };
  14. 14. 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); }
  15. 15. 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 {
  16. 16. 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 {
  17. 17. Eventos de Log as vezes são úteis 18 event Log1(uint number); event Log2(string message);
  18. 18. 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
  19. 19. Mensagens de erro nem sempre ajudam 20
  20. 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
  21. 21. 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/
  22. 22. Controle e acesso central ou por wallet 23 Depende do seu modelo de negócio
  23. 23. 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;
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. Onde eu encontro os códigos e exemplos apresentados? https://github.com/eddieoz truffle-mercado-pokemon Licença MIT
  28. 28. A transfer of trust in a trustless world Hackathon Aceleradora Cotidiano Nov/2016 Edilson Osorio Junior originalmy.com osoriojr@originalmy.com @eddieoz fb.com/osoriojr github.com/eddieoz

×