// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; contract Folvra { mapping(address=>mapping(address=>bool)) public follows; mapping(address=>uint256) public followingCount; event Followed(address indexed from,address indexed to); event Unfollowed(address indexed from,address indexed to); function follow(address target) external {require(target!=address(0)&&target!=msg.sender,"invalid target");require(!follows[msg.sender][target],"already following");follows[msg.sender][target]=true;followingCount[msg.sender]++;emit Followed(msg.sender,target);} function unfollow(address target) external {require(follows[msg.sender][target],"not following");follows[msg.sender][target]=false;followingCount[msg.sender]--;emit Unfollowed(msg.sender,target);} }