// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.19;
import "./libraries/Events.sol";
import "./libraries/Modifiers.sol";
import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
contract CanDaoFollow is
Initializable,
AccessControlUpgradeable,
UUPSUpgradeable
{
using AddressUpgradeable for address;
bytes32 public constant UPGRADER_ROLE = keccak256("UPGRADER_ROLE");
function initialize() public initializer {
__AccessControl_init();
__UUPSUpgradeable_init();
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(UPGRADER_ROLE, msg.sender);
}
/// @custom:oz-upgrades-unsafe-allow constructor
constructor() {
_disableInitializers();
}
/**
* @dev Following oneself is explicitly allowed.
* Following more than once is explicitly allowed.
*/
function follow(address _address) external {
emit Events.Follow(_address);
}
/**
* @dev Request sender should be extracted from the function call arguments.
*/
function operatorFollow(
address _sender,
address _address
) external {
Modifiers.onlyAccountingSystem();
emit Events.Follow(_address);
}
/**
* @dev Unfollowing oneself is explicitly allowed.
* Unfollowing more than once is explicitly allowed.
*/
function unfollow(address _address) external {
emit Events.Unfollow(_address);
}
/**
* @dev Request sender should be extracted from the function call arguments.
*/
function operatorUnfollow(
address _sender,
address _address
) external {
Modifiers.onlyAccountingSystem();
emit Events.Unfollow(_address);
}
function _authorizeUpgrade(
address newImplementation
) internal override onlyRole(UPGRADER_ROLE) {}
}
Paste Hosted With By Wklejamy.pl