DecisionsDev / sample-blockchain-vehicle-lifecycle

This sample illustrates how IBM ODM can be used with HyperLedger Fabric and Composer to implement rule-based Smart Contracts
Apache License 2.0
20 stars 26 forks source link
ibmodm odmdev-blockchain

Introduction

This sample illustrates how we can use IBM Operational Decision Manager (ODM) to implement rule-based Smart Contracts in the context of an HyperLedger Fabric Blockchain application.

This sample is derived from the Vehicle Lifecycle demo of HyperLedger Composer and enhance it with rule-based decisions taken by the Smart Contracts. More information about this demo can be found here: https://www.youtube.com/watch?v=IgNfoQQ5Reg and source can be found here: https://github.com/hyperledger/composer-sample-networks/tree/master/packages/vehicle-lifecycle-network

This readme contains the instructions to go from the installation of the software to the execution of the demo. Please start with '1/ Pre-requisites' section and go down to '7/ Running the Vehicle Lifecycle demo'.

Content

The sample is made of several projects. Each project contains its own README with more detail information about what it contains.

odm-runtime

Is a project that allows to build and run an ODM docker image that contains the ODM Rule Execution Server (RES) and a Database. The RES hosts the ODM rule engine and provide the interface to execute Decision Services.

odm-deployer

Is a NodeJS service that acts as a facade to the RES to receive Ruleapp deployment commands from the Blockchain application.

odm-deployer-webapp

Is a Java WebApp that can be packaged in the same Liberty Server as a the RES to provide a facade to the RES to receive Ruleapp deployment commands from the Blockchain application.

You will be using either odm-deployer or odm-deployer-webapp to provide this facade, not both.

vehicle-lifecycle

Is a HyperLedger Composer sample, derived from the one developed by the Composer Team. The JavaScript transaction processors in this sample are invoking decisions that are executed as Decision Services in ODM.

vehicle-lifecycle-cli

Is a command line application invoking Composer CLI to perform various operations like deploying RuleApps and submitting transactions.

vehicle-lifecycle-xom

Is a Java implementation of the model used in the ODM Decision Service. Its implementation is derived from the model used in the vehicle-lifecycle Composer Sample.

vehicle-lifecycle-decision-service

Is the ODM Decision Service that implements the decision logic invoked from the Smart Contracts of the vehicle-lifecycle Blockchain application.

Installation

1/ Pre-requisites

This sample can only work on Linux and MacOS. If you are using a Windows box, you need to install a Ubuntu Virtual Machine.

You need to have IBM ODM 8.9.0+ installed on your machine. Please refer to your company-specific instructions to have access to this product and install it on your computer. Note that it is not necessary to fully configure ODM on your machine as the only components that will be used are Rule Designer and the RES jar files used to build the RES docker image.

The following prerequisites are required:

Refer to the "Before you begin" section in https://hyperledger.github.io/composer/latest/installing/development-tools.html to make sure you have all the pre-requisites to run HyperLedger Fabric and Composer on your machine.

2/ Setting up HyperLedger Fabric V1.1 & Composer 0.19.1

Please refer to https://hyperledger.github.io/composer/latest/installing/development-tools.html to install and run HyperLedger Fabric and Composer. Tools to run Fabric should have been installed in a fabric-tools directory.

Following the steps described in this page should allow you to install Composer (0.19.1 or subsequent version of this release stream) on your machine, install Fabric images and run Fabric on your machine as Docker containers.

Use composer -v to check the version of Composer that has been installed.

Note that downloadFabric.sh and createPeerAdminCard.sh should be done only once, the first time.

Go to fabric-tools directory and use startFabric.sh to start HyperLedger Fabric processes. (You can use stopFabric.sh to stop Fabric on your machine).

At this point you should have HyperLedger Fabric 1.1 running and Composer 0.19.1 ready to deploy Composer applications.

Use docker ps -a to check that you have the proper containers up and running:

$ docker ps -a
CONTAINER ID        IMAGE                                                                                                                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
cfdc706c3a77        smartcontract/odm-runtime:8.9.0                                                                                       "/script/runserver.sh"   17 minutes ago      Up 17 minutes       9080/tcp, 0.0.0.0:9060->9060/tcp, 9443/tcp       odm-runtime
41f2dcfc28f8        smartcontract/odm-deployer:1.0.0                                                                                      "npm start"              17 minutes ago      Up 18 minutes       0.0.0.0:1880->1880/tcp                           odm-deployer
1bed2bb3dc01        hyperledger/fabric-peer:x86_64-1.1.0                                                                                  "peer node start"        17 minutes ago      Up 18 minutes       0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer0.org1.example.com
0b79eff2ced6        hyperledger/fabric-orderer:x86_64-1.1.0                                                                               "orderer"                17 minutes ago      Up 18 minutes       0.0.0.0:7050->7050/tcp                           orderer.example.com
dae6557501ec        hyperledger/fabric-couchdb:x86_64-0.4.6                                                                               "tini -- /docker-ent…"   17 minutes ago      Up 18 minutes       4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp       couchdb
efc2d5480841        hyperledger/fabric-ca:x86_64-1.1.0                                                                                    "sh -c 'fabric-ca-se…"   17 minutes ago      Up 18 minutes       0.0.0.0:7054->7054/tcp                           ca.org1.example.com

Next step is to augment this installation with ODM capabilities.

3/ Setting-up IBM ODM with HyperLedger Fabric and Composer

<FIRST TIME ONLY>

</FIRST TIME ONLY>

Refer to the README in odm-runtime project for more information

The next step is to a run a deployment facade as a companion process to the RES. Called ODM Deployer, this application comes from the 'odm-deployer' project.

Refer to the README in the odm-deployer project for more information.

At this point, the whole Blockchain infrastructure is up-and-running and ready to receive Blockchain applications.

The RES deployed in the Blockchain network is still empty at this point. It must but populated with the XOM of the vehicle lifecycle application and the Decision Service used by the Smart Contracts of this application.

The next step will be to deploy the vehicle lifecycle Hyperledger Composer application.

4/ Deploying the vehicle-lifecycle Composer application

Refer to the README in vehicle-lifecycle directory for more information about this Composer application.

5/ Setting-up an Eclipse environment for ODM projects

The ODM application is packaged as 2 eclipse projects that can be edited with ODM Rule Designer: vehicle-lifecycle-xom and vehicle-lifecycle-decision-service

You need to import them in an Eclipse workspace. You need to perform these instructions only once.

The 2 projects should build without errors. Warnings can be ignored.

Note: if you are copying these project in a different location, the 'npm run deployXom' and 'npm run deployRuleapp' can't be use. Please refer to the 'package.json' file in 'vehicle-lifecycle-cli' directory to see how to point these commands to a different location.

6/ Deploying the XOM

A deployment feature has been integrated in the vehicle lifecycle demo to deploy the XOM and the Decision Services through the Blockchain.

To deploy the XOM throught the Blockchain, you should perform the following actions:

<FIRST TIME ONLY>

<FIRST TIME ONLY>

This operation needs to be done each time you modify the XOM of the decision service.

Refer to the README in vehicle-lifecycle-cli directory for more information about this command.

7/ Deploying the Decision Service

The Decision Service is the packaging of the vehicle lifecyle business rules exposed as a REST service invoked from the Smart Contracts. It must be deployed in the RES associated to all nodes of the Blockchain network.

Like the XOM, the Decision Service is deployed through the Blockchain, leveraging a deployment feature integrated in the demo.

In the previous step, you should have generated the ruleapp supporting the vehicle lifecycle decision service using Rule Designer. The ruleapp is the vehicle_lifecycle_ds.jar generated in the output directory of the vehicle-lifecycle-decision-service project.

This operation needs to be done each time you modify the business rules of the application.

When you change the rules, you need to increment the version number of the ruleset. You can do it in Rule Designer:

Refer to the README in vehicle-lifecycle-cli directory for more information about this command.

8/ Running the Vehicle Lifecycle demo

Refer to the README in vehicle-lifecycle-cli directory to initialize the application and run a demo scenario that illustrates the application of the business rules when suspicious transactions are generated.

Assuming the XOM and the Ruleapp have been deployed, you can run the full demo from a fresh model using the following command from the vehicle-lifecycle-cli directory:

The message

│ Cross Border Suspicious Transfer: please double check buyer regulation │ 

generated in your display is generated from the business rules of the decision service invoked from a Smart Contract.

9/ End

You're all set. Refer to the README in vehicle-lifecycle-cli for more information about the demo scenario.

All Steps and Demo Scenario summary

Here is a summary of all steps to run the demo.

1/ Run Fabric 1.0

2/ Run ODM RES

3/ Run ODM Deployer

4/ Deploy vehicle-lifecycle Business Network

5/ Deploy the XOM via Blockchain (provided the XOM has been generated by Rule Designer before)

6/ Deploy the Ruleapp via Blockchain (provided the Ruleapp has been generated by Rule Designer before)

7/ Setup the data of the Business Network

8/ Run the suspicious transactions

Assuming the XOM and the Ruleapp have been deployed, you can run the full demo from a fresh model using the following command from the vehicle-lifecycle-cli directory: npm run demo

Step 5 to 8 can be all done together using the following command from the vehicle-lifecycle-cli directory: npm run deployAndRunDemo.

License

Apache 2.0

Notice

© Copyright IBM Corporation 2017.