本發(fā)明涉及區(qū)塊鏈技術(shù),尤其涉及一種多協(xié)議區(qū)塊鏈的工作方法及裝置,屬于區(qū)塊鏈領(lǐng)域。
背景技術(shù):
隨著近年來比特幣的持續(xù)升溫,區(qū)塊鏈作為比特幣的底層技術(shù)基礎也慢慢進入大眾的視野。區(qū)塊鏈是一個去中心化的、集體維護一個可靠的分布式數(shù)據(jù)庫的技術(shù)方案。該方案主要讓區(qū)塊通過密碼學方法關(guān)聯(lián)起來,每個區(qū)塊包含了一定時間內(nèi)系統(tǒng)全部的數(shù)據(jù)信息,并且根據(jù)數(shù)據(jù)信息生成數(shù)字簽名以驗證信息的有效性,同時將hash值(哈希值)鏈接到下一個數(shù)據(jù)塊形成一條區(qū)塊鏈。
在分布式網(wǎng)絡上的區(qū)塊鏈雖然具有充分嚴格的規(guī)則來建立一個有效的區(qū)塊,但是創(chuàng)建區(qū)塊鏈時,控制區(qū)塊鏈數(shù)據(jù)存儲、解析以及區(qū)塊添加和驗證的規(guī)則全都已設定且不能改變,并且現(xiàn)有的區(qū)塊鏈技術(shù)沒有適應節(jié)點的能力,為了支持最長的鏈路,任何創(chuàng)建在區(qū)塊鏈上的分支都會被拋棄,浪費資源。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是為了解決現(xiàn)有技術(shù)中存在的問題,提供了一種多協(xié)議區(qū)塊鏈的工作方法及裝置。
一方面,本發(fā)明提供了一種多協(xié)議區(qū)塊鏈的工作方法,包括:
步驟s1:創(chuàng)建創(chuàng)世區(qū)塊,并按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建標準區(qū)塊;計算創(chuàng)世區(qū)塊的hash值并將其存入標準區(qū)塊,鏈接成主區(qū)塊鏈,并按照創(chuàng)世區(qū)塊的協(xié)議在主區(qū)塊鏈上添加區(qū)塊;
步驟s2:當有新的業(yè)務需求時,在主區(qū)塊鏈上創(chuàng)建分支區(qū)塊,并創(chuàng)建分支鏈根區(qū)塊;計算分支鏈根區(qū)塊的短hash值,并將短hash值作為授權(quán)hash存入分支區(qū)塊;計算分支區(qū)塊的hash值并將其存入分支鏈根區(qū)塊,鏈接成分支鏈;
步驟s3:當需要在分支鏈上添加新的區(qū)塊時,驗證分支鏈根區(qū)塊是否合法,如果不合法,則在分支鏈上添加新的區(qū)塊失敗,如果合法,則讀取分支鏈的協(xié)議并驗證分支鏈的有效性,如果分支鏈有效,則按照分支鏈的協(xié)議在分支鏈上添加新的區(qū)塊,如果分支鏈無效,則在分支鏈上添加新的區(qū)塊失敗。
具體地,創(chuàng)建創(chuàng)世區(qū)塊,具體為:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建創(chuàng)世區(qū)塊后,根據(jù)創(chuàng)世區(qū)塊的凈負荷計算凈負荷hash值,并為創(chuàng)世區(qū)塊添加時間戳;
具體地,按照創(chuàng)世區(qū)塊規(guī)定的協(xié)議創(chuàng)建標準區(qū)塊,具體為:根據(jù)證明標準、凈負荷、描述符以及分支標識按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建標準區(qū)塊后,根據(jù)標準區(qū)塊的凈負荷計算凈負荷hash值,并為標準區(qū)塊添加時間戳;
具體地,在主區(qū)塊鏈上創(chuàng)建分支區(qū)塊,具體為:根據(jù)證明標準、凈負荷、描述符以及分支標識按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建分支區(qū)塊后,根據(jù)分支區(qū)塊的凈負荷計算凈負荷hash值,并為分支區(qū)塊添加時間戳。
具體地,創(chuàng)建分支鏈根區(qū)塊,具體為:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支鏈根區(qū)塊后,根據(jù)分支鏈根區(qū)塊的凈負荷計算凈負荷hash值,并為分支鏈根區(qū)塊添加時間戳。
進一步地,步驟s1中計算創(chuàng)世區(qū)塊的hash值并將其存入標準區(qū)塊,鏈接成主區(qū)塊鏈,具體為:根據(jù)創(chuàng)世區(qū)塊的證明標準,使用創(chuàng)世區(qū)塊中的凈負荷hash值、時間戳、證明標準、描述符、分支標識及隨機數(shù)計算創(chuàng)世區(qū)塊的hash值,將創(chuàng)世區(qū)塊的hash值作為標準區(qū)塊的前一區(qū)塊hash值存入標準區(qū)塊,鏈接成主區(qū)塊鏈。
進一步地,步驟s2中計算分支鏈根區(qū)塊的短hash值,并將短hash值作為授權(quán)hash存入分支區(qū)塊,具體為:根據(jù)分支鏈根區(qū)塊中的證明標準、凈負荷、描述符、分支標識、凈負荷hash值以及時間戳計算分支鏈根區(qū)塊的短hash值,并將分支鏈根區(qū)塊的短hash值作為分支區(qū)塊的授權(quán)hash存入分支區(qū)塊;
更進一步地,計算分支區(qū)塊的hash值并將其存入分支鏈根區(qū)塊,具體為:根據(jù)分支區(qū)塊中的證明標準,使用分支區(qū)塊中的前一區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算分支區(qū)塊的hash值,并將分支區(qū)塊的hash值作為分支鏈根區(qū)塊的前一區(qū)塊hash值存入分支鏈根區(qū)塊。
優(yōu)選地,計算分支區(qū)塊的hash值之前,還包括:計算分支區(qū)塊在主區(qū)塊鏈上的前一區(qū)塊hash值并存入分支區(qū)塊,具體為:根據(jù)分支區(qū)塊在主區(qū)塊鏈上的前一個區(qū)塊的證明標準,使用前一個區(qū)塊的前一區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算前一區(qū)塊hash值并存入分支區(qū)塊。
具體地,步驟s3中驗證分支鏈根區(qū)塊是否合法,具體為:
步驟f1:驗證分支鏈根區(qū)塊的前一區(qū)塊hash值是否和主區(qū)塊鏈上的分支區(qū)塊的hash值相同,如果相同,則執(zhí)行步驟f2,否則分支鏈根區(qū)塊不合法,在分支鏈上添加新的區(qū)塊失?。?/p>
步驟f2:驗證分支鏈根區(qū)塊的短hash值是否和主區(qū)塊鏈上的分支區(qū)塊中的授權(quán)hash相同,如果相同,則讀取分支鏈的協(xié)議并驗證分支鏈的有效性,如果有效,則在分支鏈上添加新的區(qū)塊成功,如果無效,在所述分支鏈上添加新的區(qū)塊失敗,否則分支鏈根區(qū)塊不合法,在分支鏈上添加新的區(qū)塊失敗。
進一步地,步驟f1,具體為:根據(jù)分支區(qū)塊中的前一區(qū)塊hash值、隨機數(shù)、凈負荷hash值、時間戳、證明標準、描述符、分支標識、授權(quán)hash以及凈負荷算出分支區(qū)塊的hash值,驗證分支區(qū)塊的hash值是否與分支鏈根區(qū)塊中的前一區(qū)塊hash值相同,若兩個值相同,則執(zhí)行步驟f2,否則分支鏈根區(qū)塊不合法,分支鏈被視為無效;
進一步地,步驟f2,具體為:根據(jù)分支鏈根區(qū)塊的凈負荷hash值、時間戳、證明標準、描述符以及分支標識算出分支鏈根區(qū)塊的短hash值,驗證分支鏈根區(qū)塊的短hash值是否與分支區(qū)塊的授權(quán)hash值相同,若兩個值相同,則讀取分支鏈的協(xié)議,否則分支鏈根區(qū)塊不合法,分支鏈被視為無效。
更進一步地,讀取分支鏈的協(xié)議并驗證分支鏈的有效性之前還包括:判斷是否存在其他的另一個前一區(qū)塊hash值和分支區(qū)塊的hash值相等的分支鏈根區(qū)塊,如果存在,則在與分支區(qū)塊相連的分支鏈中選取長度最長的分支鏈作為合法分支鏈后,讀取合法分支鏈的協(xié)議并驗證合法分支鏈的有效性,如果不存在,則直接讀取分支鏈的協(xié)議并驗證分支鏈的有效性。
具體地,讀取分支鏈的協(xié)議,具體為:從分支鏈根區(qū)塊或主區(qū)塊鏈上的分支區(qū)塊里讀取分支鏈的協(xié)議。
具體地,步驟s3中,驗證分支鏈的有效性,具體為:驗證分支鏈上所有區(qū)塊的hash值是否滿足分支鏈的協(xié)議;并驗證分支鏈上所有區(qū)塊的時間戳是否滿足分支鏈的協(xié)議,如均驗證通過,則所述分支鏈有效,否則所述分支鏈無效。
更具體地,驗證分支鏈上所有區(qū)塊的hash值是否滿足分支鏈的協(xié)議,具體為:計算分支鏈上的第一個區(qū)塊的hash值,判斷和下一個區(qū)塊中的前一區(qū)塊hash值是否相同,如果相同,則分支鏈上的第一個區(qū)塊滿足分支鏈的協(xié)議,繼續(xù)驗證分支鏈上的其他區(qū)塊是否滿足分支鏈的協(xié)議,如所述分支鏈上的所有區(qū)塊均不滿足所述分支鏈的協(xié)議則被視為無效;
更具體地,驗證分支鏈上所有區(qū)塊的時間戳是否滿足分支鏈的協(xié)議,具體為:判斷分支鏈上每個區(qū)塊的時間戳是否滿足分支鏈協(xié)議規(guī)定的時間戳的格式,如果是,則分支鏈上每個區(qū)塊滿足分支鏈的協(xié)議,并按照分支鏈的協(xié)議在分支鏈上添加新的區(qū)塊,否則分支鏈被視為無效。
另一方面,本發(fā)明提供了一種多協(xié)議區(qū)塊鏈的裝置,包括:
第一創(chuàng)建模塊,用于創(chuàng)建創(chuàng)世區(qū)塊并按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建標準區(qū)塊;
第一計算模塊,用于計算創(chuàng)世區(qū)塊的hash值;
第一存儲模塊,用于將第一計算模塊得到的創(chuàng)世區(qū)塊的hash值存入第一創(chuàng)建模塊創(chuàng)建的標準區(qū)塊,鏈接成主區(qū)塊鏈;
第一添加模塊,用于按照創(chuàng)世區(qū)塊的協(xié)議在主區(qū)塊鏈上添加區(qū)塊;
第二創(chuàng)建模塊,用于當有新的業(yè)務需求時,在主區(qū)塊鏈上創(chuàng)建分支區(qū)塊,并創(chuàng)建分支鏈根區(qū)塊;
第二計算模塊,用于計算分支鏈根區(qū)塊的短hash值;
第二存儲模塊,用于將第二計算模塊得到的短hash值作為授權(quán)hash存入第二創(chuàng)建模塊創(chuàng)建的分支區(qū)塊中;
第三計算模塊,用于計算分支區(qū)塊的hash值;
第三存儲模塊,用于將第三計算模塊得到的分支區(qū)塊的hash值存入第二創(chuàng)建模塊創(chuàng)建的分支鏈根區(qū)塊中,鏈接成分支鏈;
第一驗證模塊,用于當需要在分支鏈上添加新的區(qū)塊時,驗證分支鏈根區(qū)塊是否合法;
讀取模塊,用于當?shù)谝或炞C模塊驗證分支鏈根區(qū)塊合法時,讀取分支鏈的協(xié)議;
第二驗證模塊,用于驗證讀取模塊讀取到的分支鏈的有效性;
第二添加模塊,用于當?shù)诙炞C模塊驗證分支鏈的協(xié)議的有效時,按照分支鏈的協(xié)議在分支鏈上添加新的區(qū)塊。
具體地,在本實施例中,第一創(chuàng)建模塊,具體包括:第一創(chuàng)建單元、第一計算單元、第一添加單元、第二創(chuàng)建單元、第二計算單元、第二添加單元、第三創(chuàng)建單元、第三計算單元和第三添加單元;
第一創(chuàng)建單元,用于根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建創(chuàng)世區(qū)塊;
第一計算單元,用于根據(jù)創(chuàng)建第一創(chuàng)建單元的凈負荷計算創(chuàng)世區(qū)塊的凈負荷hash值;
第一添加單元,用于為創(chuàng)世區(qū)塊添加時間戳;
第二創(chuàng)建單元,用于根據(jù)證明標準、凈負荷、描述符以及分支標識按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建標準區(qū)塊;
第二計算單元,用于根據(jù)標準區(qū)塊的凈負荷計算標準區(qū)塊的凈負荷hash值;
第二添加單元,用于為標準區(qū)塊添加時間戳;
第三創(chuàng)建單元,用于根據(jù)證明標準、凈負荷、描述符以及分支標識按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建分支區(qū)塊;
第三計算單元,用于根據(jù)分支區(qū)塊的凈負荷計算分支區(qū)塊的凈負荷hash值;
第三添加單元,用于為分支鏈根區(qū)塊添加時間戳。
具體地,第二創(chuàng)建模塊,具體包括:第四創(chuàng)建單元、第四計算單元和第四添加模塊;
第四創(chuàng)建單元,用于根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支鏈根區(qū)塊;
第四計算單元,用于根據(jù)第四創(chuàng)建單元創(chuàng)建的分支鏈根區(qū)塊的凈負荷計算分支鏈根區(qū)塊的凈負荷hash值;
第四添加模塊,用于為分支鏈根區(qū)塊添加時間戳。
進一步地,第一計算模塊,具體用于根據(jù)創(chuàng)世區(qū)塊的證明標準,使用創(chuàng)世區(qū)塊中的凈負荷hash值、時間戳、證明標準、描述符、分支標識及隨機數(shù)計算創(chuàng)世區(qū)塊的hash值;
第一存儲模塊,具體用于將第一計算單元計算的創(chuàng)世區(qū)塊的hash值作為標準區(qū)塊的前一區(qū)塊hash值存入標準區(qū)塊,鏈接成主區(qū)塊鏈。
進一步地,第二計算模塊,具體用于:根據(jù)分支鏈根區(qū)塊中的證明標準、凈負荷、描述符、分支標識、凈負荷hash值以及時間戳計算分支鏈根區(qū)塊的短hash值;
具體地,第二存儲模塊,具體用于:將第二計算模塊計算的分支鏈根區(qū)塊的短hash值作為分支區(qū)塊的授權(quán)hash存入分支區(qū)塊;
具體地,第三計算模塊,具體用于:根據(jù)分支區(qū)塊的證明標準,使用分支區(qū)塊中的前一區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算分支區(qū)塊的hash值;
具體地,第三存儲模塊,具體用于:將第三計算模塊計算的分支區(qū)塊的hash值作為分支鏈根區(qū)塊的前一區(qū)塊hash值存入分支鏈根區(qū)塊。
優(yōu)選地,本裝置還包括:第四計算模塊和第四存儲模塊;
第四計算模塊,用于根據(jù)分支區(qū)塊在主區(qū)塊鏈上的前一個區(qū)塊中的證明標準,使用分支區(qū)塊在主區(qū)塊鏈上的前一個區(qū)塊中的前一區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算前一區(qū)塊hash值;
第四存儲模塊,用于將第四計算模塊計算的前一區(qū)塊hash值存入分支區(qū)塊。
進一步地,驗證模塊包括:第一驗證單元和第二驗證單元;
第一驗證單元,用于驗證分支鏈根區(qū)塊中的前一區(qū)塊hash值是否和主區(qū)塊鏈上的分支區(qū)塊的hash值相同;
第二驗證單元,用于當?shù)谝或炞C單元驗證分支鏈根區(qū)塊的前一區(qū)塊hash值和主區(qū)塊鏈上的分支區(qū)塊的hash值相同時,驗證分支鏈根區(qū)塊的短hash值是否和主區(qū)塊鏈上的分支區(qū)塊中的授權(quán)hash相同;
具體地,讀取模塊,具體用于當?shù)诙炞C單元驗證分支鏈根區(qū)塊的短hash值和主區(qū)塊鏈上的分支區(qū)塊中的授權(quán)hash相同時,讀取分支鏈的協(xié)議。
更進一步地,第一驗證單元包括:第一計算子單元和第一驗證子單元,第二驗證單元包括:第二計算子單元和第二驗證子單元;
第一計算子單元,用于根據(jù)分支區(qū)塊中的前一區(qū)塊hash值、隨機數(shù)、凈負荷hash值、時間戳、證明標準、描述符、分支標識、授權(quán)hash以及凈負荷算出分支區(qū)塊的hash值;
第一驗證子單元,用于驗證第一計算子單元計算得到的分支區(qū)塊的hash值是否與分支鏈根區(qū)塊的前一區(qū)塊hash值相同;
第二計算子單元,用于當?shù)谝或炞C子單元驗證第一計算子單元計算得到的分支區(qū)塊的hash值與分支鏈根區(qū)塊的前一區(qū)塊hash值相同時,根據(jù)分支鏈根區(qū)塊的凈負荷hash值、時間戳、證明標準、描述符以及分支標識算出分支鏈根區(qū)塊的短hash值;
第二驗證子單元,用于驗證第二計算子單元計算得到的分支鏈根區(qū)塊的短hash值是否與分支區(qū)塊的授權(quán)hash值相同;
讀取模塊,具體用于當?shù)诙炞C子單元驗證與分支區(qū)塊的授權(quán)hash值相同時,讀取分支鏈的協(xié)議并。
更進一步地,裝置還包括:判斷模塊和選擇模塊;
判斷模塊,用于判斷是否存在其他的前一區(qū)塊hash值和分支區(qū)塊的hash值相等的分支鏈根區(qū)塊;
選擇模塊,用于當判斷模塊判斷存在另一個前一區(qū)塊hash值和分支區(qū)塊的hash值相等的分支鏈根區(qū)塊時,在與分支區(qū)塊相連的分支鏈中選取長度最長的分支鏈作為合法分支鏈;
讀取模塊,還用于當選擇模塊選取長度最長的分支鏈作為合法分支鏈后,讀取合法分支鏈的協(xié)議。
讀取模塊,具體用于從分支鏈根區(qū)塊或主區(qū)塊鏈上的分支區(qū)塊里讀取分支鏈的協(xié)議。
具體地,驗證模塊包括:第三驗證單元和第四驗證單元;
第三驗證單元,用于驗證分支鏈上所有區(qū)塊的hash值是否滿足分支鏈的協(xié)議;
第四驗證單元,用于驗證分支鏈上所有區(qū)塊的時間戳是否滿足分支鏈的協(xié)議。
進一步地,第三驗證單元包括:第三計算子單元、第一判斷子單元和第三驗證子單元;
第三計算子單元,用于計算分支鏈上的第一個區(qū)塊的hash值;
第一判斷子單元,用于判斷第三計算子單元計算分支鏈上的第一個區(qū)塊的hash值和下一個區(qū)塊中的前一區(qū)塊hash值是否相同;
第三驗證子單元,用于當?shù)谝慌袛嘧訂卧袛嗟谌嬎阕訂卧嬎惴种ф溕系牡谝粋€區(qū)塊的hash值和下一個區(qū)塊中的前一區(qū)塊hash值相同時,驗證分支鏈上的下一個區(qū)塊是否滿足分支鏈的協(xié)議;
第四驗證單元,包括第二判斷子單元和添加子單元;
第二判斷子單元,用于判斷分支鏈上每個區(qū)塊的時間戳是否滿足分支鏈協(xié)議規(guī)定的時間戳的格式;
添加子單元,用于當?shù)诙袛嘧訂卧袛喾种ф溕厦總€區(qū)塊的時間戳均滿足分支鏈協(xié)議規(guī)定的時間戳的格式時,按照分支鏈的協(xié)議在分支鏈上添加新的區(qū)塊。
本發(fā)明取得的有益效果是:
采用本發(fā)明的技術(shù)方案,能夠創(chuàng)建多協(xié)議的區(qū)塊鏈,允許改變區(qū)塊鏈的協(xié)議,并且能夠擴展區(qū)塊鏈的分支。
附圖說明
為了更清楚的說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為一種多協(xié)議區(qū)塊鏈的工作方法的流程圖;
圖2為創(chuàng)世區(qū)塊結(jié)構(gòu)示意圖;
圖3為標準區(qū)塊結(jié)構(gòu)示意圖;
圖4為分支區(qū)塊和分支鏈根區(qū)塊的內(nèi)部聯(lián)系示意圖;
圖5為具有一條有效分支鏈的示意圖;
圖6為一種多協(xié)議區(qū)塊鏈的工作方法的流程圖;
圖7為具有多條有效分支鏈的示意圖;
圖8為一種在分支鏈上創(chuàng)建標準區(qū)塊的流程圖;
圖9為一種多協(xié)議區(qū)塊鏈的裝置的示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
實施例一
本實施例中,提供了一種多協(xié)議區(qū)塊鏈的工作方法,具體步驟包括:
步驟s1:創(chuàng)建創(chuàng)世區(qū)塊,并按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建標準區(qū)塊;計算創(chuàng)世區(qū)塊的hash值并將其存入標準區(qū)塊,鏈接成主區(qū)塊鏈,并按照創(chuàng)世區(qū)塊的協(xié)議在主區(qū)塊鏈上添加區(qū)塊;
步驟s2:當有新的業(yè)務需求時,在主區(qū)塊鏈上創(chuàng)建分支區(qū)塊,并創(chuàng)建分支鏈根區(qū)塊;計算分支鏈根區(qū)塊的短hash值,并將短hash值作為授權(quán)hash存入分支區(qū)塊;計算分支區(qū)塊的hash值并將其存入分支鏈根區(qū)塊,鏈接成分支鏈;
步驟s3:當需要在分支鏈上添加新的區(qū)塊時,驗證分支鏈根區(qū)塊是否合法,如果不合法,則在分支鏈上添加新的區(qū)塊失敗,如果合法,則讀取分支鏈的協(xié)議并驗證分支鏈的有效性,如果分支鏈有效,則按照分支鏈的協(xié)議在分支鏈上添加新的區(qū)塊,如果分支鏈無效,則在分支鏈上添加新的區(qū)塊失敗。
具體地,在本實施例中,創(chuàng)建創(chuàng)世區(qū)塊,具體為:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建創(chuàng)世區(qū)塊后,根據(jù)創(chuàng)世區(qū)塊的凈負荷計算凈負荷hash值,并為創(chuàng)世區(qū)塊添加時間戳;
具體地,按照創(chuàng)世區(qū)塊規(guī)定的協(xié)議創(chuàng)建標準區(qū)塊,具體為:根據(jù)證明標準、凈負荷、描述符以及分支標識按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建標準區(qū)塊后,根據(jù)標準區(qū)塊的凈負荷計算凈負荷hash值,并為標準區(qū)塊添加時間戳;
具體地,在主區(qū)塊鏈上創(chuàng)建分支區(qū)塊,具體為:根據(jù)證明標準、凈負荷、描述符以及分支標識按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建分支區(qū)塊后,根據(jù)分支區(qū)塊的凈負荷計算凈負荷hash值,并為分支區(qū)塊添加時間戳。
具體地,在本實施例中,創(chuàng)建分支鏈根區(qū)塊,具體為:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支鏈根區(qū)塊后,根據(jù)分支鏈根區(qū)塊的凈負荷計算凈負荷hash值,并為分支鏈根區(qū)塊添加時間戳。
進一步地,步驟s1中計算創(chuàng)世區(qū)塊的hash值并將其存入標準區(qū)塊,鏈接成主區(qū)塊鏈,具體為:根據(jù)創(chuàng)世區(qū)塊的證明標準,使用創(chuàng)世區(qū)塊中的凈負荷hash值、時間戳、證明標準、描述符、分支標識及隨機數(shù)計算創(chuàng)世區(qū)塊的hash值,將創(chuàng)世區(qū)塊的hash值作為標準區(qū)塊的前一區(qū)塊hash值存入標準區(qū)塊,鏈接成主區(qū)塊鏈。
進一步地,步驟s2中計算分支鏈根區(qū)塊的短hash值,并將短hash值作為授權(quán)hash存入分支區(qū)塊,具體為:根據(jù)分支鏈根區(qū)塊中的證明標準、凈負荷、描述符、分支標識、凈負荷hash值以及時間戳計算分支鏈根區(qū)塊的短hash值,并將分支鏈根區(qū)塊的短hash值作為分支區(qū)塊的授權(quán)hash存入分支區(qū)塊;
更進一步地,計算分支區(qū)塊的hash值并將其存入分支鏈根區(qū)塊,具體為:根據(jù)分支區(qū)塊中的證明標準,使用分支區(qū)塊中的前一區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算分支區(qū)塊的hash值,并將分支區(qū)塊的hash值作為分支鏈根區(qū)塊的前一區(qū)塊hash值存入分支鏈根區(qū)塊。
優(yōu)選地,計算分支區(qū)塊的hash值之前,還包括:計算分支區(qū)塊在主區(qū)塊鏈上的前一區(qū)塊hash值并存入分支區(qū)塊,具體為:根據(jù)分支區(qū)塊在主區(qū)塊鏈上的前一個區(qū)塊的證明標準,使用前一個區(qū)塊的前一區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算前一區(qū)塊hash值并存入分支區(qū)塊。
具體地,在本實施例中,步驟s3中驗證分支鏈根區(qū)塊是否合法,具體為:
步驟f1:驗證分支鏈根區(qū)塊的前一區(qū)塊hash值是否和主區(qū)塊鏈上的分支區(qū)塊的hash值相同,如果相同,則執(zhí)行步驟f2,否則分支鏈根區(qū)塊不合法,在分支鏈上添加新的區(qū)塊失敗;
步驟f2:驗證分支鏈根區(qū)塊的短hash值是否和主區(qū)塊鏈上的分支區(qū)塊中的授權(quán)hash相同,如果相同,則讀取分支鏈的協(xié)議并驗證分支鏈的有效性,如果有效,則在分支鏈上添加新的區(qū)塊成功,如果無效,在所述分支鏈上添加新的區(qū)塊失敗,否則分支鏈根區(qū)塊不合法,在分支鏈上添加新的區(qū)塊失敗。
進一步地,在本實施例中,步驟f1,具體為:根據(jù)分支區(qū)塊中的前一區(qū)塊hash值、隨機數(shù)、凈負荷hash值、時間戳、證明標準、描述符、分支標識、授權(quán)hash以及凈負荷算出分支區(qū)塊的hash值,驗證分支區(qū)塊的hash值是否與分支鏈根區(qū)塊中的前一區(qū)塊hash值相同,若兩個值相同,則執(zhí)行步驟f2,否則分支鏈根區(qū)塊不合法,分支鏈被視為無效;
進一步地,在本實施例中,步驟f2,具體為:根據(jù)分支鏈根區(qū)塊的凈負荷hash值、時間戳、證明標準、描述符以及分支標識算出分支鏈根區(qū)塊的短hash值,驗證分支鏈根區(qū)塊的短hash值是否與分支區(qū)塊的授權(quán)hash值相同,若兩個值相同,則讀取分支鏈的協(xié)議,否則分支鏈根區(qū)塊不合法,分支鏈被視為無效。
更進一步地,讀取分支鏈的協(xié)議并驗證分支鏈的有效性之前還包括:判斷是否存在其他的另一個前一區(qū)塊hash值和分支區(qū)塊的hash值相等的分支鏈根區(qū)塊,如果存在,則在與分支區(qū)塊相連的分支鏈中選取長度最長的分支鏈作為合法分支鏈后,讀取合法分支鏈的協(xié)議并驗證合法分支鏈的有效性,如果不存在,則直接讀取分支鏈的協(xié)議并驗證分支鏈的有效性。
具體地,讀取分支鏈的協(xié)議,具體為:從分支鏈根區(qū)塊或主區(qū)塊鏈上的分支區(qū)塊里讀取分支鏈的協(xié)議。
具體地,步驟s3中,驗證分支鏈的有效性,具體為:驗證分支鏈上所有區(qū)塊的hash值是否滿足分支鏈的協(xié)議;并驗證分支鏈上所有區(qū)塊的時間戳是否滿足分支鏈的協(xié)議,如均驗證通過,則所述分支鏈有效,否則所述分支鏈無效。
更具體地,驗證分支鏈上所有區(qū)塊的hash值是否滿足分支鏈的協(xié)議,具體為:計算分支鏈上的第一個區(qū)塊的hash值,判斷和下一個區(qū)塊中的前一區(qū)塊hash值是否相同,如果相同,則分支鏈上的第一個區(qū)塊滿足分支鏈的協(xié)議,繼續(xù)驗證分支鏈上的其他區(qū)塊是否滿足分支鏈的協(xié)議,如所述分支鏈上的所有區(qū)塊均不滿足所述分支鏈的協(xié)議則被視為無效;
更具體地,驗證分支鏈上所有區(qū)塊的時間戳是否滿足分支鏈的協(xié)議,具體為:判斷分支鏈上每個區(qū)塊的時間戳是否滿足分支鏈協(xié)議規(guī)定的時間戳的格式,如果是,則分支鏈上每個區(qū)塊滿足分支鏈的協(xié)議,并按照分支鏈的協(xié)議在分支鏈上添加新的區(qū)塊,否則分支鏈被視為無效。
實施例二
本實施例中,提供了一種多協(xié)議區(qū)塊鏈的工作方法,參見圖1,具體步驟包括:
步驟101:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建創(chuàng)世區(qū)塊;
創(chuàng)世區(qū)塊是主區(qū)塊鏈的開端。具體地,證明標準可以是基于工作量的證明(例如對hash值的要求)、權(quán)益證明、密鑰或者其他任何種類的一致性證明;凈負荷里根據(jù)不同應用的需求寫入相應存儲的數(shù)據(jù)和主區(qū)塊鏈上執(zhí)行的協(xié)議,可以是固定長度或者可變長度,本實施例中,以主區(qū)塊鏈執(zhí)行協(xié)議a為例,協(xié)議a是主區(qū)塊鏈默認的協(xié)議,決定是否允許分支鏈的創(chuàng)建,定義主區(qū)塊鏈區(qū)塊上數(shù)據(jù)的存儲,進行主區(qū)塊鏈區(qū)塊及分支鏈有效性驗證等,在本實施例中設定其所占空間大小不超過1mb;描述符描述凈負荷的大小和數(shù)據(jù)的信息;分支標識決定該區(qū)塊是否允許存在分支。
例如,證明標準為258522748404,描述符為2224550616,分支標識00;其中,分支標識00表示無分支的標準區(qū)塊,01表示此區(qū)塊允許存在分支。
步驟102:根據(jù)創(chuàng)世區(qū)塊的凈負荷計算凈負荷hash值;
具體地,計算凈負荷hash值的算法有md5、sha-1、sha-224、sha-256、sha-384、sha-512、sha-512/224、sha-512/256、sha3等,可以使用同一個算法或不同的算法經(jīng)過一次或多次計算得到凈負荷hash值。
例如,在本實施中計算的凈負荷hash值為:
5812db5df9e4782132833dbf88b902b3a0b5ca9961b5705d00c62b947420cf62。
步驟103:為創(chuàng)世區(qū)塊添加時間戳;
在本實施例中,為創(chuàng)世區(qū)塊添加時間戳后,創(chuàng)世區(qū)塊已經(jīng)建成,創(chuàng)世區(qū)塊如圖2所示,包括:隨機數(shù)、凈負荷hash值、時間戳、證明標準、凈負荷、描述符以及分支標識,需要說明的是,創(chuàng)世區(qū)塊作為主區(qū)塊鏈的開端,是一個特殊的區(qū)塊,不包含前一區(qū)塊hash值。
具體地,時間戳記錄了區(qū)塊建立的時間,允許有一定范圍內(nèi)的誤差,分布式網(wǎng)絡的用戶查驗時間戳可檢驗其是否為一個偽造的時間戳。
例如,創(chuàng)建創(chuàng)世區(qū)塊的時間為2016年10月20日上午10點33分19秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476930799。
步驟104:根據(jù)證明標準、凈負荷、描述符以及分支標識按照主區(qū)塊鏈協(xié)議創(chuàng)建標準區(qū)塊;
在本實施例中,標準區(qū)塊此時的凈負荷執(zhí)行協(xié)議a。
例如,證明標準為258522748404,描述符為2224550616,分支標識為00。
步驟105:根據(jù)標準區(qū)塊的凈負荷計算凈負荷hash值;
例如,計算的凈負荷hash值為:
428516a06795ccc26829ccf63f994b86f9a53221d73110b9c7e9bd0fc3dfd471。
步驟106:為標準區(qū)塊添加時間戳;
例如,創(chuàng)建創(chuàng)世區(qū)塊的時間為2016年10月20日上午10點55分56秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476932156。
步驟107:根據(jù)創(chuàng)世區(qū)塊中的證明標準,使用創(chuàng)世區(qū)塊的凈負荷hash值、時間戳、證明標準、描述符、分支標識及隨機數(shù)計算創(chuàng)世區(qū)塊的hash值,并存入標準區(qū)塊作為標準區(qū)塊的前一區(qū)塊hash值;
在本實施例中,算出創(chuàng)世區(qū)塊的hash值并存入標準區(qū)塊作為標準區(qū)塊的前一區(qū)塊hash值,標準區(qū)塊已經(jīng)建成,標準區(qū)塊如圖3所示,主要包括:前一區(qū)塊hash值、隨機數(shù)、凈負荷hash值、時間戳、證明標準、凈負荷、描述符以及分支標識,其中,凈負荷hash值是對凈負荷做了hash運算得到的。
具體地,在本實施例中通過不斷調(diào)整改變隨機數(shù)的值,計算出符合證明標準的有效分支區(qū)塊的hash值。計算hash值的算法有md5、sha-1、sha-224、sha-256、sha-384、sha-512、sha-512/224、sha-512/256、sha3等,可以使用同一個算法或不同的算法經(jīng)過一次或多次計算得到創(chuàng)世區(qū)塊的hash值。
例如,隨機數(shù)為:2199601046,計算得到的創(chuàng)世區(qū)塊的hash值為:
b27a85ced3ae9e22b5f4066790a9954fa72cf320a9dfcea9257190c5a21ff925。
按照上述創(chuàng)建標準區(qū)塊的方法,用戶可根據(jù)創(chuàng)建多個標準區(qū)塊,組成一條主區(qū)塊鏈。
步驟108:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支區(qū)塊;
在本實施例中,分支區(qū)塊的凈負荷里寫的協(xié)議和分支鏈的協(xié)議相同,但是分支區(qū)塊仍然執(zhí)行主區(qū)塊鏈的協(xié)議,即在本實施例中分支區(qū)塊寫入的是協(xié)議b,但仍執(zhí)行協(xié)議a。
例如,證明標準為:258522748404,描述符為:2224550616,分支標識為:01。
步驟109:根據(jù)分支區(qū)塊中的凈負荷計算凈負荷hash值;
例如,分支區(qū)塊的凈負荷計算凈負荷hash值為:
428516a06795ccc26829ccf63f994b86f9a53221d73110b9c7e9bd0fc3dfd471。
步驟110:為分支區(qū)塊添加時間戳;
例如,創(chuàng)建分支區(qū)塊的時間為2016年10月20日上午11點10分12秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476933012。
步驟111:根據(jù)標準區(qū)塊中的證明標準,使用標準區(qū)塊中的前一個區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)計算標準區(qū)塊的hash值,并存入分支區(qū)塊作為分支區(qū)塊的前一區(qū)塊hash值;
例如,隨機數(shù)為:927bf6aeb9,算得標準區(qū)塊的hash值為:
e1b7efc6c6aeb73eb608d38b144da3077f74c6060e6aaa6a400ce7a5f59e9783。
步驟112:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支鏈根區(qū)塊;
在本實施例中,凈負荷中有根據(jù)不同應用的需求寫入相應存儲的數(shù)據(jù)和分支鏈上執(zhí)行的協(xié)議,在分支鏈根區(qū)塊的凈負荷里寫入分支鏈需要執(zhí)行的協(xié)議,本實施例中,以分支鏈執(zhí)行協(xié)議b為例,協(xié)議b應用于分支鏈根區(qū)塊及接下來連接于分支鏈根區(qū)塊之后的分支鏈路中。
例如,如果系統(tǒng)中的分支被惡意復制,即復制一個和已被合法授權(quán)的分支根區(qū)塊完全一樣的區(qū)塊,系統(tǒng)會自動忽略該復制區(qū)塊。即使要在復制的區(qū)塊后添加新的區(qū)塊,系統(tǒng)會認為新的區(qū)塊為鏈接在已被合法授權(quán)的分支根區(qū)塊上。
例如,證明標準為:374820264590,描述符為:371829340297以及分支標識00。
步驟113:根據(jù)分支鏈根區(qū)塊中的凈負荷計算凈負荷hash值;
例如,凈負荷hash值為:
896be254c089dae7b66b50275551927037ce0cc83e74839738fdbfca82d1ff3d。
步驟114:為分支鏈根區(qū)塊添加時間戳;
例如,創(chuàng)建分支鏈根區(qū)塊的時間為2016年10月20日上午11點26分28秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476933988。
步驟115:根據(jù)分支鏈根區(qū)塊中的證明標準、凈負荷、描述符、分支標識、凈負荷hash值以及時間戳計算分支鏈根區(qū)塊的短hash值,并將短hash值存入分支區(qū)塊作為分支區(qū)塊的授權(quán)hash;
在本實施例中,分支鏈根區(qū)塊的短hash值作為授權(quán)hash存入分支區(qū)塊,分支區(qū)塊已經(jīng)建成。
例如,算得分支鏈根區(qū)塊的短hash值為:
ef96b09775ba3b3341f9832a608948151ee0027e690c8672a476351a9f7625d。
步驟116:根據(jù)分支區(qū)塊中的證明標準,使用分支區(qū)塊的前一個區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算分支區(qū)塊的hash值,作為分支鏈根區(qū)塊的前一區(qū)塊hash值;
具體地,在本實施例中通過不斷調(diào)整改變隨機數(shù)的值,計算出符合證明標準的有效分支區(qū)塊的hash值。
例如,隨機數(shù)為:2d06607889,算得分支區(qū)塊的hash值為:
c61845fde8183851d88062e38419f08ab36f54dbfb74bca8e01675bfa765d854
在本實施例中,分支鏈根區(qū)塊存儲分支區(qū)塊的hash值作為分支鏈根區(qū)塊的前一區(qū)塊hash值,分支鏈根區(qū)塊已經(jīng)建成。分支區(qū)塊的hash值作為分支鏈根區(qū)塊的前一區(qū)塊hash值,完成了雙方引用的過程,確保分支鏈根區(qū)塊是分支區(qū)塊的一個被認證的有效分支。分支區(qū)塊和分支鏈根區(qū)塊的相關(guān)數(shù)據(jù)相互引用的示意圖如圖4所示。
用戶可根據(jù)自身業(yè)務的需求,按照上述方法,根據(jù)分支鏈的協(xié)議繼續(xù)在支鏈上繼續(xù)創(chuàng)建標準區(qū)塊,實現(xiàn)步驟在實施例三進行詳述。
例如,本實施例中,創(chuàng)建一條有效分支鏈的區(qū)塊鏈的示意圖如圖5所示。主區(qū)塊鏈標準區(qū)塊的凈負荷里面存在的是協(xié)議a,分支鏈根區(qū)塊(或分支區(qū)塊)的凈負荷里面存在的是分支鏈的協(xié)議b,執(zhí)行協(xié)議a的主區(qū)塊鏈和執(zhí)行協(xié)議b的分支鏈路都被視為有效鏈路。
實施例三
本實施例中,分支鏈根區(qū)塊也可作為分支區(qū)塊,即一個分支鏈根區(qū)塊上可以創(chuàng)建多條不同協(xié)議的分支鏈。創(chuàng)建多條分支鏈和多種協(xié)議的區(qū)塊鏈的實現(xiàn)方法,參見圖6,具體步驟包括:
步驟201:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建創(chuàng)世區(qū)塊;
創(chuàng)世區(qū)塊是主區(qū)塊鏈的開端。具體地,證明標準可以是基于工作量的證明(例如對hash值的要求)、權(quán)益證明、密鑰或者其他任何種類的一致性證明;凈負荷里根據(jù)不同應用的需求寫入相應存儲的數(shù)據(jù)和分支鏈上執(zhí)行的協(xié)議,可以是固定長度或者可變長度,本實施例中,以主區(qū)塊鏈執(zhí)行協(xié)議a為例,協(xié)議a是主區(qū)塊鏈默認的協(xié)議,決定是否允許分支鏈的創(chuàng)建,定義主區(qū)塊鏈區(qū)塊上數(shù)據(jù)的存儲,進行主區(qū)塊鏈區(qū)塊及分支鏈有效性驗證等;描述符描述凈負荷的大小和數(shù)據(jù)的信息;分支標識決定該區(qū)塊是否允許存在分支的標志位。
例如,證明標準為258522748404,描述符為2224550616,分支標識00;其中,分支標識00表示無分支的標準區(qū)塊,01表示此區(qū)塊允許存在分支。
步驟202:根據(jù)創(chuàng)世區(qū)塊中的凈負荷計算凈負荷hash值;
具體地,計算凈負荷hash值的算法有md5、sha-1、sha-224、sha-256、sha-384、sha-512、sha-512/224、sha-512/256、sha3等,可以使用同一個算法或不同的算法經(jīng)過一次或多次計算得到凈負荷hash值。
例如,在本實施中計算的凈負荷hash值為:
5812db5df9e4782132833dbf88b902b3a0b5ca9961b5705d00c62b947420cf62。
步驟203:為創(chuàng)世區(qū)塊添加時間戳;
在本實施例中,為創(chuàng)世區(qū)塊添加時間戳后,創(chuàng)世區(qū)塊已經(jīng)建成。具體地,時間戳記錄了區(qū)塊建立的時間,允許有一定范圍內(nèi)的誤差,分布式網(wǎng)絡的用戶查驗時間戳可檢驗其是否為一個偽造的時間戳。
例如,創(chuàng)建創(chuàng)世區(qū)塊的時間為2016年10月20日上午10點33分19秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476930799。
步驟204:根據(jù)證明標準、凈負荷、描述符以及分支標識按照主區(qū)塊鏈協(xié)議創(chuàng)建標準區(qū)塊;
例如,證明標準為258522748404,描述符為2224550616,分支標識為00。
步驟205:根據(jù)標準區(qū)塊中的凈負荷計算凈負荷hash值;
在本實施例中,標準區(qū)塊此時的凈負荷執(zhí)行協(xié)議a。
例如,計算的凈負荷hash值為:
428516a06795ccc26829ccf63f994b86f9a53221d73110b9c7e9bd0fc3dfd471。
步驟206:為標準區(qū)塊添加時間戳;
例如,創(chuàng)建創(chuàng)世區(qū)塊的時間為2016年10月20日上午10點55分56秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476932156。
步驟207:根據(jù)創(chuàng)世區(qū)塊中的證明標準,使用創(chuàng)世區(qū)塊中的凈負荷hash值、時間戳、證明標準、描述符、分支標識及隨機數(shù)計算創(chuàng)世區(qū)塊的hash值,并存入標準區(qū)塊作為標準區(qū)塊的前一區(qū)塊hash值;
具體地,在本實施例中通過不斷調(diào)整改變隨機數(shù)的值,計算出符合證明標準的有效分支區(qū)塊的hash值。計算hash值的算法有md5、sha-1、sha-224、sha-256、sha-384、sha-512、sha-512/224、sha-512/256、sha3等,可以使用同一個算法或不同的算法經(jīng)過一次或多次計算得到創(chuàng)世區(qū)塊的hash值。
例如,隨機數(shù)為:2199601046,計算得到的創(chuàng)世區(qū)塊的hash值為:
b27a85ced3ae9e22b5f4066790a9954fa72cf320a9dfcea9257190c5a21ff925。
按照上述創(chuàng)建標準區(qū)塊的方法,用戶可根據(jù)創(chuàng)建多個標準區(qū)塊,組成一條主區(qū)塊鏈。
步驟208:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支區(qū)塊;
在本實施例中,分支區(qū)塊的凈負荷里寫的協(xié)議和分支鏈的協(xié)議相同,但是分支區(qū)塊仍然執(zhí)行主區(qū)塊鏈的協(xié)議,即在本實施例中分支區(qū)塊寫入的是協(xié)議b,但仍執(zhí)行協(xié)議a。
例如,證明標準為:258522748404,描述符為:2224550616,分支標識為:01。
步驟209:根據(jù)分支區(qū)塊中的凈負荷計算凈負荷hash值;
例如,分支區(qū)塊的凈負荷計算凈負荷hash值為:
428516a06795ccc26829ccf63f994b86f9a53221d73110b9c7e9bd0fc3dfd471。
步驟210:為分支區(qū)塊添加時間戳;
例如,創(chuàng)建分支區(qū)塊的時間為2016年10月20日上午11點10分12秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476933012。
步驟211:根據(jù)標準區(qū)塊中的證明標準,使用標準區(qū)塊的前一個區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算標準區(qū)塊的hash值,并存入分支區(qū)塊作為分支區(qū)塊的前一區(qū)塊hash值;
例如,隨機數(shù)為:927bf6aeb9,算得標準區(qū)塊的hash值為:
e1b7efc6c6aeb73eb608d38b144da3077f74c6060e6aaa6a400ce7a5f59e9783。
步驟212:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支鏈根區(qū)塊;
在本實施例中,凈負荷里根據(jù)不同應用的需求寫入相應存儲的數(shù)據(jù)和分支鏈上執(zhí)行的協(xié)議,在分支鏈根區(qū)塊的凈負荷里寫入分支鏈需要執(zhí)行的協(xié)議,本實施例中,以分支鏈執(zhí)行協(xié)議b為例,協(xié)議b應用于分支鏈根區(qū)塊及接下來連接于分支鏈根區(qū)塊之后的分支鏈路中。
例如,如果系統(tǒng)中的分支被惡意復制,即復制一個和已被合法授權(quán)的分支根區(qū)塊完全一樣的區(qū)塊,系統(tǒng)會自動忽略該克隆區(qū)塊。即使要在克隆的區(qū)塊后添加新的區(qū)塊,系統(tǒng)會認為新的區(qū)塊為鏈接在已被合法授權(quán)的分支根區(qū)塊上。
例如,證明標準為:374820264590,描述符為:371829340297以及分支標識01。
步驟213:根據(jù)分支鏈根區(qū)塊中的凈負荷計算凈負荷hash值;
例如,凈負荷hash值為:
896be254c089dae7b66b50275551927037ce0cc83e74839738fdbfca82d1ff3d。
步驟214:為分支鏈根區(qū)塊添加時間戳;
例如,創(chuàng)建分支鏈根區(qū)塊的時間為2016年10月20日上午11點26分28秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476933988。
步驟215:根據(jù)分支區(qū)塊中的證明標準,使用分支區(qū)塊中的前一個區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算分支區(qū)塊的hash值,并存入分支鏈根區(qū)塊作為分支鏈根區(qū)塊的前一區(qū)塊hash值;
例如,隨機數(shù)為:2d06607889,算得分支區(qū)塊的hash值為:
a36fce8c4f207bd2c022013b85e8ea08b5749467443e5f6f16535679edbdb564
需要說明的是,根據(jù)分支鏈根區(qū)塊的協(xié)議可繼續(xù)在支鏈上繼續(xù)創(chuàng)建標準區(qū)塊,詳細步驟如實施例三所示,在此不再贅述。
步驟216:根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支根分支區(qū)塊;
在本實施例中,凈負荷里根據(jù)不同應用的需求寫入相應存儲的數(shù)據(jù)和分支鏈上執(zhí)行的協(xié)議,在分支根分支區(qū)塊的凈負荷里寫入分支鏈需要執(zhí)行的協(xié)議。用戶可以按照實際情況創(chuàng)建多個分支根分支區(qū)塊,在本實施例中,以創(chuàng)建兩個分支根分支區(qū)塊為例。本實施例中,兩條分支鏈分別執(zhí)行協(xié)議c、協(xié)議d,協(xié)議c和協(xié)議d分別應用于分支根分支區(qū)塊及接下來連接于分支根分支區(qū)塊之后的分支鏈路中。
例如,第一個分支根分支區(qū)塊的證明標準為:8d3b1be98445,描述符為:473044022075,分支標識為:00。
步驟217:根據(jù)分支根分支區(qū)塊中的凈負荷計算凈負荷hash值;
例如,分支根分支區(qū)塊的凈負荷hash值為:
038edfbcd15127659e167c8bb9c991ae5befbeeb4dc35cce4912c67abf915c62。
步驟218:為分支根分支區(qū)塊添加時間戳;
例如,分支根分支區(qū)塊的創(chuàng)建時間為2016年10月20日上午11點38分8秒,經(jīng)過unix時間戳轉(zhuǎn)換后為1476934688。
步驟219:根據(jù)分支根分支區(qū)塊中的證明標準、凈負荷、描述符、分支標識、凈負荷hash值以及時間戳計算分支根分支區(qū)塊的短hash值,并將短hash值存入分支鏈分支區(qū)塊作為分支鏈分支區(qū)塊的授權(quán)hash;
例如,分支根分支區(qū)塊的短hash值為:
05f7d42fb70c4430d3bb164f58c1c847cc8fe877356432042ef0e83ee01d24d7
步驟220:根據(jù)分支鏈根區(qū)塊中的證明標準,使用分支鏈根區(qū)塊中的前一個區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算分支鏈根區(qū)塊的hash值,并存入分支根分支區(qū)塊作為分支根分支區(qū)塊的前一區(qū)塊hash值;
在本實施例中,分支根分支區(qū)塊存儲分支鏈根區(qū)塊的hash值作為分支根分支區(qū)塊的前一區(qū)塊hash值后,分支根分支區(qū)塊已經(jīng)建成。
例如,隨機數(shù)為:2199601046,分支鏈根區(qū)塊的hash值為:
038edfbcd15127659e167c8bb9c991ae5befbeeb4dc35cce4912c67abf915c62
用戶可根據(jù)實際情況在分支根分支區(qū)塊后繼續(xù)創(chuàng)建標準區(qū)塊。詳細步驟如實施例四所示,在此不再贅述。
例如,創(chuàng)建多條有效分支鏈的區(qū)塊鏈,示意圖如圖7所示。創(chuàng)建完分支區(qū)塊和分支鏈根區(qū)塊后,按照協(xié)議創(chuàng)建了兩個分支根分支區(qū)塊,兩條有效分支鏈分別執(zhí)行協(xié)議c和d。
實施例四
本實施例中提供了一種在分支鏈上創(chuàng)建標準區(qū)塊的流程圖,參見圖8,具體包括:
步驟301:驗證分支鏈根區(qū)塊的前一個區(qū)塊hash值是否為其連接在主區(qū)塊鏈上的分支區(qū)塊的hash值,如果是,則執(zhí)行步驟302,否則分支鏈無效,結(jié)束;
具體地,在本實施例中,根據(jù)已經(jīng)創(chuàng)建好的分支區(qū)塊的前一區(qū)塊hash、隨機數(shù)、凈負荷hash值、時間戳、證明標準、描述符、分支標識、授權(quán)hash、凈負荷按照創(chuàng)建分支鏈根區(qū)塊時計算前一個區(qū)塊hash值的算法,再次算出分支區(qū)塊的hash值,并與分支鏈根區(qū)塊的前一個區(qū)塊hash值進行比對,若兩個值相等,則執(zhí)行步驟302,否則,分支鏈根區(qū)塊所在的分支鏈無效,結(jié)束。
步驟302:驗證分支鏈根區(qū)塊的短hash值是否為其連接在主區(qū)塊鏈的分支區(qū)塊中的授權(quán)hash,如果是,則執(zhí)行步驟303,否則分支鏈無效,結(jié)束;
具體地,在本實施例中,根據(jù)分支鏈根區(qū)塊的凈負荷hash值、時間戳、證明標準、描述符、分支標識按照創(chuàng)建分支區(qū)塊時計算分支鏈根區(qū)塊短hash的算法,再次算出分支鏈根區(qū)塊的短hash值,并與分支區(qū)塊的授權(quán)hash值進行對比,若兩個值相等,則執(zhí)行步驟303,否則,分支鏈根區(qū)塊所在的分支鏈無效,結(jié)束。
步驟303:判斷是否還存在其他的前一個區(qū)塊hash值和分支區(qū)塊的hash值相等的分支鏈根區(qū)塊,是則,在與分支區(qū)塊相連的分支鏈中選取長度最長的分支鏈作為合法分支鏈,執(zhí)行步驟304,否則,分支鏈根區(qū)塊合法,繼續(xù)執(zhí)行步驟304;
步驟304:從合法的分支鏈根區(qū)塊或主區(qū)塊鏈的分支區(qū)塊的凈負荷上讀取分支鏈的協(xié)議;
在本實施例中,分支鏈的協(xié)議可以存在于分支區(qū)塊上,也可以存在于分支根區(qū)塊上。
步驟305:驗證分支鏈上所有區(qū)塊的hash值是否滿足分支鏈的協(xié)議,是則執(zhí)行步驟306,否則分支鏈無效,結(jié)束。
在本實施例中,分支鏈的協(xié)議里面規(guī)定了計算區(qū)塊hash值的算法等一系列要求,判斷按照分支鏈協(xié)議規(guī)定的計算區(qū)塊hash值的算法算得的區(qū)塊hash值和存在下一個區(qū)塊的前一個區(qū)塊hash值是否相同,如果相同,則滿足分支鏈的協(xié)議,繼續(xù)執(zhí)行步驟306,否則,此條分支鏈無效,結(jié)束。
步驟306:驗證分支鏈上所有區(qū)塊的時間戳是否滿足分支鏈的協(xié)議,是則分支鏈有效,繼續(xù)執(zhí)行步驟307,否則分支鏈無效,結(jié)束。
在本實施例中,分支鏈的協(xié)議里面規(guī)定了時間戳的格式等一系列要求,判斷分支鏈上每個區(qū)塊的時間戳是否滿足分支鏈協(xié)議的規(guī)定,如果滿足,則繼續(xù)執(zhí)行步驟306,否則,此條分支鏈無效,結(jié)束。
步驟307:根據(jù)分支鏈的協(xié)議在有效的分支鏈末端添加新的標準區(qū)塊。
具體地,創(chuàng)建的標準區(qū)塊的步驟在實施例一和實施例二中已詳細敘述,在此不再贅述。
實施例五
本實施例提供了一種多協(xié)議區(qū)塊鏈的裝置,如圖9所示,裝置包括:
第一創(chuàng)建模塊401,用于創(chuàng)建創(chuàng)世區(qū)塊并按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建標準區(qū)塊;
第一計算模塊402,用于計算創(chuàng)世區(qū)塊的hash值;
第一存儲模塊403,用于將第一計算模塊402得到的創(chuàng)世區(qū)塊的hash值存入第一創(chuàng)建模塊401創(chuàng)建的標準區(qū)塊,鏈接成主區(qū)塊鏈;
第一添加模塊404,用于按照創(chuàng)世區(qū)塊的協(xié)議在主區(qū)塊鏈上添加區(qū)塊;
第二創(chuàng)建模塊405,用于在主區(qū)塊鏈上創(chuàng)建分支區(qū)塊,并創(chuàng)建分支鏈根區(qū)塊;
第二計算模塊406,用于計算分支鏈根區(qū)塊的短hash值;
第二存儲模塊407,用于將第二計算模塊406得到的短hash值作為授權(quán)hash存入第二創(chuàng)建模塊405創(chuàng)建的分支區(qū)塊中;
第三計算模塊408,用于計算分支區(qū)塊的hash值;
第三存儲模塊409,用于將第三計算模塊408得到的分支區(qū)塊的hash值存入第二創(chuàng)建模塊405創(chuàng)建的分支鏈根區(qū)塊中,鏈接成分支鏈;
第一驗證模塊410,用于當需在分支鏈上添加新的區(qū)塊時,驗證分支鏈根區(qū)塊是否合法;
讀取模塊411,用于當?shù)谝或炞C模塊410驗證分支鏈根區(qū)塊合法時,讀取分支鏈的協(xié)議;
第二驗證模塊412,用于驗證讀取模塊411讀取到的分支鏈的協(xié)議的有效性;
第二添加模塊413,用于當?shù)诙炞C模塊驗證412分支鏈的協(xié)議的有效時,按照分支鏈的協(xié)議在分支鏈上添加新的區(qū)塊。
具體地,在本實施例中,第一創(chuàng)建模塊,具體包括:第一創(chuàng)建單元、第一計算單元、第一添加單元、第二創(chuàng)建單元、第二計算單元、第二添加單元、第三創(chuàng)建單元、第三計算單元和第三添加單元;
第一創(chuàng)建單元,用于根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建創(chuàng)世區(qū)塊;
第一計算單元,用于根據(jù)創(chuàng)建第一創(chuàng)建單元的凈負荷計算創(chuàng)世區(qū)塊的凈負荷hash值;
第一添加單元,用于為創(chuàng)世區(qū)塊添加時間戳;
第二創(chuàng)建單元,用于根據(jù)證明標準、凈負荷、描述符以及分支標識按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建標準區(qū)塊;
第二計算單元,用于根據(jù)標準區(qū)塊的凈負荷計算標準區(qū)塊的凈負荷hash值;
第二添加單元,用于為標準區(qū)塊添加時間戳;
第三創(chuàng)建單元,用于根據(jù)證明標準、凈負荷、描述符以及分支標識按照創(chuàng)世區(qū)塊的協(xié)議創(chuàng)建分支區(qū)塊;
第三計算單元,用于根據(jù)分支區(qū)塊的凈負荷計算分支區(qū)塊的凈負荷hash值;
第三添加單元,用于為分支鏈根區(qū)塊添加時間戳。
具體地,第二創(chuàng)建模塊,具體包括:第四創(chuàng)建單元、第四計算單元和第四添加模塊;
第四創(chuàng)建單元,用于根據(jù)證明標準、凈負荷、描述符以及分支標識創(chuàng)建分支鏈根區(qū)塊;
第四計算單元,用于根據(jù)第四創(chuàng)建單元創(chuàng)建的分支鏈根區(qū)塊的凈負荷計算分支鏈根區(qū)塊的凈負荷hash值;
第四添加模塊,用于為分支鏈根區(qū)塊添加時間戳。
進一步地,第一計算模塊,具體用于根據(jù)創(chuàng)世區(qū)塊的證明標準,使用創(chuàng)世區(qū)塊中的凈負荷hash值、時間戳、證明標準、描述符、分支標識及隨機數(shù)計算創(chuàng)世區(qū)塊的hash值;
第一存儲模塊,具體用于將第一計算單元計算的創(chuàng)世區(qū)塊的hash值作為標準區(qū)塊的前一區(qū)塊hash值存入標準區(qū)塊,鏈接成主區(qū)塊鏈。
進一步地,第二計算模塊,具體用于:根據(jù)分支鏈根區(qū)塊中的證明標準、凈負荷、描述符、分支標識、凈負荷hash值以及時間戳計算分支鏈根區(qū)塊的短hash值;
具體地,第二存儲模塊,具體用于:將第二計算模塊計算的分支鏈根區(qū)塊的短hash值作為分支區(qū)塊的授權(quán)hash存入分支區(qū)塊;
具體地,第三計算模塊,具體用于:根據(jù)分支區(qū)塊的證明標準,使用分支區(qū)塊中的前一區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算分支區(qū)塊的hash值;
具體地,第三存儲模塊,具體用于:將第三計算模塊計算的分支區(qū)塊的hash值作為分支鏈根區(qū)塊的前一區(qū)塊hash值存入分支鏈根區(qū)塊。
優(yōu)選地,本裝置還包括:第四計算模塊和第四存儲模塊;
第四計算模塊,用于根據(jù)分支區(qū)塊在主區(qū)塊鏈上的前一個區(qū)塊中的證明標準,使用分支區(qū)塊在主區(qū)塊鏈上的前一個區(qū)塊中的前一區(qū)塊hash值、凈負荷hash值、時間戳、證明標準、描述符、分支標識、隨機數(shù)及授權(quán)hash計算前一區(qū)塊hash值;
第四存儲模塊,用于將第四計算模塊計算的前一區(qū)塊hash值存入分支區(qū)塊。
進一步地,驗證模塊包括:第一驗證單元和第二驗證單元;
第一驗證單元,用于驗證分支鏈根區(qū)塊中的前一區(qū)塊hash值是否和主區(qū)塊鏈上的分支區(qū)塊的hash值相同;
第二驗證單元,用于當?shù)谝或炞C單元驗證分支鏈根區(qū)塊的前一區(qū)塊hash值和主區(qū)塊鏈上的分支區(qū)塊的hash值相同時,驗證分支鏈根區(qū)塊的短hash值是否和主區(qū)塊鏈上的分支區(qū)塊中的授權(quán)hash相同;
具體地,讀取模塊,具體用于當?shù)诙炞C單元驗證分支鏈根區(qū)塊的短hash值和主區(qū)塊鏈上的分支區(qū)塊中的授權(quán)hash相同時,讀取分支鏈的協(xié)議。
更進一步地,第一驗證單元包括:第一計算子單元和第一驗證子單元,第二驗證單元包括:第二計算子單元和第二驗證子單元;
第一計算子單元,用于根據(jù)分支區(qū)塊中的前一區(qū)塊hash值、隨機數(shù)、凈負荷hash值、時間戳、證明標準、描述符、分支標識、授權(quán)hash以及凈負荷算出分支區(qū)塊的hash值;
第一驗證子單元,用于驗證第一計算子單元計算得到的分支區(qū)塊的hash值是否與分支鏈根區(qū)塊的前一區(qū)塊hash值相同;
第二計算子單元,用于當?shù)谝或炞C子單元驗證第一計算子單元計算得到的分支區(qū)塊的hash值與分支鏈根區(qū)塊的前一區(qū)塊hash值相同時,根據(jù)分支鏈根區(qū)塊的凈負荷hash值、時間戳、證明標準、描述符以及分支標識算出分支鏈根區(qū)塊的短hash值;
第二驗證子單元,用于驗證第二計算子單元計算得到的分支鏈根區(qū)塊的短hash值是否與分支區(qū)塊的授權(quán)hash值相同;
讀取模塊,具體用于當?shù)诙炞C子單元驗證與分支區(qū)塊的授權(quán)hash值相同時,讀取分支鏈的協(xié)議并。
更進一步地,裝置還包括:判斷模塊和選擇模塊;
判斷模塊,用于判斷是否存在其他的前一區(qū)塊hash值和分支區(qū)塊的hash值相等的分支鏈根區(qū)塊;
選擇模塊,用于當判斷模塊判斷存在另一個前一區(qū)塊hash值和分支區(qū)塊的hash值相等的分支鏈根區(qū)塊時,在與分支區(qū)塊相連的分支鏈中選取長度最長的分支鏈作為合法分支鏈;
讀取模塊,還用于當選擇模塊選取長度最長的分支鏈作為合法分支鏈后,讀取合法分支鏈的協(xié)議。
讀取模塊,具體用于從分支鏈根區(qū)塊或主區(qū)塊鏈上的分支區(qū)塊里讀取分支鏈的協(xié)議。
具體地,驗證模塊包括:第三驗證單元和第四驗證單元;
第三驗證單元,用于驗證分支鏈上所有區(qū)塊的hash值是否滿足分支鏈的協(xié)議;
第四驗證單元,用于驗證分支鏈上所有區(qū)塊的時間戳是否滿足分支鏈的協(xié)議。
進一步地,第三驗證單元包括:第三計算子單元、第一判斷子單元和第三驗證子單元;
第三計算子單元,用于計算分支鏈上的第一個區(qū)塊的hash值;
第一判斷子單元,用于判斷第三計算子單元計算分支鏈上的第一個區(qū)塊的hash值和下一個區(qū)塊中的前一區(qū)塊hash值是否相同;
第三驗證子單元,用于當?shù)谝慌袛嘧訂卧袛嗟谌嬎阕訂卧嬎惴种ф溕系牡谝粋€區(qū)塊的hash值和下一個區(qū)塊中的前一區(qū)塊hash值相同時,驗證分支鏈上的下一個區(qū)塊是否滿足分支鏈的協(xié)議;
第四驗證單元,包括第二判斷子單元和添加子單元;
第二判斷子單元,用于判斷分支鏈上每個區(qū)塊的時間戳是否滿足分支鏈協(xié)議規(guī)定的時間戳的格式;
添加子單元,用于當?shù)诙袛嘧訂卧袛喾种ф溕厦總€區(qū)塊的時間戳均滿足分支鏈協(xié)議規(guī)定的時間戳的格式時,按照分支鏈的協(xié)議在分支鏈上添加新的區(qū)塊。
以上所述,僅為本發(fā)明較佳的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應以權(quán)利要求的保護范圍為準。