Untitled

 avatar
unknown
plain_text
2 months ago
2.9 kB
6
Indexable
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

contract DynamicTokenSale is Ownable {
    using SafeERC20 for IERC20;

    IERC20 public immutable token;
    uint256 public startTime;
    uint256 public tokenPerBnb;
    address public depositAddress; // Yeni eklendi: BNB'lerin gideceği adres
    
    mapping(address => uint256) public depositedBnb;
    uint256 public totalDeposited;

    event BnbDeposited(address indexed user, uint256 amount);
    event TokensClaimed(address indexed user, uint256 amount);
    event PriceUpdated(uint256 newPrice);
    event DepositAddressUpdated(address newAddress); // Yeni eklendi: Adres değişikliği event'i

    constructor(
        address _token,
        uint256 _startTime,
        uint256 _initialPrice
    ) Ownable(msg.sender) {
        token = IERC20(_token);
        startTime = _startTime;
        tokenPerBnb = _initialPrice;
        depositAddress = owner(); // Varsayılan olarak owner'ın adresi
    }

    // Yeni eklendi: Deposit adresini değiştirme fonksiyonu
    function setDepositAddress(address _newAddress) external onlyOwner {
        require(_newAddress != address(0), "Invalid address");
        depositAddress = _newAddress;
        emit DepositAddressUpdated(_newAddress);
    }

    function depositBnb() external payable {
        require(msg.value > 0, "Cannot deposit 0");
        require(depositAddress != address(0), "Deposit address not set"); // Güvenlik kontrolü
        
        // BNB'yi belirlenen adrese gönder
        (bool success, ) = depositAddress.call{value: msg.value}("");
        require(success, "BNB transfer failed");
        
        depositedBnb[msg.sender] += msg.value;
        totalDeposited += msg.value;
        emit BnbDeposited(msg.sender, msg.value);
    }

    function claimTokens() external {
        require(block.timestamp >= startTime, "Claiming not active yet");
        uint256 userDeposit = depositedBnb[msg.sender];
        require(userDeposit > 0, "No deposit to claim");

        uint256 tokenAmount = (userDeposit * tokenPerBnb) / 1e18;
        depositedBnb[msg.sender] = 0;
        
        token.safeTransferFrom(owner(), msg.sender, tokenAmount);
        emit TokensClaimed(msg.sender, tokenAmount);
    }

    function updateTokenPrice(uint256 newPrice) external onlyOwner {
        tokenPerBnb = newPrice;
        emit PriceUpdated(newPrice);
    }

    // withdrawBnb kaldırıldı (artık BNB'ler direkt depositAddress'e gidiyor)
    
    function getClaimableTokens(address user) external view returns (uint256) {
        return (depositedBnb[user] * tokenPerBnb) / 1e18;
    }
}
Editor is loading...
Leave a Comment