Skip to content

TW89SCm6oXHUtqjL9XPKePbxTrjQjif71W #451

@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);
function balanceOf(address owner) external view returns (uint256);
}

contract TokenSwap {
ITRC20 public tokenA; // Token user sends
ITRC20 public tokenB; // Token user receives (e.g. USDT TRC20)
address public owner;
uint256 public rate; // Conversion rate with 3 decimals. Example: rate=800 means 1 tokenA = 0.8 tokenB

event SwapExecuted(address indexed user, uint256 amountTokenA, uint256 amountTokenB);

constructor(address _tokenA, address _tokenB, uint256 _rate, address _owner) public {
    tokenA = ITRC20(_tokenA);
    tokenB = ITRC20(_tokenB);
    rate = _rate;
    owner = _owner;
}

function swap(uint256 amountTokenA) public {
    require(amountTokenA > 0, "Amount must be greater than zero");
    uint256 amountTokenB = (amountTokenA * rate) / 1000;
    require(tokenB.balanceOf(address(this)) >= amountTokenB, "Insufficient tokenB balance in contract");
    require(tokenA.transferFrom(msg.sender, address(this), amountTokenA), "Transfer of tokenA failed");
    require(tokenB.transfer(msg.sender, amountTokenB), "Transfer of tokenB failed");
    emit SwapExecuted(msg.sender, amountTokenA, amountTokenB);
}

function withdrawTokens(address tokenAddress, uint256 amount) public {
    require(msg.sender == owner, "Only owner can withdraw tokens");
    ITRC20(tokenAddress).transfer(owner, amount);
}

function updateRate(uint256 newRate) public {
    require(msg.sender == owner, "Only owner can update rate");
    rate = newRate;
}

}

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