Created
November 22, 2025 01:31
-
-
Save Violet-Bora-Lee/33c949eedd88785605081db3097d64da to your computer and use it in GitHub Desktop.
스마트팜 보상 토큰 코드
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // 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