王明皓 鄔少飛
(武漢工程大學計算機科學與工程學院,湖北 武漢 430000)
由于比特幣的面世,區塊鏈技術已成為人們最受關注的技術之一。各個國家與企業積極研究和探索區塊鏈技術帶給人類社會的創新與發展。有人認為區塊鏈技術將來會成為絕大多數行業產業的支撐技術并且改變人類社會的信任機制。同時隨著時代的變化與社會的發展,我國人民已經從注重追求溫飽逐漸轉變為注重運動健康。因此本研究考慮將兩者結合,在傳統區塊鏈技術的基礎上進行創新改進更好地服務于運動健康產業。
本研究將區塊鏈技術與健康產業相結合,改進區塊鏈技術的共識來更好地推動健康產業的發展。在其創新性的結合發展后,將提高人們運動的積極性從而提高人們對于健康的關注度,有關部門也可以利用區塊鏈的特點對健康產業進行有效的管理。在健康產業中產生的海量數據是具有極高價值的,由區塊鏈技術的不可篡改特點來保證這些數據的真實性,以此來使用這些可信任的數據來進一步推動產業的發展。
現如今區塊鏈的應用范圍主要集中在虛擬貨幣領域與少量的其他領域。我們認為區塊鏈技術具有去中心化、可追溯、可信任性等特點,這些特點在絕大多數產業領域都可以適用,不應僅僅局限于個別產業。傳統的區塊鏈系統中使用的是傳統的共識機制,其專用挖礦設備集中、出塊時間過長是顯而易見的缺點。并且傳統的區塊鏈技術是為了服務于虛擬貨幣而產生的,其主要是想要維護貨幣擁有者的權利,這點并不適用于其他產業,需要進行一定的改進。
本論文的研究內容如下:
在傳統的區塊鏈技術中以單純比拼算力的工作量證明機制作為共識機制,本研究考慮增加其對內存空間的要求,這樣可以使得參與設備更加貼近于人們的生活,使得人們都能參與到系統的維護中。
傳統的區塊鏈系統應用于虛擬貨幣領域,其主要保護的是個人的賬戶財產。本研究需要更契合于健康產業的區塊鏈系統,因此在其中增加了剩余優勢,以此來對使用此系統的用戶進行區分,更為頻繁的使用者將在維護此系統中存在相應的優勢。這樣可以提高系統的運行效率,并且更好地實現由系統的使用者來作為系統的維護者。
將區塊鏈技術與健康產業相結合,對運動健康的預約與管理進行創新使其更加智能化,從而推動健康產業發展,也對區塊鏈技術的應用提供更多的可能。
區塊鏈技術被認為是繼三次工業革命蒸汽機、電力、電子計算機與互聯網之后的下一個顛覆性的核心技術。如果說蒸汽機的廣泛應用極大地釋放了人們的生產力,電力的發明解決了人們基本的生活需求,電子計算機與互聯網的產生徹底改變了人們之間的主要信息傳遞方式,那么區塊鏈技術作為一種新型的構造信任機制的模式[1],可能將徹底改變整個人類社會的價值傳遞方式[2,3]。區塊鏈技術作為下一個信任模式的基石,其最核心的革命特征是改變了人類社會千百年來落后的信任機制。
區塊鏈是一種特殊的分布式數據庫[1],其主要作用是存儲信息。任何想要存儲的信息都可以寫入區塊鏈中,沒有任何局限性。任何人都可以設置節點加入到區塊鏈網絡中。去中心化是區塊鏈最大的特點,其內部不存在所謂的中心節點,任何一個節點的添加或刪除都不會影響整個區塊鏈的正常運行,所有節點都是平等存在的,他們都獨立擁有數據信息。正因為區塊鏈不受單一節點的影響與控制,所以它具有很好的可信任性。區塊鏈采用密碼學技術,在向區塊鏈中寫入信息時需要對其進行數字簽名,并進行哈希運算,保障數據無法篡改與抵賴,具有良好的安全性。
點對點的去中心化分布式存儲。每個節點都可以對區塊鏈中的所有數據信息進行存儲,并且就是由這些存儲了所有數據信息的節點來保證其內部數據的安全性,每個節點中保存的區塊鏈只有相同時才能得到其他節點的認可,并不依賴于某一節點的權威性。
加密算法。區塊鏈網絡中每個賬戶都有一對公私鑰對。公鑰可以對外公開,私鑰需要自己保存。每個賬戶在區塊鏈中發布數據信息時都需要由自己的私鑰對其進行簽名,其他賬戶節點可以使用其公鑰對其解密查看原文信息是否一致以此來判斷其數據發布的真實性。并且區塊鏈是由一個個區塊鏈接而成的,后一區塊總是包含著前一區塊的哈希值,因此后一區塊確定了前一區塊的內容就無法被更改了。
共識機制[4-7]。區塊鏈網絡內部通過執行某種一致的共識來決定由哪個節點進行區塊打包。其余節點收到打包區塊后需要對其進行驗證,驗證通過后可以將其加入到區塊鏈網絡中。一般常見的共識機制包括:工作量證明PoW、權益證明PoS、授權股權證明DPoS、實用拜占庭容錯算法PBFT等。
智能合約[8,9]。就是向區塊鏈中寫入一段固定代碼,在區塊鏈中自動執行不受到人為的外在干擾,其一旦發布到區塊鏈中就無法被更改了,因此區塊鏈在發布使用之前需要進行完整的考慮與測試,否則一旦出現問題則無法挽回。
傳統的區塊鏈共識機制即是比特幣中用于創建新區塊的挖礦共識機制。其內容簡單來說就是網絡中每個節點首先在自己本地對于網絡中發布的各種交易信息進行整合打包形成一個新的區塊,并且要在區塊中的區塊頭處進行競爭添加一個隨機數nonce,使得這個區塊頭block header可以滿足Hash(Block Header)<=target。其中的target為區塊鏈中此時的閾值。若不滿足則重新選取隨機數nonce,再次進行計算直到滿足條件則可以發布到網絡中由其他節點對此進行驗證,驗證通過后則可認同此區塊鏈接到此時的區塊鏈網絡中。
3.2.1 生成驗證數據集與試探數據集
若直接使用傳統的共識機制則會出現需要經過大量計算、出塊時間過長、消耗能源過多、挖礦設備專業化等問題。這些問題的產生使我們不得不衡量消耗的成本與達到效果的均衡,以及避免挖礦成功節點集中在個別專業化挖礦設備上,導致區塊鏈中心化。
因此考慮增大對于內存的訪問需求。在內存中開辟出一塊較大的空間存儲一個隨機生成的數據集以使得對于區塊的產生不僅依賴于強大的計算能力還需要有足夠的內存空間。并且此時的目標為需要有一定的難度來尋找新區塊的寫入權限而在驗證區塊時應該相對簡單。
在此過程中需要用到哈希函數,本研究使用的哈希函數為Keccak。其計算過程大致如圖1所示。

圖1 Keccak計算過程
將輸入數據進行填充后進行分組,每組的長度為r,將長度為r的輸入分組input_0與長度為r的內部狀態data_0進行異或操作,并將異或后的結果與長度為c的容量C_0一起放入函數f中得到結果data_1與C_1,并利用得到的結果循環上述步驟進行下一輪吸收操作。

直到將所有輸入分組都進行計算后的結果data_x與C_x,其中data_x為輸出分組1,再次重復上述的計算過程可得到輸出分組2,直到獲取所需長度的數據,將其組合起來就是最后得到的哈希結果。

圖2 生成驗證數據集內容
在生成驗證數據集時首先通過一個種子數據偽隨機生成一個驗證數據集,此時需要保證每個節點處生成的驗證數據集都應該一樣。其生成過程為首先將種子數據作為輸入放入到哈希函數中進行運算,將得到的結果添加到驗證數據集中,并且將此結果再次放入哈希函數中進行計算,將新得到的結果添加到驗證數據中,循環足夠多次數以獲得一定的數據。
由此驗證數據集生成數據量更大的試探數據集。其生成過程(圖3)如下:當請求試探數據集中的第i個元素時,先得到驗證數據集中第i個元素的內容,若超出驗證數據集個數則取余,將得到的內容取哈希后得到臨時值X1,將此X1代入到已知固定方法get_int_from_item中獲得到一個位置序號j,在驗證數組中取出位置j處的內容數據X2,并將X1與X2混合后得到新的臨時值X1,循環上述操作一定次數以保證充分的工作量與隨機性,對最后以此生成的臨時值X1取哈希即得到了試探數據集中位置為i處的數據內容。

圖3 計算試探數據集過程圖
其中的get_int_from_item是為了從較長的輸出數據壓縮轉變成為一個較小的序號值,本研究中是將數據對驗證數據集長度取余后得到結果序號。mix是將兩個數據混合后生成新的隨機數據。
由此可以得到試探數據集中的所有數據內容(圖4),并且將得到的整個試探數據集保存在本地在組裝權限競爭時使用。

圖4 生成試探數據集內容
3.2.2 組裝權限競爭
將發布在網絡中的數據信息打包到一個區塊中,并且隨機取一個隨機數nonce,將此區塊的區塊頭與隨機數nonce取哈希得到一個臨時值Y,將此Y代入到已知固定方法get_int_from_item中獲得到一個位置序號a,并在已經得到的試探數據集中取出位置a處的內容數據Z1與位置a+1處的內容Z2,之后分別與臨時值Y結合生成兩個新的臨時值Y1、Y2,將這兩個新的臨時值混合后的結果更新Y,循環上述操作一定次數以保證充分的工作量與隨機性,將最后一次得到的臨時值Y取哈希,得到的值即為結果result,比較result<=target是否成立,若成立則說明此區塊合法,可以將此區塊廣播到網絡中供其他節點進行驗證,此時絕大多數節點驗證通過后,則可以確定此時該區塊已經被成功寫入到區塊

表1 基礎閾值00051bf480000000000000000000000000000000000000000000000000000000時的實驗結果

表2 基礎閾值000051bf48000000000000000000000000000000000000000000000000000000時實驗結果

圖5 計算獲得組裝權
3.2.3 引入剩余優勢
傳統的共識機制應用場景是各種虛擬貨幣,在區塊鏈中其重點需要保護的數據信息就是每個賬戶的余額,而本研究中區塊鏈中需要保護的重點是各賬戶在區塊鏈中產生并存儲的數據信息。并且本研究結合權益證明PoS的思想,考慮到通過降低系統使用者的競爭難度來讓系統的使用者更有資格保護整個系統的正常運行。因此對于每個賬戶提出剩余優勢的概念,每當各賬戶預約并使用成功或是有數據信息保存到區塊鏈網絡中,則使其賬戶中的剩余優勢增加以此來使其賬戶在組裝權限競爭中降低一定的閾值難度來取得一定的優勢。并且大量剩余優勢的賬戶會降低大量的閾值難度,以此可以進一步提高整個區塊鏈系統的運行速度。為了避免剩余優勢絕對龐大而威脅到整個系統的競爭公平性,在降低閾值難度的過程中不能無限降低而應該有一個適當的下限,并且每次在使用剩余優勢后獲得了組裝權限的賬戶中應當扣除一定的剩余優勢。以此既能做到有系統使用者來保護系統的內部良性循環,又能保護區塊鏈的核心特征避免其出現嚴重中心化問題。
我們多次在相同基礎目標閾值時,不同的剩余優勢下進行了實驗,將剩余優勢分為25,30,35,40,45,50,55,60。在相同的目標閾值下,每個剩余優勢都進行了20次實驗,得到每次獲取到組裝權時所需要嘗試的次數,將其相加得到在此目標閾值下,每個剩余優勢在20次實驗中各自所嘗試的次數之和,并可求出每個剩余優勢下所需的平均次數。在不同的基礎目標閾值下進行多次實驗。
部分實驗數據如表1,表2,圖6,圖7所示:

圖6 剩余優勢與平均計算次數關系圖1

圖7 剩余優勢與平均計算次數關系圖2
由此可以看出剩余優勢的引入加快了整個區塊鏈系統的運行效率,并且剩余優勢較大的賬戶節點平均情況下取得結果的計算次數明顯減少,從而使得剩余優勢較大的賬戶也就是經常使用該區塊鏈系統的賬戶能夠由更大的優勢來參與到該區塊鏈系統的管理和維護中。3.2.4 驗證組裝區塊
驗證節點的本地只需要保存一個驗證數據集即可,當接收到已經打包好的區塊時,首先檢驗其區塊內部數據信息的合法性,之后與組裝權限競爭時所采取的方法類似,取出其區塊頭與其中的隨機數nonce取哈希得到一個臨時值Y,將此Y代入到已知固定方法get_int_from_item中獲得到一個位置序號a,此時需要獲取到試探數據集中序號a處的數據信息,但驗證節點處可能沒有保存數據量較為龐大的試探數據集,可以根據前面描述的取得試探數據集的方法來直接獲得a處位置的數據信息Z1和a+1處位置的數據信息Z2之后分別與臨時值Y結合生成兩個新的臨時值Y1、Y2,將這兩個新的臨時值混合后的結果更新Y,循環上述操作一定次數以保證充分的工作量與隨機性,將最后一次得到的臨時值Y取哈希,得到的值即為結果result,比較此結果與其降低難度后的閾值相比是否滿足條件,若滿足則承認此區塊的合法性,將此區塊添加到區塊鏈中。
在該區塊鏈系統中存在三類實體,分別為體育館、用戶、有關部門。健康產業由體育館發布預約信息,由用戶自由選擇預約地點與時間,由有關部門接收其系統中產生的各類數據并對其進行分析進一步推動該產業的良好發展。系統中每個賬戶都是一個獨立的個體,由一對公私鑰對組成,使用橢圓曲線加密算法將私鑰映射生成公鑰,一個私鑰僅能對應一個公鑰,公鑰可以公開,私鑰由個體獨立保存,以此能夠極大地保證賬戶的安全性。
由體育館方首先提出可預約信息審核,待審核通過后可以將可預約信息上鏈發布。上鏈后,用戶可以通過注冊后的賬戶對已發布的可預約信息進行預約,并且將此預約成功信息上鏈,用戶在預約成功并成功使用后可以使賬戶中積攢一定的剩余優勢。因此在此階段區塊鏈網絡中上鏈的信息包括:審核通過的體育館可預約信息、用戶成功預約信息、用戶獲得的剩余優勢。此類信息上鏈后將永久存在并且很難被篡改。為今后發生糾紛事件提供充分的證據。
有關部門對于整個系統有監督管理的責任,首先需要將體育館方提出的可預約信息進行審核,審核成功后由有關部門方賬戶對于此信息進行上鏈操作。以此來確保上鏈信息都是由有關部門審核過的。通過智能合約中自動執行的特點對其中的各類賬戶進行分類并保證每類賬戶對系統中的訪問權限進行隔離,這樣可以保證區塊鏈中部分隱私信息的安全性??梢栽谥悄芎霞s中設置有關部門相應權限來獲取區塊鏈中產生的數據信息。例如各時間段各體育館的預約使用情況數據信息可由相關部門調取,并且進一步分析規劃來推動產業健康發展。同時由于上鏈信息都是真實可靠的,有關部門可以調取區塊鏈中各體育館的經營狀況來發放補貼。區塊鏈上的信息都是真實可靠的,這些數據信息也可以成為后期稅收等工作核對的關鍵性公證證據。
本研究將區塊鏈技術應用于新型健康產業模式,對傳統區塊鏈技術進行改進,提出剩余優勢的概念,實現使用者與維護者、管理者的統一,避免傳統區塊鏈技術中運行速度過慢和外部力量干預而出現的中心化問題,進一步實現管理的內部良性循環。同時可以保證其中數據信息的安全性、真實性,并且后期有關部門可以利用這些可信任的數據信息對于整個健康產業進行更好的規劃與建設,形成產業的良性循環。