SlideShare uma empresa Scribd logo
BOAS PRÁTICAS NO
DESENVOLVIMENTO DE
SMART CONTRACTS
André Ferreira
Rafael Capaci
Desenvolvedor na JUPTER
Co-organizador do Meetup Blockchain Curitiba
Desenvolvedor na JUPTER
Colaborador da GoBlockchain
Co-organizador do Meetup Blockchain Curitiba
André Ferreira
Rafael Capaci
Create the necessary conditions to FIND, FUND & LAUNCH the Future
OPEN SCIENCE ORIGINATION
Scientific Methods
Tech Based
Businesses
First Principles
Approach
Open Innovation
Open Data & Open
Source
Collaboration Tech
Early Stage Teams
Product Launches
Deal Flow Generation
Blockchain
Banco de dados distribuído que registra todas
as transações e as mantém imutáveis
Ethereum
Plataforma de aplicações descentralizadas que
executa contratos inteligentes em blockchain
DApp
Aplicação frontend
Smart Contract
Regra de Negócio
Ether (gas)
Smart Contract
Smart Contract
● Similar à uma classe, que possui métodos e atributos
● Identificado por um endereço próprio (0x71c20d...9ec0)
● Executa regras contratuais definidas em código
● Escritos em linguagem de alto nível (Solidity ou outras)
● Compilados em bytecode
● A EVM consome gas para executar as operações do contrato
Solidity
Linguagem de programação de tipagem estática
para o desenvolvimento de contratos inteligentes
● Public: podem ser chamadas por funções do próprio contrato, de contratos herdados
ou por usuários externos.
● External: podem ser acessadas somente externamente, não sendo possível ser
chamada pelo próprio contrato.
● Private: podem ser acessadas somente pelo próprio contrato.
● Internal: podem ser acessadas pelo próprio contrato e por contratos herdados.
Visibilidade
Visibilidade
Mantenha suas funções private ou internal,
a menos que haja necessidade de interação externa.
● Memory: utilizada para valores temporários. É apagada entre execuções
distintas e é barata.
● Storage: utilizada para armazenar variáveis de estado do contrato. É mais
cara pois é gravada no blockchain.
Armazenamento de variáveis
Armazenamento de variáveis
Variáveis locais (memory) e de estado (storage) serão sempre
públicas para leitura, mesmo se marcadas como private.
● view: função que não modifica o estado no blockchain
● pure: função que não lê ou modifica o estado no blockchain
● payable: permite que o contrato receba ETH na execução da função
Tipos de funções
Enviando ETH
● transfer() lança erro e para a execução caso haja falta de gas
● send() retorna false e deixa que você trate o erro
Caso usar send(). NÃO ESQUEÇA DE TRATAR O RETORNO!!!
Enviando ETH - transfer() vs. send()
=
Fallback Function
● Aquela que não deve ser nomeada
● Não possui argumentos
● E não retorna nada!
E pra que serve então???
Fallback Function
● É executada quando o contrato recebe ETH
● Ou quando se tenta executar uma função de nome inválido no contrato
Fallback Function
● Sem fallback function, o ETH enviado será rejeitado
● Um fallback executa com 2300 de gas*
○ Gas insuficiente para trabalhar com variáveis em STORAGE
○ Basicamente o que dá pra fazer é emitir um evento, informando que recebeu ETH
Fallback Function
Fallback Function
● Um fallback pode executar com mais gas, caso isso fique explícito
● No caso de um contrato enviar ETH para outro, pode chamar a função
addr.call.value(x)()
○ Dessa forma, o fallback pode fazer operações mais caras
Fallback Function
Boas práticas de
programação
Style Guide
● Indentação: 4 espaços por nível
● Tabs ou Espaços? Espaços
● Tamanho máximo de linha: 79 ou 99 chars
● Estruturas de controle, declaração de funções e variáveis
● Funções modifiers
● Convenções de nomenclatura
● imports no topo do contrato
● Ordem de declaração das funções
Loops
● Blocos possuem um limite de gas para as transações dentro dele
● Tomar cuidado com loops de tamanho variável
● Não se aplica a view e pure functions.
● Porém, quando uma view ou pure function é chamada a partir de uma
transação, ela também consome gas.
Loops
Custo
● O consumo de gas tem impacto direto na estrutura de custos da organização
● Otimize seus contratos
Custo - OPCODE
Manipulação de variáveis da storage
● Corresponde a instrução SSTORE
● 20.000 de gas para guardar novos dados
● 5.000 de gas pra alterar dados *
○ Com exceção de uma alteração que zera um dado (Gas refund)
● Escreva o mínimo possível na storage.
Manipulação de variáveis da storage
Manipulação de variáveis da storage
Custo
Custo
Custo de deploy
107.989 gas 101.819 gas
Custo
● EVM armazena as variáveis em slots de 32 bytes
● Variáveis que ocupam espaço menor são “empacotadas”
Custo
Custo
Criação de contrato
● Evitar usar um contrato para armazenamento de dado somente
Criação de contrato
Criação de contrato
Gas refund
● Operações que alteram o estado da blockchain são caras
○ Ex: Criar contratos, guardar dados em um contrato.
● Para incentivar as pessoas a liberarem espaço que não será mais utilizado, a
EVM implementa o mecanismo de Gas Refund
● Duas operações que reembolsam gas:
○ SUICIDE: This basically kills the smart contract. Doing so will get you back 24000 gas.
○ SSTORE: Storage deletion, which gets you back 15,000.
“Estoque de gas”
Segurança
“Everyone here is a target for attack. Be paranoid.”
Martin Swende (DEVCON3)
Segurança
● Se houver um bug, não é possível atualizar e corrigir o código
● Qualquer erro pode levar a consequências terríveis
● Disneylândia para hackers
○ Baixo esforço, altos retornos e baixo risco
● Todo o ecossistema está amadurecendo em termos de segurança
Restrição de Acesso
Withdraw Pattern
● O contrato não deve enviar Ether durante uma alteração de estado
● Recomendado:
○ Salvar o saldo dos usuários em um mapping (address => uint)
○ Usuário realiza o saque do saldo através de uma função específica
● King of Ether Hack
Withdraw Pattern
Withdraw Pattern
Re-Entrancy
Um contrato (A) pode chamar outro contrato (B) e transferir o controle de Ether
para o contrato (B), possibilitando que (B) chame (A) novamente antes que essa
interação seja concluída.
Isso permite que o contrato (B) possa realizar um loop recursivo, utilizando a
função fallback, por exemplo.
Re-Entrancy
Re-Entrancy
Re-Entrancy
Attack Contract
TheDAO hack
Re-Entrancy
Over/Under Flows
● Tipos de dados de tamanho fixo para inteiros na EVM.
● As variáveis podem ser exploradas para resultar em números fora do
intervalo do tipo de dados que os armazena.
● Um uint8, por exemplo, só pode armazenar números no intervalo [0, 255].
Tentar armazenar 256 em um uint8 resultará em 0.
Over/Under Flows
Over/Under Flows
Safe Math Library
OpenZeppelin
Over/Under Flows
Frameworks / IDEs
Ganache
goo.gl/bGonkq goo.gl/ZXqTvNe goo.gl/dELuzR goo.gl/cp6u9hgoo.gl/gJxR16
Testes
Testes
Testnet
● Testnet é uma rede de testes pública do Ethereum
● É gratuita, porém insegura
● Na testnet:
○ Ethers são fáceis de serem obtidos
○ Ethers não possuem valor como criptomoeda
Faça deploy e teste os seus contratos na testnet
antes de utilizar em produção na mainnet.
Auditoria
SOLIDIFIEDCode Review Zeppelin
● github.com/ethereum/wiki/wiki
● solidity.readthedocs.io
● ethdocs.org
FIND, FUND & LAUNCH
THE FUTURE
Obrigado!
andre@jupter.co
@aferreira44
@aferreira44
@aferreira44
rafael@jupter.co
@capaci
@capacirafael
@rafaelcapaci

Mais conteúdo relacionado

Mais procurados

Ethereum e a Tecnologia Blockchain
Ethereum e a Tecnologia BlockchainEthereum e a Tecnologia Blockchain
Ethereum e a Tecnologia Blockchain
Goldhive
 
Blockchain: a descentralização da confiança e da informação
Blockchain: a descentralização da confiança e da informaçãoBlockchain: a descentralização da confiança e da informação
Blockchain: a descentralização da confiança e da informação
Huge
 
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
 
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
Edilson Osorio Junior
 
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
OriginalMy.com
 
Tecnologias de blockchain
Tecnologias de blockchainTecnologias de blockchain
Tecnologias de blockchain
IRIB
 
Ethereum - Guia Básico:
Ethereum - Guia Básico:Ethereum - Guia Básico:
Ethereum - Guia Básico:
Jefferson Tavares
 
Blockchain: registros eletrônicos distribuídos, imutáveis e seguros
Blockchain: registros eletrônicos distribuídos, imutáveis e segurosBlockchain: registros eletrônicos distribuídos, imutáveis e seguros
Blockchain: registros eletrônicos distribuídos, imutáveis e seguros
Augusto Herrmann Batista
 
Introdução ao Ethereum, Uma Plataforma Blockchain
Introdução ao Ethereum, Uma Plataforma BlockchainIntrodução ao Ethereum, Uma Plataforma Blockchain
Introdução ao Ethereum, Uma Plataforma Blockchain
Renato Guimaraes
 
Blockchain e o Novo Ambiente - Curitiba, Brazil 11/12/2018
Blockchain e o Novo Ambiente - Curitiba, Brazil 11/12/2018Blockchain e o Novo Ambiente - Curitiba, Brazil 11/12/2018
Blockchain e o Novo Ambiente - Curitiba, Brazil 11/12/2018
Pascual Arrechea
 
[DTC21] Thiago Henrique - Microsserviços do Mundo Real
[DTC21] Thiago Henrique - Microsserviços do Mundo Real[DTC21] Thiago Henrique - Microsserviços do Mundo Real
[DTC21] Thiago Henrique - Microsserviços do Mundo Real
Deep Tech Brasil
 
Workshop: Ethereum e Smart contracts
Workshop: Ethereum e Smart contractsWorkshop: Ethereum e Smart contracts
Workshop: Ethereum e Smart contracts
André Ferreira
 
Blockchain - Uma breve explicação
Blockchain - Uma breve explicaçãoBlockchain - Uma breve explicação
Blockchain - Uma breve explicação
Roberto Santacroce Martins
 
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
Walker de Alencar Olivera
 
Steem - Redes Socias em Blockchain
Steem - Redes Socias em BlockchainSteem - Redes Socias em Blockchain
Steem - Redes Socias em Blockchain
Wagner Tamanaha
 
Blockchain: A máquina da confiança
Blockchain: A máquina da confiançaBlockchain: A máquina da confiança
Blockchain: A máquina da confiança
Rafael Sarres de Almeida
 
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
Roberto Santacroce Martins
 
Um Pouco da História Bitcoin:
Um Pouco da História Bitcoin:Um Pouco da História Bitcoin:
Um Pouco da História Bitcoin:
Jefferson Tavares
 
Blockchain, como esse negócio funciona?
Blockchain, como esse negócio funciona?Blockchain, como esse negócio funciona?
Blockchain, como esse negócio funciona?
Rafael Capaci Pereira
 

Mais procurados (20)

Ethereum e a Tecnologia Blockchain
Ethereum e a Tecnologia BlockchainEthereum e a Tecnologia Blockchain
Ethereum e a Tecnologia Blockchain
 
Blockchain: a descentralização da confiança e da informação
Blockchain: a descentralização da confiança e da informaçãoBlockchain: a descentralização da confiança e da informação
Blockchain: a descentralização da confiança e da informação
 
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#
 
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
 
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
 
Tecnologias de blockchain
Tecnologias de blockchainTecnologias de blockchain
Tecnologias de blockchain
 
Ethereum - Guia Básico:
Ethereum - Guia Básico:Ethereum - Guia Básico:
Ethereum - Guia Básico:
 
Blockchain: registros eletrônicos distribuídos, imutáveis e seguros
Blockchain: registros eletrônicos distribuídos, imutáveis e segurosBlockchain: registros eletrônicos distribuídos, imutáveis e seguros
Blockchain: registros eletrônicos distribuídos, imutáveis e seguros
 
Introdução ao Ethereum, Uma Plataforma Blockchain
Introdução ao Ethereum, Uma Plataforma BlockchainIntrodução ao Ethereum, Uma Plataforma Blockchain
Introdução ao Ethereum, Uma Plataforma Blockchain
 
Blockchain e o Novo Ambiente - Curitiba, Brazil 11/12/2018
Blockchain e o Novo Ambiente - Curitiba, Brazil 11/12/2018Blockchain e o Novo Ambiente - Curitiba, Brazil 11/12/2018
Blockchain e o Novo Ambiente - Curitiba, Brazil 11/12/2018
 
[DTC21] Thiago Henrique - Microsserviços do Mundo Real
[DTC21] Thiago Henrique - Microsserviços do Mundo Real[DTC21] Thiago Henrique - Microsserviços do Mundo Real
[DTC21] Thiago Henrique - Microsserviços do Mundo Real
 
Workshop: Ethereum e Smart contracts
Workshop: Ethereum e Smart contractsWorkshop: Ethereum e Smart contracts
Workshop: Ethereum e Smart contracts
 
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
 
Blockchain - Uma breve explicação
Blockchain - Uma breve explicaçãoBlockchain - Uma breve explicação
Blockchain - Uma breve explicação
 
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
 
Steem - Redes Socias em Blockchain
Steem - Redes Socias em BlockchainSteem - Redes Socias em Blockchain
Steem - Redes Socias em Blockchain
 
Blockchain: A máquina da confiança
Blockchain: A máquina da confiançaBlockchain: A máquina da confiança
Blockchain: A máquina da confiança
 
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
 
Um Pouco da História Bitcoin:
Um Pouco da História Bitcoin:Um Pouco da História Bitcoin:
Um Pouco da História Bitcoin:
 
Blockchain, como esse negócio funciona?
Blockchain, como esse negócio funciona?Blockchain, como esse negócio funciona?
Blockchain, como esse negócio funciona?
 

Semelhante a TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts

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
Rafael Capaci Pereira
 
Blockchain além do Hello World
Blockchain além do Hello WorldBlockchain além do Hello World
Blockchain além do Hello World
Henrique Leite
 
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
tdc-globalcode
 
Gerência de Transações Distribuídas de Consultas
Gerência de Transações Distribuídas de ConsultasGerência de Transações Distribuídas de Consultas
Gerência de Transações Distribuídas de Consultas
Wendel Moreira
 
Workshop de desenvolvimento para blockchain Ethereum
Workshop de desenvolvimento para blockchain EthereumWorkshop de desenvolvimento para blockchain Ethereum
Workshop de desenvolvimento para blockchain Ethereum
OriginalMy.com
 
06 it-curso gxxbr
06 it-curso gxxbr06 it-curso gxxbr
06 it-curso gxxbr
Cristiano Rafael Steffens
 
Blockchain - Smart Contracts - Meetup
Blockchain - Smart Contracts - MeetupBlockchain - Smart Contracts - Meetup
Blockchain - Smart Contracts - Meetup
Fábio José Moraes
 
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
Edilson Osorio Junior
 
Ferramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain EthereumFerramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain Ethereum
OriginalMy.com
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao Git
Oto Junior
 
Amazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenho
Amazon Web Services LATAM
 
Banco de Dados 2: Controle de Concorrência
Banco de Dados 2: Controle de ConcorrênciaBanco de Dados 2: Controle de Concorrência
Banco de Dados 2: Controle de Concorrência
Ben Hur Bahia do Nascimento
 
Lista 03 respostas
Lista 03 respostasLista 03 respostas
Lista 03 respostas
Força Tauá
 
Camada rede
Camada redeCamada rede
Camada rede
Jhosafá de Kastro
 
Rethinking main memory oltp recovery
Rethinking main memory oltp recoveryRethinking main memory oltp recovery
Rethinking main memory oltp recovery
Lucas Vinícius
 
Monolith - An epic journey
Monolith - An epic journeyMonolith - An epic journey
Monolith - An epic journey
Fabricio Goncalves
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com Git
Vagner Santana
 
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
Jeff Prestes
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
Rodrigo Long Chen Kashiwakura
 
dnad12
dnad12dnad12
dnad12
Juan Lopes
 

Semelhante a TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts (20)

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
 
Blockchain além do Hello World
Blockchain além do Hello WorldBlockchain além do Hello World
Blockchain além do Hello World
 
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Blockchain How we figured out we had a SRE team ...
 
Gerência de Transações Distribuídas de Consultas
Gerência de Transações Distribuídas de ConsultasGerência de Transações Distribuídas de Consultas
Gerência de Transações Distribuídas de Consultas
 
Workshop de desenvolvimento para blockchain Ethereum
Workshop de desenvolvimento para blockchain EthereumWorkshop de desenvolvimento para blockchain Ethereum
Workshop de desenvolvimento para blockchain Ethereum
 
06 it-curso gxxbr
06 it-curso gxxbr06 it-curso gxxbr
06 it-curso gxxbr
 
Blockchain - Smart Contracts - Meetup
Blockchain - Smart Contracts - MeetupBlockchain - Smart Contracts - Meetup
Blockchain - Smart Contracts - Meetup
 
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
 
Ferramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain EthereumFerramentas para desenvolvimento no blockchain Ethereum
Ferramentas para desenvolvimento no blockchain Ethereum
 
Introdução ao Git
Introdução ao GitIntrodução ao Git
Introdução ao Git
 
Amazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenhoAmazon EC2 boas praticas e otimizações de desempenho
Amazon EC2 boas praticas e otimizações de desempenho
 
Banco de Dados 2: Controle de Concorrência
Banco de Dados 2: Controle de ConcorrênciaBanco de Dados 2: Controle de Concorrência
Banco de Dados 2: Controle de Concorrência
 
Lista 03 respostas
Lista 03 respostasLista 03 respostas
Lista 03 respostas
 
Camada rede
Camada redeCamada rede
Camada rede
 
Rethinking main memory oltp recovery
Rethinking main memory oltp recoveryRethinking main memory oltp recovery
Rethinking main memory oltp recovery
 
Monolith - An epic journey
Monolith - An epic journeyMonolith - An epic journey
Monolith - An epic journey
 
Controle de Versões com Git
Controle de Versões com GitControle de Versões com Git
Controle de Versões com Git
 
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
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
dnad12
dnad12dnad12
dnad12
 

TDC 2018 - Boas práticas no desenvolvimento de Smart Contracts