IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> REMIX创造区块链智能合约 -> 正文阅读

[区块链]REMIX创造区块链智能合约

我们打开REMIX网站

在里面我们可以寻找到创建文件


/**
?*Submitted for verification at BscScan.com on 2021-06-25
*/

pragma solidity 0.6.12;?? ?
// SPDX-License-Identifier: Unlicensed?? ?
interface IERC20 {?? ?
? ? function totalSupply() external view returns (uint256);?? ?
? ? /**?? ?
? ? ?* @dev Returns the amount of tokens owned by `account`.?? ?
? ? ?*/?? ?
? ? function balanceOf(address account) external view returns (uint256);?? ?
? ? /**?? ?
? ? ?* @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?? ?
? ? ?* 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.?? ?
? ? ?*?? ?
? ? ?* Returns a boolean value indicating whether the operation succeeded.?? ?
? ? ?*?? ?
? ? ?* IMPORTANT: Beware that changing an allowance with this method brings the risk?? ?
? ? ?* 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.?? ?
? ? ?*/?? ?
? ? function approve(address spender, uint256 amount) external returns (bool);?? ?
? ? /**?? ?
? ? ?* @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.?? ?
? ? ?*?? ?
? ? ?* Emits a {Transfer} event.?? ?
? ? ?*/?? ?
? ? function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);?? ?
? ? /**?? ?
? ? ?* @dev Emitted when `value` tokens are moved from one account (`from`) to?? ?
? ? ?* another (`to`).?? ?
? ? ?*?? ?
? ? ?* Note that `value` may be zero.?? ?
? ? ?*/?? ?
? ? 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);?? ?
}?? ?
/**?? ?
?* @dev Wrappers over Solidity's arithmetic operations with added overflow?? ?
?* 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;?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Returns the subtraction of two unsigned integers, reverting on?? ?
? ? ?* 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;?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @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");?? ?
? ? ? ? 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");?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @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 Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),?? ?
? ? ?* Reverts when dividing by zero.?? ?
? ? ?*?? ?
? ? ?* Counterpart to Solidity's `%` operator. 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 mod(uint256 a, uint256 b) internal pure returns (uint256) {?? ?
? ? ? ? return mod(a, b, "SafeMath: modulo by zero");?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),?? ?
? ? ?* Reverts with custom message when dividing by zero.?? ?
? ? ?*?? ?
? ? ?* Counterpart to Solidity's `%` operator. 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 mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {?? ?
? ? ? ? require(b != 0, errorMessage);?? ?
? ? ? ? return a % b;?? ?
? ? }?? ?
}?? ?
abstract contract Context {?? ?
? ? function _msgSender() internal view virtual returns (address payable) {?? ?
? ? ? ? return msg.sender;?? ?
? ? }?? ?
? ? function _msgData() internal view virtual returns (bytes memory) {?? ?
? ? ? ? this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691?? ?
? ? ? ? return msg.data;?? ?
? ? }?? ?
}?? ?
/**?? ?
?* @dev Collection of functions related to the address type?? ?
?*/?? ?
library Address {?? ?
? ? /**?? ?
? ? ?* @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);?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Replacement for Solidity's `transfer`: sends `amount` wei to?? ?
? ? ?* `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?? ?
? ? ? ? (bool success, ) = recipient.call{ value: amount }("");?? ?
? ? ? ? require(success, "Address: unable to send value, recipient may have reverted");?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Performs a Solidity function call using a low level `call`. A?? ?
? ? ?* plain`call` is an unsafe replacement for a function call: use this?? ?
? ? ?* 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");?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with?? ?
? ? ?* `errorMessage` as a fallback revert reason when `target` reverts.?? ?
? ? ?*?? ?
? ? ?* _Available since v3.1._?? ?
? ? ?*/?? ?
? ? function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {?? ?
? ? ? ? return _functionCallWithValue(target, data, 0, errorMessage);?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],?? ?
? ? ?* but also transferring `value` wei to `target`.?? ?
? ? ?*?? ?
? ? ?* Requirements:?? ?
? ? ?*?? ?
? ? ?* - 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");?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but?? ?
? ? ?* with `errorMessage` as a fallback revert reason when `target` reverts.?? ?
? ? ?*?? ?
? ? ?* _Available since v3.1._?? ?
? ? ?*/?? ?
? ? 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");?? ?
? ? ? ? // 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?? ?
? ? ? ? ? ? ? ? assembly {?? ?
? ? ? ? ? ? ? ? ? ? let returndata_size := mload(returndata)?? ?
? ? ? ? ? ? ? ? ? ? revert(add(32, returndata), returndata_size)?? ?
? ? ? ? ? ? ? ? }?? ?
? ? ? ? ? ? } else {?? ?
? ? ? ? ? ? ? ? revert(errorMessage);?? ?
? ? ? ? ? ? }?? ?
? ? ? ? }?? ?
? ? }?? ?
}?? ?
/**?? ?
?* @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;?? ?
? ? address private _previousOwner;?? ?
? ? uint256 private _lockTime;?? ?
? ? 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);?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Returns the address of the current owner.?? ?
? ? ?*/?? ?
? ? function owner() public view returns (address) {?? ?
? ? ? ? return _owner;?? ?
? ? }?? ?
? ? /**?? ?
? ? ?* @dev Throws if called by any account other than the owner.?? ?
? ? ?*/?? ?
? ? modifier onlyOwner() {?? ?
? ? ? ? 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() external virtual onlyOwner {?? ?
? ? ? ? emit OwnershipTransferred(_owner, address(0));?? ?
? ? ? ? _owner = 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) external virtual onlyOwner {?? ?
? ? ? ? require(newOwner != address(0), "Ownable: new owner is the zero address");?? ?
? ? ? ? emit OwnershipTransferred(_owner, newOwner);?? ?
? ? ? ? _owner = newOwner;?? ?
? ? }?? ?
? ? function getUnlockTime() external view returns (uint256) {?? ?
? ? ? ? return _lockTime;?? ?
? ? }?? ?
? ? function getTime() external view returns (uint256) {
? ? ? ? return now;
? ? }
? ? //Locks the contract for owner for the amount of time provided?? ?
? ? function lock(uint256 time) external virtual onlyOwner {?? ?
? ? ? ? _previousOwner = _owner;?? ?
? ? ? ? _owner = address(0);?? ?
? ? ? ? _lockTime = now + time;?? ?
? ? ? ? emit OwnershipTransferred(_owner, address(0));?? ?
? ? }?? ?
? ? ?? ?
? ? //Unlocks the contract for owner when _lockTime is exceeds?? ?
? ? function unlock() external 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;?? ?
? ? }?? ?
}?? ?
// pragma solidity >=0.5.0;?? ?
interface IPancakeswapV2Factory {?? ?
? ? 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;?? ?
}?? ?
// pragma solidity >=0.5.0;?? ?
interface IPancakeswapV2Pair {?? ?
? ? 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;?? ?
}?? ?
// pragma solidity >=0.6.2;?? ?
interface IPancakeswapV2Router01 {?? ?
? ? 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);?? ?
}?? ?
// pragma solidity >=0.6.2;?? ?
interface IPancakeswapV2Router02 is IPancakeswapV2Router01 {?? ?
? ? 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 BraveSoha is Context, IERC20, Ownable {?? ?
? ? using SafeMath for uint256;?? ?
? ? using Address for address;?? ?
? ? mapping (address => uint256) private _rOwned;?? ?
? ? mapping (address => uint256) private _tOwned;?? ?
? ? mapping (address => mapping (address => uint256)) private _allowances;?? ?
? ? mapping (address => bool) private _isExcludedFromFee;?? ?
? ? mapping (address => bool) private _isExcluded;?? ?
? ? ?? ?
? ? mapping(address=>bool) private _isExcludedFromFundFee;?? ?
? ? address[] private _excluded;?? ?
? ??? ?
? ? uint256 private constant MAX = ~uint256(0);?? ?
? ? uint256 private constant _tTotal = 10000000000000 * 10**6;?? ?
? ? uint256 private _rTotal = (MAX - (MAX % _tTotal));?? ?
? ? uint256 private _tFeeTotal;?? ?
? ? string private constant _name = "Floki";?? ?
? ? string private constant _symbol = "Floki";?? ?
? ? uint8 private constant _decimals = 6;?? ?
? ? ?? ?
? ? uint256 public _fundFee = 0;?? ?
? ? uint256 private _previousFundFee = _fundFee;?? ?
? ? ?? ?
? ? address public _fundWallet = _msgSender();?? ?
? ? address public _previousFundWallet = _fundWallet;?? ?
? ? ?? ?
? ? uint256 public _shareFee = 0;?? ?
? ? uint256 private _previousTaxFee = _shareFee;?? ?
? ? ?? ?
? ? uint256 public _liquidityFee = 0;?? ?
? ? uint256 private _previousLiquidityFee = _liquidityFee;?? ?
? ? IPancakeswapV2Router02 public immutable pancakeswapV2Router;?? ?
? ? address public immutable pancakeswapV2Pair;?? ?
? ? address public pancakeswapRouterAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E; ? // it's pointing to Mainnet
? ? ?? ?
? ? bool inSwapAndLiquify;?? ?
? ? bool public swapAndLiquifyEnabled = false;?? ?
? ? ?? ?
? ? uint256 public _maxTxAmount = 10000000000000 * 10**6;?? ?
? ? // Fixed this so ratio is between _tTotal and numTokensSellToAddToLiquidity
? ? // is 1 / 2000 like in OG SAFEMOON.
? ? // This way only 0.025% of total supply is sold at each swapAndLiquify event and not 5% lmao.
? ? uint256 private numTokensSellToAddToLiquidity = 250000000 * 10**9; ?
? ? ?? ?
? ? event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);?? ?
? ? event SwapAndLiquifyEnabledUpdated(bool enabled);?? ?
? ? event SwapAndLiquify(?? ?
? ? ? ? uint256 tokensSwapped,?? ?
? ? ? ? uint256 ethReceived,?? ?
? ? ? ? uint256 tokensIntoLiquidity?? ?
? ? );?? ?
? ? event ExcludeFromReward(address);?? ?
? ? event IncludeInReward(address);?? ?
? ? event ExcludeFromLiquidityFee(address);?? ?
? ? event IncludeInLiquidityFee(address);?? ?
? ? event TaxFeeUpdated(uint256,uint256);?? ?
? ? event LiquidityFeeUpdated(uint256,uint256);?? ?
? ? event FundFee(uint256,uint256);?? ?
? ? event OwnerTaxAccountUpdated(address,address);?? ?
? ? event ExcludedFromFundFee(address);?? ?
? ? event IncludedInFundFee(address);
? ? event newPancakeswapRouterAddress(address);
? ? ?? ?
? ? modifier lockTheSwap {?? ?
? ? ? ? inSwapAndLiquify = true;?? ?
? ? ? ? _;?? ?
? ? ? ? inSwapAndLiquify = false;?? ?
? ? }?? ?
? ? ?? ?
? ? constructor() public {?? ?
? ? ? ? _rOwned[_msgSender()] = _rTotal;?? ?
? ? ? ? ?? ?
? ? ? ? ?? ?
? ? ? ? //Mainnet :0x10ED43C718714eb63d5aA57B78B54704E256024E?? ?
? ? ? ? //Testnet: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1?? ?
? ? ? ? IPancakeswapV2Router02 _pancakeswapV2Router = IPancakeswapV2Router02(pancakeswapRouterAddress);?? ?
? ? ? ? ?// Create a pancakeswap pair for this new token?? ?
? ? ? ? pancakeswapV2Pair = IPancakeswapV2Factory(_pancakeswapV2Router.factory())?? ?
? ? ? ? ? ? .createPair(address(this), _pancakeswapV2Router.WETH());?? ?
? ? ? ? // set the rest of the contract variables?? ?
? ? ? ? pancakeswapV2Router = _pancakeswapV2Router;?? ?
? ? ? ? ?? ?
? ? ? ? //exclude owner and this contract from fee?? ?
? ? ? ? _isExcludedFromFee[owner()] = true;?? ?
? ? ? ? _isExcludedFromFee[address(this)] = true;?? ?
? ? ? ? ?? ?
? ? ? ? //exclude owner and this contract from fee?? ?
? ? ? ? _isExcludedFromFundFee[owner()] = true;?? ?
? ? ? ? _isExcludedFromFundFee[address(this)] = true;?? ?
? ? ? ? ?? ?
? ? ? ? emit Transfer(address(0), _msgSender(), _tTotal);?? ?
? ? }?? ?
? ? function name() external pure returns (string memory) {?? ?
? ? ? ? return _name;?? ?
? ? }?? ?
? ? function symbol() external pure returns (string memory) {?? ?
? ? ? ? return _symbol;?? ?
? ? }?? ?
? ? function decimals() external pure returns (uint8) {?? ?
? ? ? ? return _decimals;?? ?
? ? }?? ?
? ? function totalSupply() external view override returns (uint256) {?? ?
? ? ? ? return _tTotal;?? ?
? ? }?? ?
? ? function balanceOf(address account) public view override returns (uint256) {?? ?
? ? ? ? if (_isExcluded[account]) return _tOwned[account];?? ?
? ? ? ? return tokenFromReflection(_rOwned[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 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;?? ?
? ? }?? ?
? ? function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {?? ?
? ? ? ? _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));?? ?
? ? ? ? return true;?? ?
? ? }?? ?
? ? function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {?? ?
? ? ? ? _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));?? ?
? ? ? ? return true;?? ?
? ? }?? ?
? ? function isExcludedFromReward(address account) external view returns (bool) {?? ?
? ? ? ? return _isExcluded[account];?? ?
? ? }?? ?
? ? function totalFees() external view returns (uint256) {?? ?
? ? ? ? return _tFeeTotal;?? ?
? ? }?? ?
? ? function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external 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 tokenFromReflection(uint256 rAmount) public view returns(uint256) {?? ?
? ? ? ? require(rAmount <= _rTotal, "Amount must be less than total reflections");?? ?
? ? ? ? uint256 currentRate = ?_getRate();?? ?
? ? ? ? return rAmount.div(currentRate);?? ?
? ? }?? ?
? ??? ?
? ? function excludeFromReward(address account) external onlyOwner() {?? ?
? ? ? ? // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Pancakeswap router.');?? ?
? ? ? ? require(!_isExcluded[account], "Account is not excluded");?? ?
? ? ? ? if(_rOwned[account] > 0) {?? ?
? ? ? ? ? ? _tOwned[account] = tokenFromReflection(_rOwned[account]);?? ?
? ? ? ? }?? ?
? ? ? ? _isExcluded[account] = true;?? ?
? ? ? ? _excluded.push(account);?? ?
? ? ? ? ?? ?
? ? ? ? emit ExcludeFromReward(account);?? ?
? ? }?? ?
? ? function includeInReward(address account) external onlyOwner() {?? ?
? ? ? ? require(_isExcluded[account], "Account is not 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;?? ?
? ? ? ? ? ? }?? ?
? ? ? ? }?? ?
? ? ? ? ?? ?
? ? ? ? emit IncludeInReward(account);?? ?
? ? }?? ?
? ? ? ? function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {?? ?
? ? ? ? (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _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); ? ? ? ??? ?
? ? ? ? _takeLiquidity(tLiquidity);?? ?
? ? ? ? _reflectFee(rFee, tFee);?? ?
? ? ? ? emit Transfer(sender, recipient, tTransferAmount);?? ?
? ? }?? ?
? ? ?? ?
? ? function excludeFromLiquidityFee(address account) external onlyOwner {?? ?
? ? ? ? _isExcludedFromFee[account] = true;?? ?
? ? ? ? emit ExcludeFromLiquidityFee(account);?? ?
? ? }?? ?
? ? ?? ?
? ? ?? ?
? ? function includeInLiquidityFee(address account) external onlyOwner {?? ?
? ? ? ? ?require( _isExcludedFromFee[account], "Account is not excluded From liquidityFee");?? ?
? ? ? ? _isExcludedFromFee[account] = false;?? ?
? ? ? ? emit IncludeInLiquidityFee(account);?? ?
? ? }?? ?
? ? ?? ?
? ?function excludedFromFundFee(address account) external onlyOwner {?? ?
? ? ? ? _isExcludedFromFundFee[account] = true;?? ?
? ? ? ? emit ExcludedFromFundFee(account);?? ?
? ? }?? ?
? ? ?? ?
? ? function includeInFundFee(address account) external onlyOwner{?? ?
? ? ? ? ?require( _isExcludedFromFundFee[account], "Account is not excluded From FundFee");?? ?
? ? ? ? _isExcludedFromFundFee[account] = false;?? ?
? ? ? ? emit IncludedInFundFee(account);?? ?
? ? ? ? ?? ?
? ? }?? ?
? ? ?? ?
? ? ?? ?
? ??? ?
? ? function setShareFeePercent(uint256 taxFee) external onlyOwner() {?? ?
? ? ? ? _previousTaxFee = _shareFee;?? ?
? ? ? ? _shareFee = taxFee;?? ?
? ? ? ? emit TaxFeeUpdated(_previousTaxFee,_shareFee);?? ?
? ? }?? ?
? ? ?? ?
? ? function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {?? ?
? ? ? ? _previousLiquidityFee = _liquidityFee;?? ?
? ? ? ? _liquidityFee = liquidityFee;?? ?
? ? ? ? ?? ?
? ? ? ? emit LiquidityFeeUpdated(_previousLiquidityFee,_liquidityFee);?? ?
? ? }?? ?
? ??? ?
? ? function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
? ? ? ? _maxTxAmount = _tTotal.mul(maxTxPercent).div(
? ? ? ? ? ? 10000
? ? ? ? );
? ? }?? ?
? ? ?? ?
? ? function setFundFeePercent(uint256 _fundFeePercent) external onlyOwner() {?? ?
? ? ? ? _previousFundFee = _fundFee;?? ?
? ? ? ? _fundFee = _fundFeePercent;?? ?
? ? ? ? emit FundFee(_previousFundFee,_fundFee);?? ?
? ? }?? ?
? ? ?? ?
? ? ?? ?
? ? function setOwnerTaxAccount(address _account) external onlyOwner() {?? ?
? ? ? ? _previousFundWallet = _fundWallet;?? ?
? ? ? ? _fundWallet = _account;?? ?
? ? ? ? ?? ?
? ? ? ? emit OwnerTaxAccountUpdated(_previousFundWallet,_fundWallet);?? ?
? ? }?? ?
? ? ?? ?
? ? ?? ?
? ? ?? ?
? ? function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {?? ?
? ? ? ? swapAndLiquifyEnabled = _enabled;?? ?
? ? ? ? emit SwapAndLiquifyEnabledUpdated(_enabled);?? ?
? ? }?? ?
? ? ?? ?
? ? ?//to receive ETH from pancakeswapV2Router when swapping?? ?
? ? receive() external payable {}?? ?
? ? ?? ?
? ? ?? ?
? ? ?? ?
?? ? ? ? function withdraw() external onlyOwner {?? ?
? ? ? ? ?msg.sender.transfer(address(this).balance);?? ?
? ? ?}?? ?
? ? ?? ?
? ? ?? ?
? ? function _reflectFee(uint256 rFee, uint256 tFee) private {?? ?
? ? ? ? _rTotal = _rTotal.sub(rFee);?? ?
? ? ? ? _tFeeTotal = _tFeeTotal.add(tFee);?? ?
? ? }?? ?
? ? function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {?? ?
? ? ? ? (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);?? ?
? ? ? ? (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());?? ?
? ? ? ? return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);?? ?
? ? }?? ?
? ? function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {?? ?
? ? ? ? uint256 tFee = calculateTaxFee(tAmount);?? ?
? ? ? ? uint256 tLiquidity = calculateLiquidityFee(tAmount);?? ?
? ? ? ? uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);?? ?
? ? ? ? return (tTransferAmount, tFee, tLiquidity);?? ?
? ? }?? ?
? ? function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {?? ?
? ? ? ? uint256 rAmount = tAmount.mul(currentRate);?? ?
? ? ? ? uint256 rFee = tFee.mul(currentRate);?? ?
? ? ? ? uint256 rLiquidity = tLiquidity.mul(currentRate);?? ?
? ? ? ? uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);?? ?
? ? ? ? return (rAmount, rTransferAmount, rFee);?? ?
? ? }?? ?
? ? 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 _takeLiquidity(uint256 tLiquidity) private {?? ?
? ? ? ? uint256 currentRate = ?_getRate();?? ?
? ? ? ? uint256 rLiquidity = tLiquidity.mul(currentRate);?? ?
? ? ? ? _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);?? ?
? ? ? ? if(_isExcluded[address(this)])?? ?
? ? ? ? ? ? _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);?? ?
? ? }?? ?
? ? ?? ?
? ? function calculateTaxFee(uint256 _amount) private view returns (uint256) {?? ?
? ? ? ? return _amount.mul(_shareFee).div(?? ?
? ? ? ? ? ? 10**2?? ?
? ? ? ? );?? ?
? ? }?? ?
? ? function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {?? ?
? ? ? ? return _amount.mul(_liquidityFee).div(?? ?
? ? ? ? ? ? 10**2?? ?
? ? ? ? );?? ?
? ? }?? ?
? ? ?? ?
? ? function removeAllFee() private {?? ?
? ? ? ? if(_shareFee == 0 && _liquidityFee == 0) return;?? ?
? ? ? ? ?? ?
? ? ? ? _previousTaxFee = _shareFee;?? ?
? ? ? ? _previousLiquidityFee = _liquidityFee;?? ?
? ? ? ? ?? ?
? ? ? ? _shareFee = 0;?? ?
? ? ? ? _liquidityFee = 0;?? ?
? ? }?? ?
? ? ?? ?
? ? function restoreAllFee() private {?? ?
? ? ? ? _shareFee = _previousTaxFee;?? ?
? ? ? ? _liquidityFee = _previousLiquidityFee;?? ?
? ? }?? ?
? ? ?? ?
? ? function isExcludedFromFee(address account) external view returns(bool) {?? ?
? ? ? ? return _isExcludedFromFee[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 from,?? ?
? ? ? ? address to,?? ?
? ? ? ? uint256 amount?? ?
? ? ) private {?? ?
? ? ? ? require(from != address(0), "ERC20: transfer from the zero address");?? ?
? ? ? ? require(to != address(0), "ERC20: transfer to the zero address");?? ?
? ? ? ? require(amount > 0, "Transfer amount must be greater than zero");?? ?
? ? ? ? if(from != owner() && to != owner())?? ?
? ? ? ? ? ? require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");?? ?
? ? ? ? ? ? ?? ?
? ? ? ? ? ? ?? ?
? ? ? ? ? ? ?? ?
? ? ? ? ? ? ?? ?
? ? ? ? ?? ?
? ? ? ? ?? ?
? ? ? ? // is the token balance of this contract address over the min number of?? ?
? ? ? ? // tokens that we need to initiate a swap + liquidity lock??? ?
? ? ? ? // also, don't get caught in a circular liquidity event.?? ?
? ? ? ? // also, don't swap & liquify if sender is pancakeswap pair.?? ?
? ? ? ? uint256 contractTokenBalance = balanceOf(address(this));?? ?
? ? ? ? ?? ?
? ? ? ? if(contractTokenBalance >= _maxTxAmount)?? ?
? ? ? ? {?? ?
? ? ? ? ? ? contractTokenBalance = _maxTxAmount;?? ?
? ? ? ? }?? ?
? ? ? ? ?? ?
? ? ? ? bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;?? ?
? ? ? ? if (?? ?
? ? ? ? ? ? overMinTokenBalance &&?? ?
? ? ? ? ? ? !inSwapAndLiquify &&?? ?
? ? ? ? ? ? from != pancakeswapV2Pair &&?? ?
? ? ? ? ? ? swapAndLiquifyEnabled?? ?
? ? ? ? ) {?? ?
? ? ? ? ? ? contractTokenBalance = numTokensSellToAddToLiquidity;?? ?
? ? ? ? ? ? //add liquidity?? ?
? ? ? ? ? ? swapAndLiquify(contractTokenBalance);?? ?
? ? ? ? }?? ?
? ? ? ? ?? ?
? ? ? ? //indicates if fee should be deducted from transfer?? ?
? ? ? ? bool takeFee = true;?? ?
? ? ? ? ?? ?
? ? ? ? //if any account belongs to _isExcludedFromFee account then remove the fee?? ?
? ? ? ? if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){?? ?
? ? ? ? ? ? takeFee = false;?? ?
? ? ? ? }?? ?
? ? ? ? ?? ?
? ? ? ? ?? ?
? ? ? ? if(_isExcludedFromFundFee[from]){?? ?
? ? ? ? ? _tokenTransfer(from,to,amount,takeFee); ??? ?
? ? ? ? ? ? ? ? ?? ?
? ? ? ? }else {?? ?
? ? ? ? ? ? ?? ?
? ? ? ? ?//send 1% to owner ?? ?
? ? ? ? uint256 _amountSentToOwner = amount.mul(_fundFee).div(10**2);?? ?
? ? ? ? uint256 _remainingAmount = ?amount.sub(_amountSentToOwner);?? ?
? ? ? ? ? ? ?? ?
? ? ? ? _tokenTransfer(from,_fundWallet,_amountSentToOwner,takeFee);?? ?
? ? ? ? //transfer amount, it will take tax, burn, liquidity fee?? ?
? ? ? ? _tokenTransfer(from,to,_remainingAmount,takeFee);?? ?
? ? ? ? ? ? ?? ?
? ? ? ? }?? ?
? ? ? ? ?? ?
? ? ? ? ?? ?
? ? ? ? ?? ?
? ? }?? ?
? ? function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {?? ?
? ? ? ? // split the contract balance into halves?? ?
? ? ? ? uint256 half = contractTokenBalance.div(2);?? ?
? ? ? ? uint256 otherHalf = contractTokenBalance.sub(half);?? ?
? ? ? ? // capture the contract's current ETH balance.?? ?
? ? ? ? // this is so that we can capture exactly the amount of ETH that the?? ?
? ? ? ? // swap creates, and not make the liquidity event include any ETH that?? ?
? ? ? ? // has been manually sent to the contract?? ?
? ? ? ? uint256 initialBalance = address(this).balance;?? ?
? ? ? ? // swap tokens for ETH?? ?
? ? ? ? swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered?? ?
? ? ? ? // how much ETH did we just swap into??? ?
? ? ? ? uint256 newBalance = address(this).balance.sub(initialBalance);?? ?
? ? ? ? // add liquidity to pancakeswap?? ?
? ? ? ? addLiquidity(otherHalf, newBalance);?? ?
? ? ? ? ?? ?
? ? ? ? emit SwapAndLiquify(half, newBalance, otherHalf);?? ?
? ? }?? ?
? ? function swapTokensForEth(uint256 tokenAmount) private {?? ?
? ? ? ? // generate the pancakeswap pair path of token -> weth?? ?
? ? ? ? address[] memory path = new address[](2);?? ?
? ? ? ? path[0] = address(this);?? ?
? ? ? ? path[1] = pancakeswapV2Router.WETH();?? ?
? ? ? ? _approve(address(this), address(pancakeswapV2Router), tokenAmount);?? ?
? ? ? ? // make the swap?? ?
? ? ? ? pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(?? ?
? ? ? ? ? ? tokenAmount,?? ?
? ? ? ? ? ? 0, // accept any amount of ETH?? ?
? ? ? ? ? ? path,?? ?
? ? ? ? ? ? address(this),?? ?
? ? ? ? ? ? block.timestamp?? ?
? ? ? ? );?? ?
? ? }?? ?
? ? function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {?? ?
? ? ? ? // approve token transfer to cover all possible scenarios?? ?
? ? ? ? _approve(address(this), address(pancakeswapV2Router), tokenAmount);?? ?
? ? ? ? // add the liquidity?? ?
? ? ? ? pancakeswapV2Router.addLiquidityETH{value: ethAmount}(?? ?
? ? ? ? ? ? address(this),?? ?
? ? ? ? ? ? tokenAmount,?? ?
? ? ? ? ? ? 0, // slippage is unavoidable?? ?
? ? ? ? ? ? 0, // slippage is unavoidable?? ?
? ? ? ? ? ? owner(),?? ?
? ? ? ? ? ? block.timestamp?? ?
? ? ? ? );?? ?
? ? }?? ?
? ? //this method is responsible for taking all fee, if takeFee is true?? ?
? ? function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {?? ?
? ? ? ? if(!takeFee)?? ?
? ? ? ? ? ? removeAllFee();?? ?
? ? ? ? ?? ?
? ? ? ? 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]) {?? ?
? ? ? ? ? ? _transferBothExcluded(sender, recipient, amount);?? ?
? ? ? ? } else {?? ?
? ? ? ? ? ? _transferStandard(sender, recipient, amount);?? ?
? ? ? ? }?? ?
? ? ? ? ?? ?
? ? ? ? if(!takeFee)?? ?
? ? ? ? ? ? restoreAllFee();?? ?
? ? }?? ?
? ? function _transferStandard(address sender, address recipient, uint256 tAmount) private {?? ?
? ? ? ? (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);?? ?
? ? ? ? _rOwned[sender] = _rOwned[sender].sub(rAmount);?? ?
? ? ? ? _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);?? ?
? ? ? ? _takeLiquidity(tLiquidity);?? ?
? ? ? ? _reflectFee(rFee, tFee);?? ?
? ? ? ? emit Transfer(sender, recipient, tTransferAmount);?? ?
? ? }?? ?
? ? function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {?? ?
? ? ? ? (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);?? ?
? ? ? ? _rOwned[sender] = _rOwned[sender].sub(rAmount);?? ?
? ? ? ? _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);?? ?
? ? ? ? _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); ? ? ? ? ? ?? ?
? ? ? ? _takeLiquidity(tLiquidity);?? ?
? ? ? ? _reflectFee(rFee, tFee);?? ?
? ? ? ? emit Transfer(sender, recipient, tTransferAmount);?? ?
? ? }?? ?
? ? function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {?? ?
? ? ? ? (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);?? ?
? ? ? ? _tOwned[sender] = _tOwned[sender].sub(tAmount);?? ?
? ? ? ? _rOwned[sender] = _rOwned[sender].sub(rAmount);?? ?
? ? ? ? _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); ? ?? ?
? ? ? ? _takeLiquidity(tLiquidity);?? ?
? ? ? ? _reflectFee(rFee, tFee);?? ?
? ? ? ? emit Transfer(sender, recipient, tTransferAmount);?? ?
? ? }
? ??
? ? function setPancakeSwapRouterAddress(address _newRouterAddress) external onlyOwner {
? ? ? ??
? ? ? ? pancakeswapRouterAddress = _newRouterAddress;
? ? ? ??
? ? ? ? emit newPancakeswapRouterAddress(_newRouterAddress);
? ? ? ??
? ? ? ??
? ? }
? ??
? ? ?? ?
}

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:34:31  更:2021-11-09 19:36:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 18:51:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计