编译器
0.8.28+commit.7893614a
文件 1 的 8:Address.sol
pragma solidity ^0.8.20;
library Address {
error AddressInsufficientBalance(address account);
error AddressEmptyCode(address target);
error FailedInnerCall();
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
function _revert(bytes memory returndata) private pure {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}
文件 2 的 8:Context.sol
pragma solidity ^0.8.20;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
文件 3 的 8:IERC20.sol
pragma solidity ^0.8.20;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
文件 4 的 8:IERC20Permit.sol
pragma solidity ^0.8.20;
interface IERC20Permit {
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
文件 5 的 8:Ownable.sol
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
error OwnableUnauthorizedAccount(address account);
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
文件 6 的 8:RISEPresaleEVM.sol
pragma solidity ^0.8.23;
import { IERC20 } from "@openzeppelin-contracts-5.0.2/token/ERC20/IERC20.sol";
import { Ownable } from "@openzeppelin-contracts-5.0.2/access/Ownable.sol";
import { ReentrancyGuard } from "@openzeppelin-contracts-5.0.2/utils/ReentrancyGuard.sol";
import { SafeERC20 } from "@openzeppelin-contracts-5.0.2/token/ERC20/utils/SafeERC20.sol";
interface IUniswapV2Pair {
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}
contract RISEPresale is Ownable, ReentrancyGuard {
using SafeERC20 for IERC20;
IERC20 public iUSDT;
IERC20 public riseToken;
IUniswapV2Pair public ethPair;
uint256 public presaleStartTime;
bool public presaleStatus = false;
bool public claimStatus = false;
address payable public salesWallet;
uint256 public actualNonce;
uint256 public tokensSold;
uint256 public actualStage;
uint256 public usdtRaised;
mapping(address => bool) isWERT;
uint256[] public stageTokens = [
550_000_000*1e18,
650_000_000*1e18,
750_000_000*1e18,
850_000_000*1e18,
950_000_000*1e18,
1_050_000_000*1e18,
1_150_000_000*1e18,
1_250_000_000*1e18,
1_350_000_000*1e18,
1_450_000_000*1e18,
1_550_000_000*1e18,
1_650_000_000*1e18,
1_750_000_000*1e18,
1_850_000_000*1e18,
3_000_000_000*1e18
];
uint256[] public stagePrices = [
400,
450,
500,
550,
600,
650,
700,
750,
800,
850,
900,
950,
1000,
1050,
1100
];
mapping(address => uint256) public mapClaimableTokenAmount;
mapping(address => bool) public mapGotBonus;
struct UserBuys {
uint256 boughtAmount;
}
uint256 public constant stageStep = 5 days;
event BoughtWithETH(uint256 _tokenAmount, address _buyer, uint256 _nonce);
event BoughtWithUSDT(uint256 _tokenAmount, address _buyer, uint256 _nonce);
event BoughtWithFIAT(uint256 _tokenAmount, address _buyer, uint256 _nonce);
event SaleOpend(bool _opened);
event ClaimOpend(bool _opened);
event TokensClaimd(address _claimer, uint256 _amount);
event ClaimTokenSet(address _token);
constructor(address _owner, address _salesWallet, address _tokenUSDT, address _wethPair) Ownable(msg.sender) {
salesWallet = payable(_salesWallet);
iUSDT = IERC20(_tokenUSDT);
ethPair = IUniswapV2Pair(_wethPair);
tokensSold = 0;
actualStage = 0;
isWERT[0x8CD81e14cD612FB5dAb211A837b6f9Ce191AD758] = true;
isWERT[0x49B38424D3bef76c6B310305ffA0a6EC182b348B] = true;
mapClaimableTokenAmount[0x909909C3471EAd3453E79caf43E9945E29a741cb] = 2500*1e18;
mapClaimableTokenAmount[0x8A343C7e5D07B01C964fBC4D2f3632C08B0c3670] = 125575*1e18;
mapClaimableTokenAmount[0x58103Aa766e10d8954c589728a9d9EF40953fe7C] = 9997500*1e18;
mapClaimableTokenAmount[0xB58F23e81d63AeaBDbfB248B7a6b6C748d675B37] = 110617*1e18;
mapClaimableTokenAmount[0x2Ad64519fA06FC13B13d8A66Bd6CC3dDd5210eaf] = 2498*1e18;
mapClaimableTokenAmount[0x18dd53EB90Adc4a1291B076A267F3297261C149D] = 213031*1e18;
mapClaimableTokenAmount[0xB321830FFe7d3F34972E5bF88Ea7c9C3A61EAE97] = 33495*1e18;
mapClaimableTokenAmount[0x66AA683F7F601B5fA8C78F68C3b7a8B03C136958] = 419645*1e18;
mapClaimableTokenAmount[0x3b5fC342538966d73e8967A9BdE653F40134cc57] = 7812*1e18;
mapClaimableTokenAmount[0x60060BCcC5c3F3A5F3682Dd07AA186D8676aFD7e] = 1116*1e18;
mapClaimableTokenAmount[0xE793e1418a1B629562fa9299D140104244D4FcDD] = 212500*1e18;
mapClaimableTokenAmount[0x550f80973A03389B5fB447C1d9bd4392cA99b076] = 125000*1e18;
openSale();
transferOwnership(_owner);
}
modifier RaiseStage {
_;
uint256 tokensLeft = stageTokens[actualStage];
if(tokensLeft <= 1000*1e8) setRaiseStage();
}
function buyWithUSDT(uint256 _usdtValue) public nonReentrant RaiseStage {
iUSDT.safeTransferFrom(msg.sender, salesWallet, _usdtValue);
(uint256 tokenAmount, uint256 tokenBonus, bool _bonus ) = getTokenAmountByValue(_usdtValue, msg.sender);
require(tokenAmount <= stageTokens[actualStage], "RISEPresasle: Not enough tokens left in that stage!");
addToLists(msg.sender, tokenAmount, tokenBonus, _bonus);
emit BoughtWithUSDT(tokenAmount, msg.sender, actualNonce);
usdtRaised = usdtRaised + _usdtValue;
}
function buyWithETH() public payable nonReentrant RaiseStage {
require(msg.value >= 0, "RISEPresale: Not enough ETH sent");
uint256 ethPrice = getETHPrice();
uint256 _usdtValue = (msg.value * ethPrice) / 10 ** 18;
(uint256 tokenAmount, uint256 tokenBonus, bool _bonus ) = getTokenAmountByValue(_usdtValue, msg.sender);
require(tokenAmount <= stageTokens[actualStage], "RISEPresasle: Not enough tokens left in that stage!");
salesWallet.transfer(msg.value);
addToLists(msg.sender, tokenAmount, tokenBonus, _bonus);
emit BoughtWithETH(tokenAmount, msg.sender, actualNonce);
usdtRaised = usdtRaised + _usdtValue;
}
function getActualStagePrice() public view returns (uint256) {
uint256 priceRaise = 0;
uint256 daysGone = (block.timestamp - presaleStartTime) / 60 / 60 / 24;
uint256 periodsGone = daysGone / 5;
if (periodsGone < 10) {
priceRaise = periodsGone * 4;
} else {
priceRaise = 40;
}
return stagePrices[actualStage] + priceRaise;
}
function buyWithWert(address _buyer, uint256 _usdtValue) public nonReentrant RaiseStage {
require(isWERT[msg.sender] == true, "RISEEVM: Need to be a WERT Wallet.");
(uint256 tokenAmount, uint256 tokenBonus, bool _bonus) = getTokenAmountByValue(_usdtValue, _buyer);
require(tokenAmount <= stageTokens[actualStage], "RISEPresasle: Not enough tokens left in that stage!");
iUSDT.safeTransferFrom(msg.sender, salesWallet, _usdtValue);
addToLists(_buyer, tokenAmount, tokenBonus, _bonus);
emit BoughtWithFIAT(tokenAmount, _buyer, actualNonce);
usdtRaised = usdtRaised + _usdtValue;
}
function calculateETHValue(uint256 _usdtValue) public view returns (uint256) {
uint256 ethPrice = getETHPrice();
uint256 ethValue = _usdtValue / ethPrice;
return ethValue;
}
function getETHPrice() public view returns(uint256) {
(uint256 res0, uint256 res1, ) = ethPair.getReserves();
return ((res1 * 1e18) / res0);
}
function addToLists(address _buyer, uint256 _amount, uint256 _bonusToken, bool _bonus) internal {
mapClaimableTokenAmount[_buyer] = mapClaimableTokenAmount[_buyer] + ((_amount + _bonusToken)*1e18);
stageTokens[actualStage] = stageTokens[actualStage] - _amount*1e18;
if(mapGotBonus[_buyer] == false) mapGotBonus[_buyer] = _bonus;
tokensSold = tokensSold + (_amount * 1e18);
}
function getTokenAmountByValue(uint256 _usdtValue, address _buyer) public view returns(uint256, uint256, bool) {
uint256 tokenBonus = 0;
uint256 tokenPrice = getActualStagePrice();
uint256 firstTokenAmount = _usdtValue / tokenPrice;
if(mapGotBonus[_buyer] == false){
if(_usdtValue > 4_999_999_999) {
tokenBonus = (firstTokenAmount * 25) / 100;
return (firstTokenAmount, tokenBonus, true);
} else if(_usdtValue > 2_499_999_999) {
tokenBonus = (firstTokenAmount * 20) / 100;
return (firstTokenAmount, tokenBonus, true);
} else if(_usdtValue > 999_999_999) {
tokenBonus = (firstTokenAmount * 15) / 100;
return (firstTokenAmount, tokenBonus, true);
} else if(_usdtValue > 249_999_999) {
tokenBonus = (firstTokenAmount * 10) / 100;
return (firstTokenAmount, tokenBonus, true);
} else if(_usdtValue > 99999999) {
tokenBonus = (firstTokenAmount * 5) / 100;
return (firstTokenAmount, tokenBonus, true);
}
}
return (firstTokenAmount, 0, false);
}
function addManualTokens(address _buyer, uint256 _amount, uint256 _bonusToken, bool _bonus) public onlyOwner {
addToLists(_buyer, _amount, _bonusToken, _bonus);
}
function setRaiseStage() public onlyOwner {
actualStage++;
stageTokens[actualStage] = stageTokens[actualStage] + stageTokens[actualStage-1];
presaleStartTime = block.timestamp;
}
function openSale() public onlyOwner() {
require(presaleStatus != true && claimStatus != true, "RISEPresale: Sale already opened.");
presaleStatus = true;
presaleStartTime = block.timestamp;
emit SaleOpend(true);
}
function closeSale() public onlyOwner() {
require(presaleStatus == true && claimStatus != true && address(riseToken) != address(0), "RISEPresale: Sale is closed, claming started!");
presaleStatus = false;
claimStatus = true;
emit ClaimOpend(true);
}
function setTokenAddress(address _token) public onlyOwner {
require(address(riseToken) == address(0), "RISEPresale: Token already set");
riseToken = IERC20(_token);
emit ClaimTokenSet(_token);
}
}
文件 7 的 8:ReentrancyGuard.sol
pragma solidity ^0.8.20;
abstract contract ReentrancyGuard {
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
_status = ENTERED;
}
function _nonReentrantAfter() private {
_status = NOT_ENTERED;
}
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}
文件 8 的 8:SafeERC20.sol
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
import {IERC20Permit} from "../extensions/IERC20Permit.sol";
import {Address} from "../../../utils/Address.sol";
library SafeERC20 {
using Address for address;
error SafeERC20FailedOperation(address token);
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data);
if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
revert SafeERC20FailedOperation(address(token));
}
}
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
(bool success, bytes memory returndata) = address(token).call(data);
return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;
}
}
{
"compilationTarget": {
"src/RISEPresaleEVM.sol": "RISEPresale"
},
"evmVersion": "cancun",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [
":@openzeppelin-contracts-5.0.2/=dependencies/@openzeppelin-contracts-5.0.2/",
":forge-std/=lib/forge-std/src/"
]
}
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_salesWallet","type":"address"},{"internalType":"address","name":"_tokenUSDT","type":"address"},{"internalType":"address","name":"_wethPair","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"BoughtWithETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"BoughtWithFIAT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"_buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"_nonce","type":"uint256"}],"name":"BoughtWithUSDT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_opened","type":"bool"}],"name":"ClaimOpend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_token","type":"address"}],"name":"ClaimTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_opened","type":"bool"}],"name":"SaleOpend","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TokensClaimd","type":"event"},{"inputs":[],"name":"actualNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"actualStage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_bonusToken","type":"uint256"},{"internalType":"bool","name":"_bonus","type":"bool"}],"name":"addManualTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtValue","type":"uint256"}],"name":"buyWithUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buyer","type":"address"},{"internalType":"uint256","name":"_usdtValue","type":"uint256"}],"name":"buyWithWert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtValue","type":"uint256"}],"name":"calculateETHValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getActualStagePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getETHPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdtValue","type":"uint256"},{"internalType":"address","name":"_buyer","type":"address"}],"name":"getTokenAmountByValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"iUSDT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapClaimableTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mapGotBonus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"riseToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"salesWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setRaiseStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stagePrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stageStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stageTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdtRaised","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]