Successfully reported this slideshow.
Your SlideShare is downloading. ×

Blockchain, Ethereum and Business Applications

Ad

Blockchain, Ethereum and
Business Applications
@ZimMatthias Matthias Zimmermann
BSI Business Systems Integration AG

Ad

Crypto Currencies Market

Ad

Bitcoin

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Check these out next

1 of 61 Ad
1 of 61 Ad

Blockchain, Ethereum and Business Applications

Download to read offline

Hands-on introduction to blockchain technologies.

First, basic concepts as peer-to-peer networks, mining and distributed consens are introduced basd on the Bitcoin protocol. Next smart contracts are discussed for the Ethereum protocol and demonstrated using a local/private blockchain.

The session concludes with a live demo of the interaction of a Java based classical business application with a smart contract running in the Ethereum network.

The goal of the session is to provide a meaningful background of blockchain technologies in genral and to enable developers to start exploring Ethereum and smart contracts within a few hours.

The proposed development setup is oriented towards Java developers and contains Docker images for the Geth and TestRPC Ethereum clients that can be run locally. To access Ethereum from Java the web3j Java library is used. The business application that integrates with the smart contracts is built with the Eclipse Scout framework.

Slides have been created by @ZimMatthias for the JUG Switzerland session on May 22, 2017 https://www.jug.ch/html/events/2017/blockchain_ethereum.html

Hands-on introduction to blockchain technologies.

First, basic concepts as peer-to-peer networks, mining and distributed consens are introduced basd on the Bitcoin protocol. Next smart contracts are discussed for the Ethereum protocol and demonstrated using a local/private blockchain.

The session concludes with a live demo of the interaction of a Java based classical business application with a smart contract running in the Ethereum network.

The goal of the session is to provide a meaningful background of blockchain technologies in genral and to enable developers to start exploring Ethereum and smart contracts within a few hours.

The proposed development setup is oriented towards Java developers and contains Docker images for the Geth and TestRPC Ethereum clients that can be run locally. To access Ethereum from Java the web3j Java library is used. The business application that integrates with the smart contracts is built with the Eclipse Scout framework.

Slides have been created by @ZimMatthias for the JUG Switzerland session on May 22, 2017 https://www.jug.ch/html/events/2017/blockchain_ethereum.html

Advertisement
Advertisement

More Related Content

Slideshows for you (19)

Advertisement

Similar to Blockchain, Ethereum and Business Applications (20)

Advertisement

Blockchain, Ethereum and Business Applications

  1. 1. Blockchain, Ethereum and Business Applications @ZimMatthias Matthias Zimmermann BSI Business Systems Integration AG
  2. 2. Crypto Currencies Market
  3. 3. Bitcoin
  4. 4. First decentralized digital currency • By «Satoshi Nakamoto» • White Paper 2008 • Open Source Software 2009
  5. 5. Coffee at Bob‘s Address Amount [B] Name Recipient 1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA 0.015 Bob's Café Source: «Mastering Bitcoin», Andreas M. Antonopoulos
  6. 6. Addresses corresponds to «Accounts» Encoded Numbers  Example: 1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA  Derived from a private Key  Private key is 256-Bit random number Getting, using and loosing Accounts  Create your account with «Coin, Paper and Pencil»  No ID required, no showing up at local branch, …  To send Bitcoins you need your private Key  You loose your private key  you loose your money What is a Bitcoin Address?
  7. 7.  Bitcoin network confirms coffee TX after ~ 10 min.  TX Elements The Coffee Transaction Bob’s Address Coffee Price My Address Link to TX Block Screenshot: blockchain.info Change (back to me) TX Fee Coffee TX
  8. 8.  Block #277316 includes coffee TX  Block Elements Genesis Block TX Blocks and the Blockchain 419 TX (€495,000) Link to revious Block#277316 #277315 #2 #1 Screenshot: blockchain.info Block Hash – do you see the leading zeros?
  9. 9. From Transactions to Blocks (Mining)
  10. 10. 1. New TX are propagatet through Bitcoin peer-to-peer network 2. Bitcoin client verifies new TX and adds it to local «mempool» 3. Client starts to «mine» transactions: − Assemble TX from mempool to block candidate − Starts to solve the block candidate’s crypto challenge − Computes MANY hashes to solve the crypto challenge − Client solving the challenge first, gets block reward and all TX fees 3. Winning client sends the new block to its peers 4. Arrival of new block triggers the next challenge From Transactions to Blocks (Mining) Creation of new Bitcoins
  11. 11. 1.5 x 1018 IGraph: blockchain.info Bitcoin Mining Today  Mining-pools: Include many ASIC computers (PC way too slow)  AntMiner: 10,000x faster than PC, burns 10x more electricity  Energy Costs: # of hashes per KWh is central criteria + cooling(!) Hashing Power over the Years
  12. 12. The Challenge  Mining clients build block candidates independently  Several new blocks might be found at the «same» time  Clients may receive new blocks that are inconsistent  The local copy of the blockchain may have forks The Solution  The «true» blockchain is defined by the highest cumulative PoW (difficulty)  By selecting the greatest-difficulty chain, eventual consensus is achieved  Miner majority vote defines the true chain  Miners «vote» for the true chain by deciding which block/fork to extend Distributed Consensus Mechanism Preventing Forks ? ?
  13. 13. Attacking Bitcoin (any PoW Blockchain) 1. Install more mining capacity than the rest of the world (>= 51%) 2. Censor/suppress unwanted TX 3. Mine a secret branch containing acceptable TX 4. Continue to mine until PoW of secret branch exceeds official branch 5. Broadcast secret branch to Bitcoin network 6. All Bitcoin clients will switch to this new branch Ok, this is kind of hard – but:  Miners earn ~1.2bn/year  HW cost to match Bitcoin mining capacity: ~ $400m (Antminer 9s) «Unhappy with some TX?» The 51% Attack
  14. 14. Current Issues  Increasing TX backlogs  TX confirmation can take hours (instead of 10’)  Increasing TX fees  «War» between Bitcoin Core and Bitcoin Unlimited (Scaling Debate)  Decreasing market share Bitcoin Challenges
  15. 15. Bitcoin Market Share
  16. 16. Bitcoin Price
  17. 17. Bitcoin Success  Completely decentral currency (no need for central banks)  Open Source (GitHub) and Open Data (complete TX history)  First successful implementation of any crypto currency  «Gold Standard» since 2009  Record price levels Bitcoin Challenges  Declining market share  Scaling debate/war Bitcoin Recap
  18. 18. Bitcoin Resources
  19. 19. Ethereum
  20. 20. Decentralized Smart Contracts • 2014 by Vitalik Buterin • Distributed Turing complete VM • Open source software 2014 • Is crypto currency too
  21. 21. Ethereum vs Bitcoin Common Traits  Local clients/nodes with complete blockchain (open data)  Concepts of addresses, transactions, mining  Virtual currency Ether  Open source Main Differences  Specification with different implementations (Bitcoin: single client)  Turing complete scripting (Bitcoin: very limited scripting)
  22. 22.  Ether is currency unit (1 Ether ~ 87$ 17.05.17)  Wei is smallest denomination (10-18 Ether)  TX mining: Proof of Work (PoW)  Distributed consensus like Bitcoin (true chain == highest cumulative PoW) Storing Information  Ethereum clients: Maintain blockchain data + state data  State data: Account balances + nonces  Transaction data: Ether transfers Ethereum as Virtual Currency Platform
  23. 23. Ethereum and App Integration Ethereum Client Geth/TestRPC/… Ethereum Peer-to-Peer Network Interface http://localhost:8545 JSON-RPC JavaScript web3 web3j Java
  24. 24. Ideal Development Setup  Offline, repeatable, fast  Java (this is a JUG talk after all) We can have all this   Docker (repeatable, shareable)  TestRPC (offline + local blockchain /w immediate TX confirmations)  Web3j (Ethereum Java Library) Ethereum Hands-on
  25. 25. TestRPC Docker Image
  26. 26. Running TestRPC container Open shell in container Start node.js
  27. 27. TestRPC initial accounts Get initial balance New balance Send 123456789 Weis
  28. 28.  Java implementation of JSON-RPC client API  A couple of other features  Android support web3j: Ethereum and Java
  29. 29. web3j: Creating and Sending TX
  30. 30. How nonces are used  Each account has a nonce value (account state data)  Accounts start with nonce value 0  TX: includes sender address and its nonce value  TX can only be mined if: − Account has sufficient funds − TX nonce == current account nonce  If TX is mined successfully: Nonce increased by 1 Ethereum Accounts and Nonces
  31. 31. What is gas?  Special unit to pay fees to mining nodes  Gas has price in Ethers (decouples computing costs and Ether price) What fees?  Computations performed by Ethereum Virtual Machine (EVM)  EVM is working as long as there is gas  Example 1: SHA3 computation costs 30 gas  Example 2: EVM always terminates (stays in infinite loop until gas runs out) Ethereum, Gas and TX Fees
  32. 32. Smart Contracts
  33. 33. What is a Smart Contract?  Piece of (byte) code  Is executed by the Ethereum Virtual Machine (EVM)  Has an owner  Has a life cycle  Might have some purpose Examples 1. The DAO 2. Flight delay insurance 3. «Truly» autonomous cars Ethereum Smart Contracts
  34. 34.  Distributed venture capital fund  Amount raised $150,000,000  Largest crowdfunding project  Successfully «attacked» Attack Result: Ethereum hard fork  ETH «true» blockchain  ETC «forked» blockchain The DAO (2016)
  35. 35.  Involves Oraclize service to access flightstats.com Flight Delay App
  36. 36.  Smart contract to ordering vehicle to transport goods/people  Smart contract to pay for energy/services «Truly» Autonomous Cars
  37. 37. Deploying and using Smart Contracts 1. Write contract in high level language (eg. Solidity) 2. Compile contract to EVM byte-code 3. Pack byte code into a contract creation TX and sent to the network 4. The TX gets ist own contract account 5. Contract account has address, balance, nonce and holds byte code 6. Invoke methods using calls (free) or transactions (cost gas) Smart Contracts Life Cycle
  38. 38. «Hello World» (greeter.sol)
  39. 39. greeter.sol ++ - additional state - ‘payable’
  40. 40. Solidity Compiler (online) byte code (EVM) to deploy contract Deploy script (JS)
  41. 41. Deploy (Console) Contract address Successs 
  42. 42. From Solidity to Java Contract Class 1. Compile greeter.sol (e.g using online compiler)  greeter.bin, greeter.abi 2. Create contract wrapper class (use Web3j command line tool)  Greeter.java 1. Use Greeter.java in your Java code web3j: greeter.sol  Greeter.java
  43. 43. Generated Contract Wrapper
  44. 44. Live Cycle in Java
  45. 45. Deployment
  46. 46. Trading-Network Demo Ethereum, web3j, Eclipse Scout
  47. 47. Use Case  Currency Hedging: Buy orders and Sell orders (€ / US$)  Classical Business App − Idendity Management for mapping real persons BC addresses − User Interface  Blockchain Benefits − Efficiency: No central organization/infrastructure − Trust: Tampering-proof ledger, trust by blockchain Trading Network Demo
  48. 48.  Plain Java Application Model  Multi-Device Support  HTML5/CSS3 Rendering Eclipse Scout Business Application Framework
  49. 49. PostgreSQLEthereum Client TestRPC web3 Eclipse Scout Backend web3j JDBC Eclipse Scout UI (web application)
  50. 50. Resources
  51. 51. What next?
  52. 52. Gist  Cool new technology, including much hype   Internet of decentralized trust Blockchain Technology is great for  Efficient value exchange for untrusted environments  Pushes distributed business models  Option for the «unbanked» Current Challenges  Privacy  Scalability  Maturity (blockchain still in ist infancy) Blockchain Summary
  53. 53. Socalizing  Go to talks  Join meetups (Bitcoin Meetup Switzerland, Blockchain Meetup Switzerland, Crypto Valley Forum, …) Increase Context  Youtube, Blogs, Twitter, … Doing  GitHub (web3j/web3j, matthiaszimmermann/web3j_demo, …) Next Steps
  54. 54. «Recipe» 1. Curious about new technologies? Take yourself seriously! 2. Invest some of your time 3. Take advantage of your education options (time, money, …) 4. Building small teams makes it even more fun 5. Create value for your employer (internal, external) 6. Do it! Everybody can do this 
  55. 55. Thanks! @ZimMatthias

Editor's Notes

  • Wieso ist das spannend? weshalb sich das anhören?
    Coole neue technologie
    Thema kräftig am wachsen
    Definitiv nicht nur spinnerei

    https://bitcoinfoundation.org/
    https://www.ethereum.org/foundation
    https://www.hyperledger.org/
    https://www.aegon.com/en/Home/Investors/News-releases/2017/blockchain-initiative-b3i-gains-truly-international-scope/
    http://cryptovalley.swiss/
    https://ww2.frost.com/files/cache/a701d7ea2011161d4eaeed6364153683_f16618.jpg
  • Bei blockchain geht es nicht nur um software und technologie, sondern auch um viel geld


    https://coinmarketcap.com/currencies/ (accessed 8.5.17)
    https://en.wikipedia.org/wiki/List_of_countries_by_GDP_(PPP) (accessed 8.5.17)
  • Starten wir mit Bitcoin
  • tx
    https://blockchain.info/tx/a662f0c533686128770b2604f36ce2015cf68382ede8dbd8f19ef9f8f45c6777
    account
    https://blockchain.info/address/1Mk6LVarnMtf9YtU316NqKQESM44C3Ja1e
  • Bei hashwert für diesen block: vom miner gefundene hashwert. Hashwerte sehen üblicherweise zufällig aus, dass dieser wert mit so viel nullen beginnt ist kein zufall, der wurde vom bitcoin client gefunden, der diesen block gemint hat. Wir werden etwas später noch auf das mining kommen.
  • https://blockchain.info/unconfirmed-transactions
    https://blockchain.info/address/199kWQQSMfUWRaLJ7mVGN6SQjEHegC3gqD
  • http://www.coindesk.com/blockchain-immutability-myth/
    https://shop.bitmain.com/market.htm?name=antminer_s9_asic_bitcoin_miner
  • http://www.coindesk.com/blockchain-immutability-myth/
  • http://www.trustnodes.com/2017/05/16/bitcoins-market-share-falls-below-half-of-all-digital-currencies
    https://blockchain.info/de/charts/mempool-size?timespan=all
    https://github.com/bitcoin/bitcoin
    https://github.com/BitcoinUnlimited/BitcoinUnlimited
  • https://coinmarketcap.com/charts/ (bottom of page)
  • http://www.coindesk.com/price/ (accessed 8.5.17)
    https://blockchain.info/
  • https://github.com/bitcoin/bitcoin
    https://github.com/bitcoinbook/bitcoinbook
  • https://forum.ethereum.org/discussion/304/what-is-wei
    https://ethereum.stackexchange.com/questions/326/what-are-the-pros-and-cons-of-ethereum-balances-vs-utxos
    https://media.consensys.net/technical-introduction-to-events-and-logs-in-ethereum-a074d65dd61e
  • https://github.com/ethereum/wiki/wiki/JSON-RPC
    https://github.com/ethereum/wiki/wiki/JavaScript-API
    https://github.com/web3j/web3j
  • https://github.com/matthiaszimmermann/web3j_demo
  • cd /usr/lib/node_modules/ethereumjs-testrpc/
    node

    var Web3 = require('web3')
    var web3 = new Web3()
    web3.setProvider(new Web3.providers.HttpProvider('http://localhost:8545'))
    web3.eth.coinbase
    web3.fromWei(web3.eth.getBalance(web3.eth.coinbase), "ether")
    web3.eth.accounts
    web3.fromWei(web3.eth.getBalance(web3.eth.accounts[1]), "ether")
    web3.eth.sendTransaction({from: web3.eth.coinbase, to:web3.eth.accounts[1], value: web3.toWei(0.5, "ether")})
    web3.fromWei(web3.eth.getBalance(web3.eth.accounts[1]), "ether")

    https://github.com/matthiaszimmermann/web3j_demo
  • https://docs.web3j.io/
  • https://docs.web3j.io/
  • https://docs.web3j.io/
  • https://ethereum.stackexchange.com/questions/3/what-is-gas-and-transaction-fee-in-ethereum
  • https://blog.daohub.org/ethereum-dao-hard-fork-likely-on-july-20th-9ee8e2c12619
  • https://fdd.etherisc.com/
    http://www.oraclize.it/
    http://www.flightstats.com
  • http://www.trustnodes.com/2017/04/29/germanys-energy-giant-launches-100s-ethereum-based-electric-cars-charging-stations (29.4.17)
    https://www.theverge.com/2017/2/21/14687346/uber-self-driving-car-arizona-pilot-ducey-california (21.2.17)
  • https://ethereum.github.io/browser-solidity/#version=soljson-v0.4.11+commit.68ef5810.js
  • cd /usr/lib/node_modules/ethereumjs-testrpc/
    node

    var Web3 = require('web3')
    var web3 = new Web3()
    web3.setProvider(new Web3.providers.HttpProvider('http://localhost:8545'))

    var _greeting = 'hello world';
    var greeterContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"deposits","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"greet","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"inputs":[{"name":"_greeting","type":"string"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"}]);
    var greeter = greeterContract.new(
    _greeting,
    {
    from: web3.eth.accounts[0],
    data: '0x6060604052341561000c57fe5b604051610407380380610407833981016040528080518201919050505b33600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060029080519060200190610080929190610090565b5060006001819055505b50610135565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106100d157805160ff19168380011785556100ff565b828001600101855582156100ff579182015b828111156100fe5782518255916020019190600101906100e3565b5b50905061010c9190610110565b5090565b61013291905b8082111561012e576000816000905550600101610116565b5090565b90565b6102c3806101446000396000f30060606040523615610055576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063323a5e0b1461006f57806341c0e1b514610095578063cfae3217146100a7575b61006d5b60016001600082825401925050819055505b565b005b341561007757fe5b61007f610140565b6040518082815260200191505060405180910390f35b341561009d57fe5b6100a5610146565b005b34156100af57fe5b6100b76101da565b6040518080602001828103825283818151815260200191508051906020019080838360008314610106575b805182526020831115610106576020820191506020810190506020830392506100e2565b505050905090810190601f1680156101325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60015481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156101d757600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b565b6101e2610283565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102785780601f1061024d57610100808354040283529160200191610278565b820191906000526020600020905b81548152906001019060200180831161025b57829003601f168201915b505050505090505b90565b6020604051908101604052806000815250905600a165627a7a7230582068de189378347d9696c8e6b9ec4ab219cbf7e39fdf00babb6003c0bbea5cec5a0029',
    gas: '4700000'
    }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
    console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
    });

    greeter.address
    greeter.greet()
    greeter.deposits()
    web3.fromWei(web3.eth.getBalance(greeter.address), "ether")
    web3.eth.sendTransaction({from: web3.eth.coinbase, to:greeter.address, value: web3.toWei(0.5, "ether")})
    web3.fromWei(web3.eth.getBalance(greeter.address), "ether")
    greeter.deposits()
  • https://github.com/BSI-Business-Systems-Integration-AG/trading-network/tree/features/matthiaszimmermann/jugch_talk_2017
  • https://www.ethereum.org/
    https://github.com/ethereum/
  • https://github.com/web3j/web3j
  • cd ~/Desktop/oss/events/2017/jug_blockchain_2017
    java DummyBitcoinMiner 1
  • https://poloniex.com/
  • https://blockchain.info/charts/avg-confirmation-time

×