1. 首頁
    2. 區塊鏈的節點是什么(區塊鏈交易處理方法,應用于區塊鏈網絡中的區塊鏈節點)

    區塊鏈的節點是什么(區塊鏈交易處理方法,應用于區塊鏈網絡中的區塊鏈節點)

    #冬日生活打卡季#

    區塊鏈技術,也被稱之為分布式賬本技術,是一種由若干臺計算設備共同參與“記賬”,共同維護一份完整的分布式數據庫的新興技術。由于區塊鏈技術具有去中心化、公開透明、每臺計算設備可以參與數據庫記錄、并且各計算設備之間可以快速的進行數據同步的特性,利用區塊鏈技術來搭建去中心化系統,并在區塊鏈的分布式數據庫中收錄各種執行程序進行自動執行,已在眾多的領域中廣泛的進行應用。

    區塊鏈交易的合法性驗證通常可以通過驗證簽名有效性的方式來實現。當區塊鏈采用賬戶模型時,該區塊鏈所適用的賬戶通常對應有一組或多組公鑰-私鑰對,上述公鑰可以被記錄在相應的賬戶狀態中,或以其他形式存儲在區塊鏈的分布式數據庫中,且可被區塊鏈網絡中的任一節點設備獲得。與上述公鑰對應的私鑰則保存在賬戶所有方的本地數據庫或其他硬件終端中,以供賬戶所有方進行數字簽名或加解密操作等。發起方所發起的區塊鏈交易不僅包括交易內容,還包括該發起方采用其賬戶對應的私鑰針對交易內容而作的數字簽名。區塊鏈節點在接收到區塊鏈交易后,可以基于該區塊鏈交易所含的數字簽名對該區塊鏈交易進行合法性驗證。合法性驗證通常可包括:驗證數字簽名是否基于該區塊鏈交易的交易內容而獲得(也稱為完整性校驗)等。通過完整性校驗,可以確保該區塊鏈交易確實是由該公鑰對應的用戶所發起,且該交易在傳輸過程中未被篡改。在另一種情況下,發起方的公鑰也可以被攜帶在CA中心向發起方頒發的CA證書中,當發起方發送區塊鏈交易時,可以將通過CA中心私鑰進行簽名的CA證書一同發送給區塊鏈節點,由區塊鏈節點根據CA中心的公鑰對CA證書的簽名進行驗證,在驗證成功的情況下可以獲取CA證書中所攜帶的發起方公鑰。其中,CA中心為可以被區塊鏈節點默認信任的權威機構,因而只要用CA中心的公鑰成功對證書進行驗簽,即可確定證書中的公鑰可信,使得區塊鏈節點可以通過該公鑰對接收到的區塊鏈交易所含的數字簽名進行合法性驗證。

    其中,區塊鏈中支持的共識算法可以包括:

    第一類共識算法,即節點設備需要爭奪每一輪的記賬周期的記賬權的共識算法;例如,工作量證明(Proof of Work,POW)、股權證明(Proof of Stake,POS)、委任權益證明(Delegated Proof of Stake,DPOS)等共識算法;

    第二類共識算法,即預先為每一輪記賬周期選舉記賬節點(不需要爭奪記賬權)的共識算法;例如,實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)等共識算法。

    在采用第一類共識算法的區塊鏈網絡中,爭奪記賬權的節點設備,都可以在接收到交易后執行該筆交易。爭奪記賬權的節點設備中可能有一個節點設備在本輪爭奪記賬權的過程中勝出,成為記賬節點。記賬節點可以將收到的交易與其它交易一起打包以生成候選區塊,并將生成的候選區塊或者該候選區塊的區塊頭發送至其它節點設備進行共識。

    在采用第二類共識算法的區塊鏈網絡中,具有記賬權的節點設備在本輪記賬前已經商定好。因此,節點設備在接收到交易后,如果自身不是本輪的記賬節點,則可以將該交易發送至記賬節點。對于本輪的記賬節點,可以將該交易發送至其它節點設備進行共識,在確定該交易通過共識后,其他節點設備可以將該交易與其它交易一起打包以生成候選區塊并且執行該交易。

    如上所述,無論區塊鏈采用以上示出的哪種共識算法,本輪的記賬節點都可以將接收到的交易打包以生成候選區塊,并將生成的候選區塊或者該候選區塊的區塊頭發送至其它節點設備進行共識驗證。如果其它節點設備接收到候選區塊或者該候選區塊的區塊頭后,經驗證沒有問題,可以將該候選區塊作為最新區塊追加到原有的區塊鏈末尾,從而完成區塊鏈的記賬過程。其它節點驗證記賬節點發來的新的區塊或區塊頭的過程中,也可以執行該區塊中的包含的交易。

    采用賬戶模型的區塊鏈在實現數據存證時,需要存儲和維護的區塊鏈數據,通常包括區塊數據、區塊鏈中的區塊鏈賬戶對應的賬戶狀態數據;區塊數據又可以進一步包括區塊頭數據、區塊中的區塊交易數據等等。在存儲以上示出的各種區塊鏈數據時,通常可以將上述各種區塊鏈數據以key-value鍵值對的形式,組織成Merkle樹在數據庫中存儲。

    在上述的區塊鏈模型中,可以在區塊鏈上部署用于進行數據存證的智能合約,用戶可以通過調用智能合約的方式,將需要存證的數據作為該智能合約對應的合約賬戶的賬戶狀態,存儲到與該智能合約對應的Merkle樹中。

    例如,以以太坊為例,通常采用一種特殊的稱之為MPT樹的特殊的Merkle樹來存儲和維護區塊鏈數據;其中,對于賬戶狀態數據,可以組織成MPT狀態樹(即世界狀態)在數據庫中存儲;MPT狀態樹上存儲了以賬戶地址為key,以賬戶狀態數據為value的key-value鍵值對。而智能合約對應的合約賬戶中存儲的數據內容,也會被進一步組織成storage樹(一種用于存儲數據的MPT存儲樹)在數據庫中存儲;storage樹的根節點的hash值,會作為與該合約賬戶對應的賬戶狀態數據的一部分,填充到MPT狀態樹中;而MPT狀態樹的根節點的hash會被進一步填充到區塊頭中。當用戶需要進行數據存證時,可以通過調用智能合約的方式,將需要存證的數據作為該智能合約對應的合約賬戶的賬戶狀態數據,存儲到與該智能合約對應的storage樹中。

    在區塊鏈領域,還有一個重要的概念就是賬戶(Account);以以太坊為例,以太坊通常將賬戶劃分為外部賬戶和合約賬戶兩類;外部賬戶就是由用戶直接控制的賬戶,也稱之為用戶賬戶;而合約賬戶則是由用戶通過外部賬戶創建的,包含合約代碼的賬戶(即智能合約)。

    當然,對于一些基于以太坊的架構而衍生出的區塊鏈模型,還可以對區塊鏈支持的賬戶類型,進行進一步的擴展,在本說明書中不進行特別限定。

    對于區塊鏈中的賬戶而言,通常會通過一個結構體,來維護賬戶的賬戶狀態。當區塊中的交易被執行后,區塊鏈中與該交易相關的賬戶的狀態通常也會發生變化。

    在一個例子中,賬戶的結構體通常包括Balance,Nonce,Code和Storage等字段。其中:

    Balance字段,用于維護賬戶目前的賬戶余額;

    Nonce字段,用于維護該賬戶的交易次數;它是用于保障每筆交易能且只能被處理一次的計數器,有效避免重放攻擊;

    Code字段,用于維護該賬戶的合約代碼;在實際應用中,Code字段中通常僅維護合約代碼的hash值;因而,Code字段通常也稱之為Codehash字段。

    Storage字段,用于維護該賬戶的存儲內容(默認字段值為空);對于合約賬戶而言,通常會分配一個獨立的存儲空間,用以存儲該合約賬戶的存儲內容;該獨立的存儲空間通常稱之為該合約賬戶的賬戶存儲。

    合約賬戶的存儲內容通常會構建成MPT(Merkle Patricia Trie)樹的數據結構存儲在上述獨立的存儲空間之中;其中,基于合約賬戶的存儲內容構建成的MPT樹,通常也稱之為Storage樹。而Storage字段通常僅維護該Storage樹的根節點;因此,Storage字段通常也稱之為StorageRoot字段。

    其中,對于外部賬戶而言,以上示出的Code字段和Storage字段的字段值均為空值。

    在實際應用中,不論是公有鏈、私有鏈還是聯盟鏈,都可能提供智能合約(smartcontract)的功能。區塊鏈上的智能合約是在區塊鏈上可以被交易觸發執行的合約。智能合約可以通過代碼的形式定義。

    智能合約可以以規定的方式在區塊鏈網絡中每個節點獨立的執行,所有執行記錄和數據都保存在區塊鏈上,所以當這樣的交易執行完畢后,區塊鏈上就保存了無法篡改、不會丟失的交易憑證。

    創建智能合約和調用智能合約的示意圖如圖3所示。以太坊中要創建一個智能合約,需要經過編寫智能合約、變成字節碼、部署到區塊鏈等過程。以太坊中調用智能合約,是發起一筆指向智能合約地址的交易,各個節點的EVM可以分別執行該交易,將智能合約代碼分布式的運行在以太坊網絡中每個節點的虛擬機中。

    需要說明的是,除了可以由用戶創建智能合約,也可以在創世塊中由系統設置智能合約。這類合約一般稱為創世合約。一般的,創世合約中可以設置一些區塊鏈網絡的數據結構、參數、屬性和方法。此外,具有系統管理員權限的賬戶可以創建系統級的合約,或者修改系統級的合約(簡稱為系統合約)。另外除了以太坊中的EVM外,不同的區塊鏈網絡還可能采用各種的虛擬機,這里并不限定。

    隨著區塊鏈技術的廣泛應用,區塊鏈賬戶的安全性問題也越來越受到重視。雖然區塊鏈技術基于共識機制、簽名驗證等基本特性,可以保證區塊鏈網絡上的數據安全、透明且不可篡改。但現有的交易方法仍然存在安全隱患,攻擊者抓住區塊鏈交易過程中的安全漏洞,以特定的攻擊方式發起惡意區塊鏈交易,使得被攻擊的對象造成了巨大損失,同時也對區塊鏈網絡的安全性產生重大威脅。

    為了解決上述問題,圖4為根據本說明書一示例性實施例示出的一種區塊鏈交易處理方法的流程圖。如圖4所示,該方法應用于區塊鏈網絡中的區塊鏈節點,可以包括如下步驟:

    步驟402:對接收到的區塊鏈交易進行合法性驗證,并在驗證通過的情況下與所述區塊鏈網絡中的其他區塊鏈節點對所述區塊鏈交易進行共識。

    在本說明書的技術方案中,以圖5所示的區塊鏈相關網絡環境為例,可以包括客戶端側計算設備501、服務器端502,以及至少一個區塊鏈系統;例如,區塊鏈系統503。本說明書中的區塊鏈網絡,譬如可以包括如圖5所示的區塊鏈系統503。客戶端側計算設備501,可以包括各種不同類型的客戶端側計算設備;例如,客戶端側計算設備可以包括諸如PC計算設備、移動計算設備、物聯網設備,以及其它形式的具有一定的計算能力的智能設備,等等。在一種實施方式中,客戶端側計算設備501中的至少部分計算設備,可以通過各種通信網絡連接到服務器端502;例如,圖5中示出的設備5與服務器端502進行了連接。不難理解,客戶端側計算設備501中的部分計算設備,也可以不與服務器端502進行連接,而是作為區塊鏈節點通過各種通信網絡直接連接到區塊鏈系統;例如,圖5中示出的設備3和設備4,可以作為區塊鏈節點連接到區塊鏈系統。在一種實施方式中,客戶端側計算設備501,還可以包括一個或多個用戶側服務器;例如,圖5中示出的設備4和設備5。客戶端側終端設備501中的至少部分計算設備,可以連接到該用戶側服務器;例如,圖5中示出的設備6連接到設備4,設備1和設備2連接到設備5。可以理解的是,區塊鏈交易可以通過例如設備4的客戶端計算設備發送至區塊鏈系統中,也可以通過服務器端502發送至區塊鏈系統。因此,在上述的步驟402中,區塊鏈節點接收到的區塊鏈交易可以由客戶端側計算設備發送也可以由服務器平臺發送,也可以由其他區塊鏈節點廣播,本說明書對此不作限制。

    區塊鏈節點接收到區塊鏈交易后,首先需要對該區塊鏈交易進行合法性驗證。如前所述,區塊鏈交易包括交易內容和發起方基于自身的賬戶私鑰所生成的數字簽名,而區塊鏈節點通過該發起方對應的賬戶公鑰可以對接收到的區塊鏈交易中的數字簽名進行驗證。所述交易合法性驗證的工作原理可參考上文的相關描述,此處不再贅述。通過對接收到的交易進行合法性驗證,可以確定接收到的區塊鏈交易在傳輸過程中沒有被篡改,提高區塊鏈交易的安全性。

    對于驗證通過的區塊鏈交易,區塊鏈節點需要與所屬區塊鏈網絡中的其他區塊鏈節點對該區塊鏈交易進行共識。在本說明書中,可以根據實際需求采用不同的區塊鏈共識算法,例如,可以采用PBFT(Practical Byzantine Fault Tolerance,實用拜占庭容錯算法);也可以采用POW(Proof Of Work,工作量證明算法)等,本說明書對此不作限制。其中,區塊鏈交易共識的工作原理可參考上述的相關描述,此處不再贅述。

    步驟404:在確認所述區塊鏈交易通過共識的情況下,調用預先部署在所述區塊鏈節點處的管理合約,以通過所述管理合約中的交易校驗規則對所述區塊鏈交易進行安全性校驗。

    在區塊鏈交易通過共識后,通常區塊鏈節點會默認該區塊鏈交易不存在問題、可以直接執行,并且在執行該區塊鏈交易之前不會再對該區塊鏈交易做其他的檢查或校驗。而在本說明書的技術方案中,區塊鏈節點在確認區塊鏈交易通過共識的基礎上,可以通過調用管理合約以基于該管理合約中的交易校驗規則對區塊鏈交易做進一步的安全性校驗。在相關技術中,通過在網絡中添加網關可以對經過的流量進行管理,譬如過濾掉可能存在安全性風險的流量,本說明書中采用的管理合約可以實現類似于網關的作用,比如該管理合約可以對區塊鏈交易進行篩選,以過濾掉不符合交易校驗規則的區塊鏈交易,使得區塊鏈節點僅執行符合交易校驗規則的區塊鏈交易,從而避免區塊鏈交易的執行可以導致的安全性風險,從而有助于提升在區塊鏈上執行交易的安全性。

    在對區塊鏈交易進行安全性校驗前,區塊鏈節點可以先對區塊鏈交易進行解析,以得到能夠用于進行安全性校驗的待檢測數據。該待檢測數據可用于與交易校驗規則中的預設數據范圍進行比對,當該區塊鏈交易的待檢測數據在交易校驗規則的預設數據范圍內時,可以確定該區塊鏈交易通過安全性校驗。舉例而言,待檢測數據可以為交易發起方的賬戶地址,或者當區塊鏈交易為轉賬交易時,待檢測數據可以為交易中包含的轉賬的具體內容,例如轉賬的具體金額或者轉賬對象的賬戶地址等,又或者當區塊鏈交易為調用合約的交易時,待檢測數據可以為交易所要調用的智能合約的合約地址等,本說明書對此不作限制。在實際應用中,交易校驗規則所針對的校驗數據類型以及校驗的具體形式可以由本領域技術人員根據實際需求進行配置。

    對于管理合約中交易校驗規則的具體內容,可以針對現有的區塊鏈攻擊形式進行針對性的設置。例如針對溢出類攻擊,通常情況下溢出類攻擊的攻擊方會在區塊鏈交易中將交易金額設置為巨額,相應的可以在交易校驗規則中針對交易金額這一參數設置閾值,若區塊鏈節點接收到的區塊鏈交易的交易金額超過預設金額閾值,則認為該區塊鏈交易可能為溢出類攻擊的攻擊交易,區塊鏈節點拒絕執行該區塊鏈交易;又例如,針對重入攻擊,由于重入攻擊的攻擊方式是在短時間內多次調用交易,相應的可以在交易校驗規則中針對交易頻率這一參數設置閾值,若區塊鏈節點在單位時間內獲取區塊鏈交易的次數節較多,接收交易的頻率超過了交易校驗規則中的預設頻率閾值,則認為該區塊鏈交易可能為重入攻擊的攻擊交易,區塊鏈節點拒絕執行該區塊鏈交易;又例如,針對拒絕服務類,由于拒絕服務類攻擊主要通過在區塊鏈交易中包含較大的數據量,以占用區塊鏈節點上大量的處理計算資源,導致區塊鏈節點無法正常提供其他服務,因而相應的可以在交易校驗規則中針對數據量這一參數設置閾值,當區塊鏈節點獲取的區塊鏈交易的數據量大小超過預設數據量閾值時,認為該區塊鏈交易可能為拒絕服務類攻擊的攻擊交易,區塊鏈節點拒絕執行該交易;又例如,針對多次發起惡意交易破壞區塊鏈交易安全的用戶賬戶,可以將其加入交易校驗規則的賬戶黑名單中,區塊鏈節點可以根據交易校驗規則拒絕執行所有由該賬戶黑名單中的用戶賬戶發起的區塊鏈交易。

    在確認區塊鏈交易通過共識后,區塊鏈節點可以自發地調用管理合約,而無需由該區塊鏈交易進行調用。因此,區塊鏈交易的發起方在創建該區塊鏈交易時,無需關注于本說明書中的安全性校驗過程,不需要主動在該區塊鏈交易中添加對管理合約的調用信息。甚至,安全性校驗過程對區塊鏈交易的發起方可以是無感的。那么,對于一些主動實施攻擊的發起方而言,由于這些發起方必然不會主動在區塊鏈交易中調用管理合約,那么本說明書可以確保這些發起方所發起的區塊鏈交易能夠經歷上述的安全性校驗過程,以避免攻擊生效。

    在一實施例中,所述管理合約包括接口合約和校驗合約,接口合約用于向外提供唯一不變的調用接口,而對區塊鏈交易進行安全性校驗的交易校驗規則被維護于校驗合約中。在區塊鏈交易通過共識后,區塊鏈節點可以通過預定義接口(即上述唯一不變的調用接口)調用接口合約,而該接口合約中維護有校驗合約的合約地址,使得區塊鏈節點可以進一步基于該接口合約中的合約地址來調用校驗合約,進而根據校驗合約所維護的交易校驗規則判斷區塊鏈交易是否安全。

    具體的,為了使得區塊鏈節點能夠自發地調用管理合約,接口合約可以被部署于區塊鏈節點上運行的區塊鏈平臺鏈代碼中。區塊鏈節點本身是一種邏輯概念,通過在節點設備上創建一節點實例,并由該節點實例運行上述的區塊鏈平臺鏈代碼,即可使得該節點實例成為一區塊鏈節點。可見,區塊鏈平臺鏈代碼是使得節點實例成為區塊鏈節點的底層邏輯,故而區塊鏈節點在運行過程中可以直接執行區塊鏈平臺鏈代碼,從而使得區塊鏈節點可以通過區塊鏈平臺鏈代碼中記錄的預定義接口來主動觸發對接口合約的調用,而無需像相關技術中那樣由區塊鏈交易來調用接口合約。

    區別于部署在區塊鏈平臺鏈代碼中的接口合約,校驗合約需要部署至區塊鏈。例如,校驗合約可以為創世合約,即該校驗合約在區塊鏈網絡的創建之初被部署在創世區塊中。再例如,校驗合約可以為系統合約,需要由管理員進行部署,一些情況下可能需要超出預設比例的管理員的認可下才能夠完成部署。當然,不排除一些情況下,可能由區塊鏈網絡的一般成員來部署校驗合約,即校驗合約可以為區別于創世合約與系統合約的普通合約。由于接口合約位于區塊鏈平臺鏈代碼中,使得對于接口合約的升級難度大、可行性低;而無論是創世合約、系統合約或普通合約,由于校驗合約部署于區塊鏈中,因而能夠易于對校驗合約進行更新。當然,由于交易校驗規則被維護于校驗合約中,因而往往是出于對交易校驗規則進行調整而更新校驗合約,而一般不存在對接口合約的更新需求。

    在本說明書中,校驗合約的合約地址被記載于上述接口合約的相應世界狀態中。在對校驗合約進行更新時,只需在區塊鏈中部署包含新交易校驗規則的更新后校驗合約,并將接口合約的上述世界狀態的取值更新為該更新后校驗合約的合約地址:由于接口合約的調用接口未發生變化,使得區塊鏈節點始終都可以通過統一的接口調用接口合約,并根據該接口合約在世界狀態中維護的合約地址調用更新后校驗合約,進而根據新的交易校驗規則對區塊鏈交易進行安全性校驗。可以通過發起調用接口合約的區塊鏈交易,并由該區塊鏈交易將更新后校驗合約的合約地址作為入參提供至接口合約,進而更新為接口合約對應的世界狀態的取值;其中,該調用接口合約的區塊鏈交易可以由區塊鏈管理員發起,以確保安全性。

    步驟406:在確認所述區塊鏈交易通過安全性校驗的情況下,執行所述區塊鏈交易;以及,在確認所述區塊鏈交易未通過安全性校驗的情況下,拒絕執行所述區塊鏈交易。

    在本說明書的技術方案中,區塊鏈交易可以包括如前所述的調用智能合約的交易;或者,區塊鏈交易也可以包括與智能合約無關的交易,這些交易只需要實現簡單的交易邏輯、無需采用智能合約來實現復雜的交易邏輯,譬如簡單的交易邏輯可以包括轉賬等。那么,區塊鏈節點在判斷接收到的區塊鏈交易通過管理合約的安全性校驗后,若區塊鏈交易并非調用智能合約的交易,譬如為轉賬交易,則可以通過所述管理合約執行所述轉賬交易以進行轉賬,即管理合約除了用于安全性校驗之外,還可以用于完成轉賬等簡單的交易邏輯;若區塊鏈交易為調用業務合約的交易,則調動所述業務合約以執行所述區塊鏈交易。若區塊鏈節點確認所述區塊鏈交易未通過安全性校驗,則拒絕執行該區塊鏈交易,并繼續處理接收到的其他區塊鏈交易。

    進一步的,本說明書中的管理合約并非始終保持不變,隨著區塊鏈攻擊形式的更新,本說明書中的交易校驗規則也會相應發生改變。在有需要的情況下,可以在管理合約原有交易校驗規則的基礎上增加新的交易校驗規則,或者可以刪除原有交易校驗規則中的部分內容,或者也可以通過修改原有交易規則中的預設閾值等方式修改原有的交易校驗規則,舉例而言,管理合約中的交易校驗規則用于在接收到轉賬交易時檢查交易金額是否處于預設金額范圍并檢查交易的轉賬對象賬戶是否處于黑名單賬戶,在該交易校驗規則的基礎上,可以修改原有預設金額范圍的取值,也可以刪除原有黑名單賬戶中的部分賬戶,或者增加新的檢查規則。

    對于所要更新的交易校驗規則的具體內容,可以由區塊鏈網絡管理員自行決定,或者也可以由管理員在鏈外對交易校驗規則的更新進行提案,并由部分或者所有區塊鏈用戶對更新提案進行表決,在表決結果符合特定規則的情況下按照該更新提案進行對交易校驗規則進行更新,本說明書對此不作限制。例如,區塊鏈網絡管理員可以在鏈外網站上向用戶提供一個或多個管理合約交易校驗規則的更新提案,使得該區塊鏈網絡的用戶可以在該鏈外網站上對更新提案進行投票,并最終根據用戶的投票結果,選擇獲得票數最多或者票數超過預設數量的更新提案對交易校驗規則進行更新,本說明書對此不作限制。除了鏈外投票的方式外,區塊鏈用戶還可以通過對更新提案進行簽名的方式來進行表決,區塊鏈管理員或者區塊鏈普通用戶在鏈外發起更新提案,由區塊鏈網絡中的成員根據是否同意該更新提案對其進行簽名,例如,區塊鏈網絡中的成員可以按照預先定義好的規則,只有在同意該更新提案的情況下才會對更新提案進行簽名,并且可以將簽名廣播給其他區塊鏈節點,使得區塊鏈網絡中的所有區塊鏈用戶都能夠獲知其他區塊鏈用戶的簽名結果,當存在不少于預設數量或者預設比例的區塊鏈網絡成員對更新提案進行簽名時,區塊鏈網絡管理員根據該更新提案對交易校驗規則進行更新。其中,參與簽名的用戶可以為區塊鏈網絡中的所有用戶,也可以僅為具有較高權限的所有管理員,本說明書對此不作限制。

    雖然對于交易校驗規則而言,本申請并不限制其在校驗合約中的存儲位置,但需要理解的是,若交易校驗規則被寫在校驗合約的合約代碼中,由于智能合約的合約代碼在上鏈后無法被更改,因此,在更新交易校驗規則時,必然需要在區塊鏈上重新部署包含新的交易校驗規則的校驗合約;而若交易校驗規則被寫在校驗合約的世界狀態中,則不需要通過部署新的校驗合約的方式對交易校驗規則進行更新,而是可以直接發起交易校驗規則的更新交易,將校驗合約的世界狀態的取值更新為新的交易校驗規則。

    在上述對于交易校驗規則更新的基礎上,若只將更新后校驗合約部署在區塊鏈上,則區塊鏈節點根據原有的調用邏輯,在接收到區塊鏈交易后依然調用原有的校驗合約。因此,除了部署包含新交易校驗規則的更新后校驗合約外,還需要相應更改接口合約的對應世界狀態的取值。其中,更新后校驗合約的部署以及接口合約世界狀態取值的更新可以分別通過兩個區塊鏈交易完成,例如,區塊鏈網絡管理員可以首先將一筆包含創建更新后校驗合約信息的交易發送到區塊鏈網絡,在確定該區塊鏈交易通過共識的情況下,成功將更新后校驗合約部署在區塊鏈上并產生對應的合約地址。在此基礎上,區塊鏈網絡管理員可以再根據更新后校驗合約的合約地址發起合約更新交易,使得區塊鏈節點在接收到合約更新交易后調用接口合約,將接口合約對應的世界狀態的取值更新為更新后的校驗合約的合約地址。除此之外,更新后校驗合約的部署以及接口合約世界狀態取值的更新也可以只通過一個區塊鏈交易完成,例如,區塊鏈網絡管理員可以發起包括更新后校驗合約的合約更新交易,區塊鏈節點在接收到合約更新交易后可以將更新后校驗合約創建并部署到區塊鏈上,使得區塊鏈上產生與該更新后的校驗合約對應的合約地址,區塊鏈節點再根據該合約地址修改接口合約的對應世界狀態的取值。其中,更新后的校驗合約的部署方法部署智能合約的相關內容,本說明書對此不作限制。需要注意的是,管理合約的更新交易可以僅由區塊鏈網絡的管理員發起,即僅允許管理員在區塊鏈網絡原有管理合約的基礎上進行更新,避免將管理合約的修改權限開放給普通用戶,以防止由此導致的安全性問題。

    通過對校驗合約中交易校驗規則以及對校驗合約的調用邏輯的更新,雖然區塊鏈節點在接收到區塊鏈交易時依然會按照原有的預設接口調用接口合約,但此時接口合約所維護的合約地址已經被修改為更新后校驗合約的合約地址,接口合約可以根據更新后校驗合約的合約地址進一步調用更新后的校驗合約,從而能夠按照新的交易校驗規則對該區塊鏈交易進行安全性校驗。

    對于上述任一實施例而言,若區塊鏈網絡為聯盟鏈,則該聯盟鏈內的區塊鏈節點可以基于自身是否參與共識而分為多種類型,比如將參與共識的區塊鏈節點稱為執行節點,而將不參與共識的區塊鏈節點稱為同步節點,同步節點并不參與共識和執行區塊鏈交易,而是直接從執行節點或其他同步節點處進行區塊同步。因此,本說明書所公開的技術方案可以只應用于聯盟鏈中的執行節點,即只有執行節點通過管理合約對區塊鏈交易進行安全性校驗,而同步節點可以不參與。

    本說明書通過在區塊鏈系統中增加管理合約,使得所有的區塊鏈交易在被執行前都要經過管理合約的篩選,區塊鏈節點只執行符合管理合約安全性校驗的區塊鏈交易,并且本說明書中的管理合約可以靈活設置不同的交易校驗規則,以解決區塊鏈網絡在面對不同形式攻擊交易的安全性問題。下面以圖5所示區塊鏈網絡環境中的區塊鏈節點3為例,針對圖2所示的智能合約調用交易,結合圖6進行詳細說明。

    其中,圖6是根據本說明書一示例性實施例示出的一種區塊鏈交易的處理方法流程圖。如圖6所示,可以包括以下步驟:

    步驟602:區塊鏈節點3接收設備4發送的區塊鏈交易。

    舉例而言,區塊鏈系統503中的區塊鏈節點3接收到用戶Bob通過設備4發送的區塊鏈交易,且該區塊鏈交易由用戶Bob的賬戶私鑰進行了簽名。

    步驟604:區塊鏈節點3判斷區塊鏈交易是否通過合法性驗證。

    區塊鏈節點3在接收區塊鏈交易后,根據本地存儲的用戶Bob的賬戶公鑰驗證該區塊鏈交易所攜帶的數字簽名。

    或者,該區塊鏈交易攜帶有CA中心向用戶Bob賬戶頒發的CA證書,該CA證書保存有用戶Bob的賬戶公鑰且通過CA中心的私鑰進行了簽名,區塊鏈節點3可以在接收區塊鏈交易后利用CA中心的公鑰對該CA證書的數字簽名進行驗證,在簽名驗證通過后獲取該CA證書中包含的用戶Bob的賬戶公鑰,從而可以利用獲取到的用戶Bob的賬戶公鑰對該區塊鏈交易的數字簽名進行驗證。

    區塊鏈節點3通過用戶Bob的公鑰對數字簽名進行計算,并將計算的得到的結果與區塊鏈交易的哈希摘要進行比對,若不能比對成功,則區塊鏈節點3確定接收到的區塊鏈交易沒有通過合法性驗證,轉至步驟614;若比對成功,則區塊鏈節點3確定接收到的區塊鏈交易通過了合法性驗證,轉至步驟606。

    步驟606:區塊鏈節點3與區塊鏈系統503中的其他區塊鏈節點對該區塊鏈交易進行共識。

    舉例而言,若區塊鏈網絡采用的共識算法為需要爭奪每一輪的記賬周期的記賬權的POW算法,區塊鏈節點3在確認該交易通過合法性驗證后,將其廣播給區塊鏈系統503中的其他區塊鏈節點,爭奪記賬權的節點設備在接收到該區塊鏈交易后執行該筆交易,最終可能有一個節點設備在本輪爭奪記賬權的過程中勝出,成為記賬節點。該記賬節點可以將收到的該區塊鏈交易與其它交易一起打包以生成候選區塊,并將生成的候選區塊或者該候選區塊的區塊頭發送至其它節點設備進行共識。

    舉例而言,若區塊鏈網絡采用的共識算法為不需要爭奪記賬權的拜占庭容錯算法,則區塊鏈節點3可以將該區塊鏈交易發送給本輪的記賬節點,由記賬節點將該區塊鏈交易與其他區塊鏈交易一起打包生成候選區塊,并將生成的候選區塊或者該候選區塊的區塊頭發送至其它節點設備進行共識。

    步驟608:區塊鏈節點3調用管理合約進行安全性校驗。

    在本實施例中,管理合約包含接口合約與校驗合約,接口合約部署于所述區塊鏈節點上運行的區塊鏈平臺代碼,并在對應的世界狀態中維護有校驗合約的合約地址,所述校驗合約維護有預設的交易校驗規則。

    在區塊鏈交易共識通過后,區塊鏈節點3根據記錄于區塊鏈平臺代碼中預定義接口調用接口合約,并根據接口合約的世界狀態獲取校驗合約的合約地址,調用對應的校驗合約校驗接收到的區塊鏈交易。

    以上述圖2所示的調用智能合約的交易為例,區塊鏈節點3在對該區塊鏈交易共識通過后調用管理合約解析得到該區塊鏈交易中的From字段為“Bob(0xf5e...)”,該字段即為發起調用智能合約的賬戶地址,將該賬戶地址與交易校驗規則中的黑名單賬戶進行比對。

    或者,以轉賬交易為例,區塊鏈節點3在對接收到的轉賬交易共識通過后調用管理合約,解析得到該轉賬交易中的value字段,在區塊鏈交易中“value”字段即為交易發起者所要向交易接收者轉賬的金額,將該交易金額與交易校驗規則中的預設交易金額閾值進行比對。同時,區塊鏈節點3也可以調用管理合約計算接收區塊鏈交易的頻率,將交易頻率與交易校驗規則中的預設頻率閾值進行比對。

    步驟610:區塊鏈節點3判斷區塊鏈交易是否通過安全性校驗。

    以上述調用智能合約的交易為例,若交易校驗規則的黑名單賬戶中存在賬戶地址“Bob(0xf5e...)”,則該區塊鏈交易無法通過管理合約的安全性校驗,轉至步驟614,區塊鏈節點3拒絕執行該區塊鏈交易并將該筆交易丟棄,等待處理下一筆區塊鏈交易。若管理合約交易校驗規則的黑名單賬戶中不存在該賬戶地址,則認為該區塊鏈交易通過了管理合約的安全性校驗,轉至步驟612。

    以上述轉賬交易為例,若轉賬金額或者交易頻率超過了交易校驗規則中的預設金額閾值和預設頻率閾值,則該區塊鏈交易無法通過管理合約的安全性校驗,轉至步驟614,區塊鏈節點3拒絕執行該區塊鏈交易并將該筆交易丟棄,等待處理下一筆區塊鏈交易。若轉賬金額和交易頻率均沒有超過交易校驗規則中的預設金額閾值和預設頻率閾值,則認為該區塊鏈交易通過了管理合約的安全性校驗,轉至步驟612。

    步驟612:區塊鏈節點3執行區塊鏈交易。

    以上述調用智能合約的交易為例,區塊鏈節點3根據該區塊鏈交易中的合約地址“0x6f8ae93…”調用智能合約。

    以上述轉賬交易為例,區塊鏈節點3按照該區塊鏈交易中的交易金額向交易中的交易接收方地址轉賬。

    步驟614:區塊鏈節點3不執行區塊鏈交易。

    圖7是一示例性實施例提供的一種區塊鏈交易處理電子設備的示意結構圖。請參考圖7,在硬件層面,該設備包括處理器702、內部總線704、網絡接口706、內存708以及非易失性存儲器710,當然還可能包括其他業務所需要的硬件。本說明書一個或多個實施例可以基于軟件方式來實現,比如由處理器702從非易失性存儲器710中讀取對應的計算機程序到內存708中然后運行。當然,除了軟件實現方式之外,本說明書一個或多個實施例并不排除其他實現方式,比如邏輯器件抑或軟硬件結合的方式等等,也就是說以下處理流程的執行主體并不限定于各個邏輯單元,也可以是硬件或邏輯器件。

    請參考圖8,區塊鏈交易處理裝置可以應用于如圖7所示的設備中,以實現本說明書的技術方案。其中,該區塊鏈交易處理裝置可以包括:

    驗證共識單元802,被配置為對接收到的區塊鏈交易進行合法性驗證,并在驗證通過的情況下與所述區塊鏈網絡中的其他區塊鏈節點對所述區塊鏈交易進行共識。

    校驗單元804,被配置為在確認所述區塊鏈交易通過共識的情況下,調用預先部署在所述區塊鏈節點中的管理合約,以通過所述管理合約中的交易校驗規則對所述區塊鏈交易進行安全性校驗。

    執行單元806,被配置為在確認所述區塊鏈交易通過安全性校驗的情況下,執行所述區塊鏈交易;以及,在確認所述區塊鏈交易未通過安全性校驗的情況下,拒絕執行所述區塊鏈交易。

    可選的,所述管理合約包括接口合約和校驗合約;所述調用預先部署在所述區塊鏈節點中的管理合約包括:在所述接口合約的調用條件被滿足的情況下,通過預定義接口調用所述接口合約;其中,所述接口合約的調用條件包括:所述區塊鏈交易通過共識;根據所述接口合約維護的所述校驗合約的合約地址,進一步調用所述校驗合約,以通過所述校驗合約中的交易校驗規則對所述區塊鏈交易進行安全性校驗。

    可選的,所述接口合約包括:部署于所述區塊鏈節點上運行的區塊鏈平臺代碼中的系統合約;其中,所述預定義接口被記錄于所述區塊鏈平臺代碼中。

    可選的,所述校驗合約的合約地址被維護于所述接口合約對應的世界狀態中。

    可選的,上述裝置還包括:

    第一更新單元808,被配置為根據接收到的合約更新交易,所述合約更新交易包括更新后的校驗合約的合約地址;響應于所述合約更新交易,調用所述接口合約以將所述世界狀態的取值更新為所述更新后的校驗合約的合約地址。

    第二更新單元810,被配置為根據接收到的合約更新交易,所述合約更新交易包括更新后的校驗合約;響應于所述合約更新交易,部署所述更新后的校驗合約,并調用所述接口合約以將所述世界狀態的取值更新為所述更新后的校驗合約的合約地址。

    可選的,所述合約更新交易由所述區塊鏈網絡中的管理員提交;或者,所述合約更新交易包含所述區塊鏈網絡的所有成員中不少于預設數量或預設比例的成員簽名;或者,所述合約更新交易包含所述區塊鏈網絡的所有管理員中不少于預設數量或預設比例的管理員簽名。

    可選的,所述交易校驗規則用于實現下述檢查中至少之一:

    交易金額是否處于預設金額范圍;交易的數據量是否處于預設數據量范圍;交易頻率是否處于預設頻率范圍;交易發起方賬戶是否為預設黑名單賬戶。

    可選的,所述執行所述區塊鏈交易,包括:若區塊鏈交易為轉賬交易,則通過所述管理合約執行所述轉賬交易以進行轉賬;若區塊鏈交易為調用業務合約的交易,則調用所述業務合約以執行所述區塊鏈交易。

    相關文章
    草莓视频