Merkle樹是一種能夠有效驗證部分數據存在於指定數據集而且未被篡改的高效的哈希樹結構,做爲一種底層技術普遍應用在各類區塊鏈的實現當中,對於商品溯源、知識產權確認、區塊鏈公證等區塊鏈應用起着重要的做用。本文介紹11個主流的merkle樹開源實現,你能夠在本身的項目中應用。javascript
區塊鏈開發教程連接:以太坊 | 比特幣 | EOS | Tendermint | Hyperledger Fabric | Omni/USDT | Ripplephp
merkle-patricia-tree是以太坊黃皮書中的改進merkle patricia樹的實現。目前僅支持leveldb做爲存儲後端。java
Trillian是google提供的一個透明的、高度可伸縮的密碼學可驗證數據存儲庫,它採用MySQL或MariaDB做爲後端存儲層,能夠支持很是大規模的merkle樹。Trillian經過gRPC提供服務接口。node
merkle-db是一個高度可伸縮的基於不可變merkle樹的分析數據庫,主要用於存儲和訪問採用混合列結構的大規模數據集。merkle-db採用Clojure開發。webpack
merk是一個採用Rust開發的高性能鍵/值庫,採用RocksDB做爲存儲後端,採用Merkle+AVL做爲算法基礎數據結構。merk的主要設計場景是應用於區塊鏈中。git
ProximaDB是一個支持merkle證據的可驗證數據庫,主要包括數據存儲、交易管理和查詢操做這三部分實現。github
iavl是tendermint官方提供的多版本merkle+avl樹實現,採用leveldb做爲後端存儲層。golang
merkletree是一個採用golang實現的merkle樹,它沒有使用數據庫等持久化機制,徹底在內存中實現,很是適合理解merkletree的算法,並在此基礎上根據本身的需求加以調整。web
merlketreejs是JavaScript實現的merkle樹生成與驗證庫,一樣沒有後端持久化機制,徹底在內存中實現,在單一javascript文件中實現所有代碼,能夠用於瀏覽器環境,很是適合學習理解merkletree的運做機制。算法
c-geek/merkle是一個nodejs版本的merkle樹實現,支持 sha512, sha256, ripemd160, whirlpool, sha1, md5 等多種數據指紋算法,也支持數據不經哈希直接生成merkle樹。該項目一樣沒有後端持久化機制,徹底在內存中實現。
c-geek/merkle採用CommonJS封裝,主要針對node.js環境,也能夠 藉助於webpack等工具在瀏覽器環境中使用。
quux00/merkle-tree是採用Java實現的merkle樹,做者主要將其用於檢測事件序列中的失序事件。項目實現了merkle樹的序列化/反序列化,所以爲其增長持久化機制變得很是簡單。
merkle.rs是採用Rust實現的Merkle樹,沒有後端存儲機制,適合原理性學習。
原文連接:11個開源merkle樹實現 — 匯智網