本發明涉及互聯網軟件領域,尤其涉及一種區塊鏈的分組共識方法及系統。
背景技術:
區塊鏈是一種新型去中心化分布式系統協議。信息不可偽造和篡改,無需任何中心化機構的審核。區塊鏈技術解決了拜占庭將軍問題,大大降低了現實社會的信任成本,重新定義互聯網時代的信任機制。區塊鏈本質上是一個去中心化,開放的數據庫,同時作為比特幣的底層技術。區塊鏈是一串使用密碼學方法相關聯產生的數據塊鏈,每一個區塊中包含了一定數量的比特幣網絡交易信息。通過將需要信任背書的數據存入比特幣交易賬本中,實現可信的,去中心化的信用背書。
在去中心化的情況下,區塊鏈并不是一個中心機構創造的,而是由比特幣網絡中的所有節點各自競爭完成的。比特幣網絡依靠去中心化的自發共識機制來保證區塊鏈受到各個節點的認可。比特幣的去中心化共識包括以下部分:每個節點對每個交易進行獨立驗證;通過完成工作量證明算法的驗算,挖礦節點將交易記錄獨立打包進新區塊;每個節點獨立對新區塊進行校驗并組裝進區塊鏈;每個節點對區塊鏈進行獨立選擇,在工作量證明機制下選擇累計工作量最大的區塊鏈。目前的共識機制下,每個節點都可以對交易進行驗證和打包,缺少了權限控制。
技術實現要素:
本發明的發明目的是針對現有技術的缺陷,提供了一種區塊鏈的分組共識方法及系統,用于解決現有技術中節點缺失權限控制等問題。
根據本發明的一個方面,提供了一種區塊鏈的分組共識方法,包括:
交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證交易合法后,對交易進行簽名并發送到區塊鏈網絡中;
由指定的交易打包節點接收簽名后的交易,驗證交易的簽名是否為交易驗證節點的簽名,若是,將交易與簽名關聯存儲;
交易打包節點將交易池中滿足預設標準的交易打包進區塊;將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊;
除交易打包節點外的其他節點在接收廣播的簽名后的區塊后,將區塊加入其他節點自身的區塊鏈副本中;其中,其他節點包括交易驗證節點、未被指定的交易打包節點和常規節點。
根據本發明的另一個方面,還提供了一種區塊鏈的分組共識系統,包括:多個交易驗證節點、多個交易打包節點以及多個常規節點;
交易驗證節點用于接收區塊鏈網絡中廣播的交易,在驗證交易合法后,對交易進行簽名并發送到區塊鏈網絡中;
交易打包節點用于接收簽名后的交易,驗證交易的簽名是否為交易驗證節點的簽名,若是,將交易與簽名關聯存儲;
交易打包節點還用于將交易池中滿足預設標準的交易打包進區塊;將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊;
常規節點用于在接收廣播的簽名后的區塊后,將區塊加入常規節點自身的區塊鏈副本中;
交易驗證節點還用于在接收廣播的簽名后的區塊后,將區塊加入交易驗證節點自身的區塊鏈副本中;
未被指定的交易打包節點還用于在接收廣播的簽名后的區塊后,將區塊加入未被指定的交易打包節點自身的區塊鏈副本中。
根據本發明提供的區塊鏈的分組共識方法及系統,交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證交易合法后,對交易進行簽名并發送到區塊鏈網絡中。由指定的交易打包節點接收簽名后的交易,驗證交易的簽名是否為交易驗證節點的簽名,若是,將交易與簽名關聯存儲。交易打包節點將交易池中滿足預設標準的交易打包進區塊,將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊。除交易打包節點外的其他節點在接收廣播的簽名后的區塊后,將區塊加入其他節點自身的區塊鏈副本中。對區塊鏈中各不同功能節點進行分類,處理不同的操作,實現對不同節點的權限控制。將操作委托給可信賴的節點如交易驗證節點、交易打包節點,由于這些節點是受信任的節點,無需通過工作量證明對交易進行打包,減少了交易打包的時間,提高了區塊形成速度。
附圖說明
通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了根據本發明一個實施例的區塊鏈的分組共識方法的流程示意圖;
圖2示出了根據本發明另一個實施例的區塊鏈的分組共識方法的流程示意圖;
圖3示出了根據本發明一個實施例的區塊鏈的分組共識系統的功能結構示意圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
對區塊鏈網絡中存在的多個節點,進行分組。不同組的節點用于實現不同的功能,如交易驗證節點用于對在區塊鏈網絡中廣播的交易進行驗證,將驗證通過的交易加入自身的交易池并且再次廣播到區塊鏈;交易打包節點用于將驗證通過的交易加入自身的交易池,將交易池中的交易打包進區塊并在區塊鏈網絡中廣播區塊等。這些節點都是受信任的節點。除此之外,還有普通節點,用于廣播交易。其中,可以通過如硬編碼的方式對節點進行分組,每個節點都知道自己為哪種節點,也知道其他節點為哪種節點,以及節點的公鑰,以便對節點的簽名進行驗證。所有的節點都可以廣播交易,對廣播的區塊進行驗證,將驗證通過的區塊加入自身的區塊鏈副本。
圖1示出了根據本發明一個實施例的區塊鏈的分組共識方法的流程示意圖。如圖1所示,本方法具體包括如下步驟:
步驟S101,交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證交易合法后,對交易進行簽名并發送到區塊鏈網絡中。
通過如硬編碼等方式設置區塊鏈網絡中的某些節點為交易驗證節點。交易驗證節點在接收到區塊鏈網絡中廣播的交易后,對交易進行驗證。驗證時,交易驗證節點通過對交易的格式、交易是否雙重花費等多個方面驗證交易是否為合法交易。交易的格式、交易是否雙重花費等驗證條件的設置可采用現有的交易驗證條件,此處不做具體限定。
交易驗證節點通過多方面的驗證條件驗證交易為合法交易后,利用其本身的私鑰對交易進行簽名,將簽名后的交易發送到區塊鏈網絡中。
步驟S102,由指定的交易打包節點接收簽名后的交易,驗證所述交易的簽名是否為所述交易驗證節點的簽名。
通過如硬編碼等方式設置區塊鏈網絡中的某些節點為交易打包節點。存在多個交易打包節點時,指定其中一個節點為本次的交易打包節點。
由指定的交易打包節點接收簽名后的交易,利用簽名的交易驗證節點的公鑰對交易的簽名進行驗證,驗證交易的簽名是否為交易驗證節點的簽名。若是,執行步驟S103。
步驟S103,若是,將交易與簽名關聯存儲。
在將交易與簽名關聯存儲時,可選地,還可用在將交易與簽名關聯存儲之前,判斷交易是否已保存在交易池中。若交易未保存在交易池中,將交易保存在交易池中,并將交易的簽名與交易關聯存儲;若交易已經保存在交易池中,進一步判斷交易的簽名是否與交易已關聯存儲的簽名一致。若一致,不再再次保存。若不一致,將交易的簽名與交易進行關聯存儲,即將交易當前與已關聯存儲的簽名不一致的簽名進行存儲,存儲時,將交易的簽名與交易需關聯存儲。
步驟S104,交易打包節點將交易池中滿足預設標準的交易打包進區塊。
預設標準為拜占庭容錯標準。拜占庭容錯標準為交易池中保存的交易關聯的交易驗證節點簽名數量大于交易驗證節點數量的三分之二。如交易驗證節點的數量為10,交易打包節點的交易池中的某一交易關聯的交易驗證節點簽名數量大于等于7,則該交易滿足拜占庭容錯標準。交易打包節點將交易池中滿足預設標準的交易打包進區塊。
可選地,交易打包節點可以在某預設條件時,將交易池中滿足預設標準的交易打包進區塊。預設條件可以為如上述的交易打包節點的交易池中保存有一定數量的滿足預設標準的交易;或預設條件為時間達到預設的時間間隔,即距離上次打包時間已過去預設的時間間隔時,交易打包節點將交易池中滿足上述拜占庭容錯標準的交易打包進區塊。具體的數量或時間間隔數值可根據實施情況進行設定,此處不做具體限定。
步驟S105,將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊。
將步驟S104打包的區塊加入到交易打包節點自身的區塊鏈副本中,形成新的區塊鏈副本。同時,對打包的區塊進行簽名,如利用交易打包節點本身的私鑰進行簽名等。簽名后,將簽名后的區塊在區塊鏈網絡中進行廣播。
步驟S106,除交易打包節點外的其他節點在接收廣播的簽名后的區塊后,將區塊加入其他節點自身的區塊鏈副本中。
其他節點包括了交易驗證節點、本次未被指定的交易打包節點和區塊鏈網絡中存在的常規節點。這些節點在接收廣播的簽名后的區塊后,將區塊加入到其自身的區塊鏈副本中,從而整個區塊鏈網絡中所有節點都完成了將該區塊組裝至區塊鏈的過程。
根據本發明提供的區塊鏈的分組共識方法,交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證交易合法后,對交易進行簽名并發送到區塊鏈網絡中。由指定的交易打包節點接收簽名后的交易,驗證所述交易的簽名是否為所述交易驗證節點的簽名;若是,將交易的簽名與交易關聯存儲。交易打包節點將交易池中滿足預設標準的交易打包進區塊,將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊。除交易打包節點外的其他節點在接收廣播的簽名后的區塊后,將區塊加入其他節點自身的區塊鏈副本中。對區塊鏈中各不同功能節點進行分類,處理不同的操作,實現對不同節點的權限控制。將操作委托給可信賴的節點如交易驗證節點、交易打包節點,由于這些節點是受信任的節點,無需通過工作量證明對交易進行打包,減少了交易打包的時間,提高了區塊形成速度。
圖2示出了根據本發明另一個實施例的區塊鏈的分組共識方法的流程示意圖。如圖2所示,本方法包括如下步驟:
步驟S201,交易驗證節點接收區塊鏈網絡中廣播的交易。
步驟S202,判斷交易是否為其他交易驗證節點簽名后的交易。
在交易驗證節點接收區塊鏈網絡中廣播的交易后,判斷交易是否已經被其他交易驗證節點簽名,即交易是否為已經驗證后合法的交易,并被其他交易驗證節點簽名后的交易。若是,即交易為合法交易,且被其他交易驗證節點簽名,執行步驟S203,否則,即交易還沒有被驗證,執行步驟S204。
步驟S203,若交易為其他交易驗證節點簽名后的交易,交易驗證節點對交易進行簽名并發送到區塊鏈網絡中。
交易驗證節點可以直接利用自身的私鑰對交易進行簽名,簽名時,可以在交易原有簽名的基礎上,再增加本次交易驗證節點的簽名,也可以將其他交易驗證節點的簽名替換為本次交易驗證節點的簽名,具體實施時,可根據實施情況進行設置,此處不做具體限定。
簽名后,將簽名后的交易發送到區塊鏈網絡中,繼續執行步驟S207。
步驟S204,交易驗證節點驗證交易是否合法。
因交易未經驗證,交易驗證節點通過對交易的格式、交易是否雙重花費等多個方面驗證交易是否為合法交易。交易的格式、交易是否雙重花費等驗證條件的設置可采用現有的交易驗證條件,此處不做具體限定。
若交易為合法交易,執行步驟S206,否則執行步驟S205。
步驟S205,若驗證交易不合法,將交易直接發送到區塊鏈網絡中。
若交易為不合法交易,對交易不做任何處理,將交易直接發送到區塊鏈網絡中,執行步驟S217,本次方法的執行結束。
步驟S206,驗證交易合法后,對交易進行簽名并發送到區塊鏈網絡中。
交易驗證節點通過多方面的驗證條件驗證交易為合法交易后,利用其本身的私鑰對交易進行簽名,將簽名后的交易發送到區塊鏈網絡中。
步驟S207,在多個交易打包節點中利用預設選舉算法選舉出一個交易打包節點作為指定的交易打包節點。
通過如硬編碼等方式設置區塊鏈網絡中的某些節點為交易打包節點。存在多個交易打包節點時,指定其中一個節點為本次的交易打包節點。指定時利用預設選舉算法選舉出一個交易打包節點。每一次執行前選舉出一個交易打包節點對交易執行打包,預設選舉算法僅在交易打包節點中執行,選舉出的交易打包節點為唯一一個指定的交易打包節點。具體的選舉算法可采用如隨機法、比重法、輪序法等等算法,此處不做具體限定。
步驟S208,由指定的交易打包節點接收簽名后的交易,利用公鑰驗證交易的簽名是否為交易驗證節點的簽名。
指定的交易打包節點接收簽名后的交易后,利用簽名的交易驗證節點的公鑰對交易的簽名進行驗證,驗證交易的簽名是否為交易驗證節點的簽名。若是,執行步驟S209,否則執行步驟S217,本次方法的執行結束。
步驟S209,判斷交易是否已保存在交易池中。
驗證交易的簽名為交易驗證節點的簽名后,進一步判斷交易是否已保存在交易打包節點的交易池中。若已保存,執行步驟S211,若未保存,執行步驟S210。
步驟S210,將交易保存在交易池中,并將交易的簽名與交易關聯存儲。
將該交易保存在交易打包節點的交易池中,并將交易的簽名和交易本身進行關聯存儲。存儲后,執行步驟S213。
步驟S211,若交易已保存在交易池中,判斷交易的簽名是否與交易已關聯存儲的簽名一致。
若交易已保存在交易打包節點的交易池中,還需要判斷保存的交易已關聯存儲的簽名與交易當前的簽名是否一致,若不一致,執行步驟S212,若一致,執行步驟S213。
步驟S212,若不一致,將交易的簽名與交易關聯存儲。
將交易的簽名與交易進行關聯存儲,即將交易當前與已關聯存儲的簽名不一致的簽名進行存儲,存儲時,交易的簽名與交易需關聯存儲。
步驟S213,交易打包節點將交易池中滿足預設標準的交易打包進區塊。
預設標準為拜占庭容錯標準。拜占庭容錯標準為交易池中保存的交易關聯的交易驗證節點簽名數量大于交易驗證節點數量的三分之二。如交易驗證節點的數量為10,交易打包節點的交易池中的某一交易關聯的交易驗證節點簽名數量大于等于7,則該交易滿足拜占庭容錯標準。交易打包節點將交易池中滿足預設標準的交易打包進區塊。
可選地,交易打包節點可以在某預設條件時,將交易池中滿足預設標準的交易打包進區塊。預設條件可以為如上述的交易打包節點的交易池中保存有一定數量的滿足預設標準的交易;或預設條件為時間達到預設的時間間隔,即距離上次打包時間已過去預設的時間間隔時,交易打包節點將交易池中滿足拜占庭容錯標準的交易打包進區塊。具體的數量或時間間隔數值可根據實施情況進行設定,此處不做具體限定。
步驟S214,將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊。
將步驟S213打包的區塊加入到交易打包節點自身的區塊鏈副本中,形成新的區塊鏈副本。同時,對打包的區塊進行簽名,如利用交易打包節點本身的私鑰進行簽名等。簽名后,將簽名后的區塊在區塊鏈網絡中進行廣播。
步驟S215,除交易打包節點外的其他節點在接收廣播的簽名后的區塊后,其他節點利用公鑰驗證區塊的簽名是否為交易打包節點的簽名。
其他節點包括了交易驗證節點、本次未被指定的交易打包節點和區塊鏈網絡中存在的常規節點。這些節點在接收廣播的簽名后的區塊后,利用公鑰來驗證區塊的簽名是否為交易打包節點的簽名,若是,執行步驟S216,否則執行步驟S217,本次方法的執行結束。
步驟S216,將區塊加入其他節點自身的區塊鏈副本中。
將驗證后的區塊加入到其他節點自身的區塊鏈副本中,從而整個區塊鏈網絡中所有節點都完成了將該區塊組裝至區塊鏈的過程。
步驟S217,方法結束。
根據本發明提供的區塊鏈的分組共識方法,交易驗證節點驗證交易合法性并對交易進行簽名后發送到區塊鏈網絡中。指定的交易打包節點接收簽名后的交易,保存在交易池中,并將交易的簽名與交易關聯存儲。當滿足預設條件時,交易打包節點將交易池中的交易打包進區塊,將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊。除交易打包節點外的其他節點在接收廣播的簽名后的區塊后,將區塊加入其他節點自身的區塊鏈副本中。通過對區塊鏈中各不同功能節點進行分類,使其專門的處理不同的操作,實現了對節點不同的權限控制。將需要驗證合法性、打包等操作委托給可信賴的節點如交易驗證節點、交易打包節點,由于這些節點是受信任的節點,無需通過工作量證明對交易進行驗證、打包等,減少了交易打包的時間,提高了區塊形成速度。
圖3示出了根據本發明一個實施例的區塊鏈的分組共識系統的功能結構示意圖。如圖3所示,本系統包括如下各種節點:多個交易驗證節點310、多個交易打包節點320以及多個常規節點330。
交易驗證節點310用于接收區塊鏈網絡中廣播的交易,在驗證交易合法后,對交易進行簽名并發送到區塊鏈網絡中。
交易驗證節點310進一步用于:通過對交易的格式和/或驗證交易是否雙重花費驗證交易是否為合法交易。
交易驗證節點310進一步用于:若驗證交易不合法,將交易直接發送到區塊鏈網絡中。
交易驗證節點310進一步用于:若交易為其他交易驗證節點簽名后的交易,對交易進行簽名并發送到區塊鏈網絡中。
交易驗證節點310進一步用于:將其他交易驗證節點的簽名替換為該交易驗證節點的簽名并發送到區塊鏈網絡中。
交易驗證節點310還用于在接收廣播的簽名后的區塊后,將區塊加入交易驗證節點自身的區塊鏈副本中。
交易驗證節點310進一步用于:利用公鑰驗證區塊的簽名是否為交易打包節點的簽名;若否,系統執行結束。
交易打包節點320用于接收簽名后的交易,驗證交易的簽名是否為交易驗證節點的簽名,若是,將交易與簽名關聯存儲。
交易打包節點320進一步用于:在多個交易打包節點中利用預設選舉算法選舉出一個交易打包節點作為指定的交易打包節點。
交易打包節點320進一步用于:判斷交易是否已保存在交易打包節點的交易池中;若否,將交易保存在交易池中,并將交易的簽名與交易關聯存儲;若是,判斷交易的簽名是否與交易已關聯存儲的簽名一致,若不一致,將交易的簽名與交易關聯存儲。
交易打包節點320還用于將交易池中滿足預設標準的交易打包進區塊;將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊。
未被指定的交易打包節點320還用于在接收廣播的簽名后的區塊后,將區塊加入未被指定的交易打包節點自身的區塊鏈副本中。
未被指定的交易打包節點320進一步用于:利用公鑰驗證區塊的簽名是否為交易打包節點的簽名;若否,系統執行結束。
常規節點330用于在接收廣播的簽名后的區塊后,將區塊加入常規節點自身的區塊鏈副本中。
常規節點330進一步用于:利用公鑰驗證區塊的簽名是否為交易打包節點的簽名;若否,系統執行結束。
以上各節點的具體描述可參考各方法實施例中對應的步驟的具體描述,在此不再贅述。
根據本發明提供的區塊鏈的分組共識系統,交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證交易合法后,對交易進行簽名并發送到區塊鏈網絡中。由指定的交易打包節點接收簽名后的交易,判斷交易是否已保存在交易池中,若否,將交易保存在交易池中,并將交易的簽名與交易關聯存儲。當滿足預設條件時,交易打包節點將交易池中的交易打包進區塊,將區塊加入交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊。除交易打包節點外的其他節點在接收廣播的簽名后的區塊后,將區塊加入其他節點自身的區塊鏈副本中。對區塊鏈中各不同功能節點進行分類,處理不同的操作,實現對不同節點的權限控制。將操作委托給可信賴的節點如交易驗證節點、交易打包節點,由于這些節點是受信任的節點,無需通過工作量證明對交易進行打包,減少了交易打包的時間,提高了區塊形成速度。
在此提供的算法和顯示不與任何特定計算機、虛擬系統或者其它設備固有相關。各種通用系統也可以與基于在此的示教一起使用。根據上面的描述,構造這類系統所要求的結構是顯而易見的。此外,本發明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現在此描述的本發明的內容,并且上面對特定語言所做的描述是為了披露本發明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本發明的實施例可以在沒有這些具體細節的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開并幫助理解各個發明方面中的一個或多個,在上面對本發明的示例性實施例的描述中,本發明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面的權利要求書所反映的那樣,發明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權利要求書由此明確地并入該具體實施方式,其中每個權利要求本身都作為本發明的單獨實施例。
本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發明的范圍之內并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發明的各個部件實施例可以以硬件實現,或者以在一個或者多個處理器上運行的軟件模塊實現,或者以它們的組合實現。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數字信號處理器(DSP)來實現根據本發明實施例中的一些或者全部部件的一些或者全部功能。本發明還可以實現為用于執行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產品)。這樣的實現本發明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網網站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本發明進行說明而不是對本發明進行限制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包含”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現。單詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
本發明公開了:A1、一種區塊鏈的分組共識方法,其中,包括:
交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證所述交易合法后,對所述交易進行簽名并發送到所述區塊鏈網絡中;
由指定的交易打包節點接收簽名后的交易,驗證所述交易的簽名是否為所述交易驗證節點的簽名,若是,將交易與簽名關聯存儲;
所述交易打包節點將交易池中滿足預設標準的交易打包進區塊;將所述區塊加入所述交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊;
除所述交易打包節點外的其他節點在接收廣播的簽名后的區塊后,將所述區塊加入所述其他節點自身的區塊鏈副本中;其中,所述其他節點包括交易驗證節點、未被指定的交易打包節點和常規節點。
A2、根據A1所述的方法,其中,所述交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證所述交易合法后,對所述交易進行簽名并發送到所述區塊鏈網絡中進一步包括:
交易驗證節點通過對交易的格式和/或驗證交易是否雙重花費驗證所述交易是否為合法交易。
A3、根據A1所述的方法,其中,在交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證所述交易合法后,對所述交易進行簽名并發送到所述區塊鏈網絡中之前,所述方法還包括:
若所述交易為其他交易驗證節點簽名后的交易,交易驗證節點對所述交易進行簽名并發送到所述區塊鏈網絡中。
A4、根據A3所述的方法,其中,所述若所述交易為其他交易驗證節點簽名后的交易,對所述交易進行簽名并發送到所述區塊鏈網絡中進一步包括:
交易驗證節點將其他交易驗證節點的簽名替換為該交易驗證節點的簽名并發送到所述區塊鏈網絡中。
A5、根據A1所述的方法,其中,在所述由指定的交易打包節點接收簽名后的交易,判斷所述交易是否已保存在交易池中之前,所述方法還包括:
在多個交易打包節點中利用預設選舉算法選舉出一個交易打包節點作為指定的交易打包節點。
A6、根據A1所述的方法,其中,所述由指定的交易打包節點接收簽名后的交易,驗證所述交易的簽名是否為所述交易驗證節點的簽名,若是,將交易與簽名關聯存儲進一步包括:
判斷所述交易是否已保存在所述交易打包節點的交易池中;
若否,將所述交易保存在交易池中,并將所述交易的簽名與所述交易關聯存儲;
若是,判斷所述交易的簽名是否與所述交易已關聯存儲的簽名一致,若不一致,將所述交易的簽名與所述交易關聯存儲。
A7、根據A1所述的方法,其中,所述預設標準為交易關聯的交易驗證節點簽名數量超過交易驗證節點數量的三分之二。
A8、根據A1所述的方法,其中,所述交易驗證節點接收區塊鏈網絡中廣播的交易,在驗證所述交易合法后,對所述交易進行簽名并發送到所述區塊鏈網絡中進一步包括:
若驗證所述交易不合法,將所述交易直接發送到所述區塊鏈網絡中。
A9、根據A1所述的方法,其中,在所述除所述交易打包節點外的其他節點在接收廣播的簽名后的區塊后,將所述區塊加入所述其他節點自身的區塊鏈副本中之前,所述方法還包括:
所述其他節點利用公鑰驗證所述區塊的簽名是否為所述交易打包節點的簽名;若否,所述方法結束。
本發明還公開了:B10、一種區塊鏈的分組共識系統,其中,包括:多個交易驗證節點、多個交易打包節點以及多個常規節點;
所述交易驗證節點用于接收區塊鏈網絡中廣播的交易,在驗證所述交易合法后,對所述交易進行簽名并發送到所述區塊鏈網絡中;
所述交易打包節點用于接收簽名后的交易,驗證所述交易的簽名是否為所述交易驗證節點的簽名,若是,將交易與簽名關聯存儲;
所述交易打包節點還用于將交易池中滿足預設標準的交易打包進區塊;將所述區塊加入所述交易打包節點自身的區塊鏈副本中,并對區塊進行簽名,在區塊鏈網絡中廣播簽名后的區塊;
所述常規節點用于在接收廣播的簽名后的區塊后,將所述區塊加入所述常規節點自身的區塊鏈副本中;
所述交易驗證節點還用于在接收廣播的簽名后的區塊后,將所述區塊加入所述交易驗證節點自身的區塊鏈副本中;
所述未被指定的交易打包節點還用于在接收廣播的簽名后的區塊后,將所述區塊加入所述未被指定的交易打包節點自身的區塊鏈副本中。
B11、根據B10所述的系統,其中,所述交易驗證節點進一步用于:
通過對交易的格式和/或驗證交易是否雙重花費驗證所述交易是否為合法交易。
B12、根據B11所述的系統,其中,所述交易驗證節點進一步用于:
若所述交易為其他交易驗證節點簽名后的交易,對所述交易進行簽名并發送到所述區塊鏈網絡中。
B13、根據B12所述的系統,其中,所述交易驗證節點進一步用于:
將其他交易驗證節點的簽名替換為該交易驗證節點的簽名并發送到所述區塊鏈網絡中。
B14、根據B10所述的系統,其中,所述交易打包節點進一步用于:
在多個交易打包節點中利用預設選舉算法選舉出一個交易打包節點作為指定的交易打包節點。
B15、根據B14所述的系統,其中,所述交易打包節點進一步用于:
判斷所述交易是否已保存在所述交易打包節點的交易池中;
若否,將所述交易保存在交易池中,并將所述交易的簽名與所述交易關聯存儲;
若是,判斷所述交易的簽名是否與所述交易已關聯存儲的簽名一致,若不一致,將所述交易的簽名與所述交易關聯存儲。
B16、根據B15所述的系統,其中,所述預設標準為交易關聯的交易驗證節點簽名數量超過交易驗證節點數量的三分之二。
B17、根據B10所述的系統,其中,所述交易驗證節點進一步用于:
若驗證所述交易不合法,將所述交易直接發送到所述區塊鏈網絡中。
B18、根據B10所述的系統,其中,所述常規節點進一步用于:
利用公鑰驗證所述區塊的簽名是否為所述交易打包節點的簽名;若否,所述系統執行結束。
B19、根據B10所述的系統,其中,所述交易驗證節點進一步用于:
利用公鑰驗證所述區塊的簽名是否為所述交易打包節點的簽名;若否,所述系統執行結束。
B20、根據B10所述的系統,其中,所述未被指定的交易打包節點進一步用于:
利用公鑰驗證所述區塊的簽名是否為所述交易打包節點的簽名;若否,所述系統執行結束。