Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
IterableMapping
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-10 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.13; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function getPair(address tokenA, address tokenB) external view returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IERC20Metadata is IERC20 { function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); } interface DividendPayingTokenInterface { function dividendOf(address _owner) external view returns(uint256); function distributeDividends() external payable; function withdrawDividend() external; event DividendsDistributed( address indexed from, uint256 weiAmount ); event DividendWithdrawn( address indexed to, uint256 weiAmount ); } interface DividendPayingTokenOptionalInterface { function withdrawableDividendOf(address _owner) external view returns(uint256); function withdrawnDividendOf(address _owner) external view returns(uint256); function accumulativeDividendOf(address _owner) external view returns(uint256); } library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } 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; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library IterableMapping { struct Map { address[] keys; mapping(address => uint) values; mapping(address => uint) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int) { if(!map.inserted[key]) { return -1; } return int(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint) { return map.keys.length; } function set(Map storage map, address key, uint val) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint index = map.indexOf[key]; uint lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } 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); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function decimals() public view virtual override returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } 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); } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface { using SafeMath for uint256; using SafeMathUint for uint256; using SafeMathInt for int256; uint256 constant internal magnitude = 2**128; uint256 internal magnifiedDividendPerShare; uint256 public totalDividendsDistributed; mapping(address => int256) internal magnifiedDividendCorrections; mapping(address => uint256) internal withdrawnDividends; constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {} receive() external payable { distributeDividends(); } function distributeDividends() public override onlyOwner payable { require(totalSupply() > 0); if (msg.value > 0) { magnifiedDividendPerShare = magnifiedDividendPerShare.add((msg.value).mul(magnitude) / totalSupply()); emit DividendsDistributed(msg.sender, msg.value); totalDividendsDistributed = totalDividendsDistributed.add(msg.value); } } function withdrawDividend() public virtual override { _withdrawDividendOfUser(payable(msg.sender)); } function _withdrawDividendOfUser(address payable user) internal returns (uint256) { uint256 _withdrawableDividend = withdrawableDividendOf(user); if (_withdrawableDividend > 0) { withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend); emit DividendWithdrawn(user, _withdrawableDividend); (bool success,) = user.call{value: _withdrawableDividend, gas: 3000}(""); if(!success) { withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend); return 0; } return _withdrawableDividend; } return 0; } function dividendOf(address _owner) public view override returns(uint256) { return withdrawableDividendOf(_owner); } function withdrawableDividendOf(address _owner) public view override returns(uint256) { return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]); } function withdrawnDividendOf(address _owner) public view override returns(uint256) { return withdrawnDividends[_owner]; } function accumulativeDividendOf(address _owner) public view override returns(uint256) { return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe() .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude; } function _transfer(address from, address to, uint256 value) internal virtual override { require(false); int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe(); magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection); magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection); } function _mint(address account, uint256 value) internal override { super._mint(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _burn(address account, uint256 value) internal override { super._burn(account, value); magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() ); } function _setBalance(address account, uint256 newBalance) internal { uint256 currentBalance = balanceOf(account); if(newBalance > currentBalance) { uint256 mintAmount = newBalance.sub(currentBalance); _mint(account, mintAmount); } else if(newBalance < currentBalance) { uint256 burnAmount = currentBalance.sub(newBalance); _burn(account, burnAmount); } } } contract REIToken is ERC20, Ownable { IRouter public uniswapV2Router; address public immutable uniswapV2Pair; string private constant _name = "REIToken"; string private constant _symbol = "REIT"; uint8 private constant _decimals = 18; REITDividendTracker public dividendTracker; bool public isTradingEnabled; uint256 private _launchBlockNumber; uint256 private _launchTimestamp; uint256 private constant _blockedTimeLimit = 172800; address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; // initialSupply uint256 constant initialSupply = 1000000000000 * (10**18); // max wallet is 1% of initialSupply uint256 public maxWalletAmount = initialSupply * 100 / 10000; // max buy is 0.5%, max sell is 0.3% of initialSupply uint256 public maxTxBuyAmount = initialSupply * 500 / 100000; uint256 public maxTxSellAmount = initialSupply * 300 / 100000; bool private _swapping; uint256 public minimumTokensBeforeSwap = 15000000 * (10**18); address public liquidityWallet; address public marketingWallet; address public treasuryWallet; address public capitalWallet; struct CustomTaxPeriod { bytes23 periodName; uint8 blocksInPeriod; uint256 timeInPeriod; uint8 liquidityFeeOnBuy; uint8 liquidityFeeOnSell; uint8 marketingFeeOnBuy; uint8 marketingFeeOnSell; uint8 treasuryFeeOnBuy; uint8 treasuryFeeOnSell; uint8 capitalFeeOnBuy; uint8 capitalFeeOnSell; uint8 holdersFeeOnBuy; uint8 holdersFeeOnSell; } // Base taxes CustomTaxPeriod private _base = CustomTaxPeriod('default',0,0,1,1,3,3,2,2,3,3,1,1); mapping (address => bool) private _isBlocked; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcludedFromMaxWalletLimit; mapping (address => bool) private _isExcludedFromMaxTransactionLimit; mapping (address => bool) public automatedMarketMakerPairs; mapping (address => bool) private _feeOnSelectedWalletTransfers; mapping (address => bool) private _isAllowedToTradeWhenDisabled; uint8 private _liquidityFee; uint8 private _marketingFee; uint8 private _treasuryFee; uint8 private _capitalFee; uint8 private _holdersFee; uint8 private _totalFee; event AutomatedMarketMakerPairChange(address indexed pair, bool indexed value); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event BlockedAccountChange(address indexed holder, bool indexed status); event UniswapV2RouterChange(address indexed newAddress, address indexed oldAddress); event WalletChange(string indexed walletIdentifier, address indexed newWallet, address indexed oldWallet); event FeeChange(string indexed identifier, uint8 liquidityFee, uint8 marketingFee, uint8 treasuryFee, uint8 capitalFee, uint8 holdersFee); event CustomTaxPeriodChange(uint256 indexed newValue, uint256 indexed oldValue, string indexed taxType, bytes23 period); event MaxWalletAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MaxTransactionAmountChange(uint256 indexed newValue, uint256 indexed oldValue); event MinTokenAmountBeforeSwapChange(uint256 indexed newValue, uint256 indexed oldValue); event ExcludeFromFeesChange(address indexed account, bool isExcluded); event ExcludeFromMaxWalletChange(address indexed account, bool isExcluded); event ExcludeFromMaxTransactionChange(address indexed account, bool isExcluded); event FeeOnSelectedWalletTransfersChange(address indexed account, bool newValue); event DividendsSent(uint256 tokensSwapped); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived,uint256 tokensIntoLiqudity); event ClaimETHOverflow(uint256 amount); event FeesApplied(uint8 liquidityFee, uint8 marketingFee, uint8 treasuryFee, uint8 capitalFee, uint8 holdersFee, uint8 totalFee); constructor() ERC20(_name, _symbol) { liquidityWallet = owner(); marketingWallet = owner(); treasuryWallet = owner(); capitalWallet = owner(); dividendTracker = new REITDividendTracker(); IRouter _uniswapV2Router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Mainnet address _uniswapV2Pair = IFactory(_uniswapV2Router.factory()).createPair( address(this), _uniswapV2Router.WETH() ); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[address(dividendTracker)] = true; dividendTracker.excludeFromDividends(address(dividendTracker)); dividendTracker.excludeFromDividends(address(this)); dividendTracker.excludeFromDividends(address(0x000000000000000000000000000000000000dEaD)); dividendTracker.excludeFromDividends(owner()); dividendTracker.excludeFromDividends(address(_uniswapV2Router)); _isAllowedToTradeWhenDisabled[owner()] = true; _isAllowedToTradeWhenDisabled[address(this)] = true; _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true; _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[address(dividendTracker)] = true; _mint(owner(), initialSupply); } receive() external payable {} // Setters function activateTrading() external onlyOwner { isTradingEnabled = true; if (_launchTimestamp == 0) { _launchTimestamp = block.timestamp; _launchBlockNumber = block.number; } } function deactivateTrading() external onlyOwner { isTradingEnabled = false; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "REIT: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; if(value) { dividendTracker.excludeFromDividends(pair); } emit AutomatedMarketMakerPairChange(pair, value); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner { _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function blockAccount(address account) external onlyOwner { require(!_isBlocked[account], "REIT: Account is already blocked"); require((block.timestamp - _launchTimestamp) < _blockedTimeLimit, "REIT: Time to block accounts has expired"); _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner { require(_isBlocked[account], "REIT: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function setUSDTAddress(address newUSDTAddress) external onlyOwner { require(newUSDTAddress != USDT, "REIT: The USDT address is already the value of newUSDTAddress"); USDT = newUSDTAddress; } function setFeeOnSelectedWalletTransfers(address account, bool value) external onlyOwner { require(_feeOnSelectedWalletTransfers[account] != value, "REIT: The selected wallet is already set to the value "); _feeOnSelectedWalletTransfers[account] = value; emit FeeOnSelectedWalletTransfersChange(account, value); } function excludeFromFees(address account, bool excluded) external onlyOwner { require(_isExcludedFromFee[account] != excluded, "REIT: Account is already the value of 'excluded'"); _isExcludedFromFee[account] = excluded; emit ExcludeFromFeesChange(account, excluded); } function excludeFromDividends(address account) external onlyOwner { dividendTracker.excludeFromDividends(account); } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxWalletLimit[account] != excluded, "REIT: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; emit ExcludeFromMaxWalletChange(account, excluded); } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner { require(_isExcludedFromMaxTransactionLimit[account] != excluded, "REIT: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; emit ExcludeFromMaxTransactionChange(account, excluded); } function setWallets(address newLiquidityWallet, address newMarketingWallet, address newTreasuryWallet, address newCapitalWallet) external onlyOwner { if(liquidityWallet != newLiquidityWallet) { require(newLiquidityWallet != address(0), "REIT: The liquidityWallet cannot be 0"); emit WalletChange('liquidityWallet', newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } if(marketingWallet != newMarketingWallet) { require(newMarketingWallet != address(0), "REIT: The marketingWallet cannot be 0"); emit WalletChange('marketingWallet', newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } if(treasuryWallet != newTreasuryWallet) { require(newTreasuryWallet != address(0), "REIT: The treasuryWallet cannot be 0"); emit WalletChange('treasuryWallet', newTreasuryWallet, treasuryWallet); treasuryWallet = newTreasuryWallet; } if(capitalWallet != newCapitalWallet) { require(newCapitalWallet != address(0), "REIT: The capitalWallet cannot be 0"); emit WalletChange('capitalWallet', newCapitalWallet, capitalWallet); capitalWallet = newCapitalWallet; } } // Base Fees function setBaseFeesOnBuy(uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _treasuryFeeOnBuy, uint8 _capitalFeeOnBuy, uint8 _holdersFeeOnBuy) external onlyOwner { _setCustomBuyTaxPeriod(_base, _liquidityFeeOnBuy, _marketingFeeOnBuy, _treasuryFeeOnBuy, _capitalFeeOnBuy, _holdersFeeOnBuy); emit FeeChange('baseFees-Buy', _liquidityFeeOnBuy, _marketingFeeOnBuy, _treasuryFeeOnBuy, _capitalFeeOnBuy, _holdersFeeOnBuy); } function setBaseFeesOnSell(uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _treasuryFeeOnSell, uint8 _capitalFeeOnSell, uint8 _holdersFeeOnSell) external onlyOwner { _setCustomSellTaxPeriod(_base, _liquidityFeeOnSell, _marketingFeeOnSell, _treasuryFeeOnSell, _capitalFeeOnSell, _holdersFeeOnSell); emit FeeChange('baseFees-Sell', _liquidityFeeOnSell, _marketingFeeOnSell, _treasuryFeeOnSell, _capitalFeeOnSell, _holdersFeeOnSell); } function setUniswapRouter(address newAddress) external onlyOwner { require(newAddress != address(uniswapV2Router), "REIT: The router already has that address"); emit UniswapV2RouterChange(newAddress, address(uniswapV2Router)); uniswapV2Router = IRouter(newAddress); } function setMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue != maxWalletAmount, "REIT: Cannot update maxWalletAmount to same value"); emit MaxWalletAmountChange(newValue, maxWalletAmount); maxWalletAmount = newValue; } function setMaxTransactionAmount(bool isSell, uint256 newValue) external onlyOwner { if(isSell) { require(newValue != maxTxSellAmount, "REIT: Cannot update maxTxSellAmount to same value"); emit MaxWalletAmountChange(newValue, maxTxSellAmount); maxTxSellAmount = newValue; } else { require(newValue != maxTxBuyAmount, "REIT: Cannot update maxTxBuyAmount to same value"); emit MaxWalletAmountChange(newValue, maxTxBuyAmount); maxTxBuyAmount = newValue; } } function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner { require(newValue != minimumTokensBeforeSwap, "REIT: Cannot update minimumTokensBeforeSwap to same value"); emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap); minimumTokensBeforeSwap = newValue; } function claim() external { dividendTracker.processAccount(payable(msg.sender), false); } function claimETHOverflow() external onlyOwner { uint256 amount = address(this).balance; (bool success,) = address(owner()).call{value : amount}(""); if (success){ emit ClaimETHOverflow(amount); } } // Getters function getTotalDividendsDistributed() external view returns (uint256) { return dividendTracker.totalDividendsDistributed(); } function getNumberOfDividendTokenHolders() external view returns(uint256) { return dividendTracker.getNumberOfTokenHolders(); } function getBaseBuyFees() external view returns (uint8, uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnBuy, _base.marketingFeeOnBuy, _base.treasuryFeeOnBuy, _base.capitalFeeOnBuy, _base.holdersFeeOnBuy); } function getBaseSellFees() external view returns (uint8, uint8, uint8, uint8, uint8){ return (_base.liquidityFeeOnSell, _base.marketingFeeOnSell, _base.treasuryFeeOnSell, _base.capitalFeeOnSell, _base.holdersFeeOnSell); } // Main function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "REIT: Trading is currently disabled."); require(!_isBlocked[to], "REIT: Account is blocked"); require(!_isBlocked[from], "REIT: Account is blocked"); if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "REIT: Expected wallet amount exceeds the maxWalletAmount."); } if (!_isExcludedFromMaxTransactionLimit[to]) { require(amount <= maxTxBuyAmount, "REIT: Transfer amount exceeds the maxTxBuyAmount."); } if (!_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxSellAmount, "REIT: Transfer amount exceeds the maxTxSellAmount."); } } _adjustTaxes(automatedMarketMakerPairs[from], automatedMarketMakerPairs[to], from, to); bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap; if ( isTradingEnabled && canSwap && !_swapping && _totalFee > 0 && automatedMarketMakerPairs[to] ) { _swapping = true; _swapAndLiquify(); _swapping = false; } bool takeFee = !_swapping && isTradingEnabled; if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){ takeFee = false; } if (takeFee && _totalFee > 0) { uint256 fee = amount * _totalFee / 100; amount = amount - fee; super._transfer(from, address(this), fee); } super._transfer(from, to, amount); try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {} try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {} } function _adjustTaxes(bool isBuyFromLp, bool isSelltoLp, address from, address to) private { _liquidityFee = 0; _marketingFee = 0; _treasuryFee = 0; _capitalFee = 0; _holdersFee = 0; if (isBuyFromLp) { if ((block.number - _launchBlockNumber) <= 5) { _liquidityFee = 100; } else { _liquidityFee = _base.liquidityFeeOnBuy; _marketingFee = _base.marketingFeeOnBuy; _treasuryFee = _base.treasuryFeeOnBuy; _capitalFee = _base.capitalFeeOnBuy; _holdersFee = _base.holdersFeeOnBuy; } } if (isSelltoLp) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _treasuryFee = _base.treasuryFeeOnSell; _capitalFee = _base.capitalFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } if (!isSelltoLp && !isBuyFromLp && (_feeOnSelectedWalletTransfers[from] || _feeOnSelectedWalletTransfers[to])) { _liquidityFee = _base.liquidityFeeOnSell; _marketingFee = _base.marketingFeeOnSell; _treasuryFee = _base.treasuryFeeOnSell; _capitalFee = _base.capitalFeeOnSell; _holdersFee = _base.holdersFeeOnSell; } _totalFee = _liquidityFee + _marketingFee + _treasuryFee + _capitalFee + _holdersFee; emit FeesApplied(_liquidityFee, _marketingFee, _treasuryFee, _capitalFee, _holdersFee, _totalFee); } function _setCustomSellTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnSell, uint8 _marketingFeeOnSell, uint8 _treasuryFeeOnSell, uint8 _capitalFeeOnSell, uint8 _holdersFeeOnSell ) private { if (map.liquidityFeeOnSell != _liquidityFeeOnSell) { emit CustomTaxPeriodChange(_liquidityFeeOnSell, map.liquidityFeeOnSell, 'liquidityFeeOnSell', map.periodName); map.liquidityFeeOnSell = _liquidityFeeOnSell; } if (map.marketingFeeOnSell != _marketingFeeOnSell) { emit CustomTaxPeriodChange(_marketingFeeOnSell, map.marketingFeeOnSell, 'marketingFeeOnSell', map.periodName); map.marketingFeeOnSell = _marketingFeeOnSell; } if (map.treasuryFeeOnSell != _treasuryFeeOnSell) { emit CustomTaxPeriodChange(_treasuryFeeOnSell, map.treasuryFeeOnSell, 'treasuryFeeOnSell', map.periodName); map.treasuryFeeOnSell = _treasuryFeeOnSell; } if (map.capitalFeeOnSell != _capitalFeeOnSell) { emit CustomTaxPeriodChange(_capitalFeeOnSell, map.capitalFeeOnSell, 'capitalFeeOnSell', map.periodName); map.capitalFeeOnSell = _capitalFeeOnSell; } if (map.holdersFeeOnSell != _holdersFeeOnSell) { emit CustomTaxPeriodChange(_holdersFeeOnSell, map.holdersFeeOnSell, 'holdersFeeOnSell', map.periodName); map.holdersFeeOnSell = _holdersFeeOnSell; } } function _setCustomBuyTaxPeriod(CustomTaxPeriod storage map, uint8 _liquidityFeeOnBuy, uint8 _marketingFeeOnBuy, uint8 _treasuryFeeOnBuy, uint8 _capitalFeeOnBuy, uint8 _holdersFeeOnBuy ) private { if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) { emit CustomTaxPeriodChange(_liquidityFeeOnBuy, map.liquidityFeeOnBuy, 'liquidityFeeOnBuy', map.periodName); map.liquidityFeeOnBuy = _liquidityFeeOnBuy; } if (map.marketingFeeOnBuy != _marketingFeeOnBuy) { emit CustomTaxPeriodChange(_marketingFeeOnBuy, map.marketingFeeOnBuy, 'marketingFeeOnBuy', map.periodName); map.marketingFeeOnBuy = _marketingFeeOnBuy; } if (map.treasuryFeeOnBuy != _treasuryFeeOnBuy) { emit CustomTaxPeriodChange(_treasuryFeeOnBuy, map.treasuryFeeOnBuy, 'treasuryFeeOnBuy', map.periodName); map.treasuryFeeOnBuy = _treasuryFeeOnBuy; } if (map.capitalFeeOnBuy != _capitalFeeOnBuy) { emit CustomTaxPeriodChange(_capitalFeeOnBuy, map.capitalFeeOnBuy, 'capitalFeeOnBuy', map.periodName); map.capitalFeeOnBuy = _capitalFeeOnBuy; } if (map.holdersFeeOnBuy != _holdersFeeOnBuy) { emit CustomTaxPeriodChange(_holdersFeeOnBuy, map.holdersFeeOnBuy, 'holdersFeeOnBuy', map.periodName); map.holdersFeeOnBuy = _holdersFeeOnBuy; } } function _swapAndLiquify() private { uint256 contractBalance = balanceOf(address(this)); uint256 initialETHBalance = address(this).balance; uint8 totalFeePrior = _totalFee; uint256 amountToLiquify = contractBalance * _liquidityFee / _totalFee / 2; uint256 amountToSwap = contractBalance - amountToLiquify; _swapTokensForETH(amountToSwap); uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance; uint256 totalETHFee = _totalFee - (_liquidityFee / 2); uint256 amountETHLiquidity = ETHBalanceAfterSwap * _liquidityFee / totalETHFee / 2; uint256 amountETHMarketing = ETHBalanceAfterSwap * _marketingFee / totalETHFee; uint256 amountETHTreasury = ETHBalanceAfterSwap * _treasuryFee / totalETHFee; uint256 amountETHCapital = ETHBalanceAfterSwap * _capitalFee / totalETHFee; uint256 amountETHHolders = ETHBalanceAfterSwap - (amountETHLiquidity + amountETHMarketing + amountETHTreasury + amountETHCapital); payable(treasuryWallet).transfer(amountETHTreasury); _swapETHForCustomToken(amountETHMarketing, USDT, marketingWallet); _swapETHForCustomToken(amountETHCapital, USDT, capitalWallet); if (amountToLiquify > 0) { _addLiquidity(amountToLiquify, amountETHLiquidity); emit SwapAndLiquify(amountToSwap, amountETHLiquidity, amountToLiquify); } (bool dividendSuccess,) = address(dividendTracker).call{value: amountETHHolders}(""); if(dividendSuccess) { emit DividendsSent(amountETHHolders); } _totalFee = totalFeePrior; } function _swapETHForCustomToken(uint256 ethAmount, address token, address wallet) private { address[] memory path = new address[](2); path[0] = uniswapV2Router.WETH(); path[1] = token; uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value : ethAmount}( 0, // accept any amount of ETH path, address(wallet), block.timestamp ); } function _swapTokensForETH(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable liquidityWallet, block.timestamp ); } } contract REITDividendTracker is DividendPayingToken { using SafeMath for uint256; using SafeMathInt for int256; using IterableMapping for IterableMapping.Map; IterableMapping.Map private tokenHoldersMap; uint256 public lastProcessedIndex; mapping (address => bool) public excludedFromDividends; mapping (address => uint256) public lastClaimTimes; uint256 public claimWait; uint256 public minimumTokenBalanceForDividends; event ExcludeFromDividends(address indexed account); event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue); event Claim(address indexed account, uint256 amount, bool indexed automatic); constructor() DividendPayingToken("REIT_Dividend_Tracker", "REIT_Dividend_Tracker") { claimWait = 3600; minimumTokenBalanceForDividends = 0 * (10**18); } function _transfer(address, address, uint256) internal pure override { require(false, "REIT_Dividend_Tracker: No transfers allowed"); } function excludeFromDividends(address account) external onlyOwner { require(!excludedFromDividends[account]); excludedFromDividends[account] = true; _setBalance(account, 0); tokenHoldersMap.remove(account); emit ExcludeFromDividends(account); } function setTokenBalanceForDividends(uint256 newValue) external onlyOwner { require(minimumTokenBalanceForDividends != newValue, "REIT_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'."); minimumTokenBalanceForDividends = newValue; } function getNumberOfTokenHolders() external view returns(uint256) { return tokenHoldersMap.keys.length; } function setBalance(address payable account, uint256 newBalance) external onlyOwner { if(excludedFromDividends[account]) { return; } if(newBalance >= minimumTokenBalanceForDividends) { _setBalance(account, newBalance); tokenHoldersMap.set(account, newBalance); } else { _setBalance(account, 0); tokenHoldersMap.remove(account); } processAccount(account, true); } function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) { uint256 amount = _withdrawDividendOfUser(account); if(amount > 0) { lastClaimTimes[account] = block.timestamp; emit Claim(account, amount, automatic); return true; } return false; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract Creation Code
6104e761003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c806317e142d1146100715780634c60db9c14610097578063732a2ccf146100b9578063bc2b405c146100e6578063d1aa9e7e14610106578063deb3d89614610131575b600080fd5b61008461007f3660046103c4565b610143565b6040519081526020015b60405180910390f35b8180156100a357600080fd5b506100b76100b23660046103c4565b610191565b005b6100846100c73660046103c4565b6001600160a01b03166000908152600191909101602052604090205490565b8180156100f257600080fd5b506100b76101013660046103f0565b6102cc565b610119610114366004610425565b610375565b6040516001600160a01b03909116815260200161008e565b61008461013f366004610447565b5490565b6001600160a01b038116600090815260038301602052604081205460ff1661016e575060001961018b565b506001600160a01b03811660009081526002830160205260409020545b92915050565b6001600160a01b038116600090815260038301602052604090205460ff166101b7575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161020191610460565b9050600084600001828154811061021a5761021a610485565b60009182526020808320909101546001600160a01b0390811680845260028901909252604080842087905590871683528220919091558554909150819086908590811061026957610269610485565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905584548590806102a3576102a361049b565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6001600160a01b038216600090815260038401602052604090205460ff1615610311576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b600082600001828154811061038c5761038c610485565b6000918252602090912001546001600160a01b03169392505050565b80356001600160a01b03811681146103bf57600080fd5b919050565b600080604083850312156103d757600080fd5b823591506103e7602084016103a8565b90509250929050565b60008060006060848603121561040557600080fd5b83359250610415602085016103a8565b9150604084013590509250925092565b6000806040838503121561043857600080fd5b50508035926020909101359150565b60006020828403121561045957600080fd5b5035919050565b60008282101561048057634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212203aa770622a11d2ef40c486e7bdbc6dd89644fef9e133ea236dc6e6af27b7615764736f6c634300080d0033
Deployed Bytecode
0x735c7c9084847631f708d7141a149254c4308f5acb301460806040526004361061006c5760003560e01c806317e142d1146100715780634c60db9c14610097578063732a2ccf146100b9578063bc2b405c146100e6578063d1aa9e7e14610106578063deb3d89614610131575b600080fd5b61008461007f3660046103c4565b610143565b6040519081526020015b60405180910390f35b8180156100a357600080fd5b506100b76100b23660046103c4565b610191565b005b6100846100c73660046103c4565b6001600160a01b03166000908152600191909101602052604090205490565b8180156100f257600080fd5b506100b76101013660046103f0565b6102cc565b610119610114366004610425565b610375565b6040516001600160a01b03909116815260200161008e565b61008461013f366004610447565b5490565b6001600160a01b038116600090815260038301602052604081205460ff1661016e575060001961018b565b506001600160a01b03811660009081526002830160205260409020545b92915050565b6001600160a01b038116600090815260038301602052604090205460ff166101b7575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161020191610460565b9050600084600001828154811061021a5761021a610485565b60009182526020808320909101546001600160a01b0390811680845260028901909252604080842087905590871683528220919091558554909150819086908590811061026957610269610485565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905584548590806102a3576102a361049b565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b6001600160a01b038216600090815260038401602052604090205460ff1615610311576001600160a01b03821660009081526001840160205260409020819055505050565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b600082600001828154811061038c5761038c610485565b6000918252602090912001546001600160a01b03169392505050565b80356001600160a01b03811681146103bf57600080fd5b919050565b600080604083850312156103d757600080fd5b823591506103e7602084016103a8565b90509250929050565b60008060006060848603121561040557600080fd5b83359250610415602085016103a8565b9150604084013590509250925092565b6000806040838503121561043857600080fd5b50508035926020909101359150565b60006020828403121561045957600080fd5b5035919050565b60008282101561048057634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212203aa770622a11d2ef40c486e7bdbc6dd89644fef9e133ea236dc6e6af27b7615764736f6c634300080d0033
Deployed Bytecode Sourcemap
9392:1331:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9678:165;;;;;;:::i;:::-;;:::i;:::-;;;624:25:1;;;612:2;597:18;9678:165:0;;;;;;;;10325:395;;;;;;;;;;-1:-1:-1;10325:395:0;;;;;:::i;:::-;;:::i;:::-;;9571:102;;;;;;:::i;:::-;-1:-1:-1;;;;;9653:15:0;9635:4;9653:15;;;:10;;;;;:15;;;;;;;9571:102;10062:258;;;;;;;;;;-1:-1:-1;10062:258:0;;;;;:::i;:::-;;:::i;9848:114::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1644:32:1;;;1626:51;;1614:2;1599:18;9848:114:0;1472:211:1;9967:90:0;;;;;;:::i;:::-;10037:15;;9967:90;9678:165;-1:-1:-1;;;;;9766:17:0;;9752:3;9766:17;;;:12;;;:17;;;;;;;;9762:44;;-1:-1:-1;;;9791:9:0;;9762:44;-1:-1:-1;;;;;;9821:16:0;;;;;;:11;;;:16;;;;;;9678:165;;;;;:::o;10325:395::-;-1:-1:-1;;;;;10388:17:0;;;;;;:12;;;:17;;;;;;;;10383:42;;10325:395;;:::o;10383:42::-;-1:-1:-1;;;;;10438:17:0;;;;;;:12;;;:17;;;;;;;;10431:24;;-1:-1:-1;;10431:24:0;;;;10467:10;;;:15;;;;;10460:22;;;10502:11;;;:16;;;;;;10540:15;;10502:16;;10438:17;10540:19;;;:::i;:::-;10523:36;;10564:15;10582:3;:8;;10591:9;10582:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;10582:19:0;;;10608:20;;;:11;;;:20;;;;;;;:28;;;10648:16;;;;;;;10641:23;;;;10671:15;;10582:19;;-1:-1:-1;10582:19:0;;10608:3;;10631:5;;10671:15;;;;;;:::i;:::-;;;;;;;;;;:25;;-1:-1:-1;;;;;;10671:25:0;-1:-1:-1;;;;;10671:25:0;;;;;;;;;;10701:14;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;10701:14:0;;;;;-1:-1:-1;;;;;;10701:14:0;;;;;;-1:-1:-1;;;;;10325:395:0:o;10062:258::-;-1:-1:-1;;;;;10131:17:0;;;;;;:12;;;:17;;;;;;;;10127:189;;;-1:-1:-1;;;;;10156:15:0;;;;;;:10;;;:15;;;;;:21;;;10062:258;;;:::o;10127:189::-;-1:-1:-1;;;;;10195:17:0;;;;;;:12;;;:17;;;;;;;;:24;;-1:-1:-1;;10195:24:0;10215:4;10195:24;;;;;;10225:10;;;:15;;;;;:21;;;10271:15;;10252:11;;;:16;;;;;:34;;;10292:18;;;;;;;;;;;;-1:-1:-1;;;;;;10292:18:0;;;;;;10062:258;;;:::o;9848:114::-;9921:7;9942:3;:8;;9951:5;9942:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;9942:15:0;;9848:114;-1:-1:-1;;;9848:114:0:o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:275::-;281:6;289;342:2;330:9;321:7;317:23;313:32;310:52;;;358:1;355;348:12;310:52;394:9;381:23;371:33;;423:38;457:2;446:9;442:18;423:38;:::i;:::-;413:48;;192:275;;;;;:::o;850:343::-;948:6;956;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1069:9;1056:23;1046:33;;1098:38;1132:2;1121:9;1117:18;1098:38;:::i;:::-;1088:48;;1183:2;1172:9;1168:18;1155:32;1145:42;;850:343;;;;;:::o;1198:269::-;1287:6;1295;1348:2;1336:9;1327:7;1323:23;1319:32;1316:52;;;1364:1;1361;1354:12;1316:52;-1:-1:-1;;1387:23:1;;;1457:2;1442:18;;;1429:32;;-1:-1:-1;1198:269:1:o;1688:201::-;1768:6;1821:2;1809:9;1800:7;1796:23;1792:32;1789:52;;;1837:1;1834;1827:12;1789:52;-1:-1:-1;1860:23:1;;1688:201;-1:-1:-1;1688:201:1:o;1894:222::-;1934:4;1962:1;1959;1956:8;1953:131;;;2006:10;2001:3;1997:20;1994:1;1987:31;2041:4;2038:1;2031:15;2069:4;2066:1;2059:15;1953:131;-1:-1:-1;2101:9:1;;1894:222::o;2121:127::-;2182:10;2177:3;2173:20;2170:1;2163:31;2213:4;2210:1;2203:15;2237:4;2234:1;2227:15;2253:127;2314:10;2309:3;2305:20;2302:1;2295:31;2345:4;2342:1;2335:15;2369:4;2366:1;2359:15
Swarm Source
ipfs://3aa770622a11d2ef40c486e7bdbc6dd89644fef9e133ea236dc6e6af27b76157
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.