Slide 1

Slide 1 text

Hyperledger Fabric Open-Source Basis für Ihre Blockchain Ingo Rammer [email protected] 10. – 13.12.2018 Frankfurt am Main #ittage Hyperledger Fabric Ingo Rammer Die Open-Source Basis für Ihre Blockchain

Slide 2

Slide 2 text

Ingo Rammer Gründer und Geschäftsführer der Thinktecture AG, einem technischen Beratungsunternehmen für Software-Architekten und –Entwickler Mein persönlicher Fokus: Blockchain Technologien für B2B-Verwendung, von den Tiefen der Technologie bis hin zu ISO TC 307, Enterprise Ethereum Alliance und Hyperledger Foundation Slides: https://thinktecture.com/presentations Kontakt: [email protected] Twitter: @ingorammer

Slide 3

Slide 3 text

• Wozu das Ganze? Warum private Blockchains? • Was ist Hyperledger, was ist Fabric? • Bausteine eines Fabric-Netzwerks • Transaktionsbehandlung in Fabric • Chaincode Grundlagen – Smart Contracts in Fabric • Client SDK Grundlagen Agenda

Slide 4

Slide 4 text

• Gegenseitiges Vertrauen im B2B-Bereich grundsätzlich vorhanden (und vom jeweiligen Rechtssystem gedeckt) • Digitalisierung von analogen Papierprozessen über Firmengrenzen • Single Source of Truth – bei Prozessdaten und –schritten • Im Papierprozess komplex und mit Konsolidierungsaufwand • Zentrale Lösungen teilweise nur unter regulatorischem Zwang etabliert • ... und was passiert eigentlich, wenn wir Ländergrenzen überschreiten? • "Ja warum nehmt ihr denn nicht einfach eine replizierte Datenbank?" Private Blockchains?

Slide 5

Slide 5 text

• Klassische replizierte Datenbanken typischerweise entweder: • Single Writer, Multiple Readers • Oder komplexe Konsolidierungsregeln im Applikationscode (zB Couch DB) • Offene Fragen • Stabilität: Single Point of Failure des Single Writers • Vertrauen: Datenintegrität und Neutralität des Single Writers • Technologisch: Codeausführung, Versionierung, Berechtigungsmanagement • Datensparsamkeit: Oft zusätzliches Punkt-zu-Punkt Netzwerk notwendig • Governance: wer darf Daten austauschen? • Diese Fragen werden von Tools für private Blockchains adressiert Replizierte Datenbank?

Slide 6

Slide 6 text

• Hyperledger selbst ist keine Technologie, sondern ein Projekt der Linux Foundation • https://hyperledger.org • Mehrere unterschiedliche Blockchain-Technologien • Fabric, Sawtooth, Iroha, Indy, … • Zusätzliche Tools • Cello, Explorer, Composer Was ist Hyperledger?

Slide 7

Slide 7 text

• Eine Plattform um private, permissionierte Blockchain-Netzwerke aufzubauen • Fokus: B2B • Keine ICOs, öffentliche Cryptowährungen, … • Permissionierungs- und Governance-Konstrukte • Berechtigungen: Organisationen, federated Identity, … • Governance: Mehrheit, m-von-n, … • Private Daten: Channels, Private Data Collections • Das Backend für Blockchain-Angebote von IBM, SAP, Oracle, ... Was ist Fabric?

Slide 8

Slide 8 text

• Organisationen • Peers & Orderer • Chaincode & State-DB (z.B. CouchDB) • Endorsement & Policies • Channels & Private Data Collections Kernkonzepte

Slide 9

Slide 9 text

Das Szenario für heute ...

Slide 10

Slide 10 text

• "Dezentralisierte Portierung von Telefonnummern" • Mehrere Telekom-Unternehmen und ein Regulator (Bundesnetzagentur) sind Teilnehmer des Netzwerks • Smart Contract verarbeitet die aktuelle Inhaberschaft/Verantwortung für Telefonnummern (Mapping: Nummer-zu-Anbieter) Das Szenario für diese Session

Slide 11

Slide 11 text

Kernelemente eines Fabric Netzwerks

Slide 12

Slide 12 text

Organisationen: Teilnehmer des Netzwerks Telco 1 Telco 2 Regulator

Slide 13

Slide 13 text

Organisationen können Nodes betreiben Telco 1 Telco 2 Regulator

Slide 14

Slide 14 text

Orgas verwalten Zertifikate für User & Nodes Telco 1 Telco 2 Regulator MSP (Membership Service Provider): Zertifikaterstellung für User & Nodes

Slide 15

Slide 15 text

Channel 1 Channel 2 Nodes können Channels beitreten peer1.telco1.com peer1.telco2.com peer1.regulator.com

Slide 16

Slide 16 text

• Channels sind unabhängige Blockchains • Nur die Teilnehmer eines Channels sehen dessen Daten • Channels sind permissioniert • Transiente oder permanente Subsets: Private Data Collections • Smart Contracts werden pro Channel verwaltet Channels sind Blockchains

Slide 17

Slide 17 text

• Chaincode sind die Smart Contracts in Fabric • Auf ein Subset der Peers deployed • Versioniert und permissioniert • Greifen auf State DB (zB Couch DB) der lokalen Node zu Chaincode

Slide 18

Slide 18 text

• Endorsement, Ordering, Validation • Endorsement: ein Subset der Peers entscheidet, ob Transaktion gültig ist (basierend auf Chaincode) • Ordering: Erzeugen einer Sequenz von Transaktionen; Verpacken in Blöcke • Validation: Vor dem finalen Commit prüft jeder Peer, ob Endorsement und Concurrency korrekt sind Dreistufiger Konsens

Slide 19

Slide 19 text

Nodetypen Orderer Endorser Peer Peers können Endorsers für Chaincodes in Channels sein, müssen aber nicht Peer

Slide 20

Slide 20 text

Client app S D K O1 O2 O3 O4 E1 E2 E3 P2 P1 C1 C1 C2 C1 P E O C Endorser Orderer Peer (Committer) Chaincode

Slide 21

Slide 21 text

P E O C Endorser Orderer Peer (Committer) Chaincode Client app O1 O2 O3 O4 E1 E2 E3 P2 P1 C1 C1 C2 C1 Tx 1) Client erzeugt Transaction Proposal und sendet es an Endorser 2) Endorser simulieren Transaktion und signieren Read-/Write-Set Tx 3) Client sendet TX mit Endorse- ments an Orderer 4) Orderer inkludieren TX in einem folgenden Block 5) Orderer senden Block an Peers S D K 6) Peers validieren Endorsement & Concurrency. Nehmen Block in ihre Chains & State DBs auf Other app S D K 7) Peers senden Events an Subscriber

Slide 22

Slide 22 text

• Verantwortungsbereich der Orderer: • Erlangen von Konsens über Sequenz der Transaktionen • Erzeugen von Blöcken, die Transaktionen beinhalten • Verteilen der Blöcke an Peers • NICHT: prüfen, ob Transaktionen gültig/endorsed sind! • Aktuell zwei fertig implementierte, technische Konsens- Optionen: "Solo" und "Kafka" • CFT (etcd/raft) und BFT sind in Bearbeitung Orderer erzeugen Blöcke O1 O2 O3 O4

Slide 23

Slide 23 text

• Organisationen • Peers & Orderer • Chaincode & State-DB (z.B. CouchDB) • Channels & Private Data Collections • Noch nicht: Endorsement & Policies Zwischenfazit: Kernkonzepte

Slide 24

Slide 24 text

Smart Contracts in Fabric

Slide 25

Slide 25 text

• Smart Contracts in Fabric: Chaincode • SDKs für unterschiedliche Programmiersprachen: Go, Node.js, Java; .NET in progress • SDKs kommunizieren via GRPC mit Fabric Peer • Interagieren (read/write) mit den eigentlichen Daten der Blockchain ("world state") • Chaincode läuft in separaten Docker Containern Fabric Chaincode Basiskonzepte

Slide 26

Slide 26 text

• Prüfen von Berechtigungen (z.B.: auch Eigentum von digitalen Assets) • GetState • Ändern des World States in DB (z.B.: Eigentümerschaft von digitalen Assets übertragen) • PutState/DeleteState • Bereitstellen von Events an SDK Subscriber • SetEvent Programmieraufgaben bei Chaincode

Slide 27

Slide 27 text

const {Contract} = require('fabric-contract-api'); class SimpleContract extends Contract { constructor() { super('com.example.simple'); } async myOperation(ctx, param1, param2) { // ... } } module.exports.contracts = [SimpleContract]; { chaincodeId: 'simplecontract', fcn: 'com.example.simple.myOperation', args: ['10', 'abc'], // ... } Schnittstelle zu Fabric, für Interaktionen mit Transaktionsdaten und State DB

Slide 28

Slide 28 text

// reading values let someValue = await ctx.stub.getState('myKey'); // query multiple values let result = await ctx.stub.getQueryResult(...); // storing values let newValue = 1234; await ctx.stub.putState('myKey', Buffer.from(newValue.toString())); // setting an event await ctx.stub.setEvent('valuechanged', Buffer.from(newValue.toString())); // access the client's identity (transaction signer) if (ctx.clientIdentity.mspId == "Telco1") { ... }

Slide 29

Slide 29 text

Fabric Client Development (Node & Java SDKs)

Slide 30

Slide 30 text

Initialisieren des Clients let FabricClient = require('fabric-client'); let client = new FabricClient(); await client.createUser(/* ... supply cryptographic information */); let channel = client.newChannel('demochannel'); let peer = client.newPeer('grpc://localhost:7061'); await channel.initialize({discover: true, target: peer});

Slide 31

Slide 31 text

Aufrufen von Chaincode let txId = client.newTransactionID(); let proposalRequest = { txId: txId chaincodeId: 'simplecontract', fcn: 'com.thinktecture.simplecontract.myOperation', args: ['10', 'abc'], // everything is passed as string }; let result = await channel.sendTransactionProposal(proposalRequest); let request = { proposalResponses: result[0], proposal: result[1] }; let submissionResult = await channel.sendTransaction(request);

Slide 32

Slide 32 text

Chaincode Lifecycle

Slide 33

Slide 33 text

Chaincode Deployment peer1.telco1.com peer1.regulator.com Chaincode Package oder Quellcode Install (durch Admin einer Organisation) peer chaincode install <…> peer chaincode install <…> numbertransfer, v1 numbertransfer, v1

Slide 34

Slide 34 text

Chaincode Instantiation peer1.telco1.com peer1.regulator.com numbertransfer, v1 numbertransfer, v1 channel1 peer chaincode instantiate <…> numbertransfer:v1

Slide 35

Slide 35 text

• Chaincode wird paketiert und explizit auf einzelnen Peers installiert • Nicht alle Peers benötigen jeden Chaincode • Chaincode kann auf einem Peer in mehreren Versionen existieren • Chaincode wird pro Channel instanziiert • Instanziierung == Verknüpfung einer spezifischen Chaincode Version mit einem Channel, mit gleichzeitiger Definition einer spezifischen Endorsement Policy • Chaincode kann pro Channel upgraded werden (=> mit einer neuen Version verknüpft, die auf den Peers installiert wurde) Chaincode / Smart Contracts

Slide 36

Slide 36 text

• Nahezu jede Operation in Fabric ist permissioniert • Configurationsänderungen, Channel-Teilnahme, ... • Chaincode Endorsement Policies Berechtigungen und Policies AND ('Regulator1.Admin', OutOf(2, 'Telco1.Admin', 'Telco2.Admin', 'Telco3.Admin')) • Any, all, m-out-of, majority (für Config-Änderungen) • And, Or

Slide 37

Slide 37 text

• Bausteine eines Fabric-Netzwerks • Transaktionsbehandlung in Fabric • Chaincode und Client SDK Grundlagen –Smart Contracts in Fabric • Policies und Endorsement • ... warum private Blockchain-Netzwerke mehr bieten können, als reine replizierte Datenbanken. Fazit – das haben Sie gesehen

Slide 38

Slide 38 text

Danke! Slides: https://thinktecture.com/presentations Kontakt: [email protected] Twitter: @ingorammer

Slide 39

Slide 39 text

DETAILS

Slide 40

Slide 40 text

Fabric Transaktionen im Detail

Slide 41

Slide 41 text

• Proposal, Endorsement & Simulation • Ordering & Verteilung • Ledger Updates Drei Phasen

Slide 42

Slide 42 text

Proposal & Endorsement - Client's View { chaincodeId: 'numbertransfer', fcn: 'confirmTransfer', args: ['49123123123', 'Telco2'] } peer1.telco1.com numbertransfer, v1 peer1.telco2.com numbertransfer, v1 peer1.telco3.com numbertransfer, v1 peer1.regulator.com numbertransfer, v1 2) Determine policy (Static or discovery) 3) Select endorsers (peer URLs) peer1.telco2.com numbertransfer, v1 peer1.telco3.com numbertransfer, v1 peer1.regulator.com numbertransfer, v1 4) Send proposal directly to endorsers 5) Endorsers simulate transactions 6) Collect endorsements and verify 1) Create and sign proposal

Slide 43

Slide 43 text

peer1.telco2.com Simulation & Endorsement - Peer's View Key Value Version 49123123123 Telco1 B1/Tx0 491111111111 Telco2 B23/Tx1 491111111112 Telco3 B4/Tx0 { chaincodeId: 'numbertransfer', fcn: 'confirmTransfer', args: ['49123123123', 'Telco2'] } Signed: Telco1 // still simplified pseudocode! function confirmTransfer(number, transferTarget) { if (ctx.clientIdentity.mspId == await getState(number)) { await putState (number, transferTarget); } else throw; } // still simplified pseudocode! function confirmTransfer(number, transferTarget) { if (ctx.clientIdentity.mspId == await getState(number)) { await putState (number, transferTarget); } else throw; } // still simplified pseudocode! function confirmTransfer(number, transferTarget) { if (ctx.clientIdentity.mspId == await getState(number)) { await putState (number, transferTarget); } else throw; } Update state Verification of rules

Slide 44

Slide 44 text

peer1.telco2.com Simulation & Endorsement - Peer's View Key Value Version 49123123123 Telco1 B9/Tx0 491111111111 Telco2 B23/Tx1 491111111112 Telco3 B4/Tx0 { chaincodeId: 'numbertransfer', fcn: 'confirmTransfer', args: ['49123123123', 'Telco2'] } Signed: Telco1 // still simplified pseudocode! function confirmTransfer(number, transferTarget) { if (ctx.clientIdentity.mspId == await getState(number)) { await putState (number, transferTarget); } else throw; } // still simplified pseudocode! function confirmTransfer(number, transferTarget) { if (ctx.clientIdentity.mspId == await getState(number)) { await putState (number, transferTarget); } else throw; } // still simplified pseudocode! function confirmTransfer(number, transferTarget) { if (ctx.clientIdentity.mspId == await getState(number)) { await putState (number, transferTarget); } else throw; } // still simplified pseudocode! function confirmTransfer(number, transferTarget) { if (ctx.clientIdentity.mspId == await getState(number)) { await putState (number, transferTarget); } else throw; } // still simplified pseudocode! function confirmTransfer(number, transferTarget) { if (ctx.clientIdentity.mspId == await getState(number)) { await putState (number, transferTarget); } else throw; } Endorsement Read Set Write Set Read Set Key: '49123123123': Version: {Block: 9, Transaction: 0} Write Set Key: '49123123123': New Value: 'Telco2' Signed: peer1.telco2.com

Slide 45

Slide 45 text

• Transactions are processed on a client-selected subset of peers • Policy is defined during instantiation or upgrade of a chaincode • “Regulator AND two of Telco A, Telco B, or Telco B“ • Endorsers sign off on transactions after chaincode simulation (no ledger changes, only simulation!) Endorsement

Slide 46

Slide 46 text

Transaction Request Collecting all endorsements on the client Proposal { chaincodeId: 'numbertransfer', fcn: 'confirmTransfer', args: ['49123123123', 'Telco2'] } Read Set Key: '49123123123': Version: {Block: 9, Transaction: 0} Write Set Key: '49123123123': New Value: 'Telco2' Signed: peer1.telco1.com, creator Signed: peer1.telco2.com, endorser Signed: peer1.telco3.com, endorser Signed: peer1.regulator.com, endorser

Slide 47

Slide 47 text

Orderer Ordering, distribution and incorporation Transaction Message Proposal Read Set Write Set peer1.telco1.com peer1.telco2.com peer1.telco3.com peer1.regulator.com channel1 channel2 channel1 channel1 channel1 channel1 2) Orderers forms consensus and create a new block 3) New block is distributed to peers 4) Peers check that block comes from valid orderer 5) Peers add the block to their chains and process transactions 1) Client sends TX message to one orderer

Slide 48

Slide 48 text

peer1.telco2.com Transaction handling at peers - Scenario: block #71 Key Value Version 49123123123 Telco1 B9/Tx0 491111111111 Telco2 B23/Tx1 491111111112 Telco3 B4/Tx0 Endorsement Read Set Key: '49123123123': Version: {Block: 9, Transaction: 0} Write Set Key: '49123123123': New Value: 'Telco2' 2) Verify endorsement, else flag as ENDORSEMENT_POLICY_FAILURE and stop 3) Compare the read-sets, else flag as MVCC_READ_CONFLICT and stop 4) Update state (and version!) and flag as VALID 1) Take each transaction from the block IMPORTANT: No chaincode execution at this stage! Key Value Version 49123123123 Telco2 B71/Tx0 491111111111 Telco2 B23/Tx1 491111111112 Telco3 B4/Tx0

Slide 49

Slide 49 text

• Bausteine eines Fabric-Netzwerks • Transaktionsbehandlung in Fabric • Chaincode Grundlagen –Smart Contracts in Fabric • Client SDK Überblick • Transaktionsbehandlung im Detail Fazit – das haben Sie gesehen

Slide 50

Slide 50 text

Danke! Slides: https://speakerdeck.com/ingorammer Kontakt: [email protected] Twitter: @ingorammer

Slide 51

Slide 51 text

EXTRA CONTENT

Slide 52

Slide 52 text

• Client uses SDK to create a proposal and send it to endorsers • Endorsers simulate chaincode execution; sign read-set and write-set • Client uses SDK to verify endorsement (optional) • Client sends transaction (proposal + endorsement) to orderer • Orderers create a block (for one channel) and broadcast to peers • Peer verifies endorsement and read-set against its copy of the ledger • If ok, the peer incorporates the write-set in its copy of the ledger • Erroneous transactions remain in the blockchain but will be flagged Complete Fabric Transaction Flow

Slide 53

Slide 53 text

Endorsement Policies numbertransfer version: v1 endorsementpolicy: AND( 'Regulator.member', OutOf( 2, 'Telco1.member', 'Telco2.member', 'Telco3.member' ) ) channel1 { chaincodeId: 'numbertransfer', fcn: 'confirmTransfer', args: ['49151123456'] } peer1.telco1.com numbertransfer, v1 peer1.telco2.com numbertransfer, v1 peer1.telco3.com numbertransfer, v1 peer1.regulator.com numbertransfer, v1

Slide 54

Slide 54 text

numbertransfer version: v1 endorsementpolicy: AND( 'Regulator.member', OutOf( 2, 'Telco1.member', 'Telco2.member', 'Telco3.member' ) ) channel1 { chaincodeId: 'numbertransfer', fcn: 'confirmTransfer', args: ['49151123456'] } peer1.telco1.com numbertransfer, v1 peer1.telco2.com numbertransfer, v1 peer1.telco3.com numbertransfer, v1 peer1.regulator.com numbertransfer, v1 Endorsement Policies

Slide 55

Slide 55 text

Endorsement Policies numbertransfer version: v1 endorsementpolicy: AND( 'Regulator.member', OutOf( 2, 'Telco1.member', 'Telco2.member', 'Telco3.member' ) ) channel1 { chaincodeId: 'numbertransfer', fcn: 'confirmTransfer', args: ['49151123456'] } peer1.telco1.com numbertransfer, v1 peer1.telco2.com numbertransfer, v1 peer1.telco3.com numbertransfer, v1 peer1.regulator.com numbertransfer, v1

Slide 56

Slide 56 text

Endorsement Policies numbertransfer version: v1 endorsementpolicy: AND( 'Regulator.member', OutOf( 2, 'Telco1.member', 'Telco2.member', 'Telco3.member' ) ) channel1 { chaincodeId: 'numbertransfer', fcn: 'confirmTransfer', args: ['49151123456'] } peer1.telco1.com numbertransfer, v1 peer1.telco2.com numbertransfer, v1 peer1.telco3.com numbertransfer, v1 peer1.regulator.com numbertransfer, v1

Slide 57

Slide 57 text

• How is the chaincode executed? • Upon the first transaction (or instantiation for the initial node), a docker image (and container) is created and started • Can you stop/remove chaincode? • Only manually by stopping the container, removing the image and deleting the directory on the host (http://bit.ly/CC_for_ops_1_3) • Do I need to keep all versions around? • No: because of how endorsement works with Fabric • Does every node need access to the chaincode? • No: because of how endorsement works with Fabric Chaincode FAQs

Slide 58

Slide 58 text

• https://github.com/hyperledger/fabric-chaincode-node • New API: https://www.npmjs.com/package/fabric-contract- api • Currently doc bug: "startchaincode" vs "chaincodestart" in package.json Chaincode with Node.js

Slide 59

Slide 59 text

• Tip: use a single-peer endorsement policy • Start peer with --peer-chaincodedev=true • Start chaincode to connect to peer: Debugging Chaincode export CORE_CHAINCODE_ID_NAME=simplecontract:v0 # : node node_modules/fabric-shim/bin/chaincodestart --peer.address grpc://localhost:7052

Slide 60

Slide 60 text

• Install – physical deployment to a peer • Instantiate – logical binding to a channel; specifies endorsement policies and private data collections • Invoke – send a TX to chaincode (Docker container started on demand!) • Query – retrieve read-only data • Upgrade – binding of a different chaincode to a channel (incl. new policies) Chaincode Lifecycle