Demystifying Blockchain: Business Applications with Hyperledger Fabric
ASQ Quality 4.0 Summit on
Disruption, Innovation, & Change
Tuesday, November 13th, 2018
Dallas TX
Morgan C. Benton
morgan.benton@gmail.com @morphatic
About Me
- 13th year in BS Integrated Science and Technology program at JMU
- Teach mostly web/mobile app development, agile methodology
- Unofficial Secretary of the Hyperledger Training and Education Working Group
- Probably only 15 minutes ahead of you in terms of what I know about blockchain...
DISCLAIMER: Blockchain may be
hazardous to your health...
THIS SOFTWARE PRESENTATION IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND FOR THE IDEAS CONTAINED HEREIN, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE WHATSOEVER. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE IMPLEMENTATION OF SOFTWARE BASED ON THE IDEAS DISCUSSED TODAY.
(paraphrased from the MIT license...)
...that being said, I hope you'll find this useful and interesting...
Why Blockchain?
"I don't want to create or trade cryptocurrencies, so what possible use could I have for incorporating blockchain into the software and tools that I or my company uses or the software that I'm building for clients?"
- Decentralized trust mechanism that could potentially replace centralized trust, i.e. banks and governments
- Could greatly reduce or eliminate the need and expense of hiring external auditors
- Potential to automate processes that must currently be manually executed (for verification purposes)
Permissionless
Anyone can participate.
The ledger is freely downloadable by all participants in the network
- Bitcoin
- Ethereum
Permissioned
Participation is restricted. The ledger is available only to authorized participants.
- Hyperledger
TWO Major Categories of Blockchain Technology
What is Hyperledger?
- Standards-setting consortium
- >250 members w/ dues $10k ~ $270k /yr
- Run by the Linux Foundation
- Focused on industrial blockchain applications
Taking a
Deep Dive
into
Hyperledger
Fabric
- Assets
- Participants
- Membership Service Provider (MSP)
- World State DB
- Chaincode ("Smart Contract")
- Transaction
- Block
- Blockchain
- Ledgers & Channels
- Peers
- Networks
- Applications
- Consensus
Key Concepts
- Can be anything with a monetary value, e.g.
- Tangible goods: cars, apples, books
- Real estate
- Intangible: copyright
- Represented in JSON and/or binary form
- Stored as a key/value pair
Asset
{
"$class": "org.acme.Shipment",
"shipmentId": "6646",
"type": "BANANAS",
"status": "IN_TRANSIT",
"unitCount": 100,
"unit": "kg",
"contract": "Contract#3298"
}
{
"$class": "org.acme.Contract",
"contractId": "3298",
"grower": "Grower#0904",
"shipper": "Shipper#7456",
"importer": "Importer#1052",
"arrivalETA": "2018-09-23T23:48:57.991Z",
"unitPrice": 0.89,
"unit": "USD",
"minTemperature": 5,
"maxTemperature": 15,
"minPenaltyFactor": 0.05,
"maxPenaltyFactor": 0.25
}
- Any actor in or out of the network that can consume services
- Identified by X.509 digital certificate
- Identity used to determine capabilities
- Identity issued, managed, and verified by an MSP...
Participant
{
"$class": "org.acme.Grower",
"email": "0904",
"address": {
"$class": "org.acme.Address",
"country": "CR"
},
"accountBalance": 310448.73
}
{
"$class": "org.acme.Shipper",
"email": "7456",
"address": {
"$class": "org.acme.Address",
"country": "US"
},
"accountBalance": 18540830.66
}
- Component that defines rules for valid identities
- Based on PKI
- Specifies trusted Root and Intermediate Certificate Authorities (CAs)
- Defines roles and privileges of identities
- Tracks revoked identities
- Defined at local (within org) level and channel (between org) level
Membership Service Provider
- From the Hyperledger Docs
- Each block above represents a folder in the filesystem of a node in the network
- Common MSPs include:
Network, Channel, Peer, Orderer
- A database that holds the current values describing the states of a set of assets important to an organization
- Usually stored as key-value pairs, but flexible
- Theoretically can be stored in most any modern DBMS, but current support exists for CouchDB and LevelDB
World State DB
{
"key": "CAR1",
"value": "Audi",
"version": 0
}
{
"key": "CAR2",
"value": {
"type": "BMW",
"color": "red",
"owner": "Jane
},
"version": 0
}
- AKA "smart contracts"
- Code invoked by Fabric apps with instructions for modifying assets by executing transactions
- Currently written using either Go or NodeJS
- Runs in a secured Docker container
- Implements a fairly simple API (mostly CRUD)
- Follows an endorsement policy
Chaincode
package main
import (
"fmt"
"github.com/hyperledger/fabric/core/chaincode/shim"
"github.com/hyperledger/fabric/protos/peer"
)
// SimpleAsset implements a simple chaincode to manage an asset
type SimpleAsset struct {}
// Init is called during chaincode instantiation to initialize any
// data. Note that chaincode upgrade also calls this function to reset
// or to migrate data, so be careful to avoid a scenario where you
// inadvertently clobber your ledger's data!
func (t *SimpleAsset) Init(stub shim.ChaincodeStubInterface) peer.Response {
// Get the args from the transaction proposal
args := stub.GetStringArgs()
if len(args) != 2 {
return shim.Error("Incorrect arguments. Expecting a key and a value")
}
// Set up any variables or assets here by calling stub.PutState()
// We store the key and the value on the ledger
err := stub.PutState(args[0], []byte(args[1]))
if err != nil {
return shim.Error(fmt.Sprintf("Failed to create asset: %s", args[0]))
}
return shim.Success(nil)
}
// Invoke is called per transaction on the chaincode. Each transaction is
// either a 'get' or a 'set' on the asset created by Init function. The Set
// method may create a new asset by specifying a new key-value pair.
func (t *SimpleAsset) Invoke(stub shim.ChaincodeStubInterface) peer.Response {
// Extract the function and args from the transaction proposal
fn, args := stub.GetFunctionAndParameters()
var result string
var err error
if fn == "set" {
result, err = set(stub, args)
} else {
result, err = get(stub, args)
}
if err != nil {
return shim.Error(err.Error())
}
// Return the result as success payload
return shim.Success([]byte(result))
}
- A data structure that contains:
- Header: essential metadata such as the chaincode to run
- Signature: cryptographic digital signature used for verification; requires private key of the signing application
- Proposal: input parameters for the chaincode
- Response: before/after values of world state as a Read Write (RW) set
- Endorsements: verifications from endorsing peers that transaction is valid
Transaction
- A block is a data structure that contains:
- Header: a hash of the transactions in the block + the hash of the prior block's header
- Data: a set of chronologically ordered transactions
- Metadata
Block
- A tamper-resistant transaction log structured as interlinked blocks
- "Interlinked" because each block is partially formed from the hash of all of the data in the previous block
- Implemented as a file rather than a DB since current API only allows Append and Search
Blockchain
- The sequence of blocks is described as "immutable" (which roughly means "unchangeable")
- A "ledger" in Fabric is composed of a copy of a blockchain plus the world state database that reflects the blockchain
- Each participant in a Hyperledger Fabric network maintains their own copy of the ledger
Ledgers & Channels
- For privacy, members of a Fabric network can create "channels" each of which has its own ledger possessed only by members of the channel
Example of a network with channels
- A computer maintained by one of the member organizations in a Fabric network
- Identified by a digital certificate issued by an MSP
- Hosts chaincode (smart contracts) and the ledgers for the network and any channels of which the peer is a member
- Organizations may maintain many peers
Peers
- There are several types of peers:
- Ordering Peer
Orders transactions and packs them into blocks - Endorsing Peer
Endorses proposed txns - Anchor Peer
Facilitates awareness of peers across orgs - Leading Peer
Conduit between Ordering peer and other peers within an organization
- Ordering Peer
Networks & Applications
Consensus
Questions?
Demystifying Blockchain: Business Applications with Hyperledger Fabric
By Morgan Benton
Demystifying Blockchain: Business Applications with Hyperledger Fabric
While the permissionless blockchain technologies that support software like Bitcoin and Ethereum dominate headlines, there are still very significant unsolved technological challenges that prevent these platforms from becoming truly mainstream. Meanwhile, big companies like IBM, Intel, Cisco, and American Express are putting their energy behind a less ambitious, less risky, but no less impactful form of blockchain platform--the permissioned blockchain. The dominant player in the permissioned blockchain space is Hyperledger (www.hyperledger.org), a massive, open-source family of blockchain frameworks being managed by the Linux Foundation. In this session, we will briefly cover the key differences between permissioned and permissionless blockchains, and demonstrate why wise developers looking to break into the blockchain space should invest their time and energy learning to develop solutions with Hyperledger. We'll dive right into a demonstration of what blockchain development looks like with Hyperledger Fabric, one of the five frameworks currently being incubated by the Hyperledger project.
- 1,302