# Openmesh Core

{% hint style="info" %}
In active development
{% endhint %}

Openmesh Core is a crucial piece of software that is responsible for maintaining consensus among different validator nodes in the network. Openmesh-core utilizes the Tendermint consensus protocol, which is a **Byzantine Fault Tolerant** (BFT) consensus algorithm, to ensure secure and reliable blockchain operations. The specific implementation of **Tendermint** used by Openmesh-core is **CometBFT**, written in Go.

### Responsibilities of Core

* **Block Proposal**:
  * **Selection of Proposer**: The core is responsible for selecting the proposer (validator) for each round in a fair manner, typically using a round-robin or weighted round-robin approach based on stake.
  * **Block Creation**: The selected proposer creates a new block with valid transactions and broadcasts it to all validators.
* **Voting Process**:
  * **Pre-vote Collection**: The core collects pre-votes from all validators for the proposed block. Each validator votes based on the validity of the block.
  * **Pre-commit Collection**: After pre-votes are collected, the core collects pre-commits from validators who have received sufficient pre-votes.
  * **Final Commit**: The core ensures that if a block receives more than two-thirds of the pre-commits, it is added to the blockchain.
* **Transaction Validation**:
  * **Transaction Verification**: The core verifies the validity of transactions included in the proposed block. This includes checking digital signatures, ensuring no double-spending, and validating any other protocol-specific rules.
  * **State Transition**: The core applies valid transactions to the current state, producing the new state that will be agreed upon.
* **Network Communication**:
  * **Message Broadcasting**: The core handles the broadcasting of proposal, pre-vote, pre-commit, and commit messages to all validators in the network.
  * **Synchronizing Nodes**: The core ensures that all nodes stay synchronized, resolving any discrepancies in state or blockchain history.
* **Fault Tolerance and Security**:
  * **Byzantine Fault Tolerance**: The core implements mechanisms to handle up to one-third of nodes being malicious or faulty, maintaining consensus despite these issues.
  * **Punishment and Slashing**: The core is responsible for detecting and punishing misbehavior, such as double-signing or other forms of protocol violations, by slashing the stake of malicious validators.
* **Consensus Finality**:
  * **Immediate Finality**: The core ensures that once a block is committed, it is final and cannot be reverted, providing security and confidence to users and applications relying on the blockchain.
* **State Management**:
  * **State Updates**: The core manages the application of committed transactions to the state, ensuring that all nodes have a consistent view of the blockchain state.
  * **Data Integrity**: The core ensures the integrity and correctness of the state data, preventing corruption and inconsistencies.
* **Protocol Upgrades**:
  * **Consensus Upgrades**: The core may facilitate upgrades to the consensus protocol, ensuring smooth transitions without disrupting the network.
  * **Feature Implementation**: The core implements new features and improvements in the consensus mechanism, enhancing performance, security, and functionality.
* **Data Validation and Seeding:**
  * **Data Submission:** At each block each node is assigned a different data source to fetch data from until the next block. The data is than seeded by the core via IPFS and a CID of the data is submitted as a transaction.&#x20;
  * **Data Seeding:** The core is responsible for seeding the Data in the network. The core seeds the data via IPFS.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.openmesh.network/products/openmesh-cloud/openmesh-core.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
