/**
* View Change Protocols and Leader Election
* Implements robust leader election and view change mechanisms
* for Byzantine fault-tolerant consensus
*/
///
import { EventEmitter } from "events";
import { Agent, ConsensusMessage } from "./byzantine-consensus";
export interface ViewChangeMessage {
type: "view-change" | "new-view" | "view-change-ack";
viewNumber: number;
agentId: string;
lastStableCheckpoint: number;
checkpointProof: CheckpointMessage[];
preparedMessages: PreparedSet[];
timestamp: Date;
signature: string;
}
export interface NewViewMessage {
type: "new-view";
viewNumber: number;
viewChangeMessages: ViewChangeMessage[];
prePrepareMessages: ConsensusMessage[];
leaderId: string;
timestamp: Date;
signature: string;
}
export interface CheckpointMessage {
sequenceNumber: number;
digest: string;
agentId: string;
timestamp: Date;
signature: string;
}
export interface PreparedSet {
sequenceNumber: number;
digest: string;
view: number;
prePrepare: ConsensusMessage;
prepares: ConsensusMessage[];
}
export interface LeaderCandidate {
agentId: string;
reputation: number;
availability: number;
performance: number;
stake: number;
lastElectionTime: Date;
electionScore: number;
}
export interface ElectionConfiguration {
algorithm: "round-robin" | "reputation-based" | "stake-weighted" | "performance-based" | "hybrid";
term: number;
heartbeatInterval: number;
electionTimeout: number;
maxConsecutiveTerms: number;
}
export interface ViewState {
currentView: number;
currentLeader: string;
viewStartTime: Date;
lastViewChange: Date;
viewChangeInProgress: boolean;
participatingAgents: Set;
suspectedFaultyAgents: Set;
}
export declare class ViewChangeLeaderElection extends EventEmitter {
private nodeId;
private totalAgents;
private viewState;
private agents;
private viewChangeMessages;
private checkpoints;
private leaderCandidates;
private electionHistory;
private consecutiveTerms;
private readonly config;
private heartbeatTimer;
private electionTimer;
constructor(nodeId: string, totalAgents?: number, config?: Partial);
/**
* Register an agent for leader election
*/
registerAgent(agent: Agent): void;
/**
* Remove an agent from leader election
*/
removeAgent(agentId: string): void;
/**
* Initiate view change
*/
initiateViewChange(reason: string): Promise;
/**
* Process incoming view change message
*/
processViewChangeMessage(message: ViewChangeMessage): Promise;
/**
* Process view change when enough messages are received
*/
private processViewChange;
/**
* Send new-view message as the new leader
*/
private sendNewViewMessage;
/**
* Process new-view message
*/
processNewViewMessage(message: NewViewMessage): Promise;
/**
* Elect leader based on configured algorithm
*/
private electLeader;
/**
* Round-robin leader election
*/
private roundRobinElection;
/**
* Reputation-based leader election
*/
private reputationBasedElection;
/**
* Stake-weighted leader election
*/
private stakeWeightedElection;
/**
* Performance-based leader election
*/
private performanceBasedElection;
/**
* Hybrid leader election (combines multiple factors)
*/
private hybridElection;
/**
* Update candidate performance metrics
*/
updateCandidateMetrics(agentId: string, metrics: {
reputation?: number;
availability?: number;
performance?: number;
stake?: number;
}): void;
/**
* Start heartbeat monitoring
*/
private startHeartbeatMonitoring;
/**
* Check leader heartbeat
*/
private checkLeaderHeartbeat;
/**
* Send heartbeat as leader
*/
private sendHeartbeat;
/**
* Process heartbeat message
*/
processHeartbeat(heartbeat: any): void;
/**
* Start election timeout
*/
private startElectionTimeout;
/**
* Create view change message
*/
private createViewChangeMessage;
/**
* Validate view change message
*/
private validateViewChangeMessage;
/**
* Validate new-view message
*/
private validateNewViewMessage;
/**
* Construct pre-prepare messages for new view
*/
private constructPrePrepareMessages;
/**
* Get last stable checkpoint
*/
private getLastStableCheckpoint;
/**
* Get checkpoint proof
*/
private getCheckpointProof;
/**
* Get prepared messages
*/
private getPreparedMessages;
/**
* Broadcast view change message
*/
private broadcastViewChangeMessage;
/**
* Broadcast new-view message
*/
private broadcastNewViewMessage;
/**
* Broadcast message to all agents
*/
private broadcastMessage;
/**
* Sign message
*/
private signMessage;
/**
* Get current view state
*/
getViewState(): ViewState;
/**
* Get leader election statistics
*/
getElectionStatistics(): {
totalElections: number;
currentLeader: string;
currentView: number;
leadershipChanges: number;
averageTermLength: number;
candidateScores: Map;
};
/**
* Get minimum quorum size for Byzantine consensus
*/
getMinQuorum(): number;
/**
* Check if we have sufficient active agents for quorum
*/
hasQuorum(): boolean;
/**
* Cleanup resources
*/
cleanup(): void;
}
export default ViewChangeLeaderElection;
//# sourceMappingURL=view-change-leader-election.d.ts.map