Skip to content

slashedStakeWithProposal #47

@123456788940

Description

@123456788940

// SPDX-License-Identifier: MIT
pragma solidity ^0.8;

import "./INT1.sol";
import "./IStaking.sol";
contract Evaluator {

Staking public stakingContract; // Reference to the staking contract
INTToken public INT;
uint totalTimechains=50 weeks;
uint public timechainDuration = 1 weeks;
uint public nextTimechainStart;
uint public selectedEvaluators;
address public owner;

struct _Evaluator {
address addr;
uint stake;
bool selected;

}

modifier onlyOwner(){
require(owner==msg.sender);
_;
}

mapping(address => _Evaluator) public evaluators;
address[] public selectedEvaluatorsQueue;

constructor(address _owner, address _INT, address _stakingContract) {
owner = _owner;
INT =INTToken(_INT);
stakingContract = Staking(_stakingContract); // Initialize the staking contract address
nextTimechainStart = block.timestamp + timechainDuration;
totalTimechains=50 weeks;
}

function takeEvaluatorRole(uint _stake) public {
uint _minStake = stakingContract.minStake(); // Get the minimum stake from the staking contract
require(!evaluators[msg.sender].selected, "evaluator not selected");
require(_stake >= _minStake, "Minimum stake not met");

require(block.timestamp <= nextTimechainStart, "Timechain ended");

require(selectedEvaluators <= 4, "Must not be more or less");
require(INT.transferFrom(msg.sender, address(this), _stake));

evaluators[msg.sender] = _Evaluator({
    addr: msg.sender,
    stake: _stake,
    selected: true
  
});

}

function addEvaluator(address evaluator) public onlyOwner{
require(msg.sender == owner, "Only owner has access");
require(evaluators[msg.sender].selected, "evaluator not selected");
selectedEvaluatorsQueue.push(evaluator);
selectedEvaluators++;
}

// Function to trigger the start of a new timechain
function startNewTimechain() public onlyOwner {
require(block.timestamp >= nextTimechainStart, "Timechain not ended yet");
totalTimechains-=1; // decrease the total timechains count
nextTimechainStart = block.timestamp + timechainDuration;
}

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    good first issueGood for newcomersreviewReview is used by var/core contributor in order to finalise it before even deploytestnet function

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions