Multicall

Description:

Multi-signature wallet contract requiring multiple confirmations for transaction execution.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "src/Multicall.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
                                                                                                                                               
/*

☞ https://ethos.vision
???? https://x.com/Ethereum_OS
✌︎ https://t.me/ethosportal

Welcome to the Ethereum Operating System — the first-of-its-kind revenue generating DeFi pumpware
built as a social DeFi sandbox that is filled with composable elements so you can create, trade,
communicate, and participate—all in one place.


                                                      @                               
                                                     @@:                              
                                                    @@@::                             
                                                  ==@@@::::                           
                                                 ===@@@:::::                          
                                                ===+@@+::::::                         
                                               ====@@@::::::::                        
                                              =====@@@:::::::::                       
                                             ======@@@::::::::::                      
                                            =======@@@:::::::::::                     
                                           =======*@@+::::::::::::                    
                                          ========@@@::::::::::::::                   
                                        ==========@@@::::::::::::::::                 
                                       ===========@@@:::::::::::::::::                
                                      ============@@@::::::::::::::::::               
                                     ============*@@=:::::::::::::::::::              
                                    =============@@@:::::::::::::::::::::             
                                   =====@@@======@@@::::::::@@@:::::::::::            
                                  ======@@@======@@@::::::::@@@::::::::::::           
                                 =======@@@======@@@::::::::@@@:::::::::::::          
                                =================@@=:::::::::::::::::::::::::         
                              ==================%@@::::::::::::::::::::::::::::       
                             ===================@@@:::::::::::::::::::::::::::::      
                            ====================@@@::::::::::::::::::::::::::::::     
                           =====================@@@:::::::::::::::::::::::::::::::    
                          =====================+@@-::::::::::::::::::::::::::::::::   
                         ======================@@@@@@@@@@@@@@*::::::::::::::::::::::  
                        =======================@@@@@@@@@@@@@@:::::::::::::::::::::::: 
                       ===================================@@@:::::::::::::::::::::::::
                         =================================@@@:::::::::::::::::::::::  
                          =========@@@@===================@@@::::::::@@@*::::::::::   
                           =========@@@@@@@==============*@@:::::%@@@@@:::::::::::    
                             ===========@@@@@@@@@@@#*+=+*@@@@@@@@@@@-:::::::::::      
                              ==============+@@@@@@@@@@@@@@@@@@@:::::::::::::::       
                               ==========================@@@::::::::::::::::::        
                                 ========================@@@::::::::::::::::          
                                  ======================@@@::::::::::::::::           
                                   =====================@@@:::::::::::::::            
                                     ===================@@@:::::::::::::              
                                      ==================@@@::::::::::::               
                                       ================*@@=:::::::::::                
                                         ==============@@@::::::::::                  
                                          =============@@@:::::::::                   
                                           ============@@@::::::::                    
                                             ==========@@#::::::                      
                                              ========@@@::::::                       
                                               =======@@@:::::                        
                                                 =====@@@:::                          
                                                  ====@@@::                           
                                                   ==*@@-:                            
                                                    =@@@:                             
                                                      @                 
                                                

                        
                                         @@@                                                                 
 @@@@@@@@@@@@@@@@@@@                 @@@@@@@                            =======                   ========   
  @@@@@@@@@@@@@@@@@@                   @@@@@                         ====     =====            =====   ===== 
    @@@@@         @@                   @@@@                       =====          ====         ====       === 
    @@@@@          @                   @@@@                      ====             =====      ====         ===
    @@@@@                              @@@@                     ====               =====     ====          ==
    @@@@@                  @@          @@@@                    =====               =====     =====           
    @@@@@       @        @@@@          @@@@      @             =====                =====    =======         
    @@@@@       @@     @@@@@@@@@@@@    @@@@  @@@@@@@@         =====                 =====     =========      
    @@@@@@@@@@@@@        @@@@          @@@@@@    @@@@@        =====                 =====       =========    
    @@@@@      @@        @@@@          @@@@@      @@@@@       =====                 =====         =========  
    @@@@@       @@       @@@@          @@@@        @@@@       =====                 =====           ======== 
    @@@@@                @@@@          @@@@        @@@@       ======                =====              ======
    @@@@@                @@@@          @@@@        @@@@        =====               =====                =====
    @@@@@                @@@@          @@@@        @@@@         =====              =====    ==          =====
    @@@@@           @@   @@@@          @@@@        @@@@          ====             =====     ===         =====
    @@@@@          @@@   @@@@@         @@@@        @@@@           =====          ====       ====        ==== 
   @@@@@@@@@@@@@@@@@@    @@@@@@@@@@   @@@@@@      @@@@@@            =====      ====          =====    =====  
@@@@@@@@@@@@@@@@@@@@       @@@@@@    @@@@@@@@@  @@@@@@@@@              ==========              =========     

   
*/ 

import "interfaces/IEOS20.sol";
import "interfaces/IUniswapV2Router02.sol";
import "interfaces/IUniswapV2Pair.sol";
import "src/Booster.sol";
import "src/InfoService.sol";
import "src/Lock.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

interface IEthOS {
    function initialLiquidity(address token) external view returns (uint256);
    function initialTokensLp(address token) external view returns (uint256);
    function calculatePump(address _token) external view returns (uint256 burnAmount, uint256 pumpNow, uint256 desiredPrice, uint256 price);
    function checkDeathTimeStamp(address _token, address _user) external view returns (uint256);
    function getTimeLeft(address _token) external view returns (uint256);
    function isAlive(address _token, address _user) external view returns (bool);
    function calculateMaxSell(address _token) external view returns (uint256);
    function getOwnerProgressLeft(address _token) external view returns (uint256);
    function minDeathTime() external view returns (uint256);
    function maxDeathTime() external view returns (uint256);
    function minBuy(address _token) external view returns (uint256);
    function maxWallet(address _token) external view returns (uint256);
    function eosDeployed(address _token) external view returns (bool);
    function infoUpdatePrice() external view returns (uint256);
    function getPriceForUpdate(uint256 _price) external view returns (uint256);
    function viewTokensList() external view returns (address[] memory);
}

contract Multicall is Ownable {
  // Set up
    Booster public booster;
    InfoService public infoService;
    IEthOS public ethOS;
    Lock public lock;
    function setLock(address _lock) public onlyOwner {
        lock = Lock(payable(_lock));
    }
    function setBooster(address _booster) public onlyOwner {
       booster = Booster(payable(_booster));
    }
    function setInfoService(address _infoService) public onlyOwner {
        infoService = InfoService(payable(_infoService));
    }
    function setEthOS(address _ethOS) public onlyOwner {
        ethOS = IEthOS(payable(_ethOS));
    }

 
  // Return

    struct TokenInfo {
        // Info
        string name;
        string symbol;
        string description;
        string website;
        string socials;
        string image;
        string chat;
        uint256 deploymentBlock;
        uint256 timeCreated;
        address owner;
        // Specs
        uint256 reflectionsPercent;
        uint256 liquidityPercent;
        uint256 winAmountPercent;
        // Toogles
        bool tradingOpen;
        bool yieldOn;
        bool gambleOn;
        bool autoLpOn;
        bool reaperOn;
        // Metrics
        uint256 totalSupply;
        uint112 reserve0;
        uint112 reserve1;
        uint256 price;
        // Pump
        uint256 burnAmount;
        uint256 pumpAmount;
        uint256 pumpPerSecond;
        uint256 desiredPriceNow;
        uint256 maxDailyPumpRate;
        uint256 lastPumpTimestamp;
        bool pumpIsPublic;
        // Reflect
        uint256 ethAccumulated;
        uint256 ethAccumulatedForUi;
        uint256 ethWithdrawn;
        uint256 totalEthDistributed;
        // Gamble
        uint256 timeLeft;
        uint256 cooldown;
        uint256 winAmount;
        address currentWinner;
        uint256 minBuy;
        // LP
        uint256 lpTotalSupply;
        uint256 lpAdded;
        // Reaper
        bool isAlive;
        uint256 deathTimeStamp;
        uint256 deathTime;
        uint256 firstReceivedBlockTimeStamp;
        // Burn
        uint256 burnPercentageBuy;
        uint256 burnPercentageSell;
        // Ponzi
        uint256 apy;
        uint256 pendingPonziTokens;
        // Balances
        uint256 boosterAllowance;
        uint256 userEOSBalance;
        uint256 userBalance;
        uint256 allowance;
        // uint256 contractBalance;
        address pairAddress;
        uint256 pairBalance;
        uint256 tokensOnCA;
        // Shares
        uint256 share;
        uint256 totalShares;
        // Dev
        uint256 ethOnCA;
        uint256 devFeePercent;
        uint256 devClaimableEth;  
        uint256 devWithdrawn;
        address devAddress;
        // UI
        uint256 ethWithdrawnForUi;
        uint256 initialLiquidity;
        uint256 initialTokensLp;
        uint256 tokensBurned;
        uint256 devProgress;
        uint256 devDeadline;
        uint256 settingLockTime;
        uint256 volumeAmount;
        uint256 minDeathTime;  
        // uint256 maxDeathTime; 
        uint256 maxSell;
        uint256 maxWallet;
        uint256 maxWalletPercent;
        // Boost
        uint256 ethPrice;
        uint256 eosPriceEth;
        uint256 eosPriceInUsd;
        uint256 costPerSecondWithPrice;
        uint256 tokensForHourBoost;
        uint256 predictBoostSeconds;
 
        uint256 boostAmount;      
        uint256 boosterUserCount;
        uint256 boostApyMultiplier;
        uint256 boostApyDenominator;
        
        uint256 userBoostBonuses;
        uint256 pendingBonusEOS;
        uint256 bonusTokensPerSecond;
        uint256 infoUpdatePrice; 
        uint256 getPriceForUpdate;

        bool eosDeployed;
        uint256 totalBurned;
        uint256 burnedViaUpdates;
        uint256 allowanceInfoService;

        uint256 burnedViaReactions;
        uint256 reactionAmount1;
        uint256 reactionAmount2;
        uint256 reactionAmount3;
        uint256 reactionAmount4;
        uint256 reactionAmount5;
        uint256 reactionAmount6;
        uint256 reactionAmount7;
        uint256 reactionAmount8;

        bool isFunded;
        bool isLpLocked;
        bool isSettingsLocked;

       

    }
  // Multicall
    function multicall(address tokenAddress, address user) public view returns (TokenInfo memory) {
        IEOS20 token = IEOS20(tokenAddress);
        // IEthOS ethOs = IEthOS(token.ETH_OS());
        IEthOS ethOs = IEthOS(ethOS);
        IUniswapV2Pair pair = IUniswapV2Pair(token.uniswapV2Pair());
        (uint112 reserve0, uint112 reserve1) = token.getReserves();
        (uint256 burnAmount, uint256 pumpAmount, uint256 pumpPerSecond, uint256 desiredPriceNow) = ethOs.calculatePump(address(token));

        return TokenInfo({
            // Info
            name: token.name(),
            symbol: token.symbol(),
            // Socials
            description: infoService.Description(tokenAddress),
            website: infoService.Website(tokenAddress),
            socials: infoService.Socials(tokenAddress),
            image: infoService.Image(tokenAddress),
            chat: infoService.Chat(tokenAddress),
            // Creation 
            timeCreated: token.timeCreated(),
            deploymentBlock: token.deploymentBlock(),
            owner: token.owner(),
            // Specs
            reflectionsPercent: token.reflectionsPercent(),
            liquidityPercent: token.liquidityPercent(),
            winAmountPercent: token.winAmountPercent(),
            // Toggles
            tradingOpen: token.tradingOpen(),
            yieldOn: token.yieldOn(),
            gambleOn: token.winAmountPercent() > 0 ? true : false,
            autoLpOn: token.liquidityPercent() > 0 ? true : false,
            reaperOn: token.deathTime() > 0 ? true : false,
            // Metrics
            totalSupply: token.totalSupply(),
            reserve0: reserve0,
            reserve1: reserve1,
            price: IUniswapV2Router02(token.uniswapV2Router()).quote(1e18, reserve0, reserve1),
            // Pump
            burnAmount: burnAmount,
            pumpAmount: pumpAmount,
            pumpPerSecond: pumpPerSecond,
            desiredPriceNow: desiredPriceNow,
            maxDailyPumpRate: token.maxDailyPumpRate(),
            lastPumpTimestamp: token.lastPumpTimestamp(),
            pumpIsPublic: token.pumpIsPublic(),
            //Reflect 
            ethWithdrawn: token.ethWithdrawn(user),
            totalEthDistributed: token.totalEthDistributed(),
            ethAccumulatedForUi: token.ethAccumulatedForUi(user),
            ethAccumulated: token.ethAccumulated(user),
            //Gamble
            timeLeft: ethOs.getTimeLeft(tokenAddress),
            cooldown: token.cooldown(),
            winAmount: token.winAmount(),
            currentWinner: token.currentWinner(),
            minBuy: ethOs.minBuy(tokenAddress),           
            // LP
            lpTotalSupply: pair.totalSupply(),
            lpAdded: token.lpAdded(),
            pairAddress: address(pair),
            //Reaper
            isAlive: ethOs.isAlive(tokenAddress, user),
            deathTimeStamp: ethOs.checkDeathTimeStamp(tokenAddress, user),
            deathTime: token.deathTime(),
            firstReceivedBlockTimeStamp: token.firstReceivedBlockTimeStamp(user),
            // Burn
            burnPercentageBuy: token.burnPercentageBuy(),
            burnPercentageSell: token.burnPercentageSell(),
            // Ponzi
            apy: token.apy(),
            pendingPonziTokens: token.pendingPonziTokens(user),
            // Balances
            userBalance: token.balanceOf(user),
            allowance: token.allowance(user, address(token.uniswapV2Router())),
            pairBalance: token.balanceOf(address(pair)),
            tokensOnCA: token.balanceOf(tokenAddress),
            // Shares
            share: token.share(user),
            totalShares: token.totalShares(),
            ethOnCA: address(token).balance,
            // Dev
            devFeePercent: token.devFeePercent(), // 5 / 100 = 5%
            devClaimableEth: token.devClaimableEth(),
            devWithdrawn: token.devWithdrawn(),
            devAddress: token.owner(),
            // Balances
            userEOSBalance: IEOS20(booster.mainToken()).balanceOf(user),
            boosterAllowance: IEOS20(booster.mainToken()).allowance(user, address(booster)),
            // UI
            tokensBurned: booster.tokensBurned(tokenAddress),
            ethWithdrawnForUi: token.ethWithdrawnForUi(user),
            initialLiquidity: ethOs.initialLiquidity(tokenAddress),
            initialTokensLp: ethOs.initialTokensLp(tokenAddress),
            devProgress: ethOs.getOwnerProgressLeft(tokenAddress),
            devDeadline: lock.devDeadline(tokenAddress),
            settingLockTime: lock.settingLockTime(tokenAddress),
            maxWallet: ethOs.maxWallet(tokenAddress),
            maxSell: ethOs.calculateMaxSell(tokenAddress),
            maxWalletPercent: token.maxWalletPercent(),
            volumeAmount: token.volumeAmount(),
            minDeathTime: ethOs.minDeathTime(),
            // maxDeathTime: ethOs.maxDeathTime(),
            // Boost mech
            ethPrice: booster.getEthPrice(),
            eosPriceEth: booster.getEosPriceEth(),
            eosPriceInUsd: booster.getEosPriceInUsd(),
            costPerSecondWithPrice: booster.getCostPerSecondWithPrice(),
            tokensForHourBoost: booster.getTokensForHourBoost(),
            predictBoostSeconds: booster.predictBoostSeconds(1e18),
            boosterUserCount: booster.boosterUserCount(tokenAddress),
            boostAmount: booster.getBoostDuration(tokenAddress),
            // Boost apy
            boostApyMultiplier: booster.boostApyMultiplier(),
            boostApyDenominator: booster.boostApyDenominator(),
            userBoostBonuses: booster.userBoostBonuses(user),
            pendingBonusEOS: booster.pendingBonusEOS(user),
            bonusTokensPerSecond: booster.viewBonusTokensPerSecond(user),
            infoUpdatePrice: infoService.infoUpdatePrice(),
            getPriceForUpdate: infoService.getPriceForUpdate(infoService.infoUpdatePrice()),
            // Verified
            eosDeployed: ethOs.eosDeployed(tokenAddress),
            
            totalBurned: booster.totalBurned(),
            burnedViaUpdates: infoService.burnedViaUpdates(),

            allowanceInfoService: IEOS20(booster.mainToken()).allowance(user, address(infoService)),
            burnedViaReactions: infoService.burnedViaReactions(),

            reactionAmount1: infoService.reactionAmount(tokenAddress, 1),
            reactionAmount2: infoService.reactionAmount(tokenAddress, 2),
            reactionAmount3: infoService.reactionAmount(tokenAddress, 3),
            reactionAmount4: infoService.reactionAmount(tokenAddress, 4),
            reactionAmount5: infoService.reactionAmount(tokenAddress, 5),
            reactionAmount6: infoService.reactionAmount(tokenAddress, 6),
            reactionAmount7: infoService.reactionAmount(tokenAddress, 7),
            reactionAmount8: infoService.reactionAmount(tokenAddress, 8),

            isFunded: lock.isFunded(tokenAddress),
            isLpLocked: lock.isLpLocked(tokenAddress),
            isSettingsLocked: lock.isSettingsLocked(tokenAddress)

        });
    }  

    struct TokenInfoSlim {
        // Info
        string name;
        string symbol;
        string description;
        string website;
        string socials;
        string image;
        string chat;
        uint256 timeCreated;
        // Specs
        uint256 reflectionsPercent;
        uint256 maxDailyPumpRate;
        uint256 liquidityPercent;
        uint256 winAmountPercent;
        uint256 deathTime;
        uint256 burnPercentageBuy;
        uint256 burnPercentageSell;
        uint256 apy;      
        uint256 devFeePercent;
        // Metrics
        uint256 totalSupply;
        uint112 reserve0;
        uint112 reserve1;
        uint256 price;
        // Status
        uint256 userBalance;
        uint256 devDeadline;
        uint256 settingLockTime;
        uint256 boostAmount;      
        bool isFunded;
        bool isLpLocked;
        bool isSettingsLocked;
    
    }
    
    function multicallSlim(address tokenAddress, address user) public view returns (TokenInfoSlim memory) {
        IEOS20 token = IEOS20(tokenAddress);
        (uint112 reserve0, uint112 reserve1) = token.getReserves();
        return TokenInfoSlim({
            name: token.name(),
            symbol: token.symbol(),
            description: infoService.Description(tokenAddress),
            website: infoService.Website(tokenAddress),
            socials: infoService.Socials(tokenAddress),
            image: infoService.Image(tokenAddress),
            chat: infoService.Chat(tokenAddress),
            timeCreated: token.timeCreated(),
            reflectionsPercent: token.reflectionsPercent(),
            maxDailyPumpRate: token.maxDailyPumpRate(),
            liquidityPercent: token.liquidityPercent(),
            winAmountPercent: token.winAmountPercent(),
            deathTime: token.deathTime(),
            burnPercentageBuy: token.burnPercentageBuy(),
            burnPercentageSell: token.burnPercentageSell(),
            apy: token.apy(),
            devFeePercent: token.devFeePercent(),
            totalSupply: token.totalSupply(),
            reserve0: reserve0,
            reserve1: reserve1,
            price: IUniswapV2Router02(token.uniswapV2Router()).quote(1e18, reserve0, reserve1),
            userBalance: token.balanceOf(user),
            devDeadline: lock.devDeadline(tokenAddress),
            settingLockTime: lock.settingLockTime(tokenAddress),
            boostAmount: booster.getBoostDuration(tokenAddress),
            isFunded: lock.isFunded(tokenAddress),
            isLpLocked: lock.isLpLocked(tokenAddress),
            isSettingsLocked: lock.isSettingsLocked(tokenAddress)
        });
    }

    // Return
    struct userBalancesInfo {
        address token;
        uint256 balance;

    }
  // Multicall
    function userBalances(address user) public view returns (userBalancesInfo[] memory balances) {
        address[] memory tokenList = ethOS.viewTokensList();
    
        // First pass: count tokens with balance > 0
        uint256 count = 0;
        for (uint256 i = 0; i < tokenList.length; i++) {
            if(IERC20(tokenList[i]).balanceOf(user) > 0){
                count++;
            }
        }
        
        // Create array with exact size needed
        balances = new userBalancesInfo[](count);
        uint256 index = 0;
        
        // Second pass: populate array with tokens that have balance > 0
        for (uint256 i = 0; i < tokenList.length; i++) {
            address tokenAddress = tokenList[i];
            uint256 balance = IERC20(tokenAddress).balanceOf(user);
            if(balance > 0){
                balances[index] = userBalancesInfo(tokenAddress, balance);
                index++;
            }
        }
    
    return balances;
   }
}"
    },
    "interfaces/IEOS20.sol": {
      "content": "pragma solidity ^0.8.0;
interface IEOS20 {
  // FOR ETH OS
    function initializeToken(address owner, address router, address deployer, uint256 _devDeadline) external;
    function setSpecs(
        uint256 _devFeePercent,
        uint256 _maxDailyPumpRate,
        uint256 _reflectionsPercent,
        uint256 _liquidityPercent,
        uint256 _reaperDeathTime,
        uint256 _cooldown,
        uint256 _winAmountPercent,
        uint256 _apy,
        uint256 _burnPercentBuy,
        uint256 _burnPercentSell
    ) external;    
    function transferOwnershipOfTheToken(address) external;
    function openTrading(bool _tradingOpen) external;
    
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function owner() external view returns (address);
    function timeCreated() external view returns (uint256);
    function deploymentBlock() external view returns (uint);
    function uniswapV2Pair() external view returns (address);
    function uniswapV2Router() external view returns (address);
    
    function antiBot() external view returns (bool);
    function maxWalletPercent() external view returns (uint);
    
    function toggleYield(bool toggle) external;
    function tradingOpen() external view returns (bool);
    function yieldOn() external view returns (bool);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address _to, uint256 _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function approve(address _spender, uint256 _value) external returns (bool success);

    function totalShares() external view returns (uint256);
    function burn(uint256 _amount) external;
    function getReserves() external view returns (uint112, uint112);
    function getQuote(uint256 amountA, uint256 reserveA, uint256 reserveB) external view returns (uint256);
    function lastBuyTimestamp() external view returns (uint256);

    function reflectionsPercent() external view returns (uint256);
    function liquidityPercent() external view returns (uint256);
    function winAmountPercent() external view returns (uint256);
    function devFeePercent() external view returns (uint256);
    function burnPercentageBuy() external view returns (uint256);
    function burnPercentageSell() external view returns (uint256);
    function deathTime() external view returns (uint256);
    function apy() external view returns (uint256);

    function share(address user) external view returns (uint256);
    function shares(address user) external view returns (uint256);
    function ethAccumulated(address user) external view returns (uint256);
    function ethAccumulatedForUi(address _user) external view returns (uint256);
    function ethWithdrawn(address user) external view returns (uint256);
    function ethWithdrawnForUi(address user) external view returns (uint256);
    function totalEthDistributed() external view returns (uint256);
    function devWithdrawn() external view returns (uint256);
    function lpAdded() external view returns (uint256);

    function pendingPonziTokens(address _user) external view returns (uint256);
    function devClaimableEth() external view returns (uint256);
    function lastPumpTimestamp() external view returns (uint256);
    function maxDailyPumpRate() external view returns (uint256);
    function pumpIsPublic() external view returns (bool);

    function firstReceivedBlockTimeStamp(address) external view returns (uint256);
    function immortal(address _user) external view returns (bool);
    function deathStartedTimestamp() external view returns (uint256);
   
    function cooldown() external view returns (uint256);
    function winAmount() external view returns (uint256);
    function currentWinner() external view returns (address);

    function ponziStart() external view returns (uint256);
    function mintBonus(uint256 amount, address _user) external;
    
    function setMaxWallet(bool _antiBot, uint256 _maxWallet) external;
    function volumeAmount() external view returns (uint256);
    
}

"
    },
    "interfaces/IUniswapV2Router02.sol": {
      "content": "pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
     function launch(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        uint8 buyLpFee, 
        uint8 sellLpFee, 
        uint8 buyProtocolFee, 
        uint8 sellProtocolFee, 
        address protocolAddress
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
}
"
    },
    "interfaces/IUniswapV2Pair.sol": {
      "content": "pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}"
    },
    "src/Booster.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
                                                                                                                                               
/*

☞ https://ethos.vision
???? https://x.com/Ethereum_OS
✌︎ https://t.me/ethosportal

Welcome to the Ethereum Operating System — the first-of-its-kind revenue generating DeFi pumpware
built as a social DeFi sandbox that is filled with composable elements so you can create, trade,
communicate, and participate—all in one place.


                                                      @                               
                                                     @@:                              
                                                    @@@::                             
                                                  ==@@@::::                           
                                                 ===@@@:::::                          
                                                ===+@@+::::::                         
                                               ====@@@::::::::                        
                                              =====@@@:::::::::                       
                                             ======@@@::::::::::                      
                                            =======@@@:::::::::::                     
                                           =======*@@+::::::::::::                    
                                          ========@@@::::::::::::::                   
                                        ==========@@@::::::::::::::::                 
                                       ===========@@@:::::::::::::::::                
                                      ============@@@::::::::::::::::::               
                                     ============*@@=:::::::::::::::::::              
                                    =============@@@:::::::::::::::::::::             
                                   =====@@@======@@@::::::::@@@:::::::::::            
                                  ======@@@======@@@::::::::@@@::::::::::::           
                                 =======@@@======@@@::::::::@@@:::::::::::::          
                                =================@@=:::::::::::::::::::::::::         
                              ==================%@@::::::::::::::::::::::::::::       
                             ===================@@@:::::::::::::::::::::::::::::      
                            ====================@@@::::::::::::::::::::::::::::::     
                           =====================@@@:::::::::::::::::::::::::::::::    
                          =====================+@@-::::::::::::::::::::::::::::::::   
                         ======================@@@@@@@@@@@@@@*::::::::::::::::::::::  
                        =======================@@@@@@@@@@@@@@:::::::::::::::::::::::: 
                       ===================================@@@:::::::::::::::::::::::::
                         =================================@@@:::::::::::::::::::::::  
                          =========@@@@===================@@@::::::::@@@*::::::::::   
                           =========@@@@@@@==============*@@:::::%@@@@@:::::::::::    
                             ===========@@@@@@@@@@@#*+=+*@@@@@@@@@@@-:::::::::::      
                              ==============+@@@@@@@@@@@@@@@@@@@:::::::::::::::       
                               ==========================@@@::::::::::::::::::        
                                 ========================@@@::::::::::::::::          
                                  ======================@@@::::::::::::::::           
                                   =====================@@@:::::::::::::::            
                                     ===================@@@:::::::::::::              
                                      ==================@@@::::::::::::               
                                       ================*@@=:::::::::::                
                                         ==============@@@::::::::::                  
                                          =============@@@:::::::::                   
                                           ============@@@::::::::                    
                                             ==========@@#::::::                      
                                              ========@@@::::::                       
                                               =======@@@:::::                        
                                                 =====@@@:::                          
                                                  ====@@@::                           
                                                   ==*@@-:                            
                                                    =@@@:                             
                                                      @                 
                                                

                        
                                         @@@                                                                 
 @@@@@@@@@@@@@@@@@@@                 @@@@@@@                            =======                   ========   
  @@@@@@@@@@@@@@@@@@                   @@@@@                         ====     =====            =====   ===== 
    @@@@@         @@                   @@@@                       =====          ====         ====       === 
    @@@@@          @                   @@@@                      ====             =====      ====         ===
    @@@@@                              @@@@                     ====               =====     ====          ==
    @@@@@                  @@          @@@@                    =====               =====     =====           
    @@@@@       @        @@@@          @@@@      @             =====                =====    =======         
    @@@@@       @@     @@@@@@@@@@@@    @@@@  @@@@@@@@         =====                 =====     =========      
    @@@@@@@@@@@@@        @@@@          @@@@@@    @@@@@        =====                 =====       =========    
    @@@@@      @@        @@@@          @@@@@      @@@@@       =====                 =====         =========  
    @@@@@       @@       @@@@          @@@@        @@@@       =====                 =====           ======== 
    @@@@@                @@@@          @@@@        @@@@       ======                =====              ======
    @@@@@                @@@@          @@@@        @@@@        =====               =====                =====
    @@@@@                @@@@          @@@@        @@@@         =====              =====    ==          =====
    @@@@@           @@   @@@@          @@@@        @@@@          ====             =====     ===         =====
    @@@@@          @@@   @@@@@         @@@@        @@@@           =====          ====       ====        ==== 
   @@@@@@@@@@@@@@@@@@    @@@@@@@@@@   @@@@@@      @@@@@@            =====      ====          =====    =====  
@@@@@@@@@@@@@@@@@@@@       @@@@@@    @@@@@@@@@  @@@@@@@@@              ==========              =========     

   
*/ 

import "@openzeppelin/contracts/access/Ownable.sol";
import "../interfaces/IEOS20.sol";

interface IEthPrice {
    function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}

contract Booster is Ownable {   
  // Contracts States Mappings Events
    IEOS20 public mainToken;
    IEthPrice public ethUsdFeed;

    uint updateTimeForEthPrice = 4 days;
   
    uint256 public boostApyMultiplier = 20;
    uint256 public boostApyDenominator = 1;

    uint256 public totalBurned; 
    uint public hourCost = 3e18; // 1 dollar
   
    mapping(address => uint256) public boostStartTime; // Effective start time
    mapping(address => uint256) public boostSeconds;
    mapping(address => uint256) public tokensBurned;
    mapping(uint => mapping(address => address)) public boosterUser; // Effective end time
    mapping(address => uint256) public boosterUserCount;
    mapping(address => uint256) public lastTimeClaimedBonus;
    mapping(address => uint256) public userBoostBonuses;
    mapping(address => uint256) public savedBonusPonziTokens;
   
    event BoostApplied(address indexed token, uint256 burnAmount);

    mapping(address => uint256) public usdSpentOnBoost;
    
    constructor() {
        ethUsdFeed = IEthPrice(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); // ETH/USD on Ethereum mainnet
    }

  // View

    function getEthPrice() public view returns (uint) {
        (uint80 roundId, int256 price, , uint256 updatedAt, uint80 answeredInRound) = ethUsdFeed.latestRoundData();
        require(price > 0, "bad price");
        require(answeredInRound >= roundId, "stale round");
        require(updatedAt != 0 && block.timestamp - updatedAt < updateTimeForEthPrice, "stale price");
        return uint(price);
    }
    function getEosPriceEth() public view returns (uint) {
        (uint112 reserve0, uint112 reserve1) = mainToken.getReserves();
        return mainToken.getQuote(1e18, reserve0, reserve1);
    }
    function getEosPriceInUsd() public view returns (uint) {
        return getEosPriceEth() * getEthPrice()/ 1e8;
    }
    function getCostPerSecondWithPrice() public view returns (uint) {
        return hourCost / 3600;
    }
    function getTokensForHourBoost() public view returns (uint) {
        return 1e18 / getEosPriceInUsd() * 1e18;
    }
    function predictBoostSeconds(uint amount) public view returns (uint) {
        return (amount * getEosPriceInUsd()) / getCostPerSecondWithPrice() / 1e18;
    }
  // Boost
    function boostToken(address _token, uint256 _burnAmount) external {
        require(_burnAmount > 0, "Amount must be greater than 0");
        require(predictBoostSeconds(_burnAmount) > 1, "Amount must greater or equal to boost second cost.");
        require(_token != address(0), "Invalid token address");
        mainToken.transferFrom(msg.sender, address(this), _burnAmount);
        mainToken.burn(_burnAmount);

        if (getBoostDuration(_token) > 0) {
            boostSeconds[_token] += predictBoostSeconds(_burnAmount);
        } else {
            boostStartTime[_token] = block.timestamp;
            boostSeconds[_token] = predictBoostSeconds(_burnAmount);
        }
        
        usdSpentOnBoost[_token] += _burnAmount * getEosPriceInUsd() / 1e18;
        tokensBurned[_token] += _burnAmount;
        totalBurned += _burnAmount;
        boosterUserCount[_token]++;
        boosterUser[boosterUserCount[_token]][_token] = msg.sender;

        if(pendingBonusEOS(msg.sender) > 0) {
            savedBonusPonziTokens[msg.sender] = pendingBonusEOS(msg.sender);
        }
        lastTimeClaimedBonus[msg.sender] = block.timestamp;
        userBoostBonuses[msg.sender] += _burnAmount;

        emit BoostApplied(_token, _burnAmount);
    }
    function getBoostDuration(address _token) public view returns (uint256) {
        if (boostStartTime[_token] != 0 && boostSeconds[_token] != 0) {
            if (boostStartTime[_token] + boostSeconds[_token] > block.timestamp) {
                return (boostStartTime[_token] +  boostSeconds[_token])
                    - block.timestamp;
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    }
  // Mint
    function mintEOS() public {
        uint toMint = pendingBonusEOS(msg.sender);
        if(toMint > 0){
            savedBonusPonziTokens[msg.sender] = 0;
            lastTimeClaimedBonus[msg.sender] = block.timestamp;
            mainToken.mintBonus(toMint, msg.sender);
        }
    }
    function pendingBonusEOS(address _user) public view returns (uint256) {
        uint256 time = mainToken.ponziStart() > lastTimeClaimedBonus[_user] ? mainToken.ponziStart() : lastTimeClaimedBonus[_user];
        uint256 bonus = (((userBoostBonuses[_user] * mainToken.apy() / 10000 ) *
        boostApyMultiplier / boostApyDenominator) / 86400) * 
        (block.timestamp - time) + savedBonusPonziTokens[_user];
        return bonus;       
    }
    function viewBonusTokensPerSecond(address _user) public view returns (uint256) {
        return (((userBoostBonuses[_user] * mainToken.apy() / 10000 ) * boostApyMultiplier) / boostApyDenominator) / 86400;
    }
  // Admin
    function setUpdateTimeForEthPrice(uint256 _updateTimeForEthPrice) public onlyOwner {
        updateTimeForEthPrice = _updateTimeForEthPrice;
    }
    function setHourCost(uint256 _hourCost) public onlyOwner {
        hourCost = _hourCost;
    }
    function setboostApyMultiplier(uint256 _boostApyMultiplier) public onlyOwner {
        boostApyMultiplier = _boostApyMultiplier;
    }
    function setboostApyDenominator(uint256 _boostApyDenominator) public onlyOwner {
        boostApyDenominator = _boostApyDenominator;
    }
    function recoverTokens(address _token, uint toWithdraw) public onlyOwner{
        IEOS20 token = IEOS20(_token);
        token.transfer(owner(), toWithdraw);
    }
    function recoverEth(address payable _user, uint toWithdraw) public onlyOwner{
        (bool success,) = _user.call{value: toWithdraw}("");
    }
    function setMainTokenAddress(address _eos) public onlyOwner {
        mainToken = IEOS20(_eos);
    }
    function setEthPriceFeed(address _ethUsdFeed) public onlyOwner {
        ethUsdFeed = IEthPrice(_ethUsdFeed);
    }
    function setTokensBurned(address _token, uint amount) public onlyOwner{
        tokensBurned[_token] = amount;
    }
    function setBoostStartTime(address _token, uint _time) public onlyOwner{
        boostStartTime[_token] = _time;
    }
    function setTotalBurned(uint _burned) public onlyOwner {
        totalBurned = _burned;
    }
  // Receive
    receive() external payable {}
}"
    },
    "src/InfoService.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
                                                                                                                                               
/*

☞ https://ethos.vision
???? https://x.com/Ethereum_OS
✌︎ https://t.me/ethosportal

Welcome to the Ethereum Operating System — the first-of-its-kind revenue generating DeFi pumpware
built as a social DeFi sandbox that is filled with composable elements so you can create, trade,
communicate, and participate—all in one place.


                                                      @                               
                                                     @@:                              
                                                    @@@::                             
                                                  ==@@@::::                           
                                                 ===@@@:::::                          
                                                ===+@@+::::::                         
                                               ====@@@::::::::                        
                                              =====@@@:::::::::                       
                                             ======@@@::::::::::                      
                                            =======@@@:::::::::::                     
                                           =======*@@+::::::::::::                    
                                          ========@@@::::::::::::::                   
                                        ==========@@@::::::::::::::::                 
                                       ===========@@@:::::::::::::::::                
                                      ============@@@::::::::::::::::::               
                                     ============*@@=:::::::::::::::::::              
                                    =============@@@:::::::::::::::::::::             
                                   =====@@@======@@@::::::::@@@:::::::::::            
                                  ======@@@======@@@::::::::@@@::::::::::::           
                                 =======@@@======@@@::::::::@@@:::::::::::::          
                                =================@@=:::::::::::::::::::::::::         
                              ==================%@@::::::::::::::::::::::::::::       
                             ===================@@@:::::::::::::::::::::::::::::      
                            ====================@@@::::::::::::::::::::::::::::::     
                           =====================@@@:::::::::::::::::::::::::::::::    
                          =====================+@@-::::::::::::::::::::::::::::::::   
                         ======================@@@@@@@@@@@@@@*::::::::::::::::::::::  
                        =======================@@@@@@@@@@@@@@:::::::::::::::::::::::: 
                       ===================================@@@:::::::::::::::::::::::::
                         =================================@@@:::::::::::::::::::::::  
                          =========@@@@===================@@@::::::::@@@*::::::::::   
                           =========@@@@@@@==============*@@:::::%@@@@@:::::::::::    
                             ===========@@@@@@@@@@@#*+=+*@@@@@@@@@@@-:::::::::::      
                              ==============+@@@@@@@@@@@@@@@@@@@:::::::::::::::       
                               ==========================@@@::::::::::::::::::        
                                 ========================@@@::::::::::::::::          
                                  ======================@@@::::::::::::::::           
                                   =====================@@@:::::::::::::::            
                                     ===================@@@:::::::::::::              
                                      ==================@@@::::::::::::               
                                       ================*@@=:::::::::::                
                                         ==============@@@::::::::::                  
                                          =============@@@:::::::::                   
                                           ============@@@::::::::                    
                                             ==========@@#::::::                      
                                              ========@@@::::::                       
                                               =======@@@:::::                        
                                                 =====@@@:::                          
                                                  ====@@@::                           
                                                   ==*@@-:                            
                                                    =@@@:                             
                                                      @                 
                                                

                        
                                         @@@                                                                 
 @@@@@@@@@@@@@@@@@@@                 @@@@@@@                            =======                   ========   
  @@@@@@@@@@@@@@@@@@                   @@@@@                         ====     =====            =====   ===== 
    @@@@@         @@                   @@@@                       =====          ====         ====       === 
    @@@@@          @                   @@@@                      ====             =====      ====         ===
    @@@@@                              @@@@                     ====               =====     ====          ==
    @@@@@                  @@          @@@@                    =====               =====     =====           
    @@@@@       @        @@@@          @@@@      @             =====                =====    =======         
    @@@@@       @@     @@@@@@@@@@@@    @@@@  @@@@@@@@         =====                 =====     =========      
    @@@@@@@@@@@@@        @@@@          @@@@@@    @@@@@        =====                 =====       =========    
    @@@@@      @@        @@@@          @@@@@      @@@@@       =====                 =====         =========  
    @@@@@       @@       @@@@          @@@@        @@@@       =====                 =====           ======== 
    @@@@@                @@@@          @@@@        @@@@       ======                =====              ======
    @@@@@                @@@@          @@@@        @@@@        =====               =====                =====
    @@@@@                @@@@          @@@@        @@@@         =====              =====    ==          =====
    @@@@@           @@   @@@@          @@@@        @@@@          ====             =====     ===         =====
    @@@@@          @@@   @@@@@         @@@@        @@@@           =====          ====       ====        ==== 
   @@@@@@@@@@@@@@@@@@    @@@@@@@@@@   @@@@@@      @@@@@@            =====      ====          =====    =====  
@@@@@@@@@@@@@@@@@@@@       @@@@@@    @@@@@@@@@  @@@@@@@@@              ==========              =========     

   
*/ 

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./math/SafeMathUint.sol";
import "./math/SafeMathInt.sol";
import "interfaces/IUniswapV2Router02.sol";
import "interfaces/IUniswapV2Factory.sol";
import "../interfaces/ITokenSettings.sol";
import "../interfaces/IBooster.sol";
import "../interfaces/IEOS20.sol";
import "./Deployer.sol";

interface IBooster {
    function getEosPriceInUsd() external view returns (uint);
}

contract InfoService is Ownable, Pausable, ReentrancyGuard {
  // Contracts
    IEOS20 public mainToken;
    IBooster public booster;
    address public ETH_OS;
  // States
    uint public infoUpdatePrice = 0; // 10 dollars
    uint public usernameUpdatePrice = 5; // 10 dollars
    uint public avatarUpdatePrice = 5; // 10 dollars
    uint public burnedViaUpdates;
    uint public burnedViaReactions;
    uint public burnedViaUserProfile;
  // Mappings
    // Reactions
    mapping(uint256 => string) public reaction;
    mapping(uint256 => uint256) public priceForReaction;
    mapping(address => mapping(uint256 => uint256)) public reactionAmount;
    // User Profile
    mapping(address => string) public userName;
    mapping(address => bool) public isUserNameUpdated;
    mapping(address => string) public avatar;
    mapping(string => bool) public isNameTaken;
    mapping(string => address) public nameToAddress;
    // Update Socials
    mapping(address => string) public Description;
    mapping(address => string) public Website;
    mapping(address => string) public Socials;
    mapping(address => string) public Image;
    mapping(address => string) public Chat;
  // Constructor
    constructor() {
        addReaction(1, unicode"????", 0);
        addReaction(2, unicode"????", 0);
        addReaction(3, unicode"????", 0);
        addReaction(4, unicode"⚠️", 0);
        addReaction(5, unicode"????", 5e18);
        addReaction(6, unicode"????", 5e18);
        addReaction(7, unicode"????", 5e18);
        addReaction(8, unicode"❤️‍????", 5e18);
        addReaction(9, unicode"????", 0);
        addReaction(10, unicode"????", 0);
        addReaction(11, unicode"????????", 5e18);
    }
  // Get Price for Update
    function getPriceForUpdate(uint _price) public view returns (uint) {
        return _price * 1e18 / booster.getEosPriceInUsd();
    }
  // Update Socials
    function setDescription(address _token, string calldata _description) public {
        require(msg.sender == IEOS20(_token).owner(), "Owner only");
        if(infoUpdatePrice > 0 && msg.sender != ETH_OS){
            uint tokensToBurn = getPriceForUpdate(infoUpdatePrice);
            mainToken.transferFrom(msg.sender, address(this), tokensToBurn);
            mainToken.burn(tokensToBurn);
            burnedViaUpdates += tokensToBurn;
        }
        Description[_token] = _description;
    }
    function setWebsite(address _token, string calldata _website) public {
        require(msg.sender == IEOS20(_token).owner(), "Owner only");
        if(infoUpdatePrice > 0 && msg.sender != ETH_OS){
            uint tokensToBurn = getPriceForUpdate(infoUpdatePrice);
            mainToken.transferFrom(msg.sender, address(this), tokensToBurn);
            mainToken.burn(tokensToBurn);
            burnedViaUpdates += tokensToBurn;
        }
        Website[_token] = _website;
    }
    function setSocials(address _token, string calldata _socials) public {
        require(msg.sender == IEOS20(_token).owner(), "Owner only");
        if(infoUpdatePrice > 0 && msg.sender != ETH_OS){
            uint tokensToBurn = getPriceForUpdate(infoUpdatePrice);
            mainToken.transferFrom(msg.sender, address(this), tokensToBurn);
            mainToken.burn(tokensToBurn);
            burnedViaUpdates += tokensToBurn;
        }
        Socials[_token] = _socials;
       
    }
    function setImage(address _token, string calldata _image) public {
        require(msg.sender == IEOS20(_token).owner(), "Owner only");
        if(infoUpdatePrice > 0 && msg.sender != ETH_OS){
            uint tokensToBurn = getPriceForUpdate(infoUpdatePrice);
            mainToken.transferFrom(msg.sender, address(this), tokensToBurn);
            mainToken.burn(tokensToBurn);
            burnedViaUpdates += tokensToBurn;
        }
        Image[_token] = _image;
    }
    function setChat(address _token, string calldata _chat) public {
        require(msg.sender == IEOS20(_token).owner(), "Owner only");
        if(infoUpdatePrice > 0 && msg.sender != ETH_OS){
            uint tokensToBurn = getPriceForUpdate(infoUpdatePrice);
            mainToken.transferFrom(msg.sender, address(this), tokensToBurn);
            mainToken.burn(tokensToBurn);
            burnedViaUpdates += tokensToBurn;
        }
        Chat[_token] = _chat;
    }
  // User Profile
    function setUserName(string calldata _name) public  {
        require(!isNameTaken[_name], "Name already taken");
        if(usernameUpdatePrice > 0){
            uint tokensToBurn = getPriceForUpdate(usernameUpdatePrice);
            mainToken.transferFrom(msg.sender, address(this), tokensToBurn);
            mainToken.burn(tokensToBurn);
            burnedViaUserProfile += tokensToBurn;
        }
        if(isUserNameUpdated[msg.sender]){
            isNameTaken[userName[msg.sender]] = false;
            nameToAddress[userName[msg.sender]] = address(0);
        }
        userName[msg.sender] = _name;
        nameToAddress[_name] = msg.sender;
        isNameTaken[_name] = true;
        isUserNameUpdated[msg.sender] = true;
    }
    function setAvatar(string calldata _avatar) public {
        if(avatarUpdatePrice > 0){
            uint tokensToBurn = getPriceForUpdate(avatarUpdatePrice);
            mainToken.transferFrom(msg.sender, address(this), tokensToBurn);
            mainToken.burn(tokensToBurn);
            burnedViaUserProfile += tokensToBurn;
        }
        avatar[msg.sender] = _avatar;
    }    
  // Reactions
    function addReaction(uint256 id, string memory _reaction, uint256 _price) public onlyOwner {
        priceForReaction[id] = _price;
        reaction[id] = _reaction;
    }
    function react(address _token, uint256 id) public {
        if(priceForReaction[id] > 0){
            uint256 tokensToBurn = getPriceForUpdate(priceForReaction[id]);
            mainToken.transferFrom(msg.sender, address(this), tokensToBurn);
            mainToken.burn(tokensToBurn);
            burnedViaReactions += tokensToBurn;
        }
        reactionAmount[_token][id] += 1;
    }
  // Admin
    function setEthOS(address _ethOS) public onlyOwner {
        ETH_OS = _ethOS;
    }
    function setBooster(address _booster) public onlyOwner {
        booster = IBooster(_booster);
    }
    function setMainToken(address _mainToken) public onlyOwner {
        mainToken = IEOS20(_mainToken);
    }
    function setPricesForUpdates(uint _info) public onlyOwner {
        infoUpdatePrice = _info;
    }
    function setPriceForUserName(uint _price) public onlyOwner {
        usernameUpdatePrice = _price;
    }
    function setPriceForAvatar(uint _price) public onlyOwner {
        avatarUpdatePrice = _price;
    }
}
"
    },
    "src/Lock.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
                                                                                                                                               
/*

☞ https://ethos.vision
???? https://x.com/Ethereum_OS
✌︎ https://t.me/ethosportal

Welcome to the Ethereum Operating System — the first-of-its-kind revenue generating DeFi pumpware
built as a social DeFi sandbox that is filled with composable elements so you can create, trade,
communicate, and participate—all in one place.


                                                      @                               
                                                     @@:                              
                                                    @@@::                             
                                                  ==@@@::::                           
                                                 ===@@@:::::                          
                                                ===+@@+::::::                         
                                               ====@@@::::::::                        
                                              =====@@@:::::::::                       
                                             ======@@@::::::::::                      
                                            =======@@@:::::::::::                     
                                           =======*@@+::::::::::::                    
                                          ========@@@::::::::::::::                   
                                        ==========@@@::::::::::::::::                 
                                       ===========@@@:::::::::::::::::                
                                      ============@@@::::::::::::::::::               
                                     ============*@@=:::::::::::::::::::              
                                    =============@@@:::::::::::::::::::::             
                                   =====@@@======@@@::::::::@@@:::::::::::            
                                  ======@@@======@@@::::::::@@@::::::::::::           
                                 =======@@@======@@@::::::::@@@:::::::::::::          
                                =================@@=:::::::::::::::::::::::::         
                              ==================%@@::::::::::::::::::::::::::::       
                             ===================@@@:::::::::::::::::::::::::::::      
                            ====================@@@::::::::::::::::::::::::::::::     
                           =====================@@@:::::::::::::::::::::::::::::::    
                          =====================+@@-::::::::::::::::::::::::::::::::   
                         ======================@@@@@@@@@@@@@@*::::::::::::::::::::::  
                        =======================@@@@@@@@@@@@@@:::::::::::::::::::::::: 
                       ==

Tags:
ERC20, Multisig, Mintable, Burnable, Swap, Liquidity, Yield, Upgradeable, Multi-Signature, Factory|addr:0x04733dc47e9165eef7d7bb52abd7713c48155b24|verified:true|block:23383098|tx:0x21063ea9da78924f1a388a4b822344ca7bfff81deb62c447cc4137233a48c161|first_check:1758119286

Submitted on: 2025-09-17 16:28:08

Comments

Log in to comment.

No comments yet.