This release fixes non-determinism with module "end block" ordering by tightening partial order constraints and sorting Go maps correctly.
Additional Context
We utilize a directed acyclic graph (DAG) data structure for ordering "end blocks". DAG takes a list of modules from the SDK via the app.ModuleManager().ModuleNames()
function.
The `ModuleNames() function returns modules in non-deterministic order due to a map iteration. Our DAG took those modules to construct total order from a partial order. Although there was an attempt to sort the module names to prevent non-determinism, there was a really basic error, leading to an unsorted copy given to the DAG here.
The change has been live for over 5 months. Due to strict partial order constraints of the graph, the issue has not surfaced until the execution of the proposal to update staking parameters. Every other transitive relation has been asserted to hold. The proposal required the staking module's "end block" to come after gov. However, there was no partial order constraint between staking and gov. As a result, that has led to some validators executing an erroneous "end block" order and diverging from the rest of the network.
Usage
🐳 Docker
The following Docker images are available in our registry:
Image | Description |
---|---|
osmolabs/osmosis:12.1.0
| Default image. Based on Distroless image |
osmolabs/osmosis:12.1.0-distroless
| Distroless image (same as above) |
osmolabs/osmosis:12.1.0-nonroot
| Distroless non root image |
osmolabs/osmosis:12.1.0-alpine
| Alpine image |
Example:
docker run osmolabs/osmosis:12.1.0 version
# v12.1.0
All the images have support for arm64
and amd64
architectures.
🔨 Build from source
git clone https://github.com/osmosis-labs/osmosis
cd osmosis && git checkout v12.1.0
make install
⚡️ Download binaries
Binaries for linux amd64 and arm64 are available below.
Darwin users should build binaries from source.