基于区块链的股权众筹平台的设计与实现_第1页
基于区块链的股权众筹平台的设计与实现_第2页
基于区块链的股权众筹平台的设计与实现_第3页
基于区块链的股权众筹平台的设计与实现_第4页
基于区块链的股权众筹平台的设计与实现_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于区块链的股权众筹平台设计与实现DesignandImplementationofEquityCrowd-fundingPlatformBasedonBlockChain计算机科学与技术(教育)袁静ComputerScienceandTechnology(Education)YuanJing 指导老师黄强DirectedbyHuangQiang摘要:随着我国人口基数的持续上升,传统就业岗位正逐渐被人工智能和新兴技术所淘汰,而国家提倡大众创业、大力扶持小微企业。在这样的就业形势下,本设计运用区块链的超级账本(HyperledgerFabric)SDK和JAVA相结合的技术,实现了基于区块链可信的资产化、资产交易化、资产收益化和资产可跟踪化的平台,解决了创业者与投资人之间互不信任的问题及股权众筹涉及到的法律等问题。关键词:众筹、股权众筹、区块链、FabricAbstract:WiththecontinuousincreaseofpopulationbaseinChina,traditionalemploymentpositionsaregraduallybeingeliminatedbyartificialintelligenceandemergingtechnologies,whiletheStateadvocatesmassentrepreneurshipandvigorouslysupportssmallandmicroenterprises.Undersuchemploymentsituation,thisdesignusesthetechnologyofcombinationofHyperledgerFabricSDKandJAVA,realizestheplatformofassettransformation,assettransaction,assetprofitabilityandassettraceabilitybasedonthetrustworthinessofblockchain,andsolvestheproblemofmutualdistrustbetweenentrepreneursandinvestorsandthelegalissuesinvolvedinequityCrowd-funding.Keywords:Crowd-funding、Equity-basedcrowd-funding、Blockchain、Fabric绪论1.1论文研究背景自高校扩招以来,大学生毕业人数年年创新高,至2018年,已有超过820万毕业生,若加上中职毕业生与尚未就业学生,将超1500万人。就业难的问题受到政府和社会的高度重视,尤其在十八大以来,提出了“大众创业,大众创新”的口号,大学生创业的热潮席卷而来,随之而来的便是创业成功率的问题,与发达国家相比我国创业成功率只有2%~3%[1]。其主要原因是大学生创业并不受投资人的信任,大多无法完成项目融资便中断了。因此创业者需要借助一个安全可靠的平台来帮助达到融资的目的。融资的方式有债务性融资和权益性融资[2],债务性融资会构成负债,采用抵押或贷款的方式获得融资,但对于大学生来说,这样的方式不适用。众筹是一种新型的互联网金融模式[3],指创业者向投资者募集资金,进而获得资金帮助,用于创作、发明、创业等活动,其成本低、快速等特点吸引了大多慕名而来的人。同时众筹的缺点也暴露无疑,其安全性得不到保障和与非法集资挂的特点将大多数的慕名投资者挡在门外,而区块链的出现,将把众筹带上一个新的高度。区块链的特点主要有去中心化、安全存储各类交易数据、信息不可伪造和篡改等,保证了区块链交易的可靠,加上加密技术保证了信息的不可泄露,这对于金融行业来说将是一个巨大的保障,基于区块链的众筹平台将会让交易更加安全可靠,同时对交易信息进行追溯,这使交易双方对交易事实不可否认。1.2国内外研究现状众筹一词自2010年传入中国至今,经历过风雨也有辉煌,根据金研院《我国众筹行业的发展状况》显示,截止2018年7月,我国众筹平台在经历2017年行业大洗牌后,其中存活下来的200+众筹平台中,股权型的众筹平台高达30.27%,仅次于权益型的众筹平台。在国内的股权众筹平台,大多与非法集资逃不开关系,而有些融资者筹得资金后就携款潜逃,政府难以对这些平台进行管理。而在国外,自美国股权众筹鼻祖Angelist的上线以来,不仅帮助自已完成融资,还帮助一千多家企业完成融资,美国政府也希望借此模式促进企业发展,并签署了《促进初创企业融资法案》,为美国股权众筹打开了通道,并逐年完善监管制度。在欧洲,其众筹市场规模约占全球市场三分之二,欧洲对股权众筹的支持表现在发出名为“众筹在欧盟——发掘欧盟行动的潜在附加价值”的《意见征询书》,并且耐心进行市场调查而且重视对投资者的保护[4]。而区块链的应用方面,“区块链”技术在国外连花旗银行、瑞银、纽约梅隆、高盛、摩根大通等银行被投入巨资进行技术研发[5],国内外学者和专家也纷纷提出区决链技术对未来金融业的影响。国内的众筹平台像井喷式一样的增长,众筹面临着许多问题,主要是:一是开展众筹的平台不能够有足够的可信力,这主要由于平台技术不能支持它说服投资者,投资者希望能更多地了解项目细节及执行情况,而平台主要是为了解决资金供需双方的困难,实际上平台本身不承担受信责任,并不能保证投资都的资金是被合理使用的。二是在传统众筹项目中,项目的周期时间长,投资都很难从将资金在短时间变现,如遇风险也不能及时转售降低风险,这对于一些中小投资者来说是一种没有回报的投资,他们很难接受这样的风险。2.区块链众筹平台相关内容概述2.1区块链众筹平台概述众筹的兴起源于艰难奋斗的艺术家们为创作筹集资金的手段,通过搭建网络平台面对公众筹资,以便使他们的梦想有可能实现,但现在已经演变成为初创企业和个人为自己获取资金的一个渠道。众筹平台在基于众筹的功能上,大多数人逐渐追求更为安全可靠的平台性能。在区块链中,一个众筹项目就相当于一条区块链,也是一个账本,而一个用户就相当于区块链中的成员,这条区块链记录了从项目诞生以来的所有交易信息。所有的成员都参与共同维护同一个账本并在自己的节点创建账本副本,达到去中心化的数据管理方式,成员之间用安全多方计算SMC[6]来实现互不信息的多方之间保护隐私的协同计算,保证了交易双方的安全性和可靠性。 2.2区块链众筹平台相关技术2.2.1区块链关键技术 区块链的构建主要包括超级账本技术、智能合约技术、Docker容器虚拟化等技术,其基本内容可以概括为:(1)超级账本技术HyperledgerFabric[7]是被linux基金会设计来为使用模块化架构开发区块链应用程序的基础,以便开发人员能够对这些模块实现即插即用的目的,它由来自开发社区内的多个组织的人员共同维护。Fabric使用容器技术来托管构成系统应用逻辑的智能合约(也称为链代码)。简而言之,HyperledgerFabric是为企业构建的领先的开源、通用区块链结构。其提供了五大核心模块以支撑区块的运行,分别是peer、orderer、cryptogen、configtxgen、configtxlator。HyperledgerFabric的许多组件和模块都是使用Go语言编写的,这为Fabric提供了强大的海量并行支持[8]。(2)智能合约技术智能合约[9]又称chaincode,简称“链码”。它在Fabric中是一段用Go、Java和Node.js编写的,并能够实现预定义接口的程序。应用系统可以调用这些程序来实现对区块状态的访问和控制,进而完成业务逻辑或查询结果。每一个智能合约都会实现区块链接口,即“shim”,且必须实现init和invoke方法,以达到对应用程序的初始化和响应业务系统的各种invoke事务。一个链码可以调用另一个链码,若两个链码在不同的channel[10](通道)中,则只允许读取类的查询。(3)Docker容器虚拟化技术Docker是一个容器引擎,开发人员可以他们的应用打包移植到容器中,就可以使这些应用运行在任何一个Linux机器上。Docker能让项目的部署更加快捷,提高了开发效率。以往要部署一个mysql服务器,平均得耗时2小时,而用Docker来实现,只需要5分钟[11];虚拟化的实现能让你的机器运行不同平台的软件或系统,同一个Docker可以在不同环境中使用,这大大降低了硬件要求和应用环境之间的耦合。Docker-compose是一个可以让你轻松且高效的定义、管理和运行多容器Docker应用程序的工具,可以使用YAML文件来配置应用服务。Fabric的各模块都是通过Docker来打包并运行的,以支持各节点“热插拨”功能的支持。2.2.2Web平台技术使用java来开发web平台,主要采用了SSH的框架设计,分别是Spring、Springmvc、Mybatis,在前端页面主要采用了Bootstrap插件,其主要内容概括为:(1)SpringSpring是由RodJohnson为解决企业在开发大型应用软件时面临的复杂性而开发出的一种轻量级的容器型框架,它具有控制反转(IOC)和面向切面(AOP)两大特性。控制反转通过依赖注入的方式促进了松耦合。当创建一个对象且需要依赖其他对象时,这些对象不用你自已去创建或去查找,而是通过Spring自己传递进来,即依赖注入,而依赖注入只是控制反转的一个具体例子。面向切面编程,不是对某一个具体的对象编程,而是对某一类对象的所有对象编程,这是一个相对模糊和更加抽象化的编程。使用Spring开发应用软件使得模块之间的耦合度降低,提高了开发的效率,它帮助你将横切关注点从它们所影响的对象中分离出来,然而依赖注入帮助你将你的应用程序对象从彼此中分离出来。(2)Springmvc SpringMVC是在SpringWebFlow里的一款典型的基于mvc的web框架,用于代替servlet处理或响应页面请求,以及获取表单,校验数据等功能。Springmvc通过大量的注解方式,使得操作变得更加效率,同时保留非注解方式,对于使用习惯其他web层框架的更加友好。核心控制器DispatcherServlet在整个生命周期里起到了至关重要的作用,包括了接收请求、调用资源、分派调用和响应请求,贯穿于整个流程。处理映射器、处理适配器、视图解析器是Springmvc的三大组件,分别实现了对请求url的映射、调用处理器、解析具体视图的功能。(3)Mybatis Mybatis是一个基于Java的持久层框架,它支持普通的SQL语句、存储过程以及高级映射,并且避免了JDBC代码需要手工设置参数以及对结果集的手工检索。相对于老对手hibernate更加灵活和简单,在处理SQL上更为细致,减少查询字段,在应付复杂查询方面更为高效。(4)Bootstrap Bootstrap是一款基于HTML、CSS、JS的的前端开发框架,具有简洁、直观的特点,它是由动态css和less写成的,设计者可以对所有组件的CSS变量进行修改,也可以根据需求裁剪代码。Bootstrap提供了带有网络系统、链接样式、组件样式的基本网页结构,让前端开发更加快速,适用所有设备和所有项目。3.系统分析3.1用户需求众筹平台近几年来,在国内发展不断状大,平台数量层出不穷,用户量也相当庞大[12],相信在将来会有更多的人参与到众筹当中来。随着用户和平台的增加,用户就不得不考虑众筹平台的安全性,目前国内众筹平台大多采用中心化的数据库服务来管理用户的数据,用户无法对自己的数据进行管理随时会有被泄露的可能,因此为了最大程度上保障用户的权益,需要采去中心化的方式来管理,如此,用户信息将可以由自身来管理,而且还可以对其他用户有一定的监督作用。3.2功能需求 功能需求就是根据用户的需求实现对应的功能,本平台应在实现用户众筹的基本功能基础上,要保障用户信息的安全,不会出现信息被篡改、数据泄露的可能。其主要的功能模块应包括用户模块部分:提供用户注册查询功能,发起众筹模块即用户注册成功后可以发起众筹项目,跟投模块部分即用户可以根据自己的情况对已发起的众筹进行跟投,结算模块即对到达一定条件的众筹项目进行结算功能。在众筹中产生交易信息应该被记录在去中心化的数据库中,以保障数据的安全可靠。3.3业务需求 开发一个基于区块链的股权众筹平台,应该在众筹的基本功能基础上,保证交易的公正性,即抛开第三方的数据管理,将权利分配给所有用户,提升可信度,其次保证用户的数据不被其他用户窃取、篡改。一个完整的众筹项目业务流程应该是:用户发起一个众筹项目,首先进行区块数据的验证,验证合格后进行数据库的保存及区块链的关联,并在页面中对发起的项目进行展示;另一个用户可以查询已经发起的项目,并进行跟投,最后,在项目达到某种条件之后,可以对项目进行结算[13]。4.基于区块链的众筹平台的架构设计4.1总体功能设计 业务系统的设计包括了用户模块、发起模块、跟投模块和结算模块四大模块。其中在用户模块中可以进入用户的注册登录,该功能可能是每个平台网站必不可少的,除此之外,针对区块链,还添加了加入节点的功能。除了用户模块,作为该平台重要的业务支撑,其他三大模块也是必不可少的功能。综上,众筹平台业务系统的功能结构图如下图1所示:图1系统功能结构图4.1.1用户模块功能设计用户模块设计:在系统中设计了有3种角色,一种是平台的普通用户,一种是区块系统普通用户,还有一种是区块链管理员用户。平台普通用户主要用于登录此平台,只能进行查询众筹项目的功能;区块系统普通用户能对众筹项目进行查询、跟投、个人结算操作;区块系统管理员用户,是该区块链的发起者,拥有发起众筹项目的权限,也拥有对该区块链成员的加入和踢除权限。平台普通用户可以通过加入组织来成为区块链用户,需要管理员用户将文件加入该区块网络,在平台进行任何操作都需要进行登录。4.1.2发起模块功能设计 发起模块设计:该功能通过将由区块链管理用户发起,在页面中输入项目的具体信息,发布到平台上。项目的信息会经由区块网络生成一个超级账本,记录到区块链中,这些信息包括了项目的名字、项目的启动资金、项目的筹集资金、项目的状态等,这些信息也会通过存储在数据库中,以便系统更优的运行。4.1.3跟投模块功能设计 跟投模块设计:在加入区块链并成员账本成员后,可以对平台中的项目进行跟投,也就是投资。跟投成功后,如果项目未结束,你可以通过个人结算选择退出投资或者将投资转移给同一区块链中的其他成员,以退出投资,当然,这些信息会在区块链中生成区块以记录,在数据库也同样会记录这些信息。4.1.4结算模块功能设计 结算模块设计:项目众筹成功后,资金将变成项目所有,通过个人结算可以在项目未结束之前退出众筹或者转让,以规避风险;项目结算是在项目需要结束的时候结束此次众筹,将以投资的比例回报或亏损给投资人,这意味着区块链的生命周期结束。4.2系统模型设计在本设计中,采用了应用系统加区块链系统的结合的方式。Tomcat承担了部署应用系统的任务,使应用系统提交请求到区块链系统的智能合约,ca模块去验证请求的合法性,peer执行本次合约的具体代码并生成交易区块block,而且还会将执行的结果验证并返回给智能合约,orderer则对交易区块进行验证和排序,couchdb将对这些排好序区块进行存储。其总体的架构如下图2所示:图2 众筹平台系统模型4.3区块系统架构设计Fabric是一个可扩展性的模块化的开源github区块链项目,这些模块都被打包成镜像且相互依赖,它们都用Docker来充当运行媒介。这些模块都是一个节点,它们可以被全部虚拟化在一台主机中,可以分散配置在各个主机中,而这些主机可以是一台物理主机或者虚拟机,且必须支持Docker的运行。Fabric的模块化在结构上也分了层次,在底层利用Gossip协议进行同步[14],利用gRPC进行交互,这些交互都基于了P2P网络。在中间层分为许多组件和模块,权限管理利用现有的密码学技术,如PKI体系、数字证书、加解密算法来保证数据的安全,同时使用策略来指定各场景下的操作权限。账本是Fabric最核心的结构,记录着应用的信息,应用则通过发起交易来向账本中记录数据;交易的执行通过链码来实现,并且制约于区块链结构和共识机制;链码的执行又基于容器和状态。而在应用层,开发者只需要通过gRPC和SDK的API来和这些资源打交道即可,无需关心如何实现。这些模块的结构如下图3所示:图3系统模块结构4.4 应用系统结构设计在web应用平台的设计也分为了前端和后端的设计,前端的设计使用了jsp来展示内容,jquery用于获取页面组件的一些属性和内容,Javascript用来响应用户对网页的操作,比如即时的检查等,jquery与javascript的结合,使得用户与平台的交互更加顺畅,也减少了程序设计人员编码工作;Ajax可以让平台在不刷新网页的情况下去数据库获取一些信息,也是为了增加交互的一种设计;Bootstrap插件拥有自己的组件风格,这让整个页面显得更加好看,在没有UI的情况下,Bootstrap是一个简单的布局工具。后端的设计中使用了Spring作为容器框架各组件的生命周期,包括了对Springmvc的配置文件、service和dao这些对象;mybatis的配置文件和mapper文件。Springmvc是业务的控制器,它主要是通过自身的映射控制器去找到对应的控制器、服务和数据库操作对象,让它们能够正常工作,其中service是为了完成某种任务而建立的一种服务,服务调用dao去数据库执行任务。Mybatis是持久层的一种框架,它通过mapper映射了dao对象的所有操作语句,dao对象在执行任务的时候就会去查找这个映射从而执行具体的语句。在本系统中,为了保证数据的安全可信任引入了Fabric的支持,在发生交易的时候,应用系统就会通过service去调用FabricManager,实现交易能在区块系统中进行。FabricManager是用于管理应用系统中的Fabric实例的一种管理器,通过它可以去调用ChaincodeManager从而实现对区块系统的访问;FabricConfig是用于配置应用系统与区块系统连接的属性配置文件;ChaincodeManager是SDK的实现,即可通过网络调用区块链中chaincode的代码实现交易。综上,整个应用系统的结构设计为下图4所示:图4众筹平台应用系统结构4.5数据库设计 基于区块链的众筹平台的数据库设计,基本的实体对象为用户和项目,其中主要的数据库表包括用户表、项目表、投资详细表、个人结算信息表。用户表ZC_USER,是用户的信息表,其中的字段包括了用户的标识(ID)、用户名(USERNAME)、用户密码(PASSWORD)、加入组织名称(ORG)、账户(COUNT)。其表的设计结构如下表1所示:表1用户表字段名类型是否为空注释IDVARCHAR2否用户标识USERNAMEVARCHAR2否用户名PASSWORDVARCHAR2否用户密码ORGVARCHAR2否加入的组织COUNTFLOAT否用户账户BLOCK_IDVARCHAR2否用户在区块中的标识项目表ZC_PROJECT,是众筹项目信息表,其中的字段包括了项目标识(PROJ_ID)、项目名(PROJ_NAME)、项目描述(PROJ_CONTEXT)、项目预筹金额(PROJ_ALL_FUND)、项目已筹金额(PROJ_RAISE_FUND)、项目状态(PROJ_STATUS)。其表的设计结构如下表2所示:表2项目表字段名类型是否为空注释PROJ_IDVARCHAR2否项目标识PROJ_NAMEVARCHAR2否项目名PROJ_CONTEXTVARCHAR2是项目描述PROJ_ALL_FUNDFLOAT否项目预筹金额PROJ_RAISE_FUNDFLOAT是项目已筹金额PROJ_STATUSVARCHAR2否项目状态PROJ_BLOCK_IDVARCHAR2否项目在区块中的标识投资详细INVEST_DETAIL,是众筹投资的信息表,其中的字段包括了记录标识(INVEST_ID)、用户标识(USER_ID)、项目标识(PROJ_ID)、投资金额(INVEST_AMOUNT)。其表的设计结构如下表3所示:表3投资详细表字段名类型是否为空注释INVEST_IDVARCHAR2否记录标识USER_IDVARCHAR2否用户标识PROJ_IDVARCHAR2否项目标识INVEST_AMOUNTFLOAT否投资金额BLOAK_IDVARCHAR2否记录交易信息的区块ID个人结算SETTLE_PERSON,是个人结算的信息表,其中的字段包括了项目标识(SETTLE_ID)、项目名(AUSER_ID)、项目描述(BUSER_ID)、项目预筹金额(DEAL_AMOUNT)。其表的设计结构如下表4所示:表4个人结算表字段名类型是否为空注释SETTLE_IDVARCHAR2否结算标识AUSER_IDVARCHAR2否交易人标识BUSER_IDVARCHAR2否被交易人标识DEAL_AMOUNTVARCHAR2否交易金额5.基于区块链的众筹平台的实现5.1区块链系统实现 从github下载安装Fabric源码进行安装,并切换使用版本为v1.1.0。由于Fabric的各模块都被打包成镜像放在DockerHub上,所以我们需要参照Fabric镜像关系将这些镜像按照下载到本地,以供容器运行。下载的时候特别要注意版本与镜像之间的关系,例如将peer节点下载到本地的命令如图5如示:图5下载peer节点到本地 在该区块链系统中需要5个节点,分别是cli、peer、couchdb、ca、orderer。将这些节点都布署在一台虚拟机上,以容器的方式运行,因此我们需要为这些节点编写Docker-compose文件。每个添加一个peer节点,要保证该节点能够独存储区块链副本以及节点之间的验证,就需要一起将cli、peer、couchdb、ca定义在节点中,同时通过拷贝证书文件,保证每个节点的证书一致。例如ca容器的定义如下图6所示:图6ca容器在yaml文件中的定义 Channel是在Fabric中一个重要的对象,在区块链网络中,要创建一个链必须创建一个通道,然后将节点成员加入到该通道,由这些成员来共同维护超级账本。通道的创建不仅是为了创建区块链,还保证了账本的私有化,同时限制了信息传播的范围。Channel的创建命令如下图7所示:图7创建channel编写智能合约代码,以实现对区块链的操作,其中查询的智能合约代码如下图8所示:图8chaincode查询 至此,本文即实现了区块链系统的部署。容器信息如下表5所示:表5区块链系统容器信息CONTAINERIDIMAGECOMMANDPORTSNAMES6a24cc9ec380Hyperledger/Fabric-tools"/bin/bash"clic7b37dd4e821Hyperledger/Fabric-peer"peernodestart":7051-7053->7051-7053/tcp03680bd135edHyperledger/Fabric-couchdb"tini--/Docker-ent…"4369/tcp,9100/tcp,:5984->5984/tcpcouchdb9bf3f912519aHyperledger/Fabric-ca"sh-c'Fabric-ca-se…":7054->7054/tcpcabb8f6d648268Hyperledger/Fabric-orderer"orderer":7050->7050/tcp5.2用户模块的实现 用户模块的注册功能通过在home.jsp页面点击用户头像按钮,会弹出模态框,当点击注册按钮,则跳转到regist.jsp页面,由该页面提交用户注册的表单信息到后台,检测数据格式匹配后,添加到用户信息表。而登录功能也是同样在home.jsp点击用户头像按钮,再选择登录,在弹出的模态框中输入用户名密码,再点击提交表单信息,到数据库中验证用户名密码是否正确,若登录成功则跳转到用户界面,若登录失败则在此页面中提示错误信息。其流程图如以下图9所示:图9用户模块的流程图 数据库方面选择的是oracle,在后端由Mybatis去连接数据库,数据库的配置文件表现为图10所示:图10连接数据的配置文件登录界面如图11所示:图11登录界面用户页面如图12所示:图12用户页面 在用户参与众筹之前,应该进行加入节点的操作,实现用户与区块链的节点相对应。加入节点的页面如图13所示:图13加入节点 加入节点命令如图14所示:图14节点的加入5.3发起模块的实现 发起众筹项目的功能通过在home.js点击发起众筹按钮跳转到发起页面,在此页面中输入项目的信息,如项目名称、项目预期资金等信息。服务器获得这些信息后,将这些信息存储到数据库中,在此之前,应完成区块链channel的创建,发起成功后将会返回到主页面,发起失败则返回失败信息。其流程图为如下图15所示:图15发起流程发起项目的原型图如下图16所示:图16发起众筹项目界面5.4跟投模块的实现 跟投功能会首先会通过搜索框或者跟投页面查看有哪些众筹项目,然后点击项目,就可输入金额进行跟投,后台会通过查询你是否加入通道,如果没有加入通道不能进行跟投,若已经加入则查询你的账户是否有足够的余额,然后在项目筹集资金账户中和跟投的账户中增加和减去相应的金额。跟投成功后返回查询页面,失败后返回失败信息。其流程图如下图17所示:图17跟投流程 为保证交易的可靠性,在区块链中的交易是一个复杂的过程,当成员加入到通道后,应用系统通过SDK或API生成交易议案(Proposal)给背书(Endorser)节点。背书结点收到议案后,会对其进行合法性和ACL权限检查,通过模拟运行,将运行结果进行背书返回给应用系统。应用系统收到背书信息后对其进行检查比对,对交易提案进行广播,并发送给Orderer进行排序。Ordere不读取交易细节,从网络中接收交易,按时间顺序调用每个通道的交易,为每个通道创建交易区块,然后发送给Committer节点,Committer节点获取排序后的交易区块,对这些交易区块进行最后检查并更新账本,然后将区块加入到链中并记录交易是否有效。区块链中的交易流程如下图18所示:图18区块交易流程跟投将会产生交易,交易调用区块的代码如下图19所示图19调用区块进行交易跟投页面如下图20所示:图20跟投页面5.5结算模块的实现结算模块包括了个人结算和项目结算,个人结算在项目界面点击个人结算,可以选择交易人,即可把投资记录转为他人,以获取其他利益,如果选择自己,则将投资原款退回账户。项目结算会判断项目是否已经完成众筹,只有完成众筹的项目才能选择项目结算,并且只能由发起人操作。其中个人结算流程如图21所示:图21个人结算流程个人结算页面如图22所示:图22个人结算页面6.系统测试6.1测试方法本次系统测试的方法采用应用系统加区块系统的结合测试,在开发阶段已经对每个功能模块进行了测试,保证了每个模块能够按照预期的流程进行,再进行系统集成测试,主要是测试每个功能与区块链接口的完整性和可效性,以使得整个系统能按需求正常运行。6.2测试用例1)用户模块功能测试 通过注册和登录两个用户A和B,在页面测试用户模块的各个功能是否可以正操作运行,测试结果见表6所示:表6用户模块功能测试 操作用例结果测试结果注册用户用户名不重名一致登录用户能正常跳转页面一致加入节点能修改组织字段一致转账双方用户可以进行转账操作一致2)发起模块功能测试 管理员通过发起众筹,然后去执行创建通道的命令,查看是否可以创建成功,测试结果见表7所示:表7发起模块功能测试操作用例结果测试结果发起众筹数据库能正常记录项目信息一致通道创建通道创建正常一致加入默认节点节点加入通道并生成创世区块一致3)跟投模块功能测试 用户选择想参与的项目并跟投后,生成跟投记录,并从对应的账户中执行增加和减去金额,我们从区块链中和数据库中数据是否正确,测试结果见表8所示:表8发起模块功能测试操作用例结果测试结果跟投项目数据库能正常记录跟投信息一致项目账户增加增加了相应资金一致成员账户减少减少了相应资金一致4)结算模块功能测试 当众筹发起者想结束此次项目或者投资者想提

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论