基于區(qū)塊鏈的股權(quán)眾籌平臺的設(shè)計與實現(xiàn)_第1頁
基于區(qū)塊鏈的股權(quán)眾籌平臺的設(shè)計與實現(xiàn)_第2頁
基于區(qū)塊鏈的股權(quán)眾籌平臺的設(shè)計與實現(xiàn)_第3頁
基于區(qū)塊鏈的股權(quán)眾籌平臺的設(shè)計與實現(xiàn)_第4頁
基于區(qū)塊鏈的股權(quán)眾籌平臺的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

基于區(qū)塊鏈的股權(quán)眾籌平臺設(shè)計與實現(xiàn)DesignandImplementationofEquityCrowd-fundingPlatformBasedonBlockChain計算機科學(xué)與技術(shù)(教育)袁靜ComputerScienceandTechnology(Education)YuanJing 指導(dǎo)老師黃強DirectedbyHuangQiang摘要:隨著我國人口基數(shù)的持續(xù)上升,傳統(tǒng)就業(yè)崗位正逐漸被人工智能和新興技術(shù)所淘汰,而國家提倡大眾創(chuàng)業(yè)、大力扶持小微企業(yè)。在這樣的就業(yè)形勢下,本設(shè)計運用區(qū)塊鏈的超級賬本(HyperledgerFabric)SDK和JAVA相結(jié)合的技術(shù),實現(xiàn)了基于區(qū)塊鏈可信的資產(chǎn)化、資產(chǎn)交易化、資產(chǎn)收益化和資產(chǎn)可跟蹤化的平臺,解決了創(chuàng)業(yè)者與投資人之間互不信任的問題及股權(quán)眾籌涉及到的法律等問題。關(guān)鍵詞:眾籌、股權(quán)眾籌、區(qū)塊鏈、FabricAbstract:WiththecontinuousincreaseofpopulationbaseinChina,traditionalemploymentpositionsaregraduallybeingeliminatedbyartificialintelligenceandemergingtechnologies,whiletheStateadvocatesmassentrepreneurshipandvigorouslysupportssmallandmicroenterprises.Undersuchemploymentsituation,thisdesignusesthetechnologyofcombinationofHyperledgerFabricSDKandJAVA,realizestheplatformofassettransformation,assettransaction,assetprofitabilityandassettraceabilitybasedonthetrustworthinessofblockchain,andsolvestheproblemofmutualdistrustbetweenentrepreneursandinvestorsandthelegalissuesinvolvedinequityCrowd-funding.Keywords:Crowd-funding、Equity-basedcrowd-funding、Blockchain、Fabric緒論1.1論文研究背景自高校擴招以來,大學(xué)生畢業(yè)人數(shù)年年創(chuàng)新高,至2018年,已有超過820萬畢業(yè)生,若加上中職畢業(yè)生與尚未就業(yè)學(xué)生,將超1500萬人。就業(yè)難的問題受到政府和社會的高度重視,尤其在十八大以來,提出了“大眾創(chuàng)業(yè),大眾創(chuàng)新”的口號,大學(xué)生創(chuàng)業(yè)的熱潮席卷而來,隨之而來的便是創(chuàng)業(yè)成功率的問題,與發(fā)達國家相比我國創(chuàng)業(yè)成功率只有2%~3%[1]。其主要原因是大學(xué)生創(chuàng)業(yè)并不受投資人的信任,大多無法完成項目融資便中斷了。因此創(chuàng)業(yè)者需要借助一個安全可靠的平臺來幫助達到融資的目的。融資的方式有債務(wù)性融資和權(quán)益性融資[2],債務(wù)性融資會構(gòu)成負(fù)債,采用抵押或貸款的方式獲得融資,但對于大學(xué)生來說,這樣的方式不適用。眾籌是一種新型的互聯(lián)網(wǎng)金融模式[3],指創(chuàng)業(yè)者向投資者募集資金,進而獲得資金幫助,用于創(chuàng)作、發(fā)明、創(chuàng)業(yè)等活動,其成本低、快速等特點吸引了大多慕名而來的人。同時眾籌的缺點也暴露無疑,其安全性得不到保障和與非法集資掛的特點將大多數(shù)的慕名投資者擋在門外,而區(qū)塊鏈的出現(xiàn),將把眾籌帶上一個新的高度。區(qū)塊鏈的特點主要有去中心化、安全存儲各類交易數(shù)據(jù)、信息不可偽造和篡改等,保證了區(qū)塊鏈交易的可靠,加上加密技術(shù)保證了信息的不可泄露,這對于金融行業(yè)來說將是一個巨大的保障,基于區(qū)塊鏈的眾籌平臺將會讓交易更加安全可靠,同時對交易信息進行追溯,這使交易雙方對交易事實不可否認(rèn)。1.2國內(nèi)外研究現(xiàn)狀眾籌一詞自2010年傳入中國至今,經(jīng)歷過風(fēng)雨也有輝煌,根據(jù)金研院《我國眾籌行業(yè)的發(fā)展?fàn)顩r》顯示,截止2018年7月,我國眾籌平臺在經(jīng)歷2017年行業(yè)大洗牌后,其中存活下來的200+眾籌平臺中,股權(quán)型的眾籌平臺高達30.27%,僅次于權(quán)益型的眾籌平臺。在國內(nèi)的股權(quán)眾籌平臺,大多與非法集資逃不開關(guān)系,而有些融資者籌得資金后就攜款潛逃,政府難以對這些平臺進行管理。而在國外,自美國股權(quán)眾籌鼻祖Angelist的上線以來,不僅幫助自已完成融資,還幫助一千多家企業(yè)完成融資,美國政府也希望借此模式促進企業(yè)發(fā)展,并簽署了《促進初創(chuàng)企業(yè)融資法案》,為美國股權(quán)眾籌打開了通道,并逐年完善監(jiān)管制度。在歐洲,其眾籌市場規(guī)模約占全球市場三分之二,歐洲對股權(quán)眾籌的支持表現(xiàn)在發(fā)出名為“眾籌在歐盟——發(fā)掘歐盟行動的潛在附加價值”的《意見征詢書》,并且耐心進行市場調(diào)查而且重視對投資者的保護[4]。而區(qū)塊鏈的應(yīng)用方面,“區(qū)塊鏈”技術(shù)在國外連花旗銀行、瑞銀、紐約梅隆、高盛、摩根大通等銀行被投入巨資進行技術(shù)研發(fā)[5],國內(nèi)外學(xué)者和專家也紛紛提出區(qū)決鏈技術(shù)對未來金融業(yè)的影響。國內(nèi)的眾籌平臺像井噴式一樣的增長,眾籌面臨著許多問題,主要是:一是開展眾籌的平臺不能夠有足夠的可信力,這主要由于平臺技術(shù)不能支持它說服投資者,投資者希望能更多地了解項目細(xì)節(jié)及執(zhí)行情況,而平臺主要是為了解決資金供需雙方的困難,實際上平臺本身不承擔(dān)受信責(zé)任,并不能保證投資都的資金是被合理使用的。二是在傳統(tǒng)眾籌項目中,項目的周期時間長,投資都很難從將資金在短時間變現(xiàn),如遇風(fēng)險也不能及時轉(zhuǎn)售降低風(fēng)險,這對于一些中小投資者來說是一種沒有回報的投資,他們很難接受這樣的風(fēng)險。2.區(qū)塊鏈眾籌平臺相關(guān)內(nèi)容概述2.1區(qū)塊鏈眾籌平臺概述眾籌的興起源于艱難奮斗的藝術(shù)家們?yōu)閯?chuàng)作籌集資金的手段,通過搭建網(wǎng)絡(luò)平臺面對公眾籌資,以便使他們的夢想有可能實現(xiàn),但現(xiàn)在已經(jīng)演變成為初創(chuàng)企業(yè)和個人為自己獲取資金的一個渠道。眾籌平臺在基于眾籌的功能上,大多數(shù)人逐漸追求更為安全可靠的平臺性能。在區(qū)塊鏈中,一個眾籌項目就相當(dāng)于一條區(qū)塊鏈,也是一個賬本,而一個用戶就相當(dāng)于區(qū)塊鏈中的成員,這條區(qū)塊鏈記錄了從項目誕生以來的所有交易信息。所有的成員都參與共同維護同一個賬本并在自己的節(jié)點創(chuàng)建賬本副本,達到去中心化的數(shù)據(jù)管理方式,成員之間用安全多方計算SMC[6]來實現(xiàn)互不信息的多方之間保護隱私的協(xié)同計算,保證了交易雙方的安全性和可靠性。 2.2區(qū)塊鏈眾籌平臺相關(guān)技術(shù)2.2.1區(qū)塊鏈關(guān)鍵技術(shù) 區(qū)塊鏈的構(gòu)建主要包括超級賬本技術(shù)、智能合約技術(shù)、Docker容器虛擬化等技術(shù),其基本內(nèi)容可以概括為:(1)超級賬本技術(shù)HyperledgerFabric[7]是被linux基金會設(shè)計來為使用模塊化架構(gòu)開發(fā)區(qū)塊鏈應(yīng)用程序的基礎(chǔ),以便開發(fā)人員能夠?qū)@些模塊實現(xiàn)即插即用的目的,它由來自開發(fā)社區(qū)內(nèi)的多個組織的人員共同維護。Fabric使用容器技術(shù)來托管構(gòu)成系統(tǒng)應(yīng)用邏輯的智能合約(也稱為鏈代碼)。簡而言之,HyperledgerFabric是為企業(yè)構(gòu)建的領(lǐng)先的開源、通用區(qū)塊鏈結(jié)構(gòu)。其提供了五大核心模塊以支撐區(qū)塊的運行,分別是peer、orderer、cryptogen、configtxgen、configtxlator。HyperledgerFabric的許多組件和模塊都是使用Go語言編寫的,這為Fabric提供了強大的海量并行支持[8]。(2)智能合約技術(shù)智能合約[9]又稱chaincode,簡稱“鏈碼”。它在Fabric中是一段用Go、Java和Node.js編寫的,并能夠?qū)崿F(xiàn)預(yù)定義接口的程序。應(yīng)用系統(tǒng)可以調(diào)用這些程序來實現(xiàn)對區(qū)塊狀態(tài)的訪問和控制,進而完成業(yè)務(wù)邏輯或查詢結(jié)果。每一個智能合約都會實現(xiàn)區(qū)塊鏈接口,即“shim”,且必須實現(xiàn)init和invoke方法,以達到對應(yīng)用程序的初始化和響應(yīng)業(yè)務(wù)系統(tǒng)的各種invoke事務(wù)。一個鏈碼可以調(diào)用另一個鏈碼,若兩個鏈碼在不同的channel[10](通道)中,則只允許讀取類的查詢。(3)Docker容器虛擬化技術(shù)Docker是一個容器引擎,開發(fā)人員可以他們的應(yīng)用打包移植到容器中,就可以使這些應(yīng)用運行在任何一個Linux機器上。Docker能讓項目的部署更加快捷,提高了開發(fā)效率。以往要部署一個mysql服務(wù)器,平均得耗時2小時,而用Docker來實現(xiàn),只需要5分鐘[11];虛擬化的實現(xiàn)能讓你的機器運行不同平臺的軟件或系統(tǒng),同一個Docker可以在不同環(huán)境中使用,這大大降低了硬件要求和應(yīng)用環(huán)境之間的耦合。Docker-compose是一個可以讓你輕松且高效的定義、管理和運行多容器Docker應(yīng)用程序的工具,可以使用YAML文件來配置應(yīng)用服務(wù)。Fabric的各模塊都是通過Docker來打包并運行的,以支持各節(jié)點“熱插撥”功能的支持。2.2.2Web平臺技術(shù)使用java來開發(fā)web平臺,主要采用了SSH的框架設(shè)計,分別是Spring、Springmvc、Mybatis,在前端頁面主要采用了Bootstrap插件,其主要內(nèi)容概括為:(1)SpringSpring是由RodJohnson為解決企業(yè)在開發(fā)大型應(yīng)用軟件時面臨的復(fù)雜性而開發(fā)出的一種輕量級的容器型框架,它具有控制反轉(zhuǎn)(IOC)和面向切面(AOP)兩大特性??刂品崔D(zhuǎn)通過依賴注入的方式促進了松耦合。當(dāng)創(chuàng)建一個對象且需要依賴其他對象時,這些對象不用你自已去創(chuàng)建或去查找,而是通過Spring自己傳遞進來,即依賴注入,而依賴注入只是控制反轉(zhuǎn)的一個具體例子。面向切面編程,不是對某一個具體的對象編程,而是對某一類對象的所有對象編程,這是一個相對模糊和更加抽象化的編程。使用Spring開發(fā)應(yīng)用軟件使得模塊之間的耦合度降低,提高了開發(fā)的效率,它幫助你將橫切關(guān)注點從它們所影響的對象中分離出來,然而依賴注入幫助你將你的應(yīng)用程序?qū)ο髲谋舜酥蟹蛛x出來。(2)Springmvc SpringMVC是在SpringWebFlow里的一款典型的基于mvc的web框架,用于代替servlet處理或響應(yīng)頁面請求,以及獲取表單,校驗數(shù)據(jù)等功能。Springmvc通過大量的注解方式,使得操作變得更加效率,同時保留非注解方式,對于使用習(xí)慣其他web層框架的更加友好。核心控制器DispatcherServlet在整個生命周期里起到了至關(guān)重要的作用,包括了接收請求、調(diào)用資源、分派調(diào)用和響應(yīng)請求,貫穿于整個流程。處理映射器、處理適配器、視圖解析器是Springmvc的三大組件,分別實現(xiàn)了對請求url的映射、調(diào)用處理器、解析具體視圖的功能。(3)Mybatis Mybatis是一個基于Java的持久層框架,它支持普通的SQL語句、存儲過程以及高級映射,并且避免了JDBC代碼需要手工設(shè)置參數(shù)以及對結(jié)果集的手工檢索。相對于老對手hibernate更加靈活和簡單,在處理SQL上更為細(xì)致,減少查詢字段,在應(yīng)付復(fù)雜查詢方面更為高效。(4)Bootstrap Bootstrap是一款基于HTML、CSS、JS的的前端開發(fā)框架,具有簡潔、直觀的特點,它是由動態(tài)css和less寫成的,設(shè)計者可以對所有組件的CSS變量進行修改,也可以根據(jù)需求裁剪代碼。Bootstrap提供了帶有網(wǎng)絡(luò)系統(tǒng)、鏈接樣式、組件樣式的基本網(wǎng)頁結(jié)構(gòu),讓前端開發(fā)更加快速,適用所有設(shè)備和所有項目。3.系統(tǒng)分析3.1用戶需求眾籌平臺近幾年來,在國內(nèi)發(fā)展不斷狀大,平臺數(shù)量層出不窮,用戶量也相當(dāng)龐大[12],相信在將來會有更多的人參與到眾籌當(dāng)中來。隨著用戶和平臺的增加,用戶就不得不考慮眾籌平臺的安全性,目前國內(nèi)眾籌平臺大多采用中心化的數(shù)據(jù)庫服務(wù)來管理用戶的數(shù)據(jù),用戶無法對自己的數(shù)據(jù)進行管理隨時會有被泄露的可能,因此為了最大程度上保障用戶的權(quán)益,需要采去中心化的方式來管理,如此,用戶信息將可以由自身來管理,而且還可以對其他用戶有一定的監(jiān)督作用。3.2功能需求 功能需求就是根據(jù)用戶的需求實現(xiàn)對應(yīng)的功能,本平臺應(yīng)在實現(xiàn)用戶眾籌的基本功能基礎(chǔ)上,要保障用戶信息的安全,不會出現(xiàn)信息被篡改、數(shù)據(jù)泄露的可能。其主要的功能模塊應(yīng)包括用戶模塊部分:提供用戶注冊查詢功能,發(fā)起眾籌模塊即用戶注冊成功后可以發(fā)起眾籌項目,跟投模塊部分即用戶可以根據(jù)自己的情況對已發(fā)起的眾籌進行跟投,結(jié)算模塊即對到達一定條件的眾籌項目進行結(jié)算功能。在眾籌中產(chǎn)生交易信息應(yīng)該被記錄在去中心化的數(shù)據(jù)庫中,以保障數(shù)據(jù)的安全可靠。3.3業(yè)務(wù)需求 開發(fā)一個基于區(qū)塊鏈的股權(quán)眾籌平臺,應(yīng)該在眾籌的基本功能基礎(chǔ)上,保證交易的公正性,即拋開第三方的數(shù)據(jù)管理,將權(quán)利分配給所有用戶,提升可信度,其次保證用戶的數(shù)據(jù)不被其他用戶竊取、篡改。一個完整的眾籌項目業(yè)務(wù)流程應(yīng)該是:用戶發(fā)起一個眾籌項目,首先進行區(qū)塊數(shù)據(jù)的驗證,驗證合格后進行數(shù)據(jù)庫的保存及區(qū)塊鏈的關(guān)聯(lián),并在頁面中對發(fā)起的項目進行展示;另一個用戶可以查詢已經(jīng)發(fā)起的項目,并進行跟投,最后,在項目達到某種條件之后,可以對項目進行結(jié)算[13]。4.基于區(qū)塊鏈的眾籌平臺的架構(gòu)設(shè)計4.1總體功能設(shè)計 業(yè)務(wù)系統(tǒng)的設(shè)計包括了用戶模塊、發(fā)起模塊、跟投模塊和結(jié)算模塊四大模塊。其中在用戶模塊中可以進入用戶的注冊登錄,該功能可能是每個平臺網(wǎng)站必不可少的,除此之外,針對區(qū)塊鏈,還添加了加入節(jié)點的功能。除了用戶模塊,作為該平臺重要的業(yè)務(wù)支撐,其他三大模塊也是必不可少的功能。綜上,眾籌平臺業(yè)務(wù)系統(tǒng)的功能結(jié)構(gòu)圖如下圖1所示:圖1系統(tǒng)功能結(jié)構(gòu)圖4.1.1用戶模塊功能設(shè)計用戶模塊設(shè)計:在系統(tǒng)中設(shè)計了有3種角色,一種是平臺的普通用戶,一種是區(qū)塊系統(tǒng)普通用戶,還有一種是區(qū)塊鏈管理員用戶。平臺普通用戶主要用于登錄此平臺,只能進行查詢眾籌項目的功能;區(qū)塊系統(tǒng)普通用戶能對眾籌項目進行查詢、跟投、個人結(jié)算操作;區(qū)塊系統(tǒng)管理員用戶,是該區(qū)塊鏈的發(fā)起者,擁有發(fā)起眾籌項目的權(quán)限,也擁有對該區(qū)塊鏈成員的加入和踢除權(quán)限。平臺普通用戶可以通過加入組織來成為區(qū)塊鏈用戶,需要管理員用戶將文件加入該區(qū)塊網(wǎng)絡(luò),在平臺進行任何操作都需要進行登錄。4.1.2發(fā)起模塊功能設(shè)計 發(fā)起模塊設(shè)計:該功能通過將由區(qū)塊鏈管理用戶發(fā)起,在頁面中輸入項目的具體信息,發(fā)布到平臺上。項目的信息會經(jīng)由區(qū)塊網(wǎng)絡(luò)生成一個超級賬本,記錄到區(qū)塊鏈中,這些信息包括了項目的名字、項目的啟動資金、項目的籌集資金、項目的狀態(tài)等,這些信息也會通過存儲在數(shù)據(jù)庫中,以便系統(tǒng)更優(yōu)的運行。4.1.3跟投模塊功能設(shè)計 跟投模塊設(shè)計:在加入?yún)^(qū)塊鏈并成員賬本成員后,可以對平臺中的項目進行跟投,也就是投資。跟投成功后,如果項目未結(jié)束,你可以通過個人結(jié)算選擇退出投資或者將投資轉(zhuǎn)移給同一區(qū)塊鏈中的其他成員,以退出投資,當(dāng)然,這些信息會在區(qū)塊鏈中生成區(qū)塊以記錄,在數(shù)據(jù)庫也同樣會記錄這些信息。4.1.4結(jié)算模塊功能設(shè)計 結(jié)算模塊設(shè)計:項目眾籌成功后,資金將變成項目所有,通過個人結(jié)算可以在項目未結(jié)束之前退出眾籌或者轉(zhuǎn)讓,以規(guī)避風(fēng)險;項目結(jié)算是在項目需要結(jié)束的時候結(jié)束此次眾籌,將以投資的比例回報或虧損給投資人,這意味著區(qū)塊鏈的生命周期結(jié)束。4.2系統(tǒng)模型設(shè)計在本設(shè)計中,采用了應(yīng)用系統(tǒng)加區(qū)塊鏈系統(tǒng)的結(jié)合的方式。Tomcat承擔(dān)了部署應(yīng)用系統(tǒng)的任務(wù),使應(yīng)用系統(tǒng)提交請求到區(qū)塊鏈系統(tǒng)的智能合約,ca模塊去驗證請求的合法性,peer執(zhí)行本次合約的具體代碼并生成交易區(qū)塊block,而且還會將執(zhí)行的結(jié)果驗證并返回給智能合約,orderer則對交易區(qū)塊進行驗證和排序,couchdb將對這些排好序區(qū)塊進行存儲。其總體的架構(gòu)如下圖2所示:圖2 眾籌平臺系統(tǒng)模型4.3區(qū)塊系統(tǒng)架構(gòu)設(shè)計Fabric是一個可擴展性的模塊化的開源github區(qū)塊鏈項目,這些模塊都被打包成鏡像且相互依賴,它們都用Docker來充當(dāng)運行媒介。這些模塊都是一個節(jié)點,它們可以被全部虛擬化在一臺主機中,可以分散配置在各個主機中,而這些主機可以是一臺物理主機或者虛擬機,且必須支持Docker的運行。Fabric的模塊化在結(jié)構(gòu)上也分了層次,在底層利用Gossip協(xié)議進行同步[14],利用gRPC進行交互,這些交互都基于了P2P網(wǎng)絡(luò)。在中間層分為許多組件和模塊,權(quán)限管理利用現(xiàn)有的密碼學(xué)技術(shù),如PKI體系、數(shù)字證書、加解密算法來保證數(shù)據(jù)的安全,同時使用策略來指定各場景下的操作權(quán)限。賬本是Fabric最核心的結(jié)構(gòu),記錄著應(yīng)用的信息,應(yīng)用則通過發(fā)起交易來向賬本中記錄數(shù)據(jù);交易的執(zhí)行通過鏈碼來實現(xiàn),并且制約于區(qū)塊鏈結(jié)構(gòu)和共識機制;鏈碼的執(zhí)行又基于容器和狀態(tài)。而在應(yīng)用層,開發(fā)者只需要通過gRPC和SDK的API來和這些資源打交道即可,無需關(guān)心如何實現(xiàn)。這些模塊的結(jié)構(gòu)如下圖3所示:圖3系統(tǒng)模塊結(jié)構(gòu)4.4 應(yīng)用系統(tǒng)結(jié)構(gòu)設(shè)計在web應(yīng)用平臺的設(shè)計也分為了前端和后端的設(shè)計,前端的設(shè)計使用了jsp來展示內(nèi)容,jquery用于獲取頁面組件的一些屬性和內(nèi)容,Javascript用來響應(yīng)用戶對網(wǎng)頁的操作,比如即時的檢查等,jquery與javascript的結(jié)合,使得用戶與平臺的交互更加順暢,也減少了程序設(shè)計人員編碼工作;Ajax可以讓平臺在不刷新網(wǎng)頁的情況下去數(shù)據(jù)庫獲取一些信息,也是為了增加交互的一種設(shè)計;Bootstrap插件擁有自己的組件風(fēng)格,這讓整個頁面顯得更加好看,在沒有UI的情況下,Bootstrap是一個簡單的布局工具。后端的設(shè)計中使用了Spring作為容器框架各組件的生命周期,包括了對Springmvc的配置文件、service和dao這些對象;mybatis的配置文件和mapper文件。Springmvc是業(yè)務(wù)的控制器,它主要是通過自身的映射控制器去找到對應(yīng)的控制器、服務(wù)和數(shù)據(jù)庫操作對象,讓它們能夠正常工作,其中service是為了完成某種任務(wù)而建立的一種服務(wù),服務(wù)調(diào)用dao去數(shù)據(jù)庫執(zhí)行任務(wù)。Mybatis是持久層的一種框架,它通過mapper映射了dao對象的所有操作語句,dao對象在執(zhí)行任務(wù)的時候就會去查找這個映射從而執(zhí)行具體的語句。在本系統(tǒng)中,為了保證數(shù)據(jù)的安全可信任引入了Fabric的支持,在發(fā)生交易的時候,應(yīng)用系統(tǒng)就會通過service去調(diào)用FabricManager,實現(xiàn)交易能在區(qū)塊系統(tǒng)中進行。FabricManager是用于管理應(yīng)用系統(tǒng)中的Fabric實例的一種管理器,通過它可以去調(diào)用ChaincodeManager從而實現(xiàn)對區(qū)塊系統(tǒng)的訪問;FabricConfig是用于配置應(yīng)用系統(tǒng)與區(qū)塊系統(tǒng)連接的屬性配置文件;ChaincodeManager是SDK的實現(xiàn),即可通過網(wǎng)絡(luò)調(diào)用區(qū)塊鏈中chaincode的代碼實現(xiàn)交易。綜上,整個應(yīng)用系統(tǒng)的結(jié)構(gòu)設(shè)計為下圖4所示:圖4眾籌平臺應(yīng)用系統(tǒng)結(jié)構(gòu)4.5數(shù)據(jù)庫設(shè)計 基于區(qū)塊鏈的眾籌平臺的數(shù)據(jù)庫設(shè)計,基本的實體對象為用戶和項目,其中主要的數(shù)據(jù)庫表包括用戶表、項目表、投資詳細(xì)表、個人結(jié)算信息表。用戶表ZC_USER,是用戶的信息表,其中的字段包括了用戶的標(biāo)識(ID)、用戶名(USERNAME)、用戶密碼(PASSWORD)、加入組織名稱(ORG)、賬戶(COUNT)。其表的設(shè)計結(jié)構(gòu)如下表1所示:表1用戶表字段名類型是否為空注釋IDVARCHAR2否用戶標(biāo)識USERNAMEVARCHAR2否用戶名PASSWORDVARCHAR2否用戶密碼ORGVARCHAR2否加入的組織COUNTFLOAT否用戶賬戶BLOCK_IDVARCHAR2否用戶在區(qū)塊中的標(biāo)識項目表ZC_PROJECT,是眾籌項目信息表,其中的字段包括了項目標(biāo)識(PROJ_ID)、項目名(PROJ_NAME)、項目描述(PROJ_CONTEXT)、項目預(yù)籌金額(PROJ_ALL_FUND)、項目已籌金額(PROJ_RAISE_FUND)、項目狀態(tài)(PROJ_STATUS)。其表的設(shè)計結(jié)構(gòu)如下表2所示:表2項目表字段名類型是否為空注釋PROJ_IDVARCHAR2否項目標(biāo)識PROJ_NAMEVARCHAR2否項目名PROJ_CONTEXTVARCHAR2是項目描述PROJ_ALL_FUNDFLOAT否項目預(yù)籌金額PROJ_RAISE_FUNDFLOAT是項目已籌金額PROJ_STATUSVARCHAR2否項目狀態(tài)PROJ_BLOCK_IDVARCHAR2否項目在區(qū)塊中的標(biāo)識投資詳細(xì)INVEST_DETAIL,是眾籌投資的信息表,其中的字段包括了記錄標(biāo)識(INVEST_ID)、用戶標(biāo)識(USER_ID)、項目標(biāo)識(PROJ_ID)、投資金額(INVEST_AMOUNT)。其表的設(shè)計結(jié)構(gòu)如下表3所示:表3投資詳細(xì)表字段名類型是否為空注釋INVEST_IDVARCHAR2否記錄標(biāo)識USER_IDVARCHAR2否用戶標(biāo)識PROJ_IDVARCHAR2否項目標(biāo)識INVEST_AMOUNTFLOAT否投資金額BLOAK_IDVARCHAR2否記錄交易信息的區(qū)塊ID個人結(jié)算SETTLE_PERSON,是個人結(jié)算的信息表,其中的字段包括了項目標(biāo)識(SETTLE_ID)、項目名(AUSER_ID)、項目描述(BUSER_ID)、項目預(yù)籌金額(DEAL_AMOUNT)。其表的設(shè)計結(jié)構(gòu)如下表4所示:表4個人結(jié)算表字段名類型是否為空注釋SETTLE_IDVARCHAR2否結(jié)算標(biāo)識AUSER_IDVARCHAR2否交易人標(biāo)識BUSER_IDVARCHAR2否被交易人標(biāo)識DEAL_AMOUNTVARCHAR2否交易金額5.基于區(qū)塊鏈的眾籌平臺的實現(xiàn)5.1區(qū)塊鏈系統(tǒng)實現(xiàn) 從github下載安裝Fabric源碼進行安裝,并切換使用版本為v1.1.0。由于Fabric的各模塊都被打包成鏡像放在DockerHub上,所以我們需要參照Fabric鏡像關(guān)系將這些鏡像按照下載到本地,以供容器運行。下載的時候特別要注意版本與鏡像之間的關(guān)系,例如將peer節(jié)點下載到本地的命令如圖5如示:圖5下載peer節(jié)點到本地 在該區(qū)塊鏈系統(tǒng)中需要5個節(jié)點,分別是cli、peer、couchdb、ca、orderer。將這些節(jié)點都布署在一臺虛擬機上,以容器的方式運行,因此我們需要為這些節(jié)點編寫Docker-compose文件。每個添加一個peer節(jié)點,要保證該節(jié)點能夠獨存儲區(qū)塊鏈副本以及節(jié)點之間的驗證,就需要一起將cli、peer、couchdb、ca定義在節(jié)點中,同時通過拷貝證書文件,保證每個節(jié)點的證書一致。例如ca容器的定義如下圖6所示:圖6ca容器在yaml文件中的定義 Channel是在Fabric中一個重要的對象,在區(qū)塊鏈網(wǎng)絡(luò)中,要創(chuàng)建一個鏈必須創(chuàng)建一個通道,然后將節(jié)點成員加入到該通道,由這些成員來共同維護超級賬本。通道的創(chuàng)建不僅是為了創(chuàng)建區(qū)塊鏈,還保證了賬本的私有化,同時限制了信息傳播的范圍。Channel的創(chuàng)建命令如下圖7所示:圖7創(chuàng)建channel編寫智能合約代碼,以實現(xiàn)對區(qū)塊鏈的操作,其中查詢的智能合約代碼如下圖8所示:圖8chaincode查詢 至此,本文即實現(xiàn)了區(qū)塊鏈系統(tǒng)的部署。容器信息如下表5所示:表5區(qū)塊鏈系統(tǒng)容器信息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用戶模塊的實現(xiàn) 用戶模塊的注冊功能通過在home.jsp頁面點擊用戶頭像按鈕,會彈出模態(tài)框,當(dāng)點擊注冊按鈕,則跳轉(zhuǎn)到regist.jsp頁面,由該頁面提交用戶注冊的表單信息到后臺,檢測數(shù)據(jù)格式匹配后,添加到用戶信息表。而登錄功能也是同樣在home.jsp點擊用戶頭像按鈕,再選擇登錄,在彈出的模態(tài)框中輸入用戶名密碼,再點擊提交表單信息,到數(shù)據(jù)庫中驗證用戶名密碼是否正確,若登錄成功則跳轉(zhuǎn)到用戶界面,若登錄失敗則在此頁面中提示錯誤信息。其流程圖如以下圖9所示:圖9用戶模塊的流程圖 數(shù)據(jù)庫方面選擇的是oracle,在后端由Mybatis去連接數(shù)據(jù)庫,數(shù)據(jù)庫的配置文件表現(xiàn)為圖10所示:圖10連接數(shù)據(jù)的配置文件登錄界面如圖11所示:圖11登錄界面用戶頁面如圖12所示:圖12用戶頁面 在用戶參與眾籌之前,應(yīng)該進行加入節(jié)點的操作,實現(xiàn)用戶與區(qū)塊鏈的節(jié)點相對應(yīng)。加入節(jié)點的頁面如圖13所示:圖13加入節(jié)點 加入節(jié)點命令如圖14所示:圖14節(jié)點的加入5.3發(fā)起模塊的實現(xiàn) 發(fā)起眾籌項目的功能通過在home.js點擊發(fā)起眾籌按鈕跳轉(zhuǎn)到發(fā)起頁面,在此頁面中輸入項目的信息,如項目名稱、項目預(yù)期資金等信息。服務(wù)器獲得這些信息后,將這些信息存儲到數(shù)據(jù)庫中,在此之前,應(yīng)完成區(qū)塊鏈channel的創(chuàng)建,發(fā)起成功后將會返回到主頁面,發(fā)起失敗則返回失敗信息。其流程圖為如下圖15所示:圖15發(fā)起流程發(fā)起項目的原型圖如下圖16所示:圖16發(fā)起眾籌項目界面5.4跟投模塊的實現(xiàn) 跟投功能會首先會通過搜索框或者跟投頁面查看有哪些眾籌項目,然后點擊項目,就可輸入金額進行跟投,后臺會通過查詢你是否加入通道,如果沒有加入通道不能進行跟投,若已經(jīng)加入則查詢你的賬戶是否有足夠的余額,然后在項目籌集資金賬戶中和跟投的賬戶中增加和減去相應(yīng)的金額。跟投成功后返回查詢頁面,失敗后返回失敗信息。其流程圖如下圖17所示:圖17跟投流程 為保證交易的可靠性,在區(qū)塊鏈中的交易是一個復(fù)雜的過程,當(dāng)成員加入到通道后,應(yīng)用系統(tǒng)通過SDK或API生成交易議案(Proposal)給背書(Endorser)節(jié)點。背書結(jié)點收到議案后,會對其進行合法性和ACL權(quán)限檢查,通過模擬運行,將運行結(jié)果進行背書返回給應(yīng)用系統(tǒng)。應(yīng)用系統(tǒng)收到背書信息后對其進行檢查比對,對交易提案進行廣播,并發(fā)送給Orderer進行排序。Ordere不讀取交易細(xì)節(jié),從網(wǎng)絡(luò)中接收交易,按時間順序調(diào)用每個通道的交易,為每個通道創(chuàng)建交易區(qū)塊,然后發(fā)送給Committer節(jié)點,Committer節(jié)點獲取排序后的交易區(qū)塊,對這些交易區(qū)塊進行最后檢查并更新賬本,然后將區(qū)塊加入到鏈中并記錄交易是否有效。區(qū)塊鏈中的交易流程如下圖18所示:圖18區(qū)塊交易流程跟投將會產(chǎn)生交易,交易調(diào)用區(qū)塊的代碼如下圖19所示圖19調(diào)用區(qū)塊進行交易跟投頁面如下圖20所示:圖20跟投頁面5.5結(jié)算模塊的實現(xiàn)結(jié)算模塊包括了個人結(jié)算和項目結(jié)算,個人結(jié)算在項目界面點擊個人結(jié)算,可以選擇交易人,即可把投資記錄轉(zhuǎn)為他人,以獲取其他利益,如果選擇自己,則將投資原款退回賬戶。項目結(jié)算會判斷項目是否已經(jīng)完成眾籌,只有完成眾籌的項目才能選擇項目結(jié)算,并且只能由發(fā)起人操作。其中個人結(jié)算流程如圖21所示:圖21個人結(jié)算流程個人結(jié)算頁面如圖22所示:圖22個人結(jié)算頁面6.系統(tǒng)測試6.1測試方法本次系統(tǒng)測試的方法采用應(yīng)用系統(tǒng)加區(qū)塊系統(tǒng)的結(jié)合測試,在開發(fā)階段已經(jīng)對每個功能模塊進行了測試,保證了每個模塊能夠按照預(yù)期的流程進行,再進行系統(tǒng)集成測試,主要是測試每個功能與區(qū)塊鏈接口的完整性和可效性,以使得整個系統(tǒng)能按需求正常運行。6.2測試用例1)用戶模塊功能測試 通過注冊和登錄兩個用戶A和B,在頁面測試用戶模塊的各個功能是否可以正操作運行,測試結(jié)果見表6所示:表6用戶模塊功能測試 操作用例結(jié)果測試結(jié)果注冊用戶用戶名不重名一致登錄用戶能正常跳轉(zhuǎn)頁面一致加入節(jié)點能修改組織字段一致轉(zhuǎn)賬雙方用戶可以進行轉(zhuǎn)賬操作一致2)發(fā)起模塊功能測試 管理員通過發(fā)起眾籌,然后去執(zhí)行創(chuàng)建通道的命令,查看是否可以創(chuàng)建成功,測試結(jié)果見表7所示:表7發(fā)起模塊功能測試操作用例結(jié)果測試結(jié)果發(fā)起眾籌數(shù)據(jù)庫能正常記錄項目信息一致通道創(chuàng)建通道創(chuàng)建正常一致加入默認(rèn)節(jié)點節(jié)點加入通道并生成創(chuàng)世區(qū)塊一致3)跟投模塊功能測試 用戶選擇想?yún)⑴c的項目并跟投后,生成跟投記錄,并從對應(yīng)的賬戶中執(zhí)行增加和減去金額,我們從區(qū)塊鏈中和數(shù)據(jù)庫中數(shù)據(jù)是否正確,測試結(jié)果見表8所示:表8發(fā)起模塊功能測試操作用例結(jié)果測試結(jié)果跟投項目數(shù)據(jù)庫能正常記錄跟投信息一致項目賬戶增加增加了相應(yīng)資金一致成員賬戶減少減少了相應(yīng)資金一致4)結(jié)算模塊功能測試 當(dāng)眾籌發(fā)起者想結(jié)束此次項目或者投資者想提

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論