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/EthOs.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 ILock {
function isFunded(address _token) external view returns (bool);
function isLpLocked(address _token) external view returns (bool);
function isSettingsLocked(address _token) external view returns (bool);
function devDeadline(address _token) external view returns(uint256);
function settingLockTime(address _token) external view returns(uint256);
function prolongDeadLine(address _token, uint256 _devDeadline) external;
}
interface IInfo {
function setDescription(address _token, string calldata _description) external;
function setWebsite(address _token, string calldata _website) external;
function setImage(address _token, string calldata _image) external;
function setChat(address _token, string calldata _chat) external;
function setSocials(address _token, string calldata _socials) external;
}
/// @title Ethereum Operating System
/// @author ethjobs
/// @notice 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.
/// @dev Public/external functions include NatSpec so they render on Etherscan's Read/Write tabs.
contract EthOS is ITokenSettings, Ownable, Pausable, ReentrancyGuard {
// Libraries
using SafeMath for uint256;
using SafeMath for uint112;
using SafeMathUint for uint256;
using SafeMathInt for int256;
// Contracts
IUniswapV2Router02 public uniswapV2Router;
Deployer public deployer;
IEOS20 newToken;
IEOS20 token;
IBOOSTER public booster;
IEOS20 public mainToken;
IInfo public infoService;
ILock public lock;
// States
bool public canCreate = false;
uint256 public tokenCount;
address public projectWallet = payable(0xcca0905Da6f5c2060e07e66A49E45B061Fe379E1);
uint public ecoFriendlyFeePercent = 10;
uint public ecoFeePercent = 10; // 1% (10/1000)
uint public projectClaimFee = 33;
uint public eosPortionDivider = 3;
bool public ecoFeeOn = true;
uint public initialLiquidityPercent = 50;
bool public isCustomRefelctionsPercentPublic = false;
bool public isBoostApyOn = true;
// Mechanics
uint public minEthToCreate = 0;
uint public minLockTime = 24 hours;
uint public maxLockTime = 1200 hours;
uint public minDeathTime = 24 hours;
uint public maxDevSupplyPercent = 5;
uint public maxReflectionPercent = 150;
uint public maxDevFeePercent = 30;
uint public maxDailyPumpRate = 100;
uint public maxBurnPercentage = 15;
uint public maxApy = 10000;
uint public minCooldown = 1 hours;
uint public maxCooldown = 1000 hours;
uint public lpAccuracy = 90;
uint public minBuyBase = 1_000e18;
uint public antiBotTime = 420; // 7 minutes
// Volume
uint256 public minReflectionSwapPercent = 1; // 0.01% of pair balance
uint256 public maxReflectionSwapPercent = 100; // 1% of pair balance
uint256 public maxMinBuyPairPercent = 200; // 2% of pair balance
// Mappings
//Mchanics
mapping(uint256 => address) public tokenNumber;
mapping(address => bool) public eosDeployed;
mapping(address => uint256) public initialLiquidity;
mapping(address => uint256) public initialTokensLp;
mapping(address => bool) public ecoFriendly;
mapping(address => bool) public hasWithdrawLiquidity;
mapping(address => bool) public isWhitelistedRouter;
mapping(address => uint256) public minBuyPercent;
mapping(address => uint256) public minBuyAmount;
mapping(address => bool) public isFunded;
mapping (address => bool) public isAuthorized;
mapping(address => uint256) public userLaunchedTokensCount; // user => tokenId => tokenAddress
mapping(address => mapping(uint256 => address)) public userLaunchedTokens; // user => tokenId => tokenAddress
mapping(address => uint256) public minReflectionsSwapPercentCustom;
mapping(address => uint256) public maxReflectionsSwapPercentCustom;
// Events
event TokenCreated(address tokenAddress, string name, string symbol);
// Modifiers
modifier lockTheFee() {
bool originalEcoFeeOn = ecoFeeOn;
ecoFeeOn = false;
_;
ecoFeeOn = originalEcoFeeOn;
}
// View
function isBooster(address _token) public view returns (bool) {
return _token == address(booster);
}
function viewTokensList() public view returns (address[] memory) {
address[] memory tokens = new address[](tokenCount);
for (uint256 i = 1; i <= tokenCount; i++) {
tokens[i - 1] = tokenNumber[i];
}
return tokens;
}
// Create
function createOrigin(TokenSettings memory settings, bytes32 salt) external onlyOwner nonReentrant whenNotPaused returns (address) {
IEOS20 newToken = deploy(settings, salt);
initialize(newToken, settings);
initialTokensLp[address(newToken)] = 10_000_000e18;
setMechanicsAndTransferDevTokens(newToken, settings);
setInfo(newToken, settings);
finalizeOrigin(newToken, settings);
return address(newToken);
}
function finalizeOrigin(IEOS20 newToken, TokenSettings memory settings) private {
newToken.transferOwnershipOfTheToken(msg.sender);
tokenCount++;
tokenNumber[tokenCount] = address(newToken);
eosDeployed[address(newToken)] = true;
emit TokenCreated(address(newToken), settings.name, settings.symbol);
}
function createNewToken(TokenSettings memory settings, bytes32 salt) external payable nonReentrant whenNotPaused returns (address) {
require(msg.value >= minEthToCreate, "Eth value should be greater or equal to minimum");
require(canCreate, "Creating is disabled");
IEOS20 newToken = deploy(settings, salt);
initialize(newToken, settings);
addLiquidity(newToken, settings);
setMechanicsAndTransferDevTokens(newToken, settings);
setInfo(newToken, settings);
finalize(newToken, settings);
return address(newToken);
}
// internal
function deploy(TokenSettings memory settings, bytes32 salt) private returns (IEOS20){
IEOS20 newToken = IEOS20(deployer.createTokenViaInterface(settings.name, settings.symbol, address(this), salt));
return newToken;
}
function initialize(IEOS20 newToken,TokenSettings memory settings) private {
require(settings.router != address(0), "Invalid owner address");
require(settings.devDeadline >= minLockTime && settings.devDeadline <= maxLockTime, "Invalid dev deadline");
require(isWhitelistedRouter[settings.router], "Router not whitelisted");
providePair(newToken, settings.router);
newToken.initializeToken(msg.sender, settings.router, address(this), settings.devDeadline);
lock.prolongDeadLine(address(newToken), settings.devDeadline);
}
function providePair(IEOS20 newToken, address router) private {
address pair = IUniswapV2Factory(IUniswapV2Router02(router).factory()).getPair(address(newToken), IUniswapV2Router02(router).WETH());
if (pair == address(0)) {
IUniswapV2Factory(IUniswapV2Router02(router).factory()).createPair(address(newToken), IUniswapV2Router02(router).WETH());
}
}
function addLiquidity(IEOS20 newToken, TokenSettings memory settings) private lockTheFee{
require(settings.devSupply <= maxDevSupplyPercent, "Dev supply should be less or equal to 25% of total supply.");
uint256 devTokens = newToken.totalSupply() * settings.devSupply / 100;
newToken.approve(settings.router, type(uint256).max);
IUniswapV2Router02(settings.router).addLiquidityETH{value: msg.value}(
address(newToken), newToken.totalSupply() - devTokens, 0, 0, address(this), block.timestamp
);
initialLiquidity[address(newToken)] = msg.value;
initialTokensLp[address(newToken)] = newToken.totalSupply() - devTokens;
newToken.setMaxWallet(settings.antiBot, settings.maxWallet);
}
function setMechanicsAndTransferDevTokens(IEOS20 newToken, TokenSettings memory settings) private {
newToken.setSpecs(
settings.devFee,
settings.maxDailyPumpRate,
settings.reflectionsPercent,
settings.liquidityPercent,
settings.reaperDeathTime,
settings.cooldown,
settings.winAmountPercent,
settings.apy,
settings.burnPercentBuy,
settings.burnPercentSell
);
newToken.toggleYield(true);
if(settings.devSupply > 0){
newToken.transfer(msg.sender, newToken.balanceOf(address(this)));
}
newToken.setMaxWallet(settings.antiBot, settings.maxWallet);
}
function setInfo(IEOS20 newToken, TokenSettings memory settings) private {
infoService.setDescription(address(newToken), settings.description);
infoService.setWebsite(address(newToken), settings.website);
infoService.setImage(address(newToken), settings.image);
infoService.setChat(address(newToken), settings.chat);
infoService.setSocials(address(newToken), settings.socials);
// Description[address(newToken)] = settings.description;
// Website[address(newToken)] = settings.website;
// Image[address(newToken)] = settings.image;
// Chat[address(newToken)] = settings.chat;
// Socials[address(newToken)] = settings.socials;
}
function finalize(IEOS20 newToken, TokenSettings memory settings) private {
newToken.openTrading(true);
newToken.transferOwnershipOfTheToken(msg.sender);
tokenCount++;
tokenNumber[tokenCount] = address(newToken);
eosDeployed[address(newToken)] = true;
userLaunchedTokens[msg.sender][userLaunchedTokensCount[msg.sender]] = address(newToken);
userLaunchedTokensCount[msg.sender]++;
emit TokenCreated(address(newToken), settings.name, settings.symbol);
}
// EOS20 off-contract calculation view functions
function checkRequirements(
uint256 _devFeePercent,
uint256 _maxDailyPumpRate,
uint256 _reflectionsPercent,
uint256 _liquidityPercent,
uint256 _reaperDeathTime,
uint256 _cooldown,
uint256 _winAmountPercent,
uint256 _apy,
uint256 _burnPercentageBuy,
uint256 _burnPercentageSell,
address _token
) public view returns (bool) {
require(
(!lock.isSettingsLocked(_token) && block.timestamp > lock.settingLockTime(_token)) &&
_devFeePercent <= maxDevFeePercent &&
_liquidityPercent + _winAmountPercent + _devFeePercent <= 100 &&
_reflectionsPercent <= maxReflectionPercent &&
_maxDailyPumpRate <= maxDailyPumpRate &&
((_reaperDeathTime >= minDeathTime && _reaperDeathTime <= 12000 hours) || _reaperDeathTime == 0) &&
_apy <= maxApy &&
((_cooldown >= minCooldown && _cooldown <= maxCooldown) || _cooldown == 0) &&
_burnPercentageBuy <= maxBurnPercentage &&
_burnPercentageSell <= maxBurnPercentage,
"Requirements not met");
return true;
}
// Undrainable
function calculateMaxSell(address _token) public view returns (uint256) {
IEOS20 eos = IEOS20(_token);
(uint112 tknRes, uint112 ethRes) = eos.getReserves();
if (ethRes > initialLiquidity[_token]) {
(uint256 tkn) = IUniswapV2Router02(eos.uniswapV2Router()).getAmountIn(ethRes - initialLiquidity[_token], tknRes, ethRes);
return tkn;
} else {
return 0;
}
}
function calculateMaxSellForCA(address _token, uint256 _userValue) public view returns (uint256) {
return calculateMaxSell(_token) - _userValue;
}
function getOwnerProgressLeft(address _token) public view returns (uint256) {
// token = IEOS20(_token);
if (IEOS20(_token).devClaimableEth() + IEOS20(_token).devWithdrawn() < initialLiquidity[_token]) {
return initialLiquidity[_token] - IEOS20(_token).devClaimableEth() - IEOS20(_token).devWithdrawn();
} else {
return 0;
}
}
// Gamble
function getTimeLeft(address _token) public view returns (uint256) {
IEOS20 eos = IEOS20(_token);
if (eos.lastBuyTimestamp() == 0) {
return eos.cooldown();
} else {
if (eos.lastBuyTimestamp() + eos.cooldown() > block.timestamp) {
return (eos.lastBuyTimestamp() + eos.cooldown()) - block.timestamp;
} else {
return 0;
}
}
}
// Reaper
function isAlive(address _token, address _user) public view returns (bool) {
IEOS20 eos = IEOS20(_token);
if(eos.deathTime() > 0){
if (checkDeathTimeStamp(_token, _user) == 0 || block.timestamp < checkDeathTimeStamp(_token, _user) || eos.immortal(_user)) {
return true;
} else {
return false;
}
}else{
return true;
}
}
function checkDeathTimeStamp(address _token, address _user) public view returns (uint256) {
IEOS20 eos = IEOS20(_token);
uint256 deathTimeStamp;
uint deathTime = eos.deathTime() < minDeathTime ? minDeathTime : eos.deathTime();
if (eos.firstReceivedBlockTimeStamp(_user) != 0) {
if (eos.deathStartedTimestamp() > eos.firstReceivedBlockTimeStamp(_user)) {
deathTimeStamp = eos.deathStartedTimestamp() + deathTime;
}
else {
deathTimeStamp = eos.firstReceivedBlockTimeStamp(_user) + deathTime;
}
} else {
return 0;
}
return deathTimeStamp;
}
// Pump
function calculatePump(address _token) public view returns (uint256 burnAmount, uint256 pumpNow, uint256 desiredPrice, uint256 price) {
IEOS20 eos = IEOS20(_token);
uint dailyPumpRate;
eos.maxDailyPumpRate() > maxDailyPumpRate ? dailyPumpRate = maxDailyPumpRate : dailyPumpRate = eos.maxDailyPumpRate();
(uint112 r0, uint112 r1) = eos.getReserves();
if (r0 > 1e18 && dailyPumpRate > 0 && eos.lastPumpTimestamp() < block.timestamp) {
uint256 price = IUniswapV2Router02(eos.uniswapV2Router()).quote(1e18, r0, r1);
uint256 pumpNow = ((block.timestamp - eos.lastPumpTimestamp()) * (dailyPumpRate * 1e18 / 86400));
if (pumpNow >= dailyPumpRate * 3e18) {
pumpNow = dailyPumpRate * 3e18;
}
desiredPrice = price.add(((price.mul(pumpNow) / 1e18) / 100));
require(desiredPrice > 0, "Invalid desired price");
uint256 desiredReserves = (r1.mul(1e9) / desiredPrice).mul(1e9);
burnAmount = r0.sub(desiredReserves, "Invalid reserves calculation");
return (burnAmount, pumpNow, desiredPrice, price);
} else {
return (0, 0, 0, 0);
}
}
// maxWallet
function maxWallet(address _token) public view returns (uint) {
IEOS20 eos = IEOS20(_token);
if(eos.antiBot() && eos.maxWalletPercent() > 1 && (block.timestamp - eos.timeCreated()) < antiBotTime) {
// 7 minutes gradual increase
uint k = (block.timestamp - eos.timeCreated()) * 1e18 / antiBotTime;
return eos.totalSupply() * ((eos.maxWalletPercent()*k)/1e18) / 100;
}else{
return eos.totalSupply() * eos.maxWalletPercent() / 100;
}
}
function setMinBuyPercent(address _token, uint _percent) public {
require(msg.sender == IEOS20(_token).owner(), "Owner only");
require(_percent <= maxMinBuyPairPercent, "Percent must be greater than 0 and less than 100");
minBuyPercent[_token] = _percent;
minBuyAmount[_token] = 0;
}
function setMinBuyAmount(address _token, uint _amount) public {
require(msg.sender == IEOS20(_token).owner(), "Owner only");
require(_amount > 0 && _amount <= IEOS20(_token).balanceOf(address(IEOS20(_token).uniswapV2Pair())) * maxMinBuyPairPercent / 10000, "Amount must be greater than 0");
minBuyAmount[_token] = _amount;
minBuyPercent[_token] = 0;
}
function minBuy(address _token) public view returns (uint) {
if(minBuyAmount[_token] > 0){
return minBuyAmount[_token];
}
if(minBuyPercent[_token] > 0){
return IEOS20(_token).balanceOf(address(IEOS20(_token).uniswapV2Pair())) * minBuyPercent[_token] / 10000;
}
else{
return minBuyBase;
}
}
// Volume
function maxReflectionsSwap(address _token) public view returns (uint256) {
IEOS20 eos = IEOS20(_token);
uint maxPercent = maxReflectionsSwapPercentCustom[_token] == 0 ? maxReflectionSwapPercent : maxReflectionsSwapPercentCustom[_token];
return eos.balanceOf(address(eos.uniswapV2Pair())) * maxPercent / 10000;
}
function minReflectionsSwap(address _token) public view returns (uint256) {
IEOS20 eos = IEOS20(_token);
uint minPercent = minReflectionsSwapPercentCustom[_token] == 0 ? minReflectionSwapPercent : minReflectionsSwapPercentCustom[_token];
return eos.balanceOf(address(eos.uniswapV2Pair())) * minPercent / 10000;
}
function setCustomMaxReflectionsSwapPercent(address _token, uint _percent) public {
require(msg.sender == owner() || (isCustomRefelctionsPercentPublic && msg.sender == IEOS20(_token).owner()), "Owner only");
maxReflectionsSwapPercentCustom[_token] = _percent;
}
function setCustomMinReflectionsSwapPercent(address _token, uint _percent) public {
require(msg.sender == owner() || (isCustomRefelctionsPercentPublic && msg.sender == IEOS20(_token).owner()), "Owner only");
minReflectionsSwapPercentCustom[_token] = _percent;
}
// Liquidiy
function withdrawDevLiquidity(address _token) public nonReentrant whenNotPaused returns (uint256 ethFromLP, uint256 tokenFromLP) {
token = IEOS20(_token);
require(msg.sender == token.owner(), "Owner only");
require(!lock.isLpLocked(_token), "Lp is locked");
require(!lock.isFunded(_token), "Token is funded by Eth OS");
require(!hasWithdrawLiquidity[_token], "Liquidity has been withdrawn");
require(block.timestamp > lock.devDeadline(_token), "Not a deadline yet.");
require(getOwnerProgressLeft(_token) > 0, "No progress left");
hasWithdrawLiquidity[_token] = true;
(uint256 tkn, uint256 eth) = token.getReserves();
address pair = token.uniswapV2Pair();
uint256 liquidityToWithdraw = (getOwnerProgressLeft(_token) * IUniswapV2Pair(pair).totalSupply() * 1e9 / eth) / 1e9; // Precision to avoid rounding loss
IUniswapV2Pair(pair).approve(address(token.uniswapV2Router()), liquidityToWithdraw);
// Calculate expected outputs for min thresholds (99% tolerance)
uint256 expectedToken = (liquidityToWithdraw * tkn * 1e9 / IUniswapV2Pair(pair).totalSupply()) / 1e9;
uint256 expectedETH = getOwnerProgressLeft(_token);
(tokenFromLP, ethFromLP) = IUniswapV2Router02(token.uniswapV2Router()).removeLiquidityETH(
address(token),
liquidityToWithdraw,
expectedToken * lpAccuracy / 100, // Min tokens: protect against manipulation
expectedETH * lpAccuracy / 100, // Min ETH: as before
address(this),
block.timestamp + 1 hours
);
if (token.balanceOf(address(this)) == token.totalShares()) {
token.burn(tokenFromLP - 1e18);
} else {
token.burn(tokenFromLP);
}
(bool success,) = token.owner().call{value: ethFromLP}("");
if (!success) {
(bool success2,) = projectWallet.call{value: ethFromLP}("");
require(success2);
}
uint left = eth - ethFromLP;
if (left < initialLiquidity[_token]) {
initialLiquidity[_token] = left * initialLiquidityPercent / 100;
} else {
initialLiquidity[_token] = initialLiquidity[_token] * initialLiquidityPercent / 100;
}
return (ethFromLP, tokenFromLP);
}
// Owner
// View
function isEligibleToMintBonus(address _user) public view returns (bool) {
require(isBoostApyOn, "Boost apy is not on");
return _user == address(booster) || _user == owner();
}
function setIsAuthorized(address _user, bool _isAuthorized) public onlyOwner {
isAuthorized[_user] = _isAuthorized;
}
function isAuthorizedToClaim(address _user) public view returns (bool) {
require(isAuthorized[_user] , "Not authorized Claim");
return true;
}
// Min Max
function setMinEthToCreate(uint _eth) public onlyOwner {
minEthToCreate = _eth;
}
function setMinLockTime(uint _time) public onlyOwner {
minLockTime = _time;
}
function setMaxLockTime(uint _time) public onlyOwner {
maxLockTime = _time;
}
function setMaxDailyPumpRate(uint _rate) public onlyOwner {
maxDailyPumpRate = _rate;
}
function setMaxReflectionPercent(uint _percent) public onlyOwner {
maxReflectionPercent = _percent;
}
function setMinDeathTime(uint _time) public onlyOwner {
minDeathTime = _time;
}
function setMaxDevSupplyPercent(uint _percent) public onlyOwner {
maxDevSupplyPercent = _percent;
}
function setMaxApy(uint _apy) public onlyOwner {
maxApy = _apy;
}
function setEosPortionDivider(uint _divider) public onlyOwner {
eosPortionDivider = _divider;
}
function setMaxBurnPercentage(uint _percent) public onlyOwner {
maxBurnPercentage = _percent;
}
function setMaxDevFeePercent(uint _percent) public onlyOwner {
maxDevFeePercent = _percent;
}
function setMinCooldown(uint _time) public onlyOwner {
minCooldown = _time;
}
function setMaxCooldown(uint _time) public onlyOwner {
maxCooldown = _time;
}
// Settings
function setInitialLiquidityPercent(uint _percent) public onlyOwner {
initialLiquidityPercent = _percent;
}
function setCanCreate(bool _canCreate) public onlyOwner {
canCreate = _canCreate;
}
function setIsCustomRefelctionsPercentPublic(bool _isCustomRefelctionsPercentPublic) public onlyOwner {
isCustomRefelctionsPercentPublic = _isCustomRefelctionsPercentPublic;
}
function setIsBoostApyOn(bool _isBoostApyOn) public onlyOwner {
isBoostApyOn = _isBoostApyOn;
}
function setAntiBotTime(uint _time) public onlyOwner {
antiBotTime = _time;
}
function setWhitelistedRouter(address _router, bool _whitelisted) public onlyOwner {
isWhitelistedRouter[_router] = _whitelisted;
}
function setLpAccuracy(uint _accuracy) public onlyOwner {
lpAccuracy = _accuracy;
}
// Fees
function setProjectWallet(address _projectWallet) public onlyOwner{
projectWallet = payable(_projectWallet);
}
function setProjectClaimFee(uint _fee) public onlyOwner {
projectClaimFee = _fee;
}
function setEcoFeePercent(uint _fee) public onlyOwner {
ecoFeePercent = _fee;
}
function setEcoFeeOn(bool _bool) public onlyOwner {
ecoFeeOn = _bool;
}
function setEcoFriendly(address _token, bool _ecoFriendly) public onlyOwner {
ecoFriendly[_token] = _ecoFriendly;
}
function setEcoFriendlyFeePercent(uint _fee) public onlyOwner {
ecoFriendlyFeePercent = _fee;
}
// Contracts
function setLock(address _lock) public onlyOwner {
lock = ILock(_lock);
}
function setBooster(address _booster) public onlyOwner {
booster = IBOOSTER(_booster);
}
function setInfoService(address _infoService) public onlyOwner {
infoService = IInfo(payable(_infoService));
}
function setDeployer(Deployer _deployer) public onlyOwner{
deployer = _deployer;
}
function setMainToken(address _mainToken) public onlyOwner {
mainToken = IEOS20(_mainToken);
}
// Tokens
function setInitialLiquidityForToken(address _token, uint _initialLiquidity) public onlyOwner{
initialLiquidity[_token] = _initialLiquidity;
}
// Recovery
function recoverLP(address _token, uint toWithdraw) public onlyOwner{
token = IEOS20(_token);
IUniswapV2Pair(token.uniswapV2Pair()).transfer(owner(), toWithdraw);
}
function recoverTokens(address _token, uint toWithdraw) public onlyOwner{
token = IEOS20(_token);
token.transfer(owner(), toWithdraw);
}
function recoverEth(uint toWithdraw) public onlyOwner{
(bool success,) = owner().call{value: toWithdraw}("");
}
// Receive
receive() external payable {}
}"
},
"lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
"content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
"
},
"lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
"content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// 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 (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
"
},
"lib/openzeppelin-contracts/contracts/security/Pausable.sol": {
"content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
"
},
"lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": {
"content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
"
},
"src/math/SafeMathUint.sol": {
"content": "// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.1;
/**
* @title SafeMathUint
* @dev Math operations with safety checks that revert on error
*/
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
"
},
"src/math/SafeMathInt.sol": {
"content": "// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.1;
/**
* @title SafeMathInt
* @dev Math operations with safety checks that revert on error
* @dev SafeMath adapted for int256
* Based on code of https://github.com/RequestNetwork/requestNetwork/blob/master/packages/requestNetworkSmartContracts/contracts/base/math/SafeMathInt.sol
*/
library SafeMathInt {
function mul(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when multiplying INT256_MIN with -1
// https://github.com/RequestNetwork/requestNetwork/issues/43
require(!(a == -2 ** 255 && b == -1) && !(b == -2 ** 255 && a == -1));
int256 c = a * b;
require((b == 0) || (c / b == a));
return c;
}
function div(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when dividing INT256_MIN by -1
// https://github.com/RequestNetwork/requestNetwork/issues/43
require(!(a == -2 ** 255 && b == -1) && (b > 0));
return a / b;
}
function sub(int256 a, int256 b) internal pure returns (int256) {
require((b >= 0 && a - b <= a) || (b < 0 && a - b > a));
return a - b;
}
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 toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
"
},
"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/IUniswapV2Factory.sol": {
"content": "pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}"
},
"interfaces/ITokenSettings.sol": {
"content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface ITokenSettings {
struct TokenSettings {
string name;
string symbol;
address router;
// address owner;
// address deployer;
string description;
string website;
string image;
string chat;
string socials;
uint256 devFee;
uint256 reflectionsPercent;
uint256 liquidityPercent;
uint256 maxDailyPumpRate;
uint256 reaperDeathTime;
uint256 cooldown;
uint256 winAmountPercent;
uint256 apy;
uint256 devSupply;
uint256 devDeadline;
uint256 burnPercentBuy;
uint256 burnPercentSell;
uint256 maxWallet;
bool antiBot;
}
} "
},
"interfaces/IBooster.sol": {
"content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IBOOSTER {
function mainToken() external view returns (address);
function balanceOf(address _user) external view returns (uint256);
function bonusEOS(address _user) external view returns (uint256);
function getEosPriceInUsd() external view returns (uint);
}"
},
"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);
}
"
},
"src/Deployer.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.
@
@@:
@@@::
==@@@::::
===@@@:::::
===+@@+::::::
====@@@::::::::
=====@@@:::::::::
======@@@::::::::::
=======@@@:::::::::::
=======*@@+::::::::::::
========@@@::::::::::::::
==========@@@::::::::::::::::
===========@@@:::::::::::::::::
============@@@::::::::::::::::::
============*@@=:::::::::::::::::::
=============@@@:::::::::::::::::::::
=====@@@======@@@::::::::@@@:::::::::::
======@@@======@@@::::::::@@@::::::::::::
=======@@@======@@@::::::::@@@:::::::::::::
=================@@=:::::::::::::::::::::::::
==================%@@::::::::::::::::::::::::::::
===================@@@:::::::::::::::::::::::::::::
====================@@@::::::::::::::::::::::::::::::
=====================@@@:::::::::::::::::::::::::::::::
=====================+@@-::::::::::::::::::::::::::::::::
======================@@@@@@@@@@@@@@*::::::::::::::::::::::
=======================@@@@@@@@@@@@@@::::::::::::::::::::::::
===================================@@@:::::::::::::::::::::::::
=================================@@@:::::::::::::::::::::::
=========@@@@===================@@@::::::::@@@*::::::::::
=========@@@@@@@==============*@@:::::%@@@@@:::::::::::
===========@@@@@@@@@@@#*+=+*@@@@@@@@@@@-:::::::::::
==============+@@@@@@@@@@@@@@@@@@@:::::::::::::::
==========================@@@::::::::::::::::::
========================@@@::::::::::::::::
======================@@@::::::::::::::::
=====================@@@:::::::::::::::
===================@@@:::::::::::::
==================@@@::::::::::::
================*@@=:::::::::::
==============@@@::::::::::
=============@@@:::::::::
============@@@::::::::
==========@@#::::::
========@@@::::::
=======@@@:::::
=====@@@:::
====@@@::
==*@@-:
=@@@:
@
@@@
@@@@@@@@@@@@@@@@@@@ @@@@@@@ ======= ========
@@@@@@@@@@@@@@@@@@ @@@@@ ==== ===== ====
Submitted on: 2025-09-17 16:02:48
Comments
Log in to comment.
No comments yet.