區塊鏈存儲方法、裝置及節點設備與流程
2023-08-14 06:02:46 1

本發明涉及區塊鏈技術領域,尤其涉及一種區塊鏈存儲方法、裝置及節點設備。
背景技術:
目前,區塊鏈技術正在越來越廣泛的被應用,不管是貨幣,虛擬物品,房產,股票等等都正在嘗試用區塊鏈來記錄,使交易變得發明透明,去中心化。
區塊鏈網絡基於p2p(peertopeer,對等網絡)網絡,每個參與交易、區塊存儲、區塊驗證或轉發的p2p網絡節點都是一個區塊鏈網絡中的節點。節點之間的數據交換通過數字籤名技術進行驗證,無需互相信任,只要按照系統既定的規則進行,節點之間不能也無法欺騙其它節點。
由於區塊鏈中存儲了所有的交易,隨著交易的增加,按照每十分鐘產生一個區塊的速度,區塊鏈的數據量會越來越大。以比特幣區塊鏈為例,比特幣區塊鏈完整數據的大小,當前已經達到了幾十gb,用戶如果使用比特幣核心(bitcoincore)客戶端進行數據同步的話,可能幾個晝夜都無法同步完成。並且,區塊鏈的數據量還在不斷地增加,這給比特幣核心客戶端的運行帶來了很大的門檻,普通用戶並不適合去使用bitcoincore客戶端,這些,也就造成了運行比特幣全節點(fullnodes)的數量,不增反減,並且在過去的幾年中全節點(即保存有完整的、最新的區塊鏈拷貝,能獨立自主地校驗所有交易,而不需藉由任何外部參照)的數量有明顯的下降。
在目前的區塊鏈網絡中,全節點存儲了第一區塊(創世區塊)一直到網絡中最新的區塊。正因為區塊鏈的全節點保存了完整的區塊鏈,區塊鏈才成為了真正意義上的去中心化結構。但也因為這樣,全節點保存數據所佔用的空間十分巨大。隨時間的推移,這樣的矛盾會越發凸顯。同時,一個新的全節點加入網絡,需要與網絡中的對等節點做數據同步,這樣的同步會因為網絡狀況變得不穩定,同步時間不可預期,以及完成同步需消耗大量的網絡帶寬等問題。
技術實現要素:
為克服相關技術中存在的問題,本發明提供一種區塊鏈存儲方法、裝置及節點設備。
其中,第一方面,提供一種區塊鏈存儲方法,應用於區塊鏈網絡中的節點,包括:
通過接受集群組建邀請或發送集群組建邀請,加入一虛擬集群,所述虛擬集群中包括預設個數的節點;
按照預設的第一區塊分配規則,對區塊鏈中的一個或多個區塊進行存儲,以使得所述虛擬集群中的節點所存儲的區塊可組成完整的區塊鏈。
第二方面,提供一種區塊鏈存儲裝置,應用於區塊鏈網絡中的節點,包括:
虛擬集群加入模塊,被配置為通過接受集群組建邀請或發送集群組建邀請,加入一虛擬集群,所述虛擬集群中包括預設個數的節點;
區塊存儲模塊,被配置為按照預設的第一區塊分配規則,對區塊鏈中的一個或多個區塊進行存儲,以使得所述虛擬集群中的節點所存儲的區塊可組成完整的區塊鏈。
第四方面,提供一種節點設備,包括:
處理器;
用於存儲處理器可執行指令的存儲器;
其中,所述處理器,被配置為通過接受集群組建邀請或發送集群組建邀請,加入一虛擬集群,所述虛擬集群中包括預設個數的節點;按照預設的第一區塊分配規則,對區塊鏈中的一個或多個區塊進行存儲,以使得所述虛擬集群中的節點所存儲的區塊可組成完整的區塊鏈。
第五方面,提供一種電腦程式產品,所述電腦程式產品包含能夠由可編程的裝置執行的電腦程式,所述電腦程式具有當由所述可編程的裝置執行時用於執行上述的方法的代碼部分。
第六方面,提供一種非臨時性計算機可讀存儲介質,所述非臨時性計算機可讀存儲介質中包括一個或多個程序,所述一個或多個程序用於執行上述的方法。
第七方面,提供一種節點設備,包括:上述的非臨時性計算機可讀存儲介質;以及一個或者多個處理器,用於執行所述非臨時性計算機可讀存儲介質中的程序。
本發明實施例通過將區塊鏈中的區塊分別冗餘存儲到虛擬集群中的各節點中,減輕節點的存儲量,且由於每個區塊都被冗餘存儲,可保證存儲的安全性;提高區塊的同步速度,提高查詢效率。
應當理解的是,以上的一般描述和後文的細節描述僅是示例性和解釋性的,並不能限制本發明。
本發明的其他特徵和優點將在隨後的具體實施方式部分予以詳細說明。
附圖說明
此處的附圖被併入說明書中並構成本說明書的一部分,示出了符合本發明的實施例,並與說明書一起用於解釋本發明的原理。
圖1是本發明一實施例的區塊鏈網絡的結構示意圖;
圖2是本發明一實施例的區塊鏈存儲方法的流程示意圖;
圖3是本發明一實施例的區塊鏈網絡中節點加入虛擬集群的流程示意圖;
圖4是本發明一實施例中根據區塊分配規則對區塊進行存儲分配的示意圖;
圖5是本發明又一實施例中根據區塊分配規則對區塊進行存儲分配的示意圖;
圖6是本發明再一實施例中根據區塊分配規則對區塊進行存儲分配的示意圖;
圖7是本發明一實施例的虛擬集群中的節點通過維持心跳確認節點是否在線的示意圖;
圖8是本發明一實施例的虛擬集群中的新增節點的示意圖;
圖9是本發明一實施例的虛擬集群中的節點對新區塊進行存儲的示意圖;
圖10是本發明一實施例中虛擬集群中的節點進行交易查詢時的示意圖;
圖11是本發明一實施例中虛擬集群中的節點執行合約的示意圖;
圖12是本發明一實施例提供的區塊鏈存儲裝置的結構示意圖;
圖13是根據一示例性實施例示出的一種用於區塊鏈存儲方法的裝置的框圖。
具體實施方式
以下結合附圖對本發明的具體實施方式進行詳細說明。應當理解的是,此處所描述的具體實施方式僅用於說明和解釋本發明,並不用於限制本發明。
為解決全節點的區塊鏈存儲數據量大的問題,本發明實施例通過分布式存儲的方式,由多個節點協同進行區塊鏈的存儲處理,將整個區塊鏈中區塊分散的存儲在各個節點上。
參見圖1,為本發明一實施例的區塊鏈網絡的結構示意圖。該區塊鏈網絡100包括:多個節點101。每個參與交易,區塊存儲,區塊驗證或轉發等的p2p網絡節點都可作為區塊鏈中的節點。例如,節點101可為智慧型電話、平板電腦、伺服器、具有嵌入式系統的電子設備、礦機(即可執行pow(proofofwork,工作證明)共識競爭機制的設備)等。
區塊鏈網絡中100的所有節點根據預定規則,自組織成若干虛擬集群。區塊鏈網絡中的至少兩個節點組建虛擬集群,虛擬集群中的節點,根據預設的區塊分配規則,分別對區塊鏈中的一個或多個區塊進行存儲,以使得至少兩個節點存儲的區塊可組成完整的區塊鏈。
如圖1所示,虛線內部的節點組成一個虛擬集群,各個節點可完全獨立參與區塊鏈中的其它功能(例如,挖礦、錢包等)、但存儲區塊鏈採用分布式方式,即一個完整的區塊鏈中的區塊,被分別冗餘存儲到虛擬集群中的各個節點中。
由於,每個節點只存儲區塊鏈的部分區塊,可減少存儲量,提高節點同步區塊鏈的速度;提高查詢效率;且由於每個區塊都被冗餘存儲,可保證存儲的安全性。
參見圖2,為本發明一實施例的區塊鏈存儲方法,應用於區塊鏈網絡中的節點,其包括以下步驟:
在步驟201中,通過接受集群組建邀請或發送集群組建邀請,加入一虛擬集群。
在步驟202中,按照預設的第一區塊分配規則,對區塊鏈中的一個或多個區塊進行存儲。由此,使得虛擬集群中的節點所存儲的區塊可組成完整的區塊鏈。
虛擬集群的建立和加入
參見圖3,為本發明實施例的區塊鏈網絡中節點加入虛擬集群的流程示意圖。
區塊鏈網絡中的多個節點,在未加入到虛擬子網絡(虛擬集群)中時,為孤立節點。
由於區塊鏈網絡是基於p2p網絡協議的,一個節點a在區塊鏈網絡中上線且穩定一定時間後,會與多個節點產生連接。當節點a與第一預設個數的其它節點兩兩相連時,則節點a具備建立虛擬集群的條件,可進入節點發現狀態,接受其它節點發送的集群組建邀請,也可以向相連接的其它節點發送集群組建邀請,組建虛擬集群。
在步驟301中,當節點a與第一預設個數的其它節點兩兩相連時,節點a向其它節點發送集群組建邀請。
在一個實施例中,當與節點a相連接的節點數超過一定閾值m時,節點a從這m個節點中,根據節點狀況選擇第一預設個數的節點,向其發送集群組建邀請。節點狀況包括:是否產生過新區塊、節點的網絡狀況等。由於是否產生過新區塊可以衡量節點的可信性,因此,將是否產生過新區塊作為考量節點的依據。一節點是否產生過新區塊,可以通過查詢區塊鏈中的區塊獲得。節點的網絡狀況對節點間的交互產生影響,因此,將節點的網絡狀況也作為考量節點的依據。網絡狀況,可通過發送測試數據包(例如,空數據包或ping包)獲取。
在一個實施例中,集群組建邀請可為包含特定信息的數據包,例如,包括發送邀請的節點的ip地址、產生過的新區塊數量、算力等。
在步驟302中,當超過第二預設個數的節點回復確認信息時,則與回覆信息的節點,組建成虛擬集群。組建成虛擬集群後,即各個節點加入到了該虛擬集群中。
在本發明的實施例中,一節點可能會接收到多個節點發送的集群組建邀請,其可根據集群組建邀請中的信息,確定要響應的節點,以及向確定的節點返迴響應信息,確定加入虛擬集群。
在本發明的實施例中,由於虛擬集群中每個節點都是對等的,虛擬集群的規模也是有限的,當虛擬集群的節點個數達到第二預設個數時,將不再接受新的節點進入。這樣做的原因是避免整個區塊鏈網絡會退化成一個虛擬集群。且為了保證區塊存儲的穩定性和安全性,虛擬集群中節點的個數滿足一定的條件(即滿足第二預設個數),且根據網絡的狀況、協議等,對第二預設個數進行調整(增加或減少)。
在本發明的一實施例中,多個節點組成了虛擬集群後,根據第一預設協商機制,確定虛擬集群的集群標號(id)。集群標號用於對虛擬集群進行標識,在一個實施例中,集群標號可為字符串,其可包括集群中的節點數量、每個節點的ip地址、每個節點的節點狀況等信息。集群標號是與時間相對應的,在預設時間後失效,且集群標識號在預設時間失效後,在虛擬集群中的節點恢復為普通節點(即孤立節點),可接受或發送集群組建邀請。
在一個實施例中,當有第二預設個數互聯的節點建立虛擬集群後,虛擬集群中的各個節點標識自己進入虛擬集群狀態,不再接受加入新的虛擬集群。即節點已加入到一個虛擬集群,則不再響應其它節點發送的集群組建請求。
在本發明的實施例中,根據第一預設協商機制,確定虛擬集群的集群標號(id),可通過以下方式進行:
方式1:最先生成id的節點,將id廣播給虛擬集群中的其它節點,各個節點對id進行驗證,驗證通過,就確定該id為虛擬集群的id。
方式2:可將算力最強的節點產生的id作為虛擬集群的id,或根據ip地址,將ip地址最小的節點產生的id作為虛擬集群的id。
在本發明的一實施例中,為了便於實現區塊的分配,虛擬集群中的節點,通過第二預設協商機制,確定每個節點的編號,由此,根據編號來確定節點需要存儲的區塊。
區塊的存儲分配
確定了每個節點的編號後,各個節點根據自己的編號和區塊鏈中每一區塊對應的哈希值,確定並存儲所要存儲的一個或多個區塊。
參見圖4,在一個實施例中,節點將每一區塊對應的哈希值分別與預設個數的常數相除,並將相除所得的餘數和自身的編號滿足預設條件(例如,餘數和自身編號相同)的哈希值對應的區塊進行存儲。其中,每一區塊對應的哈希值至少包括以下其中之一:每一區塊的區塊頭的哈希值、每一區塊的區塊頭的哈希值加上固定值後的值、每一區塊的區塊頭和區塊主體的哈希值。
例如,可將一區塊b的區塊頭的哈希值與第一常數、第二常數和第三常數相除,根據相除所得的餘數m1、m2、m3,將該區塊b分半存儲到的編號為m1的節點、編號為m2的節點和編號為m3的節點。此外,還可將該區塊b的區塊頭的哈希值加上一固定值後,與第四預設常數相除,然後根據餘數m4,將該區塊b存儲到編號為m4的節點。
由此,每個區塊被按照第一區塊分配規則被冗餘存儲到多個節點上(例如,p個節點上,p<k,k為虛擬集群中的節點總數,p的取值可根據虛擬集群中的節點總數設定,例如,p為虛擬集群中節點總數k的三分之一),由此,當某個節點因為故障等原因下線時,反過來,在線的節點根據第一區塊分配規則,可獲知從哪些節點可獲取到這個下線節點上曾存儲的區塊。
參見5,在本發明的一些實施例中,第一區塊分配規則還可為,按照區塊的數量和虛擬集群中節點的數量,進行平均分配,將區塊鏈中的區塊分配到各個節點進行存儲。同時,為了確保區塊存儲的安全性,對區塊進行冗餘存儲,即在一個節點上存儲的區塊,會在其它一個或多個節點上再進行存儲。由此,當一個節點丟失區塊時,可在其它節點上得到區塊,而不會導致區塊的缺失。如圖5所示,區塊1~3存儲在編號為1、n+k……的節點中,區塊4~6存儲在編號為2、n+2k……的節點中,其中,n和k為正整數。
參見圖6,在本發明的一些實施例中,第一區塊分配規則還可為:根據節點所屬的網段,確定其需要存儲的區塊。例如,每個區塊都同時被存儲到網段1~網段10的節點上。根據網段,確定節點需要存儲的區塊,是為了避免同一網段的節點同時出現網絡問題時,區塊鏈中的區塊還可從其它網段的節點上獲得。
此外,第一區塊分配規則,還可根據節點之間的距離、算力等確定,以保證區塊存儲的安全性。
虛擬集群中的節點的維持
在本發明的實施例中,由於虛擬集群中的節點分別存儲有區塊鏈中的一部分區塊,因此,節點是否處於正常工作狀態,影響到區塊存儲的完整性和安全性,需要對虛擬集群中的節點的狀態進行維護。
在本發明的一實施例中,虛擬集群中的節點通過維持心跳的方式,確定彼此是否在線。維持心跳可通過以下兩種方式實現:
方式1:參見圖7,虛擬集群中的一節點定時向其它節點發送在線確認信息;以及根據是否接收到其它節點的反饋信息,確定其它節點是否在線。
在線確認信息可為空數據包,或包括預設信息的數據包;反饋信息也可為空數據包,或包括預設信息的數據包。若預設時間內未收到反饋信息,則確定節點下線,需要重新對區塊鏈中的區塊進行分配存儲和/或邀請其它的孤立節點加入到虛擬集群中。
方式2:虛擬集群中的一節點定時向與自己的編號鄰近的節點(編號在前的節點和/或在後的節點)發送在線確認信息;以及根據是否接收到編號鄰近的節點反饋的信息,確定編號鄰近的節點是否在線。
應理解,節點間通過相互確認的方式,確定節點是否在線,這種相互確認,除了上面的「發送在線確認信息-接收反饋信息」的方式外,還可通過「接收在線確認信息」的方式進行,即虛擬集群中的節點c,定時向其它節點或編號相鄰的節點發送在線確認信息,若其它節點或編號相鄰的節點在定時時間到時未接收到節點c發送的在線確認信息,則確定該節點c下線。
節點下線後的區塊分配及新節點補充
當虛擬集群中有節點下線時,仍在線的節點,可以根據區塊的上述第一區塊分配規則,獲知該下線節點所存儲的區塊。從而,仍在線的節點可根據第一區塊分配規則,從冗餘存儲的節點中獲得下線節點所存儲的區塊。虛擬集群中的任一節點,可根據預設的第二區塊分配規則,重新確定用於存儲下線節點所存儲的區塊的節點,並將下線節點所存儲的區塊發送給確定的接收進行存儲。
參見圖8,當虛擬集群中有節點下線時,需要增加新的節點來「平衡網絡」,保證區塊的存儲。在本發明的實施例中,新增節點可通過「主動邀請」或「接收加入請求」的方式。
「主動邀請」:即當虛擬集群中有節點下線時,虛擬集群中的節點主動向虛擬集群外的節點發送集群加入邀請,以邀請虛擬集群外的節點加入虛擬集群。發送的邀請中可包括虛擬集群的id信息。
當接收到所述虛擬集群外的節點回復的確認信息時,則將該節點加入到虛擬集群中。在本發明的實施例中,虛擬集群中的節點均可發送集群加入邀請,當接收到多個節點的回覆的確認信息時,可根據回復確認信息的時間先後順序,確定可以加入到虛擬集群中的節點;或者根據回復確認信息的節點的算力、網絡狀況等確定可以加入到虛擬集群中的節點。
當虛擬集群中新增節點後,虛擬集群中的節點通過第三預設協商機制,重新確定每個節點的編號;以及根據自己的編號和預設的第三區塊分配規則,確定要存儲的區塊。
此外,還可保持其它在線節點存儲的區塊不變,而由與新增節點的編號相鄰的節點,根據區塊的分配規則確定該新增節點需要存儲的區塊。
「接收加入請求」:即虛擬集群外的節點,主動向虛擬集群中的節點發送集群加入請求,集群加入請求中可包括:節點的地址信息、算力、網絡狀況等信息。虛擬集群中的任一節點若接收到集群加入請求,則向發送集群加入請求的節點發送集群加入邀請;當發送集群加入請求的節點回復確認信息時,即將該節點加入到虛擬集群中。
包含了新增節點後的虛擬集群中的節點通過第四預設協商機制,重新確定每個節點的編號;若新增節點的編號與自己的編號相鄰,則根據預設的第四區塊分配規則,確定新增節點需要存儲的區塊;以及將新增節點需要存儲的區塊發送給新增節點進行存儲。
在一個實施例中,虛擬集群中有下線的節點後,在預設的時間內,即補充了新的節點來替代下線的節點。則在這種情況下,可不進行全部區塊的重新分配,而僅將下線節點存儲的區塊存儲到該新增節點中。可由與新增節點的編號相鄰的節點從虛擬集群中其它節點中獲取下線節點存儲的區塊,從而發送給新增節點進行存儲。
應理解,也可由指定節點獲取下線節點存儲的區塊並發送給新增節點。
在本發明的一實施例中,新增的節點數和下線的節點數相同。應理解,在一些實施例中,當對虛擬集群中可包括的節點數進行調整(例如,增大節點數)時,也可在原有虛擬集群的節點數的基礎上,進行節點新增,或使得新增的節點數大於下線的節點數。
在本發明的實施例中,正因為虛擬集群節點的對等性與自修復性,無需擔心區塊鏈分布式存儲的數據會因某些節點的損毀而消失。同時因為區塊鏈自身的去中心化的特殊屬性,虛擬集群的各個節點存儲的區塊都可以很容易的重建。
區塊鏈中新區塊的存儲
參見圖9,原區塊鏈中的區塊被分配到虛擬集群中的各個節點存儲,當有新的區塊被發現需要追加到區塊鏈時,虛擬集群內任意一節點發現新區塊,則發現新區塊的節點按照預設的第五區塊分配規則,確定用於存儲新區塊的節點。在一個實施例中,發現新區塊的節點,將新區塊發送給需進行存儲的節點,由其進行保存。為了確保新區塊的正確保存,新區塊保存成功後,節點向虛擬集群中的其它節點廣播成功保存區塊的信息。
在一個實施例中,可由首先發現新區塊的節點或指定的節點按照預設的第五區塊分配規則,確定用於存儲新區塊的節點。
在另一些實施例中,由於虛擬集群中的節點都進行新區塊發現,因此,發現新區塊後,按照預設的第六區塊分配規則,確定自己是否需要保存新區塊,若需要存儲新區塊,則存儲新區塊,若不需要存儲新區塊,則不作處理。在一個實施例中,當節點成保存新區塊後,向虛擬集群中的節點廣播成功保存區塊的信息,表明已經成功存儲。若不需自己存儲,則不保存新區塊,並等待其它存儲節點廣播的成功存儲的信息。
交易查詢
參見圖10,在本發明的一實施例中,區塊分布式存儲到虛擬集群中的各個節點後,當虛擬集群內任意節點收到查詢端(例如,虛擬集群外的節點)發送的交易查詢請求(例如,驗證一個交易的hash)時,確定自己是否存儲有與交易查詢請求相對應的區塊。若存儲有與交易查詢請求相對應的區塊,則根據交易查詢請求獲取查詢結果後返回給查詢端。若未存儲與交易查詢請求相對應的區塊,則將交易查詢請求給虛擬集群中的其它節點;接收存儲有與交易查詢請求相關的區塊的節點返回的交易查詢結果;並將查詢結果發送給查詢端。
在本發明的實施例中,由於區塊是冗餘存儲的,因此,查詢到交易查詢請求相對應的區塊的節點至少為一個,可將最先返回查詢結果的節點,返回的查詢結果返回給查詢端。
由此,本發明實施例可完成針對區塊鏈的任何交易查詢請求,例如,對任何交易進行驗證。
執行合約
參見圖11,在本發明的一實施例中,當虛擬集群中的一節點,需要執行一目標區塊的合約時,確定是否存儲有所述目標區塊;若存儲有所述目標區塊,則執行所述目標區塊的合約;若未存儲有所述目標區塊,則從存儲所述目標區塊的一節點中獲取所述目標區塊;以及根據獲取的所述目標區塊執行合約。
在一個實施例中,虛擬集群中的節點,刪除一存儲的區塊後,存儲目標區塊,根據存儲的目標區塊執行合約。刪除的區塊可為任一未使用的區塊。
應理解,本發明實施例中的上述第二預設協商機制、第三預設協商機制和第四預設協商機制可與第一預設協商機制相同,或為其它的協商機制,本發明實施例對此不作限制。第二區塊分配規則、第三區塊分配規則、第四區塊分配規則、第五區塊分配規則和第六區塊分配規則可與第二區塊分配規則相同,或為其它區塊分配規則,本發明實施例對此不作限制。
本發明實施例的區塊鏈存儲方法,將區塊鏈中的區塊分別冗餘存儲到虛擬集群中的各節點中,減輕節點的存儲量,且由於每個區塊都被冗餘存儲,可保證存儲的安全性;提高區塊的同步速度,提高查詢效率。
參見圖12,為本發明一實施例提供的區塊鏈存儲裝置的結構示意圖,該裝置120應用於區塊鏈網絡中的節點,包括:
虛擬集群加入模塊1201,被配置為通過接受集群組建邀請或發送集群組建邀請,加入一虛擬集群,所述虛擬集群中包括預設個數的節點;
區塊存儲模塊1202,被配置為按照預設的第一區塊分配規則,對區塊鏈中的一個或多個區塊進行存儲,以使得所述虛擬集群中的節點所存儲的區塊可組成完整的區塊鏈。
在一個實施例中,所述虛擬集群加入模塊1201包括:
邀請發送子模塊,被配置為在所述節點與第一預設個數的其它節點兩兩相連時,則向其它節點發送集群組建邀請;
虛擬集群組建子模塊,被配置為當超過第二預設個數的節點回復確認信息時,則與回復確認信息的節點,組建成所述虛擬集群。
在一個實施例中,所述虛擬集群加入模塊1201包括:
接收及加入子模塊,被配置為接收到其它節點發送的集群組建邀請時,回復確認信息,以加入到一虛擬集群中。
在一個實施例中,裝置120還包括:
集群標號確定模塊1203,被配置為與所述虛擬集群中的節點,通過第一預設協商機制,確定集群標號;其中,所述集群標識號在預設時間後失效,且所述集群標識號在預設時間失效後,在所述虛擬集群中的節點恢復為普通節點,可接受或發送集群組建邀請。
在一個實施例中,區塊存儲模塊1202包括:
編號確定子模塊,被配置為與所述虛擬集群中的節點,通過第二預設協商機制,確定每個節點的編號;
區塊存儲確定子模塊,被配置為根據自己的編號和區塊鏈中每一區塊對應的哈希值,確定所要存儲的所述一個或多個區塊;
存儲子模塊,被配置為對所述一個或多個區塊進行存儲。
在一個實施例中,區塊存儲確定子模塊,被配置為將每一區塊對應的哈希值分別與預設個數的常數相除,並將相除所得的餘數和自身的編號滿足預設條件的哈希值對應的區塊進行存儲,其中,所述每一區塊對應的哈希值至少包括以下其中之一:每一區塊的區塊頭的哈希值、每一區塊的區塊頭的哈希值加上固定值後的值、每一區塊的區塊頭和區塊主體的哈希值。
在一個實施例中,裝置120還包括:
第一在線確認模塊1204,被配置為定時向所述虛擬集群中的其它節點發送在線確認信息;以及根據是否接收到其它節點的反饋信息,確定所述虛擬集群中的其它節點是否在線。
在一個實施例中,裝置120還包括:
第二在線確認模塊1205,被配置為定時向與自己的編號鄰近的節點發送在線確認信息;以及根據是否接收到所述編號鄰近的節點反饋的信息,確定所述編號鄰近的節點是否在線。
在一個實施例中,裝置120還包括:
區塊獲取模塊1206,被配置為當所述虛擬集群中有節點下線時,根據所述預設的第一區塊分配規則,從相應的在線節點中獲取所述下線節點所存儲的區塊;
第一區塊存儲確定模塊1207,被配置為根據預設的第二區塊分配規則,重新確定用於存儲所述下線節點所存儲的區塊的節點;以及將所述下線節點所存儲的區塊發送給所確定的節點進行存儲。
在一個實施例中,裝置120還包括:
集群加入邀請發送模塊1208,被配置為在所述虛擬集群中有節點下線時,向所述虛擬集群外的節點發送集群加入邀請,以邀請所述虛擬集群外的節點加入所述虛擬集群;
第一節點編號重新確定模塊1209,被配置為當接收到所述虛擬集群外的節點回復的確認信息時,與加入新增節點後的虛擬集群中的節點通過第三預設協商機制,重新確定每個節點的編號;
第二區塊存儲確定模塊1210,被配置為根據自己的編號和預設的第三區塊分配規則,確定要存儲的區塊。
在一個實施例中,裝置120還包括:
集群加入請求接收模塊1211,被配置為在所述虛擬集群中有節點下線,且接收到所述虛擬集群外的節點發送的集群加入請求時,向所述發送集群加入請求的節點發送集群加入邀請;
第二節點編號重新確定模塊1212,被配置為在所述發送集群加入請求的節點回復確認信息時,與加入新增節點後的虛擬集群中的節點通過第四預設協商機制,重新確定每個節點的編號;
第三區塊存儲確定模塊1213,被配置為若所述新增節點的編號與自己的編號相鄰,則根據預設的第四區塊分配規則,確定所述新增節點需要存儲的區塊;以及將所述新增節點需要存儲的區塊發送給所述新增節點進行存儲。
在一個實施例中,裝置120還包括:
第四區塊存儲確定模塊1214,被配置為在區塊鏈網絡中產生新區塊時,根據預設的第五區塊分配規則,確定用於存儲所述新區塊的節點;以及將所述新區塊發送給確定的節點進行存儲。
在一個實施例中,裝置120還包括:
第五區塊存儲確定模塊1215,被配置為在區塊鏈網絡中產生新區塊時,按照預設的第六區塊分配規則,確定是否需要存儲所述新區塊;若需要存儲所述新區塊,則存儲所述新區塊,若不需要存儲所述新區塊,則不作處理。
在一個實施例中,裝置120還包括:
交易查詢請求接收模塊1216,被配置為在接收到查詢端發送的交易查詢請求時,確定是否存儲有與所述交易查詢請求相對應的區塊;
查詢結果獲取模塊1217,被配置為若存儲有與所述交易查詢請求相對應的區塊,則根據所述交易查詢請求獲取查詢結果;
交易查詢請求發送模塊1218,被配置為若未存儲與所述交易查詢請求相對應的區塊,則將所述交易查詢請求發送給虛擬集群中的其它節點;
交易查詢結果接收模塊1219,被配置為接收存儲有與所述交易查詢請求相關的區塊的節點返回的交易查詢結果;
查詢結果發送模塊1220,被配置為將查詢結果發送給所述查詢端。
在一個實施例中,裝置120還包括:
目標區塊確定模塊1221,被配置為在需要執行一目標區塊的合約時,確定是否存儲有與所述目標區塊;
第一執行模塊1222,被配置為若存儲有所述目標區塊,則執行所述目標區塊的合約;
目標區塊獲取模塊1223,被配置為若未存儲有所述目標區塊,則從存儲所述目標區塊的一節點中獲取所述目標區塊;
第二執行模塊1224,被配置為根據所述目標區塊獲取模塊獲取的所述目標區塊執行合約。
在一個實施例中,第二執行模塊1224包括:
區塊刪除子模塊,被配置為刪除一存儲的區塊後,存儲所述目標區塊;
執行子模塊,被配置為根據存儲的目標區塊執行合約。
在一個實施例中,區塊存儲模塊1202,被配置為根據自己所屬的網段,確定需要存儲的區塊。
關於上述實施例中的裝置,其中各個模塊執行操作的具體方式已經在有關該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。
圖13是根據一示例性實施例示出的一種用於區塊鏈存儲方法的裝置130的框圖,該裝置130可以是區塊鏈中的節點設備。如圖13所示,該裝置130可以包括:處理器1301,存儲器1302,多媒體組件1303,輸入/輸出(i/o)接口1304,以及通信組件1305。
其中,處理器1301用於控制該裝置130的整體操作,以完成上述的區塊鏈存儲方法中的全部或部分步驟。存儲器1302用於存儲作業系統,各種類型的數據以支持在該裝置130的操作,這些數據的例如可以包括用於在該裝置130上操作的任何應用程式或方法的指令,以及應用程式相關的數據。該存儲器1302可以由任何類型的易失性或非易失性存儲設備或者它們的組合實現,例如靜態隨機存取存儲器(staticrandomaccessmemory,簡稱sram),電可擦除可編程只讀存儲器(electricallyerasableprogrammableread-onlymemory,簡稱eeprom),可擦除可編程只讀存儲器(erasableprogrammableread-onlymemory,簡稱eprom),可編程只讀存儲器(programmableread-onlymemory,簡稱prom),只讀存儲器(read-onlymemory,簡稱rom),磁存儲器,快閃記憶體,磁碟或光碟。
多媒體組件1303可以包括屏幕和音頻組件。其中屏幕例如可以是觸控螢幕,音頻組件用於輸出和/或輸入音頻信號。例如,音頻組件可以包括一個麥克風,麥克風用於接收外部音頻信號。所接收的音頻信號可以被進一步存儲在存儲器1302或通過通信組件1305發送。音頻組件還包括至少一個揚聲器,用於輸出音頻信號。i/o接口1304為處理器1301和其他接口模塊之間提供接口,上述其他接口模塊可以是鍵盤,滑鼠,按鈕等。這些按鈕可以是虛擬按鈕或者實體按鈕。通信組件1305用於該裝置130與其他設備之間進行有線或無線通信。無線通信,例如wi-fi,藍牙,近場通信(nearfieldcommunication,簡稱nfc),2g、3g或4g,或它們中的一種或幾種的組合,因此相應的該通信組件1305可以包括:wi-fi模塊,藍牙模塊,nfc模塊。
在一示例性實施例中,裝置130可以被一個或多個應用專用集成電路(applicationspecificintegratedcircuit,簡稱asic)、數位訊號處理器(digitalsignalprocessor,簡稱dsp)、數位訊號處理設備(digitalsignalprocessingdevice,簡稱dspd)、可編程邏輯器件(programmablelogicdevice,簡稱pld)、現場可編程門陣列(fieldprogrammablegatearray,簡稱fpga)、控制器、微控制器、微處理器或其他電子元件實現,用於執行上述的區塊鏈存儲方法。
在另一示例性實施例中,還提供了一種電腦程式產品,所述電腦程式產品包含能夠由可編程的裝置執行的電腦程式,所述電腦程式具有當由所述可編程的裝置執行時用於執行上述的區塊鏈存儲方法的代碼部分。
在另一示例性實施例中,還提供了一種包括指令的非臨時性計算機可讀存儲介質,例如包括指令的存儲器1302,上述指令可由裝置130的處理器1301執行以完成上述的區塊鏈存儲方法。示例地,該非臨時性計算機可讀存儲介質可以是rom、隨機存取存儲器(randomaccessmemory,簡稱ram)、cd-rom、磁帶、軟盤和光數據存儲設備等。
流程圖中或在本發明的實施例中以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用於實現特定邏輯功能或過程的步驟的可執行指令的代碼的模塊、片段或部分,並且本發明實施方式的範圍包括另外的實現,其中可以不按所示出或討論的順序,包括根據所涉及的功能按基本同時的方式或按相反的順序,來執行功能,這應被本發明的實施例所述技術領域的技術人員所理解。
以上結合附圖詳細描述了本發明的優選實施方式,但是,本發明並不限於上述實施方式中的具體細節,在本發明的技術構思範圍內,可以對本發明的技術方案進行多種簡單變型,這些簡單變型均屬於本發明的保護範圍。