Source Code
Latest 25 from a total of 25 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 20157827 | 608 days ago | IN | 0.05008483 ETH | 0.00008741 | ||||
| Transfer | 20107790 | 615 days ago | IN | 0.09309537 ETH | 0.00015111 | ||||
| Transfer | 20057709 | 622 days ago | IN | 0.10658228 ETH | 0.00019747 | ||||
| Transfer | 20007578 | 629 days ago | IN | 0.10494521 ETH | 0.00021554 | ||||
| Transfer | 19957490 | 636 days ago | IN | 0.15910162 ETH | 0.0001541 | ||||
| Transfer | 19857379 | 650 days ago | IN | 0.27409858 ETH | 0.0001357 | ||||
| Transfer | 19782542 | 661 days ago | IN | 0.26940359 ETH | 0.00052437 | ||||
| Transfer | 19707223 | 671 days ago | IN | 0.40152021 ETH | 0.00024575 | ||||
| Transfer | 19657201 | 678 days ago | IN | 0.53724606 ETH | 0.00040253 | ||||
| Transfer | 19607242 | 685 days ago | IN | 0.85684699 ETH | 0.00041589 | ||||
| Transfer | 19558504 | 692 days ago | IN | 3.2623065 ETH | 0.00061609 | ||||
| Transfer | 19509048 | 699 days ago | IN | 0.85493374 ETH | 0.00049423 | ||||
| Transfer | 19476640 | 704 days ago | IN | 1.4046488 ETH | 0.00128939 | ||||
| Transfer | 19408138 | 713 days ago | IN | 1.35956442 ETH | 0.00228925 | ||||
| Transfer | 19358080 | 720 days ago | IN | 1.35750001 ETH | 0.00236848 | ||||
| Transfer | 19309550 | 727 days ago | IN | 2.41619367 ETH | 0.00096315 | ||||
| Transfer | 19261781 | 734 days ago | IN | 1.36973095 ETH | 0.00113162 | ||||
| Transfer | 19208243 | 741 days ago | IN | 1.88513315 ETH | 0.00098758 | ||||
| Transfer | 19158367 | 748 days ago | IN | 1.44373458 ETH | 0.00052577 | ||||
| Transfer | 19108472 | 755 days ago | IN | 1.24025162 ETH | 0.00039383 | ||||
| Transfer | 19058587 | 762 days ago | IN | 2.68227828 ETH | 0.00045308 | ||||
| Transfer | 19008565 | 769 days ago | IN | 2.72471367 ETH | 0.0007787 | ||||
| Transfer | 18959370 | 776 days ago | IN | 3.10649173 ETH | 0.00108674 | ||||
| Transfer | 18908895 | 783 days ago | IN | 1.95042764 ETH | 0.00105668 | ||||
| Transfer | 18901758 | 784 days ago | IN | 2.05430246 ETH | 0.0015 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24334215 | 25 days ago | 0.00394145 ETH | ||||
| Transfer | 24282843 | 32 days ago | 0.00523295 ETH | ||||
| Transfer | 24120045 | 55 days ago | 0.00142875 ETH | ||||
| Transfer | 23962164 | 77 days ago | 0.03619848 ETH | ||||
| Transfer | 23862532 | 91 days ago | 0.00226028 ETH | ||||
| Transfer | 23830191 | 95 days ago | 0.0219862 ETH | ||||
| Transfer | 23807715 | 98 days ago | 0.00891916 ETH | ||||
| Transfer | 23782227 | 102 days ago | 0.0015263 ETH | ||||
| Transfer | 23770333 | 104 days ago | 0.00716222 ETH | ||||
| Transfer | 23751445 | 106 days ago | 0.00053543 ETH | ||||
| Transfer | 23742778 | 108 days ago | 0.00079543 ETH | ||||
| Transfer | 23704660 | 113 days ago | 0.01677277 ETH | ||||
| Transfer | 23676298 | 117 days ago | 0.00074852 ETH | ||||
| Transfer | 23560241 | 133 days ago | 0.00065331 ETH | ||||
| Transfer | 23557728 | 133 days ago | 0.00722545 ETH | ||||
| Transfer | 23549800 | 135 days ago | 0.00367019 ETH | ||||
| Transfer | 23531645 | 137 days ago | 0.000572 ETH | ||||
| Transfer | 23523686 | 138 days ago | 0.00213962 ETH | ||||
| Transfer | 23494369 | 142 days ago | 0.00238702 ETH | ||||
| Transfer | 23405941 | 155 days ago | 0.00286585 ETH | ||||
| Transfer | 23396781 | 156 days ago | 0.00107138 ETH | ||||
| Transfer | 23378310 | 159 days ago | 0.00255993 ETH | ||||
| Transfer | 23372763 | 159 days ago | 0.00169831 ETH | ||||
| Transfer | 23370386 | 160 days ago | 0.00377022 ETH | ||||
| Transfer | 23264121 | 174 days ago | 0.00344173 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RevShare
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-12-05
*/
pragma solidity 0.8.19;
// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
pragma solidity 0.8.19;
interface IERC20Metadata is IERC20{
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() external 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;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
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 functionCallWithValue(target, data, 0, "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);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
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");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 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) {
// 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 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;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
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;
}
function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
z = x < y ? x : y;
}
function sqrt(uint256 y) internal pure returns (uint256 z) {
if (y > 3) {
z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
/**
* @dev Multiplies two int256 variables and fails on overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
// Detect overflow when multiplying MIN_INT256 with -1
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
/**
* @dev Division of two int256 variables and fails on overflow.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when dividing MIN_INT256 by -1
require(b != -1 || a != MIN_INT256);
// Solidity already throws when dividing by 0.
return a / b;
}
/**
* @dev Subtracts two int256 variables and fails on overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
/**
* @dev Adds two int256 variables and fails on overflow.
*/
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;
}
/**
* @dev Converts to absolute value, and fails on overflow.
*/
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? -a : a;
}
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
interface DividendPayingContractOptionalInterface {
function withdrawableDividendOf(address _owner) external view returns(uint256);
function withdrawnDividendOf(address _owner) external view returns(uint256);
function accumulativeDividendOf(address _owner) external view returns(uint256);
}
interface DividendPayingContractInterface {
function dividendOf(address _owner) external view returns(uint256);
function distributeDividends() external payable;
function withdrawDividend() external;
event DividendsDistributed(
address indexed from,
uint256 weiAmount
);
event DividendWithdrawn(
address indexed to,
uint256 weiAmount
);
}
contract DividendPayingContract is DividendPayingContractInterface, DividendPayingContractOptionalInterface, Ownable {
using SafeMath for uint256;
using SafeMathUint for uint256;
using SafeMathInt for int256;
uint256 constant internal magnitude = 2**128;
uint256 internal magnifiedDividendPerShare;
mapping(address => int256) internal magnifiedDividendCorrections;
mapping(address => uint256) internal withdrawnDividends;
mapping (address => uint256) public holderBalance;
uint256 public totalBalance;
uint256 public totalDividendsDistributed;
receive() external payable {
distributeDividends();
}
function distributeDividends() public override payable {
if(totalBalance > 0 && msg.value > 0){
magnifiedDividendPerShare = magnifiedDividendPerShare.add(
(msg.value).mul(magnitude) / totalBalance
);
emit DividendsDistributed(msg.sender, msg.value);
totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
}
}
function withdrawDividend() external virtual override {
_withdrawDividendOfUser(payable(msg.sender));
}
function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
uint256 _withdrawableDividend = withdrawableDividendOf(user);
if (_withdrawableDividend > 0) {
withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
emit DividendWithdrawn(user, _withdrawableDividend);
(bool success,) = user.call{value: _withdrawableDividend}("");
if(!success) {
withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
return 0;
}
return _withdrawableDividend;
}
return 0;
}
function withdrawDividendOfUserForCompound(address payable user) external onlyOwner returns (uint256 _withdrawableDividend) {
_withdrawableDividend = withdrawableDividendOf(user);
if (_withdrawableDividend > 0) {
withdrawnDividends[user] = withdrawnDividends[user] + _withdrawableDividend;
emit DividendWithdrawn(user, _withdrawableDividend);
}
(bool success,) = owner().call{value: _withdrawableDividend}("");
if(!success) {
withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
return 0;
}
}
function dividendOf(address _owner) external view override returns(uint256) {
return withdrawableDividendOf(_owner);
}
function withdrawableDividendOf(address _owner) public view override returns(uint256) {
return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
}
function withdrawnDividendOf(address _owner) external view override returns(uint256) {
return withdrawnDividends[_owner];
}
function accumulativeDividendOf(address _owner) public view override returns(uint256) {
return magnifiedDividendPerShare.mul(holderBalance[_owner]).toInt256Safe()
.add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
}
function _increase(address account, uint256 value) internal {
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
.sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
}
function _reduce(address account, uint256 value) internal {
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
.add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
}
function _setBalance(address account, uint256 newBalance) internal {
uint256 currentBalance = holderBalance[account];
holderBalance[account] = newBalance;
if(newBalance > currentBalance) {
uint256 increaseAmount = newBalance.sub(currentBalance);
_increase(account, increaseAmount);
totalBalance += increaseAmount;
} else if(newBalance < currentBalance) {
uint256 reduceAmount = currentBalance.sub(newBalance);
_reduce(account, reduceAmount);
totalBalance -= reduceAmount;
}
}
}
contract RevShare is DividendPayingContract {
event Claim(address indexed account, uint256 amount, bool indexed automatic);
mapping (address => bool) public excludedFromDividends;
constructor() {}
function getAccount(address _account)
public view returns (
address account,
uint256 withdrawableDividends,
uint256 totalDividends,
uint256 balance) {
account = _account;
withdrawableDividends = withdrawableDividendOf(account);
totalDividends = accumulativeDividendOf(account);
balance = holderBalance[account];
}
function setBalance(address payable account, uint256 newBalance) external onlyOwner {
if(excludedFromDividends[account]) {
return;
}
_setBalance(account, newBalance);
processAccount(account, true);
}
function processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
uint256 amount = _withdrawDividendOfUser(account);
if(amount > 0) {
emit Claim(account, amount, automatic);
return true;
}
return false;
}
function getTotalDividendsDistributed() external view returns (uint256) {
return totalDividendsDistributed;
}
function dividendTokenBalanceOf(address account) public view returns (uint256) {
return holderBalance[account];
}
function getNumberOfDividends() external view returns(uint256) {
return totalBalance;
}
function excludeFromDividends(address account) external onlyOwner {
excludedFromDividends[account] = true;
_setBalance(account, 0);
}
function includeInDividends(address account) external onlyOwner {
require(excludedFromDividends[account]);
excludedFromDividends[account] = false;
_setBalance(account, IERC20(owner()).balanceOf(account)); // sets balance back to token balance
}
}
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function withdraw(uint) external;
}
interface IPriceFeed {
function latestAnswer() external returns (int256);
}
contract ASG is ERC20, Ownable {
mapping (address => bool) public excludedFromFees;
mapping (address => bool) public exFromLimits;
address public marketingReceiver;
address public devReceiver;
Tax public buyTax;
Tax public sellTax;
RevShare public revShare;
TokenDistributionForTax public tokensForTax;
TxLimits public transactionLimits;
bool public transactionLimitsActive = true;
mapping(address => uint256) private _holderLastTransferBlock; // MEV protection
bool private antiSandwichEnabled = true;
uint256 private launchBlock;
uint256 private swapTokensAtAmount;
address public immutable pair;
IDexRouter public immutable dexRouter;
IWETH private immutable WETH;
IPriceFeed internal immutable priceFeed;
uint256 private latestEthPrice = 0;
uint64 public constant FEE_DIVISOR = 10000;
// structs
struct TxLimits {
uint96 transactionLimit;
uint96 walletLimit;
uint48 gasLimit;
bool gasLimitActive;
}
struct Tax {
uint48 mktingTax;
uint48 devTax;
uint48 lpTax;
uint48 revShareTax;
uint48 totalTax;
}
struct TokenDistributionForTax {
uint64 tokensForMkting;
uint64 tokensForLP;
uint64 tokensForDev;
uint64 tokensForRevShare;
bool gasSaver;
}
// events
event UpdatedTransactionLimit(uint newMax);
event UpdatedWalletLimit(uint newMax);
event SetExcludedFromFees(address _address, bool _isExcluded);
event SetExcludedFromLimits(address _address, bool _isExcluded);
event RemovedLimits();
event BuyTaxUpdated(uint newAmount);
event SellTaxUpdated(uint newAmount);
// constructor
constructor(StructLibrary.Params memory params)
ERC20(params.name, params.symbol)
{
_mint(address(this), params.totalSupply * 1e18 * params.liquidityPercentage / 10000);
uint256 leftoverTokens = (params.totalSupply * 1e18) - balanceOf(address(this));
if(leftoverTokens > 0){
_mint(msg.sender, leftoverTokens);
}
address _v2Router;
address _priceFeed;
if(block.chainid == 1){
_v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
_priceFeed = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
} else if(block.chainid == 5){
_v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Goerli ETH: Uniswap V2
_priceFeed = 0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e;
} else if(block.chainid == 56){
_v2Router = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
_priceFeed = 0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE;
} else if(block.chainid == 97){
_v2Router = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain Testnet: PCS V2
_priceFeed = 0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526;
} else if(block.chainid == 42161){
_v2Router = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
_priceFeed = 0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612;
} else {
revert("Chain not configured");
}
priceFeed = IPriceFeed(_priceFeed);
require(priceFeed.latestAnswer() > 0, "wrong price feed");
revShare = new RevShare();
dexRouter = IDexRouter(_v2Router);
transactionLimits.transactionLimit = uint96(totalSupply() * params.transactionLimit / 10000);
transactionLimits.walletLimit = uint96(totalSupply() * params.walletLimit / 10000);
transactionLimits.gasLimit = params.gasLimit * 1 gwei;
swapTokensAtAmount = totalSupply() * 25 / 100000;
marketingReceiver = params.marketingReceiver; // update
devReceiver = params.devReceiver; // update
buyTax.mktingTax = params.marketingTaxBuy;
buyTax.lpTax = params.lpTaxBuy;
buyTax.devTax = params.devTaxBuy;
buyTax.revShareTax = params.revShareTaxBuy;
buyTax.totalTax = buyTax.mktingTax + buyTax.lpTax + buyTax.devTax + buyTax.revShareTax;
sellTax.mktingTax = params.marketingTaxSell;
sellTax.lpTax = params.lpTaxSell;
sellTax.devTax = params.devTaxSell;
sellTax.revShareTax = params.revShareTaxSell;
sellTax.totalTax = sellTax.mktingTax + sellTax.lpTax + sellTax.devTax + buyTax.revShareTax;
tokensForTax.gasSaver = true;
WETH = IWETH(dexRouter.WETH());
pair = IDexFactory(dexRouter.factory()).createPair(address(this), address(WETH));
exFromLimits[pair] = true;
exFromLimits[msg.sender] = true;
exFromLimits[address(this)] = true;
exFromLimits[_v2Router] = true;
excludedFromFees[msg.sender] = true;
excludedFromFees[address(this)] = true;
excludedFromFees[address(0xdead)] = true;
excludedFromFees[_v2Router] = true;
revShare.excludeFromDividends(address(this));
revShare.excludeFromDividends(address(pair));
revShare.excludeFromDividends(address(0xdead));
_approve(address(this), address(dexRouter), type(uint256).max);
}
function _transfer(
address from,
address to,
uint256 amount
) internal virtual override {
if(!excludedFromFees[from] && !excludedFromFees[to]){
handleLimits(from, to, amount);
amount -= handleFee(from, to, amount);
}
super._transfer(from,to,amount);
revShare.setBalance(payable(to), balanceOf(to));
revShare.setBalance(payable(from), balanceOf(from));
}
function handleLimits(address from, address to, uint256 amount) internal {
if(transactionLimitsActive){
bool exFromLimitsTo = exFromLimits[to];
uint256 balanceOfTo = balanceOf(to);
TxLimits memory _transactionLimits = transactionLimits;
// buy
if (from == pair && !exFromLimitsTo) {
require(amount <= _transactionLimits.transactionLimit, "Max Txn");
require(amount + balanceOfTo <= _transactionLimits.walletLimit, "Max Wallet");
if(_transactionLimits.gasLimitActive){
if(block.number >= launchBlock + 4){
_transactionLimits.gasLimitActive = false;
transactionLimits = _transactionLimits;
} else {
if(block.number <= launchBlock + 1){
revert("Early buy");
}
require(tx.gasprice <= _transactionLimits.gasLimit, "Gas price exceeds limit.");
}
}
}
// sell
else if (to == pair && !exFromLimits[from]) {
require(amount <= _transactionLimits.transactionLimit, "Max Txn");
}
else if(!exFromLimitsTo) {
require(amount + balanceOfTo <= _transactionLimits.walletLimit, "Max Wallet");
}
}
if (antiSandwichEnabled){
if(to == pair){
require(_holderLastTransferBlock[from] < block.number, "Anti MEV");
} else {
_holderLastTransferBlock[to] = block.number;
_holderLastTransferBlock[tx.origin] = block.number;
}
}
}
function handleFee(address from, address to, uint256 amount) internal returns (uint256){
if(balanceOf(address(this)) >= swapTokensAtAmount && from != pair) {
convertTaxes();
}
uint128 tax = 0;
Tax memory taxes;
if (to == pair){
taxes = sellTax;
} else if (from == pair){
taxes = buyTax;
}
if(taxes.totalTax > 0){
TokenDistributionForTax memory tokensForTaxUpdate = tokensForTax;
tax = uint128(amount * taxes.totalTax / FEE_DIVISOR);
tokensForTaxUpdate.tokensForLP += uint64(tax * taxes.lpTax / taxes.totalTax / 1e9);
tokensForTaxUpdate.tokensForMkting += uint64(tax * taxes.mktingTax / taxes.totalTax / 1e9);
tokensForTaxUpdate.tokensForDev += uint64(tax * taxes.devTax / taxes.totalTax / 1e9);
tokensForTaxUpdate.tokensForRevShare += uint64(tax * taxes.revShareTax / taxes.totalTax / 1e9);
tokensForTax = tokensForTaxUpdate;
super._transfer(from, address(this), tax);
}
return tax;
}
function swapTokensForETH(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = address(WETH);
dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function convertTaxes() private {
uint256 contractBalance = balanceOf(address(this));
TokenDistributionForTax memory tokensForTaxMem = tokensForTax;
uint256 totalTokensToSwap = tokensForTaxMem.tokensForLP + tokensForTaxMem.tokensForMkting + tokensForTaxMem.tokensForDev + tokensForTaxMem.tokensForRevShare;
if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
if(contractBalance > swapTokensAtAmount * 20){
contractBalance = swapTokensAtAmount * 20;
}
if(tokensForTaxMem.tokensForLP > 0){
uint256 lpTokens = contractBalance * tokensForTaxMem.tokensForLP / totalTokensToSwap;
super._transfer(address(this), pair, lpTokens);
try ILpPair(pair).sync(){} catch {}
contractBalance -= lpTokens;
totalTokensToSwap -= tokensForTaxMem.tokensForLP;
}
if(contractBalance > 0){
swapTokensForETH(contractBalance);
uint256 ethBalance = address(this).balance;
bool success;
if(tokensForTaxMem.tokensForDev > 0){
(success,) = devReceiver.call{value: ethBalance * tokensForTaxMem.tokensForDev / totalTokensToSwap}("");
}
if(tokensForTaxMem.tokensForRevShare > 0){
(success,) = address(revShare).call{value: ethBalance * tokensForTaxMem.tokensForRevShare/ totalTokensToSwap}("");
}
ethBalance = address(this).balance;
if(ethBalance > 0){
(success,) = marketingReceiver.call{value: ethBalance}("");
}
}
tokensForTaxMem.tokensForLP = 0;
tokensForTaxMem.tokensForMkting = 0;
tokensForTaxMem.tokensForDev = 0;
tokensForTaxMem.tokensForRevShare = 0;
tokensForTax = tokensForTaxMem;
}
// owner functions
function changeExcludedFromFees(address _address, bool _isExcluded) external onlyOwner {
require(_address != address(0), "Zero Address");
require(_address != address(this), "Cannot unexcluded contract");
excludedFromFees[_address] = _isExcluded;
emit SetExcludedFromFees(_address, _isExcluded);
}
function changeExcludedFromLimits(address _address, bool _isExcluded) external onlyOwner {
require(_address != address(0), "Zero Address");
if(!_isExcluded){
require(_address != pair, "Cannot remove pair");
}
exFromLimits[_address] = _isExcluded;
emit SetExcludedFromLimits(_address, _isExcluded);
}
function updateTransactionLimit(uint96 newNumInTokens) external onlyOwner {
require(newNumInTokens >= (totalSupply() * 5 / 1000)/(10**decimals()), "Too low");
transactionLimits.transactionLimit = uint96(newNumInTokens * (10**decimals()));
emit UpdatedTransactionLimit(transactionLimits.transactionLimit);
}
function updateWalletLimit(uint96 newNumInTokens) external onlyOwner {
require(newNumInTokens >= (totalSupply() * 5 / 1000)/(10**decimals()), "Too low");
transactionLimits.walletLimit = uint96(newNumInTokens * (10**decimals()));
emit UpdatedWalletLimit(transactionLimits.walletLimit);
}
function changeSwapTokensAmount(uint256 newAmount) external onlyOwner {
require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
swapTokensAtAmount = newAmount;
}
function updateSellTax(uint48 _mktingTax, uint48 _lpTax, uint48 _devTax, uint48 _revShareTax) external onlyOwner {
Tax memory taxes;
taxes.mktingTax = _mktingTax;
taxes.lpTax = _lpTax;
taxes.devTax = _devTax;
taxes.revShareTax = _revShareTax;
taxes.totalTax = _mktingTax + _lpTax + _devTax + _revShareTax;
require(taxes.totalTax <= 1000, "Keep tax below 10%");
emit SellTaxUpdated(taxes.totalTax);
sellTax = taxes;
}
function setBuyTax(uint48 _mktingTax, uint48 _lpTax, uint48 _devTax, uint48 _revShareTax) external onlyOwner {
Tax memory taxes;
taxes.mktingTax = _mktingTax;
taxes.lpTax = _lpTax;
taxes.devTax = _devTax;
taxes.revShareTax = _revShareTax;
taxes.totalTax = _mktingTax + _lpTax + _devTax + _revShareTax;
require(taxes.totalTax <= 1000, "Keep tax below 10%");
emit BuyTaxUpdated(taxes.totalTax);
buyTax = taxes;
}
function removeLimits() external onlyOwner {
transactionLimitsActive = false;
TxLimits memory _transactionLimits;
uint256 supply = totalSupply();
_transactionLimits.transactionLimit = uint96(supply);
_transactionLimits.walletLimit = uint96(supply);
transactionLimits = _transactionLimits;
emit RemovedLimits();
}
function updateAntiMevEnabled(bool _enabled) external onlyOwner {
antiSandwichEnabled = _enabled;
}
function changeMarketingAddress(address _address) external onlyOwner {
require(_address != address(0), "zero address");
marketingReceiver = _address;
}
function changeDevAddress(address _address) external onlyOwner {
require(_address != address(0), "zero address");
devReceiver = _address;
}
receive() payable external {}
// dividend functions
function claim() external {
revShare.processAccount(payable(msg.sender), false);
}
function getTotalDividendsDistributed() external view returns (uint256) {
return revShare.totalDividendsDistributed();
}
function withdrawableDividendOf(address account) public view returns(uint256) {
return revShare.withdrawableDividendOf(account);
}
function dividendTokenBalanceOf(address account) public view returns (uint256) {
return revShare.holderBalance(account);
}
function getAccountDividendsInfo(address account)
external view returns (
address,
uint256,
uint256,
uint256) {
return revShare.getAccount(account);
}
function getNumberOfDividends() external view returns(uint256) {
return revShare.totalBalance();
}
function excludeFromDividends(address _wallet) external onlyOwner {
revShare.excludeFromDividends(_wallet);
}
function includeInDividends(address _wallet) external onlyOwner {
revShare.includeInDividends(_wallet);
}
function compound(uint256 minOutput) external {
uint256 amountEthForCompound = revShare.withdrawDividendOfUserForCompound(payable(msg.sender));
if(amountEthForCompound > 0){
buyBackTokens(amountEthForCompound, minOutput, msg.sender);
} else {
revert("No rewards");
}
}
function buyBackTokens(uint256 ethAmountInWei, uint256 minOut, address to) internal {
// generate the uniswap pair path of weth -> eth
address[] memory path = new address[](2);
path[0] = address(WETH);
path[1] = address(this);
// make the swap
dexRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
minOut,
path,
address(to),
block.timestamp
);
}
// helper views
function getCompoundOutputByEthAddress(uint256 rewardAmount) external view returns(uint256) {
if(rewardAmount == 0){
return 0;
}
address[] memory path = new address[](2);
path[0] = address(WETH);
path[1] = address(this);
uint256[] memory amounts = dexRouter.getAmountsOut(rewardAmount, path);
return amounts[1] - (amounts[1] * (buyTax.totalTax + 50) / FEE_DIVISOR);
}
function getCompoundOutputByAddress(address wallet) external view returns(uint256) {
uint256 rewardAmount = withdrawableDividendOf(wallet);
if(rewardAmount == 0){
return 0;
}
address[] memory path = new address[](2);
path[0] = address(WETH);
path[1] = address(this);
uint256[] memory amounts = dexRouter.getAmountsOut(rewardAmount, path);
return amounts[1] - (amounts[1] * (buyTax.totalTax + 50) / FEE_DIVISOR);
}
function addLp(address _to) external onlyOwner payable {
require(address(this).balance > 0 && balanceOf(address(this)) > 0);
WETH.deposit{value: address(this).balance}();
super._transfer(address(this), address(pair), balanceOf(address(this)));
IERC20(address(WETH)).transfer(address(pair), IERC20(address(WETH)).balanceOf(address(this)));
ILpPair(pair).mint(_to);
launchBlock = block.number;
transactionLimits.gasLimitActive = true;
latestEthPrice = uint256(priceFeed.latestAnswer());
}
function getMcap() public view returns (uint256){
return (IERC20(dexRouter.WETH()).balanceOf(address(pair)) * 1e18 * latestEthPrice / balanceOf(address(pair)) * (totalSupply()-balanceOf(address(0xdead))) / 1e18 / 1e8);
}
}
pragma solidity 0.8.19;
library StructLibrary {
struct Params {
string name;
string symbol;
uint112 totalSupply;
uint48 liquidityPercentage;
address marketingReceiver;
address devReceiver;
uint48 marketingTaxBuy;
uint48 devTaxBuy;
uint48 lpTaxBuy;
uint48 revShareTaxBuy;
uint48 marketingTaxSell;
uint48 devTaxSell;
uint48 lpTaxSell;
uint48 revShareTaxSell;
uint128 transactionLimit;
uint128 walletLimit;
uint48 gasLimit;
}
}
pragma solidity 0.8.19;
interface ILpPair {
function sync() external;
function mint(address to) external returns (uint liquidity);
}
interface IDexRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(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 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 IDexFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"totalDividends","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"bool","name":"automatic","type":"bool"}],"name":"processAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"user","type":"address"}],"name":"withdrawDividendOfUserForCompound","outputs":[{"internalType":"uint256","name":"_withdrawableDividend","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061116c806100616000396000f3fe6080604052600436106101395760003560e01c806391b89fba116100ab578063bc4c4b371161006f578063bc4c4b3714610369578063c0f306ef14610389578063dcb95ed9146103a9578063e30443bc146103c9578063f2fde38b146103e9578063fbcbc0f11461040957600080fd5b806391b89fba146102b0578063a8b9d240146102d0578063aafd847a146102f0578063ab6ddfa814610326578063ad7a672f1461035357600080fd5b80636843cd84116100fd5780636843cd84146101fd5780636a47400214610233578063715018a61461024857806371778e7d1461025d57806385a6b3ae146102725780638da5cb5b1461028857600080fd5b806303c833021461014d57806327ce01471461015557806330bb4cff1461018857806331e79db01461019d5780634e7b827f146101bd57600080fd5b3661014857610146610453565b005b600080fd5b610146610453565b34801561016157600080fd5b50610175610170366004610f56565b6104dd565b6040519081526020015b60405180910390f35b34801561019457600080fd5b50600654610175565b3480156101a957600080fd5b506101466101b8366004610f56565b610540565b3480156101c957600080fd5b506101ed6101d8366004610f56565b60076020526000908152604090205460ff1681565b604051901515815260200161017f565b34801561020957600080fd5b50610175610218366004610f56565b6001600160a01b031660009081526004602052604090205490565b34801561023f57600080fd5b506101466105a4565b34801561025457600080fd5b506101466105ad565b34801561026957600080fd5b50600554610175565b34801561027e57600080fd5b5061017560065481565b34801561029457600080fd5b506000546040516001600160a01b03909116815260200161017f565b3480156102bc57600080fd5b506101756102cb366004610f56565b610621565b3480156102dc57600080fd5b506101756102eb366004610f56565b610628565b3480156102fc57600080fd5b5061017561030b366004610f56565b6001600160a01b031660009081526003602052604090205490565b34801561033257600080fd5b50610175610341366004610f56565b60046020526000908152604090205481565b34801561035f57600080fd5b5061017560055481565b34801561037557600080fd5b506101ed610384366004610f73565b610654565b34801561039557600080fd5b506101466103a4366004610f56565b6106ec565b3480156103b557600080fd5b506101756103c4366004610f56565b6107e2565b3480156103d557600080fd5b506101466103e4366004610fb1565b610944565b3480156103f557600080fd5b50610146610404366004610f56565b6109a9565b34801561041557600080fd5b50610429610424366004610f56565b610a93565b604080516001600160a01b039095168552602085019390935291830152606082015260800161017f565b60006005541180156104655750600034115b156104db576005546104929061047f34600160801b610ad1565b6104899190610ff3565b60015490610b5a565b60015560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26006546104d79034610b5a565b6006555b565b6001600160a01b0381166000908152600260209081526040808320546004909252822054600154600160801b926105309261052b92610525916105209190610ad1565b610bb9565b90610bc9565b610c07565b61053a9190610ff3565b92915050565b6000546001600160a01b031633146105735760405162461bcd60e51b815260040161056a90611015565b60405180910390fd5b6001600160a01b0381166000908152600760205260408120805460ff191660011790556105a1908290610c1a565b50565b6105a133610cb3565b6000546001600160a01b031633146105d75760405162461bcd60e51b815260040161056a90611015565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061053a825b6001600160a01b03811660009081526003602052604081205461053a9061064e846104dd565b90610df4565b600080546001600160a01b0316331461067f5760405162461bcd60e51b815260040161056a90611015565b600061068a84610cb3565b905080156106e257821515846001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516106d091815260200190565b60405180910390a3600191505061053a565b5060009392505050565b6000546001600160a01b031633146107165760405162461bcd60e51b815260040161056a90611015565b6001600160a01b03811660009081526007602052604090205460ff1661073b57600080fd5b6001600160a01b0381166000908152600760205260409020805460ff191690556105a1816107716000546001600160a01b031690565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd919061104a565b610c1a565b600080546001600160a01b0316331461080d5760405162461bcd60e51b815260040161056a90611015565b61081682610628565b9050801561089a576001600160a01b038216600090815260036020526040902054610842908290611063565b6001600160a01b038316600081815260036020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906108919084815260200190565b60405180910390a25b600080546040516001600160a01b039091169083908381818185875af1925050503d80600081146108e7576040519150601f19603f3d011682016040523d82523d6000602084013e6108ec565b606091505b505090508061093d576001600160a01b0383166000908152600360205260409020546109189083610df4565b6001600160a01b038416600090815260036020526040812091909155915061093f9050565b505b919050565b6000546001600160a01b0316331461096e5760405162461bcd60e51b815260040161056a90611015565b6001600160a01b03821660009081526007602052604090205460ff166109a5576109988282610c1a565b6109a3826001610654565b505b5050565b6000546001600160a01b031633146109d35760405162461bcd60e51b815260040161056a90611015565b6001600160a01b038116610a385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8060008080610aa184610628565b9250610aac846104dd565b6001600160a01b03851660009081526004602052604090205494969395509392915050565b600082600003610ae35750600061053a565b6000610aef8385611076565b905082610afc8583610ff3565b14610b535760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161056a565b9392505050565b600080610b678385611063565b905083811015610b535760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161056a565b6000818181121561053a57600080fd5b600080610bd6838561108d565b905060008312158015610be95750838112155b80610bfe5750600083128015610bfe57508381125b610b5357600080fd5b600080821215610c1657600080fd5b5090565b6001600160a01b038216600090815260046020526040902080549082905580821115610c76576000610c4c8383610df4565b9050610c588482610e36565b8060056000828254610c6a9190611063565b909155506109a3915050565b808210156109a3576000610c8a8284610df4565b9050610c968482610e90565b8060056000828254610ca891906110b5565b909155505050505050565b600080610cbf83610628565b90508015610deb576001600160a01b038316600090815260036020526040902054610cea9082610b5a565b6001600160a01b038416600081815260036020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d90610d399084815260200190565b60405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114610d8e576040519150601f19603f3d011682016040523d82523d6000602084013e610d93565b606091505b5050905080610de4576001600160a01b038416600090815260036020526040902054610dbf9083610df4565b6001600160a01b03909416600090815260036020526040812094909455509192915050565b5092915050565b50600092915050565b6000610b5383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610eca565b610e70610e5161052083600154610ad190919063ffffffff16565b6001600160a01b03841660009081526002602052604090205490610f04565b6001600160a01b0390921660009081526002602052604090209190915550565b610e70610eab61052083600154610ad190919063ffffffff16565b6001600160a01b03841660009081526002602052604090205490610bc9565b60008184841115610eee5760405162461bcd60e51b815260040161056a91906110c8565b506000610efb84866110b5565b95945050505050565b600080610f118385611116565b905060008312158015610f245750838113155b80610bfe5750600083128015610bfe5750838113610b5357600080fd5b6001600160a01b03811681146105a157600080fd5b600060208284031215610f6857600080fd5b8135610b5381610f41565b60008060408385031215610f8657600080fd5b8235610f9181610f41565b915060208301358015158114610fa657600080fd5b809150509250929050565b60008060408385031215610fc457600080fd5b8235610fcf81610f41565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008261101057634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561105c57600080fd5b5051919050565b8082018082111561053a5761053a610fdd565b808202811582820484141761053a5761053a610fdd565b80820182811260008312801582168215821617156110ad576110ad610fdd565b505092915050565b8181038181111561053a5761053a610fdd565b600060208083528351808285015260005b818110156110f5578581018301518582016040015282016110d9565b506000604082860101526040601f19601f8301168501019250505092915050565b8181036000831280158383131683831282161715610de457610de4610fdd56fea2646970667358221220bc8601e2d854c613379181e652b6a4f819ee884eda50cf8a45b6213c60c654b264736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101395760003560e01c806391b89fba116100ab578063bc4c4b371161006f578063bc4c4b3714610369578063c0f306ef14610389578063dcb95ed9146103a9578063e30443bc146103c9578063f2fde38b146103e9578063fbcbc0f11461040957600080fd5b806391b89fba146102b0578063a8b9d240146102d0578063aafd847a146102f0578063ab6ddfa814610326578063ad7a672f1461035357600080fd5b80636843cd84116100fd5780636843cd84146101fd5780636a47400214610233578063715018a61461024857806371778e7d1461025d57806385a6b3ae146102725780638da5cb5b1461028857600080fd5b806303c833021461014d57806327ce01471461015557806330bb4cff1461018857806331e79db01461019d5780634e7b827f146101bd57600080fd5b3661014857610146610453565b005b600080fd5b610146610453565b34801561016157600080fd5b50610175610170366004610f56565b6104dd565b6040519081526020015b60405180910390f35b34801561019457600080fd5b50600654610175565b3480156101a957600080fd5b506101466101b8366004610f56565b610540565b3480156101c957600080fd5b506101ed6101d8366004610f56565b60076020526000908152604090205460ff1681565b604051901515815260200161017f565b34801561020957600080fd5b50610175610218366004610f56565b6001600160a01b031660009081526004602052604090205490565b34801561023f57600080fd5b506101466105a4565b34801561025457600080fd5b506101466105ad565b34801561026957600080fd5b50600554610175565b34801561027e57600080fd5b5061017560065481565b34801561029457600080fd5b506000546040516001600160a01b03909116815260200161017f565b3480156102bc57600080fd5b506101756102cb366004610f56565b610621565b3480156102dc57600080fd5b506101756102eb366004610f56565b610628565b3480156102fc57600080fd5b5061017561030b366004610f56565b6001600160a01b031660009081526003602052604090205490565b34801561033257600080fd5b50610175610341366004610f56565b60046020526000908152604090205481565b34801561035f57600080fd5b5061017560055481565b34801561037557600080fd5b506101ed610384366004610f73565b610654565b34801561039557600080fd5b506101466103a4366004610f56565b6106ec565b3480156103b557600080fd5b506101756103c4366004610f56565b6107e2565b3480156103d557600080fd5b506101466103e4366004610fb1565b610944565b3480156103f557600080fd5b50610146610404366004610f56565b6109a9565b34801561041557600080fd5b50610429610424366004610f56565b610a93565b604080516001600160a01b039095168552602085019390935291830152606082015260800161017f565b60006005541180156104655750600034115b156104db576005546104929061047f34600160801b610ad1565b6104899190610ff3565b60015490610b5a565b60015560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26006546104d79034610b5a565b6006555b565b6001600160a01b0381166000908152600260209081526040808320546004909252822054600154600160801b926105309261052b92610525916105209190610ad1565b610bb9565b90610bc9565b610c07565b61053a9190610ff3565b92915050565b6000546001600160a01b031633146105735760405162461bcd60e51b815260040161056a90611015565b60405180910390fd5b6001600160a01b0381166000908152600760205260408120805460ff191660011790556105a1908290610c1a565b50565b6105a133610cb3565b6000546001600160a01b031633146105d75760405162461bcd60e51b815260040161056a90611015565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600061053a825b6001600160a01b03811660009081526003602052604081205461053a9061064e846104dd565b90610df4565b600080546001600160a01b0316331461067f5760405162461bcd60e51b815260040161056a90611015565b600061068a84610cb3565b905080156106e257821515846001600160a01b03167fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf092836040516106d091815260200190565b60405180910390a3600191505061053a565b5060009392505050565b6000546001600160a01b031633146107165760405162461bcd60e51b815260040161056a90611015565b6001600160a01b03811660009081526007602052604090205460ff1661073b57600080fd5b6001600160a01b0381166000908152600760205260409020805460ff191690556105a1816107716000546001600160a01b031690565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd919061104a565b610c1a565b600080546001600160a01b0316331461080d5760405162461bcd60e51b815260040161056a90611015565b61081682610628565b9050801561089a576001600160a01b038216600090815260036020526040902054610842908290611063565b6001600160a01b038316600081815260036020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906108919084815260200190565b60405180910390a25b600080546040516001600160a01b039091169083908381818185875af1925050503d80600081146108e7576040519150601f19603f3d011682016040523d82523d6000602084013e6108ec565b606091505b505090508061093d576001600160a01b0383166000908152600360205260409020546109189083610df4565b6001600160a01b038416600090815260036020526040812091909155915061093f9050565b505b919050565b6000546001600160a01b0316331461096e5760405162461bcd60e51b815260040161056a90611015565b6001600160a01b03821660009081526007602052604090205460ff166109a5576109988282610c1a565b6109a3826001610654565b505b5050565b6000546001600160a01b031633146109d35760405162461bcd60e51b815260040161056a90611015565b6001600160a01b038116610a385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161056a565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8060008080610aa184610628565b9250610aac846104dd565b6001600160a01b03851660009081526004602052604090205494969395509392915050565b600082600003610ae35750600061053a565b6000610aef8385611076565b905082610afc8583610ff3565b14610b535760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161056a565b9392505050565b600080610b678385611063565b905083811015610b535760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161056a565b6000818181121561053a57600080fd5b600080610bd6838561108d565b905060008312158015610be95750838112155b80610bfe5750600083128015610bfe57508381125b610b5357600080fd5b600080821215610c1657600080fd5b5090565b6001600160a01b038216600090815260046020526040902080549082905580821115610c76576000610c4c8383610df4565b9050610c588482610e36565b8060056000828254610c6a9190611063565b909155506109a3915050565b808210156109a3576000610c8a8284610df4565b9050610c968482610e90565b8060056000828254610ca891906110b5565b909155505050505050565b600080610cbf83610628565b90508015610deb576001600160a01b038316600090815260036020526040902054610cea9082610b5a565b6001600160a01b038416600081815260036020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d90610d399084815260200190565b60405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114610d8e576040519150601f19603f3d011682016040523d82523d6000602084013e610d93565b606091505b5050905080610de4576001600160a01b038416600090815260036020526040902054610dbf9083610df4565b6001600160a01b03909416600090815260036020526040812094909455509192915050565b5092915050565b50600092915050565b6000610b5383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610eca565b610e70610e5161052083600154610ad190919063ffffffff16565b6001600160a01b03841660009081526002602052604090205490610f04565b6001600160a01b0390921660009081526002602052604090209190915550565b610e70610eab61052083600154610ad190919063ffffffff16565b6001600160a01b03841660009081526002602052604090205490610bc9565b60008184841115610eee5760405162461bcd60e51b815260040161056a91906110c8565b506000610efb84866110b5565b95945050505050565b600080610f118385611116565b905060008312158015610f245750838113155b80610bfe5750600083128015610bfe5750838113610b5357600080fd5b6001600160a01b03811681146105a157600080fd5b600060208284031215610f6857600080fd5b8135610b5381610f41565b60008060408385031215610f8657600080fd5b8235610f9181610f41565b915060208301358015158114610fa657600080fd5b809150509250929050565b60008060408385031215610fc457600080fd5b8235610fcf81610f41565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b60008261101057634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561105c57600080fd5b5051919050565b8082018082111561053a5761053a610fdd565b808202811582820484141761053a5761053a610fdd565b80820182811260008312801582168215821617156110ad576110ad610fdd565b505092915050565b8181038181111561053a5761053a610fdd565b600060208083528351808285015260005b818110156110f5578581018301518582016040015282016110d9565b506000604082860101526040601f19601f8301168501019250505092915050565b8181036000831280158383131683831282161715610de457610de4610fdd56fea2646970667358221220bc8601e2d854c613379181e652b6a4f819ee884eda50cf8a45b6213c60c654b264736f6c63430008130033
Deployed Bytecode Sourcemap
30416:2004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26739:21;:19;:21::i;:::-;30416:2004;;;;;26776:417;;;:::i;29093:259::-;;;;;;;;;;-1:-1:-1;29093:259:0;;;;;:::i;:::-;;:::i;:::-;;;548:25:1;;;536:2;521:18;29093:259:0;;;;;;;;31624:123;;;;;;;;;;-1:-1:-1;31714:25:0;;31624:123;;31987:152;;;;;;;;;;-1:-1:-1;31987:152:0;;;;;:::i;:::-;;:::i;30554:54::-;;;;;;;;;;-1:-1:-1;30554:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;749:14:1;;742:22;724:41;;712:2;697:18;30554:54:0;584:187:1;31752:118:0;;;;;;;;;;-1:-1:-1;31752:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;31843:22:0;31822:7;31843:22;;;:13;:22;;;;;;;31752:118;27201:117;;;;;;;;;;;;;:::i;13157:150::-;;;;;;;;;;;;;:::i;31878:101::-;;;;;;;;;;-1:-1:-1;31959:12:0;;31878:101;;26652:40;;;;;;;;;;;;;;;;12943:79;;;;;;;;;;-1:-1:-1;12981:7:0;13008:6;12943:79;;-1:-1:-1;;;;;13008:6:0;;;922:51:1;;910:2;895:18;12943:79:0;776:203:1;28626:132:0;;;;;;;;;;-1:-1:-1;28626:132:0;;;;;:::i;:::-;;:::i;28766:174::-;;;;;;;;;;-1:-1:-1;28766:174:0;;;;;:::i;:::-;;:::i;28948:137::-;;;;;;;;;;-1:-1:-1;28948:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;29051:26:0;29024:7;29051:26;;;:18;:26;;;;;;;28948:137;26560:49;;;;;;;;;;-1:-1:-1;26560:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;26616:27;;;;;;;;;;;;;;;;31323:293;;;;;;;;;;-1:-1:-1;31323:293:0;;;;;:::i;:::-;;:::i;32147:270::-;;;;;;;;;;-1:-1:-1;32147:270:0;;;;;:::i;:::-;;:::i;27988:630::-;;;;;;;;;;-1:-1:-1;27988:630:0;;;;;:::i;:::-;;:::i;31066:245::-;;;;;;;;;;-1:-1:-1;31066:245:0;;;;;:::i;:::-;;:::i;13315:244::-;;;;;;;;;;-1:-1:-1;13315:244:0;;;;;:::i;:::-;;:::i;30641:419::-;;;;;;;;;;-1:-1:-1;30641:419:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;2250:32:1;;;2232:51;;2314:2;2299:18;;2292:34;;;;2342:18;;;2335:34;2400:2;2385:18;;2378:34;2219:3;2204:19;30641:419:0;2001:417:1;26776::0;26860:1;26845:12;;:16;:33;;;;;26877:1;26865:9;:13;26845:33;26842:344;;;26999:12;;26922:104;;26970:26;26971:9;-1:-1:-1;;;26970:15:0;:26::i;:::-;:41;;;;:::i;:::-;26922:25;;;:29;:104::i;:::-;26894:25;:132;27046:43;;27079:9;548:25:1;;27067:10:0;;27046:43;;536:2:1;521:18;27046:43:0;;;;;;;27134:25;;:40;;27164:9;27134:29;:40::i;:::-;27106:25;:68;26842:344;26776:417::o;29093:259::-;-1:-1:-1;;;;;29279:36:0;;29170:7;29279:36;;;:28;:36;;;;;;;;;29227:13;:21;;;;;;29197:25;;-1:-1:-1;;;26279:6:0;29197:135;;:119;;:67;;:52;;:25;:29;:52::i;:::-;:65;:67::i;:::-;:81;;:119::i;:::-;:133;:135::i;:::-;:147;;;;:::i;:::-;29190:154;29093:259;-1:-1:-1;;29093:259:0:o;31987:152::-;13070:6;;-1:-1:-1;;;;;13070:6:0;202:10;13070:22;13062:67;;;;-1:-1:-1;;;13062:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;32061:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;32061:37:0::1;32094:4;32061:37;::::0;;32108:23:::1;::::0;32083:7;;32108:11:::1;:23::i;:::-;31987:152:::0;:::o;27201:117::-;27266:44;27298:10;27266:23;:44::i;13157:150::-;13070:6;;-1:-1:-1;;;;;13070:6:0;202:10;13070:22;13062:67;;;;-1:-1:-1;;;13062:67:0;;;;;;;:::i;:::-;13266:1:::1;13250:6:::0;;13229:40:::1;::::0;-1:-1:-1;;;;;13250:6:0;;::::1;::::0;13229:40:::1;::::0;13266:1;;13229:40:::1;13297:1;13280:19:::0;;-1:-1:-1;;;;;;13280:19:0::1;::::0;;13157:150::o;28626:132::-;28693:7;28720:30;28743:6;28766:174;-1:-1:-1;;;;;28905:26:0;;28843:7;28905:26;;;:18;:26;;;;;;28870:62;;:30;28924:6;28870:22;:30::i;:::-;:34;;:62::i;31323:293::-;31414:4;13070:6;;-1:-1:-1;;;;;13070:6:0;202:10;13070:22;13062:67;;;;-1:-1:-1;;;13062:67:0;;;;;;;:::i;:::-;31431:14:::1;31448:32;31472:7;31448:23;:32::i;:::-;31431:49:::0;-1:-1:-1;31493:10:0;;31490:97:::1;;31548:9;31525:33;;31531:7;-1:-1:-1::0;;;;;31525:33:0::1;;31540:6;31525:33;;;;548:25:1::0;;536:2;521:18;;402:177;31525:33:0::1;;;;;;;;31574:4;31567:11;;;;;31490:97;-1:-1:-1::0;31603:5:0::1;::::0;31323:293;-1:-1:-1;;;31323:293:0:o;32147:270::-;13070:6;;-1:-1:-1;;;;;13070:6:0;202:10;13070:22;13062:67;;;;-1:-1:-1;;;13062:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32227:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;32219:39;;;::::0;::::1;;-1:-1:-1::0;;;;;32266:30:0;::::1;32299:5;32266:30:::0;;;:21:::1;:30;::::0;;;;:38;;-1:-1:-1;;32266:38:0::1;::::0;;32315:56:::1;32288:7:::0;32343::::1;12981::::0;13008:6;-1:-1:-1;;;;;13008:6:0;;12943:79;32343:7:::1;32336:34;::::0;-1:-1:-1;;;32336:34:0;;-1:-1:-1;;;;;940:32:1;;;32336:34:0::1;::::0;::::1;922:51:1::0;32336:25:0;;;::::1;::::0;::::1;::::0;895:18:1;;32336:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32315:11;:56::i;27988:630::-:0;28081:29;13070:6;;-1:-1:-1;;;;;13070:6:0;202:10;13070:22;13062:67;;;;-1:-1:-1;;;13062:67:0;;;;;;;:::i;:::-;28147:28:::1;28170:4;28147:22;:28::i;:::-;28123:52:::0;-1:-1:-1;28190:25:0;;28186:199:::1;;-1:-1:-1::0;;;;;28259:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;:48:::1;::::0;28286:21;;28259:48:::1;:::i;:::-;-1:-1:-1::0;;;;;28232:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;;:75;;;;28327:46;;::::1;::::0;::::1;::::0;28351:21;548:25:1;;536:2;521:18;;402:177;28327:46:0::1;;;;;;;;28186:199;28396:12;13008:6:::0;;28413:46:::1;::::0;-1:-1:-1;;;;;13008:6:0;;;;28433:21;;28396:12;28413:46;28396:12;28413:46;28433:21;13008:6;28413:46:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28395:64;;;28474:7;28470:141;;-1:-1:-1::0;;;;;28525:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;;:51:::1;::::0;28554:21;28525:28:::1;:51::i;:::-;-1:-1:-1::0;;;;;28498:24:0;::::1;;::::0;;;:18:::1;:24;::::0;;;;:78;;;;:24;-1:-1:-1;28591:8:0::1;::::0;-1:-1:-1;28591:8:0::1;28470:141;28112:506;13140:1;27988:630:::0;;;:::o;31066:245::-;13070:6;;-1:-1:-1;;;;;13070:6:0;202:10;13070:22;13062:67;;;;-1:-1:-1;;;13062:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31164:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;31205:7;31161:59;31232:32;31244:7;31253:10;31232:11;:32::i;:::-;31274:29;31289:7;31298:4;31274:14;:29::i;:::-;;13140:1;31066:245:::0;;:::o;13315:244::-;13070:6;;-1:-1:-1;;;;;13070:6:0;202:10;13070:22;13062:67;;;;-1:-1:-1;;;13062:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13404:22:0;::::1;13396:73;;;::::0;-1:-1:-1;;;13396:73:0;;3869:2:1;13396:73:0::1;::::0;::::1;3851:21:1::0;3908:2;3888:18;;;3881:30;3947:34;3927:18;;;3920:62;-1:-1:-1;;;3998:18:1;;;3991:36;4044:19;;13396:73:0::1;3667:402:1::0;13396:73:0::1;13506:6;::::0;;13485:38:::1;::::0;-1:-1:-1;;;;;13485:38:0;;::::1;::::0;13506:6;::::1;::::0;13485:38:::1;::::0;::::1;13534:6;:17:::0;;-1:-1:-1;;;;;;13534:17:0::1;-1:-1:-1::0;;;;;13534:17:0;;;::::1;::::0;;;::::1;::::0;;13315:244::o;30641:419::-;30872:8;30723:15;;;30917:31;30872:8;30917:22;:31::i;:::-;30893:55;;30976:31;30999:7;30976:22;:31::i;:::-;-1:-1:-1;;;;;31030:22:0;;;;;;:13;:22;;;;;;31044:7;;30641:419;;-1:-1:-1;30959:48:0;31030:22;30641:419;-1:-1:-1;;30641:419:0:o;21648:471::-;21706:7;21951:1;21956;21951:6;21947:47;;-1:-1:-1;21981:1:0;21974:8;;21947:47;22006:9;22018:5;22022:1;22018;:5;:::i;:::-;22006:17;-1:-1:-1;22051:1:0;22042:5;22046:1;22006:17;22042:5;:::i;:::-;:10;22034:56;;;;-1:-1:-1;;;22034:56:0;;4449:2:1;22034:56:0;;;4431:21:1;4488:2;4468:18;;;4461:30;4527:34;4507:18;;;4500:62;-1:-1:-1;;;4578:18:1;;;4571:31;4619:19;;22034:56:0;4247:397:1;22034:56:0;22110:1;21648:471;-1:-1:-1;;;21648:471:0:o;21081:181::-;21139:7;;21171:5;21175:1;21171;:5;:::i;:::-;21159:17;;21200:1;21195;:6;;21187:46;;;;-1:-1:-1;;;21187:46:0;;4851:2:1;21187:46:0;;;4833:21:1;4890:2;4870:18;;;4863:30;4929:29;4909:18;;;4902:57;4976:18;;21187:46:0;4649:351:1;25182:134:0;25238:6;25271:1;25288:6;;;;25280:15;;;;;24617:176;24673:6;;24703:5;24707:1;24703;:5;:::i;:::-;24692:16;;24733:1;24728;:6;;:16;;;;;24743:1;24738;:6;;24728:16;24727:38;;;;24754:1;24750;:5;:14;;;;;24763:1;24759;:5;24750:14;24719:47;;;;;25022:127;25078:7;25111:1;25106;:6;;25098:15;;;;;;-1:-1:-1;25139:1:0;25022:127::o;29828:579::-;-1:-1:-1;;;;;29931:22:0;;29906;29931;;;:13;:22;;;;;;;29964:35;;;;30013:27;;;30010:390;;;30053:22;30078:30;:10;30093:14;30078;:30::i;:::-;30053:55;;30119:34;30129:7;30138:14;30119:9;:34::i;:::-;30180:14;30164:12;;:30;;;;;;;:::i;:::-;;;;-1:-1:-1;30010:390:0;;-1:-1:-1;;30010:390:0;;30228:14;30215:10;:27;30212:188;;;30255:20;30278:30;:14;30297:10;30278:18;:30::i;:::-;30255:53;;30319:30;30327:7;30336:12;30319:7;:30::i;:::-;30376:12;30360;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;;29895:512:0;29828:579;;:::o;27326:654::-;27399:7;27419:29;27451:28;27474:4;27451:22;:28::i;:::-;27419:60;-1:-1:-1;27494:25:0;;27490:462;;-1:-1:-1;;;;;27559:24:0;;;;;;:18;:24;;;;;;:51;;27588:21;27559:28;:51::i;:::-;-1:-1:-1;;;;;27532:24:0;;;;;;:18;:24;;;;;;;:78;;;;27628:46;;;;;;27652:21;548:25:1;;536:2;521:18;;402:177;27628:46:0;;;;;;;;27686:12;27703:4;-1:-1:-1;;;;;27703:9:0;27720:21;27703:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27685:61;;;27763:7;27759:141;;-1:-1:-1;;;;;27814:24:0;;;;;;:18;:24;;;;;;:51;;27843:21;27814:28;:51::i;:::-;-1:-1:-1;;;;;27787:24:0;;;;;;;:18;:24;;;;;:78;;;;-1:-1:-1;27787:24:0;;27326:654;-1:-1:-1;;27326:654:0:o;27759:141::-;-1:-1:-1;27919:21:0;27326:654;-1:-1:-1;;27326:654:0:o;27490:462::-;-1:-1:-1;27971:1:0;;27326:654;-1:-1:-1;;27326:654:0:o;21270:136::-;21328:7;21355:43;21359:1;21362;21355:43;;;;;;;;;;;;;;;;;:3;:43::i;29360:227::-;29471:108;29524:53;29525:36;29555:5;29525:25;;:29;;:36;;;;:::i;29524:53::-;-1:-1:-1;;;;;29471:37:0;;;;;;:28;:37;;;;;;;:51;:108::i;:::-;-1:-1:-1;;;;;29431:37:0;;;;;;;:28;:37;;;;;:148;;;;-1:-1:-1;29360:227:0:o;29595:225::-;29704:108;29757:53;29758:36;29788:5;29758:25;;:29;;:36;;;;:::i;29757:53::-;-1:-1:-1;;;;;29704:37:0;;;;;;:28;:37;;;;;;;:51;:108::i;21414:226::-;21534:7;21570:12;21562:6;;;;21554:29;;;;-1:-1:-1;;;21554:29:0;;;;;;;;:::i;:::-;-1:-1:-1;21594:9:0;21606:5;21610:1;21606;:5;:::i;:::-;21594:17;21414:226;-1:-1:-1;;;;;21414:226:0:o;24353:176::-;24409:6;;24439:5;24443:1;24439;:5;:::i;:::-;24428:16;;24469:1;24464;:6;;:16;;;;;24479:1;24474;:6;;24464:16;24463:38;;;;24490:1;24486;:5;:14;;;;;24499:1;24495;:5;24455:47;;;;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;984:424::-;1057:6;1065;1118:2;1106:9;1097:7;1093:23;1089:32;1086:52;;;1134:1;1131;1124:12;1086:52;1173:9;1160:23;1192:31;1217:5;1192:31;:::i;:::-;1242:5;-1:-1:-1;1299:2:1;1284:18;;1271:32;1341:15;;1334:23;1322:36;;1312:64;;1372:1;1369;1362:12;1312:64;1395:7;1385:17;;;984:424;;;;;:::o;1673:323::-;1749:6;1757;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1865:9;1852:23;1884:31;1909:5;1884:31;:::i;:::-;1934:5;1986:2;1971:18;;;;1958:32;;-1:-1:-1;;;1673:323:1:o;2423:127::-;2484:10;2479:3;2475:20;2472:1;2465:31;2515:4;2512:1;2505:15;2539:4;2536:1;2529:15;2555:217;2595:1;2621;2611:132;;2665:10;2660:3;2656:20;2653:1;2646:31;2700:4;2697:1;2690:15;2728:4;2725:1;2718:15;2611:132;-1:-1:-1;2757:9:1;;2555:217::o;2777:356::-;2979:2;2961:21;;;2998:18;;;2991:30;3057:34;3052:2;3037:18;;3030:62;3124:2;3109:18;;2777:356::o;3138:184::-;3208:6;3261:2;3249:9;3240:7;3236:23;3232:32;3229:52;;;3277:1;3274;3267:12;3229:52;-1:-1:-1;3300:16:1;;3138:184;-1:-1:-1;3138:184:1:o;3327:125::-;3392:9;;;3413:10;;;3410:36;;;3426:18;;:::i;4074:168::-;4147:9;;;4178;;4195:15;;;4189:22;;4175:37;4165:71;;4216:18;;:::i;5005:216::-;5069:9;;;5097:11;;;5044:3;5127:9;;5155:10;;5151:19;;5180:10;;5172:19;;5148:44;5145:70;;;5195:18;;:::i;:::-;5145:70;;5005:216;;;;:::o;5226:128::-;5293:9;;;5314:11;;;5311:37;;;5328:18;;:::i;5359:548::-;5471:4;5500:2;5529;5518:9;5511:21;5561:6;5555:13;5604:6;5599:2;5588:9;5584:18;5577:34;5629:1;5639:140;5653:6;5650:1;5647:13;5639:140;;;5748:14;;;5744:23;;5738:30;5714:17;;;5733:2;5710:26;5703:66;5668:10;;5639:140;;;5643:3;5828:1;5823:2;5814:6;5803:9;5799:22;5795:31;5788:42;5898:2;5891;5887:7;5882:2;5874:6;5870:15;5866:29;5855:9;5851:45;5847:54;5839:62;;;;5359:548;;;;:::o;5912:200::-;5978:9;;;5951:4;6006:9;;6034:10;;6046:12;;;6030:29;6069:12;;;6061:21;;6027:56;6024:82;;;6086:18;;:::i
Swarm Source
ipfs://bc8601e2d854c613379181e652b6a4f819ee884eda50cf8a45b6213c60c654b2
Loading...
Loading
Loading...
Loading
Net Worth in USD
$10,632.62
Net Worth in ETH
5.476573
Token Allocations
ETH
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,942.38 | 5.474 | $10,632.62 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.