上一章咱們介紹了如何搭建ethereum的debug環境。爲了更深刻的瞭解ethereum,咱們須要瞭解一些ethereum的相關的知識,本章咱們將介紹這些知識。html
在學習ethereum的過程當中,咱們可能會遇到下面的一些知識:算法
Hash,通常翻譯作「散列」,也有直接音譯爲「哈希」的,就是把任意長度的輸入(又叫作預映射pre-image)經過散列算法變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間一般遠小於輸入的空間,不一樣的輸入可能會散列成相同的輸出,因此不可能從散列值來肯定惟一的輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。(本段來自百度百科>._<)segmentfault
下面讓咱們來看看hash的一些特性(想了解更多關於hash的知識請自行百度):網絡
hash主要是應用在數據的驗證、區塊的標識、錢包地址中,下面讓咱們來看看ethereum使用的是什麼hash函數:ide
func rlpHash(x interface{}) (h common.Hash) { hw := sha3.NewKeccak256() rlp.Encode(hw, x) hw.Sum(h[:0]) return h }
經過上面的代碼咱們能夠看到 sha3.NewKeccak256() 這段代碼,那麼ethereum中就是用的是 Keccak256 這種hash算法。對於算法咱們沒有必要深刻去研究,咱們只須要知道算法的特性是什麼就能夠了。函數
Merkle Tree,是一棵hash樹。它的葉子結點是數據,而根節點和子節點都是hash值(關於Merkle Tree的學習,請點擊這裏)。源碼分析
Merkle Tree特性:學習
經過應用Merkle Tree,解決了區塊鏈輕節點上數據驗證的問題。區塊鏈
Merkle Patricia Tree,對於Merkle Patricia Tree的介紹請點擊這裏,這篇文章已經說明的至關好了,這裏就再也不贅述。 編碼
Recursive Length Prefix,是一種編碼規則。我的以爲數據通過它的編碼,實現了一部分的數據壓縮,能夠減小網絡傳輸數據的大小。對於RLP的介紹,請點擊這裏。