Transaction Hash:
Block:
18847844 at Dec-23-2023 10:13:35 AM +UTC
Transaction Fee:
0.0008905748973993 ETH
$2.48
Gas Used:
46,539 Gas / 19.1360987 Gwei
Emitted Events:
91 |
OWL.Approval( owner=[Sender] 0xf8fd543085ee2aa6ed202f1bbbfbcd1f395d3cfb, spender=0x00000000...43aC78BA3, value=115792089237316195423570985008687907853269984665640564039457584007913129639935 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x1Db3439a...7b4Fa6EE6
Miner
| (Vb 2) | 1,777.247872713079607119 Eth | 1,777.247877366979607119 Eth | 0.0000046539 | |
0xabdd5389...Fb9706968 | |||||
0xf8fD5430...f395D3cFB |
0.10491547602971546 Eth
Nonce: 5
|
0.10402490113231616 Eth
Nonce: 6
| 0.0008905748973993 |
Execution Trace
OWL.approve( spender=0x000000000022D473030F116dDEE9F6B43aC78BA3, amount=115792089237316195423570985008687907853269984665640564039457584007913129639935 ) => ( True )
approve[OWL (ln:174)]
_approve[OWL (ln:174)]
Approval[OWL (ln:255)]
/* Website: https://owlfi.vip Telegram: https://t.me/owl_protocol Twitter: https://twitter.com/owlfi_protocol */ // SPDX-License-Identifier: MIT pragma solidity 0.8.21; abstract contract Ownable { address internal owner; constructor(address _owner) {owner = _owner;} modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;} function isOwner(address account) public view returns (bool) {return account == owner;} function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);} function renounceOwnership() public onlyOwner {owner = address(0); emit OwnershipTransferred(address(0));} event OwnershipTransferred(address owner); } library SafeMath { 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; } } } interface IUniswapFactory { function createPair(address tokenA, address tokenB) external returns (address pairAddress_); function getPair(address tokenA, address tokenB) external view returns (address pairAddress_); } interface IUniswapRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; } interface IERC20 { function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, 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 sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract OWL is IERC20, Ownable { using SafeMath for uint256; string private constant _name = 'OWL'; string private constant _symbol = 'OWL'; uint8 private constant _decimals = 18; uint256 private _totalSupply = 10 ** 9 * (10 ** _decimals); bool private isTradingEnabled = false; bool private feeSwapEnabled = true; bool private _swapping; IUniswapRouter uniswapRouter; address public pairAddress; uint256 private _swappedCount; uint256 _buyCount = 1; uint256 private liquidityFee = 0; uint256 private marketingFee = 0; uint256 private developmentFee = 100; uint256 private burnFee = 0; uint256 private totalFee = 2000; uint256 private sellFee = 2000; uint256 private transferFee = 2000; uint256 private denominator = 10000; uint256 private _maximumFeeSwap = ( _totalSupply * 3) / 100; uint256 private _feeSwapThreshold = ( _totalSupply * 1) / 100000; modifier lockSwap {_swapping = true; _; _swapping = false;} uint256 public maxTxAmount = ( _totalSupply * 200 ) / 10000; uint256 public maxBuyAmount = ( _totalSupply * 200 ) / 10000; uint256 public maxWallet = ( _totalSupply * 200 ) / 10000; address internal constant DEAD = 0x000000000000000000000000000000000000dEaD; address internal development_receiver = 0xf2CDE0B3F099828c06C2Fb92e2D68C49b31aFA94; address internal marketing_receiver = 0xf2CDE0B3F099828c06C2Fb92e2D68C49b31aFA94; address internal liquidity_receiver = 0xf2CDE0B3F099828c06C2Fb92e2D68C49b31aFA94; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public _isExcludedFromFees; constructor() Ownable(msg.sender) { IUniswapRouter _router = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _pair = IUniswapFactory(_router.factory()).createPair(address(this), _router.WETH()); uniswapRouter = _router; pairAddress = _pair; _isExcludedFromFees[liquidity_receiver] = true; _isExcludedFromFees[marketing_receiver] = true; _isExcludedFromFees[development_receiver] = true; _isExcludedFromFees[msg.sender] = true; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } 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 getOwner() external view override returns (address) { return owner; } function balanceOf(address account) public view override returns (uint256) {return _balances[account];} function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, 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(msg.sender, spender, amount);return true;} function totalSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));} function updateMYSFee(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner { liquidityFee = _liquidity; marketingFee = _marketing; burnFee = _burn; developmentFee = _development; totalFee = _total; sellFee = _sell; transferFee = _trans; require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator, "totalFee and sellFee cannot be more than 100%"); } function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) { bool aboveMin = amount >= _feeSwapThreshold; bool aboveThreshold = balanceOf(address(this)) >= _feeSwapThreshold; return !_swapping && feeSwapEnabled && isTradingEnabled && aboveMin && !_isExcludedFromFees[sender] && recipient == pairAddress && _swappedCount >= _buyCount && aboveThreshold; } function swapBack(uint256 tokens) private lockSwap { uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee)).mul(2); uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator); uint256 toSwap = tokens.sub(tokensToAddLiquidityWith); uint256 initialBalance = address(this).balance; swapTokensForEth(toSwap); uint256 deltaBalance = address(this).balance.sub(initialBalance); uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee)); uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee); if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); } uint256 marketingAmt = unitBalance.mul(2).mul(marketingFee); if(marketingAmt > 0){payable(marketing_receiver).transfer(marketingAmt);} uint256 contractBalance = address(this).balance; if(contractBalance > uint256(0)){payable(development_receiver).transfer(contractBalance);} } function _getTaxdenominator(address sender, address recipient) internal view returns (uint256) { if(recipient == pairAddress){return sellFee;} if(sender == pairAddress){return totalFee;} return transferFee; } function _getFinalValues(address sender, address recipient, uint256 amount) internal returns (uint256) { if(_getTaxdenominator(sender, recipient) > 0){ uint256 feeAmount = amount.div(denominator).mul(_getTaxdenominator(sender, recipient)); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); if(burnFee > uint256(0) && _getTaxdenominator(sender, recipient) > burnFee){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));} return amount.sub(feeAmount);} return amount; } function startMYSTrade() external onlyOwner {isTradingEnabled = true;} function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); _approve(address(this), address(uniswapRouter), tokenAmount); uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp); } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function shouldTakeFee(address sender, address recipient) internal view returns (bool) { return !_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient]; } function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private { _approve(address(this), address(uniswapRouter), tokenAmount); uniswapRouter.addLiquidityETH{value: ETHAmount}( address(this), tokenAmount, 0, 0, liquidity_receiver, block.timestamp); } function min(uint256 a, uint256 b) private pure returns (uint256) { return (a > b) ? b : a; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function updateMYSTxConfig(uint256 _buy, uint256 _sell, uint256 _wallet) external onlyOwner { uint256 newTx = _totalSupply.mul(_buy).div(10000); uint256 newTransfer = _totalSupply.mul(_sell).div(10000); uint256 newWallet = _totalSupply.mul(_wallet).div(10000); maxTxAmount = newTx; maxBuyAmount = newTransfer; maxWallet = newWallet; uint256 limit = totalSupply().mul(5).div(1000); require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%"); } receive() external payable {} function _transfer(address sender, address recipient, uint256 amount) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); if(!_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient]){require(isTradingEnabled, "isTradingEnabled");} if(!_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient] && recipient != address(pairAddress) && recipient != address(DEAD)){ require((_balances[recipient].add(amount)) <= maxWallet, "Exceeds maximum wallet amount.");} if(sender != pairAddress){require(amount <= maxBuyAmount || _isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "TX Limit Exceeded");} require(amount <= maxTxAmount || _isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "TX Limit Exceeded"); if(recipient == pairAddress && !_isExcludedFromFees[sender]){_swappedCount += uint256(1);} if(shouldSwapBack(sender, recipient, amount)){swapBack(min(balanceOf(address(this)), _maximumFeeSwap)); _swappedCount = uint256(0);} if (!isTradingEnabled || !_isExcludedFromFees[sender]) { _balances[sender] = _balances[sender].sub(amount); } uint256 amountReceived = shouldTakeFee(sender, recipient) ? _getFinalValues(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); emit Transfer(sender, recipient, amountReceived); } }