這裡將詳細地對示例性實施例進行說明,其示例表示在圖式中。下面的描述涉及圖式時,除非另有表示,不同圖式中的相同數字表示相同或相似的要素。以下示例性實施例中所描述的實施方式並不代表與本說明書一個或多個實施例相一致的所有實施方式。相反地,它們僅是與如所附申請專利範圍中所詳述的、本說明書一個或多個實施例的一些態樣相一致的裝置和方法的例子。
需要說明的是:在其他實施例中並不一定按照本說明書示出和描述的順序來執行對應方法的步驟。在一些其他實施例中,其方法所包括的步驟可以比本說明書所描述的更多或更少。此外,本說明書中所描述的單個步驟,在其他實施例中可能被分解為多個步驟進行描述;而本說明書中所描述的多個步驟,在其他實施例中也可能被合併為單個步驟進行描述。
圖1是一示例性實施例提供的一種欄位元更新方法的流程圖。如圖1所示,該方法可以包括以下步驟:
步驟102,區塊鏈網路中的區塊鏈節點獲取針對智能合約的欄位更新請求,所述欄位更新請求用於對所述智能合約包含的資料集合中的資料進行欄位更新。
在一實施例中,欄位更新請求可以承載於區塊鏈網路中創建的一筆交易,並透過在該交易中指明所需呼叫的智能合約的合約位址、埠資訊等,使得該欄位更新請求被確認為“針對”上述的智能合約,從而對該智能合約包含的資料集合進行欄位更新。
在一實施例中,本說明書中所描述的交易(transfer),是指透過區塊鏈節點對應的用戶端創建,並需要最終發布至區塊鏈網路的分散式資料庫中的一筆資料。其中,區塊鏈網路中的交易,存在狹義的交易以及廣義的交易之分。狹義的交易是指向區塊鏈網路發布的一筆價值轉移;例如,在傳統的比特幣區塊鏈網路中,交易可以是在區塊鏈網路中發起的一筆轉帳。而廣義的交易是指向區塊鏈網路發布的一筆具有業務意圖的業務資料;例如,營運方可以基於實際的業務需求搭建一個聯盟鏈,依託於聯盟鏈部署一些與價值轉移無關的其它類型的線上業務(比如,租房業務、車輛調度業務、保險理賠業務、信用服務、醫療服務等),而在這類聯盟鏈中,交易可以是在聯盟鏈中發布的一筆具有業務意圖的業務消息或者業務請求。
在一實施例中,本說明書中的欄位更新請求可以承載於上述廣義的交易,比如智能合約包含的資料集合從帳戶ID、電話號碼、身分證號碼、各類型區塊鏈資產的區塊鏈餘額等若干方面記載了使用者的帳戶資料,這些帳戶資料被分別記載於對應的欄位元中,該交易用於添加新的欄位,或者可以對已存在一個或多個欄位進行更新,比如修改欄位屬性、刪除欄位等。
在一實施例中,智能合約可以包括若干結構,比如用於記錄程式碼的code結構、用於記錄資料集合和元資料的storage結構等;在其他實施例中,程式碼、資料集合和元資料可以記錄於智能合約中的其他結構,本說明書並不對此進行限制。
在一實施例中,所述欄位更新請求的發起方可以包括:所述區塊鏈網路中的區塊鏈成員。區塊鏈成員的角色可以由個人、企業機構或平台等來承擔,並且可以基於該“區塊鏈成員”的角色在區塊鏈網路中實施對應的操作,比如發起上述的欄位更新請求等。
在一實施例中,所述欄位更新請求的發起方可以包括:區別於所述智能合約的另一智能合約。例如,基於該另一智能合約的合約操作在執行過程中需要對所述智能合約的資料集合中的資料進行欄位更新,使得基於該另一智能合約的合約操作可以發起上述的欄位更新請求,以實現對應的欄位更新操作。其中,該另一智能合約可以由區塊鏈成員所呼叫,或者由其他智能合約所呼叫,本說明書並不對此進行限制。
步驟104,所述區塊鏈節點根據所述欄位更新請求,對所述智能合約包含的元資料進行調整,以透過所述智能合約包含的程式碼對調整後的元資料的解析,使所述資料集合中的資料實現欄位更新。
在一實施例中,透過在智能合約中添加針對資料集合的元資料,使得資料集合中的資料需要實現欄位元更新時,無需對資料集合進行直接更新,而可以僅針對元資料進行更新,即可使得程式碼被執行以解析該元資料後,對資料集合實現上述的欄位更新,極大地簡化了欄位更新過程、提升了欄位更新效率。
在一實施例中,所述區塊鏈節點可以讀取所述欄位更新請求包含的輸入參數,所述輸入參數包括目標物件;其中,調整後的元資料用於從所述資料集合中確定出對應於所述目標物件的欄位,以刪除對應於所述目標物件的欄位。例如,智能合約中的資料集合用於記錄使用者對區塊鏈資產的持有情況,該持有情況可以包括若干方面的資訊,比如可以基於下述欄位進行記載:帳戶ID、電話號碼、身分證號碼、A類型區塊鏈資產的餘額、B類型區塊鏈資產的餘額、資產總額-人民幣(即換算為人民幣後的資產總額)等;假定對於“持有情況”不再需要記錄“資產總額-人民幣”,則可以透過發起上述的欄位更新請求,上述的目標物件可以包括所需刪除的欄位的名稱或標識等,以對智能合約包含的元資料進行更新,使得該元資料對資料集合的描述中去除與“資產總額-人民幣”欄位相關的資訊,從而在智能合約包含的程式碼對該元資料進行解析後,即可刪除“資產總額-人民幣”欄位,並使得該欄位對應的資料失效。
在一實施例中,所述區塊鏈節點可以讀取所述欄位更新請求包含的輸入參數,所述輸入參數包括目標物件和欄位屬性;其中,調整後的元資料用於從所述資料集合中確定出對應於所述目標物件的欄位,以將確定出的欄位的屬性更新為所述欄位屬性。例如,智能合約中的資料集合用於記錄使用者對區塊鏈資產的持有情況,該持有情況可以包括若干方面的資訊,比如可以基於下述欄位進行記載:帳戶ID、電話號碼、身分證號碼、A類型區塊鏈資產的餘額、B類型區塊鏈資產的餘額、資產總額-人民幣等;假定需要將“資產總額-人民幣”變更為“資產總額-美元(即換算為美元後的資產總額)”,則可以透過發起上述的欄位更新請求,上述的目標物件可以包括所需刪除的欄位的名稱或標識等,以對智能合約包含的元資料進行更新,使得該元資料對資料集合的描述中將原本的“資產總額-人民幣”欄位變更為“資產總額-美元”欄位元,當然還需要同步更新對該欄位的取值的計算方式,比如原本的“資產總額-人民幣”欄位元需要按照各類型的區塊鏈資產與人民幣之間的兌換比例進行計算,而變更後則需要按照各類型的區塊鏈資產與美元之間的兌換比例進行計算,該計算方式可以被記載於上述的欄位屬性中,並在上述對於元資料的更新操作中即可完成相關配置,從而在智能合約包含的程式碼對該元資料進行解析後,即可完成“資產總額-人民幣”欄位向“資產總額-美元”的變更。
在一實施例中,所述區塊鏈節點可以讀取所述欄位更新請求包含的輸入參數,所述輸入參數包括欄位屬性;其中,調整後的元資料用於在所述資料集合中添加欄位元,並將添加的欄位的屬性設定為所述欄位屬性。例如,智能合約中的資料集合用於記錄使用者對區塊鏈資產的持有情況,該持有情況可以包括若干方面的資訊,比如可以基於下述欄位進行記載:帳戶ID、電話號碼、身分證號碼、A類型區塊鏈資產的餘額、B類型區塊鏈資產的餘額、資產總額-人民幣等;假定需要增加“資產總額-美元”欄位,則可以發起上述的欄位更新請求,該欄位更新請求中包含的欄位屬性可以包括欄位名稱為“資產總額-美元”、該欄位取值的計算方式(涉及到各類型的區塊鏈資產與美元之間的兌換比例等)等,並據此對智能合約包含的元資料進行更新,使得該元資料對資料集合的描述中增加針對“資產總額-美元”欄位的內容,從而在智能合約包含的程式碼對該元資料進行解析後,即可完成“資產總額-人民幣”欄位向“資產總額-美元”的變更。
在一實施例中,所述資料集合包含至少一個使用者的資料;所述區塊鏈節點可以讀取所述欄位更新請求包含的輸入參數,所述輸入參數包括目標使用者的資訊,其中,調整後的元資料用於從所述資料集合中確定出所述目標使用者對應的資料,以對所述目標使用者對應的資料進行欄位更新。換言之,欄位更新請求可以針對資料集合中的全體用戶,也可以僅針對部分使用者,本說明書並不對此進行限制。例如,當輸入參數包括一個或多個使用者的資訊時,該一個或多個使用者即目標使用者,可以針對該目標使用者對應的資料進行欄位元更新,比如為部分持有X類型區塊鏈資產的用戶添加“X類型區塊鏈資產的餘額”欄位,該欄位的取值為對應用戶對X類型區塊鏈資產的持有數額。又例如,當輸入參數包括全體用戶或未指明具體使用者時,目標使用者可以為全體使用者,比如為全體用戶添加“X類型區塊鏈資產的餘額”欄位,該欄位的取值為對應用戶對X類型區塊鏈資產的持有數額。類似於上述實施例中的描述,當需要添加欄位元時,可以在欄位更新請求中包含欄位屬性,以使得針對元資料進行調整後,可以為目標使用者添加相關欄位,且添加的欄位的屬性被設定為該欄位屬性;當然,除了添加欄位之外,還可以對已有欄位進行更改或刪除,比如在對已有欄位進行更改時可在欄位更新請求中包含目標物件和欄位屬性,又比如在對已有欄位進行刪除時可在欄位更新請求中包含目標物件,此處不再贅述。
在一實施例中,所述區塊鏈節點可以透過運行所述智能合約包含的程式碼對所述調整後的元資料進行解析,以基於解析結果對所述資料集合的全量資料進行欄位更新。例如,當欄位元更新請求需要為全體使用者的資料添加一新欄位,或者為全體使用者的資料更改或刪除一已有欄位時,可以對全量資料(即全體使用者的資料)實施欄位更新,使得全體使用者的資料均添加了上述的新欄位,或者使得全體使用者的資料均更改或刪除了上述的已有欄位。其中,區塊鏈節點在對元資料完成調整後,即可立即或等待空閒時段透過執行程式碼而對調整後的元資料進行解析,以實現對全量資料的欄位更新。
在一實施例中,所述區塊鏈節點獲取針對所述智能合約的資料讀寫請求,所述資料讀寫請求用於對所述資料集合中的目標物件進行資料讀寫操作;所述區塊鏈節點透過運行所述智能合約包含的程式碼對所述調整後的元資料進行解析,解析結果用於確定所述目標物件在所述資料集合中對應的目標資料、對所述目標資料進行欄位更新,以對欄位更新後的所述目標資料實施所述資料讀寫操作。換言之,在針對元資料實施調整後,區塊鏈節點無需主動針對資料集合中的資料進行欄位更新,而是可以在針對資料集合中的一條或多條資料產生資料讀寫需求(如收到對應的資料讀寫請求)時,才針對該一條或多條資料實施欄位更新,比如添加相關欄位及其取值、刪除相關欄位及其取值或者修改相關欄位及其取值等,那麼當涉及相關欄位的數量較少時,可以極大地節省區塊鏈節點的資源消耗。
在一實施例中,在基於欄位更新請求對智能合約包含的元資料、資料集合中的資料進行更新後,智能合約實際上已經發生了資料變更,區塊鏈節點可以將變更後的智能合約發布至區塊鏈網路,並廣播至區塊鏈網路中的其他區塊鏈節點,從而使得該智能合約在整個區塊鏈網路上實現更新。
圖2是一示例性實施例提供的一種智能合約的結構示意圖。如圖2所示,在本說明書的實施例中,針對區塊鏈網路中的智能合約實施了結構改進,以實現基於本說明書的資料讀寫方案。其中,智能合約可以包括結構201,比如該結構201可以稱為code結構,用於記錄該智能合約的合約程式碼(簡稱為程式碼)。智能合約可以包括結構202,比如該結構202可以稱為storage結構,用於記錄該智能合約中的合約資料(簡稱為資料)、該合約資料對應的元資料,該元資料用於描述對應的合約資料。智能合約還可以包括其他的結構203,比如相關技術中的balance結構、nonce結構等,本說明書並不對此進行限制。其中,智能合約可以向外部提供針對結構201中合約程式碼的API介面,以實現針對該合約程式碼的呼叫。
基於如圖2所示結構的智能合約,可以實現本說明書的欄位更新方案。下面以針對區塊鏈餘額的管理操作為例,對基於本說明書的欄位更新方案進行詳細描述。假定區塊鏈網路的分散式帳本上記錄有智能合約S,該智能合約S包含的資料(或稱資料集合)如下表1所示,包括各個帳戶所屬使用者的個人資訊(如帳戶ID、年齡、地址等),以及各個帳戶對於各個類型的區塊鏈資產的持有情況。
Account ID
(帳戶ID) | Age
(年齡) | Tel
(電話) | … | Balance-Type A
(餘額-類型A) | Balance-Type B
(餘額-類型B) | Total-RMB
(總額-人民幣) |
0001 | 26 | 139… | … | 2000 | 1500 | 5000 |
0002 | 25 | 186… | … | 1000 | 6000 | 13000 |
0003 | 32 | 166… | … | 20000 | 2100 | 24200 |
… | … | … | … | … | … | … |
表1
在一實施例中,區塊鏈網路中存在一種角色為“錨點(anchor)”,錨點用於對區塊鏈網路上的區塊鏈資產與區塊鏈網路之外的鏈外資產之間進行錨定,使得鏈外資產能夠透過錨點兌換為等價的區塊鏈資產,也可以將區塊鏈資產透過錨點兌換為等價的鏈外資產,從而實現區塊鏈資產與鏈外資產之間的一一映射。假定某一錨點在區塊鏈網路中發布了新的類型X的區塊鏈資產,而該類型X的區塊鏈資產原本並未存在於如表1所示的資料中,因而需要向智能合約S包含的資料中添加對應欄位,以相容各個用戶在後續可能持有該類型X的區塊鏈資產時的情況。
圖3是一示例性實施例提供的一種添加新欄位的示意圖。如圖3所示,添加新欄位的過程可以包括以下步驟:
步驟301,創建交易。
在一實施例中,假定錨點A需要在區塊鏈網路中發行類型X的區塊鏈資產,該錨點A需要對上述的智能合約S包含的資料添加對應欄位,以用於記錄使用者對於該類型X的區塊鏈資產的持有情況。因此,該錨點A可以創建用於添加欄位元的交易——相當於欄位添加請求,並向區塊鏈網路發布這條交易。假定由區塊鏈節點G對錨點A發布的上述交易進行回應,該區塊鏈節點G通常為距離錨點A最近的區塊鏈節點,當然本說明書並不對此進行限制。
在一實施例中,假定智能合約S採用如圖2所示的資料結構時,該區塊鏈餘額的資料可以記錄於該智能合約S的storage結構中。智能合約S被創建並發布至區塊鏈網路後,在該區塊鏈網路中的各個區塊鏈節點之間達成共識,並記錄於各個區塊鏈節點上,比如上述的區塊鏈節點G上同樣記錄有該智能合約S。
在一實施例中,區塊鏈網路中可以存在很多的智能合約,以分別用於實現對應的事件或目的。因此,上述交易中可以包含智能合約S的合約位址、埠資訊等,以使得區塊鏈節點G可以基於該合約位元址確定該交易需要呼叫該智能合約S,並基於埠資訊對該智能合約S包含的合約程式碼進行呼叫,以實現對元資料的更新,並進一步在資料中添加新的欄位。
步驟302,區塊鏈節點G驗證錨點A對區塊鏈餘額的資料存取權限。
在一實施例中,智能合約S可以設定有資料存取權限,類似於白名單或黑名單的形式,以避免對元資料隨意修改,防止區塊鏈餘額等資料被篡改而發生安全性風險。例如,當區塊鏈網路屬於公有鏈時,具有資料存取權限的使用者可以為預先約定的部分使用者;又例如,當區塊鏈網路屬於聯盟鏈時,具有資料存取權限的使用者可以為聯盟成員。因此,當區塊鏈節點G獲取錨點A發布的交易,並確定該交易需要對智能合約S進行元資料更新時,可以首先確定該錨點A是否具有對應的資料存取權限,並在具有資料存取權限時繼續實施後續步驟,否則可以返回失敗資訊。
需要指出的是:基於區塊鏈網路的分散式資料儲存的特點,使得發布至區塊鏈網路的資料需要被記錄於所有區塊鏈節點上,使得這些資料不可篡改、可溯源。但是,對於諸如上述的區塊鏈餘額等可能具有一定私密性的資料及其元資料而言,如果發布至區塊鏈網路則可能造成私密性無法保障,而如果不發布至區塊鏈網路則可能存在資料內容不可靠的問題,並且不利於各個區塊鏈節點對於相關資料的快捷讀取和呼叫、對於元資料的調整等。因此,本說明書中透過將上述具有私密性需求的資料及其元資料記錄於智能合約中,並透過對資料存取權限的管理而限制無許可權使用者對相關資料及其元資料的隨意存取,使得這些資料及其元資料既能夠公佈至區塊鏈網路、以享有區塊鏈網路所帶來的可靠性與便利性,又能夠確保資料及其元資料具有足夠的私密性和安全性。
步驟303,在錨點A具有資料存取權限時,區塊鏈節點G呼叫上述的智能合約來更新元資料。
在一實施例中,錨點A可以在交易中註明目標使用者和欄位屬性,以針對該目標使用者添加基於該欄位屬性的新欄位。例如,當錨點A需要為所有使用者添加“類型X的區塊鏈餘額”欄位,以記錄各個使用者對X類型的區塊鏈資產的持有情況時,可以在交易中將目標使用者標注為“ALL”,而欄位屬性可以包括欄位名稱、X類型的區塊鏈資產與其他資產之間的兌換比例等,譬如欄位名稱可以為“Balance-Type X(餘額-類型X)”、X類型的區塊鏈資產與人民幣之間的兌換比例可以為“1:5”。
步驟304,區塊鏈節點G解析元資料,為智能合約S包含的資料添加相關欄位。
在一實施例中,根據錨點A發布的上述交易對智能合約S包含的元資料進行調整後,使得調整後的元資料對於各個使用者對應的資料進行描述時,所描述的內容除了如表1所示的帳戶ID、年齡、電話、餘額-類型A、餘額-類型B、總額-人民幣之外,還包括餘額-類型X。
因此,在智能合約S中位於code結構中的合約程式碼被執行以解析storage結構中的調整後的元資料時,可以確定解析出的資料結構相比於智能合約S中記載的資料的資料結構多出上述的“Balance-Type X(餘額-類型X)”欄位,因而可以為各個使用者對應的資料添加該欄位,則相關資料可以由表1更新為如下表2所示。
Account ID
(帳戶ID) | Age
(年齡) | Tel
(電話) | … | Balance-
Type A
(餘額-
類型A) | Balance-
Type B
(餘額-
類型B) | Balance-
Type X
(餘額-
類型X) | Total-RMB
(總額-人民幣) |
0001 | 26 | 139… | … | 2000 | 1500 | 0 | 5000 |
0002 | 25 | 186… | … | 1000 | 6000 | 0 | 13000 |
0003 | 32 | 166… | … | 20000 | 2100 | 0 | 24200 |
… | … | … | … | … | … | … | … |
表2
因此,當任一用戶在後續過程中獲得該X類型的區塊鏈資產後,該用戶對於X類型的區塊鏈資產的持有情況可以被直接記錄於智能合約S的資料中,而不必擔心相容問題。
步驟305,區塊鏈節點G向錨點A返回處理結果。
圖4是一示例性實施例提供的一種刪除已有欄位的示意圖。如圖4所示,刪除已有欄位的過程可以包括以下步驟:
步驟401,創建交易。
在一實施例中,假定錨點A終止在區塊鏈網路中發行類型X的區塊鏈資產,並且已發行的X類型的區塊鏈資產已經被清理,該錨點A需要從上述的智能合約S包含的資料中刪除對應欄位,停止記錄使用者對於該類型X的區塊鏈資產的持有情況。因此,該錨點A可以創建用於刪除欄位元的交易——相當於欄位刪除請求,並向區塊鏈網路發布這條交易。假定由區塊鏈節點G對錨點A發布的上述交易進行回應,該區塊鏈節點G通常為距離錨點A最近的區塊鏈節點,當然本說明書並不對此進行限制。
在一實施例中,上述交易中可以包含智能合約S的合約位址、埠資訊等,以使得區塊鏈節點G可以基於該合約位元址確定該交易需要呼叫該智能合約S,並基於埠資訊對該智能合約S包含的合約程式碼進行呼叫,以實現對元資料的更新,並進一步在資料中刪除已有欄位。
步驟402,區塊鏈節點G驗證錨點A對區塊鏈餘額的資料存取權限。
在一實施例中,與上述步驟302相類似的,可以對區塊鏈節點G的資料存取權限進行驗證,此處不再贅述。
步驟403,在錨點A具有資料存取權限時,區塊鏈節點G呼叫上述的智能合約來更新元資料。
在一實施例中,錨點A可以在交易中註明目標物件,比如該目標物件可以為欄位名稱“Balance-Type X(餘額-類型X)”,以用於據此確定出對應的欄位,並對元資料中對應的內容進行更新,比如刪除與該“Balance-Type X(餘額-類型X)”欄位相關的內容。
步驟404,區塊鏈節點G解析元資料,為智能合約S包含的資料添加相關欄位。
在一實施例中,根據錨點A發布的上述交易對智能合約S包含的元資料進行調整後,使得調整後的元資料對於各個使用者對應的資料進行描述時,所描述的內容僅包含如上述表2所示的帳戶ID、年齡、電話、餘額-類型A、餘額-類型B、總額-人民幣,而並未包含餘額-類型X。
因此,在智能合約S中位於code結構中的合約程式碼被執行以解析storage結構中的調整後的元資料時,可以確定解析出的資料結構相比於智能合約S中記載的資料的資料結構減少了上述的“Balance-Type X(餘額-類型X)”欄位,因而可以為各個使用者對應的資料刪除該欄位,則相關資料可以由表2更新為如表1所示。
步驟405,區塊鏈節點G向錨點A返回處理結果。
在一實施例中,錨點A可能僅需要刪除部分(一個或多個)使用者對應資料中的“Balance-Type X(餘額-類型X)”欄位;比如,部分使用者不具備持有X類型的區塊鏈資產的許可權,錨點A可以針對這些使用者發起上述交易,而區塊鏈節點G可以基於該交易對智能合約S包含的元資料進行更新,以使得該智能合約S包含的合約程式碼對後續更新後的元資料進行解析時,自更新時間點之後的資料無法再進行存取。即,相當於刪除了這些使用者對應資料中的“Balance-Type X(餘額-類型X)”欄位,使得這些使用者的資料在更新時間點之後無法進行存取。至於更新時間點之前的資料,由於對應元資料仍然存在於區塊鏈帳本上,因此仍然可以被存取。
圖5是一示例性實施例提供的一種更改已有欄位的示意圖。如圖5所示,更改已有欄位的過程可以包括以下步驟:
步驟501,創建交易。
在一實施例中,在如表1所示的資料結構中,基於“人民幣”對用戶持有的區塊鏈資產的總額進行統計。假定由於某些原因,使得錨點A希望將原本採用的“人民幣”更改為“美元”,即採用美元對用戶持有的區塊鏈資產的總額進行統計,因而需要將表1所示的“Total-RMB(總額-人民幣)”欄位更改為“Total-Dollar(總額-美元)”欄位。因此,該錨點A可以創建用於更改欄位元的交易——相當於欄位更改請求,並向區塊鏈網路發布這條交易。假定由區塊鏈節點G對錨點A發布的上述交易進行回應,該區塊鏈節點G通常為距離錨點A最近的區塊鏈節點,當然本說明書並不對此進行限制。
在一實施例中,上述交易中可以包含智能合約S的合約位址、埠資訊等,以使得區塊鏈節點G可以基於該合約位元址確定該交易需要呼叫該智能合約S,並基於埠資訊對該智能合約S包含的合約程式碼進行呼叫,以實現對元資料的更新,並進一步在資料中更改已有欄位。
步驟502,區塊鏈節點G驗證錨點A對區塊鏈餘額的資料存取權限。
在一實施例中,與上述步驟302相類似的,可以對區塊鏈節點G的資料存取權限進行驗證,此處不再贅述。
步驟503,在錨點A具有資料存取權限時,區塊鏈節點G呼叫上述的智能合約來更新元資料。
在一實施例中,錨點A可以在交易中註明目標物件和欄位屬性,比如該目標物件可以為欄位名稱“Total-RMB(總額-人民幣)”,以用於據此確定出對應的欄位,而欄位屬性可以包括欄位名稱為“Total-Dollar(總額-美元)”、美元總額的計算方式(與各個類型的區塊鏈資產與美元之間的兌換比例相關)等,從而據此對元資料中對應的內容進行更新,比如將與“Total-RMB(總額-人民幣)”欄位相關的內容更改為與“Total-Dollar(總額-美元)”欄位相關的內容。
步驟504,區塊鏈節點G解析元資料,對智能合約S所包含的資料的相關欄位進行更改。
在一實施例中,根據錨點A發布的上述交易對智能合約S包含的元資料進行調整後,使得調整後的元資料對於各個使用者對應的資料進行描述時,所描述的內容不僅包含如上述表1所示的帳戶ID、年齡、電話、餘額-類型A、餘額-類型B等欄位,還將總額-人民幣欄位更改為總額-美元欄位。
因此,在智能合約S中位於code結構中的合約程式碼被執行以解析storage結構中的調整後的元資料時,可以確定解析出的資料結構相比於智能合約S中記載的資料的資料結構,相當於將“Total-RMB(總額-人民幣)”欄位更改為 “Total-Dollar(總額-美元)”欄位,因而可以對各個使用者對應的資料進行調整,則相關資料可以由表1更新為如下表3所示。
Account ID
(帳戶ID) | Age
(年齡) | Tel
(電話) | … | Balance-Type A
(餘額-類型A) | Balance-Type B
(餘額-類型B) | Total-Dollar
(總額-美元) |
0001 | 26 | 139… | … | 2000 | 1500 | 768.9114 |
0002 | 25 | 186… | … | 1000 | 6000 | 1999.1696 |
0003 | 32 | 166… | … | 20000 | 2100 | 3721.5311 |
… | … | … | … | … | … | … |
表3
步驟505,區塊鏈節點G向錨點A返回處理結果。
在一實施例中,錨點A可能僅需要更改部分(一個或多個)使用者對應資料中的“Total-RMB(總額-人民幣)”欄位;比如,部分使用者向錨點A提出要求以“美元”計算其持有的區塊鏈資產,錨點A可以針對這些使用者發起上述交易,而區塊鏈節點G可以基於該交易對智能合約S包含的元資料進行更新,以使得該智能合約S包含的合約程式碼對更新後的元資料進行解析時,將這些使用者對應資料中的“Total-RMB(總額-人民幣)”欄位更改為“Total-Dollar(總額-美元)”欄位,而其他用戶則仍然可以採用“人民幣”計算其持有的區塊鏈資產。
在如圖3-5所示的實施例中,一種情況下,區塊鏈節點G在收到並回應於錨點A發起的交易後,可以同步實施針對智能合約A包含的元資料的更新操作、針對該智能合約S包含的資料的欄位更新操作,比如在完成對元資料的更新操作後,可以隨即透過該智能合約S包含的合約程式碼對更新後的元資料進行解析,使得該智能合約S包含的資料得以更新相關欄位。而另一種情況下,區塊鏈節點G可以僅關注於針對元資料的更新操作,而對資料的欄位更新操作可以被非同步實施。
以圖5所示的更改欄位的情況為例。圖6是一示例性實施例提供的一種查詢區塊鏈餘額的示意圖。如圖6所示,查詢區塊鏈餘額的過程可以包括以下步驟:
步驟601,創建交易。
在一實施例中,假定使用者B需要查詢自身在區塊鏈網路中持有的區塊鏈資產的總額,該用戶B可以創建用於查詢餘額的交易——相當於餘額查詢請求,並向區塊鏈網路發布這條交易。假定由區塊鏈節點H對使用者B發布的上述交易進行回應,該區塊鏈節點H通常為距離用戶B最近的區塊鏈節點,當然本說明書並不對此進行限制。
在一實施例中,上述交易中可以包含智能合約S的合約位址、埠資訊等,以使得區塊鏈節點H可以基於該合約位元址確定該交易需要呼叫該智能合約S,並基於埠資訊對該智能合約S包含的合約程式碼進行呼叫,以實現對區塊鏈餘額的查詢等操作。
步驟602,區塊鏈節點H驗證用戶B對區塊鏈餘額的資料存取權限。
在一實施例中,與圖3-5所示實施例相類似的,透過對使用者B的資料存取權限進行驗證,可以實現對資料獲取的便利性,並保障資料自身的安全性,此處不再贅述。
步驟603,在使用者B具有資料存取權限時,區塊鏈節點H呼叫上述的智能合約來更新欄位。
在一實施例中,使用者B可以在交易中註明所需查詢的區塊鏈餘額的相關資訊;比如,當用戶B希望查詢自身的區塊鏈餘額時,該相關資訊可以包括該使用者B的帳戶ID、資產類型等。區塊鏈節點H透過呼叫智能合約S中位於code結構中的合約程式碼,使得該合約程式碼被執行後,可以用於對智能合約S中位於storage結構中的元資料進行解析,以確定出對應於交易中註明的上述相關資訊的儲存欄位。
在一實施例中,假定智能合約S中記錄的資料原本採用如表1所示的結構,包括各個帳戶所屬使用者的個人資訊(如帳戶ID、年齡、地址等),以及各個帳戶所持有的區塊鏈資產的餘額、所有區塊鏈餘額兌換為人民幣後的總額等。那麼,在如圖5所示的實施例之後,智能合約S包含的資料仍然暫時採用表1所示的結構;但是,由於智能合約S包含的元資料在圖5所示的實施例中發生更新,使得基於智能合約S包含的合約程式碼對更新後的元資料進行解析後,確定出的資料結構區別於智能合約S所含的資料所採用的資料結構,因而需要基於元資料對智能合約S包含的相關資料進行結構更新。
Account ID
(帳戶ID) | Age
(年齡) | Tel
(電話) | … | Balance-Type A
(餘額-類型A) | Balance-Type B
(餘額-類型B) | Total-RMB
(總額-人民幣) | Total-Dollar
(總額-美元) |
0001 | 26 | 139… | … | 2000 | 1500 | 5000 | / |
0002 | 25 | 186… | … | 1000 | 6000 | / | 1999.1696 |
0003 | 32 | 166… | … | 20000 | 2100 | 24200 | / |
… | … | … | … | … | … | … | / |
表4
在一實施例中,假定用戶B的帳戶ID為0002,區塊鏈節點H可以為該“帳戶ID=0002”的使用者資訊添加“Total-Dollar(總額-美元)”欄位,將原本對應於“Total-RMB(總額-人民幣)”欄位的資料“13000”刪除,而更改為“Total-Dollar(總額-美元)”欄位下的“1999.1696”,表明用戶B所持有的區塊鏈資產的總額相當於1999.1696美元。由於僅涉及到使用者B的資料,因而對於該使用者B而言,相當於將“Total-RMB(總額-人民幣)”欄位更改為“Total-Dollar(總額-美元)”欄位,但其他用戶仍然採用“Total-RMB(總額-人民幣)”欄位,直至相關資料被涉及到,這樣尤其是當被涉及到的用戶數量較少時,可以極大地減少工作量。
步驟604,區塊鏈節點H向用戶B返回查詢到的餘額。
在一實施例中,由於使用者B對應的資料由“Total-RMB(總額-人民幣)”欄位更改為“Total-Dollar(總額-美元)”欄位,因而區塊鏈節點H返回的餘額為“1999.1696美元”,而非欄位更改之前的“13000元人民幣”。
圖7是一示例性實施例提供的一種設備的示意結構圖。請參考圖7,在硬體層面,該設備包括處理器702、內部匯流排704、網路介面706、內部記憶體708以及非易失性記憶體710,當然還可能包括其他業務所需要的硬體。處理器702從非易失性記憶體710中讀取對應的電腦程式到記憶體708中然後運行,在邏輯層面上形成欄位更新裝置。當然,除了軟體實現方式之外,本說明書一個或多個實施例並不排除其他實現方式,比如邏輯裝置抑或軟硬體結合的方式等等,也就是說以下處理流程的執行主體並不限定於各個邏輯單元,也可以是硬體或邏輯裝置。
請參考圖8,在軟體實施方式中,該欄位元更新裝置可以包括:
第一獲取單元81,使區塊鏈網路中的區塊鏈節點獲取針對智能合約的欄位更新請求,所述欄位更新請求用於對所述智能合約包含的資料集合中的資料進行欄位更新;
調整單元82,使所述區塊鏈節點根據所述欄位更新請求,對所述智能合約包含的元資料進行調整,以透過所述智能合約包含的程式碼對調整後的元資料的解析,使所述資料集合中的資料實現欄位更新。
可選地,還包括:
第一讀取單元83,使所述區塊鏈節點讀取所述欄位更新請求包含的輸入參數,所述輸入參數包括目標物件;
其中,調整後的元資料用於從所述資料集合中確定出對應於所述目標物件的欄位,以刪除對應於所述目標物件的欄位。
可選地,還包括:
第二讀取單元84,使所述區塊鏈節點讀取所述欄位更新請求包含的輸入參數,所述輸入參數包括目標物件和欄位屬性;
其中,調整後的元資料用於從所述資料集合中確定出對應於所述目標物件的欄位,以將確定出的欄位的屬性更新為所述欄位屬性。
可選地,還包括:
第三讀取單元85,使所述區塊鏈節點讀取所述欄位更新請求包含的輸入參數,所述輸入參數包括欄位屬性;
其中,調整後的元資料用於在所述資料集合中添加欄位元,並將添加的欄位的屬性設定為所述欄位屬性。
可選地,所述資料集合包含至少一個使用者的資料;所述裝置還包括:
第四讀取單元86,使所述區塊鏈節點讀取所述欄位更新請求包含的輸入參數,所述輸入參數包括目標使用者的資訊;
其中,調整後的元資料用於從所述資料集合中確定出所述目標使用者對應的資料,以對所述目標使用者對應的資料進行欄位更新。
可選地,還包括:
第一解析單元87,使所述區塊鏈節點透過運行所述智能合約包含的程式碼對所述調整後的元資料進行解析,以基於解析結果對所述資料集合的全量資料進行欄位更新。
可選地,還包括:
第二獲取單元88,使所述區塊鏈節點獲取針對所述智能合約的資料讀寫請求,所述資料讀寫請求用於對所述資料集合中的目標物件進行資料讀寫操作;
第二解析單元89,使所述區塊鏈節點透過運行所述智能合約包含的程式碼對所述調整後的元資料進行解析,解析結果用於確定所述目標物件在所述資料集合中對應的目標資料、對所述目標資料進行欄位更新,以對欄位更新後的所述目標資料實施所述資料讀寫操作。
上述實施例闡明的系統、裝置、模組或單元,具體可以由電腦晶片或實體實現,或者由具有某種功能的產品來實現。一種典型的實現設備為電腦,電腦的具體形式可以是個人電腦、膝上型電腦、蜂巢式電話、相機電話、智慧型電話、個人數位助理、媒體播放機、導航設備、電子郵件收發設備、遊戲控制台、平板電腦、穿戴式設備或者這些設備中的任意幾種設備的組合。
在一個典型的配置中,電腦包括一個或多個處理器 (CPU)、輸入/輸出介面、網路介面和記憶體。
記憶體可能包括電腦可讀媒體中的非永久性記憶體,隨機存取記憶體 (RAM) 和/或非易失性記憶體等形式,如唯讀記憶體 (ROM) 或快閃記憶體(flash RAM)。記憶體是電腦可讀媒體的示例。
電腦可讀媒體包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現資訊儲存。資訊可以是電腦可讀指令、資料結構、程式的模組或其他資料。電腦的儲存媒體的例子包括,但不限於相變記憶體 (PRAM)、靜態隨機存取記憶體 (SRAM)、動態隨機存取記憶體 (DRAM)、其他類型的隨機存取記憶體 (RAM)、唯讀記憶體 (ROM)、電可抹除可程式設計唯讀記憶體 (EEPROM)、快閃記憶體或其他記憶體技術、唯讀光碟唯讀記憶體 (CD-ROM)、數位多功能光碟 (DVD) 或其他光學儲存、磁盒式磁帶、磁片儲存、量子記憶體、基於石墨烯的儲存媒體或其他磁性存放裝置或任何其他非傳輸媒體,可用於儲存可以被計算設備存取的資訊。按照本文中的界定,電腦可讀媒體不包括暫態電腦可讀媒體 (transitory media),如調變的資料信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,並不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在圖式中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
在本說明書一個或多個實施例使用的術語是僅僅出於描述特定實施例的目的,而非旨在限制本說明書一個或多個實施例。在本說明書一個或多個實施例和所附申請專利範圍中所使用的單數形式的“一種”、“所述”和“該”也旨在包括多數形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“及/或”是指並包含一個或多個相關聯的列出專案的任何或所有可能組合。
應當理解,儘管在本說明書一個或多個實施例可能採用術語第一、第二、第三等來描述各種資訊,但這些資訊不應限於這些術語。這些術語僅用來將同一類型的資訊彼此區分開。例如,在不脫離本說明書一個或多個實施例範圍的情況下,第一資訊也可以被稱為第二資訊,類似地,第二資訊也可以被稱為第一資訊。取決於語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“回應於確定”。
以上所述僅為本說明書一個或多個實施例的較佳實施例而已,並不用以限制本說明書一個或多個實施例,凡在本說明書一個或多個實施例的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本說明書一個或多個實施例保護的範圍之內。