閆 禹, 于 澗
(1.沈陽師范大學(xué) 軟件學(xué)院, 沈陽 110034; 2.沈陽師范大學(xué) 數(shù)學(xué)與系統(tǒng)科學(xué)學(xué)院, 沈陽 110034)
國家助學(xué)金政策是實(shí)施科教興國和人才強(qiáng)國戰(zhàn)略的重要舉措,但長期以來我國國家助學(xué)金在制度設(shè)定與實(shí)際操作中存在著一些矛盾,使得效率與公平難以權(quán)衡[1]。隨著近年來我國國家助學(xué)金的資助規(guī)模和受助覆蓋范圍不斷擴(kuò)大,助學(xué)金的評定和發(fā)放中的問題也逐漸呈現(xiàn)出來,如評定標(biāo)準(zhǔn)模糊,助學(xué)金審評過程不規(guī)范等問題;同時由于信用體系和監(jiān)督機(jī)制的不健全,評審中的順?biāo)饲楹臀璞仔袨闀r有發(fā)生,造成了資源分配的不平等[2-3]。區(qū)塊鏈?zhǔn)且环N去中心化的分布式數(shù)據(jù)庫技術(shù),具有匿名性、可溯源、不可篡改和數(shù)據(jù)加密等特點(diǎn)。區(qū)塊鏈應(yīng)用于助學(xué)系統(tǒng)可以帶來以下幾方面的改進(jìn):1)將區(qū)塊鏈技術(shù)應(yīng)用于助學(xué)系統(tǒng),可以規(guī)范參與者的行為,助學(xué)有關(guān)的工作記錄以及受助信息上鏈保存且不可篡改,可有效約束當(dāng)事者的不當(dāng)行為。2)區(qū)塊鏈有助于精準(zhǔn)地識別助學(xué)信息。在助學(xué)過程中通過加密和共識算法來保證交易的安全性,通過可溯源的技術(shù)特征解決資金被惡意挪用和助學(xué)信息被篡改等問題[4-6]。
目前針對助學(xué)體系改革的研究大多是在現(xiàn)有體制框架下尋求解決問題的方法,而借助先進(jìn)技術(shù)手段去解決助學(xué)金發(fā)放體制問題的研究還很鮮見。區(qū)塊鏈技術(shù)是一種革命性的技術(shù),為我們提供了在新的去中心化框架內(nèi)尋求解決問題的方法,本文嘗試基于區(qū)塊鏈的以太坊平臺實(shí)現(xiàn)一個國家助學(xué)金發(fā)放系統(tǒng)。
本系統(tǒng)分為區(qū)塊鏈層和應(yīng)用交互層[7-9]。上層的交互層功能模塊用來實(shí)現(xiàn)助學(xué)系統(tǒng)的核心業(yè)務(wù)邏輯,并將用戶的操作轉(zhuǎn)換成區(qū)塊鏈中的交易,并上鏈保存。通過調(diào)用區(qū)塊鏈接口,處理用戶發(fā)出的查詢請求,并將取得的數(shù)據(jù)返還用戶。下層的存儲層由各個節(jié)點(diǎn)組成以太坊聯(lián)盟鏈,并通過維護(hù)共識機(jī)制為系統(tǒng)的交易驗(yàn)證和存儲提供支持。用戶在訪問系統(tǒng)時和訪問普通瀏覽器網(wǎng)站類似,而底層區(qū)塊鏈數(shù)據(jù)存儲對用戶透明。運(yùn)行于各個網(wǎng)絡(luò)節(jié)點(diǎn)上的以太坊虛擬機(jī)作為去中心化應(yīng)用平臺的核心,而智能合約運(yùn)行在以太坊虛擬機(jī)(Ethereum Virtual Machine,EVM)上。同時,為了規(guī)避一些無關(guān)緊要尤其是惡意操作的干擾,以太坊需要用戶支付一定的交易費(fèi)用。
助學(xué)系統(tǒng)的各類人員通過聯(lián)網(wǎng)終端進(jìn)入系統(tǒng),并設(shè)置不同人員的權(quán)限,系統(tǒng)準(zhǔn)確完整地記錄每個環(huán)節(jié)的工作信息方便日后的查看監(jiān)督。區(qū)塊鏈需要存儲系統(tǒng)中每個人員的基本資料、貧困證明、助學(xué)金實(shí)施和資金的發(fā)放等信息。同時,每個工作人員在任何時點(diǎn)進(jìn)行的任何操作也都會被廣播到系統(tǒng)中的其他節(jié)點(diǎn),在進(jìn)行驗(yàn)證的同時也實(shí)現(xiàn)了工作流程的公開透明。助學(xué)工作中,一般遵循先由貧困生提出申請,之后班級輔導(dǎo)員組織線下評議并將線下環(huán)節(jié)的相關(guān)記錄和憑證上鏈保存的工作流程,同時,貧困生可以查詢受助信息,上級主管部門也可以查詢基層高校的助學(xué)金評審發(fā)放情況。系統(tǒng)業(yè)務(wù)用例如圖1所示。
圖1 系統(tǒng)業(yè)務(wù)用例圖
1)結(jié)構(gòu)體
智能合約中的結(jié)構(gòu)體(Struct)類似于傳統(tǒng)數(shù)據(jù)庫表那樣具有數(shù)據(jù)存儲功能。本系統(tǒng)智能合約中的結(jié)構(gòu)體用以記錄助學(xué)工作中的相關(guān)信息,主要包括系統(tǒng)人員信息結(jié)構(gòu)體和助學(xué)工作結(jié)構(gòu)體等。其中,系統(tǒng)人員信息結(jié)構(gòu)體包括助學(xué)系統(tǒng)工作人員結(jié)構(gòu)體、貧困生結(jié)構(gòu)體和管理員結(jié)構(gòu)體;助學(xué)工作結(jié)構(gòu)體應(yīng)保存每次和助學(xué)有關(guān)的相關(guān)工作信息記錄以及記錄添加時間等信息;此外還有用于記錄助學(xué)工作人員和所負(fù)責(zé)的貧困生之間映射關(guān)系的結(jié)構(gòu)體。其中貧困生信息結(jié)構(gòu)體如表1所示。
表1 貧困生結(jié)構(gòu)體
2)智能合約
以太坊用戶可以自己定義智能合約,進(jìn)而實(shí)現(xiàn)平臺的業(yè)務(wù)邏輯,助學(xué)系統(tǒng)通過給合約賬戶發(fā)送交易來改變以太坊中的狀態(tài)。智能合約在本地編譯后再部署到區(qū)塊鏈上,因此通過交易觸發(fā)后的智能合約就會在每個節(jié)點(diǎn)的EVM虛擬機(jī)中執(zhí)行。這相當(dāng)于把程序部署到接入網(wǎng)絡(luò)的每個以太坊客戶端節(jié)點(diǎn)上,隨時通過交易來觸發(fā)合約的執(zhí)行。合約使用Solidity語言進(jìn)行編程。web3.js是一個通過RPC調(diào)用和本地以太坊節(jié)點(diǎn)進(jìn)行通信的Javascript庫,它可以與任何暴露了RPC接口的以太坊節(jié)點(diǎn)連接,主要包括用于合約交互的 API,并負(fù)責(zé)和以太坊的連接與交互[10-13]。系統(tǒng)的交互層通過Web3.js調(diào)用下層的智能合約,實(shí)現(xiàn)數(shù)據(jù)交換。
平臺內(nèi)的智能合約主要包括:設(shè)置管理員及權(quán)限的合約Admin、設(shè)置工作人員信息和權(quán)限的合約Staff、提供登錄的合約Login、設(shè)置貧困生信息合約PoorStu(基層工作人員設(shè)置)、助學(xué)工作記錄合約WorkRecord、助學(xué)資金發(fā)放合約Fund以及用于系統(tǒng)暫停的合約Suspend等。系統(tǒng)的功能模塊通過相應(yīng)的合約來實(shí)現(xiàn)模塊功能,合約之間又互相關(guān)聯(lián),在合約中被記錄到區(qū)塊鏈內(nèi)的所有操作都可以體現(xiàn)出來。系統(tǒng)智能合約關(guān)系如圖2所示。
圖2 系統(tǒng)智能合約關(guān)系圖
系統(tǒng)的開發(fā)環(huán)境搭建在一臺高配置的主機(jī)上,使用虛擬化軟件創(chuàng)建的若干個虛擬機(jī)組建以太坊聯(lián)盟鏈網(wǎng)絡(luò)[14-15]。以太坊的虛擬機(jī)負(fù)責(zé)收發(fā)數(shù)據(jù)并解析,虛擬機(jī)節(jié)點(diǎn)包含network層和protocol層。搭建區(qū)塊鏈環(huán)境后使用Solidity語言完成合約的編寫。Geth作為以太坊客戶端用來創(chuàng)建賬號、部署智能合約以及挖礦。DApp應(yīng)用的開發(fā)選用Truffle框架,系統(tǒng)接口模塊的功能選用Node.js語言進(jìn)行開發(fā),并通過Web3.js與底層的以太坊網(wǎng)絡(luò)進(jìn)行交互并向前端返回數(shù)據(jù)。助學(xué)系統(tǒng)分為4個模塊,系統(tǒng)功能模塊如圖3所示。
圖3 系統(tǒng)功能模塊圖
主要用來記錄系統(tǒng)用戶的以太坊地址以及個人信息,同時需要將每個賬戶關(guān)聯(lián)到個人信息以確保真實(shí)性,系統(tǒng)的權(quán)限劃分和應(yīng)用操作都是基于賬戶信息。系統(tǒng)人員首先通過系統(tǒng)提供的接口申請以太坊賬號,以太坊賬號為一對公私鑰。人員在申請獲得賬戶后,還需要系統(tǒng)管理員將用戶的信息和相應(yīng)的以太坊地址記錄到區(qū)塊鏈上。系統(tǒng)管理員最初由合約創(chuàng)建者添加,之后由管理員添加基層助學(xué)工作人員和上級管理者用戶。用戶的以太坊地址用于識別用戶的身份,系統(tǒng)會根據(jù)不同的用戶授予不同的權(quán)限。同時,系統(tǒng)管理員和助學(xué)工作人員自身也需要在區(qū)塊鏈中記錄個人基本信息,通過以太坊地址關(guān)聯(lián)到系統(tǒng)人員。工作人員在系統(tǒng)中的任何時點(diǎn)的任何操作記錄都可以通過地址準(zhǔn)確查詢到,并校驗(yàn)操作的合法性,便于日后監(jiān)督和追責(zé)。
私鑰是唯一確認(rèn)用戶擁有該賬戶的憑證。管理員將賬號與對應(yīng)人員基本信息保存在用于管理人員賬號的智能合約中(Admin和Personnel),同時進(jìn)行人員的權(quán)限控制,為后續(xù)操作提供訪問控制。其中,合約Personnel用于設(shè)置助學(xué)工作人員和貧困生的賬號信息,合約用到的主要函數(shù)如表2所示,其中setStaff為合約的關(guān)鍵函數(shù),在確認(rèn)管理員身份權(quán)限后,設(shè)置工作人員信息。
表2 合約Personnel 中包含的主要函數(shù)
從助學(xué)申請?zhí)峤坏矫裰髟u議等全部助學(xué)工作的過程信息都應(yīng)該在區(qū)塊記錄中體現(xiàn)出來,同時工作人員在每次實(shí)施和助學(xué)工作有關(guān)的措施后,及時地在系統(tǒng)中添加對應(yīng)信息,這些記錄一旦上鏈無法篡改。實(shí)現(xiàn)助學(xué)工作的關(guān)鍵合約WorkRecord包括記錄與查詢助學(xué)申請信息、評審工作信息和為貧困生指定工作人員等主要函數(shù)。圖4為合約中記錄評審信息函數(shù)ReviewInfo的實(shí)現(xiàn)流程圖。
圖4 助學(xué)工作合約中reviewInfo函數(shù)流程圖
貧困生進(jìn)入系統(tǒng)登錄界面,可以查詢到發(fā)放的助學(xué)資金余額、發(fā)放明細(xì)等信息,并顯示操作人員姓名以及發(fā)放時間,學(xué)生只能看到個人賬戶,也可以隨時提取賬戶資金用于維持生活。其中,助學(xué)發(fā)放合約Fund是基于標(biāo)準(zhǔn)代幣接口ERC20改進(jìn)后的合約,其核心函數(shù)transfer實(shí)現(xiàn)轉(zhuǎn)賬功能,函數(shù)的入口參數(shù)包括發(fā)放人員地址、受助學(xué)生地址和轉(zhuǎn)移的代幣數(shù)量。
主要用于實(shí)現(xiàn)系統(tǒng)暫停功能。在一個去中心化的系統(tǒng)中,為防止惡意和非法操作,每次系統(tǒng)合約的暫停都需要事先投票進(jìn)行。只有獲得一定比例的管理員投票支持,系統(tǒng)才可以按照預(yù)定邏輯實(shí)施暫停操作,系統(tǒng)管理員可以預(yù)先設(shè)定。
我國各地區(qū)經(jīng)濟(jì)發(fā)展不平衡,國家助學(xué)金在制度設(shè)定與實(shí)際操作中存在著一些矛盾,也給具體工作帶來困境。區(qū)塊鏈技術(shù)具有去中心化、數(shù)據(jù)可溯源等特點(diǎn),可以精準(zhǔn)識別助學(xué)信息并遏制助學(xué)工作中的不當(dāng)行為的發(fā)生,逐漸改變自上而下的分配模式,重塑以效率為中心的國家助學(xué)金資助取向。