File size: 1,370 Bytes
93c7565 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | // SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "./BayesianScorer.sol";
contract SafetyKernel {
enum State { OPEN, HALTED }
enum Actor { UNAUTHORIZED, AUTHORIZED }
State public state = State.OPEN;
address public authorizedActor;
uint256 public constant FLOOR_80 = 80; // 80% in basis points? Wait, 0.80 as 80/100
BayesianScorer public scorer;
event StateChanged(State newState);
event ResetInitiated(address actor);
constructor(address _authorizedActor, address _scorer) {
authorizedActor = _authorizedActor;
scorer = BayesianScorer(_scorer);
}
modifier onlyAuthorized() {
require(msg.sender == authorizedActor, "Unauthorized");
_;
}
function check(uint256 posteriorScaled, uint256 threshold) external {
// posteriorScaled is in basis points (e.g., 8000 for 80%)
if (posteriorScaled < threshold) {
state = State.HALTED;
emit StateChanged(State.HALTED);
}
// else remains OPEN
}
function reset() external onlyAuthorized {
require(state == State.HALTED, "Not halted");
state = State.OPEN;
emit StateChanged(State.OPEN);
emit ResetInitiated(msg.sender);
}
function assertOpen() external view {
require(state == State.OPEN, "Kernel is halted");
}
} |