// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; contract BullRunToken is ERC20, Ownable { uint price; address public bullNft; constructor() ERC20("Bull Run Token", "BLTK") {} function decimals() public pure override returns (uint8) { return 9; } function buyToken(uint _usdtValue) public onlyGetter { uint getToken = getValue(_usdtValue); _mint(msg.sender, getToken); } function getValue(uint _usdtValue) public view returns (uint) { uint getToken = _usdtValue * price; return getToken; } function setPrice(uint usdtAmount, uint bullrunAmount) public onlyOwner { price = bullrunAmount / usdtAmount; } function changeGetter(address _bullNft) public onlyOwner { require(_bullNft != bullNft, "already set address"); bullNft = _bullNft; } function wdToken(address _addressToken) public onlyOwner { uint balance = IERC20(_addressToken).balanceOf(address(this)); require(balance > 0, "no balance"); IERC20(_addressToken).transfer(msg.sender, balance); } modifier onlyGetter() { require(msg.sender == bullNft, "only nft perform"); _; } }