$30 off During Our Annual Pro Sale. View Details »

Blockchain com JavaScript

Beto Muniz
November 24, 2018

Blockchain com JavaScript

Apresentação com exemplos, benefícios e possibilidades da utilização de Blockchain com JavaScript em aplicações reais.

Beto Muniz

November 24, 2018
Tweet

More Decks by Beto Muniz

Other Decks in Technology

Transcript

  1. Blockchain
    com
    JavaScript

    View Slide

  2. Sou Beto Muniz
    @obetomuniz

    View Slide

  3. Sou Beto Muniz
    @obetomuniz
    minasdev.org

    View Slide

  4. Sou Beto Muniz
    @obetomuniz
    https://developers.google.com/experts/people/beto-muniz

    View Slide

  5. View Slide

  6. import SHA256 from "js-sha256"
    class Block {
    constructor(index, data, previousHash) {
    this.index = index
    this.timestamp = new Date()
    this.data = data
    this.previousHash = previousHash
    this.hash = this.calcHash()
    }
    calcHash() {
    const sha = SHA256.create()
    sha.update(`${this.index}${this.timestamp}${this.data}${this.previousHash}`)
    return sha.hex()
    }
    static generator(block = { index: 0, hash: "0" }, data = "genesis") {
    return new Block(block.index, data, block.hash)
    }
    }
    https://github.com/openblockchains/awesome-blockchains/blob/master/blockchain.js/blockchain.js

    View Slide

  7. View Slide

  8. View Slide

  9. Blockchain
    “Cadeia de Blocos”

    View Slide

  10. História
    do Blockchain

    View Slide

  11. 2008
    O conceito é publicado por Satoshi Nakamoto

    View Slide

  12. 2009
    Começa a blockchain Bitcoin

    View Slide

  13. 2014
    Surge o termo “Blockchain 2.0”

    View Slide

  14. 2015
    Surge a blockchain Ethereum
    Criada por Vitalik Buterin

    View Slide

  15. 2016
    +1 bilhão de dólares investidos
    https://www.businessinsider.com/blockchain-technology-is-already-a-1-billion-dollar-industry-and-its-just-the-beginning-2016-6

    View Slide

  16. 2018
    +1600 criptomoedas
    +500 bilhões de reais de valor de mercado
    +2000 aplicações descentralizadas na Ethereum
    https://en.wikipedia.org/wiki/List_of_cryptocurrencies https://coinmarketcap.com | https://www.stateofthedapps.com

    View Slide

  17. 2019
    ???

    View Slide

  18. Conceito
    Blockchain

    View Slide

  19. É um banco de dados distribuído com
    uma lista (chain) de registros (blocks)
    interligados e seguros (linked hashes)

    View Slide

  20. Linked
    Hashes?!

    View Slide

  21. Crypto
    Hashes.

    View Slide

  22. E
    como funciona?

    View Slide

  23. Hashing
    Criptografia
    P2P Network
    Nodes
    Assinaturas Digitais
    Proof of Steak
    Proof of Authority
    Turing Completude
    InterPlanetary File System
    Consensus Protocols
    Delegated Proof of Stake
    Byzantine Fault Tolerance
    Proof of Work
    Smart Contracts
    Sidechains
    Tokens
    ÐApps
    Consortium blockchains

    View Slide

  24. View Slide

  25. Mas então como
    aprender Blockchain?

    View Slide

  26. View Slide

  27. A natureza da conceito
    blockchain não é linear
    E na prática…

    View Slide

  28. Composição
    de conceitos

    View Slide

  29. View Slide

  30. Bitcoin
    blockchain
    Hashing
    Criptografia
    P2P Network
    Nodes
    Moeda Digital
    Proof of Work
    Imutabilidade

    View Slide

  31. Ethereum
    blockchain
    Smart Contracts
    Criptografia
    ÐApps
    Turing Completude
    Tokens
    Proof of Steak
    Imutabilidade

    View Slide

  32. Blockchain NÃO é o Bitcoin

    Bitcoin É um caso de uso do conceito blockchain

    View Slide

  33. BlockchainS
    “CadeiaS de Blocos”

    View Slide

  34. https://votolegal.com.br
    Justiça Eleitoral

    View Slide

  35. https://www.techrepublic.com/article/ibm-taps-blockchain-to-combat-food-contamination-in-global-supply-chain
    Logística

    View Slide

  36. https://www.techrepublic.com/article/why-blockchain-could-be-your-next-form-of-id-as-a-world-citizen
    Crises Humanitárias

    View Slide

  37. https://techcrunch.com/2017/04/26/spotify-acquires-blockchain-startup-mediachain-to-solve-musics-attribution-problem
    Música e Streaming

    View Slide

  38. https://www.criptomoedasfacil.com/odebrechet-cria-ferramenta-blockchain-para-monitorar-licitacoes-em-acordo-com-o-ministerio-publico-federal
    Anti-Corrupção Política

    View Slide

  39. https://www.bndes.gov.br/wps/portal/site/home/imprensa/noticias/conteudo/bndes-lanca-consulta-publica-em-busca-de-componentes-blockchain-para-o-bndestoken
    Gestão Pública

    View Slide

  40. https://www.iota.org/get-started/what-is-iota
    Internet das Coisas

    View Slide

  41. View Slide

  42. Transparência de dados
    Governança Descentralizada
    Performance
    Segurança
    Privacidade*
    Rastreabilidade de Informação
    Imutabilidade
    Escalabilidade
    Tokenização
    Aplicabilidade

    Open Source
    Comunidade
    Baixo Custo

    View Slide

  43. Como
    Aplicar?!

    View Slide

  44. JavaScript

    View Slide

  45. História
    do JavaScript

    View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. JAVASCRIPT
    EVERYWHERE

    View Slide

  53. Aplicações Mobile Nativas
    Browser
    Aplicações para SmartTVs
    Banco de Dados
    Aplicações de Linha de Comando
    Aplicações Desktop
    Sistemas Operacionais
    Blockchain
    Servidor
    Games*
    Progressive Web Apps
    Internet das Coisas

    View Slide

  54. Utilizada por grandes empresas
    Ecossistema vasto
    Multiparadigma
    Gerada para um mundo conectado
    Fácil de iniciar os estudos
    Mercado abundante e generoso
    Melhoria contínua
    Comunidade vibrante e ativa

    Auxilia no aprendizado de outras linguagens
    Linguagem mais popular do mundo

    View Slide

  55. 2019
    2020, 2021, …

    View Slide

  56. View Slide

  57. JavaScript
    +

    Blockchain

    View Slide

  58. Ethereum
    “com” JavaScript
    https://www.ethereum.org

    View Slide

  59. Smart Contracts
    https://www.ethereum.org

    View Slide

  60. https://www.ethereum.org/token
    pragma solidity ^0.4.20;
    contract HubConToken {
    mapping (address => uint256) public balanceOf;
    function HubConToken(uint256 initialSupply) public {
    balanceOf[msg.sender] = initialSupply;
    }
    function transfer(address _to, uint256 _value) public returns (bool success) {
    require(balanceOf[msg.sender] >= _value);
    require(balanceOf[_to] + _value >= balanceOf[_to]);
    balanceOf[msg.sender] -= _value;
    balanceOf[_to] += _value;
    return true;
    }
    }

    View Slide

  61. https://github.com/s-tikhomirov/smart-contract-languages
    Vyper
    Solidity
    LLL - Lisp*
    Ethereum bytecode
    Bamboo
    eWASM - WebAssembly*
    Serpent - Python*
    SolidityX
    Pyramid
    Flint
    Yul
    Babbage
    Mutan - C*
    Idris
    Lolisa
    L4
    Formality
    Logikon

    View Slide

  62. ÐApps
    Aplicações Descentralizadas
    https://www.ethereum.org

    View Slide

  63. Centralizadas
    Ponto de Falha Único
    https://www.ethereum.org

    View Slide

  64. Distribuídas
    Micro Services
    Centralizadas
    Ponto de Falha Único
    https://www.ethereum.org

    View Slide

  65. Distribuídas
    Micro Services
    Descentralizadas
    Blockchains
    Centralizadas
    Ponto de Falha Único
    https://www.ethereum.org

    View Slide

  66. web3.js
    Ethereum JavaScript API
    https://github.com/ethereum/web3.js

    View Slide

  67. import web3 from "web3"
    const ORIGEM = “0xf4e36a1c193e687b459f22d3512dd0cfec289fd3"
    const DESTINO = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe611"
    const HubConTokenSmartContract = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe610"
    const HubConTokenABIObject = { ... }
    const SmartContract = await new web3.eth.Contract(
    HubConTokenABIObject,
    HubConTokenSmartContract
    )
    SmartContract.methods.transfer(DESTINO, 1).send({ from: ORIGEM })

    View Slide

  68. import web3 from "web3"
    const ORIGEM = “0xf4e36a1c193e687b459f22d3512dd0cfec289fd3"
    const DESTINO = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe611"
    const HubConTokenSmartContract = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe610"
    const HubConTokenABIObject = { ... }
    const SmartContract = await new web3.eth.Contract(
    HubConTokenABIObject,
    HubConTokenSmartContract
    )
    SmartContract.methods.transfer(DESTINO, 1).send({ from: ORIGEM })

    View Slide

  69. import web3 from "web3"
    const ORIGEM = “0xf4e36a1c193e687b459f22d3512dd0cfec289fd3"
    const DESTINO = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe611"
    const HubConTokenSmartContract = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe610"
    const HubConTokenABIObject = { ... }
    const SmartContract = await new web3.eth.Contract(
    HubConTokenABIObject,
    HubConTokenSmartContract
    )
    SmartContract.methods.transfer(DESTINO, 1).send({ from: ORIGEM })

    View Slide

  70. import web3 from "web3"
    const ORIGEM = “0xf4e36a1c193e687b459f22d3512dd0cfec289fd3"
    const DESTINO = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe611"
    const HubConTokenSmartContract = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe610"
    const HubConTokenABIObject = { ... }
    const SmartContract = await new web3.eth.Contract(
    HubConTokenABIObject,
    HubConTokenSmartContract
    )
    SmartContract.methods.transfer(DESTINO, 1).send({ from: ORIGEM })

    View Slide

  71. import web3 from "web3"
    const ORIGEM = “0xf4e36a1c193e687b459f22d3512dd0cfec289fd3"
    const DESTINO = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe611"
    const HubConTokenSmartContract = "0xcc16e3c00dbbe76603fa833ec20a48f786dfe610"
    const HubConTokenABIObject = { ... }
    const SmartContract = await new web3.eth.Contract(
    HubConTokenABIObject,
    HubConTokenSmartContract
    )
    SmartContract.methods.transfer(DESTINO, 1).send({ from: ORIGEM })

    View Slide

  72. View Slide

  73. Ark
    com JavaScript
    https://ark.io

    View Slide

  74. https://ark.io
    Ark
    com JavaScript, PHP, Swift, Go, .NET, Python, Java, …

    View Slide

  75. ark-js
    Ark Blockchain Client
    https://github.com/ArkEcosystem/ark-js

    View Slide

  76. https://marketplace.arkaces.com/dashboard

    View Slide

  77. Hyperledger
    com JavaScript
    https://www.hyperledger.org

    View Slide

  78. Chaincode
    https://www.hyperledger.org

    View Slide

  79. import shim from "fabric-shim";
    class Chaincode {
    Init(stub) {
    return stub
    .putState("chave", Buffer.from("valor"))
    .then(() => shim.success(), () => shim.error());
    }
    Invoke(stub) {
    return stub.getState("chave").then(() => shim.success());
    }
    };
    shim.start(new Chaincode());

    View Slide

  80. import shim from "fabric-shim";
    class Chaincode {
    Init(stub) {
    return stub
    .putState("chave", Buffer.from("valor"))
    .then(() => shim.success(), () => shim.error());
    }
    Invoke(stub) {
    return stub.getState("chave").then(() => shim.success());
    }
    };
    shim.start(new Chaincode());

    View Slide

  81. Lisk
    100% JavaScript

    View Slide

  82. https://blog.github.com/2018-11-15-state-of-the-octoverse-top-programming-languages | https://insights.stackoverflow.com/survey/2018

    View Slide

  83. Sidechain

    View Slide

  84. const lisk = require('lisk-elements').default;
    const client = lisk.APIClient.createTestnetAPIClient();
    const tx = lisk.transaction.transfer({
    recipientId: "YOUR LISK ID",
    passphrase: "YOUR PASSPHRASE HERE",
    amount: "1",
    data: "Hello World"
    });
    try {
    client.transactions.broadcast(tx);
    } catch(err) {
    console.log(err.message);
    }
    å
    https://lisk.io/documentation/lisk-elements/packages/api-client

    View Slide

  85. const lisk = require('lisk-elements').default;
    const client = lisk.APIClient.createTestnetAPIClient();
    client.dapps.get({ name: 'LiskKitties' })
    .then(res => {
    console.log(res.data);
    })
    https://lisk.io/documentation/lisk-elements/packages/api-client

    View Slide

  86. View Slide

  87. View Slide

  88. Obrigado!
    @obetomuniz

    View Slide