在以太坊的底層架構(gòu)中,有三種核心的數(shù)據(jù)結(jié)構(gòu)被稱為“樹”(Tree),它們共同構(gòu)成了區(qū)塊鏈數(shù)據(jù)存儲與驗證的基石,這三種樹分別是狀態(tài)樹(State Tree)、交易樹(Transactions Tree)和收據(jù)樹(Receipts Tree),它們共同確保了以太坊網(wǎng)絡(luò)的數(shù)據(jù)完整性、可追溯性和狀態(tài)一致性,下面,我們將逐一解析這三棵“樹”的作用、結(jié)構(gòu)及其在以太坊生態(tài)中的核心地位。
狀態(tài)樹(State Tree):以太坊的“全球賬本”
狀態(tài)樹是以太坊中最核心的數(shù)據(jù)結(jié)構(gòu),它記錄了整個網(wǎng)絡(luò)當(dāng)前的全局狀態(tài),以太坊的“全局狀態(tài)”就像一個分布式的“大賬本”,記錄了所有賬戶(外部賬戶或合約賬戶)的實時信息,包括賬戶余額、 nonce(交易次數(shù))、合約代碼、存儲數(shù)據(jù)等。
結(jié)構(gòu):Merkle Patricia Trie(MPT)
狀態(tài)樹采用Merkle Patricia Trie(MPT,默克爾前綴樹)結(jié)構(gòu),這是一種結(jié)合了Merkle樹和Patricia Trie優(yōu)化的數(shù)據(jù)結(jié)構(gòu):
- Patricia Trie:一種壓縮前綴樹,通過共享公共前綴減少存儲空間,適合處理大規(guī)模鍵值對數(shù)據(jù)(如以太坊的賬戶地址);
- Merkle樹:通過哈希計算將子樹根節(jié)點哈希值合并為父節(jié)點根值,最終生成一個唯一的“根哈希”(State Root),任何數(shù)據(jù)的修改都會導(dǎo)致根哈希變化,從而快速檢測數(shù)據(jù)篡改。
作用:驗證狀態(tài)一致性
狀態(tài)樹的根哈希(State Root)會被打包到每個區(qū)塊的頭部,成為區(qū)塊頭的一部分,節(jié)點通過比較本地狀態(tài)樹的根哈希與網(wǎng)絡(luò)中的最新根哈希,即可快速驗證自身狀態(tài)的完整性,當(dāng)用戶發(fā)起轉(zhuǎn)賬時,狀態(tài)樹會更新發(fā)送方和接收方的余額,生成新的根哈希,全網(wǎng)節(jié)點可通過該哈希同步最新狀態(tài)。
示例
假設(shè)以太坊上有兩個賬戶:
- 賬戶A(地址0x123…):余額10 ETH,nonce=5;
- 賬戶B(地址0x456…):余額20 ETH,nonce=3。
這些信息會被組織成MPT結(jié)構(gòu),計算出一個唯一的State Root,若賬戶A向賬戶B轉(zhuǎn)賬1 ETH,狀態(tài)樹會更新賬戶A的余額(9 ETH,nonce=6)和賬戶B的余額(21 ETH,nonce=4),State Root隨之改變。
交易樹(Transactions Tree):記錄每一筆“操作指令”
交易樹用于存儲區(qū)塊內(nèi)包含的所有交易數(shù)據(jù),是以太坊“可追溯性”的核心保障,每個區(qū)塊中的交易都會被組織成一棵Merkle樹,生成唯一的交易根哈希(Transactions Root),并記錄在區(qū)塊頭中。
結(jié)構(gòu):Merkle Tree
交易樹采用標準的Merkle樹結(jié)構(gòu):
- 將區(qū)塊內(nèi)的每筆交易通過哈希函數(shù)生成唯一的交易哈希;
- 將交易哈希兩兩配對,計算子節(jié)點哈希,遞歸向上合并,最終得到交易樹的根哈希(Transactions Root)。
作用:驗證交易存在性與順序
交易樹的根哈希確保了區(qū)塊內(nèi)交易的不可篡改性和順序性:
- 存在性證明:用戶可以通過Merkle證明驗證某筆交易是否屬于某個區(qū)塊(交易所或錢包用戶可快速查詢交易是否上鏈);
- 順序保障:交易樹的構(gòu)建順序與區(qū)塊中的交易順序一致,任何交易順序的篡改都會導(dǎo)致Transactions Root變化,從而被節(jié)點拒絕。
示例
假設(shè)一個區(qū)塊包含3筆交易:
- 交易1:A→B轉(zhuǎn)賬1 ETH;
- 交易2:C→D轉(zhuǎn)賬2 ETH;
- 交易3:E→F轉(zhuǎn)賬3 ETH。
交易樹會先將這3筆交易的哈希值作為葉子節(jié)點,通過Merkle計算生成Transactions Root,礦工打包區(qū)塊時,會將該Root寫入?yún)^(qū)塊頭,全網(wǎng)節(jié)點通過驗證Root確認交易的合法性。
收據(jù)樹(Receipts Tree):記錄交易的“執(zhí)行結(jié)果”
收據(jù)樹存儲了每筆交易的執(zhí)行結(jié)果,即“收據(jù)”(Receipt),收據(jù)不是交易本身,而是交易被以太

結(jié)構(gòu):Merkle Tree
收據(jù)樹同樣采用Merkle樹結(jié)構(gòu),其葉子節(jié)點是每筆交易的收據(jù),最終生成收據(jù)根哈希(Receipts Root),記錄在區(qū)塊頭中。
作用:輕量化查詢與事件追蹤
收據(jù)樹的核心價值在于提供輕量級的交易執(zhí)行結(jié)果查詢,無需重新執(zhí)行交易即可獲取關(guān)鍵信息:
- 交易狀態(tài):用戶可通過收據(jù)快速判斷交易是否成功(因Gas不足導(dǎo)致的失敗);
- 日志(Log):合約執(zhí)行時產(chǎn)生的日志(如ERC20代幣轉(zhuǎn)賬的“Transfer”事件)會被記錄在收據(jù)中,是去中心化應(yīng)用(DApp)事件監(jiān)聽(如The Graph索引)的核心數(shù)據(jù)源;
- Gas消耗:幫助用戶和開發(fā)者分析交易成本。
示例
假設(shè)一筆交易是調(diào)用ERC20代幣合約的transfer函數(shù):
- 交易執(zhí)行成功,消耗了21000 Gas;
- 合約生成了
Transfer事件,記錄了“from: A, to: B, value: 1 ETH”。
這些信息會被打包成收據(jù),存入收據(jù)樹,外部應(yīng)用(如區(qū)塊瀏覽器或DApp)無需重新運行transfer函數(shù),只需查詢收據(jù)即可獲取交易結(jié)果和事件數(shù)據(jù)。
三棵樹的關(guān)系:以太坊的“數(shù)據(jù)鐵三角”
狀態(tài)樹、交易樹和收據(jù)樹并非獨立存在,而是通過區(qū)塊頭緊密關(guān)聯(lián),共同構(gòu)成以太坊的“數(shù)據(jù)鐵三角”:
- 每個區(qū)塊頭包含三個關(guān)鍵哈希:
State Root(狀態(tài)樹根)、Transactions Root(交易樹根)、Receipts Root(收據(jù)樹根); - 任何一筆交易的執(zhí)行(如轉(zhuǎn)賬、合約調(diào)用)會同時影響三棵樹:
- 交易被寫入交易樹;
- 交易執(zhí)行結(jié)果(狀態(tài)變更)更新狀態(tài)樹;
- 交易收據(jù)被寫入收據(jù)樹。
這種設(shè)計確保了以太坊的數(shù)據(jù)一致性:若任何一棵樹的哈希不匹配(有人篡改歷史交易),節(jié)點即可通過比對區(qū)塊頭中的三個Root快速發(fā)現(xiàn)異常,保障網(wǎng)絡(luò)安全。
三棵樹為何重要
狀態(tài)樹、交易樹和收據(jù)樹是以太坊作為“世界計算機”的底層基礎(chǔ)設(shè)施:
- 狀態(tài)樹維護了網(wǎng)絡(luò)的全局狀態(tài),確保所有賬戶數(shù)據(jù)的實時準確;
- 交易樹記錄了所有操作指令,保障了交易的不可篡改與可追溯;
- 收據(jù)樹提供了輕量化的執(zhí)行結(jié)果,支撐了DApp的事件交互與數(shù)據(jù)分析。
理解這三棵樹,不僅有助于掌握以太坊的技術(shù)本質(zhì),更能為開發(fā)者構(gòu)建安全、高效的區(qū)塊鏈應(yīng)用提供底層邏輯支撐,隨著以太坊2.0的演進(如分片、Rollup),這三棵樹的結(jié)構(gòu)可能會優(yōu)化,但其“保障數(shù)據(jù)完整性、可追溯性、一致性”的核心使命將始終不變。