Skip to content

TW89SCm6oXHUtqjL9XPKePbxTrjQjif71W #450

@arashebadi38

Description

@arashebadi38

pragma solidity ^0.5.10;

interface ITRC20 {
function transferFrom(address from, address to, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
}

contract TronStaking {
ITRC20 public token;
address public owner;
uint256 public rewardPercent = 8102; // 81.02% reward
uint256 public stakingDuration = 30 * 86400; // 30 days in seconds

struct Stake {
    uint256 amount;
    uint256 startTime;
    bool withdrawn;
}

mapping(address => Stake) public stakes;

constructor(address tokenAddress, address ownerAddress) public {
    token = ITRC20(tokenAddress);
    owner = ownerAddress;
}

function stake(uint256 amount) public {
    require(amount > 0, "Amount must be greater than zero");
    require(stakes[msg.sender].amount == 0, "Already staking");
    require(token.transferFrom(msg.sender, address(this), amount), "Token transfer failed");

    stakes[msg.sender] = Stake(amount, now, false);
}

function withdraw() public {
    Stake storage userStake = stakes[msg.sender];
    require(userStake.amount > 0, "No active stake");
    require(!userStake.withdrawn, "Already withdrawn");
    require(now >= userStake.startTime + stakingDuration, "Staking period not finished");

    uint256 reward = (userStake.amount * rewardPercent) / 10000;
    userStake.withdrawn = true;

    require(token.transfer(msg.sender, userStake.amount + reward), "Token transfer failed");
}

function withdrawTokens(uint256 amount) public {
    require(msg.sender == owner, "Only owner can withdraw");
    require(token.transfer(owner, amount), "Token transfer failed");
}

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions