# MetaDemo **Repository Path**: holanswide/meta-demo ## Basic Information - **Project Name**: MetaDemo - **Description**: Meta demo with Go & Vue & Ruoyi - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2023-02-03 - **Last Updated**: 2025-02-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MetaDemo [![MIT License](https://img.shields.io/badge/License-Apache2.0-green.svg)](https://choosealicense.com/licenses/apache-2.0/) ## 介绍 本项目是利用区块链与数字水印技术开发的元宇宙背景下数字作品交易与版权保护平台。 随着互联网的快速发展,元宇宙引起各界广泛关注。元宇宙是一个与现实社 会高度交叉的数字虚拟空间,是区块链、人工智能等信息技术发展的产物。随着 增强现实(AR)、虚拟现实(VR)、区块链、“数字孪生”等相关技术不断发展,元宇宙的内涵也在不断丰富和完善。 区块链技术提供了一种去中心化共识机制,让互联网数据记录和传输不可篡改,解决了互联网上端到端的互信难题,为元宇宙数字产品版权保护提供很好的解决方案。 由于数字藏品的特殊定位,知识产权问题成为了数字空间一直存在的“顽疾”,一件数字藏品从诞生、上架到属权转让、下架甚至摧毁的全生命周期中,如何界定产权所属和侵权问题,如何使用技术助力产权保护都是我们需要思考的问题。本选题目标就是探讨如何利用区块链技术解决数字作品的版权保护和权益保障的问题,构建一个基于区块链的数字产品版权保护服务平台。 系统的开发目的是:在Web端建立一个元宇宙背景下的数字藏品服务平台,以区块链技术助力数字藏品的产权保护。 ### 概述 本系统全名 **基于区块链的元宇宙数字藏品产权保护服务平台** ,内部开发代号为“Meta”,取元宇宙之“元”提现系统的核心。系统由三个子系统构成:前端平台、区块链后端和后台管理系统,三个子系统支持独立部署、分开运作、多机搭建、互相作用。 ![](./doc/md/23.png) - 系统主要面向元宇宙背景下的数字藏品交易场景,针对数字藏品产权难鉴定、交易不安全和侵权难追溯的问题,采用区块链技术助力产权保护。 - 系统上的用户可以购买平台上的任意在售数字藏品,系统算法和区块链网络特性将保证交易的安全进行,确保产权交换的合法。同时,用户也可以上传自己的数字藏品,成为一名卖家,对外出售获取收益。 - 系统对平台上的数字藏品、交易报价和资金流动都采用数据库和区块链两套数据源互相印证的方法进行监控和保护,检测到异常时将由人工介入处理可能发生的侵权事件。 ### 文件结构 meta-demo | - [./code](./code/) 系统源代码 | | - [./code/background/](./code/background/) 后台管理系统 | | - [./code/meta/](./code/meta/) 区块链网络 | | - [./code/webapp/](./code/webapp/) 前端 | - [./doc/](./doc/) 系统文档 ![](./doc/md/24.png) 在进行项目部署等操作时,请将部署的子系统对应的文件夹作为根目录。(例如:部署后端区块链网络时,请以 “/meta-demo/code/meta”路径作为根目录执行后续操作)对于子文件夹下的更多信息,可以查阅该文件夹内的 README.md 文件,会给出该目录及该目录内子文件夹的作用。 ## 功能设计 ### 功能需求 通过前期的市场调研,我们发现:系统主要针对的用户群体可以大致分为三类,分别是**使用人员、维护人员和管理人员**。 - **使用人员**即系统上的一般用户,可以通过在市场中的角色分为买方和卖方两类,在系统中主要使用买卖数字藏品、钱包充值与提现等面向公众的功能。要求这类用户有一定的元宇宙与数字藏品的认知,能够使用浏览器查看互联网资源。 - **维护人员**指的是对整个系统的运行进行维护的技术人员,这类用户一般要深入到系统的底层监测系统的运行状况,对出现的突发情况及时解决。要求这类用户具有一定计算机专业水平能力,熟悉服务器与网络维护,能够掌握系统的基本结构。 - **管理人员**即系统交付给的甲方选用来管理系统中一些数据的人员,这类用户一般作为审核员等角色参与到系统使用中。要求这类用户能具有一定计算机专业水平能力,熟悉系统项目结构,熟悉用户权限系统,能够熟练使用后台管理系统工具。 针对这三类目标群体,系统主要实现了以下关键功能点(优先级定义:A优先级最高,表示必须实现的需求;B优先级较高,实现此类需求使得系统更加完整;C优先级最低,实现此类需求能给用户更好的使用体验): ![](./doc/md/1.png) ### 逻辑架构 本系统按照逻辑功能可以划分为四大部分:用户模块,藏品模块,交易模块和钱包模块。 ![](./doc/md/2.png) **用户模块** 包含登录、注册、找回密码和退出登录功能,支持用户采用账号密码的方式进行登录,通过手机号和邮箱号注册平台账号或重置密码。 **藏品模块** 是关于藏品的查看、搜索、买卖交易的功能。用户在平台上可以查看个人藏品仓库内的藏品,可以在藏品市场浏览数字藏品,可以购买他人的数字藏品或出售自己拥有的数字藏品。数字藏品的所有信息改动,例如所属人变动、藏品名称描述修改等,都会记录更新在区块链网络中。 **交易模块** 依赖于藏品和用户,包含交易订单的产生、支付、接受或拒绝等流程。用户可以对他人藏品发起和支付交易订单,卖方可以接受或者拒绝收到的交易报价。交易订单自创建后,所有的进度都会在区块链网络中实时更新。 **钱包** 是平台内用于购买数字藏品的金额来源,出售数字藏品的所获也会到钱包中,用户可以充值或提现钱包中的余额,也可以查看钱包的流水记录,钱包的每一笔金额变动都会记录在区块链网络中。在运营的考虑上,平台可以采用对提现收取一定比例的手续费的方式获得盈利。 ### 核心业务设计 系统在数据流和控制流上可以将系统拆解为三个子系统:**交易平台系统,区块链网络** 和 **后台管理系统**,如下图所示。 ![](./doc/md/3.png) 其中,**交易平台** 是采用 B/S 架构的Web app,平台面向所有用户,主要负责处理数字藏品、用户信息和交易订单三大种类的资源. ![](./doc/md/4.png) 系统基于区块链网络实现数字藏品的安全交易和产权保护,我们将数据存储在区块链网络中,区块链网络与交易平台之间通过数据流上载与下载实现数据保护. ![](./doc/md/5.png) 基于这三个子系统提供的服务也具有三大核心业务,分别是**新建数字藏品、买卖数字藏品** 和 **保证数据一致**。下面分别讨论三大核心业务的实现细节。 **新建数字藏品** 用户首先向平台提交相关信息申请新建数字藏品到平台,提交的信息至少包含数字藏品的名称、描述、类型、展现方式和所有权证明材料。提交的信息将有后台管理系统的管理员进行审核,管理员可以通过系统获取区块链上的信息检查待审核的数字藏品是否涉嫌侵权。通过审核后的数字藏品将出现在申请用户的个人仓库中,默认为下架状态,用户可以选择将该藏品上架到市场。整个过程如所示。 ![](./doc/md/6.png) **买卖数字藏品** 用户在交易中分别作为买家和卖家的角色。买家购买数字藏品,此时平台根据信息自动生成了关于该藏品的交易报价,该项藏品将进入交易状态,进入交易状态的藏品对于市场处于不可见状态,不可再次被购买。买家可以选择支付订单或取消订单:支付订单将从用户钱包余额中扣款,支付成功后平台将给卖家发送待处理报价通知;取消订单将会使藏品退出交易状态,恢复到市场可见状态中。 若买家成功支付了订单,卖家将收到待处理报价的提醒。此时卖家可以选择接受或拒绝报价。接受报价后,数字藏品将从卖家仓库发送到买家仓库,平台将交易金额汇入买家钱包,数字藏品退出交易状态,并从市场下架,买家可以选择重新上架藏品;若卖家拒绝报价,平台将退回买家付款,藏品退出交易状态并重新进入市场可见状态。 交易报价的每次状态更新都将记录在数据库网络中。 ![](./doc/md/7.png) **保证数据一致** 当涉及到数字资产的交易时,确保数据的安全和一致性是至关重要的。为了解决这个问题,本系统使用了两种不同的数据源,如下图所示。第一个数据源是传统的数据库,这个数据库跟大多数的网站或应用程序所使用的数据库一样,将所有数据记录在服务器上。而第二个数据源则是区块链网络,这个网络具有去中心化和公开透明等特点,可以通过去中心化的方式防止数据被篡改。 ![](./doc/md/8.png) 当系统调用数据时,会同时从这两个数据源获取数据,并进行比对,以保证数据的一致性。如果发现数据被篡改的风险,则会报告给后台管理人员进行人工介入调查。这种双重数据源的设计,旨在确保数据不被篡改,从而保护用户的权益和交易的安全性。 需要注意的是,区块链虽然是具有很高的安全性和不可篡改性,但并不意味着它是绝对安全的。有些攻击者可能会通过一些技术手段来伪造数据、篡改信息或者攻击区块链网络中的节点。因此,本系统将传统数据库作为备份,以确保即使出现异常情况,也能够快速恢复数据。 ---- 系统重点关注**用户的第一体验**,用户在交易平台中可以扮演买家和卖家两种角色。当用户作为买家进行数字藏品交易时,平台会根据该藏品的相关信息自动生成交易报价,并将该藏品置于交易状态。此时,该藏品将不再对其他用户可见,也不能被重新购买。买家在支付订单前可以选择支付或取消订单。如果买家选择支付,系统将从其钱包余额中扣款,并向卖家发送待处理报价通知;如果买家选择取消订单,该藏品将退出交易状态并恢复到市场可见状态。 一旦买家成功支付订单,卖家将收到待处理报价的通知。此时卖家可以选择接受或拒绝该报价。如果卖家接受报价,数字藏品将会从卖家仓库发送到买家仓库,平台将交易金额汇入买家钱包,数字藏品将退出交易状态,并从市场下架。此外,买家还可以选择重新上架藏品,以便进行更多的交易。如果卖家拒绝报价,平台将退回买家的付款,藏品将退出交易状态并重新进入市场可见状态。 需要注意的是,在数字藏品交易中,买家和卖家之间的交流和沟通也非常重要。例如,在交易过程中,如果买家遇到问题或需要咨询卖家,他们可以通过平台提供的通讯工具进行交流和沟通。这有助于双方更好地理解对方的需求和期望,并在不影响交易进程的前提下解决任何潜在的问题。这里给出前台普通用户(即买家卖家)的活动时序图作为参考. ![](./doc/md/9.png) --- ## 详细设计 ### 数据库 ![](./doc/md/11.png) ![](./doc/md/12.png) ![](./doc/md/13.png) ![](./doc/md/14.png) ![](./doc/md/15.png) ![](./doc/md/16.png) ![](./doc/md/17.png) ![](./doc/md/19.png) ![](./doc/md/20.png) ### 接口设计 本系统是前后端分离开发的 B/S 架构 Web 端应用。在功能需求研究与数据模型设计的基础上,本系统设计了一批接口,由后端供前端调用,用于实现相关功能,为用户提供服务。接口遵从RESTful风格,如表 9所示。更多详情请浏览系统接口线上文档发布[地址](https://apifox.com/apidoc/shared-74b62dd5-a744-4fa6-ac3d-5b4ffb89d7d5) ![](./doc/md/21.png) ![](./doc/md/18.png) ## 开发技术 这一节主要介绍本系统在开发时所使用的技术栈,以及具体实现的部分代码,包括后端的Gin框架、GORM框架,前端的Vue.js技术,后台的ruoyi框架,以及区块链网络的Hyperledger Fabric框架。 ### 后端开发技术 本小节所指的“后端”范围限于交易平台WebApp的后端程序,不包含其与区块链网络进行交互的SDK部分。 **Golang** 后端使用Golang语言最受欢迎的Web框架 **Gin** 进行开发:Gin是一个用Go语言编写的轻量级Web框架,它具有高性能、易于使用和灵活可扩展的特点。Gin使用了快速的Radix树路由算法,可以支持高并发和低延迟的请求处理;内置多种常用的中间件,例如Logger、Recovery、CORS等,可以提高Web应用程序的安全性和可靠性。Gin框架提供了快速的路由器和中间件功能,可以帮助开发人员快速地搭建Web应用程序,并支持常见的HTTP请求方法、参数解析、JSON响应处理等功能。此外,Gin还支持插件式中间件,允许开发人员根据需要自定义HTTP请求处理流程,以满足不同的业务需求。 ![.](https://blog.kennycoder.io/2020/02/03/Golang-%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3interface%E5%B8%B8%E8%A6%8B%E7%94%A8%E6%B3%95/cover.png) 在本系统的开发中,交易平台后端部分主要使用Gin框架搭建起一套服务,并使用中间件实现跨域和JWT的发放与读取。 本系统的后端开发还使用了GORM框架:GORM是一个用Go语言编写的ORM框架,它提供了简单易用的API和灵活可扩展的查询接口,可以帮助开发人员快速地实现数据库操作。GORM支持多种主流关系型数据库,例如MySQL、PostgreSQL、SQL Server等,并提供了丰富的功能特性,例如链式查询、事务处理、预加载、批量插入等,可以满足各种复杂业务场景的需求。此外,GORM还支持自定义回调函数、钩子函数等高级功能,使得开发人员可以通过自定义函数控制数据库操作流程,进一步提升应用程序的可维护性和可扩展性。 在本系统的开发中,GORM框架对数据模型的建立、数据库的增删查改操作、事务的执行和错误的处理等过程都提供了极大的支持。 ### 前端开发技术 **Vue & React** 本系统采用了Vue和React作为前端开发框架,这两个框架都是目前非常流行的前端技术,并且都具有良好的生态系统和社区支持。在此基础上,开发团队还使用了自研的一套UI。 ![](https://dwglogo.com/wp-content/uploads/2017/09/Vue-logo-001.svg) Vue是一个流行的JavaScript前端框架,它旨在通过MVVM模式和组件化开发的思想,使得开发人员可以更加高效地创建交互性强、易于维护的Web应用程序。Vue核心库只有20KB左右,非常轻巧,可以快速加载和渲染页面。采用逐步增强的设计理念,允许开发者在已有项目中逐步引入Vue,并与其他库或框架协同工作。Vue使用响应式数据绑定机制,可以方便地将数据和DOM进行关联,当数据变化时,会自动更新视图。将UI界面抽象为组件,相互独立且可复用,使得开发人员可以快速构建复杂的Web应用程序。 ### 区块链网络技术 **Hyperledger Fabric** 本系统采用Hyperledger Fabric搭建区块链网络,并使用其提供的SDK编写链码,与区块链网络进行交互。在此基础上,系统在开发的过程中还参考了GitHub上的开源项目fabric-go-sdk . ![](./doc/md/22.png) Hyperledger Fabric是一个开源的企业级分布式账本平台,旨在实现高度可定制性的智能合约和灵活的共识机制。它是Hyperledger项目的一部分,由Linux基金会支持。Fabric提供了一种模块化的架构,使得用户可以灵活地选择和组合不同的组件来构建他们的联盟链网络。这些组件包括身份验证、权限管理、共识机制、存储等等。Fabric还提供了丰富的安全性特性,如加密通信、隐私保护、审计跟踪等。 ## 安装教程 ### 环境要求 **后端(区块链网络)部署环境** - 操作系统:Linux(CentOS 7) - Docker lastest - Golang 1.17.5 ( Golang 版本务必一致) - MySQL 8 **后台管理系统部署环境** - 操作系统:Linux(CentOS 7) - NPM lastest - Java 8 或以上 - MySQL 8 - Web容器,如Tomcat、Jetty、Undertow等(本系统采用Tomcat) **前端部署环境** - Nginx lastest ### 安装 安装之前,请确保安装环境满足部署环境要求种列出的条件。 **后端安装** 1. 环境搭建 编辑文件 `vim /etc/hosts` ,在文件尾添加以下内容:(多机搭建时要修改为目标 ip) : ```shell 127.0.0.1 orderer.example.com 127.0.0.1 peer0.org1.example.com 127.0.0.1 peer1.org1.example.com 127.0.0.1 peer0.org2.example.com 127.0.0.1 peer1.org2.example.com ``` 添加完后设置 go 语言环境变量:设置 `gopath` 为 `/root/go/` ,云服务器防火墙 / 安全组打开 `8089` 端口。 2. 项目拉取 将本项目的 `/meta-demo/code/meta` 文件夹放置在 `/root/go/src/` 路径下。项目可从远程代码仓库获取,分支为 `beta` . ```shell yum install git git clone https://gitee.com/holanswide/meta-demo.git ``` 3. 区块链网络搭建 ```shell # 打开 cd /root/go/src/meta/src/fixtures docker-compose up -d # 查看 docker ps -a # 关闭 cd /root/go/src/meta/src/fixtures docker-compose down -v ``` 4. 参数修改 在 MySQL 数据库新建一个空数据库,项目默认数据库名 `db_meta_test` ; 修改项目路径中的 `meta/resources/config.yml` 文件中对应的配置项为自己的环境(例如数据库用户密码、数据库名称) 5. 项目启动 ```shell cd /root/go/src/meta/src go build main.go ./main ``` 项目一次性将顺序启动区块链网络和后端服务,启动成功将在服务器打印相关启动信息,启动失败则会返回错误信息和发生位置,用户可以根据打印信息判断和修复。 成功启动的控制台信息如下: ![](./doc/md/25.png) ![](./doc/md/26.png) ## 使用说明 1. 登录与退出 ![](./doc/md/q1.png) 2. 主页 ![](./doc/md/q2.png) 首页顶部栏展示了平台的五大功能区入口:**藏品市场、藏品资讯、我的库存、交易信息**和**个人中心**。 - **藏品市场**可供用户查找、购买、上架和售卖数字藏品 - **藏品资讯**是本平台的新闻和通知发布区 - **我的库存**将会显示用户本人所拥有的所有数字藏品 - **个人中心**集成了修改个人信息、新建个人藏品和钱包充值与提现等功能。 3. 上架出售 点击个人中心中的“发布藏品”即可申请将一项数字藏品发布到平台。上传藏品的相关资料并通过系统后台审核通过后,用户可以在“我的库存”中看到这件藏品。 ![](./doc/md/q3.png) ![](./doc/md/q4.png) 4. 购买,充值与提现 在藏品市场上遇见了心仪的数字藏品,可以点击进行购买。点击购买后系统自动创建一笔交易报价,用户需要在“交易信息”功能区下对该笔交易进行处理,可以选择支付报价或取消交易. ![](./doc/md/w1.png) ![](./doc/md/w2.png) ![](./doc/md/w3.png) ![](./doc/md/w4.png)