workshop de desenvolvimento para blockchain ethereum

Post on 11-Jan-2017

84 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Desenvolvendo aplicações reais para Blockchain Ethereum

Edilson Osorio Junior OriginalMy.com

Fev/2017

2

AgendaTópicos que serão abordados durante o workshop

Interação Infraestrutura Desenvolvimento Segurança

Interação entre Smart-ContractsAplicações modulares e descentralizadas, conversando entre si

Avançando no desenvolvimentoDetalhes técnicos avançados, com técnicas, abordagens e desenvolvimento para blockchains

Aplicações Standalone sem InfraestruturaComo conectar sua aplicação diretamente no blockchain

Aspectos de segurançaControle de acesso, redução de custos e como o blockchain trata seu código

4Problemas (!?) do JogoO 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émons

Mercado Pokémon

5

O Blockchain em Pokémon GoSeguranç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árioPermite 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 descentralizadasAplicações monolíticas? Esqueça isso.

São o insumo da plataformaEmissã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 StandaloneP2P 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 criptografadaAcesso 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 Mappings9

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 Mappings10

É 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

Arrays11

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 problema12

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

Arrays13

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 contratos14

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 contratos15

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); }

Modifiers16

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úblico17

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 úteis18

event Log1(uint number); event Log2(string message);

Envio de transações19

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 ajudam20

Browser Solidity21

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 Solidity22

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 wallet23

Depende do seu modelo de negócio

Controle de acesso sempre24

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 blacklists25

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çaBlockchain 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 WorkshopCom 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 únicosAtivos únicos e exclusivos (ou

não) para a sua plataforma

Criar um marketplace/exchangeVocê 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

top related