基于hyperleger fabric区块链的校园化妆品交易平台搭建

一、大数据与区块链解决方案概述
选题背景:
目前不少同学在校园里进行二手交易没有一个大众认可的平台,很多都是私下交易,但会存在很多虚假交易,甚至出现诈骗事件,没有一个让校园同学认可放心的二手化妆品交易平台,基于这个交易问题,我们将校园二手化妆品交易与区块链技术结合来处理交易存在的问题,给校园内学生提供提供一个安全、公开、方便、美观的交易平台,让学生在校园交易的放心,买得放心,用的安心。不但可以交易平台的资产也可以添加我的售卖,自己成为卖家。

采用区块链技术架构的优点:
区块链采用了分布式核算和存储,不存在中心化的硬件或管理机构,因此使得任意节点的权利和义务都是均等的。区块链的系统的一个开放性质的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开的。在区块链中,任何人为的干预都是不起作用的,将对“人”的信任改成了对机器的信任。使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据。在区块链中一旦信息经过验证并添加至区块就会永久的存储起来无法进行修改。
区块链作为当下被推崇的一门技术主要优点为分布式记账、全流程记录、不可篡改性和加密技术。在区块链中都必须遵循同一记账交易规则,基于密码的算法同时每笔交易需要网络内其他用户的批准,核心分布式去中心化。区块链不可篡改和加密安全性采取了单向哈希算法,时间的不可逆性导致任何试图入侵篡改区块链内数据信息的行为都很容易被追溯,提高了对应的安全性。

二、应用场景需求分析

应用场景分析:
基于目前不少同学在校园里进行二手交易没有一个大众认可的平台,很多都是私下交易,但会存在很多虚假交易,甚至出现相关二手化妆品交易诈骗事件,目前没有一个让校园同学认可放心的二手化妆品交易平台,基于这个交易问题,我们将校园二手化妆品交易与区块链技术结合来处理交易存在的问题,给校园内学生提供提供一个安全、公开、方便、美观的交易平台,让学生在校园交易的放心,买得放心,用的安心。不但可以交易平台的资产也可以添加我的售卖,自己成为卖家。

需求分析
在校园内搭建一个基于Fabirc区块链的化妆品二手交易平台,学生以学院为单位(=>Org=>peer节点)加盟该平台;学生使用客户端连接本组织的peer节点参与交易。可以售卖化妆品、也可以购买化妆品;阅读过管理员平台公告后进入登录页面,学生通过学号认证后通过登录,学生在个人中心可以查看所有可交易的化妆品也可以查看自己的交易情况是否已经完成,也可以注册平台个人账号进行商品评论和交流查看个人信息,不但可以交易平台的资产也可以添加我的售卖,自己成为卖家;用户可以根据自己的需求选择不同的化妆品类型比如口红、香水、面部护理等。查看化妆品详情,收藏化妆品、加入购物车完成资产交易,退出的时候直接注销用户清除个人登陆记录保护用户隐私。这样校园内学生交易大大提高了安全性和大众的认可,满足了很多学生的交易需求。

用户需求分析和用户组织结构设计:

三、平台功能设计及功能结构设计图





四、数据存储结构设计与链码开发

1、数据存储结构
交易资产以资产键值对(Key-Value)的方式存储:

  Key:id       value {            brand: '化妆品品牌名称',            type: '化妆品类型',            price: '$化妆品价格',            owner: '拥有者',            describe:'化妆品介绍',        },


2、链码开发与实现

启动startFabric.sh javascript脚本启动网络并部署链码:

功能一:调用智能合约初始化自定义链码:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabmakeup --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"initLedger","Args":[]}'

功能二:通过调用智能合约初始化查询特定键值的资产:

peer chaincode query -C mychannel -n fabmakeup -c '{"function":"queryMakeup","Args":["MAKEUP1"]}'

功能三:通过调用智能合约初始化查询特定键值范围的资产:

peer chaincode query -C mychannel -n fabmakeup -c '{"function":"queryMakeupsByRange","Args":["MAKEUP3",""]}'

功能四:通过调用智能合约新增资产:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabmakeup --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"createMakeup","Args":["MAKEUP14","迪奥","香水","450","Lala","美白保湿"]}'


功能五:通过调用智能合约修改资产属性:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabmakeup --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"updateMakeup","Args":["MAKEUP1","迪奥","香水","$820","gala","女士香水 魅惑清新淡香氛50ml 清新甜韵"]}'


功能六:通过调用智能合约删除指定资产:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabmakeup --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"deleteMakeup","Args":["MAKEUP14"]}

功能七:通过调用智能合约实现资产交易:

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabmakeup --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"changeMakeupOwner","Args":["MAKEUP3","Lisksk"]}'

功能八:调用链码实现更新资产信息 :

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n fabmakeup --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"updateMakeup","Args":["MAKEUP1","迪奥","香水","$820","gala","女士香水 魅惑清新淡香氛50ml 清新甜韵"]}'

功能九:判断资产是否存在:

peer chaincode query -C mychannel -n fabmakeup -c '{"function":"makeupExists","Args":["MAKEUP1"]}'

四、应用程序前端开发

在站长素材-分享综合设计素材的平台 (chinaz.com)找到项目合适的前端网页模板,然后修改数据和更改网页部分样式,最后通过前后端链接实现资产交易。客户端的主要作用是与Fabric区块链交互,实现对区块链的操作。区块链操作分为管理类和链码类的两种,管理类操作包括启停节点和配置网络等;链码类操作主要是链码的生命周期管理,如安装、实例化以及调用链码。最常用的客户端是命令行客户端(CLI),此外是使用Fabric SDK开发的应用客户端。
开发者创建客户端应用和智能合约( chaincode ), Chaincode 被部署到区块链网络的 Peer 节点上面。通过 chaincode 来操作账本,当你调用一个交易 transaction 时,你实际上是在调用 Chaincode 中的一个函数方法,它实现业务逻辑,并对账本进行 get , put , delete 操作。客户端应用提供用户交互界面,并提交交易到区块链网络上。
前端页面以用户体验效果为主,主页化妆品里面有化妆品分类、热销推荐、折扣推荐、化妆品详情、化妆品资讯,也可以进入我的个人主页查看个人订单和交易情况等。尽可能满足用户交易各方面需求,一些折扣和热销推荐也方便用户做出交易决策。用户挑好自己合适喜欢的就可以放进购物车进行资产交易。每个化妆品分类页面又有各种不同的产品热销和折扣供用户挑选,

源主页面及其文件:


修改源码和完善后的主页面和文件:

使用pycharm对前端网页模板源码进行修改:
通过元素对应的源码进行更改删除或添加相关标签,完善页面布局和整体效果。

页面一:主页面及其商品分类和商品推荐:
化妆品分类有:健康护理、皮肤护理、口红、面部护理、香水、自然护理。

对应路由: /index
页面二
显示化妆品所有资产信息

对应路由:

else if(url_path == '/list'){                query().then(async function(contract){                const result = await contract.evaluateTransaction('queryAllMakeups');                const result_json = JSON.parse(result);                //response.end('Transaction has been evaluated, result is: ' + result.toString());                const view = path.resolve(__dirname, 'views', 'list.html');                list1 = template(view, {                data:result_json            });                response.end(list1);            });


页面三:进行化妆品资产交易

对应路由:

对应路由:

else if(request.url == '/modify'){            let formData = '';            //接收post参数            request.on('data',function(param){                formData += param;            });            //post参数接收完毕            request.on('end',function(){                console.log(formData);                const params = new URLSearchParams(formData);                query().then(async function(contract){                    await contract.submitTransaction('updateMakeup', params.get('id'), params.get('brand'), params.get('type'), params.get('price'), params.get('owner'),params.get('describe'));                    //301代表重定向                     response.writeHead(301,{                        Location: '/list'                    });                    response.end();                });            });else if(url_path == '/modify'){                query().then(async function(contract){                    const result = await contract.evaluateTransaction('queryMakeup',params.get('id'));                    const result_json = JSON.parse(result);

页面四:添加交易化妆品资产
用户可以看到自己售卖化妆品的交易订单,也可以继续添加自己售卖的化妆品资产,在平台进行交易。



对应路由:

 if(request.method == 'POST'){        if(request.url == '/add'){            let formData = '';            //接收post参数            request.on('data',function(param){                formData += param;            });            //post参数接收完毕            request.on('end',function(){                console.log(formData);                const params = new URLSearchParams(formData);                query().then(async function(contract){                    await contract.submitTransaction('createMakeup', params.get('id'), params.get('brand'), params.get('type'), params.get('price'), params.get('owner'),params.get('describe'));                    //301代表重定向                     response.writeHead(301,{                        Location: '/list'                    });                    response.end();                });            });


页面五:删除交易化妆品资产(选择所需要删除的化妆品资产)

对应路由:

else if(url_path == '/remove'){                query().then(async function(contract){                    await contract.submitTransaction('deleteMakeup',params.get('id'));                    response.writeHead(301,{                      Location: '/list'                    });                    response.end();                });

六、应用程序服务端开发(注:对于分工内容,需详细描述设计思路和实现细节,非分工内容,只需截图)
1、路由一
Get:通过params参数获取,

  query().then(async function(contract){            await contract.submitTransaction('createMakeup', params.get('id'), params.get('brand'), params.get('type'), params.get('price'), params.get('owner'),params.get('describe'));            //301代表重定向             response.writeHead(301,{                Location: '/list'            });            response.end();        });

Post:

  if(request.method == 'POST'){    if(request.url == '/add'){            let formData = '';            //接收post参数            request.on('data',function(param){                formData += param;            });            //post参数接收完毕            request.on('end',function(){                console.log(formData);                const params = new URLSearchParams(formData);

2、路由二

Get:else if(url_path == '/modify'){                query().then(async function(contract){                    const result = await contract.evaluateTransaction('queryMakeup',params.get('id'));                    const result_json = JSON.parse(result);

Post:

  let formData = '';    //接收post参数    request.on('data',function(param){        formData += param;    });    //post参数接收完毕    request.on('end',function(){        console.log(formData);        const params = new URLSearchParams(formData);        query().then(async function(contract){            await contract.submitTransaction('updateMakeup', params.get('id'), params.get('brand'), params.get('type'), params.get('price'), params.get('owner'),params.get('describe'));            //301代表重定向             response.writeHead(301,{                Location: '/list'            });            response.end();        });    });

Get:

else if(url_path == '/remove'){                query().then(async function(contract){                    await contract.submitTransaction('deleteMakeup',params.get('id'));                    response.writeHead(301,{                      Location: '/list'                    });                    response.end();                });

Post:

   let formData = '';    //接收post参数    request.on('data',function(param){        formData += param;    });    //post参数接收完毕    request.on('end',function(){        console.log(formData);        const params = new URLSearchParams(formData);        query().then(async function(contract){            await contract.submitTransaction('updateMakeup', params.get('id'), params.get('brand'), params.get('type'), params.get('price'), params.get('owner'),params.get('describe'));            //301代表重定向             response.writeHead(301,{                Location: '/list'            });            response.end();        });    });

七、应用程序扩展

八、应用程序整体展示

仔细看平台公告后然后进入用户认证:

通过学号进行用户认证:

进入认证成功后登录主页:

通过商品分类选择自己想要的产品:



也可以注册和登录自己的私人账户:


选择合适的化妆品加入购物车进行交易:

也可以查看我的订单和所有可交易的化妆品资产:

关于化妆品品牌排行榜:

查看相关资讯:

也可以在评论区进行交流查看化妆品评价:

有问题和疑问可以向平台进行反馈:

应用平台流程图:

这里给大家附上所需源码:
https://www.aliyundrive.com/s/V1NsadQkEYC
提取码: gn61
https://www.aliyundrive.com/s/yQkvx1aSM7Q
提取码: 77hz
其实这里我是想直接把做好的虚拟机导出来发给大家链接,这样大家就能直接在自己电脑上直接运行项目了,但是阿里云盘不支持分享ova格式的文件,百度网盘也是文件大小限制,等过段时间百度网盘有会员了,再把链接给你们放在博客里面。

OK。这里小马跟大家分享的基于hyperleger fabric的校园化妆品交易平台搭建到此结束了,希望大家可以参考得到一些思路设计新的项目,有机会我也会跟大家分享其它区块链项目和关于长安链的一些知识。

实践是提高自己的最快方法,希望大家多实践多总结,思路理清了后面都好做。祝愿大家一切顺利!

很喜欢村上春树的一句:“尽管眼下十分艰难 可日后这段经历说不定就会开花结果。”这句话送给所有考研的人

花会沿途盛开 以后的路也是。我们终将上岸,阳光万里。