Transaction Hash:
Block:
18746511 at Dec-09-2023 05:12:23 AM +UTC
Transaction Fee:
0.001476182653264352 ETH
$3.57
Gas Used:
46,624 Gas / 31.661433023 Gwei
Emitted Events:
105 |
ORB.Approval( owner=[Sender] 0x1e78c465d7d87b0e76e5fb0b3cd702685be6eefc, spender=0xC465CC50...42A8e1873, value=115792089237316195423570985008687907853269984665640564039457584007913129639935 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x1E78C465...85bE6eEfc |
0.059240538335361939 Eth
Nonce: 100
|
0.057764355682097587 Eth
Nonce: 101
| 0.001476182653264352 | ||
0x95222290...5CC4BAfe5
Miner
| (beaverbuild) | 6.477227878118420858 Eth | 6.477460998118420858 Eth | 0.00023312 | |
0xf06DFed9...794592364 |
Execution Trace
ORB.approve( spender=0xC465CC50B7D5A29b9308968f870a4B242A8e1873, amount=115792089237316195423570985008687907853269984665640564039457584007913129639935 ) => ( True )
approve[ORB (ln:597)]
_approve[ORB (ln:598)]
Approval[ORB (ln:780)]
_msgSender[ORB (ln:598)]
// SPDX-License-Identifier: MIT /* ███╗░░░███╗░█████╗░░██████╗░██╗░█████╗░██╗░░░██╗███████╗██████╗░░██████╗███████╗ ████╗░████║██╔══██╗██╔════╝░██║██╔══██╗██║░░░██║██╔════╝██╔══██╗██╔════╝██╔════╝ ██╔████╔██║███████║██║░░██╗░██║██║░░╚═╝╚██╗░██╔╝█████╗░░██████╔╝╚█████╗░█████╗░░ ██║╚██╔╝██║██╔══██║██║░░╚██╗██║██║░░██╗░╚████╔╝░██╔══╝░░██╔══██╗░╚═══██╗██╔══╝░░ ██║░╚═╝░██║██║░░██║╚██████╔╝██║╚█████╔╝░░╚██╔╝░░███████╗██║░░██║██████╔╝███████╗ ╚═╝░░░░░╚═╝╚═╝░░╚═╝░╚═════╝░╚═╝░╚════╝░░░░╚═╝░░░╚══════╝╚═╝░░╚═╝╚═════╝░╚══════╝ */ pragma solidity ^0.8.18; interface IERC20 { 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); } 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 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; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 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) private 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); } } } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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; } 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 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 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; } 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); } 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; } contract ORB is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; // Tracking status of wallets mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) public _isExcludedFromFee; /* WALLETS */ address payable private Developmentwallet; address payable private NFTFarm; address public MagicverseBridge; /* TOKEN DETAILS */ string private _name = "ORB Token"; string private _symbol = "ORB"; uint8 private _decimals = 18; uint256 private _tTotal; uint256 private _tFeeTotal; // Counter for liquify trigger uint8 private txCount = 0; uint8 private swapTrigger = 3; // Setting the initial fees uint256 private _TotalFee = 5; uint256 public _buyFee = 5; uint256 public _sellFee = 5; //Fees distribution uint256 public LiquidityFee = 2000; uint256 public NFTFarmFee = 6000; uint256 public DevelopmentFee = 2000; uint256 private TotalfeeforDistribution = 10000; // 'Previous fees' are used to keep track of fee settings when removing and restoring fees uint256 private _previousTotalFee = _TotalFee; uint256 private _previousBuyFee = _buyFee; uint256 private _previousSellFee = _sellFee; /* WALLET LIMITS */ // Maximum swap amount uint256 public _maxSwapAmount = 1000000000 * 10**18; /* Swap Router SET UP */ IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool public inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; bool public TradingInitialized; event SwapAndLiquifyEnabledUpdated(bool enabled); event TradingStarted( address TokenAddress, address PairAddress, uint256 TokenAmount, uint256 EthAmount ); event SwapAndLiquify( uint256 tokensSwapped, uint256 nativeReceived ); event LiquiditySent( uint256 tokensIntoLiquidity, uint256 CROintoLiquidity ); event NFTFarmSent( address to, uint256 nativeSent ); event DevelopmentSent( address to, uint256 nativeSent ); /* MODIFIERS */ // Prevent processing while already processing! modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } // Mint and burn functions can only be called by bridge! modifier onlyBridge { require(msg.sender == MagicverseBridge); _; } /* */ constructor () { _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; } /* STANDARD ERC20 COMPLIANCE FUNCTIONS */ function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _tOwned[account]; } 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, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function bridgeMint(address to, uint256 amount) public onlyBridge() { _tOwned[to] = _tOwned[to].add(amount); _tTotal = _tTotal.add(amount); emit Transfer(address(0), to, amount); } function bridgeBurn(address from, uint256 amount) public onlyBridge() { _tOwned[from] = _tOwned[from].sub(amount); _tTotal = _tTotal.sub(amount); emit Transfer(from, address(0), amount); } /* END OF STANDARD ERC20 COMPLIANCE FUNCTIONS */ /* FEES */ // Set a wallet address so that it does not have to pay transaction fees function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } // Set a wallet address so that it has to pay transaction fees function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } /* SETTING FEES Initial fees are set to 5% buy 5% sell */ function _set_Fees(uint256 Buy_Fee, uint256 Sell_Fee) external onlyOwner() { _sellFee = Sell_Fee; _buyFee = Buy_Fee; } function _set_Distribution_Fees(uint256 LiquidityFeex1000, uint256 NFTFarmFeex1000,uint256 DevelopmentFeex1000) external onlyOwner() { LiquidityFee = LiquidityFeex1000; NFTFarmFee = NFTFarmFeex1000; DevelopmentFee = DevelopmentFeex1000; TotalfeeforDistribution = LiquidityFee.add(NFTFarmFee).add(DevelopmentFee); } // Update NFT Farm wallet function Wallet_Update_NFTFarm(address payable NFTFarm_Wallet) public onlyOwner() { NFTFarm = NFTFarm_Wallet; _isExcludedFromFee[NFTFarm_Wallet] = true; } // Update Development wallet function Wallet_Update_Development(address payable Development_Wallet) public onlyOwner() { Developmentwallet = Development_Wallet; _isExcludedFromFee[Development_Wallet] = true; } // Update Bridge address function Wallet_Bridge(address Bridge_Wallet) public onlyOwner() { MagicverseBridge = Bridge_Wallet; _isExcludedFromFee[Bridge_Wallet] = true; } /* PROCESSING TOKENS - SET UP */ // Toggle on and off to auto process tokens to BNB wallet function set_Swap_And_Liquify_Enabled(bool true_or_false) public onlyOwner { swapAndLiquifyEnabled = true_or_false; emit SwapAndLiquifyEnabledUpdated(true_or_false); } // This will set the number of transactions required before the 'swapAndLiquify' function triggers function set_Number_Of_Transactions_Before_Liquify_Trigger(uint8 number_of_transactions) public onlyOwner { swapTrigger = number_of_transactions; } // This function is required so that the contract can receive Native Coin receive() external payable {} /* When sending tokens to another wallet (not buying or selling) if noFeeToTransfer is true there will be no fee */ bool public noFeeToTransfer = true; // Option to set fee or no fee for transfer (just in case the no fee transfer option is exploited in future!) // True = there will be no fees when moving tokens around or giving them to friends! (There will only be a fee to buy or sell) // False = there will be a fee when buying/selling/tranfering tokens // Default is true function set_Transfers_Without_Fees(bool true_or_false) external onlyOwner { noFeeToTransfer = true_or_false; } /* WALLET LIMITS Wallets are limited in two ways. The amount of tokens that can be purchased in one transaction and the total amount of tokens a wallet can buy. Limiting a wallet prevents one wallet from holding too many tokens, which can scare away potential buyers that worry that a whale might dump! */ // Remove all fees function removeAllFee() private { if(_TotalFee == 0 && _buyFee == 0 && _sellFee == 0) return; _previousBuyFee = _buyFee; _previousSellFee = _sellFee; _previousTotalFee = _TotalFee; _buyFee = 0; _sellFee = 0; _TotalFee = 0; } // Restore all fees function restoreAllFee() private { _TotalFee = _previousTotalFee; _buyFee = _previousBuyFee; _sellFee = _previousSellFee; } // Approve a wallet to sell tokens function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0) && spender != address(0), "ERR: zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { /* PROCESSING */ // SwapAndLiquify is triggered after every X transactions - this number can be adjusted using swapTrigger if( txCount >= swapTrigger && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled ) { txCount = 0; uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance > _maxSwapAmount) {contractTokenBalance = _maxSwapAmount;} if(contractTokenBalance > 0){ swapAndLiquify(contractTokenBalance); } } /* REMOVE FEES IF REQUIRED Fee removed if the to or from address is excluded from fee. Fee removed if the transfer is NOT a buy or sell. Change fee amount for buy or sell. */ bool takeFee = true; if(_isExcludedFromFee[from] || _isExcludedFromFee[to] || (noFeeToTransfer && from != uniswapV2Pair && to != uniswapV2Pair)){ takeFee = false; } else if (from == uniswapV2Pair){_TotalFee = _buyFee;} else if (to == uniswapV2Pair){_TotalFee = _sellFee;} _tokenTransfer(from,to,amount,takeFee); } /* PROCESSING FEES Fees are added to the contract as tokens, these functions exchange the tokens for Native coins and send to different wallets. */ // Send Native coin to external wallet function sendToWallet(address payable wallet, uint256 amount) private { wallet.transfer(amount); } // Processing tokens from contract function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 tokensforlp = contractTokenBalance.mul(LiquidityFee).div(TotalfeeforDistribution).div(2); uint256 amountToSwap = contractTokenBalance.sub(tokensforlp); swapTokensForNative(amountToSwap); uint256 amountNative = address(this).balance; emit SwapAndLiquify (amountToSwap,amountNative); //calcute payout shares uint256 totalNativeFee = TotalfeeforDistribution.sub(LiquidityFee.div(2)); uint256 amountForLiquidity = amountNative.mul(LiquidityFee).div(totalNativeFee).div(2); uint256 amountForNFTFarm = amountNative.mul(NFTFarmFee).div(totalNativeFee); uint256 amountForDevelopment = amountNative.sub(amountForLiquidity).sub(amountForNFTFarm); if (amountForLiquidity > 0) { addLiquidity(tokensforlp, amountForLiquidity); emit LiquiditySent(tokensforlp, amountForLiquidity); } if (amountForNFTFarm > 0) { sendToWallet(NFTFarm,amountForNFTFarm); emit NFTFarmSent(NFTFarm, amountForNFTFarm); } if (amountForDevelopment > 0) { sendToWallet(Developmentwallet,amountForDevelopment); emit DevelopmentSent(Developmentwallet, amountForDevelopment); } } function addLiquidity(uint256 tokenAmount, uint256 nativeAmount) private returns (uint256, uint256) { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity (uint amountToken, uint amountETH, ) = uniswapV2Router.addLiquidityETH{value: nativeAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); return (uint256(amountToken), uint256(amountETH)); } // Manual Token Process Trigger - Enter the percent of the tokens that you'd like to send to process function process_Tokens_Now (uint256 percent_Of_Tokens_To_Process) public onlyOwner { // Do not trigger if already in swap require(!inSwapAndLiquify, "Currently processing, try later."); if (percent_Of_Tokens_To_Process > 100){percent_Of_Tokens_To_Process == 100;} uint256 tokensOnContract = balanceOf(address(this)); uint256 sendTokens = tokensOnContract*percent_Of_Tokens_To_Process/100; swapAndLiquify(sendTokens); } // Swapping tokens for Native coin using Chains Swap function swapTokensForNative(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of Native path, address(this), block.timestamp ); } /* PURGE RANDOM TOKENS - Add the random token address and a wallet to send them to */ // Remove random tokens from the contract and send to a wallet function remove_Random_Tokens(address random_Token_Address, address send_to_wallet, uint256 number_of_tokens) public onlyOwner returns(bool _sent){ require(random_Token_Address != address(this), "Can not remove native token"); uint256 randomBalance = IERC20(random_Token_Address).balanceOf(address(this)); if (number_of_tokens > randomBalance){number_of_tokens = randomBalance;} _sent = IERC20(random_Token_Address).transfer(send_to_wallet, number_of_tokens); } /* INITIALIZE TRADING */ // Sets Router,Pair and adds LP. Can only executed once by the owner function startTrading(address Router) public onlyOwner() { require(!TradingInitialized); TradingInitialized = true; IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(Router); uniswapV2Pair = IUniswapV2Factory(_newuniswapV2Router.factory()).createPair(address(this), _newuniswapV2Router.WETH()); uniswapV2Router = _newuniswapV2Router; uint256 TokenForInitialLp = balanceOf(address(this)); uint256 ETHForInitialLp = address(this).balance; _approve(address(this), address(uniswapV2Router), TokenForInitialLp); uniswapV2Router.addLiquidityETH{value: ETHForInitialLp}( address(this), TokenForInitialLp, TokenForInitialLp, ETHForInitialLp, msg.sender, block.timestamp+1800 ); emit TradingStarted(address(this),uniswapV2Pair,TokenForInitialLp,ETHForInitialLp); } /* UPDATE ROUTER AND LIQUIDITY PAIRING */ // Set new router and make the new pair address function set_New_Router_and_Make_Pair(address newRouter) public onlyOwner() { IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(newRouter); uniswapV2Pair = IUniswapV2Factory(_newuniswapV2Router.factory()).createPair(address(this), _newuniswapV2Router.WETH()); uniswapV2Router = _newuniswapV2Router; } // Set new router function set_New_Router_Address(address newRouter) public onlyOwner() { IUniswapV2Router02 _newuniswapV2Router = IUniswapV2Router02(newRouter); uniswapV2Router = _newuniswapV2Router; } function set_New_Pair_Address(address newPair) public onlyOwner() { uniswapV2Pair = newPair; } /* TOKEN TRANSFERS */ // Check if token transfer needs to process fees function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee){ removeAllFee(); } else { txCount++; } _transferTokens(sender, recipient, amount); if(!takeFee) restoreAllFee(); } // Redistributing tokens and adding the fee to the contract address function _transferTokens(address sender, address recipient, uint256 tAmount) private { (uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _tOwned[address(this)] = _tOwned[address(this)].add(tFee); emit Transfer(sender, recipient, tTransferAmount); } // Calculating the fee in tokens function _getValues(uint256 tAmount) private view returns (uint256, uint256) { uint256 tFee = tAmount*_TotalFee/100; uint256 tTransferAmount = tAmount.sub(tFee); return (tTransferAmount, tFee); } }