-
Notifications
You must be signed in to change notification settings - Fork 453
Open
Description
// SPDX-License-Identifier: MIT
pragma solidity ^0.5.10;
interface ITRC20 {
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function transfer(address recipient, uint256 amount) external returns (bool);
}
contract TronStake615 {
ITRC20 public token;
uint256 public rewardPercent = 6150; // 61.5% * 100
uint256 public stakingDuration = 30 days;
struct Stake {
uint256 amount;
uint256 startTime;
bool claimed;
}
mapping(address => Stake) public stakes;
constructor(address _tokenAddress) public {
token = ITRC20(_tokenAddress);
}
function stake(uint256 amount) public {
require(stakes[msg.sender].amount == 0, "Already staking");
require(amount > 0, "Invalid amount");
require(token.transferFrom(msg.sender, address(this), amount), "Transfer failed");
stakes[msg.sender] = Stake(amount, now, false);
}
function withdraw() public {
Stake storage s = stakes[msg.sender];
require(!s.claimed, "Already withdrawn");
require(now >= s.startTime + stakingDuration, "Staking period not finished");
uint256 reward = s.amount * rewardPercent / 10000; // ضریب 100 * درصد 61.5 = 6150 تقسیم بر 10000
s.claimed = true;
require(token.transfer(msg.sender, s.amount + reward), "Transfer failed");
}
function emergencyWithdraw() public {
Stake storage s = stakes[msg.sender];
require(!s.claimed, "Already withdrawn");
s.claimed = true;
require(token.transfer(msg.sender, s.amount), "Transfer failed");
}
}
Metadata
Metadata
Assignees
Labels
No labels