Coding Example
(Smart Contract - Solidity)
pragma solidity ^0.8.0;
contract HoldToEarn {
mapping(address => uint256) public deposits;
mapping(address => uint256) public lockEndTime;
mapping(address => uint256) public rewards;
uint256 constant INTEREST_RATE = 10; // Example: 10% for 180 days
function deposit(uint256 amount, uint256 lockPeriod) external {
require(amount > 0, "Deposit must be greater than zero");
require(lockPeriod == 30 || lockPeriod == 90 || lockPeriod == 180 || lockPeriod == 365, "Invalid lock period");
deposits[msg.sender] += amount;
lockEndTime[msg.sender] = block.timestamp + (lockPeriod * 1 days);
rewards[msg.sender] = (amount * INTEREST_RATE * lockPeriod) / (365 * 100);
}
function withdraw() external {
require(block.timestamp >= lockEndTime[msg.sender], "Lock period not yet ended");
uint256 totalAmount = deposits[msg.sender] + rewards[msg.sender];
deposits[msg.sender] = 0;
rewards[msg.sender] = 0;
payable(msg.sender).transfer(totalAmount);
}
}
Last updated