# 以太坊節點介紹 [TOC] ###### tags: `blockchain` `Ethereum` # Ethereum Network - Ethereum 是由分散式節點所組成的網路架構 - 節點稱為 Ethereum Nodes or Ethereum Clients - 任何人只要有規格足夠的硬體設備都能夠加入以太坊網路成為節點,貢獻算力賺取區塊挖礦獎勵 ## 以太坊節點所做的工作 - Receive Transactions:接收來自 DApp、錢包 或 其它節點 的交易資訊 - Receive Blocks:從其它節點接收區塊資訊,並同步至最新的區塊高度 - Validating:驗證新的區塊之正確性、驗證待處理交易之有效性 - Executing:處理交易,進行運算並更改狀態值,打包成新區塊 - Mining:用電腦算力來計算 nonce 值,最先找到 nonce 值出塊並廣播的礦工可以獲得區塊獎勵與所有交易之手續費(Gas) - Consensus:通過共識機制達成全網帳本之一致性或區塊重組(reorg) # Ethereum Nodes Categories ## Full Node 全節點 - 全節點是擁有完整區塊鏈帳本資料的節點,具備獨立驗證的能力來確認交易之有效性 - 儲存所有歷史交易資訊 - 監測礦工挖出來的新區塊,驗證其合法性後同步該區塊 - 監測區塊鏈網路中的新交易資訊,驗證每個交易的合法性 - 將驗證過的「交易/區塊資訊」廣播給全網路節點 ### 礦工節點 - 礦工: 將驗證過的待處理交易打包成新區塊,並以電腦算力來計算 「nonce 值」 - 最先找到 nonce 值成功出塊並廣播的礦工會獲得區塊獎勵與所有交易之手續費(gas)作為報酬 - 礦工必須要運行全節點才能即時瀏覽區塊鏈歷史資料進行交易驗證,再將驗證通過的交易進行打包 - 因此,所有礦工必定是全節點 ## Light Node 輕節點 - 只儲存最小量的狀態(即「區塊標頭 Block Header」)來作為發送或傳遞交易訊息的節點 ### Block header and body - [Merkle Patricia Trie — How Ethereum saves a state](https://hackmd.io/@pohanlu/Merkle_Patricia_Tree) - Body 即是交易列表;Block Header 則包含了前個區塊的 Hash、時間戳及挖礦難度等相關參數 ### 輕節點如何驗證交易 - 由於割捨掉區塊的 Body,即所有歷史的交易列表,因此當輕節點需要驗證某個交易的合法性時,具體做法為: 1. 向鄰近的全節點發起確認請求 - 假設有一個合約執行的交易,那麼必須要有該合約部署時的原始碼 2. 全節點收到請求後提供所需相關資訊供驗證 ### 輕節點特點 - 只儲存每個區塊的區塊標頭 Block Header - 不一定保持隨時在線(獲取最新的 Block Header 資訊) - 無法驗證大多數交易的合法性,只能驗證與自己相關交易的合法性 - 無法驗證新區塊的正確性 ## Archive Node 歸檔節點 - 「歸檔節點」是在全節點的基礎之上,額外儲存了每個區塊高度的區塊狀態(個人帳戶與合約帳戶之當時餘額等資訊) - 即針對每個區塊高度當下的狀態進行快照並存檔 - 方便查詢歷史狀態 # Reference - [全節點與輕節點:以太坊節點面面觀 <10> 文組也該知道的區塊鏈技術知識](https://medium.com/pelith/ethereum-nodes-d3e07745d189)