ETH 以太坊的交易樹與收據樹(區塊鏈技術與應用)

2022-09-10 12:45:20 字數 2681 閱讀 5662

每次發布乙個區塊時,區塊中的交易會形成一顆merkle tree,即交易樹,跟位元幣中的情況類似。

此外,以太坊還新增了乙個收據樹,每個交易執行完之後形成乙個收據,記錄交易相關資訊。也就是說,交易樹和收據樹上的節點是一一對應的。主要是考慮到以太坊智慧型合約執行較為複雜,通過增加收據樹,便於快速查詢執行結果。

交易樹和收據樹都是m(merkle)pt,而btc中都採用普通的mt(merkle tree)。(可能就僅僅是為了三棵樹**復用好所以這樣設計的)

mpt的好處是支援查詢操作,通過鍵值沿著樹進行查詢即可:

交易樹和收據樹只將當前區塊中的交易組織起來,而狀態樹將所有賬戶的狀態都包含進去,無論這些賬戶是否與當前區塊中交易有關係。多個區塊狀態樹共享節點,而交易樹和收據樹依照區塊獨立。

交易樹和收據樹的用途:

向輕節點提供merkle proof。

更加複雜的查詢操作(例如:查詢過去十天的交易;過去十天的眾籌事件等)

bloom filter的作用

支援較為高效查詢某個元素是否在某個集合中

eg:查詢某個元素是否在某個集合中

最笨:元素遍歷,複雜度為o(n)——輕節點不能用

方法:給乙個大的集合,計算出乙個緊湊的「摘要」

如下圖,給定乙個資料集,其中含義元素a、b、c,通過乙個雜湊函式h()對其進行計算,將其對映到乙個其初始全為0的128位的向量的某個位置,將該位置置為1。將所有元素處理完,就可以得到乙個向量,則稱該向量為原集合的「摘要」。可見該「摘要」比原集合是要小很多的。

摘要的作用:假定想要查詢乙個元素d是否在集合中,假設h(d)對映到向量中的位置處為0,說明d一定不在集合中;假設h(d)對映到向量中的位置處為1,有可能集合中確實有d,也有可能因為雜湊碰撞產生誤報。

如果集合中刪除元素該怎麼操作?無法操作。也就是說,簡單的bloom filter不支援刪除操作。如果想要支援刪除操作,需要將記錄數不能為0和1,需要修改為乙個計數器(需要考慮計數器是否會溢位)。

bloom filter特點:有可能出現誤報,但不會出現漏報。bloom filter變種:採用一組雜湊函式進行向量對映,有效避免雜湊碰撞以太坊中bloom filter的作用

每個交易完成後會產生乙個收據,收據包含乙個bloom filter記錄交易型別、位址等資訊。在區塊block header中也包含乙個bloom filter,其為該區塊中所有交易的bloom filter的乙個並集。

所以,查詢時候先查詢塊頭中的bloom filter,如果塊頭中包含。再檢視區塊中包含的交易的bloom filter,如果存在,再檢視交易進行確認;如果不存在,則說明發生了「碰撞」。

好處:通過bloom filter這樣乙個結構,快速大量過濾掉大量無關區塊,從而提高了查詢效率。

以太坊的執行過程,可以視為交易驅動的狀態機,通過執行當前區塊中包含的交易,驅動系統從當前狀態轉移到下一狀態。當然,btc我們也可以視為交易驅動的狀態機,其狀態為utxo。

問題1:a轉賬到b,有沒有可能收款賬戶不包含再狀態樹中?可能。因為以太坊中賬戶可以節點自己產生,不需要通知其他人,只有在產生交易時才會被其他節點知道,這個時候要在狀態樹中新插入乙個節點。

不能。首先,這樣設計要查詢賬戶狀態很不方便,因為不存在某個區塊包含所有狀態。其次,如果要向乙個新建立賬戶轉賬,因為需要知道收款賬戶的狀態,才能給其新增金額,但由於其是新建立的賬戶,所有需要一直找到創世紀塊才能知道該賬戶為新建賬戶,系統中並未儲存,而區塊鏈是不斷延長的。

交易樹和收據樹的建立過程

下圖的函式中建立了交易樹和收據樹並且創造了他們的根雜湊值

以太坊之四交易樹和收據樹

4.1 交易樹和收據樹的意義 交易樹和收據樹僅用來儲存本區塊的資料,所用的資料結構依然是mpt。交易樹 提供merkel proof。向輕節點證明某個交易是打包在區塊中的。收據樹 向輕節點證明某個交易的執行結果。4.2 bloom filter 布隆過濾器沒什麼好說的,最詳細的講解是在資料結構那裡。...

區塊鏈2 0 以太坊ETH

區塊鏈研究者梅蘭妮 斯萬,在 區塊鏈 新經濟藍圖 一書中,她將區塊鏈分為 區塊鏈1.0,貨幣 區塊鏈2.0,合約 區塊鏈3.0,應用。位元幣是區塊鏈1.0的代表,以太坊則是區塊鏈2.0的代表。以太坊最初的設計目標就是成為智慧型合約和去中心化應用的平台,它的創始人是維塔利克 布特林 v神 以太坊區塊鏈...

ETH以太坊交易內容上鏈(中文內容)

我們想要的效果是每乙個交易下面的備註都可以寫上我們需要的內容。下圖是我們已經可以實現的效果 eoa 之間傳輸值的交易 例如,改變傳送方和接收方餘額大小 傳送訊息來呼叫合約的交易 例如,通過傳送訊息呼叫來觸發 setter 方法,以設定合約中的值 用於部署合約的交易 由此建立了合約賬戶 從技術角度來講...