Untitled
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