Merkle树是一种可以有效验证部分数据存在于指定数据集并且未被篡改的高效的哈希树结构,作为一种底层技术广泛应用在各种区块链的实现当中,对于商品溯源、知识产权确认、区块链公证等区块链应用起着重要的作用。本文介绍11个主流的merkle树开源实现,你可以在自己的项目中应用。
1、ethereumjs/merkle-patricia-tree - 以太坊官方merkle树实现
merkle-patricia-tree是以太坊黄皮书中的改进merkle patricia树的实现。目前仅支持leveldb作为存储后端。
2、google/Trillian - 大规模可验证数据存储
Trillian是google提供的一个透明的、高度可伸缩的密码学可验证数据存储库,它采用MySQL或MariaDB作为后端存储层,可以支持非常大规模的merkle树。Trillian通过gRPC提供服务接口。
3、greglook/merkle-db - 用于分析数据集的merkle存储
merkle-db是一个高度可伸缩的基于不可变merkle树的分析数据库,主要用于存储和访问采用混合列结构的大规模数据集。merkle-db采用Clojure开发。
4、nomic-io/merk - Rust高性能键/值库
merk是一个采用Rust开发的高性能键/值库,采用RocksDB作为存储后端,采用Merkle+AVL作为算法基础数据结构。merk的主要设计场景是应用于区块链中。
5、ProximaDB - 支持merkle证据的可验证数据库
ProximaDB是一个支持merkle证据的可验证数据库,主要包括数据存储、交易管理和查询操作这三部分实现。
6、tendermint/iavl - tendermint官方多版本merkle树库实现
iavl是tendermint官方提供的多版本merkle+avl树实现,采用leveldb作为后端存储层。
7、cbergoon/merkletree - go语言实现的merkle树
merkletree是一个采用golang实现的merkle树,它没有使用数据库等持久化机制,完全在内存中实现,非常适合理解merkletree的算法,并在此基础上根据自己的需求加以调整。
8、miguelmota/merkletreejs - js实现的merkle树
merlketreejs是JavaScript实现的merkle树生成与验证库,同样没有后端持久化机制,完全在内存中实现,在单一javascript文件中实现全部代码,可以用于浏览器环境,非常适合学习理解merkletree的运作机制。
9、c-geek/merkle - nodejs版本的merkle树
c-geek/merkle是一个nodejs版本的merkle树实现,支持 sha512, sha256, ripemd160, whirlpool, sha1, md5 等多种数据指纹算法,也支持数据不经哈希直接生成merkle树。该项目同样没有后端持久化机制,完全在内存中实现。
c-geek/merkle采用CommonJS封装,主要针对node.js环境,也可以 借助于webpack等工具在浏览器环境中使用。
10、quux00/merkle-tree - Java实现的merkle树
quux00/merkle-tree是采用Java实现的merkle树,作者主要将其用于检测事件序列中的失序事件。项目实现了merkle树的序列化/反序列化,因此为其增加持久化机制变得非常简单。
11、SpinResearch/merkle.rs - Rust实现的merkle树
merkle.rs是采用Rust实现的Merkle树,没有后端存储机制,适合原理性学习。