Description:
Decentralized Finance (DeFi) protocol contract providing Swap, Liquidity functionality.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
/**
* SPDX-License-Identifier: unlicensed
*/
//Website: https://aetherlands.us/
//Product: https://aetherlands.pro/
//Telegram: https://t.me/AetherlandsETH
pragma solidity 0.8.17;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
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;
}
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view 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);
}
abstract contract Auth {
address internal _owner;
mapping(address => bool) public isAuthorized;
constructor(address owner) {
_owner = owner;
}
modifier onlyOwner() {
require(isOwner(msg.sender), "Auth: owner only");
_;
}
modifier authorized() {
require(isAuthorized[msg.sender], "Auth: authorized only");
_;
}
function setAuthorization(
address address_,
bool authorization
) external onlyOwner {
isAuthorized[address_] = authorization;
}
function isOwner(address account) public view returns (bool) {
return account == _owner;
}
function transferOwnership(address payable newOwner) external onlyOwner {
require(newOwner != address(0), "Auth: owner address cannot be zero");
_transferOwnership(newOwner);
}
function renounceOwnership() external onlyOwner {
_transferOwnership(address(0));
}
function _transferOwnership(address newOwner) internal {
_owner = newOwner;
emit OwnershipTransferred(newOwner);
}
event OwnershipTransferred(address owner);
}
contract AetherlandsTreasury is Auth {
address private constant router =
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
address private weth;
address private token;
constructor(address tokenAddress) Auth(msg.sender) {
require(
tokenAddress != address(0),
"Aetherlands Treasury: token address cannot be zero"
);
weth = IUniswapV2Router02(router).WETH();
token = tokenAddress;
bool approved = IERC20(token).approve(router, type(uint).max);
require(approved == true, "Aetherlands Treasury: approve failed");
}
uint withdrawRatelimit = 10000000 * 10 ** 18;
uint withdrawRatelimitTimeframe = 1 hours;
function setWithdrawRatelimit(uint amount, uint time) external onlyOwner {
require(
time >= 15,
"Aetherlands Treasury: withdraw ratelimit must be more or equal to 15 minutes"
);
withdrawRatelimitTimeframe = time * 1 minutes;
require(
amount >=
((108000 * 10 ** 18) / 1 hours) * withdrawRatelimitTimeframe,
"Aetherlands Treasury: withdraw ratelimit amount is too low"
);
withdrawRatelimit = amount;
withdrawTimeframeTotal = 0;
}
uint withdrawTimeframe;
uint withdrawTimeframeTotal;
function withdraw(
address to,
uint amount,
uint minimum,
uint gasFee,
uint deadline
) external authorized {
uint timeframe = block.timestamp / withdrawRatelimitTimeframe;
if (withdrawTimeframe < timeframe) {
withdrawTimeframe = timeframe;
withdrawTimeframeTotal = amount;
} else {
withdrawTimeframeTotal += amount;
}
require(
withdrawTimeframeTotal <= withdrawRatelimit,
"Aetherlands Treasury: global withdraw rate limit reached"
);
if (gasFee == 0) {
IERC20(token).transfer(to, amount);
} else {
address[] memory path = new address[](2);
path[0] = token;
path[1] = weth;
uint[] memory amounts = IUniswapV2Router02(router)
.swapTokensForExactETH(
gasFee,
amount,
path,
msg.sender,
deadline
);
uint remaining = amount - amounts[0];
require(
remaining >= minimum,
"Aetherlands Treasury: insufficient amount"
);
bool transferred = IERC20(token).transfer(to, remaining);
require(transferred == true, "Aetherlands Treasury: transfer failed");
}
}
}
Submitted on: 2025-10-13 21:34:29
Comments
Log in to comment.
No comments yet.