![2024年廣西職業(yè)院校技能大賽高職組《區(qū)塊鏈技術應用》賽項樣卷_第1頁](http://file4.renrendoc.com/view9/M03/27/26/wKhkGWdOYbaAFKbeAABuGkRwprQ651.jpg)
![2024年廣西職業(yè)院校技能大賽高職組《區(qū)塊鏈技術應用》賽項樣卷_第2頁](http://file4.renrendoc.com/view9/M03/27/26/wKhkGWdOYbaAFKbeAABuGkRwprQ6512.jpg)
![2024年廣西職業(yè)院校技能大賽高職組《區(qū)塊鏈技術應用》賽項樣卷_第3頁](http://file4.renrendoc.com/view9/M03/27/26/wKhkGWdOYbaAFKbeAABuGkRwprQ6513.jpg)
![2024年廣西職業(yè)院校技能大賽高職組《區(qū)塊鏈技術應用》賽項樣卷_第4頁](http://file4.renrendoc.com/view9/M03/27/26/wKhkGWdOYbaAFKbeAABuGkRwprQ6514.jpg)
![2024年廣西職業(yè)院校技能大賽高職組《區(qū)塊鏈技術應用》賽項樣卷_第5頁](http://file4.renrendoc.com/view9/M03/27/26/wKhkGWdOYbaAFKbeAABuGkRwprQ6515.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
2024年廣西職業(yè)院校技能大賽
區(qū)塊鏈技術應用賽項
樣卷
任
務
書
參賽隊編號:
1
模塊一區(qū)塊鏈產(chǎn)品方案設計與系統(tǒng)運維(35分)
選手完成本模塊的任務后,將任務中設計結果、運行代碼、運行
結果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術應用賽\重命名為工位號\
模塊一提交結果.docx】中對應的任務序號下。
任務1-1:區(qū)塊鏈產(chǎn)品需求分析與方案設計
本任務需要依據(jù)項目背景完成需求分析與方案設計,具體要求如
下:
1.依據(jù)給定區(qū)塊鏈食品溯源系統(tǒng)的業(yè)務架構圖,對考題進行業(yè)務
分析,盡可能全面的考慮一個業(yè)務系統(tǒng)所需要的模塊,使用Visio或
思維導圖工具展現(xiàn)本系統(tǒng)的基本設計概念和處理流程,要求分為區(qū)塊
鏈食品溯源業(yè)務平臺和支撐平臺兩個部分;
2.根據(jù)食品溯源系統(tǒng)設計,在系統(tǒng)中分別包括用戶管理以及訂單
追溯功能,在訂單追溯中需要包括生產(chǎn)商、分銷商、經(jīng)銷商訂單的追
溯管理功能。根據(jù)描述,設計區(qū)塊鏈系統(tǒng)的總體功能概覽圖;
3.整合上述設計內(nèi)容,完善“區(qū)塊鏈食品溯源系統(tǒng)概要設計說明
書.doc”,具體工作內(nèi)容如下:
(1)將設計內(nèi)容根據(jù)說明書中模塊需求進行補充,并完善概要
設計說明書中的“需求概要”;
(2)完善說明書中接口說明部分內(nèi)容。
完成后提交“區(qū)塊鏈食品溯源系統(tǒng)概要設計說明書.doc”文檔至
【區(qū)塊鏈技術應用賽\重命名為工位號】下。
2
任務1-2:區(qū)塊鏈系統(tǒng)部署與運維
圍繞食品安全溯源區(qū)塊鏈平臺部署與運維需求,進行項目相關系
統(tǒng)、節(jié)點以及管理工具的部署工作。通過監(jiān)控工具完成對網(wǎng)絡、節(jié)點
服務的監(jiān)控。最終根據(jù)業(yè)務需求規(guī)范,完成系統(tǒng)日志、網(wǎng)絡參數(shù)、節(jié)
點服務等系統(tǒng)結構的維護,具體要求如下:
1.根據(jù)參數(shù)與端口設置要求,部署區(qū)塊鏈系統(tǒng)并驗證;
2.根據(jù)參數(shù)與端口設置要求,部署區(qū)塊鏈網(wǎng)絡管理平臺并驗證;
3.基于區(qū)塊鏈系統(tǒng)相關管理平臺,按照任務指南實施系統(tǒng)運維工
作并驗證;
4.基于區(qū)塊鏈系統(tǒng)相關監(jiān)管工具,按照任務指南對區(qū)塊鏈系統(tǒng)進
行監(jiān)管。
子任務1-2-1:搭建區(qū)塊鏈系統(tǒng)并驗證
基于給定服務器環(huán)境以及軟件(地址“/root/tools”),搭建一
條4節(jié)點的區(qū)塊鏈系統(tǒng)并驗證,具體工作內(nèi)容如下:
(1)采用默認配置搭建區(qū)塊鏈網(wǎng)絡;
(2)通過命令驗證區(qū)塊鏈節(jié)點進程運行狀況;
(3)通過命令驗證區(qū)塊鏈連接狀態(tài)和共識狀態(tài)日志輸出。
子任務1-2-2:搭建區(qū)塊鏈系統(tǒng)管理平臺并驗證
基于給定服務器環(huán)境以及軟件(地址“/root/tools”),搭建區(qū)
塊鏈控制臺并開展相關運維工作,具體工作內(nèi)容如下:
(1)配置控制臺,管理相關證書并啟動;
(2)使用控制臺安裝HelloWorld智能合約;
(3)使用控制臺完成HelloWorld智能合約的set與get操作;
(4)使用控制臺查看區(qū)塊鏈中區(qū)塊高度。
3
子任務1-2-3:區(qū)塊鏈節(jié)點運維
基于已完成的區(qū)塊鏈系統(tǒng)與管理平臺搭建工作,開展區(qū)塊鏈節(jié)點
的加入與退出運維工作,具體內(nèi)容如下:
(1)獲取指定區(qū)塊鏈節(jié)點輸出等級為警告級,并設置日志存儲
閾值位100MB并驗證;
(2)通過給定工具(地址/root/tools)完成新節(jié)點(node4)
配置;
(3)啟動新節(jié)點加入?yún)^(qū)塊鏈系統(tǒng)并驗證。
子任務1-2-4:區(qū)塊鏈網(wǎng)絡運維
根據(jù)任務描述要求,完成網(wǎng)絡配置與管理運維操作,具體內(nèi)容如
下:
(1)設置區(qū)塊鏈系統(tǒng)黑名單,將node3設為黑名單禁止連接,
并驗證;
(2)設置系統(tǒng)中區(qū)塊打包最大交易數(shù)量設為2000;
(3)驗證區(qū)塊最大打包交易數(shù)量情況。
任務1-3:區(qū)塊鏈系統(tǒng)測試
設計對區(qū)塊鏈系統(tǒng)的測試流程;結合實際業(yè)務需求,調(diào)用部署的
智能合約進行系統(tǒng)測試、性能測試等;根據(jù)業(yè)務需求,分析并且修復
給定智能合約中的安全漏洞。利用模擬業(yè)務和測試工具來完成對區(qū)塊
鏈系統(tǒng)服務數(shù)據(jù)的測試。
1.使用命令啟動區(qū)塊鏈系統(tǒng)可視化一體平臺并驗證啟動情況;
2.通過可視化平臺生成包括生產(chǎn)商(Producer)、經(jīng)銷商
(distributor)、零售商(retailer)賬戶,并將賬戶以p12加密形式
導出后倒入指定前置可視化平臺,驗證地址一致性;
4
3.使用Postman對上述功能接口進行驗證,并將驗證結果截圖提
交工程文檔。對食品溯源系統(tǒng)服務端“添加食品”(/produce)功能接
口進行驗證。
請求路由:/produce
請求方法:POST
輸入項說
輸入項類型說明
明:
traceNumberString追蹤編號
foodNameString食品名稱
traceNameString存證人地址
qualityInteger食品質(zhì)量
輸出項說
輸出項類型說明
明:
retInteger返回值
返回消息,
msgString"Success"表示
操作成功
4.參照工程項目(地址:“/root/projects”)使用Caliper測試
工具對食品安全溯源系統(tǒng)智能合約生成新食品(newFood)功能進行壓
力測試。具體要求如下:
(1)提供核心測試代碼;
(2)設置txNumber=10,tps=1,所有測試通過率為100%。
5.智能合約安全漏洞測試。
有如下問題智能合約:
5
pragmasolidity>=0.8.3;
contractEtherStore{
mapping(address=>uint)publicbalances;
functiondeposit()publicpayable{
balances[msg.sender]+=msg.value;
emitBalance(balances[msg.sender]);
}
functionwithdraw()public{
uintbal=balances[msg.sender];
require(bal>0);
(boolsent,)=msg.sender.call{value:bal}("");
require(sent,"FailedtosendEther");
balances[msg.sender]=0;
}
//Helperfunctiontocheckthebalanceofthiscontract
functiongetBalance()publicviewreturns(uint){
returnaddress(this).balance;
}
}
contractAttack{
EtherStorepublicetherStore;
6
constructor(address_etherStoreAddress){
etherStore=EtherStore(_etherStoreAddress);
}
//FallbackiscalledwhenEtherStoresendsEthertothiscontract.
fallback()externalpayable{
if(address(etherStore).balance>=1){
etherStore.withdraw();
}
}
functionattack()externalpayable{
require(msg.value>=1);
etherStore.deposit{value:1}();
etherStore.withdraw();
}
//Helperfunctiontocheckthebalanceofthiscontract
functiongetBalance()publicviewreturns(uint){
returnaddress(this).balance;
}
}
(1)分析智能合約中存在問題,并說明危害;
(2)根據(jù)測試工具中的代碼文件,編寫測試用例,復現(xiàn)智能合
約中存在的漏洞;
(3)創(chuàng)建新的智能合約,修復其中問題,說明修復內(nèi)容并測試。
7
模塊二智能合約開發(fā)與測試(30分)
選手完成本模塊的任務后,將任務中設計結果、運行代碼、運行
結果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術應用賽\重命名為工位號\
模塊二提交結果.docx】中對應的任務序號下。
任務2-1:智能合約設計
根據(jù)區(qū)塊鏈食品溯源應用需求分析和方案設計文檔的描述,編寫
該區(qū)塊鏈產(chǎn)品的智能合約功能需求文檔,以及設計該智能合約UML圖。
具體要求如下:
1.編寫區(qū)塊鏈食品溯源智能合約功能需求文檔
根據(jù)區(qū)塊鏈食品溯源產(chǎn)品項目背景和需求分析,編寫該區(qū)塊鏈食
品溯源產(chǎn)品的智能合約功能需求文檔。
2.完成區(qū)塊鏈食品溯源智能合約的設計圖
設計區(qū)塊鏈食品溯源智能合約接口,畫出區(qū)塊鏈食品溯源智能合
約的角色UML用例圖,以及畫出區(qū)塊鏈食品溯源各智能合約關系的時
序圖。
任務2-2:智能合約開發(fā)
使用Solidity語言完成智能合約開發(fā)、部署和調(diào)用,要求如下:
1.食品信息(FoodInfoItem)的接口編碼
(1)編寫食品信息實體的接口,完成可溯源食品信息初始化,
實現(xiàn)可追溯的原始生產(chǎn)商食品信息上鏈功能;
名稱類型說明
_currentTraceNamestring當前用戶名
_namestring食品名稱
8
_owneraddress合約的創(chuàng)建者
_qualityuint8質(zhì)量
_statusuint8狀態(tài)
_traceNamestring[]用戶名
_timestampuint[]流轉(zhuǎn)時間戳
_traceAddressaddress[]用戶地址
_traceQualityuint8[]食品質(zhì)量
contractFoodInfoItem{
//①保存食品流轉(zhuǎn)過程中各個階段的時間戳
//②保存食品流轉(zhuǎn)過程各個階段的用戶名
//③保存食品流轉(zhuǎn)過程各個階段的用戶地址信息(和用戶一一對應)
//④保存食品流轉(zhuǎn)過程中各個階段的質(zhì)量
//⑤食品名稱
//⑥當前用戶名稱
//⑦質(zhì)量(0=優(yōu)質(zhì)1=合格2=不合格)
//⑧狀態(tài)(0:生產(chǎn)1:分銷2:出售)
//⑨初始化owner
(2)編寫分銷商食品上鏈信息接口,根據(jù)食品溯源智能合約地
址獲取分銷商上鏈食品的信息;
functionaddTraceInfoByDistributor(①,uint8quality)publicreturns(b
ool){
require(_status==0,"statusmustbeproducing");
//②
_timestamp.push(now);
_traceName.push(traceName);
9
_currentTraceName=traceName;
//③
//④
_traceQuality.push(_quality);
_status=1;
returntrue;
}
(3)編寫超市進行食品上鏈信息的接口,根據(jù)食品溯源智能合
約地址獲取超市上鏈食品信息。
functionaddTraceInfoByRetailer(①,uint8quality)publicreturns(bool
){
require(_status==1,"statusmustbedistributing");
//②
_timestamp.push(now);
_traceName.push(traceName);
_currentTraceName=traceName;
//③
//④
_traceQuality.push(_quality);
_status=2;
returntrue;
}
2.食品溯源(Trace)的接口編碼
(1)編寫食品溯源智能合約生產(chǎn)商Producer添加食品接口,必
須生產(chǎn)商才能添加可溯源的食品,實現(xiàn)溯源功能;
functionnewFood(①,stringtraceName,uint8quality)
public②returns(③)
{
10
//④
//⑤
//⑥
//⑦
//⑧
}
(2)編寫食品溯源智能合約分銷商Distributor添加食品接口,
必須分銷商才能添加可溯源的食品,實現(xiàn)溯源功能;
functionaddTraceInfoByDistributor(①,uint8quality)
public②returns(bool){
//③
returnFoodInfoItem(foods[traceNumber]).④,quality);
}
(3)編寫食品溯源智能合約超市Retailer添加食品接口,必須
超市才能添加可溯源的食品,實現(xiàn)溯源功能。
functionaddTraceInfoByRetailer(①,uint8quality)
public②returns(bool){
require(③,"traceNumberdoesnotexist");
returnFoodInfoItem(foods[traceNumber]).④,quality);
}
3.角色(Role)管理的接口編碼
(1)編寫食品溯源增加角色接口,必須是未增加的角色才能被
添加,實現(xiàn)添加角色的功能;
functionadd(①,addressaccount)②{
require(!③,"Roles:accountalreadyhasrole");
role.④=true;
}
11
(2)編寫食品溯源移除角色接口,必須是已增加的角色才能被
移除,實現(xiàn)移除角色的功能;
functionremove(①,addressaccount)②{
require(③,"Roles:accountdoesnothaverole");
role.④=false;
}
(3)編寫食品溯源角色授權接口,必須是授權的角色地址,實
現(xiàn)角色權限管理功能。
functionhas(①,addressaccount)②returns(bool){
require(③,"Roles:accountisthezeroaddress");
returnrole.④;
}
4.合約編譯、部署和調(diào)用
(1)解決代碼錯誤和警告,正確編譯并部署合約,成功獲取部
署的合約地址和abi;
(2)調(diào)用食品溯源智能合約的接口,完整驗證業(yè)務流程。
任務2-3:智能合約測試
編寫智能合約單元測試代碼并完成合約功能測試、性能測試,具
體要求如下:
1.配置區(qū)塊鏈網(wǎng)絡
啟動區(qū)塊鏈網(wǎng)絡,創(chuàng)建新的Workspace,配置對外訪問的RPC接
口為7545,配置項目的配置文件config.js實現(xiàn)與新建Workspace
的連接。
2.設置producerId和sellederId兩個變量
基于VSCODE加載測試項目,補全位于test文件夾中
12
foodTraceNew.js文件預操作的方法。在測試文件中添加預定義的
方法(在其他方法啟動前使用),在方法中分別設置producerId和
sellederId兩個變量,具體要求如下:
(1)producerId設置為1
(2)sellderId設置為4
3.補全createMember和getMember方法
基于VSCODE加載的測試項目,補全位于test文件夾中
foodTraceNew.js文件,添加測試用例,測試智能合約的
createMember和getMember方法。
4.測試createOrder和getOrder方法
基于VSCODE加載的測試項目,補全位于test文件夾中
foodTraceNew.js文件,添加測試用例,測試智能合約的createOrder
和getOrder方法。
5.測試createFood和getFood方法
基于VSCODE加載的測試項目,補全位于test文件夾中
foodTraceNew.js文件,添加測試用例,測試智能合約的createFood
和getFood方法。
13
模塊三區(qū)塊鏈應用系統(tǒng)開發(fā)(30分)
選手完成本模塊的任務后,將任務中設計結果、運行代碼、運行
結果等截圖粘貼至客戶端桌面【區(qū)塊鏈技術應用賽\重命名為工位號\
模塊三提交結果.docx】中對應的任務序號下。
任務3-1:區(qū)塊鏈應用前端開發(fā)
1.請基于前端系統(tǒng)的開發(fā)模板,在登錄組件login.js、組件管
理文件components.js中添加對應的邏輯代碼,實現(xiàn)對前端的角色選
擇功能,并測試功能完整性,示例頁面如下:
具體要求如下:
(1)有明確的提示,提示用戶選擇角色;
(2)用戶可看到四個不同的角色可選(生產(chǎn)商、中間商、超市、
消費者);
(3)每個用戶所對應的組件請在components中找尋并填入;
(4)頁面頂部要有食品溯源平臺的網(wǎng)站標題和logo。
Login.js:
代碼片段1:
14
template:`
<divclass="login">
<!--角色選擇-->
<h3v-if="currentUser===null">選手填寫部分</h3>
<el-row:gutter="80"v-if="currentUser===null">
<el-col:span="6"v-for="選手填寫部分":key="index">
<div@click="選手填寫部分">選手填寫部分</div>
</el-col>
</el-row>
代碼片段2:
//用戶身份
users:[
{
name:選手填寫部分,
userName:'producer',
component:選手填寫部分,
},
{
name:選手填寫部分,
userName:'distributor',
component:選手填寫部分,
},
{
name:選手填寫部分,
userName:'retailer',
component:選手填寫部分,
},
{
name:選手填寫部分,
15
userName:'consumer',
component:選手填寫部分,
},
],
currentUser:選手填寫部分,//當前用戶
components.js:
代碼片段3:
//頭部組件
constHeader={
//接受傳入的登錄狀態(tài)、用戶信息
props:['login','user'],
template:`
<divclass="header">
<imgsrc="選手填寫部分"/>
<h3>選手填寫部分</h3>
<spanv-if="login"class="user-name">{{選手填寫部分}}</span>
</div>
`
}
2.請基于前端系統(tǒng)的開發(fā)模板,在登錄組件login.js、組件管
理文件components.js中添加對應的邏輯代碼,實現(xiàn)對前端的角色選
擇功能,并測試功能完整性,示例頁面如下:
16
具體要求如下:
(1)點擊角色進入相應角色登錄頁面;
(2)登錄界面提示用戶的地址(消費者不顯示),有登錄操作的
相關提示;
(3)登錄界面有5秒倒計時;
(4)登錄界面有“直接登錄”按鈕,點擊可直接跳轉(zhuǎn)到相應角
色首頁。
login.js:
代碼片段1:
17
<!--角色登錄-->
<divv-elseclass="is-login">
<h3>登錄中......(倒計時:{{選手填寫部分}}秒)</h3>
<div>角色:
<span>{{選手填寫部分}}</span>
</div>
<!--非消費者則顯示角色地址-->
<divv-if="選手填寫部分">角色地址:
<span>{{選手填寫部分}}</span>
</div>
<!--直接登錄按鈕-->
<el-buttontype="primary"選手填寫部分>直接登錄</el-button>
</div>
代碼片段2:
//登錄時有個5秒的倒計時,這里是在點擊直接登錄時,清除倒計時,直接
跳到相關頁面
clearTimer(){
clearInterval(選手填寫部分);
this.$emit(選手填寫部分,{
component:this.loginIponent,
user:this.loginI,
});
},
//倒計時
countdownInterval({component,name:user}){
this.timer=setInterval(()=>{
if(this.countdown<=0){
18
選手填寫部分;
}
選手填寫部分;
},選手填寫部分);
},
代碼片段3:
//點擊用戶登錄,獲取用戶地址
handleClick(item){
this.loginItem=item;
//處理消費者角色,其他三個角色都有一個角色地址
if(item.userName!==選手填寫部分){
axios({
method:'get',
url:`/userinfo?userName=${item.userName}`,
})
.then(ret=>{
this.address=選手填寫部分;
this.currentUser=選手填寫部分;
this.countdownInterval(選手填寫部分);
})
.catch(err=>{
console.log(err)
})
}else{
this.currentUser=;
this.countdownInterval(item);
}
}
19
任務3-2:區(qū)塊鏈應用后端開發(fā)
1.請基于已有的項目,開發(fā)完善IndexController類,編寫添
加食品生產(chǎn)信息的方法,實現(xiàn)食品信息的添加功能,并測試功能完整
性。
本任務具體要求如下:
(1)開發(fā)文件IndexController.java中的produce方法,請求
接口為/produce;
(2)開發(fā)文件IndexController.java中的produce方法,要求
對前端傳入的參數(shù)進行二次驗證;
(3)開發(fā)文件IndexController.java中的produce方法,要求
封裝返回值為String,但不返回視圖頁面。
produce方法:
/**
*添加食品生產(chǎn)信息
*traceNumber:食品溯源id,食品溯源過程中的標識符
*foodName:食物名稱
*traceName:用戶名,食品流轉(zhuǎn)過程各個階段的用戶名
*quality:當前食品質(zhì)量(0=優(yōu)質(zhì)1=合格2=不合格)
*@return:添加食品生產(chǎn)信息結果
*/
@選手填寫部分
@PostMapping(選手填寫部
分,produces=MediaType.APPLICATION_JSON_VALUE)
publicStringproduce(@RequestBodyJSONObjectjsonParam){
//聲明返回對象
JSONObject_outPutObj=newJSONObject();
20
//生產(chǎn)商生產(chǎn)食品
if(jsonParam==null){
選手填寫部分
}
inttrace_number=選手填寫部分;
Stringfood_name=選手填寫部分;
Stringtrace_name=選手填寫部分;
intquality=選手填寫部分;
JSONArrayparams=JSONArray.parseArray("[\""+food_name+"\","+trace_
number+",\""+trace_name+"\","+quality+"]");
JSONObject_jsonObj=newJSONObject();
_jsonObj.put("contractName",CONTRACT_NAME);
_jsonObj.put("contractAddress",CONTRACT_ADDRESS);
_jsonObj.put("contractAbi",JSONArray.parseArray(CONTRACT_ABI));
_jsonObj.put("user",PRODUCER_ADDRESS);
_jsonObj.put("funcName",選手填寫部分);
_jsonObj.put("funcParam",選手填寫部分);
StringresponseStr=httpPost(URL,選手填寫部分);
JSONObjectresponseJsonObj=JSON.parseObject(responseStr);
Stringmsg=responseJsonObj.getString("message");
if(msg.equals("Success")){
_outPutObj.put("ret",選手填寫部分);
_outPutObj.put("msg",msg);
}else{
_outPutObj.put("ret",選手填寫部分);
_outPutObj.put("msg",msg);
21
}
return選手填寫部分;
}
2.開發(fā)完善IndexController類,編寫中間商添加食品流轉(zhuǎn)信
息的方法,實現(xiàn)中間商添加食品流轉(zhuǎn)信息的功能,并測試功能完整性。
具體要求如下:
(1)開發(fā)文件IndexController.java中的
add_trace_by_distrubutor方法,請求接口為/adddistribution;
(2)開發(fā)文件IndexController.java中的
add_trace_by_distrubutor方法,要求對前端傳入的參數(shù)進行二次
驗證;
(3)開發(fā)文件IndexController.java中的
add_trace_by_distrubutor方法,要求封裝返回值為String,但不
返回視圖頁面;
add_trace_by_distrubutor方法:
/**
*中間商添加食品流轉(zhuǎn)信息
*traceNumber:食品溯源id,食品溯源過程中的標識符
*traceName:用戶名,食品流轉(zhuǎn)過程各個階段的用戶名
*quality:當前食品質(zhì)量(0=優(yōu)質(zhì)1=合格2=不合格)
*@return:中間商添加食品流轉(zhuǎn)信息結果
*/
@選手填寫部分
@PostMapping(選手填寫部分,produces=MediaType.
APPLICATION_JSON_VALUE)
publicStringadd_trace_by_distrubutor(@RequestBodyJSONObjectjsonPa
ram){
22
//聲明返回對象
JSONObject_outPutObj=newJSONObject();
if(jsonParam==null){
選手填寫部分
}
Stringtrace_number=選手填寫部分;
Stringtrace_name=選手填寫部分;
intquality=選手填寫部分;
JSONArrayparams=JSONArray.parseArray("["+trace_number+",\""+trace
_name+"\","+quality+"]");
JSONObject_jsonObj=newJSONObject();
_jsonObj.put("contractName",CONTRACT_NAME);
_jsonObj.put("contractAddress",CONTRACT_ADDRESS);
_jsonObj.put("contractAbi",JSONArray.parseArray(CONTRACT_ABI));
_jsonObj.put("user",DISTRIBUTOR_ADDRESS);
_jsonObj.put("funcName",選手填寫部分);
_jsonObj.put("funcParam",選手填寫部分);
StringresponseStr=httpPost(URL,選手填寫部分);
JSONObjectresponseJsonObj=JSON.parseObject(responseStr);
Stringmsg=responseJsonObj.getString("message");
if(msg.equals("Success")){
_outPutObj.put("ret",選手填寫部分);
_outPutObj.put("msg",msg);
}else{
_outPutObj.put("ret",選手填寫部分);
23
_outPutObj.put("msg",msg);
}
return選手填寫部分;
}
3.請基于已有的項目,開發(fā)完善IndexController類,編寫獲
取某個食品的溯源信息的方法,實現(xiàn)獲取某個食品的溯源信息的功能,
并測試功能完整性。
具體要求如下:
(1)開發(fā)文件IndexController.java中的trace方法,請求接
口為/trace,該接口調(diào)用私有方法get_trace,不直接與合約交互,
提高系統(tǒng)的安全性;
(2)開發(fā)文件IndexController.java中的trace方法,對傳入
數(shù)據(jù)進行二次驗證;
(3)開發(fā)文件IndexController.java中的get_trace方法,要
求通過合約進行溯源信息的查詢,且外部無法直接調(diào)用;
(4)開發(fā)文件IndexController.java中的trace方法,要求封
裝返回值為String,但不返回視圖頁面。
trace方法:
/**
*獲取某個食品的溯源信息
*@paramtraceNumber食品溯源id,食品溯源過程中的標識符
*@return對應食品的溯源信息
*/
@選手填寫部分
@GetMapping(選手填寫部分,produces=MediaType.
APPLICATION_JSON_VALUE)
24
publicStringtrace(StringtraceNumber){
JSONObject_outPut=newJSONObject();
if(Integer.parseInt(traceNumber)<=0){
選手填寫部分
}
Listres=get_trace(traceNumber);
JSONArrayo=newJSONArray(res);
return選手填寫部分;
}
get_trace方法:
/**
*從鏈上獲取某個食品的溯源信息
*@paramtraceNumber食品溯源id,食品溯源過程中的標識符
*@return對應食品的溯源信息
*/
選手填寫部分JSONArrayget_trace(StringtraceNumber){
//獲取食品基本信息
JSONArrayparams=JSONArray.parseArray("["+trac
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑材料國際貿(mào)易代理服務合同
- 舟山2025年浙江舟山市普陀海洋產(chǎn)業(yè)研究中心招聘緊缺高端人才筆試歷年參考題庫附帶答案詳解
- 溫州2025年浙江溫州平陽縣企事業(yè)單位面向全球引進博士10人筆試歷年參考題庫附帶答案詳解
- 浙江2025年浙江省第七地質(zhì)大隊選調(diào)專業(yè)技術人員筆試歷年參考題庫附帶答案詳解
- 江門廣東江門臺山市衛(wèi)生健康局下屬公益一類事業(yè)單位招聘編外人員11人筆試歷年參考題庫附帶答案詳解
- 2025年中國家具噴漆房市場調(diào)查研究報告
- 惠州2025年上半年廣東惠州市技師學院人才派遣人員招聘筆試歷年參考題庫附帶答案詳解
- 2025年中國2-溴丙酰溴市場調(diào)查研究報告
- 廣州2025年廣東廣州市天河區(qū)金燕幼兒園編外教輔人員招聘筆試歷年參考題庫附帶答案詳解
- 2025年織帶印花機項目可行性研究報告
- 元宇宙視域下非遺保護與傳播途徑探究
- 2025代運營合同范本
- 家庭燃氣和煤氣防火安全
- 第十一章《功和機械能》達標測試卷(含答案)2024-2025學年度人教版物理八年級下冊
- 初三物理常識試卷單選題100道及答案
- 辦公用品價格清單
- 公司銀行貸款申請書范文
- DB3713T 340-2024 實景三維數(shù)據(jù)接口及服務發(fā)布技術規(guī)范
- 機械設計制造及其自動化專業(yè)知識
- 八年級生物開學摸底考(長沙專用)(考試版)
- 傳染病監(jiān)測預警與指揮信息平臺升級建設方案
評論
0/150
提交評論