深入淺出 一條資料是如何完成上鏈的

2021-10-07 14:45:49 字數 2931 閱讀 5354

一筆業務資料在區塊鏈處理的流程大致分為三個階段:分別是上鏈前處理階段、鏈上處理階段和智慧型合約處理階段。

業務資料上鏈前需要將業務資料處理,並且對資訊進行簽名。這些過程可以通過對應的工具,比如序列化工具和各種橢圓曲線的簽名工具來完成,不過更多的時候是通過將各種工具整合的sdk來完成,以太坊的web3就是比較典型的上鏈前處理的開發工具。

業務資料處理

業務資料可以是任意的內容,比如物流資訊、商品交易或物聯網裝置上傳的資料或者對應資料的雜湊值等等。這些業務資料既可以通過伺服器處理,也可通過物聯網裝置的邊緣計算系統處理。以存證用的物流資料舉例,首先對業務資料不需要進一步處理或者簡單計算一下雜湊值,然後將呼叫函式的資訊加上鏈資料放入交易結構體的相關部分當中即可。簽名前的交易結構體是由鏈決定的,不過一般都包含呼叫的合約、時間戳、隨機數和呼叫函式加資料的資訊。將簽名前的資料拼裝好之後,會進一步序列化以便訊息傳遞。對於一些隱私交易,需要用到同態加密或者零知識證明等演算法,此時業務資料則需要經過更複雜的加工過程,比如數字經過處理可以變成乙個乘方求模的大數或者橢圓曲線上的點,但是拼裝和序列化等過程還是相同的處理方式。

資訊簽名

簽名前的資料處理好之後,對該資料進行一次雜湊處理,並對雜湊進行簽名。雜湊是與資料繫結的一串值,篡改資訊會造成雜湊值發生變化,因此本身具有防篡改的特性。接下來是對資訊的雜湊值進行簽名。簽名是一種非對稱加密的方法,可以在不洩露傳送者本身的私鑰的情況下,通過公鑰和簽名資訊確認傳送者持有對應的私鑰。對雜湊進行簽名還可將傳送者的身份和資訊繫結,同時也可防止其他人冒充傳送者,因此這樣處理可保證資訊的防篡改的同時認證傳送者的身份,防止抵賴。

業務上鏈前的處理階段主要是通過工具將業務資料轉換成區塊鏈可讀的方式,同時通過簽名將傳送者的身份和傳送資訊繫結,起到身份認證和防止抵賴的作用,最後再將處理好的資訊傳送到區塊鏈節點。上鏈前處理是中心化的,這些處理過程並不涉及區塊鏈節點,因此這一階段並不需要節點參與。有些系統,如邊緣計算系統,本身的效能和儲存空間都有限,並不適合做區塊鏈節點,但可以作為業務上鏈前處理的平台。

處理完成的資料傳送到區塊鏈節點後,就形成了一筆區塊鏈交易並進入上鏈處理的階段,鏈上處理大體可分為交易廣播和區塊共識流程。

交易廣播

在收到交易後,各節點會將接收到的交易先廣播到其他節點,以便形成乙個統一的交易池來為達成共識做準備。交易廣播後聯盟鏈和公鏈對交易會有不同的處理方法。對公鏈來說,任何交易傳送者都可將交易傳送到鏈上,但是處理能力不是無限的,因此會根據交易的手續費行有選擇的處理,手續費低的交易很可能一直無法得到處理。在一些極端情況下,節點為了提高處理速度甚至會出現不處理任何交易的空塊。對聯盟鏈來說有一定的准入機制,能夠傳送交易的應該是合作夥伴,因此處理交易的原則是盡量將能夠處理的交易打包進塊。

區塊共識

區塊主要包含區塊雜湊、區塊頭和交易資料的資訊,其中區塊頭一般都會包含共識資訊、時間戳、區塊高度等,並記錄前一區塊的雜湊來指向前一區塊;交易資料報含該區塊裡打包交易的雜湊,交易需要根據統一的順序排序;在確認區塊頭和雜湊之後,就能計算區塊雜湊。這樣通過前一區塊雜湊和自身雜湊相連形成鏈條,修改鏈上的任何乙個區塊的內容會後面區塊的前一區塊雜湊和修改後的雜湊不同,因此區塊具有防篡改的特性。只有修改該區塊和往後所有區塊的內容,且每個節點上都以相同方式修改才能完成修改。共識的主要目的就是以某種約定的方式生成能夠被大部分節點認可的區塊。不同共識方式的區別比較大,但是基本原則就是讓不同節點產生相同的區塊,盡可能保證資料的一致性。對公鏈來說,因為節點的通訊狀況不可控,保證一直出塊的情況下,如果網路出現問題,將可能無法達成一致,甚至出現分叉的情況。對聯盟鏈來說,共識演算法需要盡量使節點的區塊資料保持一致性,因此在一定數量的節點出現網路問題的情況下將會停止出塊。上鏈處理階段是將業務資料寫入區塊的過程,這個過程就是通常所說的上鏈,這一過程是去中心化的,需要由節點處理。在處理階段時業務資料還是可以按照傳送者的意願寫入不同內容,而進入上鏈階段後的業務資料將無法篡改,不過仍然存在上鏈失敗的可能,因此仍需要關注是否完成上鏈。共識階段完成後,各節點的區塊保持一致。此時的業務資料獲得每個節點承認且可追溯的資料了。

上鏈處理完成後,業務資料已經記錄在鏈上了,對於單純存證的業務來說,將業務資訊寫入區塊已經完成了這筆業務處理,只需記錄存證業務的交易雜湊並在取的時候通過交易雜湊查詢即可。但是大部分業務場景都需要進行一定的邏輯處理,因此通過智慧型合約處理是必須的。智慧型合約處理包括合約邏輯處理以及修改狀態梅克爾樹等流程。

合約邏輯處理

完成上鏈的業務資料很多情況下需要進一步進行邏輯的處理,比如一次最簡單的商品的交易就涉及轉賬,即買家餘額減少和賣家餘額增加的邏輯流程,這樣的流程雖然可以通過上鏈前的處理來完成,但是上鏈前處理是中心化的流程,對網路波動和可信度問題都有一定的劣勢,因此通過智慧型合約進行邏輯處理是比較好的方式。不同鏈平台對智慧型合約處理的方式不同,但是和一般的程式語言一樣都有呼叫函式和傳入引數的過程。並且因為建立智慧型合約和呼叫智慧型合約的過程都是上鏈的,即執行的程式和呼叫的函式與引數都是經過共識的,因此最終呼叫智慧型合約的資料的輸出結果也是相同的。處理完後的結果會寫入合約的狀態資料庫,這個資料庫除了最新狀態也會包含歷史狀態,方便追溯和查詢。

修改狀態梅克爾樹

智慧型合約的邏輯處理完成後,會修改狀態梅克爾樹。梅克爾樹是乙個二叉樹結構,不同的葉通過梅克爾樹鏈結到根,能起到防篡改和索引的作用。通過梅克爾樹的索引,能夠快速定位合約的歷史狀態,可通過查詢某個業務執行的區塊高度的合約資料來獲取當時的執行結果。智慧型合約處理階段是將業務資料進行邏輯處理,並記錄智慧型合約狀態的過程,這一過程也需要節點處理。如果合約邏輯處理的操作執行失敗,對狀態梅克爾樹的修改也會撤銷,合約的資料將會回滾到呼叫前的歷史資料。需要注意的是合約呼叫失敗和上鏈失敗是有區別的,觸發合約呼叫的時候交易已經在區塊裡留下記錄,而區塊是防篡改的,因此呼叫失敗並不會擦除區塊裡的記錄。如果交易因為資料錯誤或者共識問題而沒有被記錄進區塊,則不會觸發合約處理的過程。

深入淺出資料庫結構 一

一 資料庫結構 資料結構 陣列 插入快 知道下標 查詢慢,刪除慢,大小固定 有序陣列 比無序陣列查詢快 刪除和插入慢,大小固定 棧提供先進後出的訪問方式 訪問其他項很慢 佇列提供先進先出的訪問方式 訪問其他項很慢 鍊錶插入快,刪除快 查詢慢二叉樹 查詢插入刪除都快 刪除演算法複雜 紅黑樹查詢 插入 ...

《深入淺出資料分析》學習筆記(一)

深入淺出資料分析 學習筆記 一 2019 3 28 3 29 一 資料分析的步驟 1.確定 從客戶那裡多了解資訊以確定問題 2.分解 將大問題分解為小問題 3.評估 對因子進行相互比較 4.決策 將分析形成報表 二 觀察分析法 定義 被研究的人自行決定自己屬於哪個群體的一種研究方法。比較越多,分析結...

MyBatis中新增一條資料如何獲取資料主鍵

int insert basecompany record select last insert id insert into tb base company pkid,company code,company name,company address,first manager name,cert...