3.4 以太坊架構詳解
1.以太坊總體架構
- 以太坊詳細架構
- 賬戶設計
- 外部賬戶:一般意義上的賬戶
- 合約賬戶:它是一種可程式設計的賬戶,合約存在以太坊的區塊鏈上,它是程式碼和資料的集合。合約受程式碼控制並由外部所有賬戶啟用
- 在以太坊中,區塊鏈被作為一個通用的管理物件狀態轉換的去中心化平臺,賬戶就是有狀態的物件。外部所有賬戶的狀態就是餘額,而合約賬戶的狀態可以是餘額、程式碼執行情況,以及合約的儲存。以太坊網路的狀態就是所有賬戶的狀態,該狀態由每個區塊的交易來更新,同時需要在全網形成共識。使用者和以太坊的互動需要通過對賬戶的交易來實現。
- 以太坊外部賬戶由公、私鑰對定義。地址是公鑰的後20位
- 金鑰檔案儲存在以太坊的資料目錄中的keystore目錄下面
- 合約賬戶可以執行圖錄完備的計算任務,也可以在合約賬戶之間傳遞訊息,合約編譯成以太坊虛擬機器位元組碼,記錄在區塊鏈上面 。
- 區塊鏈設計
- 以太坊區塊鏈的每個區塊不僅儲存著交易清單,還儲存著最新的狀態。
- 以太坊的狀態包含了一個鍵值表,鍵是地址(address),值是賬戶裡宣告的所有變數,包括餘額,隨機數,程式碼和賬戶的儲存(儲存也是以一顆樹的形式來組織)
- 對於以太坊的Merkel-Patricia樹,鍵被編碼成向下訪問樹的
- 在以太坊區塊鏈的區塊報文頭中,存放了3個根雜湊:Merkel根雜湊值,狀態的根雜湊值,收據的根雜湊值
- POW機制
- 以太坊的POW演算法叫做Ethash演算法,該演算法主要尋找一個隨機數作為輸入,使得運算結果小於一個特定的難度門檻。
- 以太坊通過動態調節難度來達到平均15秒在全網中找到一個新的區塊。每15秒的“心跳”基本上是全網更新系統狀態的節奏,並保證當攻擊者的計算能力不超過全網計算能力的一半時,攻擊者無法改寫交易記錄或進行分叉。
- 以太坊的POW中加入了記憶體難度,使得僅僅依靠算力來進行挖礦的方式行不通
- 叔區塊:批符合難度條件,但是區塊裡的交易不被確認的區塊。
- 每個區塊最多能連結兩個叔區塊
- 計算和圖錄完備
- 以太坊的計算環境是圖錄完備的
- EVM高階語言
- Solidity
- Serpent
- LLL
- 以太坊P2P網路
- RLPx協議
- 以太坊網路節點間的通訊採用P2P線上協議。節點間採用RLPx編碼及認證的通訊傳輸協議來傳輸訊息包,即提供 傳送和接收訊息的協議功能。
- 節點可以自由的在任何TCP商品釋出和接受連線,預設的商品是30303.
- 正式版RLPx功能如下:
- 單一協議的UDP節點發現
- ECDSA簽名的UDP
- 加密握手、認證
- 節點永續性
- 加密/認證TCP
- TCP幀處理
- P2P節點採用RLPx的發現協議DHT來實現鄰節點的發現。
- RLP(遞迴長度字首):將二進位制的資料進行任意巢狀的陣列編碼。在以太坊中,RLP是對物件編碼的主要方法
- Whisper協議
- 它是DAPP之間通訊的通訊協議。
- Whisper結合了DHT和資料包訊息系統(如UDP),因此同時具有兩種協議的特性。
- Whisper是一個線標誌的訊息系統,提供了一個低層次但又簡易使用的API,不需要記憶底層的硬體屬性。
- Whisper提供多索引,非單一的記錄,也就是說同一個記錄可以有多個鍵,不同鍵之間的記錄可能是一樣的
- Whisper是為需要大規模的多對多資料發現,訊號談判,最少的傳輸通訊,完全的隱私保護的下一代DAPP而設計的
- 使用場景
- DAPP需要把少量的資訊傳送出去,而這些釋出的訊息需要保留相當一段時間
- DAPP需要把訊號發給其它的DAPP,希望他們參與對某個交易的協同
- DAPP之間需要提供非實時的提示或通訊
- DAPP需要提供暗通訊,也就是通訊雙方除了知道對方的雜湊值之外,不知道對方更多的底細。
- RLPx協議
- 事件
- 以太坊中的事件是一個以太坊日誌和事件監測協議的抽象 。
- 日誌記錄提供合約的地址
- 事件則利用現有的ABI功能來解析日誌記錄。
- 賬戶設計
-
學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928 -
掃碼獲取海量視訊及原始碼 QQ群:721929980
相關文章
- 5.1 以太坊原始碼詳解1原始碼
- 5.2 以太坊原始碼詳解2原始碼
- 5.3 以太坊原始碼詳解3原始碼
- 5.4 以太坊原始碼詳解4原始碼
- 5.5 以太坊原始碼詳解5原始碼
- 5.6 以太坊原始碼詳解6原始碼
- 5.7 以太坊原始碼詳解7原始碼
- 3.3 以太坊核心詞彙詳解
- 以太坊官方 Token 程式碼詳解
- 區塊鏈2.0架構:以太坊區塊鏈的介紹區塊鏈架構
- 區塊鏈2.0以太坊編輯器atom配置詳解區塊鏈
- 以太坊連載(一):以太坊是什麼?
- 以太坊是什麼?以太坊交易可靠嗎?
- Geth命令用法-引數詳解 and 以太坊原始碼檔案目錄原始碼
- 區塊鏈2.0以太坊配置solidity編譯器sublime詳解區塊鏈Solid編譯
- Jenkins架構詳解Jenkins架構
- 第六課 以太坊客戶端Geth命令用法-引數詳解客戶端
- 以太坊原始碼分析(37)eth以太坊協議分析原始碼協議
- 以太坊原始碼分析(18)以太坊交易執行分析原始碼
- 以太坊學習筆記————1、以太坊是什麼?筆記
- 以太坊學習筆記————7、以太坊賬戶管理筆記
- Chromium VIZ架構詳解架構
- kafka核心架構詳解Kafka架構
- TDengine 3.0 架構詳解架構
- 以太坊簡介
- RabbitMQ架構詳解(7大架構原理模型圖解)MQ架構模型圖解
- 以太坊原始碼分析(52)以太坊fast sync演算法原始碼AST演算法
- 什麼是以太幣——零基礎瞭解以太坊(三)
- 以太坊原始碼分析(54)以太坊隨機數生成方式原始碼隨機
- 以太坊原始碼分析(3)以太坊交易手續費明細原始碼
- 【以太坊剖析】以太坊虛擬機器(EVM)之基本定義虛擬機
- 區塊鏈2.0以太坊錢包編譯詳解+連線私有鏈+修改區塊鏈編譯
- 1.5 比特幣架構詳解比特幣架構
- Android架構元件WorkManager詳解Android架構元件
- Dubbo架構設計詳解架構
- HotDB 基礎架構詳解架構
- 以太坊概率微支付
- 以太坊Geth安裝