Skip to content

Commit

Permalink
chore: retract v0.21.x line (backport #812) (#814)
Browse files Browse the repository at this point in the history
Co-authored-by: Julien Robert <[email protected]>
  • Loading branch information
mergify[bot] and julienrbrt authored Aug 10, 2023
1 parent a9ce71a commit fdb1156
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 37 deletions.
8 changes: 0 additions & 8 deletions .mergify.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,3 @@ pull_request_rules:
backport:
branches:
- release/v0.20.x
- name: backport patches to v0.21.x branch
conditions:
- base=master
- label=backport/v0.21.x
actions:
backport:
branches:
- release/v0.21.x
5 changes: 0 additions & 5 deletions CHANGELOG.md

This file was deleted.

24 changes: 1 addition & 23 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,23 +1 @@
# IAVL+ Tree


[![version](https://img.shields.io/github/tag/cosmos/iavl.svg)](https://github.com/cosmos/iavl/releases/latest)
[![license](https://img.shields.io/github/license/cosmos/iavl.svg)](https://github.com/cosmos/iavl/blob/master/LICENSE)
[![API Reference](https://camo.githubusercontent.com/915b7be44ada53c290eb157634330494ebe3e30a/68747470733a2f2f676f646f632e6f72672f6769746875622e636f6d2f676f6c616e672f6764646f3f7374617475732e737667)](https://pkg.go.dev/github.com/cosmos/iavl)
![Lint](https://github.com/cosmos/iavl/workflows/Lint/badge.svg?branch=master)
![Test](https://github.com/cosmos/iavl/workflows/Test/badge.svg?branch=master)
[![Discord chat](https://img.shields.io/discord/669268347736686612.svg)](https://discord.gg/AzefAFd)

**Note: Requires Go 1.18+**

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

[Benchmarks](https://dashboard.bencher.orijtech.com/graphs?repo=https%3A%2F%2Fgithub.com%2Fcosmos%2Fiavl.git)

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](http://en.wikipedia.org/wiki/AVL_tree) 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](http://en.wikipedia.org/wiki/Radix_tree). 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.
# IAVL+ Tree v0.21.x is RETRACTED, use v1.x.x instead
7 changes: 6 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,9 @@ require (
gopkg.in/yaml.v3 v3.0.1 // indirect
)

retract v0.18.0
retract (
v0.18.0
// This version is not used by the Cosmos SDK and adds a maintenance burden.
// Use v1.x.x instead.
[v0.21.0, v0.21.2]
)

0 comments on commit fdb1156

Please sign in to comment.