package
3.1.3+incompatible
Repository: https://github.com/filecoin-project/mir.git
Documentation: pkg.go.dev

# README

Insanely Scalable SMR (ISS)

ISS is the first modular algorithm to make leader-driven total order broadcast scale in a robust way, published in March 2022. At its interface, ISS is a classic state machine replication (SMR) system that establishes a total order of client requests with typical liveness and safety properties, applicable to any replicated service, such as resilient databases or a blockchain ordering layer. It is a further development and a successor of the Mir-BFT protocol (not to be confused with the Mir library used to implement ISS, see the description of Mir).

ISS achieves scalability without requiring a primary node to periodically decide on the protocol configuration. It multiplexes multiple instances of a leader-driven consensus protocol which operate concurrently and (almost) independently. We abstract away the logic of the used consensus protocol and only define an interface - that we call "Sequenced Broadcast" (SB) - that such a consensus protocol must use to interact with ISS.

ISS maintains a contiguous log of (batches of) client requests at each node. Each position in the log corresponds to a unique sequence number and ISS agrees on the assignment of a unique request batch to each sequence number. Our goal is to introduce as much parallelism as possible in assigning batches to sequence numbers while avoiding request duplication, i.e., assigning the same request to more than one sequence number. To this end, ISS subdivides the log into non-overlapping segments. Each segment, representing a subset of the log's sequence numbers, corresponds to an independent consensus protocol instance that has its own leader and executes concurrently with other instances.

To prevent the leaders of two different segments from concurrently proposing the same request, and thus wasting resources, while also preventing malicious leaders from censoring (i.e., not proposing) certain requests, we adopt and generalize the partitioning of the request space introduced by Mir-BFT. At any point in time, ISS assigns a different subset of client requests (that we call a bucket) to each segment. ISS periodically changes this assignment, such that each request is guaranteed to eventually be assigned to a segment with a correct leader.

The figure below shows the high-level architecture of the ISS protocol. High-level architecture of the ISS protocol

# Packages

No description provided by the author
No description provided by the author

# Functions

No description provided by the author
DefaultModules takes a Modules object (as a value, not a pointer to it) and returns a pointer to a new Modules object with default ISS modules inserted in fields where no module has been specified.
No description provided by the author
No description provided by the author
InitialStateSnapshot creates and returns a default initial snapshot that can be used to instantiate ISS.
No description provided by the author
No description provided by the author
New returns a new initialized instance of the ISS protocol module to be used when instantiating a mir.Node.
NewBuckets returns a new group of numBuckets initialized buckets.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

The CommitLogEntry type represents an entry of the commit log, the final output of the ordering process.
The ISS type represents the ISS protocol module to be used when instantiating a node.
ModuleConfig contains the names of modules ISS depends on.
RequestBucket represents a subset of received requests (called a Bucket in ISS) that retains the order in which the requests have been added.

# Type aliases

BucketGroup represents a group of request buckets.