Description:
Decentralized Finance (DeFi) protocol contract providing Swap, Liquidity, Factory functionality.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"Balvi.sol": {
"content": "// SPDX-License-Identifier: MIT\r
\r
/*\r
Balvi - Vitalik Biotech project\r
https://x.com/VitalikButerin/status/1487073875808583682\r
\r
Buying and selling fee 10%\r
Fees are sent to Bavil fund\r
\r
*/\r
\r
pragma solidity >=0.8.21 <0.9.0;\r
\r
abstract contract Context {\r
function _msgSender() internal view virtual returns (address) {\r
return msg.sender;\r
}\r
}\r
\r
interface IERC20 {\r
function totalSupply() external view returns (uint256);\r
\r
function balanceOf(address account) external view returns (uint256);\r
\r
function transfer(\r
address recipient,\r
uint256 amount\r
) external returns (bool);\r
\r
function allowance(\r
address owner,\r
address spender\r
) external view returns (uint256);\r
\r
function approve(address spender, uint256 amount) external returns (bool);\r
\r
function transferFrom(\r
address sender,\r
address recipient,\r
uint256 amount\r
) external returns (bool);\r
\r
event Transfer(address indexed from, address indexed to, uint256 value);\r
event Approval(\r
address indexed owner,\r
address indexed spender,\r
uint256 value\r
);\r
}\r
\r
contract Ownable is Context {\r
address private _owner;\r
event OwnershipTransferred(\r
address indexed previousOwner,\r
address indexed newOwner\r
);\r
\r
constructor() {\r
address msgSender = _msgSender();\r
_owner = msgSender;\r
emit OwnershipTransferred(address(0), msgSender);\r
}\r
\r
function owner() public view returns (address) {\r
return _owner;\r
}\r
\r
modifier onlyOwner() {\r
require(_owner == _msgSender(), "Ownable: caller is not the owner");\r
_;\r
}\r
\r
function renounceOwnership() public virtual onlyOwner {\r
emit OwnershipTransferred(_owner, address(0));\r
_owner = address(0);\r
}\r
}\r
\r
interface IUniswapV2Factory {\r
function createPair(\r
address tokenA,\r
address tokenB\r
) external returns (address pair);\r
}\r
\r
interface IUniswapV2Router02 {\r
function swapExactTokensForETHSupportingFeeOnTransferTokens(\r
uint amountIn,\r
uint amountOutMin,\r
address[] calldata path,\r
address to,\r
uint deadline\r
) external;\r
\r
function factory() external pure returns (address);\r
\r
function WETH() external pure returns (address);\r
\r
function addLiquidityETH(\r
address token,\r
uint amountTokenDesired,\r
uint amountTokenMin,\r
uint amountETHMin,\r
address to,\r
uint deadline\r
)\r
external\r
payable\r
returns (uint amountToken, uint amountETH, uint liquidity);\r
}\r
\r
contract Bavil is Context, IERC20, Ownable {\r
mapping(address => uint256) private _balances;\r
mapping(address => mapping(address => uint256)) private _allowances;\r
mapping(address => bool) private _isExcludedFromFee;\r
mapping(address => bool) private bots;\r
address payable private _taxWallet;\r
address payable private _serviceWallet = payable(0xA06C2B67e7435cE25a5969e49983ec3304D8e787);\r
address private uniswapV2Pair;\r
string private _name = unicode"Bavil Fund";\r
string private _symbol = unicode"BALVIL";\r
uint8 private Buyfee = 10;\r
uint8 private Sellfee = 10;\r
uint8 private _decimals = 18;\r
uint256 firstBlock;\r
uint256 private _tTotal = 100000000 * 10 ** 18;\r
uint256 public _maxTxAmount = (_tTotal * 2) / 100;\r
uint256 public _maxWalletSize = (_tTotal * 2) / 100;\r
uint256 public _taxSwapThreshold = (_tTotal * 5) / 10000;\r
uint256 public _maxTaxSwap = (_tTotal * 1) / 100;\r
\r
IUniswapV2Router02 private uniswapV2Router;\r
bool private tradingOpen;\r
bool private inSwap = false;\r
bool private swapEnabled = false;\r
\r
event MaxTxAmountUpdated(uint _maxTxAmount);\r
modifier lockTheSwap() {\r
inSwap = true;\r
_;\r
inSwap = false;\r
}\r
\r
constructor(\r
) {\r
uniswapV2Router = IUniswapV2Router02(\r
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D\r
);\r
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(\r
address(this),\r
uniswapV2Router.WETH()\r
);\r
\r
_taxWallet = payable(_msgSender());\r
_balances[_msgSender()] = _tTotal;\r
_isExcludedFromFee[owner()] = true;\r
_isExcludedFromFee[address(this)] = true;\r
_isExcludedFromFee[_taxWallet] = true;\r
\r
_approve(msg.sender, address(uniswapV2Router), _tTotal);\r
\r
emit Transfer(address(0), _msgSender(), _tTotal);\r
}\r
\r
function name() public view returns (string memory) {\r
return _name;\r
}\r
\r
function symbol() public view returns (string memory) {\r
return _symbol;\r
}\r
\r
function decimals() public view returns (uint8) {\r
return _decimals;\r
}\r
\r
function totalSupply() public view override returns (uint256) {\r
return _tTotal;\r
}\r
\r
function balanceOf(address account) public view override returns (uint256) {\r
return _balances[account];\r
}\r
\r
function transfer(\r
address recipient,\r
uint256 amount\r
) public override returns (bool) {\r
_transfer(_msgSender(), recipient, amount);\r
return true;\r
}\r
\r
function allowance(\r
address owner,\r
address spender\r
) public view override returns (uint256) {\r
return _allowances[owner][spender];\r
}\r
\r
function approve(\r
address spender,\r
uint256 amount\r
) public override returns (bool) {\r
_approve(_msgSender(), spender, amount);\r
return true;\r
}\r
\r
function transferFrom(\r
address sender,\r
address recipient,\r
uint256 amount\r
) public override returns (bool) {\r
_transfer(sender, recipient, amount);\r
_approve(\r
sender,\r
_msgSender(),\r
_allowances[sender][_msgSender()] - amount\r
);\r
return true;\r
}\r
\r
function _approve(address owner, address spender, uint256 amount) private {\r
require(owner != address(0), "ERC20: approve from the zero address");\r
require(spender != address(0), "ERC20: approve to the zero address");\r
_allowances[owner][spender] = amount;\r
emit Approval(owner, spender, amount);\r
}\r
\r
function _transfer(address from, address to, uint256 amount) private {\r
require(from != address(0), "ERC20: transfer from the zero address");\r
require(to != address(0), "ERC20: transfer to the zero address");\r
require(amount > 0, "Transfer amount must be greater than zero");\r
\r
uint256 taxAmount = 0;\r
\r
if (from != owner() && to != owner()) {\r
require(\r
!bots[from] && !bots[to],\r
"Your address has been marked as a bot/sniper, you are unable to transfer or swap."\r
);\r
\r
if (!tradingOpen) {\r
require(\r
uniswapV2Pair != from && uniswapV2Pair != to,\r
"Trading is not active."\r
);\r
}\r
\r
//On Buy\r
if (\r
from == uniswapV2Pair &&\r
to != address(uniswapV2Router) &&\r
!_isExcludedFromFee[to]\r
) {\r
require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");\r
require(\r
balanceOf(to) + amount <= _maxWalletSize,\r
"Exceeds the maxWalletSize."\r
);\r
\r
if (firstBlock + 1 > block.number) {\r
require(!isContract(to));\r
bots[to] = true;\r
}\r
\r
taxAmount = (amount * Buyfee) / 100;\r
}\r
\r
//Regular transfer;\r
if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {\r
require(\r
balanceOf(to) + amount <= _maxWalletSize,\r
"Exceeds the maxWalletSize."\r
);\r
}\r
\r
//On sell\r
if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {\r
require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");\r
taxAmount = (amount * Sellfee) / 100;\r
}\r
\r
uint256 contractTokenBalance = balanceOf(address(this));\r
if (\r
!inSwap &&\r
to == uniswapV2Pair &&\r
swapEnabled &&\r
contractTokenBalance > _taxSwapThreshold\r
) {\r
swapTokensForEth(\r
contractTokenBalance >= _maxTaxSwap\r
? _maxTaxSwap\r
: contractTokenBalance\r
);\r
uint256 contractETHBalance = address(this).balance;\r
if (contractETHBalance > 0) {\r
sendETHToFee(address(this).balance);\r
}\r
}\r
}\r
\r
if (taxAmount > 0) {\r
_balances[address(this)] = _balances[address(this)] + taxAmount;\r
emit Transfer(from, address(this), taxAmount);\r
}\r
_balances[from] = _balances[from] - amount;\r
_balances[to] = _balances[to] + (amount - taxAmount);\r
emit Transfer(from, to, amount - taxAmount);\r
}\r
\r
function isContract(address account) private view returns (bool) {\r
uint256 size;\r
assembly {\r
size := extcodesize(account)\r
}\r
return size > 0;\r
}\r
\r
function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {\r
address[] memory path = new address[](2);\r
path[0] = address(this);\r
path[1] = uniswapV2Router.WETH();\r
_approve(address(this), address(uniswapV2Router), tokenAmount);\r
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(\r
tokenAmount,\r
0,\r
path,\r
address(this),\r
block.timestamp\r
);\r
}\r
\r
function removeLimits() external onlyOwner {\r
_maxTxAmount = _tTotal;\r
_maxWalletSize = _tTotal;\r
emit MaxTxAmountUpdated(_tTotal);\r
}\r
\r
function sendETHToFee(uint256 amount) private {\r
uint256 amountForServiceFee = (amount * 10) / 100;\r
uint256 amountFeeTotal = amount - amountForServiceFee;\r
_taxWallet.transfer(amountFeeTotal);\r
_serviceWallet.transfer(amountForServiceFee);\r
}\r
\r
function addBots(address[] memory bots_) external onlyOwner {\r
for (uint i = 0; i < bots_.length; i++) {\r
bots[bots_[i]] = true;\r
}\r
}\r
\r
function delBots(address[] memory notbot) external onlyOwner {\r
for (uint i = 0; i < notbot.length; i++) {\r
bots[notbot[i]] = false;\r
}\r
}\r
\r
function isBot(address a) public view returns (bool) {\r
return bots[a];\r
}\r
\r
function changeBuyfee(uint8 _buyFee) external onlyOwner {\r
Buyfee = _buyFee;\r
}\r
\r
function changeSellfee(uint8 _sellFee) external onlyOwner {\r
Sellfee = _sellFee;\r
}\r
\r
function Opentrading() external onlyOwner {\r
require(!tradingOpen, "trading is already open");\r
swapEnabled = true;\r
tradingOpen = true;\r
firstBlock = block.number;\r
}\r
\r
receive() external payable {}\r
}"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}
}}
Submitted on: 2025-10-23 16:49:43
Comments
Log in to comment.
No comments yet.