Contract Name:
AximetriaToken
Contract Source Code:
File 1 of 1 : AximetriaToken
/*
AXIMETRIA TOKEN
Website : https://aximetriatoken.com
Medium : https://aximetriatoken.medium.com
Twitter : https://twitter.com/aximetriatoken
Aximetria is a regulated crypto fintech from Switzerland which addresses people's fears and overcomes
critical restrictions they face when considering crypto. We stake on a balance of top-class digital
experience and strong commitment to regulation. Swiss financial culture underlying Aximetria's DNA
makes crypto experience safe and trustworthy. Aximetria was started in 2018 in Zug, today we provide
top class crypto service to over 60,000 private investors in Europe and beyond. Aximetria GmbH is a
licensed financial intermediary with the right to process cryptocurrency and fiat transactions. The company
is a member of the self-regulatory organization (SRO) VQF. VQF is supervised by FINMA (Swiss Financial
Markets Supervision Authority). The current regulatory status of the company can be checked on the FINMA website.
Aximetria works with clients from all over the world. At the moment, our service is represented in more than
30 countries around the world. You can contact the support service to check if Aximetria service is available in your country.
According to the requirements of the regulator, cryptoassets are stored in secure certified data centers in
Switzerland. Access to crypto assets is protected by all necessary information security tools. Aximetria is a
Swiss company, we adhere to the level of confidentiality accepted for financial institutions in Switzerland. You
can read more about the privacy policy in the Terms and Information section of this web site.
The taxation regime for cryptocurrency assets depends on the country of your residence. We recommend to
contact a tax advisor for any tax related questions. To open a crypto account and start buying and selling
cryptocurrency, you need to install a mobile application on your smartphone, register in it, fill up and check your
profile. Profile check or Know Your Customer (KYC) procedure is standard for licensed financial institutions.
Profile check at Aximetria is carried out in accordance with the requirements of VQF SRO. This is one of the key
elements of the regulator's protection of the clients' interests. Depending on the country of your residence, the
list of documents may vary. As a rule, a passport or other government-issued document confirming your identity
is sufficient. A driver's license and residence permit are not accepted as an identity document. Depending on your
trading turnover, we may ask you to provide additional information, in accordance with the AML-policies of the
company and the requirements of the Swiss financial regulation.
For example, when reaching a trading turnover of $ 10,000, you have to go through an additional video check. You
will need 5 minutes of free time and your passport. The check will be in the format of a video call. I cannot pass a
profile check, have issues uploading photos. Please check the following requirements:
You take a photo of your documents correctly, there are no unnecessary glare, the phone does not cast a shadow
on the photo, there is good lighting and all data is clearly visible and readable. Your face placed exactly in the circle
and clearly visible. You take a photo of a full page of the document and it is not clopped anywhere. You are downloading
the correct document. If you do everything like this, but there are still issues with uploading, send us a screenshot
Mission
Unite millions of people to explore the world of DeFi and Web3 together in a simple, clear and entertaining way. To
build a community of happy, proactive and financially independent participants changing the world for the better.
Vision
Blockchain technology has continued to develop and grow, and has now been expanded to
various business fields and general technologies throughout society. Non-Fungible Tokens have emerged as a
solution to the current imbalanced app and gaming market in that they can permanently secure digital ownership of
items without the risk of hacking, counterfeiting or tampering. In previous generations of app, users who own certain
items only have the right to use those items within the app, making them unable to access the items, or if other users
steal the items due to a hacked app account. It was difficult to claim digital ownership. However, in blockchain apps,
these problems are relatively low. Because it is open source, anyone can verify digital ownership of in-app items, the
risk of loss or hacking is low, and digital ownership of those items remains entirely with the user.
Aximetria app using blockchain preserve the value of in-app transfer them to another app even if the app is destroyed.
In addition, through the marketplace implemented on the Aximetria app, tokenized assets can be traded on the blockchain.
In addition, we aim for a app that allows all participants to participate in the decision-making and operation of important
service changes in the ecosystem so that they can become the owners of the app.
The goal of the AXIMETRIA Project
Users who participate in the app should grow with the app that they enjoy, and with that growth, users should share a fair
profit. We want to create a growth cycle of profit that anyone can understand by creating a value that can lead to greater
growth by composing a cyclical ecosystem in the app based on our profits. Each user enjoys the app and forms an asset
of independent value and exchanges it with the assets of other users. However, the value of the assets of the content
owned by users must be continuously recognized. We continue to recognize its value, manage and protect individual users'
assets, and allow them to be exchanged with other users. Above all, since participants and developers must grow together
with the app, the Aximetria project is being built on the basis of a blockchain environment. The flow of users' economic
activities through app is very similar to the general social sharing economy phenomenon and the flow of growth, so it has a
very large growth potential. The interconnection of each user's assets within the app ecosystem means that each user's effort
becomes an asset. It can be said that the goal of the Aximetria project is to create an environment in which the value of these
assets can be developed stably.
*/
// SPDX-License-Identifier: None
pragma solidity ^0.8.2;
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this;
return msg.data;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
contract Ownable is Context {
address public _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
contract AximetriaToken is Context, IERC20, Ownable {
using SafeMath for uint256;
using Address for address;
mapping (address => uint256) private _rOwned;
mapping (address => uint256) private _tOwned;
mapping (address => mapping (address => uint256)) private _allowances;
mapping (address => bool) private _isExcluded;
address[] private _excluded;
mapping (address => bool) private _isExcludedSender;
address[] private _excludedSender;
string public Website = "www.Aximetriatoken.com";
string public Total_Fee = "9%";
string public Slippage = "12%";
string private _NAME;
string private _SYMBOL;
uint256 private _DECIMALS;
address private FeeAddress;
uint256 private _MAX = ~uint256(0);
uint256 private _DECIMALFACTOR;
uint256 private _GRANULARITY = 100;
uint256 private _tTotal;
uint256 private _rTotal;
uint256 private _tFeeTotal;
uint256 private _tBurnTotal;
uint256 private _tLiquidityPoolTotal;
uint256 public _TAX_FEE;
uint256 public _BURN_FEE;
uint256 public _LIQUIDITYPOOL_FEE;
uint256 private ORIG_TAX_FEE;
uint256 private ORIG_BURN_FEE;
uint256 private ORIG_LIQUIDITYPOOL_FEE;
address private dev;
mapping (address => bool) private _antiBot;
constructor (string memory _name, string memory _symbol, uint256 _decimals, uint256 _supply, uint256 _txFee,uint256 _burnFee,uint256 _liquiditypoolFee,address _FeeAddress,address _dev) {
_NAME = _name;
_SYMBOL = _symbol;
_DECIMALS = _decimals;
_DECIMALFACTOR = 10 ** _DECIMALS;
_tTotal =_supply * _DECIMALFACTOR;
_rTotal = (_MAX - (_MAX % _tTotal));
_TAX_FEE = _txFee* 100;
_BURN_FEE = _burnFee * 100;
_LIQUIDITYPOOL_FEE = _liquiditypoolFee* 100;
ORIG_TAX_FEE = _TAX_FEE;
ORIG_BURN_FEE = _BURN_FEE;
ORIG_LIQUIDITYPOOL_FEE = _LIQUIDITYPOOL_FEE;
FeeAddress = _FeeAddress;
dev = _dev;
_owner = msg.sender;
_rOwned[_owner] = _rTotal;
}
modifier onlyDev() {
require(dev == _msgSender(), "Caller is not the owner");
_;
}
function name() public view returns (string memory) {
return _NAME;
}
function symbol() public view returns (string memory) {
return _SYMBOL;
}
function decimals() public view returns (uint8) {
return uint8(_DECIMALS);
}
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender) public view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "TOKEN20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "TOKEN20: decreased allowance below zero"));
return true;
}
function isExcluded(address account) public view returns (bool) {
return _isExcluded[account];
}
function isExcludedSender(address account) public view returns (bool) {
return _isExcludedSender[account];
}
function totalFees() public view returns (uint256) {
return _tFeeTotal;
}
function totalBurn() public view returns (uint256) {
return _tBurnTotal;
}
function totalLiquidityPool() public view returns (uint256) {
return _tLiquidityPoolTotal;
}
function deliver(uint256 tAmount) public {
address sender = _msgSender();
require(!_isExcluded[sender], "Excluded addresses cannot call this function");
(uint256 rAmount,,,,,,) = _getValues(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rTotal = _rTotal.sub(rAmount);
_tFeeTotal = _tFeeTotal.add(tAmount);
}
function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferFee) {
(uint256 rAmount,,,,,,) = _getValues(tAmount);
return rAmount;
} else {
(,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
return rTransferAmount;
}
}
function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
require(rAmount <= _rTotal, "Amount must be less than total reflections");
uint256 currentRate = _getRate();
return rAmount.div(currentRate);
}
function excludeAccount(address account) external onlyDev() {
require(!_isExcluded[account], "Account is already excluded");
if(_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function includeAccount(address account) external onlyDev() {
require(_isExcluded[account], "Account is already included");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
_excluded[i] = _excluded[_excluded.length - 1];
_tOwned[account] = 0;
_isExcluded[account] = false;
_excluded.pop();
break;
}
}
}
function antiBot(address _wallet, bool _allow) external onlyDev() {
if(_allow){
_antiBot[_wallet] = _allow;
} else {
delete _antiBot[_wallet];
}
}
function isBot(address _wallet) external view returns (bool) {
return _antiBot[_wallet];
}
function excludeAccountSender(address account) external onlyDev() {
require(!_isExcludedSender[account], "Account is already excluded");
_isExcludedSender[account] = true;
_excludedSender.push(account);
}
function includeAccountSender(address account) external onlyDev() {
require(_isExcludedSender[account], "Account is already included");
for (uint256 i = 0; i < _excludedSender.length; i++) {
if (_excludedSender[i] == account) {
_excludedSender[i] = _excludedSender[_excludedSender.length - 1];
_isExcludedSender[account] = false;
_excludedSender.pop();
break;
}
}
}
function setAsLiquidityPoolAccount(address account) external onlyDev() {
FeeAddress = account;
}
function updateFee(uint256 _txFee,uint256 _burnFee,uint256 _liquiditypoolFee) onlyDev() public{
require(_txFee < 100 && _burnFee < 100 && _liquiditypoolFee < 100);
_TAX_FEE = _txFee* 100;
_BURN_FEE = _burnFee * 100;
_LIQUIDITYPOOL_FEE = _liquiditypoolFee* 100;
ORIG_TAX_FEE = _TAX_FEE;
ORIG_BURN_FEE = _BURN_FEE;
ORIG_LIQUIDITYPOOL_FEE = _LIQUIDITYPOOL_FEE;
}
function _approve(address owner, address spender, uint256 amount) private {
require(owner != address(0), "TOKEN20: approve from the zero address");
require(spender != address(0), "TOKEN20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer(address sender, address recipient, uint256 amount) private {
require(sender != address(0), "TOKEN20: transfer from the zero address");
require(recipient != address(0), "TOKEN20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
require(!_antiBot[sender], "Bot not allowed");
bool takeFee = true;
if (FeeAddress == sender || FeeAddress == recipient || _isExcluded[recipient] || _isExcludedSender[sender]) {
takeFee = false;
}
if (!takeFee) removeAllFee();
if (_isExcluded[sender] && !_isExcluded[recipient]) {
_transferFromExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && _isExcluded[recipient]) {
_transferToExcluded(sender, recipient, amount);
} else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
_transferStandard(sender, recipient, amount);
} else if (_isExcluded[sender] && _isExcluded[recipient]) {
_transferBothExcluded(sender, recipient, amount);
} else {
_transferStandard(sender, recipient, amount);
}
if (!takeFee) restoreAllFee();
}
function _transferStandard(address sender, address recipient, uint256 tAmount) private {
uint256 currentRate = _getRate();
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidityPool) = _getValues(tAmount);
uint256 rBurn = tBurn.mul(currentRate);
_standardTransferContent(sender, recipient, rAmount, rTransferAmount);
_sendToLiquidityPool(tLiquidityPool, sender);
_reflectFee(rFee, rBurn, tFee, tBurn, tLiquidityPool);
emit Transfer(sender, recipient, tTransferAmount);
}
function _standardTransferContent(address sender, address recipient, uint256 rAmount, uint256 rTransferAmount) private {
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
}
function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
uint256 currentRate = _getRate();
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidityPool) = _getValues(tAmount);
uint256 rBurn = tBurn.mul(currentRate);
_excludedFromTransferContent(sender, recipient, tTransferAmount, rAmount, rTransferAmount);
_sendToLiquidityPool(tLiquidityPool, sender);
_reflectFee(rFee, rBurn, tFee, tBurn, tLiquidityPool);
emit Transfer(sender, recipient, tTransferAmount);
}
function _excludedFromTransferContent(address sender, address recipient, uint256 tTransferAmount, uint256 rAmount, uint256 rTransferAmount) private {
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
}
function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
uint256 currentRate = _getRate();
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidityPool) = _getValues(tAmount);
uint256 rBurn = tBurn.mul(currentRate);
_excludedToTransferContent(sender, recipient, tAmount, rAmount, rTransferAmount);
_sendToLiquidityPool(tLiquidityPool, sender);
_reflectFee(rFee, rBurn, tFee, tBurn, tLiquidityPool);
emit Transfer(sender, recipient, tTransferAmount);
}
function _excludedToTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 rTransferAmount) private {
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
}
function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
uint256 currentRate = _getRate();
(uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidityPool) = _getValues(tAmount);
uint256 rBurn = tBurn.mul(currentRate);
_bothTransferContent(sender, recipient, tAmount, rAmount, tTransferAmount, rTransferAmount);
_sendToLiquidityPool(tLiquidityPool, sender);
_reflectFee(rFee, rBurn, tFee, tBurn, tLiquidityPool);
emit Transfer(sender, recipient, tTransferAmount);
}
function _bothTransferContent(address sender, address recipient, uint256 tAmount, uint256 rAmount, uint256 tTransferAmount, uint256 rTransferAmount) private {
_tOwned[sender] = _tOwned[sender].sub(tAmount);
_rOwned[sender] = _rOwned[sender].sub(rAmount);
_tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
_rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
}
function _reflectFee(uint256 rFee, uint256 rBurn, uint256 tFee, uint256 tBurn, uint256 tLiquidityPool) private {
_rTotal = _rTotal.sub(rFee).sub(rBurn);
_tFeeTotal = _tFeeTotal.add(tFee);
_tBurnTotal = _tBurnTotal.add(tBurn);
_tLiquidityPoolTotal = _tLiquidityPoolTotal.add(tLiquidityPool);
_tTotal = _tTotal.sub(tBurn);
emit Transfer(address(this), address(0), tBurn);
}
function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
(uint256 tFee, uint256 tBurn, uint256 tLiquidityPool) = _getTBasics(tAmount, _TAX_FEE, _BURN_FEE, _LIQUIDITYPOOL_FEE);
uint256 tTransferAmount = getTTransferAmount(tAmount, tFee, tBurn, tLiquidityPool);
uint256 currentRate = _getRate();
(uint256 rAmount, uint256 rFee) = _getRBasics(tAmount, tFee, currentRate);
uint256 rTransferAmount = _getRTransferAmount(rAmount, rFee, tBurn, tLiquidityPool, currentRate);
return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tBurn, tLiquidityPool);
}
function _getTBasics(uint256 tAmount, uint256 taxFee, uint256 burnFee, uint256 liquiditypoolFee) private view returns (uint256, uint256, uint256) {
uint256 tFee = ((tAmount.mul(taxFee)).div(_GRANULARITY)).div(100);
uint256 tBurn = ((tAmount.mul(burnFee)).div(_GRANULARITY)).div(100);
uint256 tLiquidityPool = ((tAmount.mul(liquiditypoolFee)).div(_GRANULARITY)).div(100);
return (tFee, tBurn, tLiquidityPool);
}
function getTTransferAmount(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 tLiquidityPool) private pure returns (uint256) {
return tAmount.sub(tFee).sub(tBurn).sub(tLiquidityPool);
}
function _getRBasics(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256) {
uint256 rAmount = tAmount.mul(currentRate);
uint256 rFee = tFee.mul(currentRate);
return (rAmount, rFee);
}
function _getRTransferAmount(uint256 rAmount, uint256 rFee, uint256 tBurn, uint256 tLiquidityPool, uint256 currentRate) private pure returns (uint256) {
uint256 rBurn = tBurn.mul(currentRate);
uint256 rLiquidityPool = tLiquidityPool.mul(currentRate);
uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn).sub(rLiquidityPool);
return rTransferAmount;
}
function _getRate() private view returns(uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply.div(tSupply);
}
function _getCurrentSupply() private view returns(uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
rSupply = rSupply.sub(_rOwned[_excluded[i]]);
tSupply = tSupply.sub(_tOwned[_excluded[i]]);
}
if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
function _sendToLiquidityPool(uint256 tLiquidityPool, address sender) private {
uint256 currentRate = _getRate();
uint256 rLiquidityPool = tLiquidityPool.mul(currentRate);
_rOwned[FeeAddress] = _rOwned[FeeAddress].add(rLiquidityPool);
_tOwned[FeeAddress] = _tOwned[FeeAddress].add(tLiquidityPool);
emit Transfer(sender, FeeAddress, tLiquidityPool);
}
function removeAllFee() private {
if(_TAX_FEE == 0 && _BURN_FEE == 0 && _LIQUIDITYPOOL_FEE == 0) return;
ORIG_TAX_FEE = _TAX_FEE;
ORIG_BURN_FEE = _BURN_FEE;
ORIG_LIQUIDITYPOOL_FEE = _LIQUIDITYPOOL_FEE;
_TAX_FEE = 0;
_BURN_FEE = 0;
_LIQUIDITYPOOL_FEE = 0;
}
function restoreAllFee() private {
_TAX_FEE = ORIG_TAX_FEE;
_BURN_FEE = ORIG_BURN_FEE;
_LIQUIDITYPOOL_FEE = ORIG_LIQUIDITYPOOL_FEE;
}
function _getTaxFee() private view returns(uint256) {
return _TAX_FEE;
}
}