Blockchain Report Final
Blockchain Report Final
I ABSTRACT vii
1 INTRODUCTION 1
1.1SYNOPSIS 1
1.2 SCOPE 3
2 LITERATURE SURVEY 6
SYSTEM ANALYSIS 9
4.1.5 GANACHE 16
4.1.6 METHODS 17
4.2 METAMASK 17
4
4.2.1 METAMASK WALLET 17
4.3 ETHERUM 18
4.4.2 SHA-512 18
4.5.2 COMPUTERS/SERVERS 20
4.5.3 GRAPHICS PROCESSING
UNIT(GPU) 21
4.5.4 STORAGE 21
v
5.2 DISTRIBUTOR MODULE 24
6 RESULTS 30
8 REFERENCES 71
vi
ABSTRACT:
vii
LIST OF FIGURES
4.2 20
RFID
4.3 Camera 20
4.4 Laptop 20
4.5 Processor 20
4.6 GPU 21
4.7 SSD 22
4.8 HDD 22
viii
5.4 Consumer Module 26
ix
LIST OF ABBREVATIONS
MM Manufacture Manager
PM Product Manager
x
CHAPTER 1
INTRODUCTION
1.1 SYNOPSIS
1. Background:
The proliferation of counterfeit goods is fueled by advancements in
technology, globalization, and the anonymity of online marketplaces.
Counterfeiters exploit vulnerabilities in supply chains, manufacturing processes,
and consumer trust to flood the market with fake products that are often
indistinguishable from genuine ones. Traditional methods of counterfeit
detection, such as manual inspection and authentication, are becoming
increasingly ineffective in the face of sophisticated counterfeit operations.
2. Objectives:
The primary objective of this project is to develop a comprehensive
system for the identification and mitigation of counterfeit products across
various industries. Key objectives include:
Utilizing advanced technologies such as machine learning, computer
vision, and blockchain to enhance counterfeit detection capabilities.
Analyzing and integrating multiple data sources, including product
attributes, supply chain information, and consumer feedback, to
improve the accuracy and reliability of counterfeit identification.
Establishing partnerships and collaboration with stakeholders,
including manufacturers, regulatory agencies, law enforcement, and
consumers, to facilitate information sharing and coordinated efforts
in combating counterfeit goods.
Developing scalable and adaptable solutions that can be
1
implemented across different sectors and regions, addressing the
diverse challenges posed by counterfeit products in the global
marketplace.
3. Methodology:
The methodology encompasses a systematic approach to develop a
counterfeit product identification system. It begins with thorough research and
data collection, followed by data preprocessing and feature engineering to
extract meaningful attributes indicative of counterfeit products. Machine
learning algorithms are then employed for model development, alongside the
integration of computer vision techniques for visual analysis. Blockchain
technology is utilized for secure product verification. Model evaluation and
validation are conducted rigorously, with a focus on metrics such as accuracy
and robustness. Upon successful validation, deployment and integration with
existing systems follow, with continuous monitoring and improvement
mechanisms implemented to adapt to evolving threats. Documentation and
knowledge sharing ensure transparency and facilitate future replication and
advancement in counterfeit detection methodologies
4.Implementation:
The project will adopt a multi-disciplinary approach, combining
expertise in technology, data analytics, supply chain management, and
regulatory compliance. Leveraging insights from research and industry best
practices, the project team will design and implement a robust counterfeit
detection system that leverages the strengths of each technology and
methodology. Key components of the approach include:
6.Motivation:
The motivation behind this project stems from the urgent need to combat
the growing threat of counterfeit products and protect both consumers and
businesses from their adverse effects. Counterfeit goods not only erode
consumer confidence but also pose serious health and safety risks, particularly
in industries such as pharmaceuticals and automotive parts. Moreover, the
economic impact of counterfeiting is staggering, with billions of dollars lost
annually due to lost revenue, legal costs, and damage to brand reputation.
7.Conclusion:
In conclusion, the fake product identification project represents a
concerted effort to address the pervasive problem of counterfeit goods through
innovation, collaboration, and technology-driven solutions. By leveraging
advanced technologies, data analytics, and stakeholder engagement, the project
seeks to empower businesses and consumers with the tools and knowledge
needed to identify and mitigate the risks posed by counterfeit products,
ultimately fostering a safer, more transparent, and trustworthy marketplace for
all.
1.2 SCOPE
The project scope is multifaceted, encompassing a comprehensive
approach to counterfeit product identification that spans across various
industries, technological domains, stakeholder collaborations, global
considerations, scalability requirements, continuous improvement strategies,
and ethical and legal considerations.
1. Multi-Industry Focus:
The project aims to address counterfeit detection challenges across a wide
range of industries, including but not limited to electronics, pharmaceuticals,
fashion, automotive, and consumer goods. Each industry presents unique
counterfeit threats and requires tailored detection methodologies.
3
2. Technological Integration:
Integration of cutting-edge technologies such as machine learning,
computer vision, and blockchain forms the cornerstone of the project. These
technologies synergistically complement each other to enhance counterfeit
detection capabilities, ensuring robustness, accuracy, and scalability across
different product categories and market segments.
3. Data-Driven Approach:
The project adopts a data-driven approach, leveraging diverse data
sources to train and validate counterfeit detection models. These sources include
product specifications, distribution channels, market trends, consumer feedback,
historical counterfeit incidents, and more. By harnessing the power of big data
analytics, the project aims to extract meaningful insights and patterns crucial for
accurate counterfeit identification.
4. Stakeholder Collaboration:
Collaboration with a wide range of stakeholders is fundamental to the
success of the project. These stakeholders include manufacturers, regulatory
agencies, law enforcement, retailers, industry associations, and consumers. By
fostering open communication and collaboration, the project seeks to gather
insights, validate solutions, and foster collective action against counterfeit
goods.
6. Further Enhancements:
Continuous improvement is a core principle guiding the project's
implementation. Mechanisms for ongoing monitoring, feedback collection, and
model refinement are established to adapt to evolving counterfeit threats and
market dynamics. By embracing a culture of continuous learning and
4
adaptation, the project aims to ensure sustained effectiveness and relevance over
time. The scope of the fake product identification project encompasses the
development and implementation of a comprehensive system to detect
counterfeit goods across various industries. It involves leveraging advanced
technologies like machine learning, computer vision, and blockchain, alongside
collaboration with stakeholders such as manufacturers, regulatory agencies, and
consumers. The project aims for a global reach, with considerations for
scalability, adaptability, and continuous improvement. Adherence to ethical and
legal standards is paramount throughout the project lifecycle. Overall, the
project seeks to combat the proliferation of counterfeit products, safeguard
consumer trust, and uphold the integrity of the global marketplace.
5
CHAPTER 2
LITERATURE SURVEY
The purpose of the Literature Survey is to give a brief overview and also to
develop complete knowledge about the reference papers. The goal of the
Literature Survey is to completely specify the technical details related to the
main project concisely and unambiguously.
7
4.Paper:"Blockchain and Artificial Intelligence for Product Authentication
and Traceability in Supply Chains" by Vina Lomte (2023)
Description: In this study, the authors propose an integrated approach that
combines Blockchain Technology (BCT) and Artificial Intelligence (AI) to
enhance product authentication and traceability within supply chains. BCT
ensures transparency by securely recording the entire supply chain history,
while AI analyzes data patterns and predicts risks. The proposed framework
aims to drive value delivery, improve sustainability, and prevent fraud in
modern supply chains.
Advantages:
1. Explores synergies between blockchain and AI technologies, offering
insights into their combined potential for counterfeit detection and supply
chain traceability.
2. Provides a forward-looking perspective on emerging trends in supply
chain management.
Disadvantages:
1. May lack comprehensive evaluation of proposed solutions and their real-
world applicability.
2. Some technical challenges and implementation barriers may not be fully
addressed.
8
CHAPTER 3
SYSTEM ANALYSIS
Disadvantages:
Subjectivity: Manual verification processes are subjective and prone to
human error, leading to inconsistencies in product authentication and
traceability.
Time-Consuming: Manual inspection can be time-consuming, especially
for large volumes of products, resulting in delays and inefficiencies in
supply chain operations.
Limited Scalability: Manual verification systems may struggle to scale
effectively with growing product volumes and supply chain complexity,
leading to bottlenecks and operational challenges.
2. Paper-Based Documentation Systems:
Paper-based documentation systems involve the use of physical records
and documents to track product movements, transactions, and authenticity
verification. These systems often rely on handwritten logs, invoices, and
certificates to record supply chain activities and product information.
Advantages:
Accessibility: Paper-based documentation systems are accessible to users
with basic literacy skills and do not require specialized technology or
training.
Low Cost: Paper-based systems are cost-effective to implement and
maintain, as they primarily involve the use of paper, pens, and filing
cabinets.
9
Disadvantages:
Prone to Loss and Damage: Paper records are susceptible to loss, damage,
and deterioration over time, leading to data loss and inconsistencies in
supply chain documentation.
Lack of Real-Time Information: Paper-based systems lack real-time
visibility into supply chain activities, making it challenging to track
product movements and identify counterfeit risks promptly.
Limited Security: Paper documents are vulnerable to theft, tampering,
and unauthorized access, compromising the integrity and confidentiality
of supply chain information.
10
3.2 Proposed system:
As most people shop from remote places, there is the possibility of
getting Counterfeit or fake products. This fake product affects the customer as
well as company name. They have to face major loss from this situation. There
is no right solution before dealing with this problem. As easily copied barcodes
there is no guarantee system, or a good solution to distinguish counterfeit
products from real products. Blockchain is the most promising technology
emerging in recent years that can help to solve that type of problem. Blockchain
Technology can be used to monitor and keep track of shipped products so that
users only get the right product. The main purpose of the project was to bring
transparency about the product during customer purchasing and help customers
to see if the product they are buying is original or counterfeit easily
MODULES:
Type of Logins: Three Type of login. Manufacturer, User and Admin.
Registration: User have to register to become a part of project.
Login: User have to login themself to access in project.
Add Product : After Manufacturer Login Manufacturer can add product
using java script and smart Contract in Block chain Database.
11
Generate QR Code: All Product data display in admin side and admin verify
that product and generate qr code of that related product using python and add
in block chain database.
Scan QR Code: User Scan that QR code using Android Application And then
Display All information of product in our mobile screen.
12
In conclusion, the proposed system for counterfeit product identification,
leveraging blockchain technology integrated with QR code systems, presents a
robust and innovative solution to combat counterfeit infiltration in supply
chains. By harnessing the decentralized and immutable nature of blockchain,
coupled with the accessibility and versatility of QR codes, the system offers
transparent, secure, and efficient product authentication and traceability
mechanisms. Through the registration of products on the blockchain and the
generation of unique QR codes, stakeholders gain real-time access to product
information and authenticity status, empowering them to make informed
decisions and mitigate counterfeit risks effectively. The system enhances supply
chain transparency, facilitates efficient detection of counterfeit products, and
strengthens traceability efforts across the entire supply chain. Continuous
monitoring, feedback mechanisms, and collaboration with industry partners
ensure the system's scalability, reliability, and widespread adoption. Overall, the
proposed system represents a significant advancement in supply chain integrity,
consumer protection, and counterfeit mitigation efforts, contributing to a safer
and more trustworthy marketplace for all stakeholders involved.
13
CHAPTER 4
SOLIDITY:
3.ERC20: The ERC20 standard interface for fungible tokens on the Ethereum
blockchain. This library provides a common set of functions and events for
managing token balances, transfers, and approvals.
4.1.5 GANACHE
Ganache is a personal blockchain for rapid Ethereum and Corda
distributed application development. You can use Ganache across the entire
development cycle; enabling you to develop, deploy, and test your dApps in a
safe and deterministic environment. Ganache comes in two flavors: a UI and
16
CLI. Ganache UI is a desktop application supporting both Ethereum and Corda
technology. The command-line tool, ganache-cli (formerly known as the
TestRPC), is available for Ethereum development. Ganache is used for setting
up a personal Ethereum Blockchain for testing your Solidity contracts. It
provides more features when compared to Remix. You will learn about the
features when you work out with Ganache. Before you begin using Ganache,
you must first download and install the Blockchain on your local machine
4.1.6 METHODS
Array scalars have exactly the same methods as arrays. The default
behavior of these methods is to internally convert the scalar to an equivalent 0-
dimensional array and to call the corresponding array method. In addition math
operations on array scalars are defined so that the same hardware flags are set
and used to interpret the results as for ufunc, so that the error state used for
ufuncs also carries over to the math on array scalars.
4.2 METAMASK
MetaMask is a browser plugin that serves as an Ethereum
wallet, and is installed like any other browser plugin. Once it's installed, it
allows users to store Ether and other ERC-20 tokens, enabling them to
transact with any Ethereum address.
4.2.1 METAMASK-WALLET
MetaMask’s open platform also plays a key role in promoting
Ethereum-based dApp development for coders and technologists. For
developers building a dApp, Metamask is pre- loaded with fast connections
to Ethereum and several test networks via Infura. These built-in connections
allow developers to begin building a new dApp on Ethereum without the
need to set up and run a full network node. This can be helpful for
bootstrapped entrepreneurs looking to build immediately, whether they are
creating a simple browser-friendly user interface (UI) or a full-fledged,
mainnet-ready dApp that will support an entirely new decentralized
marketplace.
4.3 ETHEREUM(ETH)
Ethereum is a permissionless, non-hierarchical network of computers
(nodes) that build and come to a consensus on an ever-growing series of
"blocks", or batches of transactions, known as the blockchain. Each block
contains an identifier of the chain that must precede it if the block is to be
considered valid. Whenever a node adds a block to its chain, it executes the
transactions in the block in the order they are listed, thereby altering the ETH
balances and other storage values of Ethereum accounts. These balances and
values, collectively known as the "state", are maintained on the node
separately from the blockchain, in a Merkle tree.
4.4 SHA-256
Secure Hashing Algorithm (SHA) - 256 is the hash capacity and
mining calculation of the Bitcoin convention, alluding to the cryptographic
18
hash work that yields a 256 pieces in length esteem. It directs the creation
and the executives of addresses, and is likewise utilized for exchange check.
Bitcoin utilizes twofold SHA-256, implying that it applies the hash
capacities two times.
The calculation is a variation of the SHA-2 (Secure Hash Algorithm
2), created by the National Security Agency (NSA). SHA-256 is likewise
utilized in well known encryption conventions.
19
FIGURE 4.1. QR SCANNER
4.5.2 Computer/Server:
Processor: The processor is the brain of the computer/server and plays a
crucial role in the system's performance. Look for a multicore processor with a
high clock speed, such as an Intel Core i7 or higher. The higher the number of
cores, the better the system can handle parallel processing tasks, and a higher
clock speed ensures faster execution of computations.
NVIDIA GPUs: NVIDIA GPUs are widely used for deep learning tasks
due to their excellent compute performance and support for popular deep
learning frameworks like YOLOv5. GPUs from the NVIDIA GeForce or
NVIDIA Tesla series are recommended choices. Look for a GPU with a suitable
amount of VRAM (video memory), such as 8 GB or more, as it directly impacts
the model's capacity and the size of input images the system can handle
efficiently.Compute Power: GPUs with a high number of CUDA cores and high
compute capability deliver faster and more efficient parallel processing. More
CUDA cores allow for parallel execution of computations, while higher
compute capability indicates the GPU's overall processing power. These factors
contribute to improved performance and faster inference times when running
the YOLOv5 algorithm
4.5.3. Storage:
High-capacity Storage: The vehicle number plate recognition system
requires sufficient storage capacity to store various types of data. Consider
using a high-capacity solid-state drive (SSD) or multiple hard disk drives
(HDDs) with a minimum capacity of 1 TB. This ensures ample space to store
the captured images, video data, datasets, intermediate results, and any
additional files generated during the recognition process. Having ample storage
capacity avoids the need for frequent data purging or storage management.
22
CHAPTER 5
23
imposing cost for enrollment. However, if our MM might be constructed by
introducing registering fee like Namecoin, there could be a chance for
counterfeiters to illegally register themselves as genuine companies by paying
the appropriate fees. However, it still might be possible to make MM
decentralized. This is one of the open questions regarding the blockchain-
based POMS.
Transaction
Complete
FIGURE 5.2.DISTRUBUTOR MODULE
This describes the receive Product() which is for the receiver to confirm
the arrival of the product. The function checks that the claimed EPC is
specified by the current owner and that the status of EPC is Shipped. If this is
True, the ownership is successfully transferred to the message sender’s
address. In addition, the manufacturer of the product gives incentive,some
24
ETH, to the message sender as a reward for obeying the protocol. Since
Ethereum requires an execution fee for each transaction, when the current
owner sends a product to the recipient, he/she might be reluctant to issue a
transaction ship Product(). To avoid this kind of situation, the following
procedure is introduced. If the ownership transfer has been successfully
completed, a financial reward transfer Reward is paid back to the previous
owner by the product’s manufacturer. The reason why the manufacturer
should pay such reward is that in this way counterfeits can be detected and
thus identified thanks to their cooperation. It is noted that, in order to avoid the
case where two parties repeatedly transfer back and. Selecting appropriate
values for transfer Reward and MAXTRANSFER will depend on the actual
investment made by the manufacturer for the implementation of POMS.
However, such topic is outside the scope of our current research, and thus it
will not be considered further.
New
Blockchain
Product Ready To
Sell
Retailer after the registration is done can see the product details such as
the manufacturer where the manufacturer has stored after the scanning process
take place in this process in back the execution take place where all the
product is scanned and the stored location is sent to the verification of the
product where there are many information are stored in the hub and the
following new blockchain is created and the following product is ready to sell
and given to the following consumers.
25
5.4 CONSUMER MODULE
26
maintaining transaction records. Smart contracts, deployed on the blockchain,
enforce business logic governing product registration, authentication, and
supply chain transparency. Backend services manage interactions between
frontend applications and the blockchain network, overseeing processes like
product registration, transaction processing, and QR code validation.
Additionally, a database management system stores non-blockchain data such
as user accounts and transaction logs, ensuring data integrity and accessibility.
27
The use case diagram for the integration of blockchain with QR code
systems illustrates the various interactions and functionalities available to
different actors within the system. Actors include manufacturers, distributors,
retailers, and consumers, each with specific roles and access privileges.
The use case diagram depicts these interactions through various use
cases such as "Register Product," "Generate QR Code," "Verify Authenticity,"
and "Update Product Status." These use cases illustrate the core functionalities
available to each actor, facilitating transparent and secure product
authentication throughout the supply chain.
28
The Data Flow Diagram (DFD) for the integration of blockchain with
QR code systems illustrates the flow of data within the system and the
processes involved in managing product information and authentication. The
diagram typically consists of four main components: external entities,
processes, data stores, and data flows.External entities represent actors
interacting with the system, such as manufacturers, distributors, retailers, and
consumers. Processes depict the actions or operations performed on the data,
including product registration, QR code generation, authentication
verification, and product status updates. Data stores represent repositories
where data is stored and retrieved, such as databases storing product
information, transaction logs, and blockchain records. Data flows depict the
movement of data between processes, external entities, and data stores,
representing the flow of information within the system.
29
CHAPTER 6
RESULT
30
CHAPTER 7
CONCLUSION
31
APPENDIX-SOURCE CODE
MIGRATION.SOL
contract Migrations {
address public owner = msg.sender;
uint public last_completed_migration;
modifier restricted() {
require(
msg.sender == owner,
"This function is restricted to the contract's owner"
);
_;
}
PRODUCT.SOL
contract product {
uint256 sellerCount;
uint256 productCount;
struct seller{
uint256 sellerId;
bytes32 sellerName;
bytes32 sellerBrand;
bytes32 sellerCode;
uint256 sellerNum;
bytes32 sellerManager;
bytes32 sellerAddress;
}
mapping(uint=>seller) public sellers;
struct productItem{
32
uint256 productId;
bytes32 productSN;
bytes32 productName;
bytes32 productBrand;
uint256 productPrice;
bytes32 productStatus;
}
//SELLER SECTION
sellersWithManufacturer[_manufacturerId].push(_sellerCode);
}
33
for(uint i=0; i<sellerCount; i++){
ids[i] = sellers[i].sellerId;
snames[i] = sellers[i].sellerName;
sbrands[i] = sellers[i].sellerBrand;
scodes[i] = sellers[i].sellerCode;
snums[i] = sellers[i].sellerNum;
smanagers[i] = sellers[i].sellerManager;
saddress[i] = sellers[i].sellerAddress;
}
return(ids, snames, sbrands, scodes, snums, smanagers, saddress);
}
//PRODUCT SECTION
34
}
return(pids, pSNs, pnames, pbrands, pprices, pstatus);
}
//SELL Product
if(productCount>0) {
for(i=0;i<productCount;i++) {
if(productItems[i].productSN == _productSN) {
j=i;
}
}
}
pStatus = productItems[j].productStatus;
if(pStatus == "Available") {
productItems[j].productStatus = "NA";
productsWithConsumer[_consumerCode].push(_productSN);
productsSold[_productSN] = _consumerCode;
}
}
function queryProductsList(bytes32 _sellerCode) public view returns(uint256[]
memory, bytes32[] memory, bytes32[] memory, bytes32[] memory, uint256[] memory,
bytes32[] memory){
bytes32[] memory productSNs = productsWithSeller[_sellerCode];
uint256 k=0;
35
bytes32[] memory pnames = new bytes32[](productCount);
bytes32[] memory pbrands = new bytes32[](productCount);
uint256[] memory pprices = new uint256[](productCount);
bytes32[] memory pstatus = new bytes32[](productCount);
36
smanagers[k] = sellers[i].sellerManager;
saddress[k] = sellers[i].sellerAddress;
k++;
break;
}
}
}
//Verify
INITIAL_MIGRATION.JS
37
DEPLOY_CONTRACT.JS
const Migrations = artifacts.require("Migrations");
ADDPRODUCT.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/qr_code_box.css">
</head>
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
</form>
</div>
38
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
</section>
<section>
<div class="container">
<h2>Add Product</h2>
<div class="matrix">
<table width="100%">
39
<tr width="100%">
<td width="15%" align="center">
<label for="manufacturerID">Manufacturer
ID</label>
</td>
<td width = "30%">
<input class="form-control"
id="manufacturerID" name="Manufacturer ID" type="text" />
</td>
<td width="15" align="center">
<label for="name">Product Name</label>
</td>
<td width = "30%" >
<input class="form-control" id="productName"
name="productName" type="text" />
</td>
</tr>
<tr width="100%">
<td width="15%" align="center">
<label for="productSN">Product SN:</label>
</td>
<td width = "30%">
<input class="form-control" id="productSN"
name="productSN" type="text" />
</td>
<td width="15" align="center">
<label for="name">Product Brand</label>
</td>
<td width = "30%" >
<input class="form-control" id="productBrand"
name="productBrand" type="text" />
</td>
</tr>
<tr width="100%">
<td width="15%" align="center">
<label for="productPrice">Product Price</label>
</td>
<td width = "30%">
<input class="form-control" id="productPrice"
name="productPrice" type="text" />
40
</td>
</tr>
</tr>
</table>
</div>
<div class="clear" > </div>
<div align="center">
<button type="submit" class="btn btn-warning btn-register"
id="register" onclick="fetchQR()">Add the Product</button>
</div>
<br></br>
</div>
</section>
<br></br>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/popper.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
<script src="js/productApp.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.min.js"></scri
pt>
<script>
41
var src;
var qrValue;
function fetchQR(){
qrValue = document.getElementById('productSN').value;
qrImage = document.querySelector(".qr-code");
qrImageResult = qrImage.querySelector("img");
src = qrImageResult.src = `https://api.qrserver.com/v1/create-qr-
code/?size=200x200&data=${qrValue}`;
downloadQrImg = document.getElementById('imgQR');
downloadQrBtn = document.getElementById('download');
downloadQrImg.removeAttribute('hidden');
downloadQrBtn.removeAttribute('hidden');
function saveImage(){
saveAs(src,qrValue);
downloadQrImg.setAttribute('hidden', 'hidden');
downloadQrBtn.setAttribute('hidden', 'hidden');
}
</script>
</body>
</html>
ADDSELLER.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
42
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
43
link">Seller</a></li>
<li class="nav-item"><a href="consumer.html" class="nav-
link">Consumer</a></li>
</ul>
</div>
</div>
</nav>
<!-- END nav -->
</section>
<section>
<div class="container">
<h2>Add Seller</h2>
<div>
<table width="100%">
CONSUMER.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
44
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
<section>
45
<div class="container">
<h2>
Consumer
</h2>
<h3>
Go to navigation bar to perform operations.
</h3>
</section>
<!-- END nav -->
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/popper.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
<script src="js/sellerDataApp.js"></script>
</body>
</html>
CONSUMERPURCHASEHISTORY.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
46
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
47
</div>
</div>
</nav>
<!-- END nav -->
<section>
<div class="container">
<h2>Consumer Product History</h2>
<div class="form-group">
<label for="consumerCode">Consumer Code</label>
<input type="text" class="form-control" id="consumerCode"
placeholder="Enter Consumer Code" name="consumerCode">
</div>
</section>
<section>
<div class="container">
<h2>Products purchased by consumer</h2>
<table class="table">
<thead>
<tr>
<th>Product SN</th>
<th>Seller Code</th>
<th>Manufacturer Code</th>
</tr>
</thead>
<tbody id="logdata">
</tbody>
</table>
<center><p>Your address is <b id="add"></b></p></center>
</div>
</section>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
48
<script src="js/popper.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
<script src="js/consumerPurchaseHistory.js"></script>
</body>
</html>
INDEX.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification </title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
</ul>
</div>
</div>
</nav>
<!-- END nav -->
</section>
49
<center><img
src="https://cdn.pixabay.com/photo/2017/10/15/09/47/block-chain-
2853054_1280.jpg" height="300" width="1350"></center>
<div class="col-md-6 d-md-flex justify-content-end mb-
md-0 mb-3">
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</section>
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
</body>
</html>
MANUFACTURER.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
50
</head>
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
51
Product</a></li>
<li class="nav-item "><a href="addSeller.html" class="nav-
link">Add Seller</a></li>
</ul>
</div>
</div>
</nav>
<!-- END nav -->
</section>
<section>
<div class="container">
<h2>
Manufacturer
</h2>
<h3>
Go to navigation bar to perform operations.
</h3>
</section>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/popper.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
</body>
</html>
QUERYSELLER.HTML
<!doctype html>
<html lang="en">
<head>
52
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
53
target="#ftco-nav" aria-controls="ftco-nav" aria-expanded="false" aria-
label="Toggle navigation">
<span class="fa fa-bars"></span> Menu
</button>
<div class="collapse navbar-collapse" id="ftco-nav">
<ul class="navbar-nav m-auto">
<li class="nav-item"><a href="index.html" class="nav-
link">Home</a></li>
<li class="nav-item "><a href="manufacturer.html"
class="nav-link">Manufacturer</a></li>
<li class="nav-item"><a href="seller.html" class="nav-
link">Seller</a></li>
<li class="nav-item"><a href="consumer.html" class="nav-
link">Consumer</a></li>
</ul>
</div>
</div>
</nav>
<!-- END nav -->
<section>
<div class="container">
<h2>Query Sellers</h2>
<div class="form-group">
<label for="email">Manufacturer Code</label>
<input type="email" class="form-control" id="manufacturerCode"
placeholder="Enter manufacturer Code" name="manufacturerCode">
</div>
</section>
<section>
<div class="container">
<h2>Sellers</h2>
<p>Following are the sellers registered through Blockchain Network</p>
<table class="table">
<thead>
54
<tr>
<th>ID</th>
<th>Name</th>
<th>Brand</th>
<th>Code</th>
<th>Number</th>
<th>Manager</th>
<th>Address</th>
</tr>
</thead>
<tbody id="logdata">
</tbody>
</table>
<center><p>Your address is <b id="add"></b></p></center>
</div>
</section>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/popper.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
<script src="js/sellerDataApp.js"></script>
</body>
</html>
SELLER.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
55
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
56
<li class="nav-item"><a href="sellProductSeller.html" class="nav-
link">Sell Product To Consumer</a></li>
<li class="nav-item"><a href="queryProducts.html" class="nav-
link">Products For sale</a></li>
</ul>
</div>
</div>
</nav>
<!-- END nav -->
<section>
<div class="container">
<h2>
Seller
</h2>
<h3>
Go to navigation bar to perform operations.
</h3>
</section>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/popper.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
<script src="js/sellerDataApp.js"></script>
</body>
</html>
SELLPRODUCTMANUFACTURER.HTML
</td>
<td width = "30%">
<input class="form-control" id="sellerCode"
name="sellerCode" type="text" />
</td>
</tr>
</tr>
57
</table>
</div>
<div class="clear"> </div>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/popper.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
<script src="js/sellProductManufacturer.js"></script>
<script src="https://unpkg.com/html5-qrcode"></script>
<script>
var decodedText = "Enter Product SN";
function docReady(fn) {
// see if DOM is already available
if (document.readyState === "complete"
|| document.readyState === "interactive") {
// call on next available tick
setTimeout(fn, 1);
} else {
document.addEventListener("DOMContentLoaded", fn);
}
}
docReady(function () {
var resultContainer = document.getElementById('qr-reader-results');
var lastResult, countResults = 0;
function onScanSuccess(decodedText, decodedResult) {
if (decodedText !== lastResult) {
++countResults;
lastResult = decodedText;
// Handle on success condition with the decoded message.
var audio = new Audio('beep.wav');
58
audio.play();
// console.log(`Scan result ${decodedText}`, decodedResult);
document.getElementById('qr-reader-results').innerHTML=decodedText;
document.getElementById("productSN").value =
decodedText;
//App.init(decodedText);
}
}
SELLPRODUCTSELLER.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
59
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
60
</section>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/popper.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
<script src="js/sellProductSeller.js"></script>
<script src="https://unpkg.com/html5-qrcode"></script>
<script>
var decodedText = "Enter Product SN";
function docReady(fn) {
// see if DOM is already available
if (document.readyState === "complete"
|| document.readyState === "interactive") {
// call on next available tick
setTimeout(fn, 1);
} else {
document.addEventListener("DOMContentLoaded", fn);
}
}
docReady(function () {
var resultContainer = document.getElementById('qr-reader-results');
var lastResult, countResults = 0;
function onScanSuccess(decodedText, decodedResult) {
if (decodedText !== lastResult) {
++countResults;
lastResult = decodedText;
// Handle on success condition with the decoded message.
var audio = new Audio('beep.wav');
audio.play();
// console.log(`Scan result ${decodedText}`, decodedResult);
document.getElementById('qr-reader-results').innerHTML=decodedText;
document.getElementById("productSN").value =
decodedText;
//App.init(decodedText);
}
}
61
var html5QrcodeScanner = new Html5QrcodeScanner(
"qr-reader", { fps: 10, qrbox: 250 });
html5QrcodeScanner.render(onScanSuccess);
});
</script>
</body>
</html>
VERIFYPRODUCTS.HTML
<!doctype html>
<html lang="en">
<head>
<title>Fake Product Identification</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-
fit=no">
<link href='https://fonts.googleapis.com/css?family=Roboto:400,100,300,700'
rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-
awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<section class="ftco-section">
<div class="container-fluid px-md-5">
<div class="row justify-content-between">
<div class="col-md-8 order-md-last">
<div class="row">
<div class="col-md-6 text-center">
<a class="navbar-brand"
href="index.html">Fake Product Identification <span>through
Blockchain</span></a>
</div>
<div class="col-md-6 d-md-flex justify-content-
end mb-md-0 mb-3">
<form action="#" class="searchform order-
lg-last">
62
</form>
</div>
</div>
</div>
<div class="col-md-4 d-flex">
<div class="social-media">
</div>
</div>
</div>
</div>
<nav class="navbar navbar-expand-lg navbar-dark ftco_navbar bg-dark
ftco-navbar-light" id="ftco-navbar">
<div class="container-fluid">
<section>
<div class="container">
<h2>Verify Products</h2>
<section>
<div class="container-fluid">
<center>
63
<div id="qr-reader" style="width:300px"></div>
<div id="qr-reader-results"></div>
</center>
</div>
</section>
<div class="form-group">
<label for="productSN">Product SN:</label>
<input disabled type="text" class="form-control" id="productSN"
placeholder="Enter Product SN" name="productSN">
<br/>
<section>
<div class="container">
<h2>Is the product sold to cunsumer is fake or not?</h2>
<table class="table">
<thead>
<tr>
<th>Product Verification Result</th>
</tr>
</thead>
<tbody id="logdata">
</tbody>
</table>
<center><p>Your address is <b id="add"></b></p></center>
</div>
</section>
<script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="js/popper.js"></script>
64
<script src="js/bootstrap.min.js"></script>
<script src="js/main.js"></script>
<script src="js/web3.min.js"></script>
<script src="js/truffle-contract.js"></script>
<script src="js/verifyProduct.js"></script>
<script src="https://unpkg.com/html5-qrcode"></script>
<script>
var decodedText = "Enter Product SN";
function docReady(fn) {
// see if DOM is already available
if (document.readyState === "complete"
|| document.readyState === "interactive") {
// call on next available tick
setTimeout(fn, 1);
} else {
document.addEventListener("DOMContentLoaded", fn);
}
}
docReady(function () {
var resultContainer = document.getElementById('qr-reader-results');
var lastResult, countResults = 0;
function onScanSuccess(decodedText, decodedResult) {
if (decodedText !== lastResult) {
++countResults;
lastResult = decodedText;
// Handle on success condition with the decoded message.
var audio = new Audio('beep.wav');
audio.play();
// console.log(`Scan result ${decodedText}`, decodedResult);
document.getElementById('qr-reader-results').innerHTML=decodedText;
document.getElementById("productSN").value =
decodedText;
//App.init(decodedText);
}
}
65
Gas Estimation for Transaction
GANACHE BLOCKCHAIN
66
BLOCK GENERATED
TRANSACTION RECORDED
67
HOME PAGE
MANUFACTURER DETAILS
68
SELLER DETAILS
QR CODE GENERATION
69
PRODUCT TRACK DISPLAY
FINAL OUTPUT
70
REFERENCES
[1] G. Khalil, R. Doss, M. Chowdhury, IEEE Access 8, 47952 (2020) [12] M.A.
Habib, M.B. Sardar, S. Jabbar, C.N. Faisal, N. Mahmood, M. Ahmad,
Blockchain-based supply chain for the automation of transaction
[2]. Rishabh Sushil Bhatnagar, Sneha Manoj Jha , Shrey Surendra Singh,
Rajkumar Shende ―Product Traceability using Blockchain‖, 2020 2nd
International Conference on Advances in Computing, Communication
Control and Networking (ICACCCN).
[3]. Si Chen , Rui Shi , Zhuangyu Ren , Jiaqi Yan , Yani shi , Jinyu Zhang,― A
Blockchain-based Supply Chain Quality Management Framework‖, 2017
IEEE 14th International Conference on e-Business Engineering (ICEBE)
[8]. Shuai Wang , Liwei Ouyang , Yong Yuan, Xiaochun Ni , Xuan Han and Fei-
Yue Wang,―Blockchain-Enabled Smart Contracts: Architecture,
Applications, and Future Trends‖, IEEE Transactions on Systems, Man, and
Cybernetics: Systems ,2019, pp.2266 – 2277
[9]. Shuai Wang , Liwei Ouyang , Yong Yuan, Xiaochun Ni , Xuan Han and Fei-
Yue Wang,―Blockchain-Enabled Smart Contracts: Architecture,
Applications, and Future Trends‖, IEEE Transactions on Systems, Man, and
Cybernetics: Systems ,2019, pp.2266 – 2277
71
[10].Laura Ricci, Damiano Di Francesco Maesa, Alfredo Favenza and Enrico
Ferro, ―Blockchains for COVID-19 Contact Tracing and Vaccine Support: A
Systematic Review‖, IEEE 2021,pp.37936 - 37950.
72