// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; import '../libraries/Types.sol'; import './IMajorCandidates.sol'; import './IStake.sol'; /// @dev Slasher interface /// @author Alexandas interface ISlasher { /// @dev emit when governance address updated /// @param governance governance address event GovernanceUpdated(address governance); /// @dev emit when `Stake` contract updated /// @param stake `Stake` contract event StakeUpdated(IStake stake); /// @dev emit when `MajorCandidates` contract updated /// @param majorCandidates `MajorCandidates` contract event MajorCandidatesUpdated(IMajorCandidates majorCandidates); /// @dev emit when default slash amount updated /// @param amount slash amount event DefaultSlashAmountUpdated(uint256 amount); /// @dev emit when public notice period updated /// @param period public notice period event PublicNoticePeriodUpdated(uint256 period); /// @dev emit when max coefficient updated /// @param maxCoef max coefficient event MaxCoefUpdated(uint256 maxCoef); /// @dev emit when drafter slash reward coefficient updated /// @param drafterCoef drafter slash reward coefficient event DrafterCoefUpdated(uint64 drafterCoef); /// @dev emit when validator slash reward coefficient updated /// @param validatorCoef validator slash reward coefficient event ValidatorCoefUpdated(uint256 validatorCoef); /// @dev emit when executor slash reward coefficient updated /// @param executorCoef executor slash reward coefficient event ExecutorCoefUpdated(uint256 executorCoef); /// @dev emit when slash drafted /// @param nonce slash number /// @param candidate candidate address /// @param slashBlock slashed block in posc /// @param manifest node manifest /// @param accuracy posc accuracy event DraftSlash(uint256 nonce, address candidate, uint64 slashBlock, string manifest, uint64 accuracy); /// @dev emit when slash drafted /// @param nonce slash number event RejectSlash(uint256 nonce); /// @dev emit when slash drafted /// @param nonce slash number event ExecuteSlash(uint256 nonce, address executor); /// @dev return `Stake` contract address function stake() external view returns(IStake); /// @dev return `MajorCandidates` contract address function majorCandidates() external view returns(IMajorCandidates); /// @dev return default slash amount function defaultSlashAmount() external view returns(uint256); /// @dev return public notice period function publicNoticePeriod() external view returns(uint256); /// @dev return current slash nonce function nonce() external view returns(uint256); /// @dev return max coefficient function MAXCOEF() external view returns(uint64); /// @dev return drafter slash reward coefficient function drafterCoef() external view returns(uint64); /// @dev return validator slash reward coefficient function validatorCoef() external view returns(uint64); /// @dev return executor slash reward coefficient function executorCoef() external view returns(uint64); /// @dev return slash information at a specific nonce /// @param _nonce nonce number /// @return slash information function getSlashAt(uint256 _nonce) external view returns(Types.SlashInfo memory); /// @dev return nonce given a candidate if the candidate is in slashing /// @param candidate candidate address /// @return nonce number function nonceOf(address candidate) external view returns(uint256); /// @dev set drafter slash reward coefficient /// @param _drafterCoef drafter slash reward coefficient function setDrafterCoef(uint64 _drafterCoef) external; /// @dev set validator slash reward coefficient /// @param _validatorCoef validator slash reward coefficient function setValidatorCoef(uint64 _validatorCoef) external; /// @dev set executor slash reward coefficient /// @param _executorCoef executor slash reward coefficient function setExecutorCoef(uint64 _executorCoef) external; /// @dev draft a slash /// @param slashBlock slashed block in posc /// @param manifest node manifest /// @param accuracy posc accuracy /// @param signatures major candidates signatures function draft(uint64 slashBlock, string memory manifest, uint64 accuracy, bytes[] memory signatures) external; /// @dev reject a slash /// @param manifest node manifest function reject(string memory manifest) external; /// @dev execute a slash /// @param manifest node manifest function execute(string memory manifest) external; /// @dev return whether candidate is in slashing /// @param candidate candidate address /// @return whether candidate is in slashing function slashExists(address candidate) external view returns(bool); /// @dev check whether signatures is valid /// @param hash message hash /// @param signatures signatures for major candidates /// @param signers major candidate signers function checkNSignatures(bytes32 hash, bytes[] memory signatures) external view returns(address[] memory signers); }