This contract's source code is verified! Compiler
0.8.18+commit.87f61d96
File 1 of 4: ERC20.sol
pragma solidity >=0.8.0;
abstract contract ERC20 {
event Transfer(address indexed from, address indexed to, uint256 amount);
event Approval(address indexed owner, address indexed spender, uint256 amount);
string public name;
string public symbol;
uint8 public immutable decimals;
uint256 public totalSupply;
mapping(address => uint256) public balanceOf;
mapping(address => mapping(address => uint256)) public allowance;
uint256 internal immutable INITIAL_CHAIN_ID;
bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;
mapping(address => uint256) public nonces;
constructor(
string memory _name,
string memory _symbol,
uint8 _decimals
) {
name = _name;
symbol = _symbol;
decimals = _decimals;
INITIAL_CHAIN_ID = block.chainid;
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
}
function approve(address spender, uint256 amount) public virtual returns (bool) {
allowance[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function transfer(address to, uint256 amount) public virtual returns (bool) {
balanceOf[msg.sender] -= amount;
unchecked {
balanceOf[to] += amount;
}
emit Transfer(msg.sender, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual returns (bool) {
uint256 allowed = allowance[from][msg.sender];
if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount;
balanceOf[from] -= amount;
unchecked {
balanceOf[to] += amount;
}
emit Transfer(from, to, amount);
return true;
}
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public virtual {
require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED");
unchecked {
address recoveredAddress = ecrecover(
keccak256(
abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR(),
keccak256(
abi.encode(
keccak256(
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
),
owner,
spender,
value,
nonces[owner]++,
deadline
)
)
)
),
v,
r,
s
);
require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER");
allowance[recoveredAddress][spender] = value;
}
emit Approval(owner, spender, value);
}
function DOMAIN_SEPARATOR() public view virtual returns (bytes32) {
return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
}
function computeDomainSeparator() internal view virtual returns (bytes32) {
return
keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes(name)),
keccak256("1"),
block.chainid,
address(this)
)
);
}
function _mint(address to, uint256 amount) internal virtual {
totalSupply += amount;
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal virtual {
balanceOf[from] -= amount;
unchecked {
totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
}
File 2 of 4: ERC20UniswapV2InternalSwaps.sol
pragma solidity =0.8.18;
import {ERC20} from "ERC20.sol";
interface IUniswapV2Pair {
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1);
function swap(
uint amount0Out,
uint amount1Out,
address to,
bytes calldata data
) external;
function mint(address to) external;
}
interface IUniswapV2Factory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
}
interface IERC20 {
function transferFrom(address from, address to, uint amount) external;
function balanceOf(address account) external view returns (uint);
function approve(address spender, uint256 amount) external;
}
interface IWETH {
function deposit() external payable;
}
contract ERC20HolderWithApproval {
constructor(address token) {
IERC20(token).approve(msg.sender, type(uint256).max);
}
}
abstract contract ERC20UniswapV2InternalSwaps is ERC20 {
address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address private constant FACTORY =
0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
address private immutable wethReceiver;
address public immutable pair;
error InvalidAddress();
constructor() {
if (address(this) >= WETH) {
revert InvalidAddress();
}
pair = IUniswapV2Factory(FACTORY).createPair(address(this), WETH);
wethReceiver = address(new ERC20HolderWithApproval(WETH));
}
function _swapForWETH(uint amountToken, address to) internal {
uint amountWeth = _getAmountWeth(amountToken);
_transferFromContractBalance(pair, amountToken);
IUniswapV2Pair(pair).swap(0, amountWeth, wethReceiver, new bytes(0));
IERC20(WETH).transferFrom(wethReceiver, to, amountWeth);
}
function _addLiquidity(
uint amountToken,
address to
) internal returns (uint amountWeth) {
amountWeth = _quoteToken(amountToken);
_transferFromContractBalance(pair, amountToken);
IERC20(WETH).transferFrom(address(this), pair, amountWeth);
IUniswapV2Pair(pair).mint(to);
}
function _addInitialLiquidity(
uint amountToken,
uint amountWeth,
address to
) internal {
_transferFromContractBalance(pair, amountToken);
IERC20(WETH).transferFrom(address(this), pair, amountWeth);
IUniswapV2Pair(pair).mint(to);
}
function _addInitialLiquidityEth(
uint amountToken,
uint amountEth,
address to
) internal {
IWETH(WETH).deposit{value: amountEth}();
_addInitialLiquidity(amountToken, amountEth, to);
}
function _sweepWeth(address to) internal returns (uint amountWeth) {
amountWeth = IERC20(WETH).balanceOf(address(this));
IERC20(WETH).transferFrom(address(this), to, amountWeth);
}
function _sweepEth(address to) internal {
_safeTransferETH(to, address(this).balance);
}
function _quoteToken(
uint amountToken
) internal view returns (uint amountEth) {
(uint reserveToken, uint reserveEth) = IUniswapV2Pair(pair)
.getReserves();
amountEth = (amountToken * reserveEth) / reserveToken;
}
function _getAmountWeth(
uint amounToken
) internal view returns (uint amountWeth) {
(uint reserveToken, uint reserveWeth) = IUniswapV2Pair(pair)
.getReserves();
uint amountTokenWithFee = amounToken * 997;
uint numerator = amountTokenWithFee * reserveWeth;
uint denominator = (reserveToken * 1000) + amountTokenWithFee;
amountWeth = numerator / denominator;
}
function _getAmountToken(
uint amounWeth,
uint reserveToken,
uint reserveWeth
) internal pure returns (uint amountToken) {
uint numerator = reserveToken * amounWeth * 1000;
uint denominator = (reserveWeth - amounWeth) * 997;
amountToken = (numerator / denominator) + 1;
}
function _getReserve()
internal
view
returns (uint reserveToken, uint reserveWeth)
{
(reserveToken, reserveWeth) = IUniswapV2Pair(pair).getReserves();
}
function _safeTransferETH(address to, uint256 amount) internal {
bool success;
assembly {
success := call(gas(), to, amount, 0, 0, 0, 0)
}
require(success, "ETH_TRANSFER_FAILED");
}
function _isContract(address _address) internal view returns (bool) {
uint32 size;
assembly {
size := extcodesize(_address)
}
return (size > 0);
}
function _transferFromContractBalance(
address to,
uint256 amount
) internal returns (bool) {
balanceOf[address(this)] -= amount;
unchecked {
balanceOf[to] += amount;
}
emit Transfer(address(this), to, amount);
return true;
}
}
File 3 of 4: Owned.sol
pragma solidity >=0.8.0;
abstract contract Owned {
event OwnershipTransferred(address indexed user, address indexed newOwner);
address public owner;
modifier onlyOwner() virtual {
require(msg.sender == owner, "UNAUTHORIZED");
_;
}
constructor(address _owner) {
owner = _owner;
emit OwnershipTransferred(address(0), _owner);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
owner = newOwner;
emit OwnershipTransferred(msg.sender, newOwner);
}
}
File 4 of 4: SixPackRick.sol
pragma solidity =0.8.18;
import {ERC20UniswapV2InternalSwaps, ERC20} from "./ERC20UniswapV2InternalSwaps.sol";
import {Owned} from "Owned.sol";
contract SixPackRick is
ERC20("6PackRick", "6PR", 18),
ERC20UniswapV2InternalSwaps,
Owned
{
enum PresaleState {
CLOSED,
OPEN_FOR_WHITELIST,
OPEN_FOR_PUBLIC,
COMPLETED
}
uint256 public constant SHARE_PRESALE = 50;
uint256 public constant SHARE_LIQUIDITY = 30;
uint256 public constant SHARE_OTHER = 20;
uint256 public constant PRESALE_HARDCAP = 132 ether;
uint256 public constant PRESALE_ACCOUNT_LIMIT = 0.6 ether;
uint256 public constant SWAP_THRESHOLD_ETH_MIN = 0.005 ether;
uint256 public constant SWAP_THRESHOLD_ETH_MAX = 50 ether;
uint256 public constant TRANSFER_TAX = 2;
uint256 private constant _MAX_SUPPLY = 420_690_000_000_000 ether;
uint256 private constant _SUPPLY_PRESALE =
(_MAX_SUPPLY * SHARE_PRESALE) / 100;
uint256 private constant _SUPPLY_LIQUIDITY =
(_MAX_SUPPLY * SHARE_LIQUIDITY) / 100;
uint256 private constant _SUPPLY_OTHER =
_MAX_SUPPLY - _SUPPLY_PRESALE - _SUPPLY_LIQUIDITY;
address public taxRecipient = 0x9134A698F674D3a0D9154Ce812662526E279A8EF;
mapping(address => bool) public taxFreeAccount;
mapping(address => bool) public isExchangePool;
uint256 public swapThresholdEth = 0.1 ether;
address public taxManager;
mapping(address => bool) public presaleWhitelist;
mapping(address => uint256) public commitment;
mapping(address => uint256) public claimedTokens;
uint256 public totalCommitments;
uint256 public totalClaimed;
PresaleState public presaleState;
bool public limitPerBlockTransfers = true;
uint256 private _tradeableAfterBlock = type(uint256).max;
mapping(bytes32 => bool) private _perBlock;
event CommitedToPresale(address indexed account, uint256 amount);
event PresaleOpened();
event TradingEnabled();
event PublicPresaleOpened();
event PresaleCompleted(uint256 totalCommitments);
event PresaleClaimed(address indexed account, uint256 amount);
event TaxRecipientChanged(address indexed taxRecipient);
event SwapThresholdChanged(uint256 swapThresholdEth);
event TaxFreeStateChanged(address indexed account, bool indexed taxFree);
event ExchangePoolStateChanged(
address indexed account,
bool indexed isExchangePool
);
event TaxManagerChanged(address indexed taxManager);
event LimitPerBlockTransfersChangeed(bool indexed limitPerBlockTransfers);
event SwappedTokensAndAddedLiquidity(
uint256 tokensSwapped,
uint256 tokensAddedToLiquidity,
uint256 wethAddedToLiquidity,
uint256 wethCollected
);
error TradingNotOpenYet();
error MaxAccountLimitExceeded();
error HardcapExceeded();
error NotWhitelistedForPresale();
error PresaleClosed();
error PresaleNotCompleted();
error AlreadyClaimed();
error NothingCommitted();
error Unauthorized();
error InvalidSwapThreshold();
error NoContract();
error TradeAlreadyOpend();
error InvalidBlockDelay();
error InvalidParameters();
error InvalidState();
error NoSameBlockBuySell();
error ZeroTransfer();
error NoCommittments();
error TransferToZeroAddress();
modifier onlyTaxManager() {
if (msg.sender != taxManager) {
revert Unauthorized();
}
_;
}
constructor() Owned(msg.sender) {
taxManager = msg.sender;
emit TaxManagerChanged(msg.sender);
taxFreeAccount[msg.sender] = true;
emit TaxFreeStateChanged(msg.sender, true);
taxFreeAccount[taxRecipient] = true;
emit TaxFreeStateChanged(taxRecipient, true);
isExchangePool[pair] = true;
emit ExchangePoolStateChanged(pair, true);
_mint(address(this), _SUPPLY_PRESALE + _SUPPLY_LIQUIDITY);
_mint(msg.sender, _SUPPLY_OTHER);
}
receive() external payable {
commitToPresale();
}
function transfer(
address to,
uint256 amount
) public virtual override returns (bool) {
if (amount == 0) {
revert ZeroTransfer();
}
if (to == address(0)) {
revert TransferToZeroAddress();
}
if (!taxFreeAccount[msg.sender] && !taxFreeAccount[to]) {
if (block.number <= _tradeableAfterBlock) {
revert TradingNotOpenYet();
}
if (limitPerBlockTransfers) {
_enforceTransferLimit(msg.sender, to);
}
uint256 fee = (amount * TRANSFER_TAX) / 100;
super.transfer(address(this), fee);
unchecked {
amount -= fee;
}
if (isExchangePool[to]) {
_swapTokensAndAddLiquidity(swapThresholdToken());
}
}
return super.transfer(to, amount);
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
if (amount == 0) {
revert ZeroTransfer();
}
if (to == address(0)) {
revert TransferToZeroAddress();
}
if (
!taxFreeAccount[from] &&
!taxFreeAccount[to] &&
!taxFreeAccount[msg.sender]
) {
if (block.number <= _tradeableAfterBlock) {
revert TradingNotOpenYet();
}
if (limitPerBlockTransfers) {
_enforceTransferLimit(from, to);
}
uint256 fee = (amount * TRANSFER_TAX) / 100;
super.transferFrom(from, address(this), fee);
unchecked {
amount -= fee;
}
if (isExchangePool[to]) {
_swapTokensAndAddLiquidity(swapThresholdToken());
}
}
return super.transferFrom(from, to, amount);
}
function setTaxFreeAccount(
address account,
bool taxFree
) external onlyTaxManager {
if (taxFreeAccount[account] == taxFree) {
revert InvalidParameters();
}
taxFreeAccount[account] = taxFree;
emit TaxFreeStateChanged(account, taxFree);
}
function setExchangePool(
address account,
bool exchangePool
) external onlyTaxManager {
if (isExchangePool[account] == exchangePool) {
revert InvalidParameters();
}
isExchangePool[account] = exchangePool;
emit ExchangePoolStateChanged(account, exchangePool);
}
function transferTaxManager(address newTaxManager) external onlyTaxManager {
if (newTaxManager == taxManager) {
revert InvalidParameters();
}
taxManager = newTaxManager;
emit TaxManagerChanged(newTaxManager);
}
function setSwapThresholdEth(
uint256 newSwapThresholdEth
) external onlyTaxManager {
if (
newSwapThresholdEth < SWAP_THRESHOLD_ETH_MIN ||
newSwapThresholdEth > SWAP_THRESHOLD_ETH_MAX ||
newSwapThresholdEth == swapThresholdEth
) {
revert InvalidSwapThreshold();
}
swapThresholdEth = newSwapThresholdEth;
emit SwapThresholdChanged(newSwapThresholdEth);
}
function setLimitPerBlockTransfers(
bool newLimitPerBlockTransfers
) external onlyTaxManager {
if (newLimitPerBlockTransfers == limitPerBlockTransfers) {
revert InvalidParameters();
}
limitPerBlockTransfers = newLimitPerBlockTransfers;
emit LimitPerBlockTransfersChangeed(newLimitPerBlockTransfers);
}
function setTaxRecipient(address newTaxRecipient) external onlyTaxManager {
if (newTaxRecipient == address(0) || taxRecipient == newTaxRecipient) {
revert InvalidParameters();
}
taxRecipient = newTaxRecipient;
emit TaxRecipientChanged(newTaxRecipient);
}
function whitelistForPresale(
address[] calldata accounts
) external onlyOwner {
for (uint256 i = 0; i < accounts.length; ++i) {
presaleWhitelist[accounts[i]] = true;
}
}
function openPresale() external onlyOwner {
if (presaleState != PresaleState.CLOSED) {
revert InvalidState();
}
presaleState = PresaleState.OPEN_FOR_WHITELIST;
emit PresaleOpened();
}
function openPublicPresale() external onlyOwner {
if (presaleState != PresaleState.OPEN_FOR_WHITELIST) {
revert InvalidState();
}
presaleState = PresaleState.OPEN_FOR_PUBLIC;
emit PublicPresaleOpened();
}
function completePresale() external onlyOwner {
if (presaleState != PresaleState.OPEN_FOR_PUBLIC) {
revert InvalidState();
}
if (totalCommitments == 0) {
revert NoCommittments();
}
presaleState = PresaleState.COMPLETED;
uint256 amountEthForLiquidity = (totalCommitments * _SUPPLY_LIQUIDITY) /
_SUPPLY_PRESALE;
_addInitialLiquidityEth(
_SUPPLY_LIQUIDITY,
amountEthForLiquidity,
msg.sender
);
_sweepEth(msg.sender);
emit PresaleCompleted(totalCommitments);
}
function enableTrading(uint256 blocksDelay) external onlyOwner {
if (_tradeableAfterBlock != type(uint256).max) {
revert TradeAlreadyOpend();
}
if (blocksDelay == 0 || blocksDelay > 5) {
revert InvalidBlockDelay();
}
if (presaleState != PresaleState.COMPLETED) {
revert PresaleNotCompleted();
}
_tradeableAfterBlock = block.number + blocksDelay;
emit TradingEnabled();
transferOwnership(address(0));
}
function claimPresale() external {
address account = msg.sender;
if (_isContract(account)) {
revert NoContract();
}
if (presaleState != PresaleState.COMPLETED) {
revert PresaleNotCompleted();
}
if (commitment[account] == 0) {
revert NothingCommitted();
}
if (claimedTokens[account] != 0) {
revert AlreadyClaimed();
}
uint256 amountTokens = (_SUPPLY_PRESALE * commitment[account]) /
totalCommitments;
claimedTokens[account] = amountTokens;
totalClaimed += amountTokens;
_transferFromContractBalance(account, amountTokens);
emit PresaleClaimed(account, amountTokens);
}
function unclaimedSupply() external view returns (uint256) {
return _SUPPLY_PRESALE - totalClaimed;
}
function isTradeOpen() external view returns (bool) {
return block.number > _tradeableAfterBlock;
}
function commitToPresale() public payable {
address account = msg.sender;
if (_isContract(account)) {
revert NoContract();
}
if (
presaleState == PresaleState.OPEN_FOR_WHITELIST &&
!presaleWhitelist[account]
) {
revert NotWhitelistedForPresale();
}
if (
presaleState != PresaleState.OPEN_FOR_WHITELIST &&
presaleState != PresaleState.OPEN_FOR_PUBLIC
) {
revert PresaleClosed();
}
commitment[account] += msg.value;
totalCommitments += msg.value;
if (totalCommitments > PRESALE_HARDCAP) {
revert HardcapExceeded();
}
if (commitment[account] > PRESALE_ACCOUNT_LIMIT) {
revert MaxAccountLimitExceeded();
}
emit CommitedToPresale(account, msg.value);
}
function swapThresholdToken() public view returns (uint256) {
(uint reserveToken, uint reserveWeth) = _getReserve();
uint256 maxSwapEth = (reserveWeth * 5) / 100;
return
_getAmountToken(
swapThresholdEth > maxSwapEth ? maxSwapEth : swapThresholdEth,
reserveToken,
reserveWeth
);
}
function _swapTokensAndAddLiquidity(uint256 amountToken) internal {
if (
balanceOf[address(this)] + totalClaimed <
amountToken + _SUPPLY_PRESALE
) {
return;
}
uint256 amountToSell = (amountToken * 3) / 4;
uint256 amountToAddToLiquidity = amountToken - amountToSell;
_swapForWETH(amountToSell, address(this));
uint256 amountWethAddedToLiquidity = _addLiquidity(
amountToAddToLiquidity,
address(0xdead)
);
uint256 amountWethCollected = _sweepWeth(taxRecipient);
emit SwappedTokensAndAddedLiquidity(
amountToSell,
amountToAddToLiquidity,
amountWethAddedToLiquidity,
amountWethCollected
);
}
function _enforceTransferLimit(address from, address to) internal {
bool toPool = isExchangePool[to];
bool fromPool = isExchangePool[from];
if (fromPool && !toPool) {
bytes32 key = keccak256(abi.encodePacked(block.number, to));
if (_perBlock[key]) {
revert NoSameBlockBuySell();
}
_perBlock[key] = true;
} else if (!fromPool && toPool) {
bytes32 key = keccak256(abi.encodePacked(block.number, from));
if (_perBlock[key]) {
revert NoSameBlockBuySell();
}
_perBlock[key] = true;
}
}
}
{
"compilationTarget": {
"SixPackRick.sol": "SixPackRick"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 2000
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"HardcapExceeded","type":"error"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidBlockDelay","type":"error"},{"inputs":[],"name":"InvalidParameters","type":"error"},{"inputs":[],"name":"InvalidState","type":"error"},{"inputs":[],"name":"InvalidSwapThreshold","type":"error"},{"inputs":[],"name":"MaxAccountLimitExceeded","type":"error"},{"inputs":[],"name":"NoCommittments","type":"error"},{"inputs":[],"name":"NoContract","type":"error"},{"inputs":[],"name":"NoSameBlockBuySell","type":"error"},{"inputs":[],"name":"NotWhitelistedForPresale","type":"error"},{"inputs":[],"name":"NothingCommitted","type":"error"},{"inputs":[],"name":"PresaleClosed","type":"error"},{"inputs":[],"name":"PresaleNotCompleted","type":"error"},{"inputs":[],"name":"TradeAlreadyOpend","type":"error"},{"inputs":[],"name":"TradingNotOpenYet","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"ZeroTransfer","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"CommitedToPresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExchangePool","type":"bool"}],"name":"ExchangePoolStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"limitPerBlockTransfers","type":"bool"}],"name":"LimitPerBlockTransfersChangeed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PresaleClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalCommitments","type":"uint256"}],"name":"PresaleCompleted","type":"event"},{"anonymous":false,"inputs":[],"name":"PresaleOpened","type":"event"},{"anonymous":false,"inputs":[],"name":"PublicPresaleOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapThresholdEth","type":"uint256"}],"name":"SwapThresholdChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensAddedToLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethAddedToLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethCollected","type":"uint256"}],"name":"SwappedTokensAndAddedLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"taxFree","type":"bool"}],"name":"TaxFreeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"taxManager","type":"address"}],"name":"TaxManagerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"taxRecipient","type":"address"}],"name":"TaxRecipientChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_ACCOUNT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_HARDCAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHARE_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHARE_OTHER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHARE_PRESALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_THRESHOLD_ETH_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_THRESHOLD_ETH_MIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TRANSFER_TAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"commitToPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"commitment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"completePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksDelay","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExchangePool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradeOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitPerBlockTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openPublicPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presaleState","outputs":[{"internalType":"enum SixPackRick.PresaleState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exchangePool","type":"bool"}],"name":"setExchangePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newLimitPerBlockTransfers","type":"bool"}],"name":"setLimitPerBlockTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapThresholdEth","type":"uint256"}],"name":"setSwapThresholdEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"taxFree","type":"bool"}],"name":"setTaxFreeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTaxRecipient","type":"address"}],"name":"setTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThresholdEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThresholdToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxFreeAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCommitments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTaxManager","type":"address"}],"name":"transferTaxManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"whitelistForPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]