{
    "Function": "recordLastStakeUpdateAndRevokeSlashingAbility",
    "File": "src/contracts/core/Slasher.sol",
    "Parent Contracts": [
        "src/contracts/permissions/Pausable.sol",
        "src/contracts/interfaces/IPausable.sol",
        "src/contracts/interfaces/ISlasher.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"
    ],
    "High-Level Calls": [
        "StructuredLinkedList"
    ],
    "Internal Calls": [
        "require(bool,string)",
        "_recordUpdateAndAddToMiddlewareTimes",
        "onlyRegisteredForService",
        "_addressToUint",
        "_revokeSlashingAbility"
    ],
    "Library Calls": [
        "remove"
    ],
    "Low-Level Calls": [],
    "Code": "function recordLastStakeUpdateAndRevokeSlashingAbility(address operator, uint32 serveUntilBlock) external onlyRegisteredForService(operator) {\n        // update the 'stalest' stakes update time + latest 'serveUntilBlock' of the `operator`\n        _recordUpdateAndAddToMiddlewareTimes(operator, uint32(block.number), serveUntilBlock);\n        // remove the middleware from the list\n        require(_operatorToWhitelistedContractsByUpdate[operator].remove(_addressToUint(msg.sender)) != 0,\n             \"Slasher.recordLastStakeUpdateAndRevokeSlashingAbility: Removing middleware unsuccessful\");\n        // revoke the middleware's ability to slash `operator` after `serverUntil`\n        _revokeSlashingAbility(operator, msg.sender, serveUntilBlock);\n    }"
}