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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

基于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();
        });
    });

在这里插入图片描述

七、应用程序扩展

八、应用程序整体展示

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

在这里插入图片描述

通过学号进行用户认证

在这里插入图片描述

进入认证成功后登录主页

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
选择合适的化妆品加入购物车进行交易

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

关于化妆品品牌排行榜

在这里插入图片描述

查看相关资讯

在这里插入图片描述

也可以在评论区进行交流查看化妆品评价
在这里插入图片描述

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

在这里插入图片描述

应用平台流程图

在这里插入图片描述

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

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

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

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 区块链