# 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.
