肖建宏
(廣東白云學(xué)院,廣州510450)
當(dāng)前,我國(guó)越來越多的高校正在實(shí)施校企協(xié)同育人“3+1”人才培養(yǎng)模式改革,為確保累計(jì)一年學(xué)生在企業(yè)的實(shí)踐教學(xué)活動(dòng)能夠高效規(guī)范地運(yùn)行,保障企業(yè)實(shí)踐教學(xué)的質(zhì)量,越來越多的高校開發(fā)、部署了企業(yè)實(shí)踐教學(xué)管理系統(tǒng),通過企業(yè)實(shí)踐教學(xué)管理系統(tǒng)實(shí)現(xiàn)畢業(yè)設(shè)計(jì)(論文)指導(dǎo)、教學(xué)巡查及企業(yè)現(xiàn)場(chǎng)調(diào)研等教學(xué)活動(dòng)的落實(shí)。然而,由于傳統(tǒng)的企業(yè)實(shí)踐教學(xué)管理系統(tǒng)具有中心化的特點(diǎn),存在數(shù)據(jù)不安全和容易滋生系統(tǒng)開發(fā)人員或管理人員未經(jīng)授權(quán)就刪除或篡改數(shù)據(jù)的現(xiàn)象;其次,由于系統(tǒng)中的數(shù)據(jù)影響到對(duì)學(xué)生和教師的考核,部分用戶可能為了自己的利益而抵賴自己的錯(cuò)誤行為,例如,可能有的教師給錯(cuò)了一個(gè)成績(jī),但卻堅(jiān)持謊稱自己提交的是另一個(gè)成績(jī),之所以出現(xiàn)信息不對(duì),是因?yàn)橄到y(tǒng)出了問題或其他管理人員可能的誤操作甚至是有意修改,而這無疑會(huì)讓系統(tǒng)陷入被質(zhì)疑的境地,從而給系統(tǒng)的管理帶來麻煩;最后,傳統(tǒng)的企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)極容易導(dǎo)致集體作假的情況,個(gè)別部門可能出于應(yīng)付上級(jí)管理部門評(píng)估檢查的需要而通過行政的手段要求教師、學(xué)生甚至系統(tǒng)開發(fā)人員或管理人員批量修改數(shù)據(jù),這將給上級(jí)管理部門準(zhǔn)確了解下級(jí)部門的教學(xué)運(yùn)行情況帶來極大的障礙。所有這些都會(huì)在一定程度上給系統(tǒng)的可信性造成一定的負(fù)面影響,極大地增加系統(tǒng)的信用成本和管理成本。
區(qū)塊鏈技術(shù)是一種基于現(xiàn)代密碼學(xué)、分布式一致性協(xié)議、點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)通信技術(shù)和智能合約編程語言等形成的數(shù)據(jù)交換、處理和存儲(chǔ)的技術(shù)組合,是比特幣、以太坊等諸多密碼學(xué)貨幣背后的支撐性技術(shù),可以在互不信任的環(huán)境下實(shí)現(xiàn)去信任中介的可信交易,具有去中心化、去信任化、防偽造和不可篡改的特點(diǎn),是已經(jīng)被實(shí)踐證明了的可作為價(jià)值轉(zhuǎn)移的技術(shù)手段,能有效解決上述傳統(tǒng)高校企業(yè)實(shí)踐教學(xué)管理系統(tǒng)中存在的問題。本文以高校企業(yè)實(shí)踐教學(xué)管理的業(yè)務(wù)需求為立足點(diǎn),提出一種基于區(qū)塊鏈技術(shù)的高校企業(yè)實(shí)踐教學(xué)管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案。
根據(jù)校企協(xié)同育人“3+1”人才培養(yǎng)模式,高校企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)需要為用戶提供實(shí)習(xí)安排、教學(xué)巡查和畢業(yè)設(shè)計(jì)(論文)等業(yè)務(wù)服務(wù),為此,我們將高校企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)劃分為四個(gè)子系統(tǒng),具體的功能結(jié)構(gòu)如圖1 所示。
其中,實(shí)習(xí)安排子系統(tǒng)主要實(shí)現(xiàn)了實(shí)習(xí)基地管理、實(shí)習(xí)崗位管理、學(xué)生崗位安排、學(xué)生導(dǎo)師安排及現(xiàn)場(chǎng)調(diào)研等功能,它明確了學(xué)生與實(shí)習(xí)崗位、學(xué)生與指導(dǎo)教師之間的關(guān)系,同時(shí)規(guī)定了學(xué)生實(shí)習(xí)期間需要完成的任務(wù),具體包括在系統(tǒng)中提交企業(yè)現(xiàn)場(chǎng)調(diào)研報(bào)告、生產(chǎn)實(shí)習(xí)報(bào)告、實(shí)習(xí)周記及實(shí)習(xí)鑒定表等材料。
教學(xué)巡查子系統(tǒng)主要實(shí)現(xiàn)了巡查申請(qǐng)、巡查審核及巡查評(píng)價(jià)等功能,通過該子系統(tǒng),教師可以申請(qǐng)到企業(yè)現(xiàn)場(chǎng)巡查某些學(xué)生,而學(xué)??梢詫徍私處煹慕虒W(xué)巡查申請(qǐng),當(dāng)教學(xué)巡查完成時(shí),學(xué)生對(duì)教師的教學(xué)巡查進(jìn)行評(píng)價(jià)打分。
畢業(yè)設(shè)計(jì)(論文)子系統(tǒng)主要實(shí)現(xiàn)了選題、任務(wù)書、開題報(bào)告、中期檢查、畢業(yè)設(shè)計(jì)(論文)及畢業(yè)答辯等功能,它明確了學(xué)生、指導(dǎo)教師、評(píng)閱教師和答辯組長(zhǎng)協(xié)同完成畢業(yè)設(shè)計(jì)(論文)的過程及其需要在系統(tǒng)中提交的各種材料,具體包括畢業(yè)設(shè)計(jì)(論文)題目、任務(wù)書、開題報(bào)告、中期檢查表、畢業(yè)設(shè)計(jì)(論文)等。
用戶子系統(tǒng)主要實(shí)現(xiàn)了用戶管理、角色管理、權(quán)限管理、用戶角色管理和角色權(quán)限管理等功能。通過該子系統(tǒng),高校企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)可以確保用戶只能訪問與其身份相符的功能與數(shù)據(jù),它是系統(tǒng)信息安全的保障。
圖1 高校企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)功能結(jié)構(gòu)圖
傳統(tǒng)的高校企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)普遍采用B/S 結(jié)構(gòu)設(shè)計(jì)實(shí)現(xiàn),即用戶通過瀏覽器訪問服務(wù)器,服務(wù)器根據(jù)用戶的請(qǐng)求返回?cái)?shù)據(jù)或?qū)?shù)據(jù)存儲(chǔ)至數(shù)據(jù)庫中。但這樣的設(shè)計(jì)存在開發(fā)人員和系統(tǒng)管理人員權(quán)限過大的缺點(diǎn),極容易滋生造假、抵賴和腐敗的現(xiàn)象。為保障系統(tǒng)的可信性與權(quán)威性,在不影響高校企業(yè)實(shí)踐教學(xué)運(yùn)行效率與質(zhì)量的情況下,基于區(qū)塊鏈技術(shù)的高校企業(yè)實(shí)踐教學(xué)管理系統(tǒng)在傳統(tǒng)B/S 結(jié)構(gòu)的基礎(chǔ)上增加了區(qū)塊鏈和區(qū)塊鏈訪問對(duì)象,其物理架構(gòu)如圖2所示。
在基于區(qū)塊鏈技術(shù)的高校企業(yè)實(shí)踐教學(xué)管理系統(tǒng)中,當(dāng)用戶通過系統(tǒng)實(shí)現(xiàn)教學(xué)業(yè)務(wù)數(shù)據(jù)的提交時(shí),系統(tǒng)在將業(yè)務(wù)數(shù)據(jù)存儲(chǔ)到傳統(tǒng)數(shù)據(jù)庫的同時(shí),將業(yè)務(wù)的核心數(shù)據(jù)以交易的方式發(fā)送至區(qū)塊鏈上,并將交易的哈希返回給用戶。由于系統(tǒng)同時(shí)與中心化的數(shù)據(jù)庫和去中心化的區(qū)塊鏈進(jìn)行交互,而且用戶可以通過第三方區(qū)塊鏈客戶端直接訪問區(qū)塊鏈數(shù)據(jù),因此開發(fā)人員與系統(tǒng)管理人員無法篡改系統(tǒng)的數(shù)據(jù)。如果開發(fā)人員或系統(tǒng)管理人員通過修改系統(tǒng)程序或篡改系統(tǒng)中心數(shù)據(jù)庫的數(shù)據(jù)實(shí)現(xiàn)作假或抵賴已發(fā)生過的行為,那么用戶可以憑借發(fā)生過的交易哈希通過第三方區(qū)塊鏈客戶端訪問區(qū)塊鏈數(shù)據(jù)實(shí)現(xiàn)對(duì)數(shù)據(jù)真?zhèn)蔚尿?yàn)證。
基于區(qū)塊鏈技術(shù)的高校企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)主要使用ASP.NET MVC、SQL Server、Nethereum 和Geth(Go-ethereum)等技術(shù)和工具設(shè)計(jì)實(shí)現(xiàn)。其中ASP.NET MVC 用于實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯、數(shù)據(jù)訪問和用戶接口。系統(tǒng)的數(shù)據(jù)主要存儲(chǔ)于SQL Server 數(shù)據(jù)庫,但核心業(yè)務(wù)數(shù)據(jù)則同時(shí)存儲(chǔ)于以太坊聯(lián)盟區(qū)塊鏈。以太坊是一個(gè)具有智能合約功能的區(qū)塊鏈平臺(tái),具有更快的“出塊”速度,能夠很好地滿足高校企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)的需要。系統(tǒng)使用當(dāng)前最為成熟且應(yīng)用廣泛的以太坊客戶端Geth 部署以太坊聯(lián)盟鏈,并通過專為以太坊設(shè)計(jì)的.NET 集成庫Nethereum 實(shí)現(xiàn)與以太坊聯(lián)盟鏈進(jìn)行交互。
為實(shí)現(xiàn)和以太坊區(qū)塊鏈的交互,系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)了以太坊區(qū)塊鏈訪問對(duì)象。以太坊區(qū)塊鏈訪問對(duì)象主要包括交易發(fā)送對(duì)象、交易查詢對(duì)象和賬戶分配對(duì)象。
交易發(fā)送對(duì)象主要封裝了交易發(fā)送方法Send-Transaction,該方法接收用戶以JSON 格式提交的數(shù)據(jù),并將其編碼為一個(gè)字節(jié)序列,然后在此基礎(chǔ)上,進(jìn)一步將字節(jié)序列轉(zhuǎn)換為十六進(jìn)制格式,再將其發(fā)送給指定的高校以太坊聯(lián)盟鏈賬戶。如果交易發(fā)送成功,交易發(fā)送方法將返回此次交易的哈希,否則返回空字符串。由于用戶可通過第三方以太坊客戶端向特定以太坊賬戶發(fā)送交易,且以太坊上的數(shù)據(jù)是公開透明的,為了防止用戶通過第三方以太坊客戶端直接向高校以太坊聯(lián)盟鏈賬戶發(fā)送交易,從而達(dá)到偽造數(shù)據(jù)的目的,系統(tǒng)在調(diào)用Nethereum.NET 集成庫中的web3.TransactionManager.SendTransactionAsync 方法發(fā)送交易時(shí),將使用SHA512 算法計(jì)算用戶提交的原始數(shù)據(jù)的哈希,并使用系統(tǒng)的密鑰和DES 加密算法對(duì)求得的哈希進(jìn)行加密,然后與原始數(shù)據(jù)一起發(fā)送給以太坊高校盟鏈賬戶。交易發(fā)送對(duì)象的類型圖如圖3 所示。
圖3 交易發(fā)送對(duì)象類型圖
交易查詢對(duì)象主要封裝了交易查詢方法GetTransactionByHash 和交易驗(yàn)證方法CheckTransaction。交易查詢方法接收用戶傳遞的交易哈希,并將該交易哈希傳送給Nethereum.NET 集成庫中的web3.Eth.Transactions.GetTransactionByHash.SendRequestAsync 方法以獲取與該交易哈希相匹配的以太坊交易對(duì)象,并返回該以太坊交易對(duì)象。交易驗(yàn)證方法接收一個(gè)以太坊交易對(duì)象作為參數(shù),通過獲取該參數(shù)的Input 屬性獲取用戶提交的原始數(shù)據(jù)InitialData 和經(jīng)系統(tǒng)加密的哈希EncryptHash,然后使用SHA512 算法計(jì)算用戶提交的原始數(shù)據(jù)InitialData 的哈希,并將得到的哈希與使用系統(tǒng)密鑰和DES 解密算法解密EncryptHash 得到的哈希進(jìn)行比對(duì),如果相等則返回true,否則返回false。交易查詢對(duì)象的類型圖如圖4 所示。
圖4 交易查詢對(duì)象類型圖
賬戶分配對(duì)象封裝了為用戶生成以太坊賬戶的方法CreateEthAccountForUser 和查詢以太坊賬戶余額的方法GetAccountBalanceEther。CreateEthAccountForUser 方法接收一個(gè)系統(tǒng)用戶名作為參數(shù),通過調(diào)用Nethereum.NET 集成庫中的Signer.EthECKey.GenerateKey()方法生成私鑰,然后根據(jù)該私鑰構(gòu)造一個(gè)Nethereum.Web3.Accounts.Account 類型對(duì)象。在獲得以太坊賬戶對(duì)象之后,系統(tǒng)進(jìn)一步通過交易發(fā)送對(duì)象為該以太坊賬戶轉(zhuǎn)賬一定額度的以太幣,以確保該以太坊賬戶擁有足夠的以太幣能將數(shù)據(jù)存儲(chǔ)至以太坊區(qū)塊鏈上,最后系統(tǒng)將用戶的用戶名、以太坊賬戶的地址和私鑰保存到數(shù)據(jù)庫中。GetAccountBalanceEther 方法接收一個(gè)以太坊賬戶地址作為參數(shù),并通過調(diào)用Nethereum.Net集成庫中的web3.Eth.GetBalance.SendRequestAsync 方法獲取指定賬戶的余額。賬戶分配對(duì)象的類型圖如圖5 所示。
圖5 賬戶分配對(duì)象類型圖
在確保系統(tǒng)可信的同時(shí),為兼顧系統(tǒng)的運(yùn)行性能,系統(tǒng)并沒有將高校企業(yè)實(shí)踐教學(xué)的所有業(yè)務(wù)數(shù)據(jù)都存儲(chǔ)到以太坊區(qū)塊鏈上,而是只將指導(dǎo)教師、評(píng)閱教師、答辯組長(zhǎng)和系主任等用戶對(duì)學(xué)生提交的作業(yè)、畢業(yè)設(shè)計(jì)(論文)或調(diào)研報(bào)告等的評(píng)價(jià)或評(píng)分等核心數(shù)據(jù)保存到以太坊區(qū)塊鏈上。與此同時(shí),在系統(tǒng)的數(shù)據(jù)庫中,系統(tǒng)在以太坊交易記錄表中保存了評(píng)價(jià)主體對(duì)評(píng)價(jià)客體評(píng)價(jià)時(shí)產(chǎn)生的以太坊交易哈希,其數(shù)據(jù)存儲(chǔ)的具體設(shè)計(jì)如表1 所示。
通過以太坊交易記錄表,用戶可以憑借評(píng)價(jià)客體類型和評(píng)價(jià)客體主鍵快速地查詢指定作業(yè)相關(guān)的以太坊交易哈希,然后通過調(diào)用以太坊區(qū)塊鏈訪問對(duì)象中的交易查詢方法獲取該交易哈希對(duì)應(yīng)的以太坊交易對(duì)象,而不必以遍歷以太坊區(qū)鏈上每個(gè)區(qū)塊的交易,然后匹配每一筆交易中的目標(biāo)數(shù)據(jù)的方式實(shí)現(xiàn)交易查詢,這極大地提升了系統(tǒng)的運(yùn)行性能。
在用戶體驗(yàn)方面,為簡(jiǎn)化用戶提交數(shù)據(jù)的流程,系統(tǒng)為每個(gè)用戶分配了以太坊賬戶,并將其保存在數(shù)據(jù)庫中,當(dāng)系統(tǒng)需要將數(shù)據(jù)存儲(chǔ)到以太坊聯(lián)盟鏈上時(shí),系統(tǒng)根據(jù)用戶登錄系統(tǒng)的用戶名查詢數(shù)據(jù)庫中相應(yīng)用戶的以太坊賬戶和私鑰,并以該以太坊賬戶和私鑰給系統(tǒng)指定的高校以太坊聯(lián)盟鏈賬戶發(fā)送一筆交易。用戶的以太坊賬戶信息存儲(chǔ)設(shè)計(jì)如表2 所示。
為確保用戶可以便捷地對(duì)系統(tǒng)中的核心數(shù)據(jù)進(jìn)行驗(yàn)證,當(dāng)用戶將數(shù)據(jù)以交易的方式發(fā)送至高校以太坊聯(lián)盟鏈賬戶時(shí),系統(tǒng)將發(fā)送交易時(shí)返回的交易哈希以郵件的方式同時(shí)發(fā)送至相關(guān)用戶的電子郵箱,并告知用戶如何使用以太坊客戶端Geth 查詢交易。由于以太坊客戶端Geth 為第三方開發(fā)的軟件,而以太坊區(qū)塊鏈具有去中心化、可溯源、不可篡改的特點(diǎn),因此能有效防止程序員、數(shù)據(jù)庫管理員或系統(tǒng)管理員對(duì)系統(tǒng)數(shù)據(jù)或程序的篡改,從而可以實(shí)現(xiàn)對(duì)數(shù)據(jù)和信息的有效驗(yàn)證。
基于區(qū)塊鏈技術(shù)的高校企業(yè)實(shí)踐教學(xué)管理信息系統(tǒng)通過綜合應(yīng)用ASP.NET MVC、SQL Server、Geth 以太坊客戶端和Nethereum 等技術(shù)和工具將中心化與去中心化結(jié)合起來,以去中心化的方式實(shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ)與可信性驗(yàn)證,以中心化的方式兼顧系統(tǒng)的運(yùn)行性能,有效地實(shí)現(xiàn)了高校企業(yè)實(shí)踐教學(xué)活動(dòng)可信、高效地運(yùn)行。