




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2024年“中銀杯”甘肅省職業(yè)院校技能大賽
高職學(xué)生組電子與信息大類
區(qū)塊鏈技術(shù)應(yīng)用賽項(xiàng)競(jìng)賽樣題(1)
背景描述
在供應(yīng)鏈金融這個(gè)萬(wàn)億級(jí)市場(chǎng)中,區(qū)塊鏈正在快速商業(yè)化落地,
助力產(chǎn)業(yè)革新。基于區(qū)塊鏈的供應(yīng)鏈金融業(yè)務(wù)的理念是:以源自企業(yè)
的應(yīng)收賬款為底層資產(chǎn),通過區(qū)塊鏈技術(shù)實(shí)現(xiàn)債券憑證的轉(zhuǎn)讓拆分。
其中,在原始資產(chǎn)上鏈時(shí),通過對(duì)應(yīng)收賬款進(jìn)行審核校驗(yàn),確認(rèn)貿(mào)易
關(guān)系和身份真實(shí)有效,和保證上鏈資產(chǎn)的真實(shí)可信。再者,債權(quán)憑證
可基于供應(yīng)鏈進(jìn)行層層拆分與流轉(zhuǎn),都可完整追溯到最底層資產(chǎn),以
實(shí)現(xiàn)核心企業(yè)和金融機(jī)構(gòu)對(duì)供應(yīng)商的“信用穿透”。
某公司規(guī)劃開發(fā)一個(gè)區(qū)塊鏈供應(yīng)鏈金融平臺(tái),包括核心企業(yè)、供
應(yīng)商、銀行等角色,通過智能合約代碼逐步構(gòu)建區(qū)塊鏈供應(yīng)鏈金融平
臺(tái)的基本功能,實(shí)現(xiàn)銀行向核心企業(yè)提供授信并發(fā)行數(shù)字憑證,企業(yè)
與企業(yè)之間轉(zhuǎn)讓數(shù)字憑證。此外需要完成區(qū)塊鏈供應(yīng)鏈金融平臺(tái)的前
后端,實(shí)現(xiàn)基本的業(yè)務(wù)邏輯。
2
模塊一:區(qū)塊鏈產(chǎn)品方案設(shè)計(jì)及系統(tǒng)運(yùn)維(35分)
任務(wù)1-1:區(qū)塊鏈系統(tǒng)部署與運(yùn)維(25分)
圍繞供應(yīng)鏈金融區(qū)塊鏈平臺(tái)部署與運(yùn)維需求,進(jìn)行項(xiàng)目相關(guān)系統(tǒng)、節(jié)點(diǎn)以及
管理工具的部署工作。通過監(jiān)控工具完成對(duì)網(wǎng)絡(luò)、節(jié)點(diǎn)服務(wù)的監(jiān)控。最終根據(jù)業(yè)
務(wù)需求規(guī)范,完成系統(tǒng)日志、網(wǎng)絡(luò)參數(shù)、節(jié)點(diǎn)服務(wù)等系統(tǒng)結(jié)構(gòu)的維護(hù)。
1.根據(jù)參數(shù)與端口設(shè)置要求,部署區(qū)塊鏈系統(tǒng)并驗(yàn)證;
2.根據(jù)參數(shù)與端口設(shè)置要求,部署區(qū)塊鏈網(wǎng)絡(luò)管理平臺(tái)并驗(yàn)證;
3.基于區(qū)塊鏈系統(tǒng)相關(guān)管理平臺(tái),按照任務(wù)指南實(shí)施系統(tǒng)運(yùn)維工作并驗(yàn)證。
4.基于區(qū)塊鏈系統(tǒng)相關(guān)監(jiān)管工具,按照任務(wù)指南對(duì)區(qū)塊鏈系統(tǒng)進(jìn)行監(jiān)管。
子任務(wù)1-1-1:搭建區(qū)塊鏈系統(tǒng)并驗(yàn)證(8分)
基于給定服務(wù)器環(huán)境以及軟件(地址“/root/tools”),使用Docker以默認(rèn)
配置安裝單機(jī)4節(jié)點(diǎn)的區(qū)塊鏈系統(tǒng),并完成控制臺(tái)工具的部署:
(1)完成系統(tǒng)搭建配置與啟動(dòng)。(2分)
(2)使用基于Docker命令查看區(qū)塊鏈系統(tǒng)狀態(tài)。(2分)
(3)檢查區(qū)塊鏈系統(tǒng)節(jié)點(diǎn)node0連接狀態(tài)輸出。(2分)
(4)配置控制臺(tái),管理相關(guān)證書并啟動(dòng)。(2分)
子任務(wù)1-1-2:區(qū)塊鏈管理平臺(tái)部署與驗(yàn)證(8分)
基于給定服務(wù)器環(huán)境以及軟件(地址“/root/tools”),按要求部署區(qū)塊鏈
管理平臺(tái),具體工作如下:
(1)配置Mysql數(shù)據(jù)庫(kù)(2分)
(2)配置管理平臺(tái)連接區(qū)塊鏈系統(tǒng)(2分)
(3)使用命令啟動(dòng)管理平臺(tái)服務(wù)(2分)
(4)驗(yàn)證管理平臺(tái)啟動(dòng)情況(2分)
子任務(wù)1-1-3:區(qū)塊鏈系統(tǒng)節(jié)點(diǎn)運(yùn)維(5分)
基于已完成的區(qū)塊鏈系統(tǒng)與管理平臺(tái)搭建工作,開展相關(guān)節(jié)點(diǎn)運(yùn)維工作:
(1)生成新節(jié)點(diǎn)(node4),啟動(dòng)并檢查(2分)
3
(2)修改新節(jié)點(diǎn)配置,并查看節(jié)點(diǎn)的nodeid(2分)
(3)將新節(jié)點(diǎn)作為觀察節(jié)點(diǎn)加入group1當(dāng)中,并檢查是否加入成功(1分)
子任務(wù)1-1-4:區(qū)塊鏈系統(tǒng)管理平臺(tái)運(yùn)維(4分)
基于已部署的區(qū)塊鏈系統(tǒng)管理平臺(tái),進(jìn)行系統(tǒng)相關(guān)運(yùn)維工作:
(1)基于管理平臺(tái)功能頁(yè)面,添加新主機(jī)(2分)
(2)基于管理平臺(tái)功能頁(yè)面,修改新節(jié)點(diǎn)(node4)節(jié)點(diǎn)狀態(tài),并監(jiān)控。(2
分)
任務(wù)1-2:區(qū)塊鏈系統(tǒng)測(cè)試(10分)
設(shè)計(jì)對(duì)區(qū)塊鏈系統(tǒng)的測(cè)試流程;結(jié)合實(shí)際業(yè)務(wù)需求,調(diào)用部署的智能合約中
進(jìn)行系統(tǒng)測(cè)試、性能測(cè)試等;根據(jù)業(yè)務(wù)需求,分析并且修復(fù)給定智能合約中的安
全漏洞。利用模擬業(yè)務(wù)和測(cè)試工具來完成對(duì)區(qū)塊鏈系統(tǒng)服務(wù)數(shù)據(jù)的測(cè)試。
1.基于區(qū)塊鏈系統(tǒng)的中間件服務(wù)的部署腳本完成中間件服務(wù)環(huán)境搭建以
及搭建結(jié)果驗(yàn)證,最后將執(zhí)行結(jié)果截圖保存。(3分)
(1)實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)中間件服務(wù)平臺(tái)部署。(1分)
(2)實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)中間件服務(wù)簽名功能啟動(dòng)情況驗(yàn)證。(1分)
(3)區(qū)塊鏈中間件服務(wù)節(jié)點(diǎn)管理進(jìn)程啟動(dòng)情況驗(yàn)證和瀏覽器驗(yàn)證。(1分)
2.智能合約安全漏洞測(cè)試。(7分)
有如下智能合約:
pragmasolidity^0.7.6;
contractTimeLock{
mapping(address=>uint)publicbalances;
mapping(address=>uint)publiclockTime;
functiondeposit()externalpayable{
balances[msg.sender]+=msg.value;
lockTime[msg.sender]=block.timestamp+1weeks;
}
functionincreaseLockTime(uint_secondsToIncrease)public{
lockTime[msg.sender]+=_secondsToIncrease;
4
}
functionwithdraw()public{
require(balances[msg.sender]>0,"Insufficientfunds");
require(block.timestamp>lockTime[msg.sender],"Locktimenotexpired");
uintamount=balances[msg.sender];
balances[msg.sender]=0;
(boolsent,)=msg.sender.call{value:amount}("");
require(sent,"FailedtosendEther");
}
}
contractAttack{
TimeLocktimeLock;
constructor(TimeLock_timeLock){
timeLock=TimeLock(_timeLock);
}
fallback()externalpayable{}
functionattack()publicpayable{
timeLock.deposit{value:msg.value}();
timeLock.increaseLockTime(
type(uint).max+1-timeLock.lockTime(address(this))
);
timeLock.withdraw();
}
}
如上代碼主要實(shí)現(xiàn)功能為規(guī)定了轉(zhuǎn)賬凍結(jié)時(shí)間,在凍結(jié)時(shí)間內(nèi)用戶不能提取存款
的金額。
(1)分析智能合約中存在問題,并說明危害。(2分)
(2)根據(jù)測(cè)試工具中的代碼文件,編寫測(cè)試用例,復(fù)現(xiàn)智能合約中存在的
漏洞。(3分)
(3)創(chuàng)建新的智能合約,修復(fù)其中問題,說明修復(fù)內(nèi)容并測(cè)試。(2分)
5
模塊二:智能合約開發(fā)與測(cè)試(30分)
任務(wù)2-1:智能合約開發(fā)(20分)
使用Solidity語(yǔ)言完成智能合約開發(fā)、部署和調(diào)用,要求如下:
1.供應(yīng)鏈金融實(shí)體信息編碼(6分)
(1)編寫供應(yīng)鏈金融智能合約的實(shí)體接口,完成實(shí)體通用數(shù)據(jù)的初始化,
實(shí)現(xiàn)企業(yè)和票據(jù)實(shí)體信息上鏈的功能;(2分)
表SupplyChain實(shí)體說明
名稱類型說明
companyNamestring公司名稱
companyAddressaddress公司地址
creditAssetuint信用資產(chǎn)
acceptReceiptIndexuint[]接收的憑證
sendReceiptIndexuint[]發(fā)送的憑證
senderAddressaddress發(fā)送票據(jù)的地址
accepterAddressaddress接收票據(jù)的地址
receiptTypeuint8憑證類型
transferTypeuint8交易類型
amountuint交易數(shù)量
//公司信息結(jié)構(gòu)體
structCompany{
//①公司名稱
//②公司地址
//③信用資產(chǎn)
//④接收的憑證
//⑤發(fā)送的憑證
6
}
//數(shù)字發(fā)票收據(jù)信息
structReceipt{
//⑥發(fā)送票據(jù)的地址
//⑦接收票據(jù)的地址
//⑧憑證類型
//⑨交易類型
//⑩交易數(shù)量
}
(2)編寫企業(yè)上鏈信息接口,實(shí)現(xiàn)供應(yīng)鏈金融的企業(yè)信息上鏈;(2分)
functionaddCompany(stringname,addresscompanyAddress)
returns(bool){
//①實(shí)例化公司
//②添加公司地址
//③將實(shí)例化的公司添加到公司映射
//④返回添加成功標(biāo)識(shí)
}
(3)基于給定的智能合約代碼以及注釋,完成銀行向企業(yè)交易的接口函數(shù);
(2分)
functionbankToCompanyReceipt(addresssenderAddress,address
accepterAddress,uintamount,uint8receiptType)returns(uint){
①判斷接收地址存在
②實(shí)例化銀行
③實(shí)例化公司
if(keccak256(bank.bankName)==keccak256("")){
return404001;
7
}
//確認(rèn)公司存在
if(keccak256(panyName)==④){
return404002;
}
if(bank.creditAsset<amount){
return500001;
}
2.供應(yīng)鏈金融公司與公司接口編碼(6分)
(1)編寫公司與公司之間進(jìn)行交易的歷史存證上鏈接口,實(shí)現(xiàn)公司與公
司之間的交易功能;(2分)
functioncompanyToCompanyReceipt(①,addressaccepterAddress,uint
amount,uint8receiptType)returns(uint){
//②接收地址判斷
CompanymemorysenderCompany=companyMap[③];
Companymemory④=companyMap[accepterAddress];
//確認(rèn)發(fā)送公司存在
if(keccak256(senderCompany.⑤)==keccak256("")){
return404001;
}
//確認(rèn)接收公司存在
if(keccak256(accepterCpanyName)==⑥){
return404002;
}
8
//如果存證接收的公司資產(chǎn)小于存證數(shù)額,那么就不能交易發(fā)送存
證
if(accepterCompany.creditAsset⑦⑧){
return500001;
}
(2)編寫創(chuàng)建存證的接口,實(shí)現(xiàn)創(chuàng)建存證的功能;(2分)
ReceiptmemorynewReceipt=Receipt(①,accepterAddress,receiptType,
2,amount);
receiptIndex+=1;
//記錄存證(存證Map,公司Map對(duì)應(yīng)地址的發(fā)送和接收存證列表)
receiptMap[receiptIndex]=②;
companyMap[③].sendReceiptIndex.push(receiptIndex);
companyMap[accepterAddress].acceptReceiptIndex.push(④);
(3)編寫交易金額數(shù)量變化的接口,實(shí)現(xiàn)憑證交易雙方資金的變化功能;
(2分)
companyMap[①].creditAsset②amount;
companyMap[③].creditAsset④amount;
return200;
}
3.供應(yīng)鏈金融公司與銀行交易的接口編碼(4分)
(1)編寫公司與銀行之間進(jìn)行交易的歷史存證上鏈接口,實(shí)現(xiàn)公司與銀行
之間的交易功能;(2分)
functioncompanyToBankReceipt(addresssenderAddress,①,uint
amount,uint8receiptType)returns(uint){
②
9
Bankmemorybank=bankMap[senderAddress];
CompanymemoryaccepterCompany=companyMap[③];
//確認(rèn)發(fā)送公司存在
if(keccak256(bank.bankName)==④){
return404001;
}
//確認(rèn)接收公司存在
if(keccak256(accepterCpanyName)==
keccak256("")){
return404002;
}
//如果存證接收的公司資產(chǎn)小于存證數(shù)額,那么就不能交易發(fā)送存
證
if(accepterCompany.creditAsset<amount){
return500001;
}
(2)編寫創(chuàng)建存證的接口,實(shí)現(xiàn)創(chuàng)建存證的功能;(1分)
//創(chuàng)建存證
ReceiptmemorynewReceipt=Receipt(senderAddress,
accepterAddress,①,3,amount);
receiptIndex②1;
receiptMap[③]=newReceipt;
bankMap[senderAddress].sendReceiptIndex.push(receiptIndex);
10
companyMap[accepterAddress].④;
(3)編寫交易金額數(shù)量變化的接口,實(shí)現(xiàn)憑證交易雙方資金的變化功能;
(1分)
bankMap[senderAddress].①②amount;
companyMap[accepterAddress].③④amount;
return200;
}
4.合約編譯、部署和調(diào)用(4分)
(1)解決代碼錯(cuò)誤和警告,正確編譯并部署合約,成功獲取部署的合約地
址和abi。(1分)
(2)調(diào)用食品溯源智能合約的接口,完整驗(yàn)證業(yè)務(wù)流程。(3分)
任務(wù)2-2:智能合約測(cè)試(10分)
編寫智能合約單元測(cè)試代碼并完成合約功能測(cè)試、性能測(cè)試,具體要求如下:
1.配置區(qū)塊鏈網(wǎng)絡(luò)(2分)
啟動(dòng)區(qū)塊鏈網(wǎng)絡(luò),創(chuàng)建新的Workspace,配置對(duì)外訪問的RPC接口為7545,
配置項(xiàng)目的配置文件config.js實(shí)現(xiàn)與新建Workspace的連接。
2.補(bǔ)充給定基礎(chǔ)代碼中注釋提示的部署邏輯(2分)
基于VSCODE加載的測(cè)試項(xiàng)目,補(bǔ)全位于test文件夾中HelloWorld.js文件
預(yù)操作的方法。在測(cè)試文件中添加預(yù)定義的方法(在其他方法啟動(dòng)前使用)。
3.補(bǔ)充代碼中注釋提示的測(cè)試邏輯(2分)
基于VSCODE加載的測(cè)試項(xiàng)目,補(bǔ)全位于test文件夾中HelloWorld.js文件,
添加測(cè)試用例,測(cè)試智能合約的get方法。
4.測(cè)試hello.get()方法(2分)
基于VSCODE加載的測(cè)試項(xiàng)目,補(bǔ)全位于test文件夾中HelloWorld.js文件,
11
添加測(cè)試用例,測(cè)試智能合約的hello.get()方法。
5.測(cè)試.should.equal進(jìn)行對(duì)比判斷(2分)
基于VSCODE加載的測(cè)試項(xiàng)目,補(bǔ)全位于test文件夾中HelloWorld.js文件,
添加測(cè)試用例,測(cè)試智能合約的equal字符串比較方法。
12
模塊三:區(qū)塊鏈應(yīng)用系統(tǒng)開發(fā)(30分)
任務(wù)3-1:區(qū)塊鏈應(yīng)用前端功能開發(fā)(10分)
1.請(qǐng)基于前端系統(tǒng)的開發(fā)模板,在注冊(cè)組件Register.vue文件中添加對(duì)應(yīng)
的注冊(cè)邏輯代碼,實(shí)現(xiàn)對(duì)后端系統(tǒng)的注冊(cè)功能,并測(cè)試功能完整性(3分):
本題目的具體要求如下:
(1)界面有明確的注冊(cè)相關(guān)提示語(yǔ)
(2)需要填寫的部分有組織名稱、區(qū)塊鏈地址、組織類型
(3)頁(yè)面需要有“返回”按鈕,可以跳轉(zhuǎn)到登錄頁(yè)面
(4)點(diǎn)擊“注冊(cè)”按鈕時(shí)需要檢查區(qū)塊鏈地址是否已輸入
(5)注冊(cè)成功后跳轉(zhuǎn)登錄頁(yè)面
Register.vue:
代碼片段1:
<el-row>
<el-col:span="16":offset="4">
<el-formlabel-width="100px">
<h3>選手填寫部分</h3>
<el-form-itemlabel="組織名稱:">
<el-inputtype="primary"v-model="選手填寫部分
"></el-input>
</el-form-item>
<el-form-itemlabel="區(qū)塊鏈地址:">
<el-inputtype="primary"v-model="選手填寫部分
"></el-input>
</el-form-item>
<el-form-itemlabel="組織類型:">
<el-radio-groupv-model="orgType">
13
<el-radio:label="1">公司</el-radio>
<el-radio:label="2">銀行</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-rowstyle="padding-bottom:20px">
<el-buttontype="primary"選手填寫部分>注冊(cè)</el-button>
<el-buttontype="primary"選手填寫部分>返回</el-button>
</el-row>
代碼片段2:
register:function(){
if(this.address==""){
alert(選手填寫部分)
}else{
letpostData={
orgType:選手填寫部分,
username:選手填寫部分,
address:選手填寫部分
}
//和后端交互
選手填寫部分
}
},
代碼片段3:
goback:function(){
14
Type=''
this.username=''
this.address=''
選手填寫部分
}
2.請(qǐng)基于前端系統(tǒng)的開發(fā)模板,在登錄組件Login.vue文件中添加對(duì)應(yīng)的登
錄邏輯代碼,實(shí)現(xiàn)對(duì)后端系統(tǒng)的登錄功能,并測(cè)試功能完整性(3分):
本題目的具體要求如下:
(1)界面有明確的登錄相關(guān)提示語(yǔ)
(2)需要填寫的項(xiàng)有用戶地址、組織類型
(3)頁(yè)面需要有“注冊(cè)”按鈕,可以跳轉(zhuǎn)注冊(cè)頁(yè)面
(4)點(diǎn)擊“登錄”按鈕時(shí)需要檢查各個(gè)表項(xiàng)是否已輸入
(5)登錄成功后跳轉(zhuǎn)首頁(yè),路徑為“/home”
Login.vue:
代碼片段1:
<el-col:span="16":offset="4">
<el-formlabel-width="80px">
<h1>供應(yīng)鏈金融應(yīng)用</h1>
<h3>選手填寫部分</h3>
<el-form-itemlabel="用戶地址:">
<el-inputtype="primary"v-model="選手填寫部分
"></el-input>
</el-form-item>
<el-form-itemlabel="組織類型:">
<el-radio-groupv-model="選手填寫部分">
<el-radio:label="1">公司</el-radio>
<el-radio:label="2">銀行</el-radio>
</el-radio-group>
15
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-rowstyle="margin-bottom:20px">
<el-buttontype="primary"選手填寫部分>登錄</el-button>
<el-buttontype="primary"選手填寫部分>注冊(cè)</el-button>
</el-row></el-row>
代碼片段2:
login:function(){
if(this.address==""){
alert("選手填寫部分")
}elseif(Type==""){
alert("選手填寫部分")
}else{
letpostData={
orgType:選手填寫部分,
address:選手填寫部分
}
//與后端交互
選手填寫部分
}
},
代碼片段3:
register:function(){
選手填寫部分
16
},
3.請(qǐng)基于前端系統(tǒng)的開發(fā)模板,在公司組件Company.vue文件中添加對(duì)應(yīng)的
邏輯代碼,實(shí)現(xiàn)對(duì)后端系統(tǒng)的公司相關(guān)業(yè)務(wù)功能,并測(cè)試功能完整性(2分):
Company.vue:
代碼片段1:
<el-row>
<el-col:span="20":offset="2">
<el-table:data="companyList"style="font-size:20px">
<el-table-columnprop="address"label="賬戶地址
"></el-table-column>
<el-table-columnprop="name"label="公司名稱
"></el-table-column>
<el-table-columnprop="amount"label="賬戶總額
"></el-table-column>
<el-table-columnlabel="查看詳情">
<templateslot-scope="scope">
<el-buttontype="primary"@click="選手填寫部分">
查詢</el-button>
</template>
</el-table-column>
<el-table-columnprop="receiptType"label="轉(zhuǎn)賬">
<templateslot-scope="scope">
<el-buttontype="primary"
@click="transfer(scope.row)">操作</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
17
</el-row>
<el-row>
代碼片段2:
<el-dialogtitle="公司詳情":visible.sync="dialogVisible">
<el-formlabel-width="100px">
<el-form-itemlabel="賬戶地址:">
{{選手填寫部分}}
</el-form-item>
<el-form-itemlabel="公司名稱:">
{{選手填寫部分}}
</el-form-item>
<el-form-itemlabel="賬戶總額:">
{{選手填寫部分}}
</el-form-item>
</el-form>
代碼片段3:
detail:function(queryAddress){
this.dialogVisible=true
letaddress=選手填寫部分
this.axios.get(`選手填寫部
分?address=${address}&queryAddress=${queryAddress}`)
.then((response)=>{
console.log(response)
if(response.data.code==200){
letinAddress=
panyVO.address;
letinName=選手填寫部分;
18
letinAmount=panyVO.amount;
panyDetail={
address:選手填寫部分,
name:選手填寫部分,
amount:選手填寫部分,
senderReceiptList:
response.data.data.senderReceiptList,
accepterReceiptList:
response.data.data.accepterReceiptList
}
}else{
alert(`請(qǐng)求內(nèi)容有誤,${response.data.data}`)
}
})
},
4.請(qǐng)基于前端系統(tǒng)的開發(fā)模板,在銀行組件Bank.vue文件中添加對(duì)應(yīng)的邏
輯代碼,實(shí)現(xiàn)對(duì)后端系統(tǒng)的銀行相關(guān)業(yè)務(wù)功能,并測(cè)試功能完整性(2分):
Bank.vue:
代碼片段1:
<el-row>
<el-dialogtitle="交易(發(fā)送憑證)頁(yè)
":visible.sync="transDialogVisible"width="30%">
<el-formlabel-width="100px">
<el-form-itemlabel="發(fā)送賬戶地址:">
{{選手填寫部分}}
</el-form-item>
19
<el-form-itemlabel="接收賬戶地址:">
{{選手填寫部分}}
</el-form-item>
<el-form-itemlabel="交易額:">
<el-col:span="16":offset="4">
<el-inputtype="primary"v-model="選手填寫部分
"></el-input>
</el-col>
</el-form-item>
<el-form-itemlabel="憑證類型:">
<el-selectv-model="選手填寫部分"placeholder="請(qǐng)選擇
">
<el-option
v-for="iteminoptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
<el-row>
<el-buttontype="primary"size="medium"@click="選手填寫
部分">確定</el-button>
</el-row>
</el-dialog>
</el-row>
代碼片段2:
20
executeTransaction:function(){
letfuncName="companyToBankReceipt";
if(this.transDetail.amount==選手填寫部分){
alert('交易額不能為空!')
return
}
if(this.$cookies.get('orgType')==選手填寫部分){
alert('銀行不能給銀行發(fā)送憑證!')
return
}
if(選手填寫部分){
alert("憑證發(fā)送賬戶和接收賬戶不能相一致!")
return
}
this.axios.post(`/finance/transaction/${funcName}`,選手填
寫部分).then((response)=>{
if(response.data.code==200){
alert('憑證發(fā)送成功')
this.query()
this.transDialogVisible=false
}else{
alert(`憑證發(fā)送失敗,${response.data.data}`)
}
})
},
任務(wù)3-2:區(qū)塊鏈應(yīng)用后端功能開發(fā)(20分)
1.開發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用后端系統(tǒng)中用戶功能模塊對(duì)應(yīng)的用戶注冊(cè)功
21
能,根據(jù)前后代碼補(bǔ)充最合適的代碼,并測(cè)試功能完整性。(4分)
OrgServiceImpl.java:
/**
*注冊(cè)Service
*RegisterBOregisterBO
**/
@Override
publicResult<String>register(RegisterBOregisterBO){
if(StrUtil.isEmpty(選手填寫部分)||
StrUtil.isEmpty(選手填寫部分)||
registerBO.getOrgType()==選手填寫部分
){
returnResult.error(ResultVO.PARAM_EMPTY);
}
ListfuncParam=newArrayList();
funcParam.add(選手填寫部分);
funcParam.add(選手填寫部分);
if(registerBO.getOrgType()==2){
funcParam.add(BigInteger.valueOf(1000));
}
StringfuncName;
if(registerBO.getOrgType()==2){
funcName=選手填寫部分;
}else{
funcName=選手填寫部分;
}
22
String_result=
weBASEUtils.funcPost(OWNER_ADDRESS,funcName,funcParam);
JSONObject_resultJson=JSONUtil.parseObj(_result);
if(_resultJson.containsKey("statusOK")==false||
_resultJson.getBool("statusOK")!=true){//
_resultJson.getInt("code")>0
returnResult.error(ResultVO.選手填寫部分);
}
returnResult.success("ok");
}
2.開發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用中后端系統(tǒng)中用戶功能模塊對(duì)應(yīng)的用戶登錄
功能,根據(jù)前后代碼補(bǔ)充最合適的代碼,并測(cè)試功能完整性。(4分)
OrgServiceImpl.java:
/**
*登錄Service
*LoginBOloginBO
**/
@Override
publicResult<String>login(@RequestBodyLoginBOloginBO){
if(StrUtil.isEmpty(loginBO.getAddress())
){
returnResult.error(ResultVO.PARAM_EMPTY);
}
23
ListfuncParam=newArrayList();
funcParam.add(選手填寫部分);
StringfuncName;
if(loginBO.getOrgType()==2){
funcName=選手填寫部分;
}else{
funcName=選手填寫部分;
}
String_result=weBASEUtils.funcPost(選手填寫部
分,funcName,funcParam);
JSONArray_resultJson=JSONUtil.parseArray(_result);
if(StrUtil.isEmpty(_resultJson.get(0).toString())){
returnResult.error(ResultVO.選手填寫部分);
}
returnResult.success("ok");
}
3.開發(fā)區(qū)塊鏈供應(yīng)鏈金融應(yīng)用后端系統(tǒng)中查詢功能模塊對(duì)應(yīng)的查詢所有公
司信息功能,根據(jù)前后代碼補(bǔ)充最合適的代碼,并測(cè)試功能完整性。(4分)
QueryServiceImpl.java:
/**
*獲取所有公司數(shù)據(jù),不包含存證詳細(xì)信息
**/
@Override
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 收養(yǎng)家庭育兒指導(dǎo)服務(wù)平臺(tái)構(gòu)建路徑考核試卷
- 木片尺寸精度與自動(dòng)化檢測(cè)考核試卷
- 煤炭產(chǎn)業(yè)政策建議與展望考核試卷
- 攝影攝像器材租賃服務(wù)要點(diǎn)考核試卷
- 搪瓷制品的質(zhì)量保證體系與認(rèn)證考核試卷
- 活動(dòng)背景板租賃業(yè)務(wù)操作要領(lǐng)考核試卷
- 灌溉與農(nóng)業(yè)生態(tài)環(huán)境保護(hù)規(guī)劃考核試卷
- 日用品生產(chǎn)設(shè)備操作安全防護(hù)設(shè)備的選擇與應(yīng)用考核試卷
- 農(nóng)村合股經(jīng)營(yíng)合同標(biāo)準(zhǔn)文本
- 海洋測(cè)繪軟件考核試卷
- 2025屆四川省成都市高三二診生物試題(原卷版+解析版)
- 2025年度粵醫(yī)云、國(guó)培衛(wèi)健全科醫(yī)學(xué)臨床醫(yī)學(xué)2月題目及答案
- 校園消費(fèi)進(jìn)行時(shí)青春權(quán)益不掉隊(duì)-3·15消費(fèi)者權(quán)益日教育宣傳主題班會(huì)課件
- 大學(xué)生舞蹈創(chuàng)新創(chuàng)業(yè)計(jì)劃書
- 英語(yǔ)-安徽省滁州市2025年(屆)高三下學(xué)期第一次教學(xué)質(zhì)量監(jiān)測(cè)(滁州一模)試題和答案
- 人教版六年級(jí)下學(xué)期數(shù)學(xué)第四單元《比例》典型題型專項(xiàng)練習(xí)(含答案)
- 污水處理設(shè)施運(yùn)維服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 發(fā)票紅沖申請(qǐng)書
- DL5190.5-2019電力建設(shè)施工技術(shù)規(guī)范第5部分:管道及系統(tǒng)
- 國(guó)開電大軟件工程形考作業(yè)3參考答案
- 通用電子嘉賓禮薄
評(píng)論
0/150
提交評(píng)論