// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; import { EpochInfo } from "../core/Structs.sol"; import { ITacInitializable } from "./ITacInitializable.sol"; interface IConsensus is ITacInitializable { /** * @dev Add new voters's group * @param groupId group id * @param adminAddress group admin address */ function addGroup(bytes32 groupId, address adminAddress) external; /** * @dev Adds a new voter. * @param groupId voter group id * @param voterAddress voter address */ function addVoter(bytes32 groupId, address voterAddress) external; /** * @dev Remove voter. * @param voterAddress Address of the voter to remove. */ function removeVoter(address voterAddress) external; /** * @dev Vote for a new value. * @param messageCollectEndTime Message collect end time for current vote. * @param newValue New value. */ function vote(uint64 messageCollectEndTime, bytes32 newValue) external; /** * @dev Returns current epoch info. * @return Epoch info. */ function getCurrentEpochInfo() external view returns (EpochInfo memory); /** * @dev Gets total number of active voters. * @return totalVoters Total number of active voters. */ function totalVoters() external view returns (uint256 totalVoters); /** * @dev Gets the current (last selected) value. * @return bytes32 Current (last selected) value. */ function getValue() external view returns (bytes32); /** * @dev Checks if merkle root is valid. * @param merkleRoot Merkle root. * @return bool True if merkle root is valid, false otherwise. */ function checkMerkleRoot(bytes32 merkleRoot) external view returns (bool); }