编译器
0.8.17+commit.8df45f5f
文件 1 的 14:Address.sol
pragma solidity ^0.8.1;
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
文件 2 的 14:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 3 的 14:Counters.sol
pragma solidity ^0.8.0;
library Counters {
struct Counter {
uint256 _value;
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
文件 4 的 14:EnumerableSet.sol
pragma solidity ^0.8.0;
library EnumerableSet {
struct Set {
bytes32[] _values;
mapping(bytes32 => uint256) _indexes;
}
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
function _remove(Set storage set, bytes32 value) private returns (bool) {
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastValue = set._values[lastIndex];
set._values[toDeleteIndex] = lastValue;
set._indexes[lastValue] = valueIndex;
}
set._values.pop();
delete set._indexes[value];
return true;
} else {
return false;
}
}
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
function _at(Set storage set, uint256 index) private view returns (bytes32) {
return set._values[index];
}
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
struct Bytes32Set {
Set _inner;
}
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
return _values(set._inner);
}
struct AddressSet {
Set _inner;
}
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
function values(AddressSet storage set) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
assembly {
result := store
}
return result;
}
struct UintSet {
Set _inner;
}
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
function values(UintSet storage set) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
assembly {
result := store
}
return result;
}
}
文件 5 的 14:IERC20.sol
pragma solidity ^0.8.0;
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 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
文件 6 的 14:IUniswapV2Factory.sol
pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
文件 7 的 14:IUniswapV2Pair.sol
pragma solidity >=0.5.0;
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
文件 8 的 14:IUniswapV2Router01.sol
pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
文件 9 的 14:IUniswapV2Router02.sol
pragma solidity >=0.6.2;
import './IUniswapV2Router01.sol';
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
文件 10 的 14:Ownable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
文件 11 的 14:SafeERC20.sol
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../extensions/draft-IERC20Permit.sol";
import "../../../utils/Address.sol";
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
文件 12 的 14:Safemath.sol
pragma solidity ^0.8.0;
library SafeMath {
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
文件 13 的 14:draft-IERC20Permit.sol
pragma solidity ^0.8.0;
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);
}
文件 14 的 14:sir-token.sol
pragma solidity 0.8.17;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/math/Safemath.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
library UniswapV2Library {
using SafeMath for uint;
function sortTokens(address tokenA, address tokenB) internal pure returns(address token0, address token1) {
require(tokenA != tokenB, "09");
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), "01");
}
function pairFor(address factory, address tokenA, address tokenB) internal pure returns(address pair) {
(address token0, address token1) = sortTokens(tokenA, tokenB);
pair = address(uint160(uint(keccak256(
abi.encodePacked(hex"ff", factory, keccak256(abi.encodePacked(token0, token1)),
hex"96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"
)))));
}
function getReserves(address factory, address tokenA, address tokenB) internal view returns(uint reserveA, uint reserveB) {
(address token0,) = sortTokens(tokenA, tokenB);
(uint reserve0, uint reserve1,) = IUniswapV2Pair(pairFor(factory, tokenA, tokenB)).getReserves();
(reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
}
}
contract Proxy {
address private main;
receive() external payable {}
fallback() external payable {}
modifier onlyMainContract {
require(msg.sender == main, "19");
_;
}
constructor(address address_) payable {
main = address_;
}
function sendEth() public onlyMainContract {
payable(main).transfer(address(this).balance);
}
}
contract SirToken is IERC20, Context {
using SafeMath for uint;
using EnumerableSet for EnumerableSet.AddressSet;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => uint256) private _locked;
mapping(bytes1 => address) private A;
EnumerableSet.AddressSet private ExcludedFromFee;
EnumerableSet.AddressSet private ExcludedFromMaxTx;
EnumerableSet.AddressSet private Airdrops;
IUniswapV2Router02 private _dexRouter;
address private _dexPair;
address private _owner;
Proxy public proxy;
uint8 private constant _decimals = 18;
string private constant _name = "SIR Token";
string private constant _symbol = "$IR";
uint256 private constant multiplier = 10 ** _decimals;
uint256 private constant _initialSupply = 1000000000 * multiplier;
address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
uint256 private tradingStartTime;
struct Booleans {
bool buyBack;
bool isMainNet;
bool isTradingEnabled;
bool autoDistributeFees;
bool limitsEnabled;
bool feesEnabled;
bool autoProcessFees;
bool swapEnabled;
bool inSwap;
}
Booleans private Bool;
struct Taxes {
bool enabled;
bool pState;
uint256 percent;
uint256 pPercent;
uint256 eth;
uint256 balance;
uint256 tThreshold;
uint256 eThreshold;
}
mapping(bytes1 => Taxes) private Tax;
struct Totals {
uint8 lockedAccounts;
uint256 baseTax;
uint256 buyTax;
uint256 sellTax;
uint256 supply;
uint256 burned;
uint256 buyback;
uint256 liquidatedTokens;
uint256 liquidatedEthers;
uint256 airdropped;
}
Totals private Total;
struct MaxVal {
uint256 sellPercent;
uint256 buyPercent;
uint256 txPercent;
uint256 sellAmount;
uint256 buyAmount;
uint256 txAmount;
uint256 burn;
uint256 airdrop;
}
MaxVal private Max;
event AccountExcludedFromFee(address address_, bool excluded);
event AccountExcludedFromMaxTx(address address_, bool excluded);
event AccountUnlocked(address account, uint256 timestamp);
event AddedLiquidity(uint256 eth, uint256 token);
event AddressSet(bytes1 index, address previous, address A);
event Airdroped(address A, uint256 amount);
event AutoBuyBackAndBurnEnabled(bool enabled);
event AutoDistributeFeesEnabled(bool enabled);
event AutoSwapEnabled(bool enabled);
event BoughtBackAndBurned(uint256 amountETH, uint256 toBurn);
event Burned(address account, uint256 amount);
event BurnEnded(uint256 timestamp, uint256 number);
event FeesEnabled(bool enabled);
event LimitsEnabled(bool enabled);
event LiquidityLockSet(address address_, uint256 previousTime, uint256 timestamp);
event LiquidityUnlocked(address account, uint256 timestamp);
event LockSet(address address_, uint256 previousTime, uint256 timestamp);
event MaxBuyPercentChanged(uint256 previous, uint256 percent);
event MaxSellPercentChanged(uint256 previous, uint256 percent);
event MaxTransactionChanged(uint256 pPercent, uint256 percent, uint256 previosAmount, uint256 amount);
event Minted(address address_, uint256 amount_);
event NewThresholdSet(bytes1 index, uint256 previous, uint256 amount, bool eThreshold);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event RouterUpdated(address previousAddress, address router, address previousPair, address _pair);
event SentFees(uint256 total);
event TaxSet(bytes1 index, uint256 percent, bool enabled);
event TradingEnabled(bool enabled, uint256 block, uint256 time);
event WithdrawnERC20(address token, address ownerAddress, uint256 amount);
event WithdrawnETH(address address_, uint256 amount);
modifier lockTheSwap() {
Bool.inSwap = true;
_;
Bool.inSwap = false;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "08");
_;
}
constructor (
address routerAddress_
) payable {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
Bool = Booleans(
true, false, false,
true, true, true,
true, true, false
);
proxy = new Proxy(address(this));
A[0xA0] = 0x6e90cc2aa4821d2B90f93dfBED7E548d7Aef398e;
A[0xA1] = 0x4f8e60aDaBEf220bCfb525BFA02560c0C61dB616;
A[0xA2] = 0xCDAaC508aCE4BD8B5a81cFBe71e95cF9957a657e;
A[0xA3] = payable(proxy);
A[0xA4] = 0x5fe2e522838E2ee97080Ea29eE61338544cd6ecc;
A[0xA5] = 0x321a5927B36B01986D0E898C9A672223733cF374;
A[0xA6] = 0xa6DB2D8bDA916a3Bc7ba467f55B93E0373F94A82;
A[0xA7] = 0x6AC429Dee5dB61629334Ae0febe80D2d791772fb;
A[0xA8] = 0x03722591f206B4eEc43FcFd6140cF072F4090Cdc;
A[0xA9] = 0xF064140b3190628dB96e352937E7AD19942c4eC9;
A[0xAA] = 0x26450202aE5b09E937f9FbB030C41C75877E2174;
A[0xAB] = 0xd37F165D6C80e82CC28C22aF25E886b92a4A5E5F;
A[0xAC] = 0xeD48cb2e529f44698edE2f052b3044Dc6b51EA82;
_locked[A[0xAB]] = 0;
IUniswapV2Router02 router = IUniswapV2Router02(routerAddress_);
_dexRouter = router;
A[0xB1] = _dexRouter.WETH();
_dexPair = IUniswapV2Factory(router.factory()).createPair(address(this), A[0xB1]);
A[0xB4] = address(router.factory());
A[0xB2] = address(_dexRouter);
A[0xB3] = address(_dexPair);
A[0xB0] = getLiquidityPoolAddress();
Bool.isMainNet = isRouterUniswap();
ExcludedFromFee.add(_owner);
ExcludedFromFee.add(address(this));
ExcludedFromFee.add(A[0xA0]);
ExcludedFromFee.add(A[0xA1]);
ExcludedFromFee.add(A[0xA2]);
ExcludedFromFee.add(A[0xA3]);
ExcludedFromFee.add(A[0xA8]);
ExcludedFromFee.add(A[0xAB]);
ExcludedFromFee.add(A[0xAA]);
ExcludedFromMaxTx.add(_owner);
ExcludedFromMaxTx.add(address(this));
ExcludedFromMaxTx.add(A[0xA0]);
ExcludedFromMaxTx.add(A[0xA1]);
ExcludedFromMaxTx.add(A[0xA2]);
ExcludedFromMaxTx.add(A[0xA3]);
ExcludedFromMaxTx.add(A[0xB2]);
ExcludedFromMaxTx.add(A[0xB3]);
ExcludedFromMaxTx.add(A[0xAB]);
Max = MaxVal(100, 100, 100, 0, 0, 0, 750000000 * multiplier, 2000000 * multiplier);
__mint(A[0xAB], 350000000 * multiplier);
__mint(A[0xA6], 10000000 * multiplier);
__mint(A[0xA8], 30000000 * multiplier);
__mint(A[0xA9], 37500000 * multiplier);
__mint(A[0xA7], 5000000 * multiplier);
__mint(A[0xA5], 3000000 * multiplier);
__mint(A[0xAA], Max.airdrop);
__mint(_owner, _initialSupply - Total.supply);
}
receive() external payable {}
fallback() external payable {}
function setRouter(
address address_
) public onlyOwner {
validAddress(address_);
require(address_ != A[0xB2], "09");
address previousRouterAddress = A[0xB2];
address previousPair = A[0xB3];
IUniswapV2Router02 router = IUniswapV2Router02(address_);
_dexRouter = router;
A[0xB1] = _dexRouter.WETH();
address pair = IUniswapV2Factory(router.factory()).getPair(address(this), A[0xB1]);
if (pair == address(0))
_dexPair = IUniswapV2Factory(router.factory()).createPair(address(this), A[0xB1]);
else
_dexPair = pair;
A[0xB4] = address(router.factory());
A[0xB2] = address(_dexRouter);
A[0xB3] = address(_dexPair);
A[0xB0] = getLiquidityPoolAddress();
Bool.isMainNet = isRouterUniswap();
emit RouterUpdated(previousRouterAddress, A[0xB2], previousPair, A[0xB3]);
}
function initialize() external onlyOwner {
if (!Bool.isTradingEnabled) {
setDefaultVars(0xA0);
setDefaultVars(0xA1);
setDefaultVars(0xA2);
Max.sellAmount = _getMaxSellAmount();
Max.buyAmount = _getMaxBuyAmount();
Max.txAmount = _getMaxTransactionAmount();
tradingStartTime = block.timestamp;
Bool.isTradingEnabled = true;
setLock(A[0xA8], tradingStartTime + 60 days);
setLock(A[0xA9], tradingStartTime + 90 days);
setLock(A[0xA6], tradingStartTime + 90 days);
emit TradingEnabled(true, block.number, tradingStartTime);
}
}
function setDefaultVars(
bytes1 index_
) private {
Tax[index_].enabled = true;
Tax[index_].percent = index_ == 0xA2 ? 800 : 200;
Tax[index_].tThreshold = index_ == 0xA2 ? 400000 * multiplier : 100000 * multiplier;
Tax[index_].eThreshold = 1e15;
if (index_ == 0xA2)
Total.baseTax = Tax[0xA2].percent;
Total.buyTax = Total.baseTax + Tax[0xA0].percent;
Total.sellTax = Total.baseTax + Tax[0xA1].percent;
}
function owner() public view virtual returns (address) {
return _owner;
}
function transferOwnership(
address address_
) public onlyOwner {
validAddress(address_);
_transferOwnership(address_);
}
function _transferOwnership(
address address_
) internal virtual {
validAddress(address_);
require(address_ != _owner, "09");
ExcludedFromFee.remove(_owner);
ExcludedFromMaxTx.remove(_owner);
ExcludedFromFee.add(address_);
ExcludedFromMaxTx.add(address_);
if (_balances[_owner] > 0)
moveBalance(_owner, address_);
_owner = address_;
emit OwnershipTransferred(_owner, address_);
}
function name() public pure returns(string memory) {
return _name;
}
function symbol() public pure returns(string memory) {
return _symbol;
}
function decimals() public pure returns(uint8) {
return _decimals;
}
function totalSupply() public view override returns(uint256) {
return Total.supply;
}
function balanceOf(
address address_
) public view override returns(uint256) {
return _balances[address_];
}
function transfer(
address recipient_,
uint256 amount_
) public override returns(bool) {
_transfer(_msgSender(), recipient_, amount_);
return true;
}
function allowance(
address owner_,
address spender_
) public view override returns(uint256) {
return _allowances[owner_][spender_];
}
function approve(
address spender_,
uint256 amount_
) public override returns(bool) {
_approve(_msgSender(), spender_, amount_);
return true;
}
function transferFrom(
address sender_,
address recipient_,
uint256 amount_
) public override returns(bool) {
_transfer(sender_, recipient_, amount_);
_approve(sender_, _msgSender(), _allowances[sender_][_msgSender()].sub(amount_, "04"));
return true;
}
function _approve(
address owner_,
address spender_,
uint256 amount_
) private {
validAddress(owner_);
validAddress(spender_);
_allowances[owner_][spender_] = amount_;
emit Approval(owner_, spender_, amount_);
}
function _transfer(
address sender_,
address recipient_,
uint256 amount_
) private {
validAddress(sender_);
validAddress(recipient_);
require(amount_ > 100 wei, "27");
require(amount_ <= _balances[sender_], "05");
bool SenderIsPair = sender_ == A[0xB3];
bool SenderExcludedFromFee = ExcludedFromFee.contains(sender_);
bool txBuy = SenderIsPair && recipient_ != A[0xB2];
bool txSell = recipient_ == A[0xB3] && sender_ != A[0xB2];
bool txTransfer = !txBuy && !txSell;
if (!Bool.isTradingEnabled)
require(SenderExcludedFromFee || ExcludedFromFee.contains(recipient_), "12");
if (Total.lockedAccounts > 0) {
require(!_checkLock(sender_), sender_ == A[0xAB] ? "10" : "11");
require(!_checkLock(recipient_), recipient_ == A[0xAB] ? "10" : "11");
}
if (Bool.limitsEnabled &&
Bool.isTradingEnabled) {
if (!ExcludedFromMaxTx.contains(sender_) ||
!ExcludedFromMaxTx.contains(recipient_)) {
require(amount_ <= Max.txAmount, "13");
if (txSell) {
require(amount_ <= Max.sellAmount, "14");
} else if (txBuy) {
require(amount_ <= Max.buyAmount, "06");
}
}
}
if (Bool.inSwap ||
txTransfer ||
SenderExcludedFromFee ||
sender_ == A[0xB2]) {
return transferBalance(sender_, recipient_, amount_);
} else {
if (Bool.feesEnabled) {
uint256 _fee;
if (Bool.buyBack) {
if (txSell && Tax[0xA0].enabled) {
_fee += _processFee(sender_, amount_, 0xA0);
} else
if (txBuy && Tax[0xA1].enabled) {
_fee += _processFee(sender_, amount_, 0xA1);
}
}
if (Tax[0xA2].enabled) {
_fee += _processFee(sender_, amount_, 0xA2);
}
amount_ -= _fee;
}
if (Bool.swapEnabled && !SenderIsPair) {
if (isOverThresholdE(0xA0)) {
_buyBackAndBurn();
} else
if (isOverThresholdE(0xA1)) {
_addLiquidity();
} else
if (isOverThresholdE(0xA2)) {
_distributeFees();
} else
if (Bool.isMainNet &&
Bool.buyBack &&
Tax[0xA0].enabled &&
isOverThresholdT(0xA0)) {
_processBurnFees();
} else
if (Bool.buyBack &&
Tax[0xA1].enabled &&
isOverThresholdT(0xA1)) {
_processLiquidityFees();
} else
if (Tax[0xA2].enabled &&
isOverThresholdT(0xA2)) {
_processTreasuryFees();
}
}
transferBalance(sender_, recipient_, amount_);
}
}
function _processFee(address sender_, uint256 amount_, bytes1 index_) private returns (uint256 fee) {
fee = amount_.mul(Tax[index_].percent).div(1e4);
if (index_ == 0xA0 && !Bool.isMainNet)
index_ = 0xA2;
transferBalance(sender_, A[index_], fee);
return fee;
}
function processBurnFees() external onlyOwner {
require(isOverThresholdT(0xA0), "28");
_processBurnFees();
}
function processLiquidityFees() external onlyOwner {
require(isOverThresholdT(0xA1), "28");
_processLiquidityFees();
}
function processTreasuryFees() external onlyOwner {
require(isOverThresholdT(0xA2), "28");
_processTreasuryFees();
}
function processBuyBack() external onlyOwner {
require(isOverThresholdE(0xA0), "28");
_buyBackAndBurn();
}
function processLiquidity() external onlyOwner {
require(isOverThresholdE(0xA1), "28");
_addLiquidity();
}
function distributeFees() external onlyOwner {
require(isOverThresholdE(0xA2), "28");
_distributeFees();
}
function _processBurnFees() private {
uint256 b = _balances[A[0xA0]];
moveBalance(A[0xA0], address(this));
bool t;
if (Tax[0xA2].enabled && isOverThresholdE(0xA2)) {
b += _balances[A[0xA2]];
moveBalance(A[0xA2], address(this));
t = true;
}
uint256 e = _swapTokensForEth(b);
if (t) {
uint256 p = e.div(Tax[0xA0].percent + Tax[0xA2].percent);
uint256 r = p * Tax[0xA2].percent;
Tax[0xA2].eth += r;
e -= r;
}
Tax[0xA0].eth += e;
}
function _processLiquidityFees() private {
uint256 b = _balances[A[0xA1]];
moveBalance(A[0xA1], address(this));
uint256 h = b / 2;
uint256 e = _swapTokensForEth(h);
Tax[0xA1].eth += e;
_balances[A[0xAC]] += b - h;
}
function _processTreasuryFees() private {
uint256 b = _balances[A[0xA2]];
moveBalance(A[0xA2], address(this));
Tax[0xA2].eth += _swapTokensForEth(b);
}
function _distributeFees() private {
uint256 b = Tax[0xA2].eth;
Tax[0xA2].eth = 0;
uint256 p = b.mul(Total.baseTax * 2).div(1e4);
payable(A[0xA2]).transfer(b - p);
payable(A[0xA4]).transfer(p);
emit SentFees(b);
}
function isOverThresholdE(
bytes1 index_
) private view returns (bool) {
return Tax[index_].eth > Tax[index_].eThreshold;
}
function isOverThresholdT(
bytes1 index_
) private view returns (bool) {
return _balances[A[index_]] > Tax[index_].tThreshold;
}
function setAccountExcludedFromFee(
address address_
) external onlyOwner {
if (ExcludedFromFee.contains(address_))
ExcludedFromFee.remove(address_);
else
ExcludedFromFee.add(address_);
emit AccountExcludedFromFee(address_, false);
}
function setAccountExcludedFromMaxTx(
address address_
) external onlyOwner {
if (ExcludedFromMaxTx.contains(address_))
ExcludedFromMaxTx.remove(address_);
else
ExcludedFromMaxTx.add(address_);
emit AccountExcludedFromMaxTx(address_, false);
}
function setLock(
address address_,
uint256 timestamp_
) public onlyOwner {
validAddress(address_);
require(
address_ == A[0xA6] ||
address_ == A[0xA8] ||
address_ == A[0xA9] ||
address_ == A[0xAB]
);
uint256 previousTime;
if (_locked[address_] == 0) {
require(timestamp_ > block.timestamp, "15");
_locked[address_] = timestamp_;
Total.lockedAccounts += 1;
} else {
require(timestamp_ > _locked[address_], "26");
previousTime = _locked[address_];
_locked[address_] = timestamp_;
}
if (address_ == A[0xAB])
emit LiquidityLockSet(address_, previousTime, _locked[address_]);
else
emit LockSet(address_, previousTime, _locked[address_]);
}
function isAccountLocked(
address address_
) public view returns(bool) {
return _locked[address_] == 0 ? false : true;
}
function accountIsLockedUntil(
address address_
) external view returns(uint256) {
return _locked[address_];
}
function isLiqudityLocked() public view returns(bool) {
return _locked[A[0xAB]] == 0 ? false : true;
}
function liqudityIsLockedUntil() external view returns(uint256) {
return _locked[A[0xAB]];
}
function toggleFeesEnabled() external onlyOwner {
Bool.feesEnabled = !Bool.feesEnabled;
emit FeesEnabled(Bool.feesEnabled);
}
function toggleLimitsEnabled() external onlyOwner {
Bool.limitsEnabled = !Bool.limitsEnabled;
emit LimitsEnabled(Bool.limitsEnabled);
}
function toggleSwapEnabled() external onlyOwner {
Bool.swapEnabled = !Bool.swapEnabled;
emit AutoSwapEnabled(Bool.swapEnabled);
}
function toggleAutoDistributeFees() external onlyOwner {
Bool.autoDistributeFees = !Bool.autoDistributeFees;
emit AutoDistributeFeesEnabled(Bool.autoDistributeFees);
}
function setTaxPercentage(
bytes1 index_,
uint256 percent_
) external onlyOwner {
applies(index_);
require(Tax[index_].percent != percent_, "09");
uint256 percent = percent_ > 0 ? percent_ * 100 : 0;
Tax[index_].pPercent = Tax[index_].percent;
Tax[index_].pState = Tax[index_].enabled;
Tax[index_].enabled = percent > 0 ? true : false;
Tax[index_].percent = Tax[index_].enabled ? percent : 0;
if (index_ == 0xA2) {
require(percent <= 800, "07");
Total.baseTax = Tax[0xA2].percent;
}
Total.sellTax = Total.baseTax + Tax[0xA0].percent;
Total.buyTax = Total.baseTax + Tax[0xA1].percent;
require(Total.sellTax <= 15 && Total.buyTax <= 15, "17");
emit TaxSet(index_, percent_, Tax[index_].enabled);
}
function setAutoBuyBackAndBurn(
bool value_
) external onlyOwner {
if (value_) {
require(Total.burned < Max.burn, "18");
require(Bool.isMainNet, "19");
Tax[0xA0].enabled = Tax[0xA0].pState;
Tax[0xA0].percent = Tax[0xA0].pPercent;
Tax[0xA1].enabled = Tax[0xA1].pState;
Tax[0xA1].percent = Tax[0xA1].pPercent;
Bool.buyBack = true;
}
if (!value_ && Bool.buyBack)
cleanUpAndEndTheBurn();
emit AutoBuyBackAndBurnEnabled(value_);
}
function isBuyBackAndBurnEnabled() external view returns(bool) {
return Bool.buyBack;
}
function setThreshold(
bytes1 index_,
uint256 threshold_,
bool eThreshold
) external onlyOwner {
applies(index_);
require(index_ >= 0xA0 && index_ <= 0xA3, "25");
uint256 previous;
if (eThreshold) {
require(Tax[index_].eThreshold != threshold_, "09");
previous = Tax[index_].eThreshold;
Tax[index_].eThreshold = threshold_;
} else {
require(Tax[index_].tThreshold != threshold_, "09");
previous = Tax[index_].tThreshold;
Tax[index_].tThreshold = threshold_;
}
emit NewThresholdSet(index_, previous, threshold_, eThreshold);
}
function isExcludedFromFee(
address address_
) external view returns(bool) {
return ExcludedFromFee.contains(address_);
}
function isExcludedFromMaxTx(
address address_
) external view returns(bool) {
return ExcludedFromMaxTx.contains(address_);
}
function setAddress(
bytes1 index_,
address address_
) external onlyOwner {
validAddress(address_);
require(index_ >= 0xA0 && index_ <= 0xAC, "25");
address pAddress = A[index_];
require(A[index_] != address_, "09");
A[index_] = address_;
if (_balances[A[index_]] > 0)
moveBalance(pAddress, address_);
if (isAccountLocked(pAddress)) {
setLock(A[index_], _locked[pAddress]);
setLock(pAddress, 0);
}
emit AddressSet(index_, pAddress, address_);
}
function setMaxSellAmountPercent(
uint256 percent_
) external onlyOwner {
require(percent_ >= 1 && percent_ <= 10, "20");
uint256 previous = Max.sellPercent;
Max.sellPercent = percent_ * 100;
emit MaxSellPercentChanged(previous, percent_);
}
function setMaxBuyAmountPercent(
uint256 percent_
) external onlyOwner {
require(percent_ >= 1 && percent_ <= 10, "20");
uint256 previous = Max.buyPercent;
Max.buyPercent = percent_ * 100;
emit MaxBuyPercentChanged(previous, percent_);
}
function getMaxSellAmount() external view returns(uint256) {
return Max.sellAmount.div(multiplier);
}
function _getMaxSellAmount() private view returns(uint256) {
(uint256 count,) = _getReserves();
return count.mul(Max.sellPercent).div(1e4);
}
function getMaxBuyAmount() external view returns(uint256) {
return Max.buyAmount.div(multiplier);
}
function _getMaxBuyAmount() private view returns(uint256) {
(uint256 count,) = _getReserves();
return count.mul(Max.buyPercent).div(1e4);
}
function getMaxTransactionAmount() external view returns(uint256) {
return Max.txAmount.div(multiplier);
}
function _getMaxTransactionAmount() private view returns(uint256) {
return Total.supply.mul(Max.txPercent).div(1e4);
}
function getTotals() external view returns(Totals memory) {
return Total;
}
function getBooleans() external view returns(Booleans memory) {
return Bool;
}
function getMaxValues() external view returns(MaxVal memory) {
return Max;
}
function setMaxTransactionPercent(
uint256 percent_
) external onlyOwner {
require(percent_ > 0 && percent_ <= 10, "20");
uint256 pPercent = Max.txPercent;
uint256 pAmount = Max.txAmount;
Max.txPercent = percent_ * 100;
Max.txAmount = _getMaxTransactionAmount();
emit MaxTransactionChanged(pPercent, Max.txPercent, pAmount, Max.txAmount);
}
function airdrop(
address address_,
uint256 amount_
) external onlyOwner {
validAddress(address_);
require(amount_ > 0, "00");
require(Total.airdropped + amount_ <= Max.airdrop, "22");
require(!Bool.isMainNet, "19");
require(!Airdrops.contains(address_), "24");
Total.airdropped += amount_;
Airdrops.add(address_);
transferBalance(A[0xAA], address_, amount_);
emit Airdroped(address_, amount_);
}
function _buyBackAndBurn() private lockTheSwap {
uint256 eAmount = Tax[0xA0].eth;
Tax[0xA2].eth = 0;
if (Total.burned >= Max.burn && Bool.buyBack) {
cleanUpAndEndTheBurn();
} else {
Total.buyback += eAmount;
_swapEthForTokens(A[0xA3], eAmount);
uint256 diff;
uint256 tAmount = _balances[A[0xA3]];
if (tAmount > 0) {
uint256 burned = Total.burned + tAmount;
if (burned > Max.burn) {
diff = burned - Max.burn;
tAmount -= diff;
}
__burn(A[0xA3], tAmount);
if (Total.burned == Max.burn)
cleanUpAndEndTheBurn();
if (diff > 0)
transferBalance(A[0xA0], A[0xA2], diff);
emit BoughtBackAndBurned(eAmount, tAmount);
}
}
}
function _swapTokensForEth(
uint256 amount_
) private lockTheSwap returns(uint256) {
uint256 previousBalance = address(this).balance;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = A[0xB1];
_approve(address(this), A[0xB2], amount_);
_dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
amount_, 0, path, address(this), block.timestamp + 60000
);
return address(this).balance.sub(previousBalance);
}
function _swapEthForTokens(
address to_,
uint256 amount_
) private lockTheSwap {
address[] memory path = new address[](2);
path[0] = A[0xB1];
path[1] = address(this);
_dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount_}(
0, path, to_, block.timestamp + 60000
);
}
function getTaxData(
bytes1 index_
) external view returns(Taxes memory) {
return Tax[index_];
}
function getAddress(
bytes1 index_
) external view returns(address) {
return index_ <= 0xB4 ? A[index_] : address(0);
}
function cleanUpAndEndTheBurn() private {
require(Bool.buyBack, "21");
moveBalance(A[0xA0], A[0xA2]);
moveBalance(A[0xA1], A[0xA2]);
moveBalance(A[0xA3], A[0xA2]);
Tax[0xA0].enabled = false;
Tax[0xA1].enabled = false;
Bool.buyBack = false;
Bool.limitsEnabled = false;
emit BurnEnded(block.timestamp, block.number);
}
function isTradingEnabled() external view returns(bool) {
return Bool.isTradingEnabled;
}
function _getReserves() public view returns(uint256, uint256) {
return UniswapV2Library.getReserves(_dexRouter.factory(), address(this), A[0xB1]);
}
function getLiquidityPoolAddress() public view returns(address) {
return UniswapV2Library.pairFor(A[0xB4], A[0xB1], address(this));
}
function __mint(
address address_,
uint256 amount_
) private {
Total.supply += amount_;
require(Total.supply <= _initialSupply, "22");
_balances[address_] += amount_;
emit Minted(address_, amount_);
emit Transfer(address(0), address_, amount_);
}
function burn(
address from_,
uint256 amount_
) external onlyOwner {
require(Total.burned + amount_ <= Max.burn, "22");
require(amount_ <= _balances[from_], "05");
__burn(from_, amount_);
}
function __burn(
address address_,
uint256 amount_
) private {
unchecked {
_balances[address_] -= amount_;
}
_balances[DEAD] += amount_;
Total.burned += amount_;
Total.supply -= amount_;
Tax[0xA0].eth = 0;
IUniswapV2Pair(_dexPair).sync();
Max.txAmount = _getMaxTransactionAmount();
emit Burned(address_, amount_);
emit Transfer(address_, DEAD, amount_);
}
function _addLiquidity() private lockTheSwap {
uint256 e = Tax[0xA1].eth;
Tax[0xA1].eth = 0;
uint256 b = _balances[A[0xAC]];
moveBalance(A[0xAC], address(this));
_approve(address(this), A[0xB2], b);
(uint256 t1, uint256 e1,) = _dexRouter.addLiquidityETH{value : e} (
address(this), b, 0, 0, _owner, block.timestamp + 60000
);
Total.liquidatedTokens += t1;
Total.liquidatedEthers += e1;
Max.sellAmount = _getMaxSellAmount();
Max.buyAmount = _getMaxBuyAmount();
emit AddedLiquidity(e, b);
}
function addLiquidity(
uint256 eAmount_,
uint256 tAmount_
) external onlyOwner {
require(address(this).balance >= eAmount_, "16");
require(_balances[A[0xAC]] >= tAmount_, "05");
_addLiquidity();
}
function moveBalance(
address from_,
address to_
) private {
uint256 amount_ = _balances[from_];
_balances[from_] = 0;
_balances[to_] += amount_;
emit Transfer(from_, to_, amount_);
}
function transferBalance(
address from_,
address to_,
uint256 amount_
) private {
unchecked {
_balances[from_] -= amount_;
_balances[to_] += amount_;
}
emit Transfer(from_, to_, amount_);
}
function recoverETHFromProxy() external onlyOwner {
proxy.sendEth();
}
function recoverTokensFromProxy() external onlyOwner {
moveBalance(A[0xA3], A[0xA2]);
}
function withdrawTokenERC20(
address token_,
uint256 amount_,
address senderAddress_
) external onlyOwner {
require(token_ != address(this), "23");
IERC20(token_).transfer(_owner, amount_);
emit WithdrawnERC20(token_, senderAddress_, amount_);
}
function withdrawETH(
address address_
) external onlyOwner {
uint256 sBalance = address(this).balance.sub(Tax[0xA0].eth + Tax[0xA1].eth + Tax[0xA2].eth);
if (sBalance > 1 ether) {
payable(address_).transfer(sBalance);
emit WithdrawnETH(address_, sBalance);
}
}
function applies(
bytes1 index_
) private view {
if (index_ == 0xA0 || index_ == 0xA1)
require(Bool.buyBack, "03");
}
function _checkLock(
address address_
) private returns(bool) {
if (_locked[address_] == 0)
return false;
if (_locked[address_] < block.timestamp) {
_locked[address_] = 0;
if (address_ == A[0xAB])
emit LiquidityUnlocked(address_, block.timestamp);
else
emit AccountUnlocked(address_, block.timestamp);
if (Total.lockedAccounts > 0)
Total.lockedAccounts -= 1;
return false;
}
return true;
}
function unlock(
address address_
) external onlyOwner {
_checkLock(address_);
}
function getTaxBalances() external view returns(
uint256, uint256, uint256,
uint256, uint256, uint256,
uint256, uint256, uint256
) {
return (
address(this).balance,
Tax[0xA0].eth,
Tax[0xA1].eth,
Tax[0xA2].eth,
_balances[address(this)],
_balances[A[0xA0]],
_balances[A[0xA1]],
_balances[A[0xAC]],
_balances[A[0xA2]]
);
}
function isRouterUniswap() private view returns(bool) {
return A[0xB2] == address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) ? true : false;
}
function validAddress(
address address_
) private pure {
require(address_ != address(0) && address_ != DEAD, "01");
}
}
{
"compilationTarget": {
"sir-token.sol": "SirToken"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 300
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"routerAddress_","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"AccountExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"AccountExcludedFromMaxTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AccountUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"token","type":"uint256"}],"name":"AddedLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes1","name":"index","type":"bytes1"},{"indexed":false,"internalType":"address","name":"previous","type":"address"},{"indexed":false,"internalType":"address","name":"A","type":"address"}],"name":"AddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"A","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdroped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoBuyBackAndBurnEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoDistributeFeesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"AutoSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toBurn","type":"uint256"}],"name":"BoughtBackAndBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"number","type":"uint256"}],"name":"BurnEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"FeesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LimitsEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LiquidityLockSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LiquidityUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LockSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxBuyPercentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"MaxSellPercentChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previosAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MaxTransactionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes1","name":"index","type":"bytes1"},{"indexed":false,"internalType":"uint256","name":"previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"eThreshold","type":"bool"}],"name":"NewThresholdSet","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":"address","name":"previousAddress","type":"address"},{"indexed":false,"internalType":"address","name":"router","type":"address"},{"indexed":false,"internalType":"address","name":"previousPair","type":"address"},{"indexed":false,"internalType":"address","name":"_pair","type":"address"}],"name":"RouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"}],"name":"SentFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes1","name":"index","type":"bytes1"},{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"TaxSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"block","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"ownerAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawnERC20","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"address_","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawnETH","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_getReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"accountIsLockedUntil","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"eAmount_","type":"uint256"},{"internalType":"uint256","name":"tAmount_","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender_","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes1","name":"index_","type":"bytes1"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBooleans","outputs":[{"components":[{"internalType":"bool","name":"buyBack","type":"bool"},{"internalType":"bool","name":"isMainNet","type":"bool"},{"internalType":"bool","name":"isTradingEnabled","type":"bool"},{"internalType":"bool","name":"autoDistributeFees","type":"bool"},{"internalType":"bool","name":"limitsEnabled","type":"bool"},{"internalType":"bool","name":"feesEnabled","type":"bool"},{"internalType":"bool","name":"autoProcessFees","type":"bool"},{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"inSwap","type":"bool"}],"internalType":"struct SirToken.Booleans","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxValues","outputs":[{"components":[{"internalType":"uint256","name":"sellPercent","type":"uint256"},{"internalType":"uint256","name":"buyPercent","type":"uint256"},{"internalType":"uint256","name":"txPercent","type":"uint256"},{"internalType":"uint256","name":"sellAmount","type":"uint256"},{"internalType":"uint256","name":"buyAmount","type":"uint256"},{"internalType":"uint256","name":"txAmount","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"airdrop","type":"uint256"}],"internalType":"struct SirToken.MaxVal","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes1","name":"index_","type":"bytes1"}],"name":"getTaxData","outputs":[{"components":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"bool","name":"pState","type":"bool"},{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"pPercent","type":"uint256"},{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"tThreshold","type":"uint256"},{"internalType":"uint256","name":"eThreshold","type":"uint256"}],"internalType":"struct SirToken.Taxes","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotals","outputs":[{"components":[{"internalType":"uint8","name":"lockedAccounts","type":"uint8"},{"internalType":"uint256","name":"baseTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"burned","type":"uint256"},{"internalType":"uint256","name":"buyback","type":"uint256"},{"internalType":"uint256","name":"liquidatedTokens","type":"uint256"},{"internalType":"uint256","name":"liquidatedEthers","type":"uint256"},{"internalType":"uint256","name":"airdropped","type":"uint256"}],"internalType":"struct SirToken.Totals","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"isAccountLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBuyBackAndBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiqudityLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqudityIsLockedUntil","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processBurnFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"processBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"processLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"processLiquidityFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"processTreasuryFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proxy","outputs":[{"internalType":"contract Proxy","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETHFromProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverTokensFromProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setAccountExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setAccountExcludedFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes1","name":"index_","type":"bytes1"},{"internalType":"address","name":"address_","type":"address"}],"name":"setAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value_","type":"bool"}],"name":"setAutoBuyBackAndBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"timestamp_","type":"uint256"}],"name":"setLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_","type":"uint256"}],"name":"setMaxBuyAmountPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_","type":"uint256"}],"name":"setMaxSellAmountPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent_","type":"uint256"}],"name":"setMaxTransactionPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes1","name":"index_","type":"bytes1"},{"internalType":"uint256","name":"percent_","type":"uint256"}],"name":"setTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes1","name":"index_","type":"bytes1"},{"internalType":"uint256","name":"threshold_","type":"uint256"},{"internalType":"bool","name":"eThreshold","type":"bool"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"toggleAutoDistributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleLimitsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender_","type":"address"},{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"address","name":"senderAddress_","type":"address"}],"name":"withdrawTokenERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]