在區塊鏈中鎖定帳戶的方法和裝置
本說明書實施例係關於區塊鏈技術領域,更具體地,關於一種在區塊鏈中鎖定帳戶的方法和裝置。
區塊鏈技術是構建在點對點(P2P)網路上,利用鏈式資料結構來驗證與儲存資料,利用分散式節點共識演算法來生成和更新資料,利用密碼學的方式保證資料傳輸和存取的安全,利用由自動化腳本代碼組成的智慧合約來編程和操作資料的一種全新的分散式基礎架構與計算範式。所述區塊鏈例如為以太坊區塊鏈。在以太坊中,新增了帳戶的概念,其中,由用戶創建的帳戶為以太坊中的外部帳戶。通常,每個外部帳戶擁有一對公私鑰,其中,私鑰用於進行數位簽名,公鑰用於驗證簽名。另外,在各個全節點中,在節點本地的資料庫中以狀態樹的形式維持區塊鏈中全部帳戶的資料表,該狀態樹為帳戶地址與帳戶內容之間的映射,所述帳號內容包括,帳戶餘額、帳戶密鑰資訊(雜湊值)等。然而,在目前已有的區塊鏈中,當用戶發現區塊鏈帳戶的密鑰丟失或被盜後,一般無法進行帳戶鎖定操作,很有可能導致用戶損失進一步擴大。
因此,需要一種更有效的在區塊鏈中鎖定帳戶的方案。
本說明書實施例旨在提供一種更有效的在區塊鏈中鎖定帳戶的方法和裝置,以解決現有技術中的不足。
為實現上述目的,本說明書一個方面提供一種在區塊鏈中存入帳戶的信任帳戶資訊的方法,所述方法由第一用戶在區塊鏈中的第一帳戶客戶端執行,包括:
獲取第二用戶在區塊鏈中的第二帳戶,所述第二用戶為所述第一用戶的信任用戶;以及
發起第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的所述第二帳戶,以使得所述信任帳戶資訊中至少包括所述第二帳戶,其中,所述信任帳戶具有鎖定第一帳戶的權限。
在一個實施例中,所述第一交易為調用第一智慧合約的交易,所述第一智慧合約為區塊鏈中預先部署的用於存入帳戶的信任帳戶資訊的智慧合約,所述第一交易的資料欄位中至少包括所述第二帳戶。
在一個實施例中,獲取第二用戶在區塊鏈中的第二帳戶包括,獲取第二用戶在區塊鏈中的第二帳戶及其公鑰,其中,所述第一交易的資料欄位中還包括第二帳戶的公鑰,以使得所述信任帳戶資訊中還包括第二帳戶的公鑰。
本說明書另一方面提供一種在區塊鏈中存入帳戶的信任帳戶資訊的方法,所述方法由區塊鏈中的全節點執行,包括:
從區塊鏈中接收由第一帳戶發起的第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述信任帳戶具有鎖定第一帳戶的權限;以及
基於所述第一交易,在本地存入所述第一帳戶的信任帳戶資訊,其中,所述信任帳戶資訊中至少包括所述第二帳戶。
在一個實施例中,所述第一交易為調用第一智慧合約的交易,所述第一智慧合約為區塊鏈中預先部署的用於存入帳戶的信任帳戶資訊的智慧合約,其中,基於所述第一交易,在本地存入所述第一帳戶的信任帳戶資訊包括,通過在本地執行所述第一智慧合約而將所述信任帳戶資訊存入本地的狀態樹中的第一帳戶下。
在一個實施例中,基於所述第一交易,在本地存入所述第一帳戶的信任帳戶資訊包括,基於所述第一交易,在本地的新的區塊中存入第一帳戶的信任帳戶資訊,其中,所述第一交易中包括預定標誌,用於指示該第一交易為用於向區塊鏈中存入信任帳戶資訊的交易。
本說明書另一方面提供一種在區塊鏈中鎖定帳戶的方法,所述區塊鏈中包括多個全節點,所述全節點本地預先儲存有第一帳戶的信任帳戶資訊,所述信任帳戶資訊中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述方法由第二帳戶客戶端執行,包括:
發起第二交易,所述第二交易用於在區塊鏈中鎖定所述第一帳戶。
在一個實施例中,所述第二交易為調用第二智慧合約的交易,所述第二智慧合約為區塊鏈中預先部署的用於鎖定帳戶的智慧合約,所述第二交易的資料欄位中包括所述第一帳戶。
本說明書另一方面提供一種在區塊鏈中鎖定帳戶的方法,所述區塊鏈中包括多個全節點,所述全節點本地預先儲存有第一帳戶的信任帳戶資訊,所述信任帳戶資訊中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述方法由區塊鏈中的全節點執行,包括:
從區塊鏈中接收由第二帳戶發起的用於鎖定第一帳戶的第二交易;
從本地獲取所述第一帳戶的信任帳戶資訊;
基於所述信任帳戶資訊,驗證所述第二帳戶是否為所述第一帳戶的信任帳戶;以及
在驗證通過的情況中,在本地進行對第一帳戶的鎖定。
在一個實施例中,所述第二交易為調用第二智慧合約的交易,所述第二智慧合約為區塊鏈中預先部署的用於鎖定帳戶的智慧合約,其中,在本地進行對第一帳戶的鎖定包括,通過在本地執行所述第二智慧合約而進行對第一帳戶的鎖定。
在一個實施例中,所述信任帳戶資訊被儲存在所述全節點的本地狀態樹中,其中,從本地獲取所述第一帳戶的信任帳戶資訊包括,從本地狀態樹中獲取所述第一帳戶的信任帳戶資訊。
在一個實施例中,所述信任帳戶資訊被儲存在區塊中,其中,從本地獲取所述第一帳戶的信任帳戶資訊包括,從本地儲存的多個區塊中檢索具有第一帳戶和預定標誌的交易,從而獲取第一帳戶的信任帳戶資訊。
本說明書另一方面提供一種在區塊鏈中存入帳戶的信任帳戶資訊的裝置,所述裝置部署於第一用戶在區塊鏈中的第一帳戶客戶端,包括:
獲取單元,配置為,獲取第二用戶在區塊鏈中的第二帳戶,所述第二用戶為所述第一用戶的信任用戶;以及
交易發起單元,配置為,發起第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的所述第二帳戶,以使得所述信任帳戶資訊中至少包括所述第二帳戶,其中,所述信任帳戶具有鎖定第一帳戶的權限。
在一個實施例中,所述第一交易為調用第一智慧合約的交易,所述第一智慧合約為區塊鏈中預先部署的用於存入帳戶的信任帳戶資訊的智慧合約,所述第一交易的資料欄位中至少包括所述第二帳戶。
在一個實施例中,所述獲取單元還配置為,獲取第二用戶在區塊鏈中的第二帳戶及其公鑰,其中,所述第一交易的資料欄位中還包括第二帳戶的公鑰,以使得所述信任帳戶資訊中還包括第二帳戶的公鑰。
本說明書另一方面提供一種在區塊鏈中存入帳戶的信任帳戶資訊的裝置,所述裝置部署於區塊鏈中的全節點,包括:
接收單元,配置為,從區塊鏈中接收由第一帳戶發起的第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述信任帳戶具有鎖定第一帳戶的權限;以及
存入單元,配置為,基於所述第一交易,在本地存入所述第一帳戶的信任帳戶資訊,其中,所述信任帳戶資訊中至少包括所述第二帳戶。
在一個實施例中,所述第一交易為調用第一智慧合約的交易,所述第一智慧合約為區塊鏈中預先部署的用於存入帳戶的信任帳戶資訊的智慧合約,其中,所述存入單元還配置為,通過在本地執行所述第一智慧合約而將所述信任帳戶資訊存入本地的狀態樹中的第一帳戶下。
在一個實施例中,所述存入單元還配置為,基於所述第一交易,在本地的新的區塊中存入第一帳戶的信任帳戶資訊,其中,所述第一交易中包括預定標誌,用於指示該第一交易為用於向區塊鏈中存入信任帳戶資訊的交易。
本說明書另一方面提供一種在區塊鏈中鎖定帳戶的裝置,所述區塊鏈中包括多個全節點,所述全節點本地預先儲存有第一帳戶的信任帳戶資訊,所述信任帳戶資訊中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述裝置部署於第二帳戶客戶端,包括:
交易發起單元,配置為,發起第二交易,所述第二交易用於在區塊鏈中鎖定所述第一帳戶。
在一個實施例中,所述第二交易為調用第二智慧合約的交易,所述第二智慧合約為區塊鏈中預先部署的用於鎖定帳戶的智慧合約,所述第二交易的資料欄位中包括所述第一帳戶。
本說明書另一方面提供一種在區塊鏈中鎖定帳戶的裝置,所述區塊鏈中包括多個全節點,所述全節點本地預先儲存有第一帳戶的信任帳戶資訊,所述信任帳戶資訊中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述裝置部署於區塊鏈中的全節點,包括:
接收單元,配置為,從區塊鏈中接收由第二帳戶發起的用於鎖定第一帳戶的第二交易;
獲取單元,配置為,從本地獲取所述第一帳戶的信任帳戶資訊;
驗證單元,配置為,基於所述信任帳戶資訊,驗證所述第二帳戶是否為所述第一帳戶的信任帳戶;以及
鎖定單元,配置為,在驗證通過的情況中,在本地進行對第一帳戶的鎖定。
在一個實施例中,所述第二交易為調用第二智慧合約的交易,所述第二智慧合約為區塊鏈中預先部署的用於鎖定帳戶的智慧合約,其中,所述鎖定單元還配置為,通過在本地執行所述第二智慧合約而進行對第一帳戶的鎖定。
在一個實施例中,所述信任帳戶資訊被儲存在所述全節點的本地狀態樹中,其中,所述獲取單元還配置為,從本地狀態樹中獲取所述第一帳戶的信任帳戶資訊。
在一個實施例中,所述信任帳戶資訊被儲存在區塊中,其中,所述獲取單元還配置為,從本地儲存的多個區塊中檢索具有第一帳戶和預定標誌的交易,從而獲取第一帳戶的信任帳戶資訊。
本說明書另一方面提供一種電腦可讀儲存媒體,其上儲存有電腦程式,當所述電腦程式在電腦中執行時,令電腦執行上述任一項方法。
本說明書另一方面提供一種計算設備,包括記憶體和處理器,其特徵在於,所述記憶體中儲存有可執行代碼,所述處理器執行所述可執行代碼時,實現上述任一項方法。
在根據本說明書實施例的方案中,通過採用信任帳戶機制,通過對信任的第三方授權鎖定帳戶的權限,從而在帳戶私鑰丟失或被盜的情況中,可通過第三方進行帳戶鎖定,從而防止損失進一步擴大。
下面將結合附圖描述本說明書實施例。
圖1示出根據本說明書實施例的區塊鏈100的示意圖。如圖1所示,假設區塊鏈100為聯盟鏈,其中包括圖中1、2、3、4四個共識節點(全節點),另外,區塊鏈中還包括多個通過客戶端登錄的用戶,這些用戶擁有自己的帳戶、私鑰和公鑰,其客戶端可視為該區塊鏈的輕節點,或者其客戶端通過閘道進行區塊鏈中的操作。如圖中所示,所述用戶例如包括用戶A、用戶B和用戶C。其中,用戶C為惡意用戶,其例如可能會盜取用戶A的私鑰,以進行非法交易活動。本說明書實施例為了應對例如用戶C的惡意盜取用戶私鑰的情況,為用戶設置信任用戶機制,以便於用戶在丟失私鑰之後可通過其信任用戶凍結(即鎖定)其帳戶,以防止進一步的損失。例如,用戶B為用戶A的信任用戶,用戶A通過向區塊鏈中發送第一交易而在區塊鏈中存入用戶B為信任用戶的資訊,而授予用戶B凍結用戶A帳戶的權限。從而,當用戶A的私鑰丟失時,用戶A可通過線下通知用戶B,使得用戶B向區塊鏈發送第二交易,以使得在區塊鏈中凍結用戶A的帳戶。
可以理解,上文參考圖1的描述僅是示意性的,並不用於限制本說明書實施例的範圍,例如,所述區塊鏈不限於為聯盟鏈,其也可以為公鏈等,在區塊鏈為公鏈的情況中,用戶A、B、C對應的客戶端也可為區塊鏈中的全節點。下文中,將以聯盟鏈為例進行具體描述。
下面將詳細描述上述授權的過程和凍結帳戶的過程。
圖2示出根據本說明書實施例的一種在區塊鏈中存入帳戶的信任帳戶資訊的方法,所述方法由第一用戶在區塊鏈中的第一帳戶客戶端執行,包括:
步驟S202,獲取第二用戶在區塊鏈中的第二帳戶,所述第二用戶為所述第一用戶的信任用戶;以及
步驟S204,發起第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的所述第二帳戶,以使得所述信任帳戶資訊中至少包括所述第二帳戶,其中,所述信任帳戶具有鎖定第一帳戶的權限。
首先,在步驟S202,獲取第二用戶在區塊鏈中的第二帳戶,所述第二用戶為所述第一用戶的信任用戶。
該方法由第一用戶通過其在區塊鏈中的第一帳戶客戶端執行,用於設置其在區塊鏈中的信任帳戶,所述信任帳戶具有鎖定所述第一帳戶的權限。第一用戶首先確定好可作為信任用戶的用戶,例如第二用戶,例如,第一用戶可線下取得其信任的第二用戶的同意之後,將第二用戶確定為信任用戶。之後,第一帳戶客戶端獲取第二用戶的第二帳戶,以用於發起下個步驟中的第一交易。第一帳戶客戶端例如可從第一用戶的輸入獲取第二用戶的第二帳戶,或者,第一帳戶客戶端可從第二帳戶客戶端接收第二帳戶,等等。
在一個實施例中,在獲取第二用戶的第二帳戶的同時,還可以獲取第二帳戶的公鑰,以提供給下個步驟中的第一交易。
可以理解,雖然在該步驟中僅描述了獲取第一用戶的一個信任用戶的帳戶,在本說明書實施例中可通過該方法類似地設置第一用戶的多個信任用戶。
在步驟S204,發起第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的所述第二帳戶,以使得所述信任帳戶資訊中至少包括所述第二帳戶,其中,所述信任帳戶具有鎖定第一帳戶的權限。
本領域技術人員可以理解,在區塊鏈中,客戶端可通過發起交易而向區塊鏈中存入資訊,該資訊為經過共識的、各個節點一致的,因此具有更高的安全性、可信度。區塊鏈中包括多種資料庫,如區塊、帳戶資料庫(狀態資料樹)等,因此,向區塊鏈中存入資訊包括向區塊、帳戶資料庫等資料庫中存入資訊。
在一個實施例中,所述第一交易為調用第一智慧合約的交易,所述第一智慧合約為區塊鏈中預先部署的用於設置帳戶的信任帳戶的智慧合約。所述第一智慧合約中例如包括set1()函數,用於在區塊鏈中的狀態樹中設置帳戶的預置的信任帳戶欄位。當第一帳戶發起調用第一智慧合約的第一交易時,第一交易例如如圖3所示,圖3示出了第一交易的示意形式,其中,第一交易中的發送欄位(From)為第一帳戶,接收欄位(To)為該第一智慧合約的合約帳戶,資料欄位(Data)為對第一智慧合約中的set1()函數的調用,例如{set1(strings),“第二帳戶”},即,“第二帳戶”為set1()函數的輸入參數,另外,該第一交易包括通過第一帳戶的私鑰生成的數位簽名。第一帳戶例如向圖1中的任一全節點(例如節點1)發送該第一交易,節點1在接收該第一交易之後,對該第一交易進行驗證之後在共識節點中擴散該第一交易。在通過共識節點確定記帳節點之後,在記帳節點執行該第一智慧合約,從而通過執行該第一智慧合約將記帳節點本地的狀態樹中的第一帳戶的信任帳戶欄位設置為第二帳戶。可以理解,在狀態樹資料庫中可設置不止一個信任帳戶欄位,例如設置三個信任帳戶欄位,從而第一帳戶客戶端可首先獲取三個信任帳戶,並在第一交易中通過三次調用set1()函數,從而在狀態樹中分別設置三個信任帳戶。記帳節點在更新狀態樹之後,將該第一交易放入區塊存入區塊鏈中,並將該區塊發送給其它共識節點,從而其它共識節點在接收到該區塊之後也相同地更新本地狀態樹中第一帳戶的信任帳戶。
在一個實施例中,第一智慧合約中除了包括set1()函數,還包括set2()函數,set2()函數用於在狀態樹中設置帳戶的信任帳戶的公鑰。在該情況中,客戶端在步驟S202中還獲取第二帳戶的公鑰,並在該步驟中類似地調用set2()函數,例如,在第一交易的資料欄位中還包括“set2(strings),“第二帳戶公鑰””,從而通過第一智慧合約設置狀態樹中第一帳戶的信任帳戶公鑰欄位,以便於後續的鎖定帳戶過程。
可以理解,這裡雖然通過智慧合約自動在狀態樹中存入帳戶的信任帳戶資訊,本說明書不限於此,例如,所述第一智慧合約的函數包括的Set函數可以不進行任何操作,從而僅用於傳遞設置第二帳戶及其公鑰的資訊,使得將第二帳戶及其公鑰與該智慧合約的調用一起作為交易被存入區塊中,以用於後續的信任帳戶資訊的查找。或者可通過預定好的規則,使得區塊鏈中的節點基於該交易中調用的智慧合約帳戶,確定該交易為用於存入信任帳戶資訊的交易,從而在本地狀態樹中更新第一帳戶的預置的信任帳戶資訊欄位。
在一個實施例中,所述第一交易例如為由第一帳戶發送給第二帳戶的普通交易(例如轉帳交易),在該交易的資料欄位中,可設置預定標誌,以用於標識該交易用於存入信任帳戶資訊,例如,該交易的資料欄位為“存入信任帳戶資訊”,並約定好,第一帳戶的信任帳戶即為第一交易的接收帳戶。從而,第一帳戶通過對第二帳戶發送這樣的第一交易,當第一交易在經過共識被存入區塊中之後,也即,第一帳戶向區塊鏈中存入了第一帳戶的信任帳戶資訊,並將第一帳戶的信任帳戶設定為第二帳戶。另外,在該第一交易的資料欄位中還可以包括第二帳戶的公鑰,從而在第一帳戶的信任帳戶資訊中還包括第二帳戶的公鑰。可以理解,第一交易不限於為第一帳戶發送給第二帳戶的交易,而可以為第一帳戶發送給區塊鏈中非第二帳戶的任一帳戶的交易,在該情況中,該交易的資料欄位例如包括“將“第二帳戶”設置為信任帳戶”,從而向區塊鏈中傳播將第二帳戶設置為信任帳戶的信任帳戶資訊。或者,可通過預定好的規則,使得區塊鏈中的節點基於該第一交易中的預定標誌,確定該第一交易為用於存入信任帳戶資訊的交易,從而在本地狀態樹中更新第一帳戶的預置的信任帳戶資訊欄位。
圖4示出根據本說明書實施例的一種在區塊鏈中存入帳戶的信任帳戶資訊的方法,所述方法由區塊鏈中的全節點執行,包括:
步驟S402,從區塊鏈中接收由第一帳戶發起的第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述信任帳戶具有鎖定第一帳戶的權限;以及
步驟S404,基於所述第一交易,在本地存入所述第一帳戶的信任帳戶資訊,其中,所述信任帳戶資訊中至少包括所述第二帳戶。
該方法即為在第一帳戶客戶端向區塊鏈發出第一交易之後,區塊鏈中的各個全節點基於第一交易向區塊鏈中存入第一帳戶的信任帳戶資訊的過程。如上文所述,此處,向區塊鏈中存入包括,向狀態樹中存入,或向區塊中存入,等等。
首先,在步驟S402,從區塊鏈中接收由第一帳戶發起的第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述信任帳戶具有鎖定第一帳戶的權限。該全節點例如為通過共識確定的記帳節點,其可以為區塊鏈中的任一全節點,如圖1中的節點1、2、3、4,因此,參考上文對步驟S202中的描述,該全節點可從第一帳戶客戶端接收該第一交易,或者可從其它任意全節點接收該第一交易。可以理解,用於執行該方法的全節點不限於為記帳節點,例如,其可以為記帳節點的共識節點,其通過從記帳節點接收新生成的區塊中包含的第一交易,從而接收該第一交易。參考上文對步驟S204中的描述,該第一交易例如為調用第一智慧合約的交易,或者該第一交易的資料欄位中包括預定標誌,以用於標識其為用於在區塊鏈中存入第一帳戶的信任帳戶資訊的交易。
在步驟S404,基於所述第一交易,在本地存入所述第一帳戶的信任帳戶資訊,其中,所述信任帳戶資訊中至少包括所述第二帳戶。
參考上文中對步驟S204中的描述,在一個實施例中,所述第一交易為調用第一智慧合約的交易,所述第一智慧合約為區塊鏈中預先部署的用於存入帳戶的信任帳戶資訊的智慧合約。從而,該全節點通過在本地執行所述第一智慧合約而自動將所述信任帳戶資訊存入本地的狀態樹中的第一帳戶下。或者,所述第一智慧合約包括的set函數可不進行任何操作,僅用於傳遞資訊,從而,該全節點通過在本地執行所述第一智慧合約,基於預定規則,由全節點自身將所述信任帳戶資訊存入本地的狀態樹中的第一帳戶下。
參考上文中對步驟S204中的描述,在一個實施例中,所述第一交易中包括預定標誌(例如第一智慧合約的帳戶,或者“存入信任帳戶資訊”),用於指示該第一交易為用於向區塊鏈中存入信任帳戶資訊的交易。例如記帳節點基於所述第一交易生成新的區塊之後,將該區塊存入本地的區塊資料庫中,並將該區塊擴散給其它全節點,從而其它全節點分別在本地的新的區塊中存入第一帳戶的信任帳戶資訊。
圖5示出根據本說明書實施例的一種在區塊鏈中鎖定帳戶的方法,所述區塊鏈中包括多個全節點,所述全節點本地預先儲存有第一帳戶的信任帳戶資訊,所述信任帳戶資訊中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述方法在第二帳戶客戶端執行,包括:
步驟502,發起第二交易,所述第二交易用於在區塊鏈中鎖定所述第一帳戶。
在如上所述執行圖2和圖4所示方法之後,區塊鏈中已存入了第一帳戶的信任帳戶資訊,即,所述信任帳戶資訊中將第二帳戶設置為第一帳戶的信任帳戶。在該情況中,第二帳戶具有發起鎖定第一帳戶的權限。當第一用戶在私鑰丟失或被盜的情況中,第一用戶可例如通過電話、網路通信等通信方式告知第二用戶,並請求第二用戶鎖定第一帳戶。第二用戶在接收到第一用戶的請求之後,可在通過第二帳戶客戶端發出用於鎖定第一帳戶的第二交易。
在一個實施例中,所述第二交易為調用第二智慧合約的交易,所述第二智慧合約為區塊鏈中預先部署的用於鎖定帳戶的智慧合約。例如,第二智慧合約中包括“Lock()”函數,其用於在確定滿足預定條件的情況中,即確定所述第二帳戶為第一帳戶的信任帳戶的情況中,在區塊鏈中的狀態樹中將指定帳戶的狀態修改為鎖定狀態。第二帳戶發起的調用第二智慧合約的第二交易的具體形式與第一交易的形式類似,其也包括發送欄位、接收欄位和資料欄位,其中發送欄位為第二帳戶,接收欄位為第二智能合約的合約帳戶,資料欄位為對“Lock()”函數的調用,例如{Lock(strings),“第一帳戶”}。
可以理解,同樣地,所述第二智慧合約不限於包括上述Lock函數,以通過執行該函數而在狀態樹中修改帳戶的狀態,在一個實施例中,第二智慧合約包括的Lock函數可以不進行任何操作,僅用於傳遞鎖定第一帳戶的資訊,從而使得在區塊鏈各個節點在執行該智慧合約時基於預定規則主動修改第一帳戶的狀態。
在一個實施例中,所述第二交易例如為由第二帳戶發送給第一帳戶的普通交易(例如轉帳交易),在該交易的資料欄位中,可設置預定標誌,以用於標識該交易用於鎖定帳戶,例如,該交易的資料欄位為“鎖定帳戶”,並約定好,第二交易的接收帳戶即為待鎖定的帳戶。從而,第二帳戶通過對第一帳戶發送這樣的第二交易,當第二交易在經過共識被存入區塊中之後,也即,第二帳戶向區塊鏈中傳播了鎖定第一帳戶的資訊。區塊鏈中的各個節點在從第二交易中獲取鎖定第一帳戶的資訊之後,可在本地將第一帳戶的狀態修改為鎖定狀態。可以理解,第二交易不限於為第二帳戶發送給第一帳戶的交易,而可以為第二帳戶發送給區塊鏈中非第一帳戶的任一帳戶的交易,在該情況中,該交易的資料欄位例如包括“鎖定“第一帳戶””,從而向區塊鏈中傳播鎖定第一帳戶的資訊。
圖6示出根據本說明書實施例的一種在區塊鏈中鎖定帳戶的方法,所述區塊鏈中包括多個全節點,所述全節點本地預先儲存有第一帳戶的信任帳戶資訊,所述信任帳戶資訊中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述方法由區塊鏈中的全節點執行,包括:
步驟S602,從區塊鏈中接收由第二帳戶發起的用於鎖定第一帳戶的第二交易;
步驟S604,從本地獲取所述第一帳戶的信任帳戶資訊;
步驟S606,基於所述信任帳戶資訊,驗證所述第二帳戶是否為所述第一帳戶的信任帳戶;以及
步驟S608,在驗證通過的情況中,在本地進行對第一帳戶的鎖定。
在第二帳戶進行圖5所示方法之後,即向區塊鏈中發起第二交易之後,區塊鏈中通過共識節點的共識產生記帳節點,從而記帳節點及其共識節點可執行圖6所示的方法,所述共識節點都應為區塊鏈中的全節點,即,本地都包括全部區塊和帳戶資料庫,從而可基於資料庫中的內容進行對交易的驗證。
首先,在步驟S602,從區塊鏈中接收由第二帳戶發起的用於鎖定第一帳戶的第二交易。
第二帳戶客戶端在向區塊鏈中發送第二交易時,即將該第二交易發送給區塊鏈中的任一全節點,該任一全節點然後將該第二交易擴散給其它全節點。從而,例如記帳節點可以從第二帳戶直接接收第二交易,或者可從區塊中的其它全節點接收第二交易。
在步驟S604,從本地獲取所述第一帳戶的信任帳戶資訊。
如上文所述,在一個實施例中,所述信任帳戶資訊被儲存在所述全節點的本地狀態樹中,其中,從本地獲取所述第一帳戶的信任帳戶資訊包括,從本地狀態樹中獲取所述第一帳戶的信任帳戶資訊。
在一個實施例中,所述信任帳戶資訊被儲存在區塊中,其中,從本地獲取所述第一帳戶的信任帳戶資訊包括,從本地儲存的多個區塊中檢索具有第一帳戶和預定標誌的交易(即上述第一交易),從而獲取第一帳戶的信任帳戶資訊。
該全節點在接收到該第二交易並獲取第一帳戶的信任帳戶資訊之後,首先使用第二帳戶的公鑰對該第二交易的數位簽名進行驗證,另外,在例如以太坊中,該全節點還對第一帳戶的剩餘燃料進行驗證等,在此不一一列出。
在信任帳戶資訊中還包括第二帳戶公鑰的情況中,記帳節點可以從例如帳戶狀態樹中獲取第二帳戶公鑰,以用於驗證第二交易的數位簽名。當信任帳戶資訊中不包括第二帳戶公鑰的情況中,記帳節點可通過其他方法獲取第二帳戶公鑰,如通過密鑰管理方獲取第二帳戶公鑰等。
在進行上述常規的驗證之後,在一個實施例中,所述第二交易為調用第二智慧合約的交易,從而該全節點開始執行該智慧合約中的上述lock()函數,從而通過執行該函數自動進行下述的步驟S606-S608。在一個實施例中,如上文所述,所述第二交易中包括預定標誌,用於指示該第二交易為用於鎖定帳戶的交易,從而使得該全節點本地執行下述的步驟S606-S608。
步驟S606,基於所述信任帳戶資訊,驗證所述第二帳戶是否為所述第一帳戶的信任帳戶。
在獲取信任帳戶資訊之後,可基於該資訊確定第二帳戶是否為第一帳戶的信任帳戶。在一個實施例中,該信任帳戶資訊儲存在狀態樹的第一帳戶下,從而,可確定狀態樹的第一帳戶下的信任帳戶欄位中是否包括第二帳戶,從而驗證第二帳戶是否為第一帳戶的信任帳戶。在一個實施例中,信任帳戶資訊儲存在區塊的一個交易中,從而可基於區塊中該交易的資訊,確定第二帳戶是否為第一帳戶的信任帳戶。
在步驟S608,在驗證通過的情況中,在本地進行對第一帳戶的鎖定。
在一個實施例中,所述第二交易為調用第二智慧合約的交易,如上文所述,所述第二智慧合約為區塊鏈中預先部署的用於鎖定帳戶的智慧合約,從而,記帳節點通過在本地執行所述第二智慧合約而進行對第一帳戶的鎖定,也即,通過執行上述“Lock()”函數,執行步驟S606,在驗證通過的情況中,自動將本地狀態樹中的第一帳戶的狀態修改為鎖定狀態。
在一個實施例中,所述第二交易為普通交易,如上文所述,其向記帳節點傳遞了鎖定第一帳戶的資訊,從而記帳節點可在驗證通過的情況中將本地狀態樹中的第一帳戶的狀態修改為鎖定狀態。
記帳節點在修改本地狀態樹之後,將第二交易封裝到區塊中並發送給其它全節點,從而將該區塊存入區塊鏈中。其它節點在接收包括第二交易的區塊之後,可同樣地基於第二交易,修改本地狀態樹中第一帳戶的狀態,從而達到各個全節點的資料一致性。
圖7示出根據本說明書實施例的一種在區塊鏈中存入帳戶的信任帳戶資訊的裝置700,所述裝置部署於第一用戶在區塊鏈中的第一帳戶客戶端,包括:
獲取單元71,配置為,獲取第二用戶在區塊鏈中的第二帳戶,所述第二用戶為所述第一用戶的信任用戶;以及
交易發起單元72,配置為,發起第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的所述第二帳戶,以使得所述信任帳戶資訊中至少包括所述第二帳戶,其中,所述信任帳戶具有鎖定第一帳戶的權限。
在一個實施例中,所述第一交易為調用第一智慧合約的交易,所述第一智慧合約為區塊鏈中預先部署的用於存入帳戶的信任帳戶資訊的智慧合約,所述第一交易的資料欄位中至少包括所述第二帳戶。
在一個實施例中,所述獲取單元72還配置為,獲取第二用戶在區塊鏈中的第二帳戶及其公鑰,其中,所述第一交易的資料欄位中還包括第二帳戶的公鑰,以使得所述信任帳戶資訊中還包括第二帳戶的公鑰。
圖8示出根據本說明書實施例的一種在區塊鏈中存入帳戶的信任帳戶資訊的裝置800,所述裝置部署於區塊鏈中的全節點,包括:
接收單元81,配置為,從區塊鏈中接收由第一帳戶發起的第一交易,所述第一交易用於在區塊鏈中存入第一帳戶的信任帳戶資訊,所述第一交易中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述信任帳戶具有鎖定第一帳戶的權限;以及
存入單元82,配置為,基於所述第一交易,在本地存入所述第一帳戶的信任帳戶資訊,其中,所述信任帳戶資訊中至少包括所述第二帳戶。
在一個實施例中,所述第一交易為調用第一智慧合約的交易,所述第一智慧合約為區塊鏈中預先部署的用於存入帳戶的信任帳戶資訊的智慧合約,其中,所述存入單元82還配置為,通過在本地執行所述第一智慧合約而將所述信任帳戶資訊存入本地的狀態樹中的第一帳戶下。
在一個實施例中,所述存入單元82還配置為,基於所述第一交易,在本地的新的區塊中存入第一帳戶的信任帳戶資訊,其中,所述第一交易中包括預定標誌,用於指示該第一交易為用於向區塊鏈中存入信任帳戶資訊的交易。
圖9示出根據本說明書實施例的一種在區塊鏈中鎖定帳戶的裝置900,所述區塊鏈中包括多個全節點,所述全節點本地預先儲存有第一帳戶的信任帳戶資訊,所述信任帳戶資訊中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述裝置部署於第二帳戶客戶端,包括:
交易發起單元91,配置為,發起第二交易,所述第二交易用於在區塊鏈中鎖定所述第一帳戶。
圖10示出根據本說明書實施例的一種在區塊鏈中鎖定帳戶的裝置1000,所述區塊鏈中包括多個全節點,所述全節點本地預先儲存有第一帳戶的信任帳戶資訊,所述信任帳戶資訊中至少包括作為第一帳戶的信任帳戶的第二帳戶,所述裝置部署於區塊鏈中的全節點,包括:
接收單元101,配置為,從區塊鏈中接收由第二帳戶發起的用於鎖定第一帳戶的第二交易;
獲取單元102,配置為,從本地獲取所述第一帳戶的信任帳戶資訊;
驗證單元103,配置為,基於所述信任帳戶資訊,驗證所述第二帳戶是否為所述第一帳戶的信任帳戶;以及
鎖定單元104,配置為,在驗證通過的情況中,在本地進行對第一帳戶的鎖定。
在一個實施例中,所述第二交易為調用第二智慧合約的交易,所述第二智慧合約為區塊鏈中預先部署的用於鎖定帳戶的智慧合約,其中,所述鎖定單元104還配置為,通過在本地執行所述第二智慧合約而進行對第一帳戶的鎖定。
在一個實施例中,所述信任帳戶資訊被儲存在所述全節點的本地狀態樹中,其中,所述獲取單元102還配置為,從本地狀態樹中獲取所述第一帳戶的信任帳戶資訊。
在一個實施例中,所述信任帳戶資訊被儲存在區塊中,其中,所述獲取單元102還配置為,從本地儲存的多個區塊中檢索具有第一帳戶和預定標誌的交易,從而獲取第一帳戶的信任帳戶資訊。
本說明書另一方面提供一種電腦可讀儲存媒體,其上儲存有電腦程式,當所述電腦程式在電腦中執行時,令電腦執行上述任一項方法。
本說明書另一方面提供一種計算設備,包括記憶體和處理器,其特徵在於,所述記憶體中儲存有可執行代碼,所述處理器執行所述可執行代碼時,實現上述任一項方法。
在根據本說明書實施例的方案中,通過採用信任帳戶機制,通過對信任的第三方授權鎖定帳戶的權限,從而在帳戶私鑰丟失或被盜的情況中,可通過第三方進行帳戶鎖定,從而防止損失進一步擴大。
需要理解,本文中的“第一”,“第二”等描述,僅僅為了描述的簡單而對相似概念進行區分,並不具有其他限定作用。
本說明書中的各個實施例均採用遞進的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對於系統實施例而言,由於其基本相似於方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
上述對本說明書特定實施例進行了描述。其它實施例在所附申請專利範圍的範圍內。在一些情況下,在申請專利範圍中記載的動作或步驟可以按照不同於實施例中的順序來執行並且仍然可以實現期望的結果。另外,在附圖中描繪的過程不一定要求示出的特定順序或者連續順序才能實現期望的結果。在某些實施方式中,多工處理和並行處理也是可以的或者可能是有利的。
本領域普通技術人員應該還可以進一步意識到,結合本文中所公開的實施例描述的各示例的單元及演算法步驟,能夠以電子硬體、電腦軟體或者二者的結合來實現,為了清楚地說明硬體和軟體的可互換性,在上述說明中已經按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬體還是軟體方式來執行,取決於技術方案的特定應用和設計約束條件。本領域普通技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本申請的範圍。
結合本文中所公開的實施例描述的方法或演算法的步驟可以用硬體、處理器執行的軟體模組,或者二者的結合來實施。軟體模組可以置於隨機記憶體(RAM)、記憶體、唯讀記憶體(ROM)、電可編程ROM、電可擦除可編程ROM、暫存器、硬碟、抽取式磁碟、CD-ROM、或技術領域內所公知的任意其它形式的儲存媒體中。
以上所述的具體實施方式,對本發明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發明的具體實施方式而已,並不用於限定本發明的保護範圍,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。
100:區塊鏈
1~4:共識節點
S202~S204:方法步驟
S402~S404:方法步驟
S502:方法步驟
S602~S608:方法步驟
700:裝置
71:獲取單元
72:交易發起單元
800:裝置
81:接收單元
82:存入單元
900:裝置
91:交易發起單元
1000:裝置
101:接收單元
102:獲取單元
103:驗證單元
104:鎖定單元
透過結合附圖描述本說明書實施例,可以使得本說明書實施例更加清楚:
[圖1]示出根據本說明書實施例的區塊鏈100的示意圖;
[圖2]示出根據本說明書實施例的一種在區塊鏈中存入帳戶的信任帳戶資訊的方法;
[圖3]示出了第一交易的示意形式;
[圖4]示出根據本說明書實施例的一種在區塊鏈中存入帳戶的信任帳戶資訊的方法;
[圖5]示出根據本說明書實施例的一種在區塊鏈中鎖定帳戶的方法;
[圖6]示出根據本說明書實施例的一種在區塊鏈中鎖定帳戶的方法;
[圖7]示出根據本說明書實施例的一種在區塊鏈中存入帳戶的信任帳戶資訊的裝置700;
[圖8]示出根據本說明書實施例的一種在區塊鏈中存入帳戶的信任帳戶資訊的裝置800;
[圖9]示出根據本說明書實施例的一種在區塊鏈中鎖定帳戶的裝置900;
[圖10]示出根據本說明書實施例的一種在區塊鏈中鎖定帳戶的裝置1000。