ERC-20
Overview
Max Total Supply
102,991,944.43860880207825 BRRR
Holders
146
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
2.3267618608577 BRRRValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BRRRToken
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract BRRRToken is ERC20 { uint256 private constant INITIAL_SUPPLY = 100_000_000 * (10 ** 18); // 100 million tokens uint256 private constant SPECIAL_RULE_DURATION = 24 hours; uint256 private constant MAX_BALANCE_PERCENT = 5; // 0.5% of total supply uint256 private constant MAX_TX_AMOUNT_PERCENT = 1; // 0.1% of total supply uint256 private _deploymentTimestamp; address private _sBRRRContract; address private _w1; constructor(address wallet) ERC20("BRRR Token", "BRRR") { _deploymentTimestamp = block.timestamp; _w1 = wallet; _mint(wallet, INITIAL_SUPPLY); } modifier onlySBRRR() { require(msg.sender == _sBRRRContract, "Only the sBRRR contract can call this function"); _; } function setSBRRRContract(address sBRRRContract) external { require(_sBRRRContract == address(0), "sBRRR contract address has already been set"); _sBRRRContract = sBRRRContract; } function _transfer(address sender, address recipient, uint256 amount) internal virtual override { if (block.timestamp < _deploymentTimestamp + SPECIAL_RULE_DURATION && sender != _w1 && recipient != _w1) { require( balanceOf(recipient) + amount <= (INITIAL_SUPPLY * MAX_BALANCE_PERCENT) / 1000, "New balance cannot exceed 0.5% of the total supply during the first 24 hours" ); require( amount <= (INITIAL_SUPPLY * MAX_TX_AMOUNT_PERCENT) / 1000, "Transaction amount cannot exceed 0.1% of the total supply during the first 24 hours" ); } super._transfer(sender, recipient, amount); } function mint(address account, uint256 amount) external onlySBRRR { _mint(account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./NonTransferableToken.sol"; import "./BRRRToken.sol"; import "./sBRRRToken.sol"; contract BANKToken is NonTransferableToken { uint256 public constant MINT_COST_BRRR = 200_000 * (10 ** 18); uint256 public constant DAILY_AMOUNT = 50000 * (10 ** 18); uint256 public constant MAX_REWARDS = 395971 * (10 ** 18); BRRRToken private _brrrToken; sBRRRToken private _sBrrrToken; address private _w1; mapping(address => uint256[]) public _userStartTime; mapping(address => uint256) private _claimedRewards; constructor(BRRRToken brrrToken, sBRRRToken sBrrrToken, address w1) NonTransferableToken("BANK Token", "BANK") { _brrrToken = brrrToken; _sBrrrToken = sBrrrToken; _w1 = w1; } function mint() external { _brrrToken.transferFrom(msg.sender, _w1, MINT_COST_BRRR); _mint(msg.sender, 1); _userStartTime[msg.sender].push(block.timestamp); } function getUserStartTimes(address user) public view returns (uint256[] memory) { return _userStartTime[user]; } function CalculateRewards(uint256 userStartTime) public view returns (uint256) { uint256 timePassed = block.timestamp - userStartTime; uint256 daysPassed = timePassed / 1 days; uint256 rewards = 0; uint256 dailyReward = DAILY_AMOUNT; for (uint256 i = 0; i < daysPassed; i++) { rewards += dailyReward; dailyReward = dailyReward * 9 / 10; // Decrease dailyReward by 10% } uint256 remainingSeconds = timePassed % 1 days; uint256 currentDayReward = dailyReward * remainingSeconds / 86400; rewards += currentDayReward; if (rewards > MAX_REWARDS) { rewards = MAX_REWARDS; } return rewards; } function calculateTotalRewards(address user) public view returns (uint256) { uint256[] memory userStartTimes = _userStartTime[user]; uint256 totalRewards = 0; for (uint256 i = 0; i < userStartTimes.length; i++) { totalRewards += CalculateRewards(userStartTimes[i]); } return totalRewards; } function calculateUnclaimedRewards(address user) public view returns (uint256) { uint256 totalRewards = calculateTotalRewards(user); uint256 unclaimedRewards = totalRewards - _claimedRewards[user]; return unclaimedRewards; } function claimRewards() external { uint256 unclaimedRewards = calculateUnclaimedRewards(msg.sender); require(unclaimedRewards > 0, "No rewards to claim"); _claimedRewards[msg.sender] += unclaimedRewards; _sBrrrToken.mint(msg.sender, unclaimedRewards); } } contract CBANKToken is NonTransferableToken { uint256 public constant MINT_COST_BRRR = 1_000_000 * (10 ** 18); uint256 public constant MINT_COST_SBRRR = 1_000_000 * (10 ** 18); uint256 public constant DAILY_AMOUNT = 500_000 * (10 ** 18); uint256 public constant MAX_REWARDS = 7_563_386 * (10 ** 18); BRRRToken private _brrrToken; sBRRRToken private _sBrrrToken; address private _w1; mapping(address => uint256[]) public _userStartTime; mapping(address => uint256) private _claimedRewards; constructor(BRRRToken brrrToken, sBRRRToken sBrrrToken, address w1) NonTransferableToken("BANK Token", "BANK") { _brrrToken = brrrToken; _sBrrrToken = sBrrrToken; _w1 = w1; } function mint() external { _brrrToken.transferFrom(msg.sender, _w1, MINT_COST_BRRR); _sBrrrToken.transferFrom(msg.sender, _w1, MINT_COST_SBRRR); _mint(msg.sender, 1); _userStartTime[msg.sender].push(block.timestamp); } function getUserStartTimes(address user) public view returns (uint256[] memory) { return _userStartTime[user]; } function CalculateRewards(uint256 userStartTime) public view returns (uint256) { uint256 timePassed = block.timestamp - userStartTime; uint256 daysPassed = timePassed / 1 days; uint256 rewards = 0; uint256 dailyReward = DAILY_AMOUNT; for (uint256 i = 0; i < daysPassed; i++) { rewards += dailyReward; dailyReward = dailyReward * 95 / 100; // Decrease dailyReward by 5% } uint256 remainingSeconds = timePassed % 1 days; uint256 currentDayReward = dailyReward * remainingSeconds / 86400; rewards += currentDayReward; if (rewards > MAX_REWARDS) { rewards = MAX_REWARDS; } return rewards; } function calculateTotalRewards(address user) public view returns (uint256) { uint256[] memory userStartTimes = _userStartTime[user]; uint256 totalRewards = 0; for (uint256 i = 0; i < userStartTimes.length; i++) { totalRewards += CalculateRewards(userStartTimes[i]); } return totalRewards; } function calculateUnclaimedRewards(address user) public view returns (uint256) { uint256 totalRewards = calculateTotalRewards(user); uint256 unclaimedRewards = totalRewards - _claimedRewards[user]; return unclaimedRewards; } function claimRewards() external { uint256 unclaimedRewards = calculateUnclaimedRewards(msg.sender); require(unclaimedRewards > 0, "No rewards to claim"); _claimedRewards[msg.sender] += unclaimedRewards; _sBrrrToken.mint(msg.sender, unclaimedRewards); } } contract PRINTERToken is NonTransferableToken { uint256 public constant MINT_COST_BRRR = 10_000_000 * (10 ** 18); uint256 public constant MINT_COST_SBRRR = 10_000_000 * (10 ** 18); uint256 public constant DAILY_AMOUNT = 1_111_111 * (10 ** 18); uint256 public constant MAX_REWARDS = 100_000_000 * (10 ** 18); uint256 public constant MAX_TOKENS_PER_WALLET = 1; BRRRToken private _brrrToken; sBRRRToken private _sBrrrToken; address private _w1; mapping(address => uint256[]) public _userStartTime; mapping(address => uint256) private _claimedRewards; mapping(address => uint256) private _tokensMinted; constructor(BRRRToken brrrToken, sBRRRToken sBrrrToken, address w1) NonTransferableToken("BANK Token", "BANK") { _brrrToken = brrrToken; _sBrrrToken = sBrrrToken; _w1 = w1; } function mint() external { require(_tokensMinted[msg.sender] < MAX_TOKENS_PER_WALLET, "Max tokens per wallet reached"); _brrrToken.transferFrom(msg.sender, _w1, MINT_COST_BRRR); _sBrrrToken.transferFrom(msg.sender, _w1, MINT_COST_SBRRR); _mint(msg.sender, 1); _userStartTime[msg.sender].push(block.timestamp); _tokensMinted[msg.sender] += 1; } function getUserStartTimes(address user) public view returns (uint256[] memory) { return _userStartTime[user]; } function CalculateRewards(uint256 userStartTime) public view returns (uint256) { uint256 timePassed = block.timestamp - userStartTime; uint256 daysPassed = timePassed / 1 days; uint256 rewards = 0; uint256 dailyReward = DAILY_AMOUNT; for (uint256 i = 0; i < daysPassed; i++) { rewards += dailyReward; } uint256 remainingSeconds = timePassed % 1 days; uint256 currentDayReward = dailyReward * remainingSeconds / 86400; rewards += currentDayReward; if (rewards > MAX_REWARDS) { rewards = MAX_REWARDS; } return rewards; } function calculateTotalRewards(address user) public view returns (uint256) { uint256[] memory userStartTimes = _userStartTime[user]; uint256 totalRewards = 0; for (uint256 i = 0; i < userStartTimes.length; i++) { totalRewards += CalculateRewards(userStartTimes[i]); } return totalRewards; } function calculateUnclaimedRewards(address user) public view returns (uint256) { uint256 totalRewards = calculateTotalRewards(user); uint256 unclaimedRewards = totalRewards - _claimedRewards[user]; return unclaimedRewards; } function claimRewards() external { uint256 unclaimedRewards = calculateUnclaimedRewards(msg.sender); require(unclaimedRewards > 0, "No rewards to claim"); _claimedRewards[msg.sender] += unclaimedRewards; _sBrrrToken.mint(msg.sender, unclaimedRewards); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "./BRRRToken.sol"; contract sBRRRToken is ERC20 { uint256 private constant BURN_RATE = 25; // 25% burn rate uint256 private constant CONVERSION_MAX_PERIOD = 24 * 60 * 60; // 24 hours in seconds BRRRToken private _brrrToken; mapping(address => bool) private _minters; address private _bankAddress; address private _cbankAddress; address private _printerAddress; struct Conversion { uint256 amount; uint256 timestamp; } mapping(address => Conversion[]) public conversionRecords; constructor(BRRRToken brrrToken) ERC20("Staked BRRR Token", "sBRRR") { //TEMPORARY PARAM ADDRESS _brrrToken = brrrToken; _minters[msg.sender] = true; // Grant minting permission to the contract deployer } function setTokenAddresses(address bankAddress, address cbankAddress, address printerAddress) external onlyMinter { _bankAddress = bankAddress; _cbankAddress = cbankAddress; _printerAddress = printerAddress; _minters[bankAddress] = true; _minters[cbankAddress] = true; _minters[printerAddress] = true; } modifier onlyMinter() { require(_minters[msg.sender], "Only minters can call this function"); _; } function _transfer(address sender, address recipient, uint256 amount) internal virtual override { uint256 burnAmount = (amount * BURN_RATE) / 100; uint256 transferAmount = amount - burnAmount; super._transfer(sender, recipient, transferAmount); super._burn(sender, burnAmount); } function _eraseExpiredConversions(address account) private { uint256 i = 0; while (i < conversionRecords[account].length) { if (block.timestamp - conversionRecords[account][i].timestamp > CONVERSION_MAX_PERIOD) { // Remove expired conversion record by shifting all elements to the left for (uint256 j = i; j < conversionRecords[account].length - 1; j++) { conversionRecords[account][j] = conversionRecords[account][j + 1]; } conversionRecords[account].pop(); // Remove last element after shifting } else { i++; // Only increment if the current record is not expired } } } function convertToBRRR(uint256 sBRRRAmount) external { require(sBRRRAmount <= getCurrentConversionMax(msg.sender), "Conversion exceeds maximum allowed in 24-hour period"); uint256 brrrAmount = (sBRRRAmount * (100 - BURN_RATE)) / 100; _burn(msg.sender, sBRRRAmount); _brrrToken.mint(msg.sender, brrrAmount); Conversion memory newConversion = Conversion({ amount: sBRRRAmount, timestamp: block.timestamp }); conversionRecords[msg.sender].push(newConversion); _eraseExpiredConversions(msg.sender); // Erase expired conversions for the user } function getConversionMax(address account) public view returns (uint256) { uint256 bankBalance = ERC20(_bankAddress).balanceOf(account); uint256 cbankBalance = ERC20(_cbankAddress).balanceOf(account); uint256 printerBalance = ERC20(_printerAddress).balanceOf(account); return (50000 * 10**18 * bankBalance) + (500000 * 10**18 * cbankBalance) + (1000000 * 10**18 * printerBalance); } function getCurrentConversionMax(address account) public view returns (uint256) { uint256 conversionMax = getConversionMax(account); uint256 sumOfConversions = 0; for (uint256 i = 0; i < conversionRecords[account].length; i++) { if ((block.timestamp - conversionRecords[account][i].timestamp) <= CONVERSION_MAX_PERIOD) { sumOfConversions += conversionRecords[account][i].amount; } } if (sumOfConversions >= conversionMax) { return 0; } else { return conversionMax - sumOfConversions; } } function mint(address account, uint256 amount) external onlyMinter { _mint(account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; contract NonTransferableToken is ERC20 { constructor(string memory name, string memory symbol) ERC20(name, symbol) {} function transfer(address, uint256) public pure override returns (bool) { revert("NonTransferableToken: transfer not allowed"); } function transferFrom(address, address, uint256) public pure override returns (bool) { revert("NonTransferableToken: transferFrom not allowed"); } function approve(address, uint256) public pure override returns (bool) { revert("NonTransferableToken: approve not allowed"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} 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 {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * 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 {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 Returns the amount of tokens in existence. */ 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sBRRRContract","type":"address"}],"name":"setSBRRRContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200228a3803806200228a833981810160405281019062000037919062000316565b6040518060400160405280600a81526020017f4252525220546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42525252000000000000000000000000000000000000000000000000000000008152508160039081620000b49190620005c2565b508060049081620000c69190620005c2565b5050504260058190555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012e816a52b7d2dcc80cd2e40000006200013560201b60201c565b50620007c4565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019e906200070a565b60405180910390fd5b620001bb60008383620002a260201b60201c565b8060026000828254620001cf91906200075b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620002829190620007a7565b60405180910390a36200029e60008383620002a760201b60201c565b5050565b505050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002de82620002b1565b9050919050565b620002f081620002d1565b8114620002fc57600080fd5b50565b6000815190506200031081620002e5565b92915050565b6000602082840312156200032f576200032e620002ac565b5b60006200033f84828501620002ff565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003ca57607f821691505b602082108103620003e057620003df62000382565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200044a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200040b565b6200045686836200040b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004a36200049d62000497846200046e565b62000478565b6200046e565b9050919050565b6000819050919050565b620004bf8362000482565b620004d7620004ce82620004aa565b84845462000418565b825550505050565b600090565b620004ee620004df565b620004fb818484620004b4565b505050565b5b81811015620005235762000517600082620004e4565b60018101905062000501565b5050565b601f82111562000572576200053c81620003e6565b6200054784620003fb565b8101602085101562000557578190505b6200056f6200056685620003fb565b83018262000500565b50505b505050565b600082821c905092915050565b6000620005976000198460080262000577565b1980831691505092915050565b6000620005b2838362000584565b9150826002028217905092915050565b620005cd8262000348565b67ffffffffffffffff811115620005e957620005e862000353565b5b620005f58254620003b1565b6200060282828562000527565b600060209050601f8311600181146200063a576000841562000625578287015190505b620006318582620005a4565b865550620006a1565b601f1984166200064a86620003e6565b60005b8281101562000674578489015182556001820191506020850194506020810190506200064d565b8683101562000694578489015162000690601f89168262000584565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620006f2601f83620006a9565b9150620006ff82620006ba565b602082019050919050565b600060208201905081810360008301526200072581620006e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000768826200046e565b915062000775836200046e565b925082820190508082111562000790576200078f6200072c565b5b92915050565b620007a1816200046e565b82525050565b6000602082019050620007be600083018462000796565b92915050565b611ab680620007d46000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c57806395d89b411161006657806395d89b4114610226578063a457c2d714610244578063a9059cbb14610274578063dd62ed3e146102a4576100cf565b806340c10f19146101be578063637ef154146101da57806370a08231146101f6576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461012257806323b872dd14610140578063313ce56714610170578063395093511461018e575b600080fd5b6100dc6102d4565b6040516100e99190610ff1565b60405180910390f35b61010c600480360381019061010791906110ac565b610366565b6040516101199190611107565b60405180910390f35b61012a610389565b6040516101379190611131565b60405180910390f35b61015a6004803603810190610155919061114c565b610393565b6040516101679190611107565b60405180910390f35b6101786103c2565b60405161018591906111bb565b60405180910390f35b6101a860048036038101906101a391906110ac565b6103cb565b6040516101b59190611107565b60405180910390f35b6101d860048036038101906101d391906110ac565b610402565b005b6101f460048036038101906101ef91906111d6565b6104a0565b005b610210600480360381019061020b91906111d6565b610575565b60405161021d9190611131565b60405180910390f35b61022e6105bd565b60405161023b9190610ff1565b60405180910390f35b61025e600480360381019061025991906110ac565b61064f565b60405161026b9190611107565b60405180910390f35b61028e600480360381019061028991906110ac565b6106c6565b60405161029b9190611107565b60405180910390f35b6102be60048036038101906102b99190611203565b6106e9565b6040516102cb9190611131565b60405180910390f35b6060600380546102e390611272565b80601f016020809104026020016040519081016040528092919081815260200182805461030f90611272565b801561035c5780601f106103315761010080835404028352916020019161035c565b820191906000526020600020905b81548152906001019060200180831161033f57829003601f168201915b5050505050905090565b600080610371610770565b905061037e818585610778565b600191505092915050565b6000600254905090565b60008061039e610770565b90506103ab858285610941565b6103b68585856109cd565b60019150509392505050565b60006012905090565b6000806103d6610770565b90506103f78185856103e885896106e9565b6103f291906112d2565b610778565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048990611378565b60405180910390fd5b61049c8282610b8b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105289061140a565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546105cc90611272565b80601f01602080910402602001604051908101604052809291908181526020018280546105f890611272565b80156106455780601f1061061a57610100808354040283529160200191610645565b820191906000526020600020905b81548152906001019060200180831161062857829003601f168201915b5050505050905090565b60008061065a610770565b9050600061066882866106e9565b9050838110156106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a49061149c565b60405180910390fd5b6106ba8286868403610778565b60019250505092915050565b6000806106d1610770565b90506106de8185856109cd565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107de9061152e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084d906115c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109349190611131565b60405180910390a3505050565b600061094d84846106e9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109c757818110156109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09061162c565b60405180910390fd5b6109c68484848403610778565b5b50505050565b620151806005546109de91906112d2565b42108015610a3a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610a945750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610b7b576103e860056a52b7d2dcc80cd2e4000000610ab4919061164c565b610abe91906116bd565b81610ac884610575565b610ad291906112d2565b1115610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90611786565b60405180910390fd5b6103e860016a52b7d2dcc80cd2e4000000610b2e919061164c565b610b3891906116bd565b811115610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b719061183e565b60405180910390fd5b5b610b86838383610ce1565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf1906118aa565b60405180910390fd5b610c0660008383610f57565b8060026000828254610c1891906112d2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cc99190611131565b60405180910390a3610cdd60008383610f5c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d479061193c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db6906119ce565b60405180910390fd5b610dca838383610f57565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4790611a60565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f3e9190611131565b60405180910390a3610f51848484610f5c565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f9b578082015181840152602081019050610f80565b60008484015250505050565b6000601f19601f8301169050919050565b6000610fc382610f61565b610fcd8185610f6c565b9350610fdd818560208601610f7d565b610fe681610fa7565b840191505092915050565b6000602082019050818103600083015261100b8184610fb8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061104382611018565b9050919050565b61105381611038565b811461105e57600080fd5b50565b6000813590506110708161104a565b92915050565b6000819050919050565b61108981611076565b811461109457600080fd5b50565b6000813590506110a681611080565b92915050565b600080604083850312156110c3576110c2611013565b5b60006110d185828601611061565b92505060206110e285828601611097565b9150509250929050565b60008115159050919050565b611101816110ec565b82525050565b600060208201905061111c60008301846110f8565b92915050565b61112b81611076565b82525050565b60006020820190506111466000830184611122565b92915050565b60008060006060848603121561116557611164611013565b5b600061117386828701611061565b935050602061118486828701611061565b925050604061119586828701611097565b9150509250925092565b600060ff82169050919050565b6111b58161119f565b82525050565b60006020820190506111d060008301846111ac565b92915050565b6000602082840312156111ec576111eb611013565b5b60006111fa84828501611061565b91505092915050565b6000806040838503121561121a57611219611013565b5b600061122885828601611061565b925050602061123985828601611061565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061128a57607f821691505b60208210810361129d5761129c611243565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006112dd82611076565b91506112e883611076565b9250828201905080821115611300576112ff6112a3565b5b92915050565b7f4f6e6c792074686520734252525220636f6e74726163742063616e2063616c6c60008201527f20746869732066756e6374696f6e000000000000000000000000000000000000602082015250565b6000611362602e83610f6c565b915061136d82611306565b604082019050919050565b6000602082019050818103600083015261139181611355565b9050919050565b7f734252525220636f6e747261637420616464726573732068617320616c72656160008201527f6479206265656e20736574000000000000000000000000000000000000000000602082015250565b60006113f4602b83610f6c565b91506113ff82611398565b604082019050919050565b60006020820190508181036000830152611423816113e7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611486602583610f6c565b91506114918261142a565b604082019050919050565b600060208201905081810360008301526114b581611479565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611518602483610f6c565b9150611523826114bc565b604082019050919050565b600060208201905081810360008301526115478161150b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115aa602283610f6c565b91506115b58261154e565b604082019050919050565b600060208201905081810360008301526115d98161159d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611616601d83610f6c565b9150611621826115e0565b602082019050919050565b6000602082019050818103600083015261164581611609565b9050919050565b600061165782611076565b915061166283611076565b925082820261167081611076565b91508282048414831517611687576116866112a3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006116c882611076565b91506116d383611076565b9250826116e3576116e261168e565b5b828204905092915050565b7f4e65772062616c616e63652063616e6e6f742065786365656420302e3525206f60008201527f662074686520746f74616c20737570706c7920647572696e672074686520666960208201527f72737420323420686f7572730000000000000000000000000000000000000000604082015250565b6000611770604c83610f6c565b915061177b826116ee565b606082019050919050565b6000602082019050818103600083015261179f81611763565b9050919050565b7f5472616e73616374696f6e20616d6f756e742063616e6e6f742065786365656460008201527f20302e3125206f662074686520746f74616c20737570706c7920647572696e6760208201527f2074686520666972737420323420686f75727300000000000000000000000000604082015250565b6000611828605383610f6c565b9150611833826117a6565b606082019050919050565b600060208201905081810360008301526118578161181b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611894601f83610f6c565b915061189f8261185e565b602082019050919050565b600060208201905081810360008301526118c381611887565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611926602583610f6c565b9150611931826118ca565b604082019050919050565b6000602082019050818103600083015261195581611919565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006119b8602383610f6c565b91506119c38261195c565b604082019050919050565b600060208201905081810360008301526119e7816119ab565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611a4a602683610f6c565b9150611a55826119ee565b604082019050919050565b60006020820190508181036000830152611a7981611a3d565b905091905056fea264697066735822122069f210df5c4d80f6484fe49bdf452d428ad1232e88225102b179e55ca8a147b864736f6c63430008120033000000000000000000000000899f2b1f9935e6f220fdb2a2b0d9660dbbd9ed0f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c57806395d89b411161006657806395d89b4114610226578063a457c2d714610244578063a9059cbb14610274578063dd62ed3e146102a4576100cf565b806340c10f19146101be578063637ef154146101da57806370a08231146101f6576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461012257806323b872dd14610140578063313ce56714610170578063395093511461018e575b600080fd5b6100dc6102d4565b6040516100e99190610ff1565b60405180910390f35b61010c600480360381019061010791906110ac565b610366565b6040516101199190611107565b60405180910390f35b61012a610389565b6040516101379190611131565b60405180910390f35b61015a6004803603810190610155919061114c565b610393565b6040516101679190611107565b60405180910390f35b6101786103c2565b60405161018591906111bb565b60405180910390f35b6101a860048036038101906101a391906110ac565b6103cb565b6040516101b59190611107565b60405180910390f35b6101d860048036038101906101d391906110ac565b610402565b005b6101f460048036038101906101ef91906111d6565b6104a0565b005b610210600480360381019061020b91906111d6565b610575565b60405161021d9190611131565b60405180910390f35b61022e6105bd565b60405161023b9190610ff1565b60405180910390f35b61025e600480360381019061025991906110ac565b61064f565b60405161026b9190611107565b60405180910390f35b61028e600480360381019061028991906110ac565b6106c6565b60405161029b9190611107565b60405180910390f35b6102be60048036038101906102b99190611203565b6106e9565b6040516102cb9190611131565b60405180910390f35b6060600380546102e390611272565b80601f016020809104026020016040519081016040528092919081815260200182805461030f90611272565b801561035c5780601f106103315761010080835404028352916020019161035c565b820191906000526020600020905b81548152906001019060200180831161033f57829003601f168201915b5050505050905090565b600080610371610770565b905061037e818585610778565b600191505092915050565b6000600254905090565b60008061039e610770565b90506103ab858285610941565b6103b68585856109cd565b60019150509392505050565b60006012905090565b6000806103d6610770565b90506103f78185856103e885896106e9565b6103f291906112d2565b610778565b600191505092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048990611378565b60405180910390fd5b61049c8282610b8b565b5050565b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105289061140a565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546105cc90611272565b80601f01602080910402602001604051908101604052809291908181526020018280546105f890611272565b80156106455780601f1061061a57610100808354040283529160200191610645565b820191906000526020600020905b81548152906001019060200180831161062857829003601f168201915b5050505050905090565b60008061065a610770565b9050600061066882866106e9565b9050838110156106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a49061149c565b60405180910390fd5b6106ba8286868403610778565b60019250505092915050565b6000806106d1610770565b90506106de8185856109cd565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107de9061152e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084d906115c0565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516109349190611131565b60405180910390a3505050565b600061094d84846106e9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109c757818110156109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b09061162c565b60405180910390fd5b6109c68484848403610778565b5b50505050565b620151806005546109de91906112d2565b42108015610a3a5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610a945750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610b7b576103e860056a52b7d2dcc80cd2e4000000610ab4919061164c565b610abe91906116bd565b81610ac884610575565b610ad291906112d2565b1115610b13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0a90611786565b60405180910390fd5b6103e860016a52b7d2dcc80cd2e4000000610b2e919061164c565b610b3891906116bd565b811115610b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b719061183e565b60405180910390fd5b5b610b86838383610ce1565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf1906118aa565b60405180910390fd5b610c0660008383610f57565b8060026000828254610c1891906112d2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cc99190611131565b60405180910390a3610cdd60008383610f5c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d479061193c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db6906119ce565b60405180910390fd5b610dca838383610f57565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4790611a60565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f3e9190611131565b60405180910390a3610f51848484610f5c565b50505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610f9b578082015181840152602081019050610f80565b60008484015250505050565b6000601f19601f8301169050919050565b6000610fc382610f61565b610fcd8185610f6c565b9350610fdd818560208601610f7d565b610fe681610fa7565b840191505092915050565b6000602082019050818103600083015261100b8184610fb8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061104382611018565b9050919050565b61105381611038565b811461105e57600080fd5b50565b6000813590506110708161104a565b92915050565b6000819050919050565b61108981611076565b811461109457600080fd5b50565b6000813590506110a681611080565b92915050565b600080604083850312156110c3576110c2611013565b5b60006110d185828601611061565b92505060206110e285828601611097565b9150509250929050565b60008115159050919050565b611101816110ec565b82525050565b600060208201905061111c60008301846110f8565b92915050565b61112b81611076565b82525050565b60006020820190506111466000830184611122565b92915050565b60008060006060848603121561116557611164611013565b5b600061117386828701611061565b935050602061118486828701611061565b925050604061119586828701611097565b9150509250925092565b600060ff82169050919050565b6111b58161119f565b82525050565b60006020820190506111d060008301846111ac565b92915050565b6000602082840312156111ec576111eb611013565b5b60006111fa84828501611061565b91505092915050565b6000806040838503121561121a57611219611013565b5b600061122885828601611061565b925050602061123985828601611061565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061128a57607f821691505b60208210810361129d5761129c611243565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006112dd82611076565b91506112e883611076565b9250828201905080821115611300576112ff6112a3565b5b92915050565b7f4f6e6c792074686520734252525220636f6e74726163742063616e2063616c6c60008201527f20746869732066756e6374696f6e000000000000000000000000000000000000602082015250565b6000611362602e83610f6c565b915061136d82611306565b604082019050919050565b6000602082019050818103600083015261139181611355565b9050919050565b7f734252525220636f6e747261637420616464726573732068617320616c72656160008201527f6479206265656e20736574000000000000000000000000000000000000000000602082015250565b60006113f4602b83610f6c565b91506113ff82611398565b604082019050919050565b60006020820190508181036000830152611423816113e7565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611486602583610f6c565b91506114918261142a565b604082019050919050565b600060208201905081810360008301526114b581611479565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611518602483610f6c565b9150611523826114bc565b604082019050919050565b600060208201905081810360008301526115478161150b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006115aa602283610f6c565b91506115b58261154e565b604082019050919050565b600060208201905081810360008301526115d98161159d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611616601d83610f6c565b9150611621826115e0565b602082019050919050565b6000602082019050818103600083015261164581611609565b9050919050565b600061165782611076565b915061166283611076565b925082820261167081611076565b91508282048414831517611687576116866112a3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006116c882611076565b91506116d383611076565b9250826116e3576116e261168e565b5b828204905092915050565b7f4e65772062616c616e63652063616e6e6f742065786365656420302e3525206f60008201527f662074686520746f74616c20737570706c7920647572696e672074686520666960208201527f72737420323420686f7572730000000000000000000000000000000000000000604082015250565b6000611770604c83610f6c565b915061177b826116ee565b606082019050919050565b6000602082019050818103600083015261179f81611763565b9050919050565b7f5472616e73616374696f6e20616d6f756e742063616e6e6f742065786365656460008201527f20302e3125206f662074686520746f74616c20737570706c7920647572696e6760208201527f2074686520666972737420323420686f75727300000000000000000000000000604082015250565b6000611828605383610f6c565b9150611833826117a6565b606082019050919050565b600060208201905081810360008301526118578161181b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611894601f83610f6c565b915061189f8261185e565b602082019050919050565b600060208201905081810360008301526118c381611887565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611926602583610f6c565b9150611931826118ca565b604082019050919050565b6000602082019050818103600083015261195581611919565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006119b8602383610f6c565b91506119c38261195c565b604082019050919050565b600060208201905081810360008301526119e7816119ab565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611a4a602683610f6c565b9150611a55826119ee565b604082019050919050565b60006020820190508181036000830152611a7981611a3d565b905091905056fea264697066735822122069f210df5c4d80f6484fe49bdf452d428ad1232e88225102b179e55ca8a147b864736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000899f2b1f9935e6f220fdb2a2b0d9660dbbd9ed0f
-----Decoded View---------------
Arg [0] : wallet (address): 0x899F2B1f9935e6F220fdB2a2b0D9660DBBD9ed0f
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000899f2b1f9935e6f220fdb2a2b0d9660dbbd9ed0f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.