SlideShare a Scribd company logo
1 of 16
Download to read offline
1
Hyperledger
Fabric
Architecture
 Fabric has several framework
components:
 Membership services for security:
audit, registration & identity
management
 Blockchain services: Consensus,
Storage & transactions
 Chaincode services: Secure
container & registry
 For the hackathon we will focus on
the container and blockchain
storage
2
Chaincode
REST ENDPOINTS
Hyperledger-java
API
Application code
ValidatingPeerNode
Dockercontainer RocksDB storage
Other
Validating
PeersREST
Consensus
Consensus
Consensus
Prerequisites
 Docker (I tested on 1.12.1 on Mac OS X)
 Docker Compose (kitematic is also helpful)
 Java/Golang environment for chaincode development (I used JDK 8 + Gradle 3.2)
 For application development:
 Java/Golang environment
 Your favourite development language, as long as you have a REST API available
 This guide loosely based on:
http://hyperledger-fabric.readthedocs.io/en/latest/starter/fabric-starter-kit/
3
The Environment
4
Starter
container
Member SVCs
Peer node
Container for the member
security services (not strictly
required for the hackathon)
Runs and builds the Fabric Shim
for interaction with Fabric
Runs and builds the java
chaincode
Requires Java + gradle to be
installed in the container
Deploys the Java chaincode
running on peer node into
Fabric
Used for executing
commands against the
running chaincode
Docker-compose.yml
membersrvc:
# try 'docker ps' to see the container status after starting this compose
container_name: membersrvc
image: hyperledger/fabric-membersrvc
command: membersrvc
environment:
- COMPOSE_HTTP_TIMEOUT=120
volumes:
- /Users/jbowkett/Documents/Excelian/blockchain/dev-team/git-clone/smart-cheques/starter-
kit/docker-containers/mapped-fs-member:/user/docker-containers/mapped-fs-member
peer:
container_name: peer
image: hyperledger/fabric-peer
environment:
- CORE_PEER_ADDRESSAUTODETECT=true
- CORE_VM_ENDPOINT=unix:///var/run/docker.sock
- CORE_LOGGING_LEVEL=DEBUG
- CORE_PEER_ID=vp0
- CORE_SECURITY_ENABLED=false
# - CORE_SECURITY_PRIVACY=false
- CORE_PEER_PKI_ECA_PADDR=membersrvc:7054
- CORE_PEER_PKI_TCA_PADDR=membersrvc:7054
- CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054
- CORE_PEER_VALIDATOR_CONSENSUS_PLUGIN=noops
- COMPOSE_HTTP_TIMEOUT=120
# this gives access to the docker host daemon to deploy chain code in network mode
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /Users/jbowkett/Documents/Excelian/blockchain/dev-team/git-clone/smart-cheques/starter-
kit/docker-containers/mapped-fs-peer:/user/docker-containers/mapped-fs-peer
5
# have the peer wait 10 sec for membersrvc to start
# the following is to run the peer in Developer mode - also set sample DEPLOY_MODE=dev
command: sh -c "sleep 10; peer node start --peer-chaincodedev"
#command: sh -c "sleep 10; peer node start"
links:
- membersrvc
ports:
- "5005:5005"
starter:
container_name: starter
image: hyperledger/fabric-starter-kit
volumes:
# tweak this to map a local development directory tree into the container
- /Users/jbowkett/Documents/Excelian/blockchain/dev-team/git-clone/smart-cheques/starter-
kit/docker-containers/mapped-fs-starter:/user/docker-containers/mapped-fs-starter
environment:
- MEMBERSRVC_ADDRESS=membersrvc:7054
- PEER_ADDRESS=peer:7051
- KEY_VALUE_STORE=/tmp/hl_sdk_node_key_value_store
# set to following to 'dev' if peer running in Developer mode
- COMPOSE_HTTP_TIMEOUT=120
- DEPLOY_MODE=dev
- CORE_CHAINCODE_ID_NAME=mycc
- CORE_PEER_ADDRESS=peer:7051
# the following command will start the chain code when this container starts and ready it for
deployment by the app
# command: sh -c "sleep 20;
/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/chai
ncode_example02"
stdin_open: true
tty: true
links:
- membersrvc
- peer
Bootstrap the Docker environments
 Edit the volumes sections of your docker-compose.yml to map appropriate
directories for getting code onto your nodes
 Make sure those paths exist on your development (and “production” machine)
 Go to the directory the docker-compose.yml is installed:
$ docker-compose up -d
6
7
Update the peer node to run Java services
$ docker exec -it peer /bin/bash
peer$ peer node start --peer-chaincodedev
peer$ apt-get update && add-apt-repository ppa:webupd8team/java && add-
apt-repository ppa:cwchien/gradle && apt-get update && apt-get install
oracle-java8-installer
peer$ java –fullversion # should be JDK 1.8
peer$ apt-get install gradle
peer$ gradle –v # should be 3.2+
8
9
Install the chaincode shim into the gradle repo
peer$ cd $GOPATH/src/github.com/hyperledger/fabric/core/chaincode/shim/java
peer$ gradle clean build
10
The story so far….
 We’ve created the 3 Hyperledger docker containers (starter, membersvc and peer)
with mounted directories on our development machine
 Provisioned the peer node by installing the correct version of Java and Gradle
 Built the Hyperledger shim on the peer node and installed it as an available
dependency for later Gradle builds on the peer node
 Now let’s deploy an example chaincode application….
11
Install your chaincode on the peer node and run the service
import org.hyperledger.java.shim.ChaincodeBase;
import org.hyperledger.java.shim.ChaincodeStub;
public class HelloWorldChaincode extends ChaincodeBase {
public HelloWorldChaincode() { }
public String run(ChaincodeStub chaincodeStub, String function, String[] args) {
return "hello world!";
}
public String query(ChaincodeStub chaincodeStub, String function, String[] args) {
return "hello world query";
}
public String getChaincodeID() {
return "HelloWorldChaincode";
}
public static void main(String[] args) {
new HelloWorldChaincode().start(args);
}
}12
$ cp <hello world chaincode src> <mapped dir for peer>
Start the chaincode
 peer$ gradle clean build runHello
 $ docker exec -it starter /bin/bash
 starter$ peer chaincode deploy -l java -n HelloWorldChaincode -c
'{"Args":[]}'
 starter$ peer chaincode invoke -l java -n HelloWorldChaincode -c
'{"Args":[]}’
 starter$ peer chaincode query -l java -n HelloWorldChaincode -c
'{"Args":[]}'
13
SUCCESS !!!!
A quick recap….
1. Create the 3 Hyperledger Docker containers (starter, membersvc and peer) with
mapped directories to our development machine
2. Provision the peer node by logging into the Docker container and installing the
correct version of Java and Gradle
3. Build the Hyperledger shim on the peer node and install it as an available
dependency for later Gradle builds on the peer node
4. Create a HelloWorld chaincode on our development machine & copy the code+build
script to the peer node using our Docker mapped-directory
5. On the starter node, deploy the chaincode into Fabric, and then use the starter node
to query the running chaincode within fabric
14
Some APIs and Examples to be aware of
 Table creation:
final List<TableProto.ColumnDefinition> columnDefs = new ArrayList<>();
columnDefs.add(newBuilder().setName("hash").setKey(true).setType(STRING).build());
columnDefs.add(newBuilder().setName("messages").setKey(false).setType(STRING).build());
final boolean success = chaincodeStub.createTable(TABLE_NAME, columnDefs);
 Lookup is based on the key column only
 https://github.com/hyperledger/fabric/tree/master/examples/chaincode/java
 Examples:
 LinkExample – Invoking one chaincode from another
 MapExample – Simple map storage
 RangeExample – Query storage with range
 SimpleExample – Transferring value using Arguments
 TableExample – C/R/D Using underlying storage tables
15
Useful links
 https://docs.docker.com/engine/installation/
 https://docs.docker.com/engine/installation/linux/linux-postinstall/  Important on
Linux if running Docker on boot
 http://hyperledger-fabric.readthedocs.io
 http://hyperledger-fabric.readthedocs.io/en/latest/starter/fabric-starter-kit/
 https://github.com/jbowkett/zug-hackathon
 https://github.com/hyperledger/fabric/tree/master/examples/chaincode/java
 https://gradle.org/documentation/
16

More Related Content

What's hot

What's hot (20)

Hyperledger Fabric and Tools
Hyperledger Fabric and ToolsHyperledger Fabric and Tools
Hyperledger Fabric and Tools
 
Conoscerehyperledger
ConoscerehyperledgerConoscerehyperledger
Conoscerehyperledger
 
Excelian hyperledger fabric-feb17
Excelian hyperledger fabric-feb17Excelian hyperledger fabric-feb17
Excelian hyperledger fabric-feb17
 
Hyperledger Fabric Technical Deep Dive 20190618
Hyperledger Fabric Technical Deep Dive 20190618Hyperledger Fabric Technical Deep Dive 20190618
Hyperledger Fabric Technical Deep Dive 20190618
 
Distributed:Health Code Camp Hyperledger
Distributed:Health Code Camp HyperledgerDistributed:Health Code Camp Hyperledger
Distributed:Health Code Camp Hyperledger
 
Hyperledger Composer Update 2017-04-05
Hyperledger Composer Update 2017-04-05Hyperledger Composer Update 2017-04-05
Hyperledger Composer Update 2017-04-05
 
Developing applications with Hyperledger Fabric SDK
Developing applications with Hyperledger Fabric SDKDeveloping applications with Hyperledger Fabric SDK
Developing applications with Hyperledger Fabric SDK
 
Hyperledger community update Feb 20, 2018
Hyperledger community update Feb 20, 2018Hyperledger community update Feb 20, 2018
Hyperledger community update Feb 20, 2018
 
Hyperledger fabric 3
Hyperledger fabric 3Hyperledger fabric 3
Hyperledger fabric 3
 
Blockchain Hyperledger Lab
Blockchain Hyperledger LabBlockchain Hyperledger Lab
Blockchain Hyperledger Lab
 
Hyperledger community update 201805
Hyperledger community update 201805Hyperledger community update 201805
Hyperledger community update 201805
 
Introduction of Hyperledger Fabric & Composer
Introduction of Hyperledger Fabric & Composer Introduction of Hyperledger Fabric & Composer
Introduction of Hyperledger Fabric & Composer
 
IBM Blockchain Overview
IBM Blockchain OverviewIBM Blockchain Overview
IBM Blockchain Overview
 
Hong Kong Hyperledger Meetup January 2018
Hong Kong Hyperledger Meetup January 2018Hong Kong Hyperledger Meetup January 2018
Hong Kong Hyperledger Meetup January 2018
 
Hyperledger Fabric: A Custom Blockchain Solution for Corporate Use
Hyperledger Fabric: A Custom Blockchain Solution for Corporate UseHyperledger Fabric: A Custom Blockchain Solution for Corporate Use
Hyperledger Fabric: A Custom Blockchain Solution for Corporate Use
 
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?
Dejan Podgorsek - Is Hyperledger Fabric secure enough for your Business?
 
Orchestraing the Blockchain Using Containers
Orchestraing the Blockchain Using ContainersOrchestraing the Blockchain Using Containers
Orchestraing the Blockchain Using Containers
 
Blockchain Explorer
Blockchain ExplorerBlockchain Explorer
Blockchain Explorer
 
IBM Bluemix Nice Meetup - 20171120 - Hyperledger Fabric & Composer
IBM Bluemix Nice Meetup - 20171120 - Hyperledger Fabric & ComposerIBM Bluemix Nice Meetup - 20171120 - Hyperledger Fabric & Composer
IBM Bluemix Nice Meetup - 20171120 - Hyperledger Fabric & Composer
 
IBM presents: Hyperledger Fabric Hands On Workshop - part 1
IBM presents: Hyperledger Fabric Hands On Workshop - part 1IBM presents: Hyperledger Fabric Hands On Workshop - part 1
IBM presents: Hyperledger Fabric Hands On Workshop - part 1
 

Viewers also liked

Introduction to Blockchain and the Hyperledger Project
Introduction to Blockchain and the Hyperledger ProjectIntroduction to Blockchain and the Hyperledger Project
Introduction to Blockchain and the Hyperledger Project
Manuel Garcia
 

Viewers also liked (11)

Smart Contracts: Opportunities and Challenges
Smart Contracts: Opportunities and ChallengesSmart Contracts: Opportunities and Challenges
Smart Contracts: Opportunities and Challenges
 
Gluecon 2016 Keynote: Deploying and Managing Blockchain Applications
Gluecon 2016 Keynote: Deploying and Managing Blockchain ApplicationsGluecon 2016 Keynote: Deploying and Managing Blockchain Applications
Gluecon 2016 Keynote: Deploying and Managing Blockchain Applications
 
Edcon - Hardware wallets and smart contracts
Edcon -  Hardware wallets and smart contractsEdcon -  Hardware wallets and smart contracts
Edcon - Hardware wallets and smart contracts
 
Introduction to Hyperledger Composer
Introduction to Hyperledger ComposerIntroduction to Hyperledger Composer
Introduction to Hyperledger Composer
 
Trading Derivatives on Hyperledger
Trading Derivatives on HyperledgerTrading Derivatives on Hyperledger
Trading Derivatives on Hyperledger
 
How to Never Leave Your Deployment Unattended
How to Never Leave Your Deployment UnattendedHow to Never Leave Your Deployment Unattended
How to Never Leave Your Deployment Unattended
 
Technical Introduction to Hyperledger Fabric v1.0
Technical Introduction to Hyperledger Fabric v1.0Technical Introduction to Hyperledger Fabric v1.0
Technical Introduction to Hyperledger Fabric v1.0
 
Code is not law
Code is not lawCode is not law
Code is not law
 
Fabric Composer - London Hyperledger Meetup - March 2017
Fabric Composer - London Hyperledger Meetup - March 2017Fabric Composer - London Hyperledger Meetup - March 2017
Fabric Composer - London Hyperledger Meetup - March 2017
 
Introduction to Blockchain and the Hyperledger Project
Introduction to Blockchain and the Hyperledger ProjectIntroduction to Blockchain and the Hyperledger Project
Introduction to Blockchain and the Hyperledger Project
 
Architecture of the Hyperledger Blockchain Fabric - Christian Cachin - IBM Re...
Architecture of the Hyperledger Blockchain Fabric - Christian Cachin - IBM Re...Architecture of the Hyperledger Blockchain Fabric - Christian Cachin - IBM Re...
Architecture of the Hyperledger Blockchain Fabric - Christian Cachin - IBM Re...
 

Similar to Excelian hyperledger walkthrough-feb17

Similar to Excelian hyperledger walkthrough-feb17 (20)

[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안[Codelab 2017] Docker 기초 및 활용 방안
[Codelab 2017] Docker 기초 및 활용 방안
 
JDD2015: Kubernetes - Beyond the basics - Paul Bakker
JDD2015: Kubernetes - Beyond the basics - Paul BakkerJDD2015: Kubernetes - Beyond the basics - Paul Bakker
JDD2015: Kubernetes - Beyond the basics - Paul Bakker
 
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
Docker Azure Friday OSS March 2017 - Developing and deploying Java & Linux on...
 
Docker 101 Checonf 2016
Docker 101 Checonf 2016Docker 101 Checonf 2016
Docker 101 Checonf 2016
 
Docker Enterprise Workshop - Technical
Docker Enterprise Workshop - TechnicalDocker Enterprise Workshop - Technical
Docker Enterprise Workshop - Technical
 
Continuous Integration With Jenkins Docker SQL Server
Continuous Integration With Jenkins Docker SQL ServerContinuous Integration With Jenkins Docker SQL Server
Continuous Integration With Jenkins Docker SQL Server
 
Azure Bootcamp 2016 - Docker Orchestration on Azure with Rancher
Azure Bootcamp 2016 - Docker Orchestration on Azure with RancherAzure Bootcamp 2016 - Docker Orchestration on Azure with Rancher
Azure Bootcamp 2016 - Docker Orchestration on Azure with Rancher
 
Making a small QA system with Docker
Making a small QA system with DockerMaking a small QA system with Docker
Making a small QA system with Docker
 
[Devconf.cz][2017] Understanding OpenShift Security Context Constraints
[Devconf.cz][2017] Understanding OpenShift Security Context Constraints[Devconf.cz][2017] Understanding OpenShift Security Context Constraints
[Devconf.cz][2017] Understanding OpenShift Security Context Constraints
 
Docker 1.11 Presentation
Docker 1.11 PresentationDocker 1.11 Presentation
Docker 1.11 Presentation
 
Setup docker on existing application
Setup docker on existing applicationSetup docker on existing application
Setup docker on existing application
 
Microservices DevOps on Google Cloud Platform
Microservices DevOps on Google Cloud PlatformMicroservices DevOps on Google Cloud Platform
Microservices DevOps on Google Cloud Platform
 
Introduction to Docker - Learning containerization XP conference 2016
Introduction to Docker - Learning containerization  XP conference 2016Introduction to Docker - Learning containerization  XP conference 2016
Introduction to Docker - Learning containerization XP conference 2016
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
 
Docker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudDocker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google Cloud
 
Docker for Java Developers
Docker for Java DevelopersDocker for Java Developers
Docker for Java Developers
 
Orchestrating Docker with OpenStack
Orchestrating Docker with OpenStackOrchestrating Docker with OpenStack
Orchestrating Docker with OpenStack
 
Deploying windows containers with kubernetes
Deploying windows containers with kubernetesDeploying windows containers with kubernetes
Deploying windows containers with kubernetes
 
ABCs of docker
ABCs of dockerABCs of docker
ABCs of docker
 
Dessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloudDessi docker kubernetes paas cloud
Dessi docker kubernetes paas cloud
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Excelian hyperledger walkthrough-feb17

  • 2. Architecture  Fabric has several framework components:  Membership services for security: audit, registration & identity management  Blockchain services: Consensus, Storage & transactions  Chaincode services: Secure container & registry  For the hackathon we will focus on the container and blockchain storage 2 Chaincode REST ENDPOINTS Hyperledger-java API Application code ValidatingPeerNode Dockercontainer RocksDB storage Other Validating PeersREST Consensus Consensus Consensus
  • 3. Prerequisites  Docker (I tested on 1.12.1 on Mac OS X)  Docker Compose (kitematic is also helpful)  Java/Golang environment for chaincode development (I used JDK 8 + Gradle 3.2)  For application development:  Java/Golang environment  Your favourite development language, as long as you have a REST API available  This guide loosely based on: http://hyperledger-fabric.readthedocs.io/en/latest/starter/fabric-starter-kit/ 3
  • 4. The Environment 4 Starter container Member SVCs Peer node Container for the member security services (not strictly required for the hackathon) Runs and builds the Fabric Shim for interaction with Fabric Runs and builds the java chaincode Requires Java + gradle to be installed in the container Deploys the Java chaincode running on peer node into Fabric Used for executing commands against the running chaincode
  • 5. Docker-compose.yml membersrvc: # try 'docker ps' to see the container status after starting this compose container_name: membersrvc image: hyperledger/fabric-membersrvc command: membersrvc environment: - COMPOSE_HTTP_TIMEOUT=120 volumes: - /Users/jbowkett/Documents/Excelian/blockchain/dev-team/git-clone/smart-cheques/starter- kit/docker-containers/mapped-fs-member:/user/docker-containers/mapped-fs-member peer: container_name: peer image: hyperledger/fabric-peer environment: - CORE_PEER_ADDRESSAUTODETECT=true - CORE_VM_ENDPOINT=unix:///var/run/docker.sock - CORE_LOGGING_LEVEL=DEBUG - CORE_PEER_ID=vp0 - CORE_SECURITY_ENABLED=false # - CORE_SECURITY_PRIVACY=false - CORE_PEER_PKI_ECA_PADDR=membersrvc:7054 - CORE_PEER_PKI_TCA_PADDR=membersrvc:7054 - CORE_PEER_PKI_TLSCA_PADDR=membersrvc:7054 - CORE_PEER_VALIDATOR_CONSENSUS_PLUGIN=noops - COMPOSE_HTTP_TIMEOUT=120 # this gives access to the docker host daemon to deploy chain code in network mode volumes: - /var/run/docker.sock:/var/run/docker.sock - /Users/jbowkett/Documents/Excelian/blockchain/dev-team/git-clone/smart-cheques/starter- kit/docker-containers/mapped-fs-peer:/user/docker-containers/mapped-fs-peer 5 # have the peer wait 10 sec for membersrvc to start # the following is to run the peer in Developer mode - also set sample DEPLOY_MODE=dev command: sh -c "sleep 10; peer node start --peer-chaincodedev" #command: sh -c "sleep 10; peer node start" links: - membersrvc ports: - "5005:5005" starter: container_name: starter image: hyperledger/fabric-starter-kit volumes: # tweak this to map a local development directory tree into the container - /Users/jbowkett/Documents/Excelian/blockchain/dev-team/git-clone/smart-cheques/starter- kit/docker-containers/mapped-fs-starter:/user/docker-containers/mapped-fs-starter environment: - MEMBERSRVC_ADDRESS=membersrvc:7054 - PEER_ADDRESS=peer:7051 - KEY_VALUE_STORE=/tmp/hl_sdk_node_key_value_store # set to following to 'dev' if peer running in Developer mode - COMPOSE_HTTP_TIMEOUT=120 - DEPLOY_MODE=dev - CORE_CHAINCODE_ID_NAME=mycc - CORE_PEER_ADDRESS=peer:7051 # the following command will start the chain code when this container starts and ready it for deployment by the app # command: sh -c "sleep 20; /opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/chai ncode_example02" stdin_open: true tty: true links: - membersrvc - peer
  • 6. Bootstrap the Docker environments  Edit the volumes sections of your docker-compose.yml to map appropriate directories for getting code onto your nodes  Make sure those paths exist on your development (and “production” machine)  Go to the directory the docker-compose.yml is installed: $ docker-compose up -d 6
  • 7. 7
  • 8. Update the peer node to run Java services $ docker exec -it peer /bin/bash peer$ peer node start --peer-chaincodedev peer$ apt-get update && add-apt-repository ppa:webupd8team/java && add- apt-repository ppa:cwchien/gradle && apt-get update && apt-get install oracle-java8-installer peer$ java –fullversion # should be JDK 1.8 peer$ apt-get install gradle peer$ gradle –v # should be 3.2+ 8
  • 9. 9
  • 10. Install the chaincode shim into the gradle repo peer$ cd $GOPATH/src/github.com/hyperledger/fabric/core/chaincode/shim/java peer$ gradle clean build 10
  • 11. The story so far….  We’ve created the 3 Hyperledger docker containers (starter, membersvc and peer) with mounted directories on our development machine  Provisioned the peer node by installing the correct version of Java and Gradle  Built the Hyperledger shim on the peer node and installed it as an available dependency for later Gradle builds on the peer node  Now let’s deploy an example chaincode application…. 11
  • 12. Install your chaincode on the peer node and run the service import org.hyperledger.java.shim.ChaincodeBase; import org.hyperledger.java.shim.ChaincodeStub; public class HelloWorldChaincode extends ChaincodeBase { public HelloWorldChaincode() { } public String run(ChaincodeStub chaincodeStub, String function, String[] args) { return "hello world!"; } public String query(ChaincodeStub chaincodeStub, String function, String[] args) { return "hello world query"; } public String getChaincodeID() { return "HelloWorldChaincode"; } public static void main(String[] args) { new HelloWorldChaincode().start(args); } }12 $ cp <hello world chaincode src> <mapped dir for peer>
  • 13. Start the chaincode  peer$ gradle clean build runHello  $ docker exec -it starter /bin/bash  starter$ peer chaincode deploy -l java -n HelloWorldChaincode -c '{"Args":[]}'  starter$ peer chaincode invoke -l java -n HelloWorldChaincode -c '{"Args":[]}’  starter$ peer chaincode query -l java -n HelloWorldChaincode -c '{"Args":[]}' 13 SUCCESS !!!!
  • 14. A quick recap…. 1. Create the 3 Hyperledger Docker containers (starter, membersvc and peer) with mapped directories to our development machine 2. Provision the peer node by logging into the Docker container and installing the correct version of Java and Gradle 3. Build the Hyperledger shim on the peer node and install it as an available dependency for later Gradle builds on the peer node 4. Create a HelloWorld chaincode on our development machine & copy the code+build script to the peer node using our Docker mapped-directory 5. On the starter node, deploy the chaincode into Fabric, and then use the starter node to query the running chaincode within fabric 14
  • 15. Some APIs and Examples to be aware of  Table creation: final List<TableProto.ColumnDefinition> columnDefs = new ArrayList<>(); columnDefs.add(newBuilder().setName("hash").setKey(true).setType(STRING).build()); columnDefs.add(newBuilder().setName("messages").setKey(false).setType(STRING).build()); final boolean success = chaincodeStub.createTable(TABLE_NAME, columnDefs);  Lookup is based on the key column only  https://github.com/hyperledger/fabric/tree/master/examples/chaincode/java  Examples:  LinkExample – Invoking one chaincode from another  MapExample – Simple map storage  RangeExample – Query storage with range  SimpleExample – Transferring value using Arguments  TableExample – C/R/D Using underlying storage tables 15
  • 16. Useful links  https://docs.docker.com/engine/installation/  https://docs.docker.com/engine/installation/linux/linux-postinstall/  Important on Linux if running Docker on boot  http://hyperledger-fabric.readthedocs.io  http://hyperledger-fabric.readthedocs.io/en/latest/starter/fabric-starter-kit/  https://github.com/jbowkett/zug-hackathon  https://github.com/hyperledger/fabric/tree/master/examples/chaincode/java  https://gradle.org/documentation/ 16