Untitled
unknown
plain_text
10 months ago
2.9 kB
16
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