// SPDX-License-Identifier: MIT pragma solidity >=0.8.4 <0.9.0; import '../../../interfaces/peripherals/IKeep3rJobs.sol'; abstract contract Keep3rJobOwnership is IKeep3rJobOwnership { /// @inheritdoc IKeep3rJobOwnership mapping(address => address) public override jobOwner; /// @inheritdoc IKeep3rJobOwnership mapping(address => address) public override jobPendingOwner; /// @inheritdoc IKeep3rJobOwnership function changeJobOwnership(address _job, address _newOwner) external override onlyJobOwner(_job) { jobPendingOwner[_job] = _newOwner; emit JobOwnershipChange(_job, jobOwner[_job], _newOwner); } /// @inheritdoc IKeep3rJobOwnership function acceptJobOwnership(address _job) external override onlyPendingJobOwner(_job) { address _previousOwner = jobOwner[_job]; jobOwner[_job] = jobPendingOwner[_job]; delete jobPendingOwner[_job]; emit JobOwnershipAssent(msg.sender, _job, _previousOwner); } modifier onlyJobOwner(address _job) { if (msg.sender != jobOwner[_job]) revert OnlyJobOwner(); _; } modifier onlyPendingJobOwner(address _job) { if (msg.sender != jobPendingOwner[_job]) revert OnlyPendingJobOwner(); _; } }