All Projects → line → iavl

line / iavl

Licence: Apache-2.0 license
Merkleized IAVL+ Tree implementation in Go forked from cosmos/iavl(https://github.com/cosmos/iavl)

Programming Languages

go
31211 projects - #10 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to iavl

Merkle Tree Solidity
JS - Solidity sha3 merkle tree bridge. Generate proofs in JS; verify in Solidity.
Stars: ✭ 94 (+452.94%)
Mutual labels:  merkle-tree
Merkletree
A Merkle Tree implementation written in Go.
Stars: ✭ 236 (+1288.24%)
Mutual labels:  merkle-tree
go-merkle
A fixed Merkle Tree implementation in Go
Stars: ✭ 36 (+111.76%)
Mutual labels:  merkle-tree
Coniks Go
A CONIKS implementation in Golang
Stars: ✭ 102 (+500%)
Mutual labels:  merkle-tree
Blockchain Java
A simplified blockchain implementation in Java
Stars: ✭ 160 (+841.18%)
Mutual labels:  merkle-tree
Trillian
A transparent, highly scalable and cryptographically verifiable data store.
Stars: ✭ 2,819 (+16482.35%)
Mutual labels:  merkle-tree
Merkle tree
A merkle tree is a data structure used for efficiently summarizing sets of data, often one-time signatures.
Stars: ✭ 68 (+300%)
Mutual labels:  merkle-tree
fts-tree
PoC implementation of follow-the-satoshi in a Merkle tree.
Stars: ✭ 17 (+0%)
Mutual labels:  merkle-tree
Iavl
Merkleized IAVL+ Tree implementation in Go
Stars: ✭ 197 (+1058.82%)
Mutual labels:  merkle-tree
qed
The scalable, auditable and high-performance tamper-evident log project
Stars: ✭ 87 (+411.76%)
Mutual labels:  merkle-tree
Merkle Tree
Merkle Trees and Merkle Inclusion Proofs
Stars: ✭ 130 (+664.71%)
Mutual labels:  merkle-tree
Immudb
immudb - world’s fastest immutable database, built on a zero trust model
Stars: ✭ 3,743 (+21917.65%)
Mutual labels:  merkle-tree
merkle-patricia-trie
A simplified golang implementation of Ethereum's Modified Patricia Trie.
Stars: ✭ 165 (+870.59%)
Mutual labels:  merkle-tree
Merkle.rs
🎄 Merkle tree in Rust
Stars: ✭ 98 (+476.47%)
Mutual labels:  merkle-tree
proofable-image
Build trust into your image by creating a blockchain certificate for it
Stars: ✭ 17 (+0%)
Mutual labels:  merkle-tree
Quadrable
Authenticated multi-version database: sparse binary merkle tree with compact partial-tree proofs
Stars: ✭ 78 (+358.82%)
Mutual labels:  merkle-tree
Merkletreejs
🌱 Construct Merkle Trees and verify proofs in JavaScript.
Stars: ✭ 238 (+1300%)
Mutual labels:  merkle-tree
bargad
A Data Integrity framework for building efficient blockchains, transparency logs, secure file systems and more.
Stars: ✭ 54 (+217.65%)
Mutual labels:  merkle-tree
ent
No description or website provided.
Stars: ✭ 33 (+94.12%)
Mutual labels:  merkle-tree
merkle
Merkle root algorithms in various languages
Stars: ✭ 40 (+135.29%)
Mutual labels:  merkle-tree

IAVL+ Tree

Note: Requires Go 1.15+

A versioned, snapshottable (immutable) AVL+ tree for persistent data.

The purpose of this data structure is to provide persistent storage for key-value pairs (say to store account balances) such that a deterministic merkle root hash can be computed. The tree is balanced using a variant of the AVL algorithm so all operations are O(log(n)).

Nodes of this tree are immutable and indexed by their hash. Thus any node serves as an immutable snapshot which lets us stage uncommitted transactions from the mempool cheaply, and we can instantly roll back to the last committed state to process transactions of a newly committed block (which may not be the same set of transactions as those from the mempool).

In an AVL tree, the heights of the two child subtrees of any node differ by at most one. Whenever this condition is violated upon an update, the tree is rebalanced by creating O(log(n)) new nodes that point to unmodified nodes of the old tree. In the original AVL algorithm, inner nodes can also hold key-value pairs. The AVL+ algorithm (note the plus) modifies the AVL algorithm to keep all values on leaf nodes, while only using branch-nodes to store keys. This simplifies the algorithm while keeping the merkle hash trail short.

In Ethereum, the analog is Patricia tries. There are tradeoffs. Keys do not need to be hashed prior to insertion in IAVL+ trees, so this provides faster iteration in the key space which may benefit some applications. The logic is simpler to implement, requiring only two types of nodes -- inner nodes and leaf nodes. On the other hand, while IAVL+ trees provide a deterministic merkle root hash, it depends on the order of transactions. In practice this shouldn't be a problem, since you can efficiently encode the tree structure when serializing the tree contents.

LINE iavl is forked from original iavl at 2021-03-16.

We applied performance tuning such as fastcache application with little modification to the original iavl's algorithm.

See CAHNGELOG for further changes.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].