劉 瑤
(天津理工大學(xué)管理學(xué)院,天津 300384)
當(dāng)下,區(qū)塊鏈技術(shù)呈現(xiàn)著蓬勃發(fā)展的態(tài)勢,這一新興技術(shù)正在被積極應(yīng)用于金融、商業(yè)、公益等領(lǐng)域,發(fā)展前景廣闊。區(qū)塊鏈技術(shù)是近年來出現(xiàn)的分布式賬本技術(shù),具有去中心化、公開透明、不可更改、不可偽造等特點[1]。通過利用點對點通信、非對稱加密、共識機制、時間戳等技術(shù),大大減少了交易的中間環(huán)節(jié)以及復(fù)雜度,實現(xiàn)了中心化分布式系統(tǒng)。物流存儲是現(xiàn)代物流系統(tǒng)的關(guān)鍵環(huán)節(jié)。在供應(yīng)鏈流轉(zhuǎn)過程中,貨物將經(jīng)歷不同的環(huán)節(jié)。通常情況下,貨物經(jīng)過多次流轉(zhuǎn)后放入倉庫進行存儲,且存放時間較長。因此倉儲單據(jù)就顯得尤為重要。由此可見,倉庫是倉儲物流中的關(guān)鍵節(jié)點,而倉儲單據(jù)是供應(yīng)鏈和倉儲流轉(zhuǎn)過程中的重要憑證。由于供應(yīng)鏈之間的信用關(guān)系只能建立在可靠的倉儲上,因而存儲過程中必須使用倉單來記錄信息。倉單不僅是保管人支付貨款的重要憑證,還是以可信倉庫貨物為核心的信息表達方式。因此,如果相關(guān)信息可以存儲在以倉庫存儲空間為中心的區(qū)塊鏈中,建立可靠完整的商品信息網(wǎng)絡(luò),對商品進行監(jiān)管;將有助于在供應(yīng)鏈的所有參與者之間建立信任,促進倉庫收據(jù)的可靠登記與存儲,同時也將為電子倉單的便捷交易創(chuàng)造機會。
區(qū)塊鏈綜合了共識機制、數(shù)據(jù)存儲和密碼賬本等相關(guān)技術(shù),實現(xiàn)了點對點信任關(guān)系與時序不可篡改性。通過智能合約,實現(xiàn)了數(shù)據(jù)的挖掘以及價值互聯(lián),使其具備了分布式的總體特征。以區(qū)塊鏈技術(shù)為支撐的系統(tǒng)網(wǎng)絡(luò),通過所有節(jié)點就能夠完成對系統(tǒng)的監(jiān)測和維護,不受中央權(quán)威機構(gòu)的管制和監(jiān)督。各節(jié)點利用工作量證明等算法,將運行過程中產(chǎn)生的交易信息及時、安全地封裝到區(qū)塊里。區(qū)塊的內(nèi)部由區(qū)塊頭與區(qū)塊體兩部分組成,其中區(qū)塊頭的主要作用是對當(dāng)前區(qū)塊的地址、時間戳、隨機數(shù)、版本號、目標(biāo)哈希值等的封裝[2]。在封裝完成后,通過P2P系統(tǒng)實現(xiàn)區(qū)塊的全網(wǎng)廣播。所有區(qū)塊都由哈希技術(shù)緊密連接,形成高度安全的鏈?zhǔn)酱鎯Y(jié)構(gòu)——區(qū)塊鏈。通過區(qū)塊鏈,不僅可以查詢和跟蹤整個交易過程的真實數(shù)據(jù),還可以確保數(shù)據(jù)不被篡改,甚至可以避免黑客的暴力攻擊。
圖1 區(qū)塊鏈結(jié)構(gòu)示意圖
區(qū)塊鏈基礎(chǔ)構(gòu)成由下而上:數(shù)據(jù)層、網(wǎng)絡(luò)層、共識層、激勵層、契約層和應(yīng)用層。共識層包含:權(quán)益證明機制(PoS)、工作量證明機制(PoW)、股份授權(quán)證明機制(DPoS)等常用的共識機制。本文在激勵層方面不作研究,主要改進共識層的PBFT算法。
實用拜占庭容錯算法(Practical Byzantine Fault Tolerance,簡稱PBFT)于1999年被Miguel Castro和Barbara Liskov二人提出[3]。利用實用拜占庭容錯算法不僅將共識過程中的復(fù)雜度降低,還解決了原有算法效率低下等多種問題。PBFT是一種狀態(tài)機復(fù)制算法,它允許(n-1)/3節(jié)點故障,其中n是分布式系統(tǒng)一致性過程中涉及的所有節(jié)點的數(shù)量。該算法可以確保系統(tǒng)處于(n-1)/3的狀態(tài),并且在節(jié)點故障或被惡意操作的情況下,仍然可以正確訪問該節(jié)點。在實際應(yīng)用過程中因其安全性、活動性和容錯性等多種優(yōu)勢,成為最受歡迎的共識。此外,PBFT協(xié)商一致算法要求所有節(jié)點共同維護一個狀態(tài)。為此需要運行三類基本協(xié)議:一致性協(xié)議、檢查點協(xié)議和視圖更換協(xié)議。一致性協(xié)議至少包含請求(request)、序號分配(pre-prepare)、響應(yīng)(reply)三個階段[4]。在達成共識的過程中,當(dāng)主節(jié)點不能及時執(zhí)行客戶的請求,或者當(dāng)節(jié)點檢測到主節(jié)點發(fā)生惡意行為或宕機狀態(tài)時,將啟動視圖切換協(xié)議以替換存在錯誤的主節(jié)點。
倉儲是指以倉庫為基礎(chǔ)進行物資儲存、保管的總稱,包括與倉庫有關(guān)的倉儲物流活動[5]。倉庫貨物作為實物資產(chǎn)的重要組成部分,通常情況下利用電子倉單實現(xiàn)資產(chǎn)的動態(tài)轉(zhuǎn)變。電子倉單的流轉(zhuǎn)環(huán)節(jié)主要包括倉單備案、倉單審批、倉單注銷、倉單取件、倉單交易等??蛻艨筛鶕?jù)庫存狀況在指定倉儲服務(wù)平臺提交入庫申請。同時,工作人員必須對其進行監(jiān)督檢查。對貨物信息內(nèi)容的準(zhǔn)確性、真實性和有效性進行核實后。通過倉單服務(wù)平臺對倉單進行審核,審核通過后,生成正式倉單。倉單操作的步驟較為復(fù)雜,必須依靠倉庫、財務(wù)、監(jiān)管等多個服務(wù)平臺相互配合。因此,過程的透明度和安全性變得尤為重要。在倉單領(lǐng)域使用區(qū)塊鏈技術(shù),可以監(jiān)控儲存貨物的生產(chǎn)、儲存和物流過程。將物流倉儲與區(qū)塊鏈相結(jié)合,將有效改善鏈上及鏈下的數(shù)據(jù)信任問題。
區(qū)塊鏈分布式結(jié)構(gòu)存在網(wǎng)絡(luò)狀態(tài)、節(jié)點狀態(tài)持續(xù)變化的特性。若要保障共識機制的穩(wěn)定實現(xiàn),需要選出可信的節(jié)點參與共識。因此,本文依據(jù)區(qū)塊鏈中各節(jié)點的信任值的大小來確定計票節(jié)點數(shù)量。當(dāng)節(jié)點擁有較高的信任值時,該節(jié)點相應(yīng)的歷史行為就會更加誠實,在共識過程中就更適合進行計票任務(wù)。本文將所有投票節(jié)點的信任值全部初始化為T0,通過節(jié)點在不同階段的表現(xiàn),實時更新各節(jié)點的信任值。
共識達成效率直接關(guān)系著區(qū)塊鏈結(jié)構(gòu)性能,期望參與共識的節(jié)點在網(wǎng)絡(luò)狀態(tài)、共識系統(tǒng)響應(yīng)上應(yīng)有較好表現(xiàn)。對于這種表現(xiàn)的度量,本文定義為可信度。通過統(tǒng)計節(jié)點響應(yīng)分組探測、完成選舉投票、實現(xiàn)共識過程中的事務(wù)完成表現(xiàn)、應(yīng)答信息交互表現(xiàn)等數(shù)據(jù)。這里定義參數(shù)T表示可信度,為便于計算將可信度的值域限定為[0:1],值越大表示越可信。通過可信度對節(jié)點進行評級,這里采用4級評級制。評分大于0.8的為優(yōu),小于0.8但大于0.6的為良,小于0.6大于0.4的為中,小于0.4的為差。其中,優(yōu)等是分組存續(xù)期持續(xù)穩(wěn)定可靠、響應(yīng)速度快的節(jié)點,良等為事務(wù)、應(yīng)答有響應(yīng)但延時稍大的節(jié)點,中等節(jié)點是應(yīng)答有中斷或者無響應(yīng)情況的節(jié)點,差等則是有惡意行為的節(jié)點。
在分組確定后,各節(jié)點初始值T0設(shè)置為0.6。而后隨著節(jié)點參與投票、共識等任務(wù)展開統(tǒng)計事務(wù)、應(yīng)答完成情況,更新節(jié)點信任值。由于網(wǎng)絡(luò)的時變特性,可信度指標(biāo)難以實時準(zhǔn)確選出每一個組內(nèi)的最優(yōu)節(jié)點,但是可以準(zhǔn)確的排除那些惡意節(jié)點和不太穩(wěn)定的節(jié)點。因此,在進行選舉時,可將等級為優(yōu)的節(jié)點視為候選節(jié)點,等級為優(yōu)和良的節(jié)點作為選舉節(jié)點。節(jié)點更新信任值方式如下:
其中Tjk表示第j個節(jié)點的第k個信任值。Tj(k-1)表示第j個節(jié)點的k-1信任值,也是當(dāng)前節(jié)點的前一次信任值。w表示上次選舉中對該節(jié)點行為的評估值。如果節(jié)點行為良好,則w為正,相應(yīng)節(jié)點的基本信任也會增加。如果節(jié)點行為惡劣,則w為負,相應(yīng)節(jié)點的基本信任值將顯著降低。因此,可以根據(jù)特定的業(yè)務(wù)需求與選舉需求動態(tài)確定變化量w。當(dāng)節(jié)點的信任值越高,其對應(yīng)歷史各個階段的投票、計數(shù)和檢查過程就越誠實。在共識過程中,信任值高的節(jié)點較為誠實,適合參與計票任務(wù)。
(1)組內(nèi)選舉。具體步驟包括: ①更新當(dāng)前分組內(nèi)節(jié)點可信度,得到各節(jié)點可信度等級與信用值。②確定主節(jié)點:初始主節(jié)點為種子節(jié)點,成功完成組內(nèi)選舉并完成全局共識后,上次被選出的節(jié)點為主節(jié)點。③確定選舉人節(jié)點:所有優(yōu)等節(jié)點和良等節(jié)點為選舉人節(jié)點,對優(yōu)等、良等節(jié)點編號。④確定候選人。⑤主節(jié)點發(fā)起針對提名候選節(jié)點投票,進入投票流程。⑥主節(jié)點確認(rèn)投票結(jié)果:贊成票數(shù)超過投票人數(shù)一半,則通過提案,否則為失敗。⑦成功則結(jié)束選舉環(huán)節(jié);失敗則重復(fù)④-⑥步,直到成功選出;若所有候選人全部被淘汰,此時結(jié)束選舉,進入異常處理過程。
因為參與選舉與被選舉的節(jié)點均通過可信度測算,基本排除惡意節(jié)點。這里投票過程采用一種簡化的拜占庭的方法實現(xiàn):首先主節(jié)點生成投票準(zhǔn)備消息并向其他選舉人節(jié)點廣播。各選舉人節(jié)點驗證消息內(nèi)容,根據(jù)驗證結(jié)果,生成對應(yīng)投票消息向選舉人節(jié)點廣播。同時選舉人節(jié)點還要驗證消息正確性并統(tǒng)計收到的消息數(shù)。如果成功接收到2f+1個節(jié)點的消息,就可以判斷與自己意見一致的節(jié)點數(shù)量。因此可以將確認(rèn)消息發(fā)送給主節(jié)點,當(dāng)主節(jié)點收到2f+1個確認(rèn)信息則表示意見一致,達成共識。
(2)全局共識。各分組完成選舉后的節(jié)點,形成了參加全局共識的分組。采用經(jīng)典PBFT機制,達成最終共識。首先根據(jù)節(jié)點號排序,其次確定首輪主節(jié)點編號,從而以該對應(yīng)節(jié)點區(qū)塊作為記賬備選區(qū)塊。而后按照節(jié)點號排序依次擔(dān)任輪值主節(jié)點,對各節(jié)點區(qū)塊進行投票。本算法在進行分組時,各組節(jié)點數(shù)量并不相等。各組選舉出來的代理人所代表的利益是有差別的。這里以各組節(jié)點數(shù)量為參考計算選票,修正PBFT算法的計票方法,實現(xiàn)更真實的代表選舉。組內(nèi)選舉階段推選出參加全局共識節(jié)點,全局共識階段則確定最終的記賬節(jié)點,將其對應(yīng)區(qū)塊加入?yún)^(qū)塊鏈中。其算法共識消息處理流程如圖2所示。
圖2 組內(nèi)選舉投票處理流程
Hyperledger Fabric是一種開源、帶權(quán)限的分布式賬本平臺,采用模塊化通用型框架,所具有的獨一無二的身份管理及訪問控制功能使其非常適用于各種行業(yè)應(yīng)用。例如,供應(yīng)鏈的追蹤和跟蹤、貿(mào)易融資、忠誠度和獎勵,以及金融資產(chǎn)的清算和結(jié)算等。用此軟件可以快速構(gòu)建區(qū)塊鏈塊平臺,為用戶提供賬簿管理、身份管理、智能合約管理、業(yè)務(wù)管理等功能。
本文根據(jù)區(qū)塊鏈的內(nèi)部架構(gòu),將其分成三個部分:首先是由數(shù)據(jù)層和基礎(chǔ)設(shè)施組成的基礎(chǔ)部分;其次是核心技術(shù)部分,由契約層、共識層和網(wǎng)絡(luò)層組成;最后是應(yīng)用層的交互部分[6]。在基礎(chǔ)部分,數(shù)據(jù)層是由區(qū)塊鏈提供的分布式存儲。主要功能是將數(shù)據(jù)存儲在倉單業(yè)務(wù)中,保證數(shù)據(jù)不被篡改,能夠追溯到倉單的歷史。在區(qū)塊鏈核心技術(shù)部分使用Docker技術(shù),將不同的網(wǎng)絡(luò)節(jié)點用多個docker容器虛擬化,并用Go語言進行編程使節(jié)點達成共識。在倉單系統(tǒng)的應(yīng)用層中,通過web應(yīng)用程序調(diào)用fabric提供的API與區(qū)塊鏈網(wǎng)絡(luò)交互。
在數(shù)據(jù)共享過程中,常規(guī)的解決辦法是在各用戶之間建立數(shù)據(jù)訪問機制,進行數(shù)據(jù)的交換與共享。然而通過此方式很容易導(dǎo)致“一賬多記”的問題。即在多個參與者的賬簿上記錄相同的記錄。這種方法容易導(dǎo)致數(shù)據(jù)不一致因而產(chǎn)生爭議,并使多方數(shù)據(jù)交換及其追溯性難以實現(xiàn)。然而,有效且安全的多方訪問是倉儲業(yè)務(wù)的必要組成部分。與此同時,在不同的交易過程中,由于商品需要頻繁流轉(zhuǎn),所以其溯源性就顯得尤為重要。而倉單作為保管人收到貨物之后向收貨人出具的憑證,就為這一交易提供了良好的解決方案。因此基于上述問題,本文提出以下設(shè)計目標(biāo):
(1)本系統(tǒng)允許用戶動態(tài)加入或退出,所有系統(tǒng)內(nèi)部的用戶均可進行監(jiān)督。
(2)采用非對稱加密算法(RSA算法、Elgamal數(shù)字簽名等)來驗證所要接入的成員身份,同時利用較為嚴(yán)格的權(quán)限管理機制,對其成員分配相應(yīng)的權(quán)限來滿足倉單業(yè)務(wù)在各方面的要求。
(3)在該方案設(shè)計過程中,將該系統(tǒng)與網(wǎng)絡(luò)對接從而實現(xiàn)信息交互。因此需要設(shè)置較多的接口,使各方能夠靈活、便捷的與該系統(tǒng)對接,實現(xiàn)企業(yè)或移動終端以及web的訪問。
在倉單業(yè)務(wù)中,往往存在以下操作:
(1)入庫登記與公示:用戶可以選擇自己的存貨進行入庫申請。審批后,將觸發(fā)區(qū)塊鏈倉單事件,生成倉單并進行全網(wǎng)公示。
(2)倉單入庫監(jiān)督:用戶入庫申請?zhí)峤缓?,倉庫內(nèi)部工作人員對入庫操作進行審核監(jiān)督。如果貨物的數(shù)量與信息正常,將通過審查。
(3)倉單交易:通過一系列操作生成倉單后,可以在一些平臺上進行交易,并實時更新交易狀態(tài)。
(4)區(qū)塊鏈的管理包括一些基本功能、共識機制、分布式賬本以及節(jié)點的管理、成員之間的管理等系統(tǒng)管理功能。
圖3 平臺功能模塊圖
通過功能模塊,實現(xiàn)物流倉儲中按采購預(yù)算資金和消耗比例進行物料分配。由于系統(tǒng)允許物資補貨業(yè)務(wù)上鏈,當(dāng)物資數(shù)據(jù)上鏈以后,可以在區(qū)塊鏈環(huán)境下的不同部門之間進行流轉(zhuǎn)和共享。此外,共識節(jié)點中的主節(jié)點可以發(fā)起鏈上物資入庫和出庫的共識,從而實現(xiàn)其操作并將相關(guān)信息寫入?yún)^(qū)塊鏈。
本文提出了“區(qū)塊鏈+物流倉儲”的方案,將區(qū)塊鏈與物流倉儲進行了一定程度的結(jié)合。利用區(qū)塊間的相互證明,研究了倉庫物流信息的可信存儲與電子倉單的交易,解決了流通過程中倉單的可追溯性困難、交易安全不能保證等關(guān)鍵問題。在此基礎(chǔ)上,改進了PBFT算法的實現(xiàn)過程,使其在區(qū)塊鏈技術(shù)中的應(yīng)用得到了改進。在倉儲物流的實際應(yīng)用中,既滿足了倉單交易與信息存儲的要求,又為解決數(shù)據(jù)上鏈的真實性提供了思路。此外,基于改進的PBFT算法的區(qū)塊鏈技術(shù)不僅在物流倉儲中有較好的應(yīng)用,還使該技術(shù)能較早投入使用,提高了企業(yè)的生產(chǎn)效率[1]。