GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題-2023年全國職業(yè)院校技能大賽賽項賽題_第1頁
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題-2023年全國職業(yè)院校技能大賽賽項賽題_第2頁
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題-2023年全國職業(yè)院校技能大賽賽項賽題_第3頁
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題-2023年全國職業(yè)院校技能大賽賽項賽題_第4頁
GZ036 區(qū)塊鏈技術(shù)應(yīng)用賽項賽題-2023年全國職業(yè)院校技能大賽賽項賽題_第5頁
已閱讀5頁,還剩279頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2023年全國職業(yè)院校技能大賽高職組“區(qū)塊鏈技術(shù)應(yīng)用”賽項賽卷(10卷)任務(wù)書參賽隊編號:背景描述隨著異地務(wù)工人員的增多,房屋租賃成為一個廣闊是市場;目前,現(xiàn)有技術(shù)中的房屋租賃是由房主發(fā)布租賃信息,租賃信息發(fā)布在房屋中介和/或租賃軟件,租客獲取租賃信息后,現(xiàn)場看房,并簽訂紙質(zhì)的房屋租賃合同;房屋租賃費用通過中介或直接給房主;另外,后期的房租還需房主收取。區(qū)塊鏈房屋租賃平臺業(yè)務(wù)流程圖現(xiàn)在利用區(qū)塊鏈技術(shù)實現(xiàn)房屋租賃系統(tǒng),將房東、房屋、租客加入到區(qū)塊鏈網(wǎng)絡(luò)中,將發(fā)布、租賃、合同、房租等信息存儲在區(qū)塊鏈的分布式網(wǎng)絡(luò)中,永久有效,無法篡改。在房屋租賃場景中,房東將房屋租出后,無法有效控制房屋的使用權(quán),比如租客未履行租賃合約相應(yīng)內(nèi)容時,房東無法及時有效限制租客對房屋的使用,造成租金或房屋使用權(quán)的回收困難。現(xiàn)有一個基于區(qū)塊鏈的房屋租賃平臺S,房東L在平臺中發(fā)布房源,S可以調(diào)用該房屋的電子鎖E的密碼。L在S中發(fā)放租房合同給租客T。在租房合同中規(guī)定,每個月的16號繳納房租,房租是3000元,交付形式是押一付一。在T簽署合同后的24小時之內(nèi),T需要在S中預(yù)存3000元押金、3000元房租,如果T未預(yù)存,交易失敗。如果T預(yù)存了押金和房租,L需要在24小時內(nèi)在S中預(yù)存3000元保證金,如果L未在規(guī)定時間內(nèi)預(yù)存保證金,S將T的保證金與房租退回,如果L在規(guī)定時間內(nèi)預(yù)存了保證金,雙方達(dá)成交易。S自動將T的一個月房租轉(zhuǎn)賬給L,并將房屋E的密碼發(fā)送給T。在每月16日,E會自動更換密碼,如果T按時繳納房租,S將房屋密碼重新更新給T;當(dāng)T到期未繳納,S將T的保證金轉(zhuǎn)賬給L代替一個月的租金,S仍會將密碼更新給T;如果保證金已被扣除后,T仍然到期未繳納,平臺進(jìn)入等待補繳狀態(tài),T將收不到變更后的密碼。如果未到租期L提前終止合同,S將L的保證金轉(zhuǎn)給T,如果T還有保證金將保證金一并退還給T。如果未到租期T提前終止合同,如果還有保證金S將T的保證金轉(zhuǎn)給L,T還需賠償L一個月租金,如果T保證金已被扣除,T需賠償L兩個月租金,S將L的保證金退還L。當(dāng)合同正常到期,S將L的保證金退還,T如果還有也退還。區(qū)塊鏈房屋租賃平臺系統(tǒng)架構(gòu)圖

模塊一:區(qū)塊鏈產(chǎn)品方案設(shè)計及系統(tǒng)運維(35分)選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計結(jié)果、運行代碼、運行結(jié)果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號\模塊一提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。任務(wù)1-1:區(qū)塊鏈產(chǎn)品需求分析與方案設(shè)計房屋租賃平臺中涉及到租客、房東、區(qū)塊鏈租房平臺、房屋等參與方,他們需要在區(qū)塊鏈租房平臺中完成賬戶注冊、身份上鏈、出租房屋、生成合同等多種業(yè)務(wù)活動。通過對業(yè)務(wù)活動的功能分析,可以更好的服務(wù)系統(tǒng)的開發(fā)流程。基于房屋租賃平臺系統(tǒng)架構(gòu),以區(qū)塊鏈房屋租賃平臺為背景,結(jié)合賬戶注冊、登錄服務(wù)、入駐上鏈、房屋出租、房租繳費等核心功能描述,撰寫流程圖/功能圖、用例圖等概要設(shè)計。本環(huán)節(jié)需要依據(jù)項目背景完成需求分析與方案設(shè)計,具體要求如下:1.依據(jù)給定區(qū)塊鏈房屋租賃平臺的業(yè)務(wù)流程圖以及用例表,使用UML工具編制系統(tǒng)業(yè)務(wù)用例圖,用例圖中包含系統(tǒng)參與角色以及用例。表1-1-1用例表用例編號用例標(biāo)題優(yōu)先級測試步驟預(yù)期結(jié)果測試結(jié)果HK-TEST-01房東在區(qū)塊鏈房屋租賃平臺出租房屋高在房屋租賃頁面,點擊出租功能按鈕,跳轉(zhuǎn)到維護(hù)房屋信息的頁面成功跳轉(zhuǎn)成功跳轉(zhuǎn)HK-TEST-02房東在區(qū)塊鏈房屋租賃平臺發(fā)放合同高在租房管理頁面獲取租客的租房列表信息,在租房列表中點擊發(fā)放按鈕,可以對該租客發(fā)放默認(rèn)的房屋合同發(fā)放成功發(fā)放成功HK-TEST-03租客在區(qū)塊鏈房屋租賃平臺簽署合同高在租房管理頁面獲取租房信息列表,在列表中點擊簽署按鈕,彈窗顯示租房合同,將個人信息填充到合同中收到合同簽署成功收到合同簽署成功HK-TEST-04租客在區(qū)塊鏈房屋租賃平臺繳納費用高在房租繳費頁面,獲取租房合同信息列表,在列表中點擊繳費按鈕,彈窗顯示租金和保證金并顯示繳費倒計時,在倒計時內(nèi)繳費成功合同記錄繳費成功合同記錄繳費成功HK-TEST-05房東在區(qū)塊鏈房屋租賃平臺繳納費用高在租房繳費頁面,獲取租房合同信息列表,在列表中點擊繳費按鈕,彈窗顯示保證金和繳費倒計時,在倒計時內(nèi)繳費成功合同記錄繳費成功合同記錄繳費成功HK-TEST-06區(qū)塊鏈房屋租賃平臺將房租轉(zhuǎn)賬給房東高租客、房東繳費成功后,平臺自動將房租轉(zhuǎn)賬給房東。在房東賬戶管理界面,顯示出收款記錄。同時在租客的租賃記錄里自動回顯房屋的最新電子鎖密碼收款成功電子鎖密碼回顯成功收款成功HK-TEST-07租客或者房東提前終止合同高租客或者房東在合同信息列表頁,點擊終止按鈕,彈窗進(jìn)行二次確認(rèn)是否提前終止,確認(rèn)則進(jìn)入違約頁面終止成功終止成功2.依據(jù)給定的背景信息、區(qū)塊鏈房屋租賃業(yè)務(wù)流程圖以及區(qū)塊鏈房租租賃平臺架構(gòu)圖以及給出的房屋租賃業(yè)務(wù)的核心流程,使用思維導(dǎo)圖工具編制業(yè)務(wù)系統(tǒng)功能圖;表1-1-2房屋租賃平臺的核心流程發(fā)布租房合同流程房東起草租房合同協(xié)議,填寫房屋信息、租期、房租等。使用房東的私鑰對租房合同進(jìn)行簽名并廣播到區(qū)塊鏈中進(jìn)行存證簽署合同流程租客解密租房協(xié)議,驗證租房協(xié)議的來源。通過租客節(jié)點在租房協(xié)議中填寫個人信息和簽名信息,生成租房合約租房合約屬性文本廣播流程租客對租房合約提煉合約屬性文本,使用私鑰對合約屬性本文以及租房合約進(jìn)行簽名后,廣播到區(qū)塊鏈中房東解密合約屬性文本流程房東使用自身私鑰對加密后的租房合約進(jìn)行解密,對解密后的租房合約提煉對照合約屬性文本,并使用私鑰對對照合約屬性文本進(jìn)行簽名后廣播到區(qū)塊鏈中繳納房租流程區(qū)塊鏈房屋租賃平臺節(jié)點實時房屋到期時間,如果房屋到期時,判斷房租繳納和電子鎖密碼的更新3.按照基礎(chǔ)層、合約層、接口層以及應(yīng)用層來設(shè)計區(qū)塊鏈系統(tǒng)的架構(gòu),畫出系統(tǒng)架構(gòu)圖,其中在基礎(chǔ)層需指明需要的節(jié)點、名稱、協(xié)議、存儲等信息;4.結(jié)合案例背景將區(qū)塊鏈房屋租賃平臺核心功能進(jìn)行劃分,完成下方表格中各個主要模塊要實現(xiàn)的功能;房屋出租模塊請輸入要實現(xiàn)的功能合同發(fā)放模塊請輸入要實現(xiàn)的功能合同生效模塊請輸入要實現(xiàn)的功能費用繳納模塊請輸入要實現(xiàn)的功能租房合約執(zhí)行模塊請輸入要實現(xiàn)的功能違約判斷功能模塊請輸入要實現(xiàn)的功能5.根據(jù)用例設(shè)計以及下方提供好的承諾集,使用Visio工具完成區(qū)塊鏈應(yīng)用系統(tǒng)業(yè)務(wù)流程圖;表1-1-3承諾集房屋出租承諾判斷房東是否在房屋租賃平臺發(fā)布房屋繳納費用承諾判斷租客是否在房屋租賃平臺繳納房租和預(yù)存保證金;判斷房東是否在房屋租賃平臺預(yù)存保證金房租到期繳納承諾判斷租客是否按時將房租轉(zhuǎn)賬給房東,是則發(fā)送電子密碼鎖,否則解鎖保證金合同到期承諾判斷合同是否到期,是則進(jìn)入判斷保證金是否被轉(zhuǎn)賬流程,是則結(jié)束,否則退還6.整合所有內(nèi)容,模塊調(diào)用接口編寫并形成對應(yīng)的需求用例文檔至【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號】下。任務(wù)1-2:區(qū)塊鏈系統(tǒng)部署與運維通過給定區(qū)塊鏈項目需求,進(jìn)行區(qū)塊鏈系統(tǒng)的的部署,包括系統(tǒng)部署、節(jié)點部署等。通過監(jiān)控工具完成對網(wǎng)絡(luò)、節(jié)點服務(wù)的監(jiān)控。最終利用業(yè)務(wù)需求規(guī)范,完成系統(tǒng)日志、網(wǎng)絡(luò)參數(shù)、節(jié)點服務(wù)等系統(tǒng)結(jié)構(gòu)的維護(hù)。子任務(wù)1-2-1:區(qū)塊鏈網(wǎng)絡(luò)環(huán)境搭建在本機(jī)部署區(qū)塊鏈網(wǎng)絡(luò)底層環(huán)境,我們需要準(zhǔn)備編譯運行的環(huán)境,并通過區(qū)塊鏈底層源碼腳本文件編譯區(qū)塊鏈網(wǎng)絡(luò)。(1)打開區(qū)塊鏈源碼文件,檢查區(qū)塊鏈網(wǎng)絡(luò)基礎(chǔ)運行環(huán)境,通過輸入命令,檢查Docker環(huán)境,并確定Docker版本;(2)打開區(qū)塊鏈源碼文件,通過輸入命令,make編譯區(qū)塊鏈網(wǎng)絡(luò),生成區(qū)塊鏈網(wǎng)絡(luò)編譯執(zhí)行文件,請把編譯執(zhí)行文件截圖;(3)成功編譯區(qū)塊鏈網(wǎng)絡(luò)后,通過輸入命令,啟動區(qū)塊鏈服務(wù);(4)啟動區(qū)塊鏈網(wǎng)絡(luò)后,通過輸入命令,檢查區(qū)塊鏈網(wǎng)絡(luò)狀態(tài)。子任務(wù)1-2-2:區(qū)塊鏈網(wǎng)絡(luò)服務(wù)運行區(qū)塊鏈網(wǎng)絡(luò)環(huán)境成功搭建后,啟動區(qū)塊鏈網(wǎng)絡(luò)服務(wù),區(qū)塊鏈網(wǎng)絡(luò)提供了很多的命令行基礎(chǔ)功能,滿足區(qū)塊鏈網(wǎng)絡(luò)服務(wù)的運行。(1)進(jìn)入?yún)^(qū)塊鏈網(wǎng)絡(luò)執(zhí)行文件夾(output),通過命令行方式,創(chuàng)建區(qū)塊鏈普通錢包賬戶(userTest),生產(chǎn)區(qū)塊鏈錢包地址,私鑰,公鑰;(2)進(jìn)入?yún)^(qū)塊鏈網(wǎng)絡(luò)執(zhí)行文件夾(output),通過命令行方式,獲取區(qū)塊鏈錢包余額(data/keys);(3)進(jìn)入?yún)^(qū)塊鏈網(wǎng)絡(luò)執(zhí)行文件夾(output),通過命令行方式,由data/keys向(userTest)轉(zhuǎn)賬10,并查看交易ID;(4)進(jìn)入?yún)^(qū)塊鏈網(wǎng)絡(luò)執(zhí)行文件夾(output),通過命令行方式,使用上一步的交易ID,查詢交易狀態(tài),交易源和目標(biāo)賬號、交易的金額等信息子任務(wù)1-2-3:部署區(qū)塊鏈多節(jié)點服務(wù)搭建一個3個節(jié)點的區(qū)塊鏈網(wǎng)絡(luò),需要通過命令行創(chuàng)建多節(jié)點網(wǎng)絡(luò)部署環(huán)境,并監(jiān)聽各個節(jié)點的RPC監(jiān)聽端口,并查看p2p監(jiān)聽渡口配置,現(xiàn)有任務(wù)如下:(1)進(jìn)入?yún)^(qū)塊鏈網(wǎng)絡(luò)主目錄下,通過命令行,創(chuàng)建多節(jié)點網(wǎng)絡(luò)部署環(huán)境;(2)進(jìn)入多節(jié)點網(wǎng)絡(luò)環(huán)境目錄下,創(chuàng)建多節(jié)點網(wǎng)絡(luò)部署環(huán)境后,通過命令行方式,查看P2P網(wǎng)絡(luò)配置;(3)節(jié)點加入網(wǎng)絡(luò)需要通過配置種子節(jié)點的網(wǎng)絡(luò)連接地址netURL,請通過命令行方式,獲取node3對應(yīng)的節(jié)點netURL。子任務(wù)1-2-4:搭建區(qū)塊鏈網(wǎng)絡(luò)監(jiān)控系統(tǒng)鏡像提供了Prometheus開源框架,用戶可以通過Prometheus+Grafana構(gòu)建自己應(yīng)用的監(jiān)控系統(tǒng)。請按如下步驟,完成對系統(tǒng)的搭建:(1)進(jìn)入?yún)^(qū)塊鏈網(wǎng)絡(luò)監(jiān)控系統(tǒng)主目錄,通過命令行方式,在節(jié)點env.yaml配置中打開metricSwitch;(2)配置prometheus設(shè)置endpoint服務(wù)修改prometheus.yml文件,添加如下配置,每個target對應(yīng)區(qū)塊鏈節(jié)點的server.yaml中的metricPort端口;(3)進(jìn)入到對應(yīng)目錄下,通過命令行啟動啟動prometheus,打開區(qū)塊鏈監(jiān)控系統(tǒng)項目網(wǎng)址。任務(wù)1-3:區(qū)塊鏈系統(tǒng)測試設(shè)計對區(qū)塊鏈系統(tǒng)的測試流程;結(jié)合實際業(yè)務(wù)需求,調(diào)用部署的智能合約中進(jìn)行系統(tǒng)測試、性能測試等;根據(jù)業(yè)務(wù)需求,分析并且修復(fù)給定智能合約中的安全漏洞。利用模擬業(yè)務(wù)和測試工具來完成對區(qū)塊鏈系統(tǒng)服務(wù)數(shù)據(jù)的測試。1.啟動區(qū)塊鏈瀏覽器系統(tǒng),找到區(qū)塊鏈最新區(qū)塊列表接口,使用Postman工具對該接口進(jìn)行HTTP請求測試,并將測試保存;2.使用測試工具進(jìn)行測試區(qū)塊鏈網(wǎng)絡(luò),針對區(qū)塊鏈網(wǎng)絡(luò)吞吐量與時延進(jìn)行性能指標(biāo)分析;3.通過SQL手工注入方法分析區(qū)塊鏈系統(tǒng)漏洞,尋找環(huán)境注入點,判斷注入類型并獲取數(shù)據(jù)庫中的信息。

模塊二:智能合約開發(fā)與測試(30分)選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計結(jié)果、運行代碼、運行結(jié)果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號\模塊二提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。任務(wù)2-1:智能合約設(shè)計根據(jù)房屋租賃系統(tǒng)需求用例文檔,設(shè)計合約接口,畫出各需求用例的時序圖。任務(wù)2-2:智能合約開發(fā)使用Solidity語言進(jìn)行智能合約開發(fā),根據(jù)需求用例文檔在待補充源碼中完成程序接口功能的編碼,解決代碼錯誤和警告,正確編譯合約,功能調(diào)試正確,運行合約進(jìn)行業(yè)務(wù)功能的驗證,成功獲取合約的ABI,將合約部署至區(qū)塊鏈,獲取部署的合約信息,將任務(wù)中編寫代碼、運行截圖。子任務(wù)2-2-1:合同管理合約編碼根據(jù)需求用例文檔在待補充源碼中完成合同管理合約的編碼,解決代碼錯誤和警告,正確編譯合約,功能調(diào)試正確,運行合約中的房東簽署合同、租金支付接口功能。(1)編寫房東簽署合同接口,完成本合同位置只允許房東簽署,通過合同中的信息生成租賃合同的鏈上哈希,觸發(fā)協(xié)議簽署合同的功能,其中合同中的信息包括房東鏈上賬戶、租客鏈上賬戶、租賃開始時間、租賃結(jié)束時間、月租金額、押金金額、交租時間;(2)編寫租金支付接口,完成只允許租客支付租金的規(guī)則,檢查支付的租金金額是否正確,觸發(fā)記錄租金支付情況的功能。待補充源碼:contractRentalAgreement{addresspubliclandlord;//房東的賬戶addresspublictenant;//租客的賬戶uintpublicrentAmount=3000;//每月租金金額(以wei為單位)uintpublicdepositAmount=3000;//押金金額(以wei為單位)uintpublicrentDueDate=16;//租金到期日uintpublicleaseStartDate;//租賃開始日期uintpublicleaseEndDate;//租賃結(jié)束日期uintpublicleaseDuration;//租賃期限(以秒為單位)bytes32publiccontractHash;//租賃協(xié)議的哈希值bytes32publicpropertyHash;//租賃物業(yè)信息的哈希值eventAgreementSigned(addressindexed_signer,bytes32_contractHash);//租賃協(xié)議簽署事件eventRentPaid(addressindexed_payer,uint_amount);//租金支付事件eventDepositPaid(addressindexed_payer,uint_amount);//押金支付事件eventLeaseTerminated(addressindexed_terminator);//租賃終止事件constructor(address_landlord,address_tenant,uint_leaseDuration,bytes32_propertyHash){landlord=_landlord;tenant=_tenant;leaseDuration=_leaseDuration;//初始化租賃期限propertyHash=_propertyHash;}/***********房東簽署合同接口開發(fā)**********//**********房東簽署合同接口開發(fā)***********//***********租金支付接口開發(fā)**********//**********租金支付接口開發(fā)***********/functionpayDeposit()publicpayable{require(msg.sender==tenant,"Onlythetenantcanpaythedeposit.");//僅允許租客支付押金require(msg.value==depositAmount,"Incorrectdepositamount.");//檢查支付的押金金額是否正確emitDepositPaid(msg.sender,msg.value);//觸發(fā)押金支付事件}functionterminateLease()public{require(msg.sender==landlord,"Onlythelandlordcanterminatethelease.");//僅允許房東終止租賃require(block.timestamp<leaseEndDate,"Leasehasalreadyended.");//檢查租賃是否已經(jīng)結(jié)束leaseEndDate=block.timestamp;//更新租賃結(jié)束日期為當(dāng)前時間emitLeaseTerminated(msg.sender);//觸發(fā)租賃終止事件}}子任務(wù)2-2-2:違約管理合約編碼根據(jù)需求用例文檔在待補充源碼中完成違約管理合約的編碼,解決代碼錯誤和警告,正確編譯合約,功能調(diào)試正確,運行合約中的房東終止合同、租客終止合同接口功能。(1)編寫房東終止合同接口,實現(xiàn)房東終止合同判斷,如果租客已經(jīng)終止合同則合同無效,如果合同有效,對合同終止?fàn)顟B(tài)進(jìn)行標(biāo)記,將剩余押金退還給租客的功能;(2)編寫租客終止合同接口,實現(xiàn)租客終止合同判斷,如果房東已經(jīng)終止合同則合同無效,如果合同有效,對合同終止?fàn)顟B(tài)進(jìn)行標(biāo)記,將剩余押金退還給房東的功能。待補充源碼:contractRentalContract{addresspayablepubliclandlord;//房東地址addresspayablepublictenant;//租客地址uintpublicrentAmount;//租金uintpublicsecurityDeposit;//押金uintpubliccontractStartDate;//合同開始日期uintpubliccontractEndDate;//合同結(jié)束日期uintpublicgracePeriod;//寬限期uintpublicterminationFee;//終止合同費用boolpubliccontractActive;//合同是否有效boolpubliclandlordTerminated;//房東是否終止合同boolpublictenantTerminated;//租客是否終止合同boolpublictenantDefaulted;//租客是否違約boolpublicsecurityDepositReturned;//押金是否已退還constructor(addresspayable_landlord,addresspayable_tenant,uint_rentAmount,uint_securityDeposit,uint_contractStartDate,uint_contractEndDate,uint_gracePeriod,uint_terminationFee){landlord=_landlord;tenant=_tenant;rentAmount=_rentAmount;securityDeposit=_securityDeposit;contractStartDate=_contractStartDate;contractEndDate=_contractEndDate;gracePeriod=_gracePeriod;terminationFee=_terminationFee;contractActive=true;landlordTerminated=false;tenantTerminated=false;tenantDefaulted=false;securityDepositReturned=false;}functionpayRent()publicpayable{require(msg.sender==tenant,"只有租客可以支付租金。");//判斷是否為租客require(msg.value==rentAmount,"租金金額不正確。");//判斷支付的租金是否正確require(contractActive,"合同無效。");//判斷合同是否有效require(block.timestamp<=contractEndDate,"合同已過期。");//判斷合同是否已過期if(block.timestamp>contractStartDate+gracePeriod){//如果已經(jīng)超過寬限期tenantDefaulted=true;//標(biāo)記租客違約if(securityDeposit>=rentAmount){//如果押金足夠支付租金securityDeposit-=rentAmount;//押金減去租金}else{securityDeposit=0;//押金清零}if(block.timestamp>contractEndDate){//如果合同已經(jīng)過期contractActive=false;//合同無效if(securityDeposit>0){//如果押金還有剩余tenant.transfer(securityDeposit);//將押金退還給租客}if(msg.value>rentAmount){//如果支付的租金超過了租金金額payable(msg.sender).transfer(msg.value-rentAmount);//將多余的租金退還給租客}}else{landlord.transfer(rentAmount);//將租金轉(zhuǎn)賬給房東}}else{landlord.transfer(rentAmount);//將租金轉(zhuǎn)賬給房東}}functionterminateContract()public{require(contractActive,"合同無效。");//判斷合同是否有效if(msg.sender==landlord){//如果是房東require(!landlordTerminated,"房東已終止合同。");//判斷房東是否已經(jīng)終止合同/***********編寫房東終止合同接口開發(fā)**********//**********編寫房東終止合同接口開發(fā)***********//***********編寫租客終止合同接口開發(fā)**********//**********編寫租客終止合同接口開發(fā)***********/}functiongetSecurityDeposit()public{require(!contractActive,"合同仍然有效。");//判斷合同是否已經(jīng)失效require(!securityDepositReturned,"押金已經(jīng)退還。");//判斷押金是否已經(jīng)退還require(!tenantDefaulted,"租客已違約。");//判斷租客是否違約if(msg.sender==landlord){//如果是房東securityDepositReturned=true;//標(biāo)記押金已經(jīng)退還landlord.transfer(securityDeposit);//將押金退還給房東}elseif(msg.sender==tenant){//如果是租客require(!landlordTerminated,"房東已終止合同。");//判斷房東是否已經(jīng)終止合同require(!tenantTerminated,"租客已終止合同。");//判斷租客是否已經(jīng)終止合同require(block.timestamp>contractEndDate,"合同尚未到期。");//判斷合同是否已經(jīng)到期securityDepositReturned=true;//標(biāo)記押金已經(jīng)退還tenant.transfer(securityDeposit);//將押金退還給租客}}}子任務(wù)2-2-3:押金管理合約編碼根據(jù)需求用例文檔在待補充源碼中完成押金管理合約的編碼,解決代碼錯誤和警告,正確編譯合約,功能調(diào)試正確,運行合約中的租客繳納押金情況查詢、房東收取押金情況查詢接口功能。(1)編寫租客繳納押金情況查詢接口,實現(xiàn)查詢租客是狗已繳納押金功能;(2)編寫房東收取押金情況查詢接口,實現(xiàn)房東是否已收到押金的功能。待補充源碼:contractRent{uint256constantdeposit=3000;//押金金額uint256constantrent=3000;//租金金額uint256constanttimeLimit=1days;//時間限制structTenant{booldeposited;//是否已繳納押金boolrentPaid;//是否已繳納租金uint256depositTime;//繳納押金的時間}structLandlord{booldeposited;//是否已收到押金uint256depositTime;//收到押金的時間}mapping(address=>Tenant)publictenants;//租戶信息mapping(address=>Landlord)publiclandlords;//房東信息functiontenantDeposit()publicpayable{require(!tenants[msg.sender].deposited&&!tenants[msg.sender].rentPaid,"Tenanthasalreadydepositedorpaidrent");//確保租戶未繳納押金或租金require(msg.value==deposit+rent,"Tenantmustdepositbothdepositandrent");//確保租戶繳納的金額正確tenants[msg.sender].deposited=true;//標(biāo)記租戶已繳納押金tenants[msg.sender].depositTime=block.timestamp;//記錄繳納押金的時間}functionlandlordDeposit()publicpayable{require(tenants[msg.sender].deposited&&tenants[msg.sender].rentPaid,"Tenanthasnotdepositedorpaidrent");//確保租戶已繳納押金和租金require(!landlords[msg.sender].deposited,"Landlordhasalreadydeposited");//確保房東未收到押金landlords[msg.sender].deposited=true;//標(biāo)記房東已收到押金landlords[msg.sender].depositTime=block.timestamp;//記錄收到押金的時間}functioncheckTenantDeposit(addresstenant)publicviewreturns(bool){returntenants[tenant].deposited;//返回租戶是否已繳納押金}/***********租客繳納押金情況查詢接口**********//**********租客繳納押金情況查詢接口***********//***********收取押金情況查詢接口**********//**********收取押金情況查詢接口***********/functioncheckTenantDepositTime(addresstenant)publicviewreturns(uint256){returntenants[tenant].depositTime;//返回租戶繳納押金的時間}functioncheckLandlordDepositTime(addresslandlord)publicviewreturns(uint256){returnlandlords[landlord].depositTime;//返回房東收到押金的時間}functioncheckTimeLimit()publicviewreturns(bool){returnblock.timestamp<=tenants[msg.sender].depositTime+timeLimit;//返回是否在時間限制內(nèi)}functionrefund()public{require(!landlords[msg.sender].deposited&&block.timestamp>tenants[msg.sender].depositTime+timeLimit,"Landlordhasalreadydepositedortimelimithasnotbeenreached");//確保房東未收到押金且時間限制已到期payable(msg.sender).transfer(deposit+rent);//將押金和租金退還給租戶}}子任務(wù)2-2-4:合約部署和調(diào)用(1)解決代碼錯誤和警告,正確編譯合約,成功獲取三個合約的ABI;(2)將三個合約形成一個文件部署至區(qū)塊鏈,獲取部署合約的地址信息。任務(wù)2-3:智能合約測試根據(jù)需求用例文檔完成違約管理的功能測試以及性能測試,解決違約管理合約代碼正確性的驗證以及驗證系統(tǒng)響應(yīng)時間是否滿足預(yù)期響應(yīng)效果,編寫功能測試用例,實現(xiàn)違約管理的業(yè)務(wù)測試,使用測試工具,對合同管理接口進(jìn)行性能測試。1.根據(jù)需求用例文檔在以下測試用例表格中編寫違約管理合約中的測用例,依據(jù)違約管理中租客違約、房東違約、合同違約的三種狀態(tài),分析在前置條件為簽署合同、繳納保證金、押金的情況下,租客提前解除合同、房東提前解除合同、合同失效等情況下,產(chǎn)生的保證金和押金的歸屬結(jié)果;

用例編號用例標(biāo)題優(yōu)先級前置條件測試步驟測試數(shù)據(jù)預(yù)期結(jié)果FW-RC0001違約管理(租客違約)高請?zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚懻執(zhí)顚?.利用測試工具,模擬測合同管理接口發(fā)送150次請求,將所需HTTP請求、協(xié)議、服務(wù)器名稱或IP以及路徑填到工具Web服務(wù)器中,連同通請求一起發(fā)送的參數(shù),運行成功后將匯總報告提交到指定位置。

模塊三:區(qū)塊鏈應(yīng)用系統(tǒng)開發(fā)(30分)選手完成本模塊的任務(wù)后,將任務(wù)中設(shè)計結(jié)果、運行代碼、運行結(jié)果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術(shù)應(yīng)用賽\重命名為工位號\模塊三提交結(jié)果.docx】中對應(yīng)的任務(wù)序號下。任務(wù)3-1:區(qū)塊鏈應(yīng)用前端功能開發(fā)完成區(qū)塊鏈應(yīng)用系統(tǒng)的構(gòu)建、服務(wù)器端(后端)與Web端(前端)的接口的聯(lián)調(diào)。要求如下:1.使用VsCode工具,按照押金詳情原型圖的長度、寬度、行高、間距、文字樣式、顏色等,完成押金詳情頁面的樣式開發(fā);2.使用VsCode工具,完成Vue調(diào)用押金查詢接口API,獲取接口返回的租房人、房屋位置、樓號、押金金額、收款人、收款日期信息,填充至Vue頁面中。押金詳情頁面的樣式開發(fā)補充源碼:.content{ width:100%; height:100%; background:#EEEEEE; .contentModel{position:absolute; top:50%; left:50%; box-sizing:border-box; width:560px; padding:41px40px40px; background:#fff; border-radius:8px; box-shadow:03px12px0#c0c4cc; transform:translate(-50%,-50%); -ms-transform:translate(-50%,-50%); -moz-transform:translate(-50%,-50%); -webkit-transform:translate(-50%,-50%); -o-transform:translate(-50%,-50%); }//此處代碼補全:按原型圖樣式,進(jìn)行長度、寬度、行高、間距、文字樣式、顏色等樣式設(shè)置;}押金詳情頁面的Html開發(fā)補充源碼:<template> <divclass="content"><divclass='contentModel'> <!--此處代碼補全:按照原型圖格式,畫出租房人、房屋位置、樓號、押金金額、收款人、收款日期信息--></div> </div></template>任務(wù)3-2:區(qū)塊鏈應(yīng)用后端功能開發(fā)子任務(wù)3-2-1:區(qū)塊鏈網(wǎng)絡(luò)環(huán)境啟動區(qū)塊鏈應(yīng)用系統(tǒng)開發(fā)需要區(qū)塊鏈底層網(wǎng)絡(luò)進(jìn)行支撐,完成和鏈上數(shù)據(jù)進(jìn)行交互,與節(jié)點建立鏈接,完成鏈上信息查詢。要求如下:(1)打開區(qū)塊鏈網(wǎng)絡(luò)文件目錄,通過區(qū)塊鏈啟動腳本,輸入bashcontrol.shstart命令,啟動區(qū)塊鏈網(wǎng)絡(luò);(2)使用IntelliJIDEA工具,打開(src/controller/BlockController.java)文件,在查詢區(qū)塊鏈信息接口中,使用Java-SDK獲取區(qū)塊鏈的最新高度和最新交易Hash,并將結(jié)果按十進(jìn)制的整數(shù)和字符串類型返回。啟動區(qū)塊鏈源碼截圖:區(qū)塊鏈的最新高度和最新交易Hash接口補充源碼:/**獲取最新區(qū)塊高度和最新交易Hash*/@RequestMapping(value="/getBlockInformation")@ResponseBodypublicMap<String,Object>getBlockInformation(FlightInformationflightInformation){Map<String,Object>resMap=newHashMap<>();try{//獲取最新區(qū)塊高度longblockHeight=block.getLong("height");System.out.println("最新區(qū)塊高度:"+blockHeight);//獲取最新區(qū)塊交易HashStringtxHashes=block.getJSONArray("txHashes");System.out.println("最新區(qū)塊交易Hash:"+txHash);resMap.put("code",200);resMap.put("message","請求成功");resMap.put("data",null);}catch(ClientProtocolExceptione){log.error("操作失敗—log:",e);resMap.put("code",500);resMap.put("message","請求失敗");}catch(IOExceptione){log.error("操作失敗—log:",e);resMap.put("code",500);resMap.put("message","請求失敗");}catch(Exceptione){log.error("操作失敗—log:",e);resMap.pu

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論