Skip to content

Instantly share code, notes, and snippets.

@Violet-Bora-Lee
Created November 22, 2025 01:31
Show Gist options
  • Select an option

  • Save Violet-Bora-Lee/33c949eedd88785605081db3097d64da to your computer and use it in GitHub Desktop.

Select an option

Save Violet-Bora-Lee/33c949eedd88785605081db3097d64da to your computer and use it in GitHub Desktop.
스마트팜 보상 토큰 코드
// SPDX-License-Identifier: MIT
pragma solidity 0.8.29;
import "@openzeppelin/[email protected]/token/ERC20/ERC20.sol";
contract FarmToken is ERC20 {
address public admin;
// Mapping from activity name to reward points
mapping(string => uint256) public activityRewardPoints;
// Mapping to track registered members
mapping(address => bool) public registeredMembers;
modifier onlyAdmin() {
require(msg.sender == admin, "Only admin");
_;
}
modifier onlyRegistered(address member) {
require(registeredMembers[member], "Member is not registered");
_;
}
constructor() ERC20("FarmToken", "FARM") {
admin = msg.sender;
// Initialize some activities and their reward points
activityRewardPoints["watering"] = 10 * 10 ** decimals();
activityRewardPoints["harvesting"] = 20 * 10 ** decimals();
}
/// @notice Register a new member
/// @param member The address to register
function registerMember(address member) external onlyAdmin {
require(!registeredMembers[member], "Member already registered");
registeredMembers[member] = true;
}
/// @notice Reward a registered member for a specific activity
/// @param member The address of the member
/// @param activityName The activity name to reward
function rewardActivity(address member, string calldata activityName) external onlyAdmin onlyRegistered(member) {
uint256 reward = activityRewardPoints[activityName];
require(reward > 0, "Undefined activity reward");
_mint(member, reward);
}
/// @notice Check the token balance of a member
/// @param member The address of the member
/// @return The FARM token balance
function checkBalance(address member) external view returns (uint256) {
return balanceOf(member);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment