Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000 ERC837
Holders
206
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
4.566759043 ERC837Value
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
ERC837
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT /* ERC-837 is a new standard enabling users to place bets directly within ERC-20 token smart contracts, adding a fresh layer to decentralized betting. Try out the betting system through our DApp or interact directly with the smart contract! Website: https://837.finance/ Github: https://github.com/ERC837/ERC-837 Medium: https://medium.com/@837finance/erc-837-revolutionizing-decentralized-betting-1eae2708d8e6 Telegram: https://t.me/ERC837 X: https://x.com/ERC_837 */ pragma solidity 0.8.27; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } } interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } contract ERC837 is Context, IERC20, Ownable { using Counters for Counters.Counter; using SafeMath for uint256; // ======================================================================== [ STORAGE ] ======================================================================== // // The struct handling the bets. struct Bet { address initializer; // @notice The address that initializes the bet. string title; // @notice The title of the bet. uint256 deadlineBlock; // @notice The block that closes the bet. string[] options; // @notice The available options to bet on. address[] walletsBets; // @notice This array keeps track of all the wallets that bet. mapping(address => uint256) chosenBet; // @notice This mapping keeps track of the option the wallet bet on. mapping(address => uint256) balanceBet; // @notice This mapping keeps track of the bets balance placed by every wallet. uint256 balance; // @notice The balance stored in the bet. bool closed; // @notice If the bet was closed by the initializer. } Counters.Counter public atBet; // @notice Counter that keeps track of the last bet. mapping(uint256 => Bet) public allBets; // @notice Mapping that stores all the bets. uint256 public MIN_DEADLINE_DURATION = 300; // @notice The minimum deadline value for the bets. uint256 public MAX_BET_OPTIONS = 3; // @notice The maximum amount of options available per bet. uint256 public CLOSING_FEE = 5; // @notice The fee kept by the contract in tokens on bet closing. (%) /** * @notice Event emitted when a new bet is created. * @param betId The returned ID of the bet. * @param initializer The address of the initializer. * @param title The title of the bet. * @param options The available options the users can bet on. * @param deadlineBlock The block number at which betting will end. */ event BetCreated(uint256 indexed betId, address initializer, string title, string[] options, uint256 deadlineBlock); /** * @notice Event emitted when a bet is closed. * @param betId The ID of the bet. * @param initializer The address of the initializer that closes the bet. * @param winningOption The option that won the bet. */ event BetClosed(uint256 indexed betId, address initializer, uint256 winningOption); /** * @notice Event emitted when a bet is placed by an user. * @param betId The ID of the bet. * @param wallet The address of the user that places the bet. * @param option The user's betting option. */ event BetPlaced(uint256 indexed betId, address wallet, uint256 option); mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private bots; address payable private _taxWallet; string private constant _name = unicode'ERC837'; string private constant _symbol = unicode'ERC837'; uint256 private _initialBuyTax=17; uint256 private _initialSellTax=19; uint256 private _finalBuyTax=0; uint256 private _finalSellTax=0; uint256 private _reduceBuyTaxAt=25; uint256 private _reduceSellTaxAt=25; uint256 private _preventSwapBefore=36; uint256 private _buyCount=0; uint8 private constant _decimals = 9; uint256 private constant _tTotal = 10000 * 10**_decimals; uint256 public _maxTxAmount = 200 * 10**_decimals; uint256 public _maxWalletSize = 200 * 10**_decimals; uint256 public _taxSwapThreshold= 100 * 10**_decimals; uint256 public _maxTaxSwap= 100 * 10**_decimals; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; uint256 private sellCount = 0; uint256 private lastSellBlock = 0; event MaxTxAmountUpdated(uint _maxTxAmount); modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor () payable { _taxWallet = payable(_msgSender()); _balances[_msgSender()] = _tTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_taxWallet] = true; emit Transfer(address(0), _msgSender(), _tTotal); } // ======================================================================== [ SETTERS ] ======================================================================== // /* @notice This function is used by the administrator to change the minimum deadline duration. @param duration The new minimum deadline duration. */ function setMinDeadlineDuration(uint256 duration) external onlyOwner { MIN_DEADLINE_DURATION = duration; } /* @notice This function is used by the administrator to change the maximum betting options. @param duration The new maximum betting options. */ function setMaxBetOptions(uint256 options) external onlyOwner { MAX_BET_OPTIONS = options; } /* @notice This function is used by the administrator to change the closing fee. @param duration The new closing fee. */ function setClosingFee(uint8 fee) external onlyOwner { require(fee >= 0 && fee <= 10, "ERC837: Invalid fee."); CLOSING_FEE = fee; } // ======================================================================== [ GETTERS ] ======================================================================== // /* @notice This function is used internally to retrieve a bet. @param betId The id of the bet. @return the bet at the specified id. */ function getBet(uint256 betId) private view returns (Bet storage) { Bet storage returnedBet = allBets[betId]; require(returnedBet.initializer != address(0), "ERC837: Bet does not exist."); return returnedBet; } /* @notice This function is used to retrieve the bet's initializer. @param betId The id of the bet. @return the address of the initializer. */ function getBetInitializer(uint256 betId) public view returns (address) { return getBet(betId).initializer; } /* @notice This function is used to retrieve the bet's title. @param betId The id of the bet. @return the title. */ function getBetTitle(uint256 betId) public view returns (string memory) { return getBet(betId).title; } /* @notice This function is used to retrieve the bet's deadline block. @param betId The id of the bet. @return the bet's deadline block. */ function getBetDeadlineBlock(uint256 betId) public view returns (uint256) { return getBet(betId).deadlineBlock; } /* @notice This function is used to retrieve the bet's options. @param betId The id of the bet. @return the bet's options. */ function getBetOptions(uint256 betId) public view returns (string[] memory) { return getBet(betId).options; } /* @notice This function is used to retrieve the bet's betters. @param betId The id of the bet. @return an array with all the betters of a specific bet. */ function getBetters(uint256 betId) public view returns (address[] memory) { return getBet(betId).walletsBets; } /* @notice This function is used to retrieve the bet's options. @param betId The id of the bet. @return the options of a bet. */ function getWalletBetOption(uint256 betId, address wallet) public view returns (uint256) { return getBet(betId).chosenBet[wallet]; } /* @notice This function is used to retrieve the bet's pooled balance. @param betId The id of the bet. @return the pooled tokens in a bet. */ function getBetPooledBalance(uint256 betId) public view returns (uint256) { return getBet(betId).balance; } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } // ======================================================================== [ LOGIC ] ======================================================================== // /* @notice This function allows an user to create a bet. @param _title The title of the bet. @param _options A string array with all the available options to bet on. @param deadline The deadline block of the bet. */ function createBet(string memory _title, string[] memory _options, uint256 deadline) payable external returns(uint256 id) { require(balanceOf(msg.sender) > 0, "ERC837: Only token holders can create bets."); require(deadline >= MIN_DEADLINE_DURATION, "ERC837: Deadline too short."); require(bytes(_title).length <= 50, "ERC837: Title cannot be longer than 50 characters."); require(_options.length >= 2 && _options.length <= MAX_BET_OPTIONS, "ERC837: Invalid amount of options."); id = atBet.current(); uint256 deadlineBlock = block.number + deadline; allBets[id].initializer = msg.sender; allBets[id].title = _title; allBets[id].deadlineBlock = deadlineBlock; allBets[id].options = _options; allBets[id].balance = 0; allBets[id].closed = false; atBet.increment(); emit BetCreated(id, msg.sender, _title, _options, deadlineBlock); } /* @notice This function allows the initializer of the bet to close it and pay the winning wallets. @param betId The id of the bet. @param option The winning option. */ function closeBet(uint256 betId, uint256 option) external { Bet storage returnedBet = getBet(betId); require(returnedBet.initializer == msg.sender, "ERC837: Sender not initializer."); require(returnedBet.deadlineBlock >= block.number, "ERC837: This bet is still locked."); require(!returnedBet.closed, "ERC837: This bet is already closed."); require(option >= 0 && option < returnedBet.options.length, "ERC837: Invalid option."); if(returnedBet.walletsBets.length > 0) { uint256 balOnWinningOption = getBalancePlacedOnOption(betId, option); uint256 availableWinningsAfterFee = returnedBet.balance - ((returnedBet.balance * CLOSING_FEE) / 100); for(uint256 i = 0; i < returnedBet.walletsBets.length; i++) { address wallet = returnedBet.walletsBets[i]; if(returnedBet.chosenBet[wallet] == option) { uint256 walletBetPercentageFromWinning = returnedBet.balanceBet[wallet] * 100 / balOnWinningOption; uint256 walletWinnings = (availableWinningsAfterFee * walletBetPercentageFromWinning) / 100; _transfer(address(this), wallet, walletWinnings); } } } returnedBet.closed = true; emit BetClosed(betId, returnedBet.initializer, option); } /* @notice This function allows the users to place a specific bet. @param betId The id of the bet. @param option The betting option. @param betBalance The amount of tokens to bet. */ function placeBet(uint256 betId, uint256 option, uint256 betBalance) external { require(balanceOf(msg.sender) > 0, "ERC837: Only token holders can place bets."); Bet storage returnedBet = getBet(betId); require(!isBetPlacedByWallet(betId, msg.sender), "ERC837: Only 1 bet allowed per wallet."); require(option >= 0 && option < returnedBet.options.length, "ERC837: Invalid option for bet."); require(betBalance >= 1 * (10 ^ decimals()), "ERC837: Bet balance must be higher than 1 token."); require(balanceOf(msg.sender) >= betBalance, "ERC837: Not enough tokens to bet."); returnedBet.walletsBets.push(msg.sender); returnedBet.chosenBet[msg.sender] = option; returnedBet.balanceBet[msg.sender] = betBalance; returnedBet.balance += betBalance; _transfer(msg.sender, address(this), betBalance); } /* @notice This function is used internally to get the balance placed on a specific option. @param betId The id of the bet. @param option The option to check for. @return the balance bet on the specific option. */ function getBalancePlacedOnOption(uint256 betId, uint256 option) private view returns(uint256 balance) { balance = 0; Bet storage returnedBet = getBet(betId); for(uint256 i = 0; i < returnedBet.walletsBets.length; i++) { address wallet = returnedBet.walletsBets[i]; if(returnedBet.chosenBet[wallet] == option) balance += returnedBet.balanceBet[wallet]; } } /* @notice This function is used internally to check if a wallet placed a bet on a specific id. @param betId The id of the bet. @return true if the wallet placed a bet on the specific id | false if the wallet didn't place a bet on the specific id. */ function isBetPlacedByWallet(uint256 betId, address wallet) private view returns(bool) { Bet storage returnedBet = getBet(betId); for(uint256 i = 0; i < returnedBet.walletsBets.length; i++) { if(returnedBet.walletsBets[i] == wallet) return true; } return false; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer(address from, address to, uint256 amount) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 taxAmount=0; if (from != owner() && to != owner()) { require(!bots[from] && !bots[to]); taxAmount = amount.mul((_buyCount>_reduceBuyTaxAt)?_finalBuyTax:_initialBuyTax).div(100); if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) { require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount."); require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize."); _buyCount++; } if(to == uniswapV2Pair && from!= address(this) ){ taxAmount = amount.mul((_buyCount>_reduceSellTaxAt)?_finalSellTax:_initialSellTax).div(100); } uint256 contractTokenBalance = balanceOf(address(this)); if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _taxSwapThreshold && _buyCount > _preventSwapBefore) { if (block.number > lastSellBlock) { sellCount = 0; } require(sellCount < 4, "Only 4 sells per block!"); swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap))); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(address(this).balance); } sellCount++; lastSellBlock = block.number; } } if(taxAmount>0){ _balances[address(this)]=_balances[address(this)].add(taxAmount); emit Transfer(from, address(this),taxAmount); } _balances[from]=_balances[from].sub(amount); _balances[to]=_balances[to].add(amount.sub(taxAmount)); emit Transfer(from, to, amount.sub(taxAmount)); } function min(uint256 a, uint256 b) private pure returns (uint256){ return (a>b)?b:a; } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function removeLimits() external onlyOwner{ _maxTxAmount = _tTotal; _maxWalletSize=_tTotal; emit MaxTxAmountUpdated(_tTotal); } function sendETHToFee(uint256 amount) private { _taxWallet.transfer(amount); } function addBots(address[] memory bots_) public onlyOwner { for (uint i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function delBots(address[] memory notbot) public onlyOwner { for (uint i = 0; i < notbot.length; i++) { bots[notbot[i]] = false; } } function isBot(address a) public view returns (bool){ return bots[a]; } function openTrading() public onlyOwner() { require(!tradingOpen, "trading is already open"); uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _approve(address(this), msg.sender, type(uint256).max); transfer(address(this), balanceOf(msg.sender).mul(98).div(100)); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH()); _approve(address(this), address(uniswapV2Router), type(uint256).max); uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); swapEnabled = true; tradingOpen = true; } receive() external payable {} function manualSwap() external { require(_msgSender()==_taxWallet); uint256 tokenBalance=balanceOf(address(this)); if(tokenBalance>0){ swapTokensForEth(tokenBalance); } uint256 ethBalance=address(this).balance; if(ethBalance>0){ sendETHToFee(ethBalance); } } function manualsend() external { require(_msgSender()==_taxWallet); uint256 contractETHBalance = address(this).balance; sendETHToFee(contractETHBalance); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "remappings": [] }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"address","name":"initializer","type":"address"},{"indexed":false,"internalType":"uint256","name":"winningOption","type":"uint256"}],"name":"BetClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"address","name":"initializer","type":"address"},{"indexed":false,"internalType":"string","name":"title","type":"string"},{"indexed":false,"internalType":"string[]","name":"options","type":"string[]"},{"indexed":false,"internalType":"uint256","name":"deadlineBlock","type":"uint256"}],"name":"BetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"option","type":"uint256"}],"name":"BetPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[],"name":"CLOSING_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BET_OPTIONS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_DEADLINE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allBets","outputs":[{"internalType":"address","name":"initializer","type":"address"},{"internalType":"string","name":"title","type":"string"},{"internalType":"uint256","name":"deadlineBlock","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bool","name":"closed","type":"bool"}],"stateMutability":"view","type":"function"},{"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":[],"name":"atBet","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"},{"internalType":"uint256","name":"option","type":"uint256"}],"name":"closeBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_title","type":"string"},{"internalType":"string[]","name":"_options","type":"string[]"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"createBet","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetDeadlineBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetInitializer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetOptions","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetPooledBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetTitle","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"getWalletBetOption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"},{"internalType":"uint256","name":"option","type":"uint256"},{"internalType":"uint256","name":"betBalance","type":"uint256"}],"name":"placeBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fee","type":"uint8"}],"name":"setClosingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"options","type":"uint256"}],"name":"setMaxBetOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"setMinDeadlineDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405261012c6003556003600455600580556011600b556013600c555f600d555f600e556019600f55601960105560246011555f6012556009600a61004691906102d6565b6100519060c86102eb565b6013556100606009600a6102d6565b61006b9060c86102eb565b60145561007a6009600a6102d6565b6100859060646102eb565b6015556100946009600a6102d6565b61009f9060646102eb565b6016556018805461ffff60a81b191690555f6019819055601a81905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a80546001600160a01b03191633178155610118906009906102d6565b610124906127106102eb565b335f8181526006602090815260408083209490945581546001600160a01b03908116835260089091528382208054600160ff1991821681179092553084528584208054821683179055600a5490921683529390912080549091169092179091556001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6101bb6009600a6102d6565b6101c7906127106102eb565b60405190815260200160405180910390a3610302565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561022c57808504811115610210576102106101dd565b600184161561021e57908102905b60019390931c9280026101f5565b935093915050565b5f82610242575060016102d0565b8161024e57505f6102d0565b8160018114610264576002811461026e5761028a565b60019150506102d0565b60ff84111561027f5761027f6101dd565b50506001821b6102d0565b5060208310610133831016604e8410600b84101617156102ad575081810a6102d0565b6102b95f1984846101f1565b805f19048211156102cc576102cc6101dd565b0290505b92915050565b5f6102e460ff841683610234565b9392505050565b80820281158282048414176102d0576102d06101dd565b612faf8061030f5f395ff3fe608060405260043610610236575f3560e01c806377e7c65511610129578063bf474bed116100a8578063d38d75ae1161006d578063d38d75ae14610646578063dd62ed3e14610665578063e0ced0e1146106a9578063e71c9697146106d9578063ffba44b8146106f8575f5ffd5b8063bf474bed146105ca578063c2ecf800146105df578063c57b9c0c146105fe578063c9567bf914610613578063d34628cc14610627575f5ffd5b8063919594ed116100ee578063919594ed1461055857806395d89b4114610262578063a8d5742a14610577578063a9059cbb14610596578063bbd4d3e3146105b5575f5ffd5b806377e7c655146104c65780637d1db4a5146104fd5780637e70b758146105125780638da5cb5b146105275780638f9a55c014610543575f5ffd5b806332ceefff116101b557806351bc3c851161017a57806351bc3c85146104575780636fc3eaec1461046b57806370a082311461047f578063715018a61461049e578063751039fc146104b2575f5ffd5b806332ceefff146103a35780633bbac579146103b65780634402ac73146103ed5780634cf816de1461040c5780634d5dacd21461042b575f5ffd5b806318160ddd116101fb57806318160ddd1461032057806323b872dd1461033457806327c8e81c14610353578063313ce5671461036957806331c2d84714610384575f5ffd5b806306997f3f1461024157806306fdde0314610262578063095ea7b3146102a25780630de9d91e146102d15780630faee56f146102fd575f5ffd5b3661023d57005b5f5ffd5b34801561024c575f5ffd5b5061026061025b366004612640565b610717565b005b34801561026d575f5ffd5b5060408051808201909152600681526545524338333760d01b60208201525b604051610299919061268e565b60405180910390f35b3480156102ad575f5ffd5b506102c16102bc3660046126b4565b61079c565b6040519015158152602001610299565b3480156102dc575f5ffd5b506102f06102eb3660046126de565b6107b2565b604051610299919061274f565b348015610308575f5ffd5b5061031260165481565b604051908152602001610299565b34801561032b575f5ffd5b50610312610892565b34801561033f575f5ffd5b506102c161034e366004612761565b6108b0565b34801561035e575f5ffd5b506001546103129081565b348015610374575f5ffd5b5060405160098152602001610299565b34801561038f575f5ffd5b5061026061039e366004612807565b610917565b6103126103b1366004612912565b61099e565b3480156103c1575f5ffd5b506102c16103d03660046129f7565b6001600160a01b03165f9081526009602052604090205460ff1690565b3480156103f8575f5ffd5b5061028c6104073660046126de565b610c11565b348015610417575f5ffd5b506103126104263660046126de565b610cad565b348015610436575f5ffd5b5061044a6104453660046126de565b610cc1565b6040516102999190612a55565b348015610462575f5ffd5b50610260610d2c565b348015610476575f5ffd5b50610260610d76565b34801561048a575f5ffd5b506103126104993660046129f7565b610da2565b3480156104a9575f5ffd5b50610260610dbc565b3480156104bd575f5ffd5b50610260610e2d565b3480156104d1575f5ffd5b506104e56104e03660046126de565b610ed8565b6040516001600160a01b039091168152602001610299565b348015610508575f5ffd5b5061031260135481565b34801561051d575f5ffd5b5061031260045481565b348015610532575f5ffd5b505f546001600160a01b03166104e5565b34801561054e575f5ffd5b5061031260145481565b348015610563575f5ffd5b50610312610572366004612a67565b610ef2565b348015610582575f5ffd5b506102606105913660046126de565b610f20565b3480156105a1575f5ffd5b506102c16105b03660046126b4565b610f4e565b3480156105c0575f5ffd5b5061031260055481565b3480156105d5575f5ffd5b5061031260155481565b3480156105ea575f5ffd5b506103126105f93660046126de565b610f5a565b348015610609575f5ffd5b5061031260035481565b34801561061e575f5ffd5b50610260610f6e565b348015610632575f5ffd5b50610260610641366004612807565b611326565b348015610651575f5ffd5b50610260610660366004612a95565b6113aa565b348015610670575f5ffd5b5061031261067f366004612ab5565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b3480156106b4575f5ffd5b506106c86106c33660046126de565b61167f565b604051610299959493929190612ae1565b3480156106e4575f5ffd5b506102606106f3366004612b23565b611742565b348015610703575f5ffd5b506102606107123660046126de565b6119bc565b5f546001600160a01b031633146107495760405162461bcd60e51b815260040161074090612b4c565b60405180910390fd5b600a8160ff1611156107945760405162461bcd60e51b815260206004820152601460248201527322a9219c199b9d1024b73b30b634b2103332b29760611b6044820152606401610740565b60ff16600555565b5f6107a83384846119ea565b5060015b92915050565b60606107bd82611b0d565b600301805480602002602001604051908101604052809291908181526020015f905b82821015610887578382905f5260205f200180546107fc90612b81565b80601f016020809104026020016040519081016040528092919081815260200182805461082890612b81565b80156108735780601f1061084a57610100808354040283529160200191610873565b820191905f5260205f20905b81548152906001019060200180831161085657829003601f168201915b5050505050815260200190600101906107df565b505050509050919050565b5f61089f6009600a612caa565b6108ab90612710612cb8565b905090565b5f6108bc848484611b71565b61090d843361090885604051806060016040528060288152602001612f52602891396001600160a01b038a165f90815260076020908152604080832033845290915290205491906120fd565b6119ea565b5060019392505050565b5f546001600160a01b031633146109405760405162461bcd60e51b815260040161074090612b4c565b5f5b815181101561099a575f60095f84848151811061096157610961612ccf565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610942565b5050565b5f5f6109a933610da2565b11610a0a5760405162461bcd60e51b815260206004820152602b60248201527f4552433833373a204f6e6c7920746f6b656e20686f6c646572732063616e206360448201526a3932b0ba32903132ba399760a91b6064820152608401610740565b600354821015610a5c5760405162461bcd60e51b815260206004820152601b60248201527f4552433833373a20446561646c696e6520746f6f2073686f72742e00000000006044820152606401610740565b603284511115610ac95760405162461bcd60e51b815260206004820152603260248201527f4552433833373a205469746c652063616e6e6f74206265206c6f6e67657220746044820152713430b7101a981031b430b930b1ba32b9399760711b6064820152608401610740565b6002835110158015610ade5750600454835111155b610b355760405162461bcd60e51b815260206004820152602260248201527f4552433833373a20496e76616c696420616d6f756e74206f66206f7074696f6e604482015261399760f11b6064820152608401610740565b506001545f610b448343612ce3565b5f83815260026020526040902080546001600160a01b03191633178155909150600101610b718682612d42565b505f8281526002602081815260409092209081018390558551610b9c9260039092019187019061258a565b505f8281526002602052604081206007810191909155600801805460ff19169055610bcb600180546001019055565b817f1afe65692c50d05eb6a8afe7d1fd096c9a281bb1f3edf48b89cf39918aeeea4b33878785604051610c019493929190612dfd565b60405180910390a2509392505050565b6060610c1c82611b0d565b6001018054610c2a90612b81565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5690612b81565b8015610ca15780601f10610c7857610100808354040283529160200191610ca1565b820191905f5260205f20905b815481529060010190602001808311610c8457829003601f168201915b50505050509050919050565b5f610cb782611b0d565b6002015492915050565b6060610ccc82611b0d565b600401805480602002602001604051908101604052809291908181526020018280548015610ca157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d035750505050509050919050565b600a546001600160a01b0316336001600160a01b031614610d4b575f5ffd5b5f610d5530610da2565b90508015610d6657610d6681612135565b47801561099a5761099a816122a5565b600a546001600160a01b0316336001600160a01b031614610d95575f5ffd5b47610d9f816122a5565b50565b6001600160a01b03165f9081526006602052604090205490565b5f546001600160a01b03163314610de55760405162461bcd60e51b815260040161074090612b4c565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610e565760405162461bcd60e51b815260040161074090612b4c565b610e626009600a612caa565b610e6e90612710612cb8565b601355610e7d6009600a612caa565b610e8990612710612cb8565b6014557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610eb96009600a612caa565b610ec590612710612cb8565b60405190815260200160405180910390a1565b5f610ee282611b0d565b546001600160a01b031692915050565b5f610efc83611b0d565b6001600160a01b0383165f9081526005919091016020526040902054905092915050565b5f546001600160a01b03163314610f495760405162461bcd60e51b815260040161074090612b4c565b600355565b5f6107a8338484611b71565b5f610f6482611b0d565b6007015492915050565b5f546001600160a01b03163314610f975760405162461bcd60e51b815260040161074090612b4c565b601854600160a01b900460ff1615610ff15760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610740565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905561102330335f196119ea565b611046306105b06064611040606261103a33610da2565b906122dc565b90612361565b5060175f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611097573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110bb9190612e44565b6001600160a01b031663c9c653963060175f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113e9190612e44565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611188573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ac9190612e44565b601880546001600160a01b0319166001600160a01b039283161790556017546111d9913091165f196119ea565b6017546001600160a01b031663f305d71947306111f581610da2565b5f5f6112085f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561126e573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112939190612e5f565b505060185460175460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156112e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130c9190612e8a565b506018805462ff00ff60a01b19166201000160a01b179055565b5f546001600160a01b0316331461134f5760405162461bcd60e51b815260040161074090612b4c565b5f5b815181101561099a57600160095f84848151811061137157611371612ccf565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611351565b5f6113b483611b0d565b80549091506001600160a01b031633146114105760405162461bcd60e51b815260206004820152601f60248201527f4552433833373a2053656e646572206e6f7420696e697469616c697a65722e006044820152606401610740565b438160020154101561146e5760405162461bcd60e51b815260206004820152602160248201527f4552433833373a205468697320626574206973207374696c6c206c6f636b65646044820152601760f91b6064820152608401610740565b600881015460ff16156114cf5760405162461bcd60e51b815260206004820152602360248201527f4552433833373a20546869732062657420697320616c726561647920636c6f7360448201526232b21760e91b6064820152608401610740565b600381015482106115225760405162461bcd60e51b815260206004820152601760248201527f4552433833373a20496e76616c6964206f7074696f6e2e0000000000000000006044820152606401610740565b600481015415611624575f61153784846123a2565b90505f6064600554846007015461154e9190612cb8565b6115589190612ea9565b83600701546115679190612ec8565b90505f5b6004840154811015611620575f84600401828154811061158d5761158d612ccf565b5f9182526020808320909101546001600160a01b031680835260058801909152604090912054909150869003611617576001600160a01b0381165f90815260068601602052604081205485906115e4906064612cb8565b6115ee9190612ea9565b90505f60646115fd8387612cb8565b6116079190612ea9565b9050611614308483611b71565b50505b5060010161156b565b5050505b60088101805460ff191660011790558054604080516001600160a01b0390921682526020820184905284917f7f87517059366dbdc85d3ed06c99a243c3f704a883ab3d056a97fed73016983b910160405180910390a2505050565b60026020525f9081526040902080546001820180546001600160a01b0390921692916116aa90612b81565b80601f01602080910402602001604051908101604052809291908181526020018280546116d690612b81565b80156117215780601f106116f857610100808354040283529160200191611721565b820191905f5260205f20905b81548152906001019060200180831161170457829003601f168201915b50505050600283015460078401546008909401549293909290915060ff1685565b5f61174c33610da2565b116117ac5760405162461bcd60e51b815260206004820152602a60248201527f4552433833373a204f6e6c7920746f6b656e20686f6c646572732063616e20706044820152693630b1b2903132ba399760b11b6064820152608401610740565b5f6117b684611b0d565b90506117c2843361243b565b1561181e5760405162461bcd60e51b815260206004820152602660248201527f4552433833373a204f6e6c7920312062657420616c6c6f77656420706572207760448201526530b63632ba1760d11b6064820152608401610740565b600381015483106118715760405162461bcd60e51b815260206004820152601f60248201527f4552433833373a20496e76616c6964206f7074696f6e20666f72206265742e006044820152606401610740565b61187d60036001612edb565b60ff168210156118e85760405162461bcd60e51b815260206004820152603060248201527f4552433833373a204265742062616c616e6365206d757374206265206869676860448201526f32b9103a3430b71018903a37b5b2b71760811b6064820152608401610740565b816118f233610da2565b101561194a5760405162461bcd60e51b815260206004820152602160248201527f4552433833373a204e6f7420656e6f75676820746f6b656e7320746f206265746044820152601760f91b6064820152608401610740565b6004810180546001810182555f918252602080832090910180546001600160a01b03191633908117909155825260058301815260408083208690556006840190915281208390556007820180548492906119a5908490612ce3565b909155506119b69050333084611b71565b50505050565b5f546001600160a01b031633146119e55760405162461bcd60e51b815260040161074090612b4c565b600455565b6001600160a01b038316611a4c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610740565b6001600160a01b038216611aad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610740565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f81815260026020526040812080546001600160a01b03166107ac5760405162461bcd60e51b815260206004820152601b60248201527f4552433833373a2042657420646f6573206e6f742065786973742e00000000006044820152606401610740565b6001600160a01b038316611bd55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610740565b6001600160a01b038216611c375760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610740565b5f8111611c985760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610740565b5f80546001600160a01b03858116911614801590611cc357505f546001600160a01b03848116911614155b15611fc0576001600160a01b0384165f9081526009602052604090205460ff16158015611d0857506001600160a01b0383165f9081526009602052604090205460ff16155b611d10575f5ffd5b611d366064611040600f5460125411611d2b57600b54611d2f565b600d545b85906122dc565b6018549091506001600160a01b038581169116148015611d6457506017546001600160a01b03848116911614155b8015611d8857506001600160a01b0383165f9081526008602052604090205460ff16155b15611e5957601354821115611ddf5760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610740565b60145482611dec85610da2565b611df69190612ce3565b1115611e445760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610740565b60128054905f611e5383612efe565b91905055505b6018546001600160a01b038481169116148015611e7f57506001600160a01b0384163014155b15611eac57611ea9606461104060105460125411611e9f57600c54611d2f565b600e5485906122dc565b90505b5f611eb630610da2565b601854909150600160a81b900460ff16158015611ee057506018546001600160a01b038581169116145b8015611ef55750601854600160b01b900460ff165b8015611f02575060155481115b8015611f115750601154601254115b15611fbe57601a54431115611f25575f6019555b600460195410611f775760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920342073656c6c732070657220626c6f636b210000000000000000006044820152606401610740565b611f94611f8f84611f8a846016546124ab565b6124ab565b612135565b478015611fa457611fa4476122a5565b60198054905f611fb383612efe565b909155505043601a55505b505b801561203857305f90815260066020526040902054611fdf90826124bf565b305f81815260066020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061202f9085815260200190565b60405180910390a35b6001600160a01b0384165f9081526006602052604090205461205a908361251d565b6001600160a01b0385165f9081526006602052604090205561209d61207f838361251d565b6001600160a01b0385165f90815260066020526040902054906124bf565b6001600160a01b038085165f8181526006602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6120e6858561251d565b60405190815260200160405180910390a350505050565b5f81848411156121205760405162461bcd60e51b8152600401610740919061268e565b505f61212c8486612ec8565b95945050505050565b6018805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061217b5761217b612ccf565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121f69190612e44565b8160018151811061220957612209612ccf565b6001600160a01b03928316602091820292909201015260175461222f91309116846119ea565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac947906122679085905f90869030904290600401612f16565b5f604051808303815f87803b15801561227e575f5ffd5b505af1158015612290573d5f5f3e3d5ffd5b50506018805460ff60a81b1916905550505050565b600a546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561099a573d5f5f3e3d5ffd5b5f825f036122eb57505f6107ac565b5f6122f68385612cb8565b9050826123038583612ea9565b1461235a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610740565b9392505050565b5f61235a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061255e565b5f806123ad84611b0d565b90505f5b6004820154811015612433575f8260040182815481106123d3576123d3612ccf565b5f9182526020808320909101546001600160a01b03168083526005860190915260409091205490915085900361242a576001600160a01b0381165f9081526006840160205260409020546124279085612ce3565b93505b506001016123b1565b505092915050565b5f5f61244684611b0d565b90505f5b60048201548110156124a157836001600160a01b031682600401828154811061247557612475612ccf565b5f918252602090912001546001600160a01b031603612499576001925050506107ac565b60010161244a565b505f949350505050565b5f8183116124b9578261235a565b50919050565b5f806124cb8385612ce3565b90508381101561235a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610740565b5f61235a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120fd565b5f818361257e5760405162461bcd60e51b8152600401610740919061268e565b505f61212c8486612ea9565b828054828255905f5260205f209081019282156125ce579160200282015b828111156125ce57825182906125be9082612d42565b50916020019190600101906125a8565b506125da9291506125de565b5090565b808211156125da575f6125f182826125fa565b506001016125de565b50805461260690612b81565b5f825580601f10612615575050565b601f0160209004905f5260205f2090810190610d9f91905b808211156125da575f815560010161262d565b5f60208284031215612650575f5ffd5b813560ff8116811461235a575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61235a6020830184612660565b6001600160a01b0381168114610d9f575f5ffd5b5f5f604083850312156126c5575f5ffd5b82356126d0816126a0565b946020939093013593505050565b5f602082840312156126ee575f5ffd5b5035919050565b5f82825180855260208501945060208160051b830101602085015f5b8381101561274357601f1985840301885261272d838351612660565b6020988901989093509190910190600101612711565b50909695505050505050565b602081525f61235a60208301846126f5565b5f5f5f60608486031215612773575f5ffd5b833561277e816126a0565b9250602084013561278e816126a0565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127dc576127dc61279f565b604052919050565b5f67ffffffffffffffff8211156127fd576127fd61279f565b5060051b60200190565b5f60208284031215612817575f5ffd5b813567ffffffffffffffff81111561282d575f5ffd5b8201601f8101841361283d575f5ffd5b803561285061284b826127e4565b6127b3565b8082825260208201915060208360051b850101925086831115612871575f5ffd5b6020840193505b8284101561289c57833561288b816126a0565b825260209384019390910190612878565b9695505050505050565b5f82601f8301126128b5575f5ffd5b813567ffffffffffffffff8111156128cf576128cf61279f565b6128e2601f8201601f19166020016127b3565b8181528460208386010111156128f6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215612924575f5ffd5b833567ffffffffffffffff81111561293a575f5ffd5b612946868287016128a6565b935050602084013567ffffffffffffffff811115612962575f5ffd5b8401601f81018613612972575f5ffd5b803561298061284b826127e4565b8082825260208201915060208360051b8501019250888311156129a1575f5ffd5b602084015b838110156129e257803567ffffffffffffffff8111156129c4575f5ffd5b6129d38b6020838901016128a6565b845250602092830192016129a6565b50959895975050505060409390930135925050565b5f60208284031215612a07575f5ffd5b813561235a816126a0565b5f8151808452602084019350602083015f5b82811015612a4b5781516001600160a01b0316865260209586019590910190600101612a24565b5093949350505050565b602081525f61235a6020830184612a12565b5f5f60408385031215612a78575f5ffd5b823591506020830135612a8a816126a0565b809150509250929050565b5f5f60408385031215612aa6575f5ffd5b50508035926020909101359150565b5f5f60408385031215612ac6575f5ffd5b8235612ad1816126a0565b91506020830135612a8a816126a0565b6001600160a01b038616815260a0602082018190525f90612b0490830187612660565b6040830195909552506060810192909252151560809091015292915050565b5f5f5f60608486031215612b35575f5ffd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612b9557607f821691505b6020821081036124b957634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115612c0257808504811115612be657612be6612bb3565b6001841615612bf457908102905b60019390931c928002612bcb565b935093915050565b5f82612c18575060016107ac565b81612c2457505f6107ac565b8160018114612c3a5760028114612c4457612c60565b60019150506107ac565b60ff841115612c5557612c55612bb3565b50506001821b6107ac565b5060208310610133831016604e8410600b8410161715612c83575081810a6107ac565b612c8f5f198484612bc7565b805f1904821115612ca257612ca2612bb3565b029392505050565b5f61235a60ff841683612c0a565b80820281158282048414176107ac576107ac612bb3565b634e487b7160e01b5f52603260045260245ffd5b808201808211156107ac576107ac612bb3565b601f821115612d3d57805f5260205f20601f840160051c81016020851015612d1b5750805b601f840160051c820191505b81811015612d3a575f8155600101612d27565b50505b505050565b815167ffffffffffffffff811115612d5c57612d5c61279f565b612d7081612d6a8454612b81565b84612cf6565b6020601f821160018114612da2575f8315612d8b5750848201515b5f19600385901b1c1916600184901b178455612d3a565b5f84815260208120601f198516915b82811015612dd15787850151825560209485019460019092019101612db1565b5084821015612dee57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526080602082018190525f90612e2090830186612660565b8281036040840152612e3281866126f5565b91505082606083015295945050505050565b5f60208284031215612e54575f5ffd5b815161235a816126a0565b5f5f5f60608486031215612e71575f5ffd5b5050815160208301516040909301519094929350919050565b5f60208284031215612e9a575f5ffd5b8151801515811461235a575f5ffd5b5f82612ec357634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156107ac576107ac612bb3565b60ff8181168382160290811690818114612ef757612ef7612bb3565b5092915050565b5f60018201612f0f57612f0f612bb3565b5060010190565b85815284602082015260a060408201525f612f3460a0830186612a12565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220977ae170f138f128f05b24cb703a58413cc5a11d932249fa0d0b693d641b65e564736f6c634300081b0033
Deployed Bytecode
0x608060405260043610610236575f3560e01c806377e7c65511610129578063bf474bed116100a8578063d38d75ae1161006d578063d38d75ae14610646578063dd62ed3e14610665578063e0ced0e1146106a9578063e71c9697146106d9578063ffba44b8146106f8575f5ffd5b8063bf474bed146105ca578063c2ecf800146105df578063c57b9c0c146105fe578063c9567bf914610613578063d34628cc14610627575f5ffd5b8063919594ed116100ee578063919594ed1461055857806395d89b4114610262578063a8d5742a14610577578063a9059cbb14610596578063bbd4d3e3146105b5575f5ffd5b806377e7c655146104c65780637d1db4a5146104fd5780637e70b758146105125780638da5cb5b146105275780638f9a55c014610543575f5ffd5b806332ceefff116101b557806351bc3c851161017a57806351bc3c85146104575780636fc3eaec1461046b57806370a082311461047f578063715018a61461049e578063751039fc146104b2575f5ffd5b806332ceefff146103a35780633bbac579146103b65780634402ac73146103ed5780634cf816de1461040c5780634d5dacd21461042b575f5ffd5b806318160ddd116101fb57806318160ddd1461032057806323b872dd1461033457806327c8e81c14610353578063313ce5671461036957806331c2d84714610384575f5ffd5b806306997f3f1461024157806306fdde0314610262578063095ea7b3146102a25780630de9d91e146102d15780630faee56f146102fd575f5ffd5b3661023d57005b5f5ffd5b34801561024c575f5ffd5b5061026061025b366004612640565b610717565b005b34801561026d575f5ffd5b5060408051808201909152600681526545524338333760d01b60208201525b604051610299919061268e565b60405180910390f35b3480156102ad575f5ffd5b506102c16102bc3660046126b4565b61079c565b6040519015158152602001610299565b3480156102dc575f5ffd5b506102f06102eb3660046126de565b6107b2565b604051610299919061274f565b348015610308575f5ffd5b5061031260165481565b604051908152602001610299565b34801561032b575f5ffd5b50610312610892565b34801561033f575f5ffd5b506102c161034e366004612761565b6108b0565b34801561035e575f5ffd5b506001546103129081565b348015610374575f5ffd5b5060405160098152602001610299565b34801561038f575f5ffd5b5061026061039e366004612807565b610917565b6103126103b1366004612912565b61099e565b3480156103c1575f5ffd5b506102c16103d03660046129f7565b6001600160a01b03165f9081526009602052604090205460ff1690565b3480156103f8575f5ffd5b5061028c6104073660046126de565b610c11565b348015610417575f5ffd5b506103126104263660046126de565b610cad565b348015610436575f5ffd5b5061044a6104453660046126de565b610cc1565b6040516102999190612a55565b348015610462575f5ffd5b50610260610d2c565b348015610476575f5ffd5b50610260610d76565b34801561048a575f5ffd5b506103126104993660046129f7565b610da2565b3480156104a9575f5ffd5b50610260610dbc565b3480156104bd575f5ffd5b50610260610e2d565b3480156104d1575f5ffd5b506104e56104e03660046126de565b610ed8565b6040516001600160a01b039091168152602001610299565b348015610508575f5ffd5b5061031260135481565b34801561051d575f5ffd5b5061031260045481565b348015610532575f5ffd5b505f546001600160a01b03166104e5565b34801561054e575f5ffd5b5061031260145481565b348015610563575f5ffd5b50610312610572366004612a67565b610ef2565b348015610582575f5ffd5b506102606105913660046126de565b610f20565b3480156105a1575f5ffd5b506102c16105b03660046126b4565b610f4e565b3480156105c0575f5ffd5b5061031260055481565b3480156105d5575f5ffd5b5061031260155481565b3480156105ea575f5ffd5b506103126105f93660046126de565b610f5a565b348015610609575f5ffd5b5061031260035481565b34801561061e575f5ffd5b50610260610f6e565b348015610632575f5ffd5b50610260610641366004612807565b611326565b348015610651575f5ffd5b50610260610660366004612a95565b6113aa565b348015610670575f5ffd5b5061031261067f366004612ab5565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b3480156106b4575f5ffd5b506106c86106c33660046126de565b61167f565b604051610299959493929190612ae1565b3480156106e4575f5ffd5b506102606106f3366004612b23565b611742565b348015610703575f5ffd5b506102606107123660046126de565b6119bc565b5f546001600160a01b031633146107495760405162461bcd60e51b815260040161074090612b4c565b60405180910390fd5b600a8160ff1611156107945760405162461bcd60e51b815260206004820152601460248201527322a9219c199b9d1024b73b30b634b2103332b29760611b6044820152606401610740565b60ff16600555565b5f6107a83384846119ea565b5060015b92915050565b60606107bd82611b0d565b600301805480602002602001604051908101604052809291908181526020015f905b82821015610887578382905f5260205f200180546107fc90612b81565b80601f016020809104026020016040519081016040528092919081815260200182805461082890612b81565b80156108735780601f1061084a57610100808354040283529160200191610873565b820191905f5260205f20905b81548152906001019060200180831161085657829003601f168201915b5050505050815260200190600101906107df565b505050509050919050565b5f61089f6009600a612caa565b6108ab90612710612cb8565b905090565b5f6108bc848484611b71565b61090d843361090885604051806060016040528060288152602001612f52602891396001600160a01b038a165f90815260076020908152604080832033845290915290205491906120fd565b6119ea565b5060019392505050565b5f546001600160a01b031633146109405760405162461bcd60e51b815260040161074090612b4c565b5f5b815181101561099a575f60095f84848151811061096157610961612ccf565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610942565b5050565b5f5f6109a933610da2565b11610a0a5760405162461bcd60e51b815260206004820152602b60248201527f4552433833373a204f6e6c7920746f6b656e20686f6c646572732063616e206360448201526a3932b0ba32903132ba399760a91b6064820152608401610740565b600354821015610a5c5760405162461bcd60e51b815260206004820152601b60248201527f4552433833373a20446561646c696e6520746f6f2073686f72742e00000000006044820152606401610740565b603284511115610ac95760405162461bcd60e51b815260206004820152603260248201527f4552433833373a205469746c652063616e6e6f74206265206c6f6e67657220746044820152713430b7101a981031b430b930b1ba32b9399760711b6064820152608401610740565b6002835110158015610ade5750600454835111155b610b355760405162461bcd60e51b815260206004820152602260248201527f4552433833373a20496e76616c696420616d6f756e74206f66206f7074696f6e604482015261399760f11b6064820152608401610740565b506001545f610b448343612ce3565b5f83815260026020526040902080546001600160a01b03191633178155909150600101610b718682612d42565b505f8281526002602081815260409092209081018390558551610b9c9260039092019187019061258a565b505f8281526002602052604081206007810191909155600801805460ff19169055610bcb600180546001019055565b817f1afe65692c50d05eb6a8afe7d1fd096c9a281bb1f3edf48b89cf39918aeeea4b33878785604051610c019493929190612dfd565b60405180910390a2509392505050565b6060610c1c82611b0d565b6001018054610c2a90612b81565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5690612b81565b8015610ca15780601f10610c7857610100808354040283529160200191610ca1565b820191905f5260205f20905b815481529060010190602001808311610c8457829003601f168201915b50505050509050919050565b5f610cb782611b0d565b6002015492915050565b6060610ccc82611b0d565b600401805480602002602001604051908101604052809291908181526020018280548015610ca157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d035750505050509050919050565b600a546001600160a01b0316336001600160a01b031614610d4b575f5ffd5b5f610d5530610da2565b90508015610d6657610d6681612135565b47801561099a5761099a816122a5565b600a546001600160a01b0316336001600160a01b031614610d95575f5ffd5b47610d9f816122a5565b50565b6001600160a01b03165f9081526006602052604090205490565b5f546001600160a01b03163314610de55760405162461bcd60e51b815260040161074090612b4c565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610e565760405162461bcd60e51b815260040161074090612b4c565b610e626009600a612caa565b610e6e90612710612cb8565b601355610e7d6009600a612caa565b610e8990612710612cb8565b6014557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610eb96009600a612caa565b610ec590612710612cb8565b60405190815260200160405180910390a1565b5f610ee282611b0d565b546001600160a01b031692915050565b5f610efc83611b0d565b6001600160a01b0383165f9081526005919091016020526040902054905092915050565b5f546001600160a01b03163314610f495760405162461bcd60e51b815260040161074090612b4c565b600355565b5f6107a8338484611b71565b5f610f6482611b0d565b6007015492915050565b5f546001600160a01b03163314610f975760405162461bcd60e51b815260040161074090612b4c565b601854600160a01b900460ff1615610ff15760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e0000000000000000006044820152606401610740565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905561102330335f196119ea565b611046306105b06064611040606261103a33610da2565b906122dc565b90612361565b5060175f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611097573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110bb9190612e44565b6001600160a01b031663c9c653963060175f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561111a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113e9190612e44565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015611188573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ac9190612e44565b601880546001600160a01b0319166001600160a01b039283161790556017546111d9913091165f196119ea565b6017546001600160a01b031663f305d71947306111f581610da2565b5f5f6112085f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561126e573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906112939190612e5f565b505060185460175460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156112e8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130c9190612e8a565b506018805462ff00ff60a01b19166201000160a01b179055565b5f546001600160a01b0316331461134f5760405162461bcd60e51b815260040161074090612b4c565b5f5b815181101561099a57600160095f84848151811061137157611371612ccf565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101611351565b5f6113b483611b0d565b80549091506001600160a01b031633146114105760405162461bcd60e51b815260206004820152601f60248201527f4552433833373a2053656e646572206e6f7420696e697469616c697a65722e006044820152606401610740565b438160020154101561146e5760405162461bcd60e51b815260206004820152602160248201527f4552433833373a205468697320626574206973207374696c6c206c6f636b65646044820152601760f91b6064820152608401610740565b600881015460ff16156114cf5760405162461bcd60e51b815260206004820152602360248201527f4552433833373a20546869732062657420697320616c726561647920636c6f7360448201526232b21760e91b6064820152608401610740565b600381015482106115225760405162461bcd60e51b815260206004820152601760248201527f4552433833373a20496e76616c6964206f7074696f6e2e0000000000000000006044820152606401610740565b600481015415611624575f61153784846123a2565b90505f6064600554846007015461154e9190612cb8565b6115589190612ea9565b83600701546115679190612ec8565b90505f5b6004840154811015611620575f84600401828154811061158d5761158d612ccf565b5f9182526020808320909101546001600160a01b031680835260058801909152604090912054909150869003611617576001600160a01b0381165f90815260068601602052604081205485906115e4906064612cb8565b6115ee9190612ea9565b90505f60646115fd8387612cb8565b6116079190612ea9565b9050611614308483611b71565b50505b5060010161156b565b5050505b60088101805460ff191660011790558054604080516001600160a01b0390921682526020820184905284917f7f87517059366dbdc85d3ed06c99a243c3f704a883ab3d056a97fed73016983b910160405180910390a2505050565b60026020525f9081526040902080546001820180546001600160a01b0390921692916116aa90612b81565b80601f01602080910402602001604051908101604052809291908181526020018280546116d690612b81565b80156117215780601f106116f857610100808354040283529160200191611721565b820191905f5260205f20905b81548152906001019060200180831161170457829003601f168201915b50505050600283015460078401546008909401549293909290915060ff1685565b5f61174c33610da2565b116117ac5760405162461bcd60e51b815260206004820152602a60248201527f4552433833373a204f6e6c7920746f6b656e20686f6c646572732063616e20706044820152693630b1b2903132ba399760b11b6064820152608401610740565b5f6117b684611b0d565b90506117c2843361243b565b1561181e5760405162461bcd60e51b815260206004820152602660248201527f4552433833373a204f6e6c7920312062657420616c6c6f77656420706572207760448201526530b63632ba1760d11b6064820152608401610740565b600381015483106118715760405162461bcd60e51b815260206004820152601f60248201527f4552433833373a20496e76616c6964206f7074696f6e20666f72206265742e006044820152606401610740565b61187d60036001612edb565b60ff168210156118e85760405162461bcd60e51b815260206004820152603060248201527f4552433833373a204265742062616c616e6365206d757374206265206869676860448201526f32b9103a3430b71018903a37b5b2b71760811b6064820152608401610740565b816118f233610da2565b101561194a5760405162461bcd60e51b815260206004820152602160248201527f4552433833373a204e6f7420656e6f75676820746f6b656e7320746f206265746044820152601760f91b6064820152608401610740565b6004810180546001810182555f918252602080832090910180546001600160a01b03191633908117909155825260058301815260408083208690556006840190915281208390556007820180548492906119a5908490612ce3565b909155506119b69050333084611b71565b50505050565b5f546001600160a01b031633146119e55760405162461bcd60e51b815260040161074090612b4c565b600455565b6001600160a01b038316611a4c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610740565b6001600160a01b038216611aad5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610740565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f81815260026020526040812080546001600160a01b03166107ac5760405162461bcd60e51b815260206004820152601b60248201527f4552433833373a2042657420646f6573206e6f742065786973742e00000000006044820152606401610740565b6001600160a01b038316611bd55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610740565b6001600160a01b038216611c375760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610740565b5f8111611c985760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610740565b5f80546001600160a01b03858116911614801590611cc357505f546001600160a01b03848116911614155b15611fc0576001600160a01b0384165f9081526009602052604090205460ff16158015611d0857506001600160a01b0383165f9081526009602052604090205460ff16155b611d10575f5ffd5b611d366064611040600f5460125411611d2b57600b54611d2f565b600d545b85906122dc565b6018549091506001600160a01b038581169116148015611d6457506017546001600160a01b03848116911614155b8015611d8857506001600160a01b0383165f9081526008602052604090205460ff16155b15611e5957601354821115611ddf5760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e000000000000006044820152606401610740565b60145482611dec85610da2565b611df69190612ce3565b1115611e445760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610740565b60128054905f611e5383612efe565b91905055505b6018546001600160a01b038481169116148015611e7f57506001600160a01b0384163014155b15611eac57611ea9606461104060105460125411611e9f57600c54611d2f565b600e5485906122dc565b90505b5f611eb630610da2565b601854909150600160a81b900460ff16158015611ee057506018546001600160a01b038581169116145b8015611ef55750601854600160b01b900460ff165b8015611f02575060155481115b8015611f115750601154601254115b15611fbe57601a54431115611f25575f6019555b600460195410611f775760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920342073656c6c732070657220626c6f636b210000000000000000006044820152606401610740565b611f94611f8f84611f8a846016546124ab565b6124ab565b612135565b478015611fa457611fa4476122a5565b60198054905f611fb383612efe565b909155505043601a55505b505b801561203857305f90815260066020526040902054611fdf90826124bf565b305f81815260066020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061202f9085815260200190565b60405180910390a35b6001600160a01b0384165f9081526006602052604090205461205a908361251d565b6001600160a01b0385165f9081526006602052604090205561209d61207f838361251d565b6001600160a01b0385165f90815260066020526040902054906124bf565b6001600160a01b038085165f8181526006602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6120e6858561251d565b60405190815260200160405180910390a350505050565b5f81848411156121205760405162461bcd60e51b8152600401610740919061268e565b505f61212c8486612ec8565b95945050505050565b6018805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061217b5761217b612ccf565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156121d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121f69190612e44565b8160018151811061220957612209612ccf565b6001600160a01b03928316602091820292909201015260175461222f91309116846119ea565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac947906122679085905f90869030904290600401612f16565b5f604051808303815f87803b15801561227e575f5ffd5b505af1158015612290573d5f5f3e3d5ffd5b50506018805460ff60a81b1916905550505050565b600a546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561099a573d5f5f3e3d5ffd5b5f825f036122eb57505f6107ac565b5f6122f68385612cb8565b9050826123038583612ea9565b1461235a5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610740565b9392505050565b5f61235a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061255e565b5f806123ad84611b0d565b90505f5b6004820154811015612433575f8260040182815481106123d3576123d3612ccf565b5f9182526020808320909101546001600160a01b03168083526005860190915260409091205490915085900361242a576001600160a01b0381165f9081526006840160205260409020546124279085612ce3565b93505b506001016123b1565b505092915050565b5f5f61244684611b0d565b90505f5b60048201548110156124a157836001600160a01b031682600401828154811061247557612475612ccf565b5f918252602090912001546001600160a01b031603612499576001925050506107ac565b60010161244a565b505f949350505050565b5f8183116124b9578261235a565b50919050565b5f806124cb8385612ce3565b90508381101561235a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610740565b5f61235a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506120fd565b5f818361257e5760405162461bcd60e51b8152600401610740919061268e565b505f61212c8486612ea9565b828054828255905f5260205f209081019282156125ce579160200282015b828111156125ce57825182906125be9082612d42565b50916020019190600101906125a8565b506125da9291506125de565b5090565b808211156125da575f6125f182826125fa565b506001016125de565b50805461260690612b81565b5f825580601f10612615575050565b601f0160209004905f5260205f2090810190610d9f91905b808211156125da575f815560010161262d565b5f60208284031215612650575f5ffd5b813560ff8116811461235a575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61235a6020830184612660565b6001600160a01b0381168114610d9f575f5ffd5b5f5f604083850312156126c5575f5ffd5b82356126d0816126a0565b946020939093013593505050565b5f602082840312156126ee575f5ffd5b5035919050565b5f82825180855260208501945060208160051b830101602085015f5b8381101561274357601f1985840301885261272d838351612660565b6020988901989093509190910190600101612711565b50909695505050505050565b602081525f61235a60208301846126f5565b5f5f5f60608486031215612773575f5ffd5b833561277e816126a0565b9250602084013561278e816126a0565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156127dc576127dc61279f565b604052919050565b5f67ffffffffffffffff8211156127fd576127fd61279f565b5060051b60200190565b5f60208284031215612817575f5ffd5b813567ffffffffffffffff81111561282d575f5ffd5b8201601f8101841361283d575f5ffd5b803561285061284b826127e4565b6127b3565b8082825260208201915060208360051b850101925086831115612871575f5ffd5b6020840193505b8284101561289c57833561288b816126a0565b825260209384019390910190612878565b9695505050505050565b5f82601f8301126128b5575f5ffd5b813567ffffffffffffffff8111156128cf576128cf61279f565b6128e2601f8201601f19166020016127b3565b8181528460208386010111156128f6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f60608486031215612924575f5ffd5b833567ffffffffffffffff81111561293a575f5ffd5b612946868287016128a6565b935050602084013567ffffffffffffffff811115612962575f5ffd5b8401601f81018613612972575f5ffd5b803561298061284b826127e4565b8082825260208201915060208360051b8501019250888311156129a1575f5ffd5b602084015b838110156129e257803567ffffffffffffffff8111156129c4575f5ffd5b6129d38b6020838901016128a6565b845250602092830192016129a6565b50959895975050505060409390930135925050565b5f60208284031215612a07575f5ffd5b813561235a816126a0565b5f8151808452602084019350602083015f5b82811015612a4b5781516001600160a01b0316865260209586019590910190600101612a24565b5093949350505050565b602081525f61235a6020830184612a12565b5f5f60408385031215612a78575f5ffd5b823591506020830135612a8a816126a0565b809150509250929050565b5f5f60408385031215612aa6575f5ffd5b50508035926020909101359150565b5f5f60408385031215612ac6575f5ffd5b8235612ad1816126a0565b91506020830135612a8a816126a0565b6001600160a01b038616815260a0602082018190525f90612b0490830187612660565b6040830195909552506060810192909252151560809091015292915050565b5f5f5f60608486031215612b35575f5ffd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612b9557607f821691505b6020821081036124b957634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115612c0257808504811115612be657612be6612bb3565b6001841615612bf457908102905b60019390931c928002612bcb565b935093915050565b5f82612c18575060016107ac565b81612c2457505f6107ac565b8160018114612c3a5760028114612c4457612c60565b60019150506107ac565b60ff841115612c5557612c55612bb3565b50506001821b6107ac565b5060208310610133831016604e8410600b8410161715612c83575081810a6107ac565b612c8f5f198484612bc7565b805f1904821115612ca257612ca2612bb3565b029392505050565b5f61235a60ff841683612c0a565b80820281158282048414176107ac576107ac612bb3565b634e487b7160e01b5f52603260045260245ffd5b808201808211156107ac576107ac612bb3565b601f821115612d3d57805f5260205f20601f840160051c81016020851015612d1b5750805b601f840160051c820191505b81811015612d3a575f8155600101612d27565b50505b505050565b815167ffffffffffffffff811115612d5c57612d5c61279f565b612d7081612d6a8454612b81565b84612cf6565b6020601f821160018114612da2575f8315612d8b5750848201515b5f19600385901b1c1916600184901b178455612d3a565b5f84815260208120601f198516915b82811015612dd15787850151825560209485019460019092019101612db1565b5084821015612dee57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526080602082018190525f90612e2090830186612660565b8281036040840152612e3281866126f5565b91505082606083015295945050505050565b5f60208284031215612e54575f5ffd5b815161235a816126a0565b5f5f5f60608486031215612e71575f5ffd5b5050815160208301516040909301519094929350919050565b5f60208284031215612e9a575f5ffd5b8151801515811461235a575f5ffd5b5f82612ec357634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156107ac576107ac612bb3565b60ff8181168382160290811690818114612ef757612ef7612bb3565b5092915050565b5f60018201612f0f57612f0f612bb3565b5060010190565b85815284602082015260a060408201525f612f3460a0830186612a12565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220977ae170f138f128f05b24cb703a58413cc5a11d932249fa0d0b693d641b65e564736f6c634300081b0033
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.