?

基于Petri網的區塊鏈應用系統業務流程模型研究

2020-09-09 03:09徐濟成
計算機應用與軟件 2020年9期
關鍵詞:前驅業務流程共識

李 嶒 徐濟成,2 李 亮

1(安徽中澳科技職業學院 安徽 合肥 230041) 2(安徽農業大學 安徽 合肥 230036) 3(中國科學技術大學 安徽 合肥 230026)

0 引 言

區塊鏈技術起源于比特幣,它將密碼學、時序數據、共識機制和對等網絡等技術結合起來,在去中心化的系統環境下,保證價值交易的安全、可靠、不可篡改。隨著國內外學者對區塊鏈技術研究的不斷深入,區塊鏈的應用場景從數字貨幣逐步擴展到金融領域之外,成為了一種去中心化的應用系統解決方案[1]。建立在區塊鏈技術架構之上的應用系統稱為區塊鏈應用系統,為了保證區塊鏈應用系統穩定、高效、智能地運行,其業務流程的正確性至關重要,因此在區塊鏈應用系統實施之前需要對業務流程進行建模和分析,以此避免在運行過程中出現異常而帶來的損失。

區塊鏈應用系統的運行機制和業務流程有別于傳統的DBMS,其業務流程的建模和分析方法可以借鑒傳統的工作流模型分析技術,結合區塊鏈應用的運行機制,設計業務流程的圖形化建模元素,定義形式化的數學描述方法,改造流程模型驗證分析算法。Petri網是一種基于狀態的建模方法,適用于各種系統業務流程建模分析,它具有圖形化的模型表示方法、形式化的數學描述方法、多種分析技術等特點[2],在工作流應用系統建模分析中已有不少成熟的應用,Petri網的建模分析方法具有很好的擴展性,也適用于區塊鏈應用系統業務流程建模分析。

1 區塊鏈應用

1.1 區塊鏈技術簡介

區塊鏈是從比特幣底層提取出來的一種由節點共同維護的分布式共享數據庫(賬本)技術,區塊鏈的基本概念有:交易(Transaction)是一次對賬本的寫入操作,在區塊鏈技術中交易信息只能查詢和寫入,不能更新和刪除;區塊(Block)用于記錄一個時間點發生的交易及交易的處理結果,區塊數據需要區塊鏈網絡節點達成共識后才能寫入賬本;鏈(Chain)是由一個個區塊數據根據交易時間點的順序串聯鏈接而成,相當于賬本狀態的日志記錄。區塊鏈技術實現了去中心化、集體維護、不可篡改和交易可追溯的應用系統解決方案,主要特點如下。

(1) 去中心化:節點之間用P2P的方式進行交易,交易的地址由參與節點自行管理,數據存儲在分布式共享賬本上,交易的安全由全體節點共同驗證,實現了區塊鏈網絡的互信機制。

(2) 交易透明不可篡改:區塊鏈的共享賬本是一種層次數據庫,數據庫中的記錄按照產生的時間順序永久保存,對區塊鏈網絡上的所有節點都是公開的,任何對數據的操作都將被記錄下來。

(3) 交易可追溯:由于區塊數據根據hash值彼此關聯,一旦達成共識寫入賬本,則不能對記錄進行更改和刪除,只有不斷地追加數據來表示不同的狀態。

1.2 區塊鏈應用的運行方式

共識機制是區塊鏈技術的核心,在P2P網絡中互不信任的節點通過一種預設的規則達到對新增數據的一致認可就是共識[3]。共識機制存在的意義是抵御網絡攻擊、防止數據被惡意篡改。區塊鏈應用和傳統中心化DBMS提供數據記錄增、刪、查、改的功能不同,嚴格來說在區塊鏈應用中只有查詢和新增區塊數據,刪除和更新操作是通過新增交易數據來實現,交易數據由所有節點根據共識算法共同計算驗證,達成共識的交易數據記錄在共享數據庫中,區塊鏈應用向用戶展示的信息為某一時刻所有交易數據共同計算的結果。區塊鏈這種數據操作和存儲的方法保證了所有信息變動是可追溯的,而且絕不可能出現更新延遲導致的信息不對稱。區塊鏈應用數據操作流程示意如圖1所示。

1.3 區塊鏈應用系統和傳統DBMS的比較分析

區塊鏈應用系統和傳統中心化的DBMS都是通過應用界面和用戶進行交互,從用戶操作的角度來講,兩者的前端操作是一致的。DBMS采用中心化的BS或CS系統架構,客戶端交互應用通過開放數據連接(數據庫控制接口)來調用數據庫系統(DBS),中心服務器在網絡中有著不可替代的重要地位,它根據用戶角色來分配操作權限[4],通過驗證用戶的合法性來保證數據的合法性,其運行方式如圖2所示。

圖2 DBMS運行示意圖

區塊鏈應用則是通過智能合約發送交易請求[5],經過共識機制由節點驗證后寫入共享賬本,為了保證操作的合法性,節點產生的交易由其他節點根據共識算法來共同計算驗證,驗證的對象是交易數據的本身[6],區塊鏈應用底層采用P2P的對等網絡,所有節點在網絡中具有平等的地位。區塊鏈應用系統的運行示意圖如圖3所示。

圖3 區塊鏈應用系統運行示意圖

區塊鏈應用系統和傳統DBMS采用完全不同的技術架構,兩者在網絡環境、應用環境、數據操作方式、操作主體、數據對象、驗證方式、訪問控制、存儲方式和數據結構等方面存在不同,因此在區塊鏈應用系統業務流程的分析方法不能直接照搬DBMS成熟的工作流管理技術,需要根據區塊鏈應用系統的特點對建模方法、正確性定義和驗證算法進行改造。區塊鏈應用系統和DBMS的對比如表1所示。

表1 傳統數據庫管理系統和區塊鏈應用系統的對比

2 區塊鏈應用業務流程的建模方法

2.1 區塊鏈應用業務流程的形式化定義

參照Petri網對中心化DBMS的工作流定義,結合區塊鏈應用業務流程的運行機制,提出區塊鏈應用系統業務流程網的定義。

定義1區塊鏈應用業務流程網是一個四元組PCN為(P,T,V,F),其中:

(1)P為Petri網庫所的集合,庫所用于表示流程路徑的Token容器,?p∈P稱為一個庫所;

(2)T為交易的集合,區塊鏈應用的原子任務稱為交易,T有兩個子集U和S,U是數據層操作交易的集合,S是應用層交易的集合,T=U∪S,U∩S=?;

(3)V是對交易進行分布式共識計算后的驗證狀態的集合,?v∈V∧?v(v=0∨v=1);

(4)F是連接交易和庫所之間的弧的集合,?t1∈T∧?t2∈T?(t1,t2)∈F∨(t2,t1)∈F。

推理1在PCN中至少包含兩個特殊的庫所:s和e,?s=?∧e?=?,其中:s為起始庫所,表示一個業務的開始,其前驅庫所?s為空;e為終止庫所,表示一個業務的完成,其后繼庫所e?為空。一個僅有起始庫所和終止庫所的PCN稱為空業務流。

推理2如果在空業務流PCN中加入一個交易t0,t0的前驅庫所為s,t0的后繼庫所為e,形式化表示為:t0→v0,?t0={s},v0?={e}。

推理3如果在非空業務流PCN中加入一個交易tn,需要定義前驅庫所fn和后繼庫所rn,fn為前一個交易的后繼庫所,rn為后一個交易的前驅庫所,形式化表示為:tn→vn,?tn={rn-1},vn?={fn+1}。

推理4一個數據操作交易t連接對應一個共識子過程v,v分別連接的前驅庫所和后繼庫所,?t?U→v,?v=?t,v?=t?。

2.2 交易模型的圖形化表示

一個完整的區塊鏈應用系統業務流程由若干個原子任務組成,原子任務是一個不可分割的交易,直至完成單個操作、查詢到所需數據、接受寫入區塊數據或拒絕寫入。一個原子任務在區塊鏈應用系統模型中表示為一個原子交易模型,由前驅庫所、后繼庫所、交易、共識標記、共識操作和賬本六個部分組成。當模型中的Token進入任務的前驅庫所時,由當前節點發起交易請求,根據交易的類型狀態,應用層交易直接在本地執行完成后轉至后繼庫所;數據層交易需要智能合約對交易區塊數據進行加密,向P2P網絡發送廣播,請求驗證交易,達成共識的數據寫入共享賬本,無法達成共識的交易數據被拒絕寫入[7],并將Token放入交易的前驅庫所。原子交易模型如圖4所示。

圖4 原子交易

在區塊鏈應用系統建模中,為了便于對模型進行圖形表示,需要對原子交易模型進行簡化,區塊鏈應用系統的交易分為應用層交易和數據層交易,其中應用層交易的數據交換在本地完成,不對共享賬本進行操作,如本地緩存操作、本機日志文件修改、用戶數據校驗等,化簡后的應用層原子交易如圖5所示。

圖5 應用層交易簡化圖

數據層交易需要對保存在區塊鏈網絡中的共享賬本進行操作,產生一個交易區塊數據并在全網中廣播并請求寫入,此類交易需要其他節點共同驗證,達成共識后寫入成功,共識失敗將拒絕寫入。為了更清晰地描述數據交易,將交易對應的共識子過程看成一個虛擬的交易,交易的后繼庫所為虛擬交易的前驅庫所,虛擬交易有兩個后繼庫所:當前交易的前驅庫所和后續交易的前驅庫所,化簡后的數據層原子交易如圖6所示。

圖6 數據層交易簡化圖

2.3 模型的組合結構

2.3.1串行結構

具有先后順序的交易由庫所連接,前一交易的后繼庫所和后一交易的前驅庫所為同一庫所,這種模型的組合方式為串行結構。一個完整的流程模型中包含一個存在庫所中的Token,圖7所示為一個應用層交易和一個數據層交易順序執行構成的組合模型。

圖7 串行結構模型

2.3.2并行與結構

兩個或以上交易同時執行完畢后,后續交易才能得到執行,這種模型的組合方式為并行與結構。在模型表示中,后續交易有兩個或以上前驅庫所,當所有前驅庫所中均包含Token,才能驅動后續交易的執行,圖8為一個包含并行與結構的組合模型,其中:交易t1和t2組成的并行與結構,交易t3為后續交易。

圖8 并行與結構模型

2.3.3并行或結構

兩個或以上的交易的其中一個執行完畢后即可執行后續交易,這種交易模型的組合方式為并行或結構。在模型表示中,兩個或以上交易擁有共同的后繼庫所,該后繼庫所為后續交易的前驅庫所,任意交易執行后Token均可進入后繼庫所,圖9所示為一個包含并行或結構的組合模型,其中:交易t1和t2組成了并行或結構,交易t3為后續交易。

圖9 并行或結構模型

2.4 模型的正確性定義

區塊鏈應用系統去中心化的特性需要其在區塊鏈網絡中高度智能化地自動運行,所以該系統在實施一個業務流程模型前,要保證業務流程模型的正確性,避免應用系統在運行過程中實施維護[8]。一個區塊鏈應用系統業務流程模型PCN為(P,T,V,F)的正確性可描述為流程的可達性、結果的唯一性、任務的必要性和共識狀態的完整性[9]四個方面。

定義5共識狀態的完整性:?v?V∧(t→e)∧(v=1),當模型執行完畢后,所有需要共識的任務均已經達成了共識,共識標記集合V中所有的元素的值均為1。

3 區塊鏈應用的模型分析及應用

3.1 驗證方法

數據層交易需要進行共識驗證,應用系統響應了交易并不意味著交易將成功執行[10],為了保證業務流程模型和實際相符,引入了虛擬交易的概念。將數據層交易對應的共識子過程虛擬成一個交易,若共識失敗流程跳轉到交易的前驅庫所;共識成功則跳轉到后繼庫所。

定義6虛擬交易。虛擬交易的前驅庫所為交易的后繼庫所,虛擬交易的后繼庫所有兩個:對應交易的前驅庫所和后續交易的前驅庫所。交易關系矩陣和交易集合中包含虛擬交易,具體形式化描述為:?t∈U??v(?v=t?∧v?=?t∧v?=t?),T=T∪{v}。

根據區塊鏈應用系統業務系統模型PCN正確性四個方面的定義,利用交易關系矩陣表示交易之間的模型的弧,通過庫所向量、交易集合和共識向量三個數據來動態描述每個交易執行后的模型狀態。具體算法描述如下:

(1) 構造交易關系矩陣,矩陣中包含模型中的所有交易和虛擬交易,矩陣的列表和行號分別為交易,行和列交叉處的值表示為交易之間的前后關系,如交易之間存在先后關系則值為1,否則值為0。

(2) 庫所向量表示Token在模型庫所的存在情況,向量的維數為庫所的數量,向量元素的順序不可更改,包含Token的庫所所對應的庫所向量元素的值為1,空庫所對應庫所向量元素的值為0。模型在初始狀態時,Token存在于起始庫所,庫所向量p=(1,0,0,0,…);終止狀態時,Token存在于終止庫所,庫所向量p=(0,0,0,…,0,1);中間狀態根據模型的實際執行情況作相應的修改。

(4) 共識向量表示模型中交易達成共識的情況,向量的維數為虛擬交易的數量,向量元素的順序不可更改,在起始狀態,所有查詢交易對應的向量元素值為0,v=(0,0,0,…);在終止狀態時,所有交易都應該得到執行,所有虛擬交易都已經達成了共識,共識向量v=(1,1,1,…);在中間狀態,當交易集合中虛擬交易的后續交易從交易集合中刪除后,更新共識向量對應元素的值。

該算法的思想就是從起始庫所指向的交易開始,根據交易關系矩陣所表示的交易順序,由交易的前驅庫所引出當前交易,再將Token放入所有當前交易的后繼庫所,反復執行這個過程,直至流程終止。在改變當前交易的每一個步驟中,將當前的一個或多個交易從交易集合中刪除,修改庫所向量和共識向量,直到交易集合為空,如果庫所向量和共識向量達到了最終狀態,則證明該模型的正確性。

3.2 應用案例

3.2.1案例描述

身份認證系統是在區塊鏈技術架構上建立的應用系統,身份信息修改模塊中既包含了應用層的交易,也包含了數據層的交易。本案例選取了身份認證系統中身份信息修改模塊,對其操作流程設計如下。

(1) 用戶信息查詢。進入系統后,要求用戶登錄系統并進行身份認證,根據用戶輸入的用戶信息查詢共享賬本,共識失敗后重新請求認證,共識成功后對賬本進行查詢,查詢不到信息則轉入用戶注冊,查詢成功后進行身份信息的對比。

(2) 登錄判斷。將共享賬本中查詢的身份信息和用戶錄入的信息進行比對,比對成功則表示認證通過,允許用戶執行修改操作,比對不成功則轉入密碼重設,重設密碼操作需要進行共識計算。

(3) 注冊用戶。共享賬本中不存在需要查詢的身份信息時自動轉入注冊,用戶注冊操作時需要對賬本進行寫入,共識成功后轉入認證請求,共識失敗后返回注冊。

(4) 身份信息修改。在本地對用戶錄入的身份信息進行判斷,數據完成合法性校驗則提交修改請求,執行共識操作,共識成功寫入交易,不成功則重新提交請求。

根據以上應用案例的操作流程描述,身份信息修改業務流程如圖10所示。

圖10 身份信息修改業務流程圖

3.2.2建立模型

根據業務流程描述,對業務流程中的交易進行分析整理,將共識操作抽象為虛擬交易,對非虛擬交易進行應用層和數據層分類,具體交易描述見表2。根據原子模型的表示方法和模型的組合方式,對業務流程進行圖形化的建模如圖11所示。

表2 業務流程交易表

圖11 業務流程模型

3.2.3正確性推算

圖12 身份信息修改業務流程關系矩陣

具體的推算步驟如下:

步驟1當前交易為t1,Token進入p2,則:

p=(0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

v=(0,0,0,0)

步驟2當前交易為t2,Token進入p3,則:

p=(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

v=(0,0,0,0)

步驟3當前交易為t3,Token進入p4和p5,則:

p=(0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

v=(0,0,0,0)

步驟4當前交易為v1和t4,Token進入p6、p3和p8,則:

p=(0,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0)

v=(0,0,0,0)

步驟5當前交易為v2、t7和t9,Token進入p7、p9和p12,則:

p=(0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0)

v=(1,0,0,0)

步驟6當前交易為v2、t7和t9,Token進入p2、p6、p10和p13,則:

p=(0,1,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0)

v=(1,0,0,0)

步驟7當前交易為t8和t10,Token進入p11和p14,則:

p=(0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0)

v=(1,1,0,0)

步驟8當前交易為v3和t11,Token進入p2、p10和p15,則:

p=(0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0)

v=(1,1,0,0)

步驟9當前交易為t12,Token進入p16,則:

p=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0)

v=(1,1,1,0)

步驟10當前交易為v4,Token進入p15和p17,則:

p=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0)

v=(1,1,1,0)

步驟11當前交易為t13,Token進入p18,則:

p=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1)

v=(1,1,1,1)

經過以上步驟驗證,在最終狀態,交易集合為空,表示所有交易都得到了執行,滿足交易的必要性定義;庫所向量僅最后一個元素為1,滿足了結果的唯一性和流程的可達性定義;共識向量所有元素均為1,滿足了共識的完整性定義。綜上,該業務流程是正確的。

3.3 業務流程的實現

3.3.1區塊鏈應用系統技術架構

一個完整的區塊鏈應用由用戶交互層、智能合約層和區塊鏈核心層[11]三個部分組成:最底層是區塊鏈核心層,是區塊鏈應用系統運行的基礎,它包含了區塊數據存儲、區塊頭的鏈式結構、Mekel樹層次結構,通過Hash函數確定區塊數據的地址關系,P2P的網絡結構決定了去中心化的系統架構;智能合約層是用戶交互層和區塊鏈核心層之間數據交換的橋梁,是區塊鏈應用程序區別于傳統數據庫管理系統最關鍵的部分,智能合約決定了應用系統的功能,系統對數據的操作通過調用職能合約完成,智能合約編譯后存放在合約容器中,智能合約虛擬機是智能合約的運行環境;用戶交互層是區塊鏈應用系統的前端程序集合,由用戶交互界面、前端程序運行環境、本地數據和文件、操作函數和應用接口等部分構成,其中操作函數主要作用是通過調用智能合約中定義的函數進行區塊數據的操作,本地數據臨時保存在本地計算機上,對本地數據的修改和訪問不需要其他節點參與共識驗證,流程引擎是用于注冊和執行業務流程模型。區塊鏈應用系統的體系架構如圖13所示。

3.3.2數據傳遞方式

區塊鏈應用系統用戶界面處在應用層,其中包含本地數據和本地函數,流程引擎對本地操作提供運行支持,當用戶需要對應用系統進行操作時,系統調用本地函數來響應用戶的請求,如果所處理的數據為本地數據,則直接在應用層處理完畢后返回結果。系統對共享賬本的操作需要通過本地函數調用智能合約函數,由智能合約對交易進行加密并向全網廣播,其他節點參與交易的驗證,向區塊鏈網絡返回共識計算結果,并執行交易的寫入。交易寫入操作完成后,返回的數據保存在合約變量中,由合約函數對數據進行解密后傳遞給本地應用層函數,最終向用戶返回結果[12]。區塊鏈應用系統的數據傳遞方式如圖14所示。

3.3.3流程引擎的應用

流程引擎的作用是將流程模型實施應用,區塊鏈應用系統是建立在區塊鏈技術架構上,應用的特殊性要求引擎必須是輕量級的,以便于將用戶界面、流程引擎、智能合約和虛擬機打包在一起分發到節點計算機上。Bigbross Bossa是一個按嵌入式設計的輕量級的流程引擎[13],適合實施使用Petri網定義工作流模型,完全支持層次數據庫,能方便集成到應用系統中。在應用程序中調用Bossa引擎時,需要通過BossaFactory類生成一個對象,并通過此對象創建一個流程模型實例,注冊模型對象,最后執行模型,具體方法如下:

(1) 流程引擎的實例化:

BossaFactory factory01 = new BossaFactory();

factory.setModel(″dir″);

(2) 創建一個空模型:

bossaModel = factory.createModel();

(3) 模型的定義:

Place place = bossaModel.registerPlace(″p1″, 1);

//建立庫所,第一個參數為庫所名,第二個參數表示庫所

//中是否包含Token

Transition t = caseType.registerTransition(″t1″, ″explain″);

//創建交易,第一個參數為交易名,第二個參數為交易說明

t.input(p1, ″1″);

t.output(p2, ″1″);

//定義交易t的前驅庫所和后繼庫所

(4) 模型的注冊和執行:

factory01 .buildTemplate(bossaModel);

//注冊模型

Activity activity =factory01.open(bossaModel);

//開始執行模型

structure activity.cancel();

//執行完畢,返回操作結果

4 結 語

由于區塊鏈應用系統和傳統數據庫管理系統在數據驗證和操作機制的不同,需要在傳統工作流建模與驗證方法上進行改造,使業務流程模型的表示方式和驗證算法能滿足區塊鏈的運行特點。本文給出的建模方法以傳統工作流技術為基礎,根據Petri網提供的圖形元素,結合區塊鏈的技術特點和運行機制,對業務流程中的交易進行抽象和表達,給出業務流程的圖形化模型。在模型的正確性定義上,增加了區塊鏈共識計算的部分,一個業務流程執行完畢需要完成所有交易的共識計算。模型正確性驗證過程中,將共識計算抽象為一個虛擬交易,和其他交易一起共同參與交易關系矩陣的構造,算法根據交易順序模擬流程的執行過程,每次執行都按照規則改變狀態向量的值,直到所有交易執行完畢,根據狀態向量的結果判斷流程模型的正確性。

本文提出的模型符合區塊鏈應用程序的運行機制和特點,其建模方法能夠完整地表達區塊鏈應用業務流程,正確性定義中對區塊鏈共識計算部分進行了描述,驗證算法能方便地對模型正確性定義進行推導。由于共識計算和普通交易不完全一致,為了更清晰地描述區塊鏈應用系統模型,未來需要尋找一種比Petri網語義和圖形元素更為豐富的建模工具,模型正確性驗證方法也有待進一步研究和探索。

猜你喜歡
前驅業務流程共識
航天企業基于信息化的業務流程體系構建方法研究
前驅體對氧化鑭粉體形貌結構的影響
ERP系統在企業財務管理和業務流程管理中的應用
共識 共進 共情 共學:讓“溝通之花”綻放
論思想共識凝聚的文化向度
低共熔溶劑對制備多孔γ-Al2O3和前驅體納米結構的影響
商量出共識
有機胺共沉淀法制備鎳鈷鋁三元前驅體及表征
基于質量管理體系為基礎的核心業務流程優化
終身免費保修的寶沃BX5 成都開賣
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合