Comparing sensitive data, confidential files or internal emails?

Most legal and privacy policies prohibit uploading sensitive data online. Diffchecker Desktop ensures your confidential information never leaves your computer. Work offline and compare documents securely.

MasterChef

Created Diff never expires
670 removals
732 lines
508 additions
596 lines
/**
/**
*Submitted for verification at BscScan.com on 2020-09-22
* Safetoken Fork (added Antiwhale, Antibot, Antidump Fuction) thx to 0f0crypto for a Safetoken rewrite!
*/
*
* SPDX-License-Identifier: MIT
*/
/**
*
* Super Low Liquidity Token
*
💎Super Low Liquidity Token
✅ Total Supply : 100.000.000
✅ Initial Liquidity : 0.2BNB
✅ First Buy Max Transaction Around : 0,002 BNB


pragma solidity 0.6.12;
💎 Fee:
✅ 4% Liquidity
✅ 4% Redistribution
✅ 1% Burn
✅ 1% Tip to the Dev
✅ 5% Whale Only Fee (Only when your balance is > capWhaleWalletBalance)
✅ Max Transaction : 2% From Total Supply (2.000.000)
✅ Max Wallet Balance : 3 times Max Transaction (6.000.000)


💎 AntiWhale
✅ CapWhaleWalletBalance : 80% From Max Wallet Balance (Balance > 48,000,000)


//
💎 AntiBot and Dump
/**
✅ 15 seconds between each transaction per wallet.
* @dev Wrappers over Solidity's arithmetic operations with added overflow
✅ Cant send multiple transaction in one block per wallet.
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, 'SafeMath: addition overflow');


return c;
💎 AntiDump
}
✅ Fee Multiplier after release only sell
✅ x2 in 24 hours after released
✅ x1 after 24 hours after released


/**
💎 Security
* @dev Returns the subtraction of two unsigned integers, reverting on
✅ LP Burn 100%
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, 'SafeMath: subtraction overflow');
}


/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;


return c;
}


/**
TG: https://t.me/wolfclaw
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}


uint256 c = a * b;
*/
require(c / a == b, 'SafeMath: multiplication overflow');
pragma solidity ^0.8.4;


return c;
}


/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, 'SafeMath: division by zero');
}


/**
import "./safetoken-imports.sol";
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold


return c;
/**
}
* @dev If I did a good job you should not need to change anything apart from the values in the `Tokenomics`,
* the actual name of the contract `SafeTokenV1Beta` at the very bottom **and** the `environment` into which
* you are deploying the contract `SafeToken(Env.Testnet)` or `SafeToken(Env.MainnetV2)` etc.
*
* If you wish to disable a particular tax/fee just set it to zero (or comment it out/remove it).
*
* You can add (in theory) as many custom taxes/fees with dedicated wallet addresses if you want.
* Nevertheless, I do not recommend using more than a few as the contract has not been tested
* for more than the original number of taxes/fees, which is 6 (liquidity, redistribution, burn,
* marketing, charity & tip to the dev). Furthermore, exchanges may impose a limit on the total
* transaction fee (so that, for example, you cannot claim 100%). Usually this is done by limiting the
* max value of slippage, for example, PancakeSwap max slippage is 49.9% and the fees total of more than
* 35% will most likely fail there.
*
* NOTE: You shouldn't really remove the Rfi fee. If you do not wish to use RFI for your token,
* you shouldn't be using this contract at all (you're just wasting gas if you do).
*
* NOTE: ignore the note below (anti-whale mech is not implemented yet)
* If you wish to modify the anti-whale mech (progressive taxation) it will require a bit of coding.
* I tried to make the integration as simple as possible via the `Antiwhale` contract, so the devs
* know exactly where to look and what/how to make the necessary changes. There are many possibilites,
* such as modifying the fees based on the tx amount (as % of TOTAL_SUPPLY), or sender's wallet balance
* (as % of TOTAL_SUPPLY), including (but not limited to):
* - progressive taxation by tax brackets (e.g <1%, 1-2%, 2-5%, 5-10%)
* - progressive taxation by the % over a threshold (e.g. 1%)
* - extra fee (e.g. double) over a threshold
*/
abstract contract Tokenomics {
using SafeMath for uint256;
// --------------------- Token Settings ------------------- //


string internal constant NAME = "GoldenWspp";
string internal constant SYMBOL = "GWSPP";
uint16 internal constant FEES_DIVISOR = 10**3;
uint8 internal constant DECIMALS = 6;
uint256 internal constant ZEROES = 10**DECIMALS;
uint256 private constant MAX = ~uint256(0);
uint256 internal constant TOTAL_SUPPLY = ZEROES;
uint256 internal _reflectedSupply = (MAX - (MAX % TOTAL_SUPPLY));
uint internal TIME_LIMIT_TRANSACTION = 15 seconds;
uint internal TimeContractStart = block.timestamp;
bool internal ANTI_DUMP_MULTIPLAYER = true;
/**
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* @dev Set the maximum transaction amount allowed in a transfer.
* Reverts when dividing by zero.
*
*
* The default value is 1% of the total supply.
* Counterpart to Solidity's `%` operator. This function uses a `revert`
*
* opcode (which leaves remaining gas untouched) while Solidity uses an
* NOTE: set the value to `TOTAL_SUPPLY` to have an unlimited max, i.e.
* invalid opcode to revert (consuming all remaining gas).
* `maxTransactionAmount = TOTAL_SUPPLY;`
*
* Requirements:
*
* - The divisor cannot be zero.
*/
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 internal constant maxTransactionAmount = (TOTAL_SUPPLY / 100); // 2% of the total supply
return mod(a, b, 'SafeMath: modulo by zero');
}

/**
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* @dev Set the maximum allowed balance in a wallet.
* Reverts with custom message when dividing by zero.
*
*
* The default value is 2% of the total supply.
* Counterpart to Solidity's `%` operator. This function uses a `revert`
*
* opcode (which leaves remaining gas untouched) while Solidity uses an
* NOTE: set the value to 0 to have an unlimited max.
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
*
* - The divisor cannot be zero.
* IMPORTANT: This value MUST be greater than `numberOfTokensToSwapToLiquidity` set below,
*/
* otherwise the liquidity swap will never be executed
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}

function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
z = x < y ? x : y;
}

// babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
function sqrt(uint256 y) internal pure returns (uint256 z) {
if (y > 3) {
z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}

//
interface IBEP20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);

/**
* @dev Returns the token decimals.
*/
function decimals() external view returns (uint8);

/**
* @dev Returns the token symbol.
*/
function symbol() external view returns (string memory);

/**
* @dev Returns the token name.
*/
*/
function name() external view returns (string memory);
uint256 internal maxWalletBalance = maxTransactionAmount * 3; // 10 * maxTransactionAmount


/**
/**
* @dev Returns the bep token owner.
* @dev Set the Cap balance in a wallet to identification Whale.
*
* The default value is 75% of the maxWalletBalance.
*
* NOTE: set the value to maxWalletBalance to disable.
*
* IMPORTANT: This value MUST be greater than `numberOfTokensToSwapToLiquidity` set below,
* otherwise the liquidity swap will never be executed
*/
*/
function getOwner() external view returns (address);
uint16 internal constant WHALE_FEE_IN_PERCENT = 50;

uint256 internal capWhaleWalletBalance = (80 * maxWalletBalance) / 100; // 80% of the maxWalletBalance
/**
/**
* @dev Returns the amount of tokens owned by `account`.
* @dev Set the number of tokens to swap and add to liquidity.
*
* Whenever the contract's balance reaches this number of tokens, swap & liquify will be
* executed in the very next transfer (via the `_beforeTokenTransfer`)
*
* If the `FeeType.Liquidity` is enabled in `FeesSettings`, the given % of each transaction will be first
* sent to the contract address. Once the contract's balance reaches `numberOfTokensToSwapToLiquidity` the
* `swapAndLiquify` of `Liquifier` will be executed. Half of the tokens will be swapped for ETH
* (or BNB on BSC) and together with the other half converted into a Token-ETH/Token-BNB LP Token.
*
* See: `Liquifier`
*/
*/
function balanceOf(address account) external view returns (uint256);
uint256 internal constant numberOfTokensToSwapToLiquidity = TOTAL_SUPPLY / 1000; // 0.1% of the total supply


/**
// --------------------- Fees Settings ------------------- //
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);


/**
/**
* @dev Returns the remaining number of tokens that `spender` will be
* @dev To add/edit/remove fees scroll down to the `addFees` function below
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
*/
function allowance(address _owner, address spender) external view returns (uint256);


/**
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
* @dev You can change the value of the burn address to pretty much anything
*
* that's (clearly) a non-random address, i.e. for which the probability of
* Returns a boolean value indicating whether the operation succeeded.
* someone having the private key is (virtually) 0. For example, 0x00.....1,
* 0x111...111, 0x12345.....12345, etc.
*
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* NOTE: This does NOT need to be the zero address, adress(0) = 0x000...000;
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
*
* Emits an {Approval} event.
* Trasfering tokens to the burn address is good for optics/marketing. Nevertheless
*/
* if the burn address is excluded from rewards (unlike in Safemoon), sending tokens
function approve(address spender, uint256 amount) external returns (bool);
* to the burn address actually improves redistribution to holders (as they will

* have a larger % of tokens in non-excluded accounts)
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
*
* Returns a boolean value indicating whether the operation succeeded.
* p.s. the address below is the speed of light in vacuum in m/s (expressed in decimals),
* the hex value is 0x0000000000000000000000000000000011dE784A; :)
*
*
* Emits a {Transfer} event.
* Here are the values of some other fundamental constants to use:
* 0x0000000000000000000000000000000602214076 (Avogardo constant)
* 0x0000000000000000000000000000000001380649 (Boltzmann constant)
* 0x2718281828459045235360287471352662497757 (e)
* 0x0000000000000000000000000000001602176634 (elementary charge)
* 0x0000000000000000000000000200231930436256 (electron g-factor)
* 0x0000000000000000000000000000091093837015 (electron mass)
* 0x0000000000000000000000000000137035999084 (fine structure constant)
* 0x0577215664901532860606512090082402431042 (Euler-Mascheroni constant)
* 0x1618033988749894848204586834365638117720 (golden ratio)
* 0x0000000000000000000000000000009192631770 (hyperfine transition fq)
* 0x0000000000000000000000000000010011659208 (muom g-2)
* 0x3141592653589793238462643383279502884197 (pi)
* 0x0000000000000000000000000000000662607015 (Planck's constant)
* 0x0000000000000000000000000000001054571817 (reduced Planck's constant)
* 0x1414213562373095048801688724209698078569 (sqrt(2))
*/
*/
function transferFrom(
address internal burnAddress = 0x000000000000000000000000000000000000dEaD;
address sender,
address recipient,
uint256 amount
) external returns (bool);


/**
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* @dev You can disable this but if you feel generous I'd appreciate the 0.1%
* another (`to`).
* donation for rewriting Safemoon and making everyone's life a little easier
*
*
* Note that `value` may be zero.
* If you keep this tip enabled, let me know in Discord: https://discord.gg/zn86MDCQcM
*/
* and you'll be added to the partners section to promote your token.
event Transfer(address indexed from, address indexed to, uint256 value);

/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
address internal tipToTheDev = 0x5fd3d666afA636dD70A9d33Ef20799aa53DcbB37;
}


//
enum FeeType { Antiwhale, Burn, Liquidity, Rfi, External, ExternalToETH }
/**
struct Fee {
* @dev Collection of functions related to the address type
FeeType name;
*/
uint256 value;
library Address {
address recipient;
/**
uint256 total;
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly {
codehash := extcodehash(account)
}
return (codehash != accountHash && codehash != 0x0);
}
}


/**
Fee[] internal fees;
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
uint256 internal sumOfFees;
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, 'Address: insufficient balance');


// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
constructor() {
(bool success, ) = recipient.call{value: amount}('');
_addFees();
require(success, 'Address: unable to send value, recipient may have reverted');
}
}


/**
function _addFee(FeeType name, uint256 value, address recipient) private {
* @dev Performs a Solidity function call using a low level `call`. A
fees.push( Fee(name, value, recipient, 0 ) );
* plain`call` is an unsafe replacement for a function call: use this
sumOfFees += value;
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, 'Address: low-level call failed');
}
}


/**
function _addFees() private {
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with

* `errorMessage` as a fallback revert reason when `target` reverts.
/**
*
* The RFI recipient is ignored but we need to give a valid address value
* _Available since v3.1._
*
*/
* CAUTION: If you don't want to use RFI this implementation isn't really for you!
function functionCall(
* There are much more efficient and cleaner token contracts without RFI
address target,
* so you should use one of those
bytes memory data,
*
string memory errorMessage
* The value of fees is given in part per 1000 (based on the value of FEES_DIVISOR),
) internal returns (bytes memory) {
* e.g. for 5% use 50, for 3.5% use 35, etc.
return _functionCallWithValue(target, data, 0, errorMessage);
*/
_addFee(FeeType.Rfi, 40, address(this) ); // 4% Redistribute to holders
_addFee(FeeType.Burn, 10, burnAddress ); // 1% Burn
_addFee(FeeType.Liquidity, 40, address(this) ); // 4% added to liquidity
_addFee(FeeType.ExternalToETH, 10, tipToTheDev ); // 1% Tips to the Dev
_addFee(FeeType.Antiwhale, WHALE_FEE_IN_PERCENT, tipToTheDev ); // 5% if you have balance more than capWhaleWalletBalance
}
}


/**
function _getFeesCount() internal view returns (uint256){ return fees.length; }
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],

* but also transferring `value` wei to `target`.
function _getFeeStruct(uint256 index) private view returns(Fee storage){
*
require( index >= 0 && index < fees.length, "FeesSettings._getFeeStruct: Fee index out of bounds");
* Requirements:
return fees[index];
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
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 _getFee(uint256 index) internal view returns (FeeType, uint256, address, uint256){
/**
Fee memory fee = _getFeeStruct(index);
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
return ( fee.name, fee.value, fee.recipient, fee.total );
* with `errorMessage` as a fallback revert reason when `target` reverts.
}
*
function _addFeeCollectedAmount(uint256 index, uint256 amount) internal {
* _Available since v3.1._
Fee storage fee = _getFeeStruct(index);
*/
fee.total = fee.total.add(amount);
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(
// function getCollectedFeeTotal(uint256 index) external view returns (uint256){
address target,
function getCollectedFeeTotal(uint256 index) internal view returns (uint256){
bytes memory data,
Fee memory fee = _getFeeStruct(index);
uint256 weiValue,
return fee.total;
string memory errorMessage
}
) private returns (bytes memory) {
}
require(isContract(target), 'Address: call to non-contract');

// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{value: weiValue}(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly


// solhint-disable-next-line no-inline-assembly
abstract contract Presaleable is Manageable {
assembly {
bool internal isInPresale;
let returndata_size := mload(returndata)
function setPreseableEnabled(bool value) external onlyManager {
revert(add(32, returndata), returndata_size)
isInPresale = value;
}
} else {
revert(errorMessage);
}
}
}
}
}
}


//
abstract contract BaseRfiToken is IERC20, IERC20Metadata, Ownable, Presaleable, Tokenomics {
/**

* @title SafeBEP20
* @dev Wrappers around BEP20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeBEP20 for IBEP20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeBEP20 {
using SafeMath for uint256;
using SafeMath for uint256;
using Address for address;
using Address for address;


function safeTransfer(
mapping (address => uint256) internal _reflectedBalances;
IBEP20 token,
mapping (address => uint256) internal _balances;
address to,
mapping (address => mapping (address => uint256)) internal _allowances;
uint256 value
) internal {
mapping (address => bool) internal _isExcludedFromFee;
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
mapping (address => bool) internal _isExcludedFromRewards;
}
address[] private _excluded;
constructor() {
_reflectedBalances[owner()] = _reflectedSupply;
// exclude owner and this contract from fee
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
// exclude the owner and this contract from rewards
_exclude(owner());
_exclude(address(this));


function safeTransferFrom(
emit Transfer(address(0), owner(), TOTAL_SUPPLY);
IBEP20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
}
/** Functions required by IERC20Metadat **/
function name() external pure override returns (string memory) { return NAME; }
function symbol() external pure override returns (string memory) { return SYMBOL; }
function decimals() external pure override returns (uint8) { return DECIMALS; }
/** Functions required by IERC20Metadat - END **/
/** Functions required by IERC20 **/
function totalSupply() external pure override returns (uint256) {
return TOTAL_SUPPLY;
}
function balanceOf(address account) public view override returns (uint256){
if (_isExcludedFromRewards[account]) return _balances[account];
return tokenFromReflection(_reflectedBalances[account]);
}
function transfer(address recipient, uint256 amount) external override returns (bool){
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) external view override returns (uint256){
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) external override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function getAddressLastTransaction(address owner ) external view returns(uint)
{
return _getLastTransaction(owner);
}
function getContractStartTime() external view returns(uint){
return TimeContractStart;
}
function setTimeLimitTransaction(uint inSecond) external onlyManager{
TIME_LIMIT_TRANSACTION = inSecond;
}
function getTimeLimitTransaction() external view returns(uint) {
return TIME_LIMIT_TRANSACTION;
}
function setMaxWalletBalance(uint256 amount) external onlyManager{
maxWalletBalance = amount;
}
function getMaxWalletBalance() external view returns(uint256)
{
return maxWalletBalance;
}
function setCapWhaleWalletBalance(uint256 amount) external onlyManager{
capWhaleWalletBalance = amount;
}
function getCapWhaleWalletBalance() external view returns(uint256)
{
return capWhaleWalletBalance;
}
function setIsAntiDump(bool isActive) external onlyManager{
ANTI_DUMP_MULTIPLAYER = isActive;
}
function getAntiDump() external view returns(bool)
{
return ANTI_DUMP_MULTIPLAYER;
}
function checkAddress(address checkAdd) external view returns(uint256)
{
return _getLastTransaction(checkAdd);
}
function checkAddress2(address checkAdd) external view returns(uint256)
{
return _getLastBlock(checkAdd);
}
function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool){
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
/** Functions required by IERC20 - END **/


/**
/**
* @dev Deprecated. This function has issues similar to the ones found in
* @dev this is really a "soft" burn (total supply is not reduced). RFI holders
* {IBEP20-approve}, and its usage is discouraged.
* get two benefits from burning tokens:
*
*
* Whenever possible, use {safeIncreaseAllowance} and
* 1) Tokens in the burn address increase the % of tokens held by holders not
* {safeDecreaseAllowance} instead.
* excluded from rewards (assuming the burn address is excluded)
* 2) Tokens in the burn address cannot be sold (which in turn draing the
* liquidity pool)
*
*
* In RFI holders already get % of each transaction so the value of their tokens
* increases (in a way). Therefore there is really no need to do a "hard" burn
* (reduce the total supply). What matters (in RFI) is to make sure that a large
* amount of tokens cannot be sold = draining the liquidity pool = lowering the
* value of tokens holders own. For this purpose, transfering tokens to a (vanity)
* burn address is the most appropriate way to "burn".
*
* There is an extra check placed into the `transfer` function to make sure the
* burn address cannot withdraw the tokens is has (although the chance of someone
* having/finding the private key is virtually zero).
*/
*/
function safeApprove(
function burn(uint256 amount) external {
IBEP20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
'SafeBEP20: approve from non-zero to non-zero allowance'
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}


function safeIncreaseAllowance(
address sender = _msgSender();
IBEP20 token,
require(sender != address(0), "BaseRfiToken: burn from the zero address");
address spender,
require(sender != address(burnAddress), "BaseRfiToken: burn from the burn address");
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}


function safeDecreaseAllowance(
uint256 balance = balanceOf(sender);
IBEP20 token,
require(balance >= amount, "BaseRfiToken: burn amount exceeds balance");
address spender,

uint256 value
uint256 reflectedAmount = amount.mul(_getCurrentRate());
) internal {

uint256 newAllowance = token.allowance(address(this), spender).sub(
// remove the amount from the sender's balance first
value,
_reflectedBalances[sender] = _reflectedBalances[sender].sub(reflectedAmount);
'SafeBEP20: decreased allowance below zero'
if (_isExcludedFromRewards[sender])
);
_balances[sender] = _balances[sender].sub(amount);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));

_burnTokens( sender, amount, reflectedAmount );
}
}

/**
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* @dev "Soft" burns the specified amount of tokens by sending them
* on the return value: the return value is optional (but if data is returned, it must not be false).
* to the burn address
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
*/
function _callOptionalReturn(IBEP20 token, bytes memory data) private {
function _burnTokens(address sender, uint256 tBurn, uint256 rBurn) internal {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.

bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed');
if (returndata.length > 0) {
// Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed');
}
}
}


//
/**
/*
* @dev Do not reduce _totalSupply and/or _reflectedSupply. (soft) burning by sending
* @dev Provides information about the current execution context, including the
* tokens to the burn address (which should be excluded from rewards) is sufficient
* sender of the transaction and its data. While these are generally available
* in RFI
* via msg.sender and msg.data, they should not be accessed in such a direct
*/
* manner, since when dealing with GSN meta-transactions the account sending and
_reflectedBalances[burnAddress] = _reflectedBalances[burnAddress].add(rBurn);
* paying for execution may not be the actual sender (as far as an application
if (_isExcludedFromRewards[burnAddress])
* is concerned).
_balances[burnAddress] = _balances[burnAddress].add(tBurn);
*
* This contract is only required for intermediate, library-like contracts.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor() internal {}


function _msgSender() internal view returns (address payable) {
/**
return msg.sender;
* @dev Emit the event so that the burn address balance is updated (on bscscan)
*/
emit Transfer(sender, burnAddress, tBurn);
}
}


function _msgData() internal view returns (bytes memory) {
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return msg.data;
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;
* @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.
*/
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() internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
}

/**
function isExcludedFromReward(address account) external view returns (bool) {
* @dev Returns the address of the current owner.
return _isExcludedFromRewards[account];
*/
function owner() public view returns (address) {
return _owner;
}
}


/**
/**
* @dev Throws if called by any account other than the owner.
* @dev Calculates and returns the reflected amount for the given amount with or without
* the transfer fees (deductTransferFee true/false)
*/
*/
modifier onlyOwner() {
function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns(uint256) {
require(_owner == _msgSender(), 'Ownable: caller is not the owner');
require(tAmount <= TOTAL_SUPPLY, "Amount must be less than supply");
_;
if (!deductTransferFee) {
(uint256 rAmount,,,,) = _getValues(tAmount,0);
return rAmount;
} else {
(,uint256 rTransferAmount,,,) = _getValues(tAmount,_getSumOfFees(_msgSender(), tAmount));
return rTransferAmount;
}
}
}


/**
/**
* @dev Leaves the contract without owner. It will not be possible to call
* @dev Calculates and returns the amount of tokens corresponding to the given reflected amount.
* `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 onlyOwner {
function tokenFromReflection(uint256 rAmount) internal view returns(uint256) {
emit OwnershipTransferred(_owner, address(0));
require(rAmount <= _reflectedSupply, "Amount must be less than total reflections");
_owner = address(0);
uint256 currentRate = _getCurrentRate();
return rAmount.div(currentRate);
}
}

/**
function excludeFromReward(address account) external onlyOwner() {
* @dev Transfers ownership of the contract to a new account (`newOwner`).
require(!_isExcludedFromRewards[account], "Account is not included");
* Can only be called by the current owner.
_exclude(account);
*/
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
}

/**
function _exclude(address account) internal {
* @dev Transfers ownership of the contract to a new account (`newOwner`).
if(_reflectedBalances[account] > 0) {
*/
_balances[account] = tokenFromReflection(_reflectedBalances[account]);
function _transferOwnership(address newOwner) internal {
}
require(newOwner != address(0), 'Ownable: new owner is the zero address');
_isExcludedFromRewards[account] = true;
emit OwnershipTransferred(_owner, newOwner);
_excluded.push(account);
_owner = newOwner;
}
}
}

//
/**
* @dev Implementation of the {IBEP20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {BEP20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-BEP20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: functions revert instead
* of returning `false` on failure. This behavior is nonetheless conventional
* and does not conflict with the expectations of BEP20 applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IBEP20-approve}.
*/
contract BEP20 is Context, IBEP20, Ownable {
using SafeMath for uint256;
using Address for address;

mapping(address => uint256) private _balances;

mapping(address => mapping(address => uint256)) private _allowances;

uint256 private _totalSupply;

string private _name;
string private _symbol;
uint8 private _decimals;


/**
function includeInReward(address account) external onlyOwner() {
* @dev Sets the values for {name} and {symbol}, initializes {decimals} with
require(_isExcludedFromRewards[account], "Account is not excluded");
* a default value of 18.
for (uint256 i = 0; i < _excluded.length; i++) {
*
if (_excluded[i] == account) {
* To select a different value for {decimals}, use {_setupDecimals}.
_excluded[i] = _excluded[_excluded.length - 1];
*
_balances[account] = 0;
* All three of these values are immutable: they can only be set once during
_isExcludedFromRewards[account] = false;
* construction.
_excluded.pop();
*/
break;
constructor(string memory name, string memory symbol) public {
}
_name = name;
}
_symbol = symbol;
_decimals = 18;
}
}
function setExcludedFromFee(address account, bool value) external onlyOwner { _isExcludedFromFee[account] = value; }
function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; }
function _approve(address owner, address spender, uint256 amount) internal {
require(owner != address(0), "BaseRfiToken: approve from the zero address");
require(spender != address(0), "BaseRfiToken: approve to the zero address");


/**
_allowances[owner][spender] = amount;
* @dev Returns the bep token owner.
emit Approval(owner, spender, amount);
*/
function getOwner() external override view returns (address) {
return owner();
}
}

/**
/**
* @dev Returns the token name.
*/
*/
function name() public override view returns (string memory) {
function _isUnlimitedSender(address account) internal view returns(bool){
return _name;
// the owner should be the only whitelisted sender
return (account == owner());
}
}

/**
/**
* @dev Returns the token decimals.
*/
*/
function decimals() public override view returns (uint8) {
function _isUnlimitedRecipient(address account) internal view returns(bool){
return _decimals;
// the owner should be a white-listed recipient
// and anyone should be able to burn as many tokens as
// he/she wants
return (account == owner() || account == burnAddress);
}
}


/**
function _transfer(address sender, address recipient, uint256 amount) private {
* @dev Returns the token symbol.
require(sender != address(0), "BaseRfiToken: transfer from the zero address");
*/
require(recipient != address(0), "BaseRfiToken: transfer to the zero address");
function symbol() public override view returns (string memory) {
require(sender != address(burnAddress), "BaseRfiToken: transfer from the burn address");
return _symbol;
require(amount > 0, "Transfer amount must be greater than zero");
}
// indicates whether or not feee should be deducted from the transfer
bool takeFee = true;


/**
if ( isInPresale ){ takeFee = false; }
* @dev See {BEP20-totalSupply}.
else {
*/
/**
function totalSupply() public override view returns (uint256) {
* Check the amount is within the max allowed limit as long as a
return _totalSupply;
* unlimited sender/recepient is not involved in the transaction
*/
if ( amount > maxTransactionAmount && !_isUnlimitedSender(sender) && !_isUnlimitedRecipient(recipient) ){
revert("Transfer amount exceeds the maxTxAmount.");
}
/**
* The pair needs to excluded from the max wallet balance check;
* selling tokens is sending them back to the pair (without this
* check, selling tokens would not work if the pair's balance
* was over the allowed max)
*
* Note: This does NOT take into account the fees which will be deducted
* from the amount. As such it could be a bit confusing
*/
if ( maxWalletBalance > 0 && !_isUnlimitedSender(sender) && !_isUnlimitedRecipient(recipient) && !_isV2Pair(recipient)){
uint256 recipientBalance = balanceOf(recipient);
require(recipientBalance + amount <= maxWalletBalance, "New balance would exceed the maxWalletBalance");
}
if(TIME_LIMIT_TRANSACTION > 0 && !_isUnlimitedSender(sender) && !_isUnlimitedRecipient(recipient) && sender != address(this))
{
//AntiBot Using Block Check
require(block.number > _getLastBlock(tx.origin), "You cant send more than one transaction in one block.");
_setLastBlock(tx.origin);
//AntiBot Using Time Between Transaction
if(_getLastTransaction(tx.origin) > 0)
{
require(_getLastTransaction(tx.origin) <= block.timestamp, "You need to wait TIME_LIMIT_TRANSACTION before perform another transaction.");
}
_setLastTransaction(tx.origin);
}
}
// if any account belongs to _isExcludedFromFee account then remove the fee
if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ takeFee = false; }

_beforeTokenTransfer(sender, recipient, amount, takeFee);
_transferTokens(sender, recipient, amount, takeFee);
}
}


/*
func