文件 1 的 1:Kryptos.sol
pragma solidity ^0.6.12;
abstract contract Context {function _msgSender() internal view virtual returns (address payable) {return msg.sender;}function _msgData() internal view virtual returns (bytes memory) {this;return msg.data;}}
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) {uint256 c = a + b;require(c >= a, "SafeMath: addition overflow");return c;}function sub(uint256 a, uint256 b) internal pure returns (uint256) {return sub(a, b, "SafeMath: subtraction overflow");}function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b <= a, errorMessage);uint256 c = a - b;return c;}function mul(uint256 a, uint256 b) internal pure returns (uint256) {if (a == 0) {return 0;}uint256 c = a * b;require(c / a == b, "SafeMath: multiplication overflow");return c;}function div(uint256 a, uint256 b) internal pure returns (uint256) {return div(a, b, "SafeMath: division by zero");}function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b > 0, errorMessage);uint256 c = a / b;return c;}function mod(uint256 a, uint256 b) internal pure returns (uint256) {return mod(a, b, "SafeMath: modulo by zero");}function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {require(b != 0, errorMessage);return a % b;}}
library Address {function isContract(address account) internal view returns (bool) {bytes32 codehash;bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;assembly { codehash := extcodehash(account) }return (codehash != accountHash && codehash != 0x0);}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");return _functionCallWithValue(target, data, value, errorMessage);}function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);if (success) {return returndata;} else {if (returndata.length > 0) {assembly {let returndata_size := mload(returndata)revert(add(32, returndata), returndata_size)}} else {revert(errorMessage);}}}}
contract Ownable is Context {address private _owner;address private _previousOwner;uint256 private _lockTime;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);constructor () internal {address msgSender = _msgSender(); _owner = msgSender;emit OwnershipTransferred(address(0), msgSender);}function owner() public view returns (address) {return _owner;}modifier onlyOwner() {require(_owner == _msgSender(), "Ownable: caller is not the owner");_;} function renounceOwnership() public virtual onlyOwner {emit OwnershipTransferred(_owner, address(0));_owner = address(0);}function transferOwnership(address newOwner) public virtual onlyOwner {require(newOwner != address(0), "Ownable: new owner is the zero address");emit OwnershipTransferred(_owner, newOwner);_owner = newOwner;}function geUnlockTime() public view returns (uint256) {return _lockTime;}function lock(uint256 time) public virtual onlyOwner {_previousOwner = _owner;_owner = address(0);_lockTime = now + time;emit OwnershipTransferred(_owner, address(0));}function unlock() public virtual {require(_previousOwner == msg.sender, "You don't have permission to unlock");require(now > _lockTime , "Contract is locked until 7 days");emit OwnershipTransferred(_owner, _previousOwner);_owner = _previousOwner;}}
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 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;}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 Kryptos is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; address DEAD = 0x000000000000000000000000000000000000dEaD; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromtaxx; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 1000000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _ttaxxTotal; string private _name = 'Kryptos'; string private _symbol = 'Kryptos'; uint8 private _decimals = 9; uint256 private _taxx = 1; uint256 private _previoustaxx = _taxx; address payable _taxxCount; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwap = false; bool public swapEnabled = true; uint256 private _pass = 10; uint256 private _maxTxAmount = 100000000000000e9; uint256 private _numoftokensMIN = 5 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapEnabledUpdated(bool enabled); modifier lockTheSwap { inSwap = true; _; inSwap = false;} constructor (address payable taxxCount) public { _taxxCount = taxxCount; _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromtaxx[owner()] = true; _isExcludedFromtaxx[address(this)] = true; _isExcludedFromtaxx[address(DEAD)] = true; _isExcluded[address(DEAD)] = true; emit Transfer(address(0), _msgSender(), _tTotal);} 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) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromtaxxion(_rOwned[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 isExcluded(address account) public view returns (bool) { return _isExcluded[account];} function setExcludeFromFee(address account, bool excluded) external onlyOwner() { _isExcludedFromtaxx[account] = excluded;} function totalFees() public view returns (uint256) { return _ttaxxTotal;} function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function");(uint256 rAmount,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _ttaxxTotal = _ttaxxTotal.add(tAmount);} function taxxionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) {(uint256 rAmount,,,,) = _getValues(tAmount); return rAmount;} else {(,uint256 rTransferAmount,,,) = _getValues(tAmount); return rTransferAmount;}} function tokenFromtaxxion(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total taxxions"); uint256 currentRate =_getRate(); return rAmount.div(currentRate);} function excludeAccount(address account) external onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromtaxxion(_rOwned[account]);} _isExcluded[account] = true; _excluded.push(account);} function includeAccount(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break;}}} function removeAlltaxx() private { if(_taxx == 0) return; _previoustaxx = _taxx; _taxx = 0;} function restoreAlltaxx() private { _taxx = _previoustaxx;} function isExcludedFromtaxx(address account) public view returns(bool) { return _isExcludedFromtaxx[account];} 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 _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"); require(amount > 0, "Transfer amount must be greater than zero"); if(sender != owner() && recipient != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount){ contractTokenBalance = _maxTxAmount;} bool overMinTokenBalance = contractTokenBalance >= _numoftokensMIN; if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) { swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHTotaxx(address(this).balance);}} bool taketaxx = true; if(_isExcludedFromtaxx[sender] || _isExcludedFromtaxx[recipient]){ taketaxx = false;} _tokenTransfer(sender,recipient,amount,taketaxx);} function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{ address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp );} function sendETHTotaxx(uint256 amount) private { _taxxCount.transfer(amount);} function manualSwap() external onlyOwner() { uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance);} function manualSend() external onlyOwner() { uint256 contractETHBalance = address(this).balance; sendETHTotaxx(contractETHBalance);} function setSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled;} function _tokenTransfer(address sender, address recipient, uint256 amount, bool taketaxx) private { if(!taketaxx) removeAlltaxx(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount);} else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount);} else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount);} else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount);} else { _transferStandard(sender, recipient, amount);} if(!taketaxx) restoreAlltaxx();} function _transferStandard(address sender, address recipient, uint256 tAmount) private {(uint256 rAmount, uint256 rTransferAmount, uint256 rtaxx, uint256 tTransferAmount, uint256 ttaxx) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _taketaxx(ttaxx); _taxxions(rtaxx, ttaxx); emit Transfer(sender, recipient, tTransferAmount);} function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {(uint256 rAmount, uint256 rTransferAmount, uint256 rtaxx, uint256 tTransferAmount, uint256 ttaxx) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _taketaxx(ttaxx); _taxxions(rtaxx, ttaxx); emit Transfer(sender, recipient, tTransferAmount);} function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {(uint256 rAmount, uint256 rTransferAmount, uint256 rtaxx, uint256 tTransferAmount, uint256 ttaxx) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _taketaxx(ttaxx); _taxxions(rtaxx, ttaxx); emit Transfer(sender, recipient, tTransferAmount);} function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {(uint256 rAmount, uint256 rTransferAmount, uint256 rtaxx, uint256 tTransferAmount, uint256 ttaxx) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _taketaxx(ttaxx); _taxxions(rtaxx, ttaxx); emit Transfer(sender, recipient, tTransferAmount);} function _taketaxx(uint256 ttaxx) private { uint256 currentRate =_getRate(); uint256 pass =_pass; uint256 rtaxx = ttaxx.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rtaxx.mul(pass)); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(ttaxx.mul(pass));} function _taxxions(uint256 rtaxx, uint256 ttaxx) private { _rTotal = _rTotal.sub(rtaxx); _ttaxxTotal = _ttaxxTotal.add(ttaxx);} receive() external payable {} function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {(uint256 tTransferAmount, uint256 ttaxx) = _getTValues(tAmount, _taxx); uint256 currentRate =_getRate();(uint256 rAmount, uint256 rTransferAmount, uint256 rtaxx) = _getRValues(tAmount, ttaxx, currentRate); return (rAmount, rTransferAmount, rtaxx, tTransferAmount, ttaxx);} function _getTValues(uint256 tAmount, uint256 taxx) private pure returns (uint256, uint256) { uint256 ttaxx = tAmount.mul(taxx).div(100); uint256 tTransferAmount = tAmount.sub(ttaxx); return (tTransferAmount, ttaxx);} function _getRValues(uint256 tAmount, uint256 ttaxx, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rtaxx = ttaxx.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rtaxx); return (rAmount, rTransferAmount, rtaxx);} function _getRate() private view returns(uint256) {(uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply);} function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]);} if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply);} function _getMaxTxAmount() private view returns(uint256) { return _maxTxAmount;} function _getETHBalance() public view returns(uint256 balance) { return address(this).balance;} function _settaxx(uint256 taxx) external onlyOwner() { require(taxx >= 1 && taxx <= 5, 'taxx should be in 1 - 5'); _taxx = taxx;} function _setpass(uint256 pass) external onlyOwner() { _pass = pass;} function _settaxxCount(address payable taxxCount) external onlyOwner() { _taxxCount = taxxCount;} function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { require(maxTxAmount >= 100000000000000e9 , 'maxTxAmount should be greater than 100000000000000e9'); _maxTxAmount = maxTxAmount;}}