Starting from:

$30

Blockchain Project 2 -Solved

 Creating Smart contract for Permissioned Blockchain Systems 
This document contains a description of the tasks required to complete the PROJECT 2 assignment. 
This project will help you familiarize yourself with a private blockchain ecosystem by understanding, 
examining, writing, and executing smart contracts (Chaincodes) for a simple-use case of product 
records management. 
For this project, you will be working with the Hyperledger Fabric blockchain framework. Hyperledger 
is an open-source community focused on developing a suite of stable frameworks, tools, and libraries 
for enterprise-grade blockchain deployments. Hyperledger was established under the Linux 
Foundation. It serves as a neutral home for various distributed ledger frameworks including 
Hyperledger Fabric. Hyperledger Fabric is an open-source enterprise-grade private distributed ledger 
technology(DLT)platform, designed for use in enterprise contexts, that delivers some key 
differentiating capabilities over other popular distributed ledgeror blockchain platforms. Read more about 
Hyperledger Fabric on this link (https://hyperledger-fabric.readthedocs.io/en/release-1.4/whatis.html) 
➔ 
Required Software, if you want to create Blockchain Network locally and test smart 
contract on local system. 
l NodeJS 
l NPM 

Hyperledger Fabric
 
Setup
 
Smart Contract 
Smart contracts are mediums that are used to manage digital assets, store information, make decisions, 
and interact with other smart contracts. Hyperledger Fabric smart contracts usually manipulate JSON
like digital assets (arrays of key-value pairs) of any complexity. For every digital asset we want to 
store on a Hyperledger Fabric blockchain, there must be a smart contract in place for its management 
(writing data on the blockchain, updating, reading,etc.). 
In Hyperledger Fabric smart contracts are packaged into chaincodes and the chaincode is deployed on 
the Hyperledger Fabric blockchain. Chaincode is a term local to the Hyperledger Fabric framework 
and, for now, you can think of chaincode and smart contract as synonyms. To read more about 
chaincode in Hyperledger Fabric, visit the link.Writing smart contacts on Hyperledger Fabric network requires three classes: State class, Contract 
Class, Statelist class. 
➢ State class: Used to represent the asset on which the smart contract will be applied 
➢ Contract class: Used to define methods that are set up in the contract 
➢ State List class: Used to interact with the blockchain network. In this class, we define methods to add, 
get and update data on the blockchain network. 
To 
learn more about writing smart contracts using Hyperledger Fabric visit the 
link(https://hyperledger-fabric.readthedocs.io/en/release-1.4/chaincode4ade.html) 
In this project, you will be writing a smart contract to manage patient records over the Hyperledger 
Fabric. For this project, you will receive a code base that needs to be completed so that the contract is 
fully functional. You will be in charge of complementing several smart contract functions. 
 1. A function that creates patient records on the Hyperledger Fabric blockchain network. 
 2. A function that updates one attribute of a patient record. 
 3. Several functions allow reading/accessing the information about the patient using CouchDB
enabled data indexing and querying. 
In the provided code base you are provided with a NodeJS smart contract and you only need to 
complete functions in the following javascript files. 
 1. patientrecord.js: Reflects the blueprint of a single patient record and consists of the following 
attributes: 
 ◦ username 
 ◦ name 
 ◦ dob 
 ◦ gender 
 ◦ blood_type 
 2. patientrecordcontract.js: Responsible for accessing/updating/adding to the state database of 
Hyperledger Fabric. 
Now that you are familiar with the concepts behind Hyperledger Fabric and smart contracts, we have 
examined the use-case behind this project, established what type of digital record our smart contract is 
supposed to manage (and what attributes it holds), and continue with executing the following tasks. 
You need to complete the code base mentioned as TASK-X in the files.CTX IS ALWAYS THE FIRST 
PARAMETER IN A FUNCTION – DO NOT REMOVE IT.✔ Task 1 – Complete the getPatientByKey function 
Instructions 
The getPatientByKey receives a patient’s username and name. These two attributes together make a 
composite key for this record, and by this key the record is searchable in the blockchain. The first line 
of this function creates such a key for you to use in the rest of the function. Complete the code of the 
getPatientByKey function so that it returns the record of the patient for the created composite key. Use 
a function from the PatientRecordList class, which can be referenced from inside the getPatientByKey 
by calling ctx.patientRecordList.[functionName], such as ctx.patientRecordList.addPRecord. 
✔ Task 2 – Complete the getter and setter methods for lastCheckupDate field of the 
PatientRecord. 
Instructions 
Write code to add lastcheckupDate field to the PatientRecord. Complete these tlastCheckupDate 
function to set the lastCheckupDate field of the patientRecord. This function takes date as input and 
assigns it to the lastCheckupDate field. Complete the get lastCheckupDate function to return the 
lastCheckupDate field of thePatientRecord. 
✔ Task 3 – Complete updateCheckupDate function 
Instructions 
updateCheckupDate function receives the patient's username, name, transaction context and 
checkupDate. To update the patient’s last checkup date first retrieve the patient record by calling the 
ctx.patientRecordList.getPRecord. Update the lastCheckupDate to the PatientRecord using the 
function implemented in task 2. Update the PatientRecord on the ledger by calling 
ctx.patientRecordList.[Function Name] 
Sample Code 
Precord = await transaction_context.patientRecordList.getPRecord(precordKey); 
Precord.[Setter Function Defined in Task 2](last_checkup_date); 
Await ctx.patientRecordList.updatePRecord(precord); 
➔ Task 4 – 6 PREREQUISITES (CouchDB-enabled indexed querying) 
For these tasks you will 
 • Build the indexes on the top of the attributes that are defined in the PatientRecordclass. 
 • Write the query processing transactions functions that make use of the indexes defined. For writing 
indexes follow the path:Project_foldername>META-INF>statedb>couchdb>indexes 
The indexes folder contains genderIndex.json, you need to complete/create 
1. blood_typeIndex.json 
After defining the indexes, complete the query functions in the PatientRecordContract class. 
✔ Task 4 – Complete queryByGender function 
Instructions 
This function takes transaction context and gender as input. Construct the JSON string object for the 
genderIndex. Use helper functions from the PatientRecordContract class to query the database and 
return the list of records with that gender. 
✔ Task 5 – Complete querybyBlood_Type function. 
Instructions 
This function receives transaction context and blood_type as input. Construct the JSON string object 
for the blood_typeIndex. Use helper functions from the PatientRecordContract class to query the 
database and return the list of records with the given blood_type. 
✔ Task 6 – Complete querybyBlood_Type_Dual function. 
Instructions 
This function takes the transaction context and two blood types as input. Construct the JSON string 
object for the index of two blood_types. To make sure the query will actually use the index that you 
have created you must specify the use_index attribute inside the queryString. Once the queryString is 
built, pass it to the queryWithQueryString. Use the helper functions of the PatientRecordContract 
class to query the database and return a list of records with the given blood_types. 
✔ Task 7 – Complete the unknownTransaction function 
Instructions 
In smart contracts, it is possible to get afunction’s name wrong when calling the contract. In this case, 
the smart contract usually returns an error.A good practice is to implement a certain default function 
that will, instead, execute every time a function is invoked that does not exist in the smart contract. 
This default function is called unknown Transaction and it receives the transaction context only. The 
purpose of this function is to throw an error when a function called doesn’t exist in the contract. 
Complete the function to return a string message [“Function namemissing”] 
To read more about transactions handlers refer to: 
https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/transactionhandler.html

More products