Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 30 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 21213640 | 483 days ago | IN | 0 ETH | 0.0004852 | ||||
| Transfer | 21213342 | 483 days ago | IN | 0 ETH | 0.00052823 | ||||
| Transfer | 21213143 | 483 days ago | IN | 0 ETH | 0.00046744 | ||||
| Transfer | 21193031 | 486 days ago | IN | 0 ETH | 0.00076471 | ||||
| Transfer | 21192833 | 486 days ago | IN | 0 ETH | 0.0008102 | ||||
| Transfer | 21112731 | 497 days ago | IN | 0 ETH | 0.00017312 | ||||
| Transfer | 21100239 | 499 days ago | IN | 0 ETH | 0.00020756 | ||||
| Transfer | 21100175 | 499 days ago | IN | 0 ETH | 0.00019028 | ||||
| Transfer | 21092606 | 500 days ago | IN | 0 ETH | 0.00028956 | ||||
| Transfer | 21077246 | 502 days ago | IN | 0 ETH | 0.00073172 | ||||
| Add To Transfer ... | 21076465 | 503 days ago | IN | 0 ETH | 0.0005615 | ||||
| Batch Transfer | 20468646 | 587 days ago | IN | 0 ETH | 0.00015512 | ||||
| Transfer | 20468603 | 587 days ago | IN | 0 ETH | 0.00020738 | ||||
| Batch Transfer | 20468184 | 587 days ago | IN | 0 ETH | 0.00011678 | ||||
| Batch Transfer | 20468074 | 587 days ago | IN | 0 ETH | 0.0001213 | ||||
| Transfer | 20467849 | 588 days ago | IN | 0 ETH | 0.00016434 | ||||
| Transfer | 20467703 | 588 days ago | IN | 0 ETH | 0.00012702 | ||||
| Transfer | 20434107 | 592 days ago | IN | 0 ETH | 0.00061051 | ||||
| Transfer | 20431579 | 593 days ago | IN | 0 ETH | 0.00022597 | ||||
| Transfer | 20419752 | 594 days ago | IN | 0 ETH | 0.00030437 | ||||
| Transfer | 20419719 | 594 days ago | IN | 0 ETH | 0.00046977 | ||||
| Transfer | 20418743 | 594 days ago | IN | 0 ETH | 0.00037129 | ||||
| Transfer | 20182404 | 627 days ago | IN | 0 ETH | 0.00026768 | ||||
| Add To Transfer ... | 20182388 | 627 days ago | IN | 0 ETH | 0.0001906 | ||||
| Update Liquidity... | 20182373 | 627 days ago | IN | 0 ETH | 0.00012718 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FinanceCoin
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./utils/TransferControl.sol";
import "./utils/RewardManager.sol";
import "./utils/BlackList.sol";
contract FinanceCoin is
ERC20,
ERC20Pausable,
Ownable,
BlackList,
TransferControl,
RewardManager
{
uint256 public constant INITIAL_SUPPLY = 5000 * 10 ** 0;
constructor(
address ownerAddress
)
ERC20("FinanceCoin", "xFNC")
Ownable(ownerAddress)
RewardManager(ownerAddress)
{
_mint(ownerAddress, INITIAL_SUPPLY * (10 ** uint(decimals())));
_addToTransferAllowed(ownerAddress);
}
modifier requireNonZeroValue(uint256 value) {
require(value > 0, "FinanceCoin:: Value must be greater than zero");
_;
}
function approve(
address spender,
uint256 value
)
public
virtual
override
whenNotPaused
whenNotBlackListed(_msgSender(), spender)
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
function transfer(
address to,
uint256 value
)
public
virtual
override
whenNotPaused
requireNonZeroValue(value)
requireTokenTransferEnabled(_msgSender())
whenNotBlackListed(_msgSender(), to)
returns (bool)
{
address sender = _msgSender();
_transfer(sender, to, value);
return true;
}
function transferFrom(
address from,
address to,
uint256 value
)
public
virtual
override
whenNotPaused
requireNonZeroValue(value)
requireTokenTransferEnabled(_msgSender())
whenNotBlackListed(from, to)
requireNotBlackListed(_msgSender())
returns (bool)
{
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
function batchTransfer(
address[] memory recipients,
uint256[] memory values
)
external
whenNotPaused
requireTokenTransferEnabled(_msgSender())
whenNotBlackListedBatch(_msgSender(), recipients)
returns (bool)
{
require(
recipients.length == values.length,
"FinanceCoin: Recipients and values length mismatch"
);
address sender = _msgSender();
for (uint256 i = 0; i < recipients.length; i++) {
address to = recipients[i];
uint256 value = values[i];
_transfer(sender, to, value);
}
return true;
}
function burn(uint256 amount) external {
_burn(_msgSender(), amount);
}
function pause() external onlyOwner {
_pause();
}
function unpause() external onlyOwner {
_unpause();
}
function addToBlackList(address account) external onlyOwner {
_addToBlackList(account);
}
function removeFromBlackList(address account) external onlyOwner {
_removeFromBlackList(account);
}
function enableTokenTransfer() external onlyOwner {
_enableTokenTransfer();
}
function isTransferAllowed() external view virtual returns (bool) {
return _isTransferAllowed();
}
function isTransferAllowed(
address account
) external view virtual returns (bool) {
return _isTransferAllowed(account);
}
function addToTransferAllowed(address account) external onlyOwner {
_addToTransferAllowed(account);
}
function removeFromTransferAllowed(address account) external onlyOwner {
_removeFromTransferAllowed(account);
}
function updateLiquidityProvider(address account) external onlyOwner {
_updateLiquidityProvider(account);
}
function claimReward()
external
whenNotPaused
requireNotBlackListed(_msgSender())
returns (bool)
{
address account = _msgSender();
address liquidityProvider = _currentLiquidityProvider();
uint256 reward = _reward(account);
require(
balanceOf(liquidityProvider) >= reward,
"FinanceCoin:: Liquidity provider does not have enough funds"
);
_claimReward(account);
_transfer(liquidityProvider, account, reward);
return true;
}
function addReward(
address[] memory accounts,
uint256[] memory rewards
) external whenNotPaused {
require(
accounts.length == rewards.length,
"FinanceCoin: accounts and rewards length mismatch"
);
for (uint256 i = 0; i < accounts.length; i++) {
_addReward(accounts[i], rewards[i]);
}
}
function addRewardIssuer(
address account
) external onlyOwner requireNotBlackListed(account) {
_addRewardIssuer(account);
}
function removeRewardIssuer(
address account
) external onlyOwner {
_removeRewardIssuer(account);
}
function _update(
address from,
address to,
uint256 value
) internal override(ERC20, ERC20Pausable) {
super._update(from, to, value);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => 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 returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual 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 returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual 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 `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` 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 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
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 `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` 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.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` 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.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
* ```
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Pausable.sol)
pragma solidity ^0.8.20;
import {ERC20} from "../ERC20.sol";
import {Pausable} from "../../../utils/Pausable.sol";
/**
* @dev ERC20 token with pausable token transfers, minting and burning.
*
* Useful for scenarios such as preventing trades until the end of an evaluation
* period, or having an emergency switch for freezing all token transfers in the
* event of a large bug.
*
* IMPORTANT: This contract does not include public pause and unpause functions. In
* addition to inheriting this contract, you must define both functions, invoking the
* {Pausable-_pause} and {Pausable-_unpause} internal functions, with appropriate
* access control, e.g. using {AccessControl} or {Ownable}. Not doing so will
* make the contract pause mechanism of the contract unreachable, and thus unusable.
*/
abstract contract ERC20Pausable is ERC20, Pausable {
/**
* @dev See {ERC20-_update}.
*
* Requirements:
*
* - the contract must not be paused.
*/
function _update(address from, address to, uint256 value) internal virtual override whenNotPaused {
super._update(from, to, value);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*/
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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
bool private _paused;
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
/**
* @dev The operation failed because the contract is paused.
*/
error EnforcedPause();
/**
* @dev The operation failed because the contract is not paused.
*/
error ExpectedPause();
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
if (paused()) {
revert EnforcedPause();
}
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
if (!paused()) {
revert ExpectedPause();
}
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.20;
abstract contract BlackList {
mapping(address account => bool) private _blacklist;
/**
* @dev Emitted when the `account` is added to blacklist.
*/
event BlackListed(address indexed account);
/**
* @dev Emitted when the `account` is removed from blacklist.
*/
event WhiteListed(address indexed account);
/**
* @dev The operation failed because `account` is already in the blacklist.
* @param account Address to be added in blacklist.
*/
error AlreadyBlackListed(address account);
/**
* @dev The operation failed because `account` is not in the blacklist.
* @param account Address to be removed from blacklist.
*/
error AlreadyWhiteListed(address account);
/**
* @dev The operation failed because `account` is not valid.
* @param account Address that should be added or removed from blacklist.
*/
error InvalidAccount(address account);
constructor() {}
/**
* @dev Modifier to make a function callable only when the `account` is not already blacklisted.
*
* Requirements:
*
* - The `account` must not be in the blacklist.
*/
modifier requireNotBlackListed(address account) {
_requireNotBlackListed(account);
_;
}
/**
* @dev Modifier to make a function callable only when the `account` is already blacklisted.
*
* Requirements:
*
* - The `account` must be in the blacklist.
*/
modifier requireBlackListed(address account) {
_requireBlackListed(account);
_;
}
/**
* @dev Modifier to make a function callable only when neither of `caller` and `to` are blacklisted.
*
* Requirements:
*
* - The `caller` and `to` must not be in the blacklist.
*/
modifier whenNotBlackListed(address caller, address to) {
require(
!isBlackListed(caller),
"BlackList:: caller address is blacklisted"
);
require(!isBlackListed(to), "BlackList:: to address is blacklisted");
_;
}
/**
* @dev Modifier to make a function callable only when neither the `caller` nor any of the `recipients` are blacklisted.
*
* Requirements:
*
* - The `caller` and all `recipients` must not be in the blacklist.
*/
modifier whenNotBlackListedBatch(
address caller,
address[] memory recipients
) {
_requireNotBlackListed(caller);
for (uint256 i = 0; i < recipients.length; i++) {
_requireNotBlackListed(recipients[i]);
}
_;
}
/**
* @dev Returns true if the `account` is blacklisted, and false otherwise.
*/
function isBlackListed(address account) public view virtual returns (bool) {
return _blacklist[account];
}
/**
* @dev Throws if the `account` is already in the blacklist.
*/
function _requireNotBlackListed(address account) internal view virtual {
if (isBlackListed(account)) {
revert AlreadyBlackListed({account: account});
}
}
/**
* @dev Throws if the `account` is not in the blacklist.
*/
function _requireBlackListed(address account) internal view virtual {
if (!isBlackListed(account)) {
revert AlreadyWhiteListed({account: account});
}
}
/**
* @dev add an `account` to blacklist.
*/
function _addToBlackList(
address account
) internal virtual requireNotBlackListed(account) {
if (account == address(0)) {
revert InvalidAccount({account: address(0)});
}
_blacklist[account] = true;
emit BlackListed(account);
}
/**
* @dev remove an `account` from blacklist.
*/
function _removeFromBlackList(
address account
) internal virtual requireBlackListed(account) {
_blacklist[account] = false;
emit WhiteListed(account);
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.20;
abstract contract RewardManager {
/**
* @dev address of liquidity provider.
*/
address private _liquidityProvider;
/**
* @dev Mapping to hold addresses and reward amount.
*/
mapping(address => uint256) private _rewards;
/**
* @dev Mapping to hold addresses of reward issuers.
*/
mapping(address => bool) private _rewardIssuers;
/**
* @dev Emitted when the `reward` is added against `account`.
*/
event RewardAdded(address indexed account, uint256 reward);
/**
* @dev Emitted when the `reward` is claimed against `account`.
*/
event RewardClaimed(address indexed account, uint256 reward);
/**
* @dev Emitted when a new reward issuer `account` is added.
*/
event RewardIssuerAdded(address account);
/**
* @dev Emitted when a reward issuer `account` is removed.
*/
event RewardIssuerRemoved(address account);
/**
* @dev Emitted when liquidity provider is updated from `oldAccount` to `newAccount`.
*/
event LiquidityProviderUpdated(address oldAccount, address newAccount);
/**
* @dev The `account` is not a valid i.e address 0.
*/
error InvalidAccountAddress(address account);
/**
* @dev The `account` is not a reward issuer.
*/
error NotRewardIssuer(address account);
/**
* @dev The `account` is already a reward issuer.
*/
error AlreadyRewardIssuer(address account);
/**
* @dev The `account` has no reward to claim.
*/
error NoRewardToClaim(address account);
/**
* @dev Invalid reward amount.
*/
error InvalidRewardAmount();
constructor(address account) {
_updateLiquidityProvider(account);
_addRewardIssuer(account);
}
/**
* @dev Modifier to check if the caller is reward issuer.
*/
modifier onlyRewardIssuer() {
_requireRewardIssuer(msg.sender);
_;
}
/**
* @dev Modifier to validate `account` is a reward issuer.
*/
modifier requireRewardIssuer(address account) {
_requireRewardIssuer(account);
_;
}
/**
* @dev Modifier to validate `account` should not be a reward issuer.
*/
modifier requireNotRewardIssuer(address account) {
_requireNotRewardIssuer(account);
_;
}
/**
* @dev Returns true if the `account` is reward issuer, and false otherwise.
*/
function isRewardIssuer(
address account
) external view virtual returns (bool) {
return _isRewardIssuer(account);
}
/**
* @dev returns total reward for `account`.
*/
function reward(address account) external view virtual returns (uint256) {
return _reward(account);
}
/**
* @dev returns current liquidity provider.
*/
function liquidityProvider() external view virtual returns (address) {
return _currentLiquidityProvider();
}
/**
* @dev Returns true if the `account` is reward issuer, and false otherwise.
*/
function _isRewardIssuer(
address account
) internal view virtual returns (bool) {
return _rewardIssuers[account];
}
/**
* @dev Throws if `account` is reward issuer.
*/
function _requireNotRewardIssuer(address account) internal virtual {
if (_isRewardIssuer(account)) {
revert AlreadyRewardIssuer(account);
}
}
/**
* @dev Throws if `account` is not reward issuer.
*/
function _requireRewardIssuer(address account) internal virtual {
if (!_isRewardIssuer(account)) {
revert NotRewardIssuer(account);
}
}
/**
* @dev Adds an `account` to the `_rewardIssuers` mapping.
*/
function _addRewardIssuer(
address account
) internal virtual requireNotRewardIssuer(account) {
if (account == address(0)) {
revert InvalidAccountAddress(address(0));
}
_rewardIssuers[account] = true;
emit RewardIssuerAdded(account);
}
/**
* @dev Removes an `account` from the `_rewardIssuers` mapping.
*/
function _removeRewardIssuer(
address account
) internal virtual requireRewardIssuer(account) {
delete _rewardIssuers[account];
emit RewardIssuerRemoved(account);
}
/**
* @dev Adds a `rewardAmount` to an `account`.
*/
function _addReward(
address account,
uint256 rewardAmount
) internal virtual onlyRewardIssuer {
if (account == address(0)) {
revert InvalidAccountAddress(address(0));
}
if (rewardAmount == 0) {
revert InvalidRewardAmount();
}
_rewards[account] += rewardAmount;
emit RewardAdded(account, rewardAmount);
}
/**
* @dev Claims the reward for `account`.
*/
function _claimReward(address account) internal virtual {
uint256 rewardAmount = _rewards[account];
if (rewardAmount == 0) {
revert NoRewardToClaim(account);
}
_rewards[account] = 0;
emit RewardClaimed(account, rewardAmount);
}
/**
* @dev returns total reward for `account`.
*/
function _reward(address account) internal view virtual returns (uint256) {
return _rewards[account];
}
/**
* @dev Updates the liquidity provider address to `newAccount`.
*/
function _updateLiquidityProvider(address newAccount) internal virtual {
address oldLiquidityProvider = _liquidityProvider;
_liquidityProvider = newAccount;
emit LiquidityProviderUpdated(oldLiquidityProvider, newAccount);
}
/**
* @dev returns current liquidity provider.
*/
function _currentLiquidityProvider() internal view virtual returns (address) {
return _liquidityProvider;
}
}// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.20;
abstract contract TransferControl {
bool private _isTokenTransferEnabled = false;
/**
* @dev Mapping to hold addresses allowed to transfer.
*/
mapping(address account => bool) private _transferAllowed;
/**
* @dev Emitted when the token transfer is enabled.
*/
event TokenTransferEnabled();
/**
* @dev Emitted when the `account` is allowed to transfer.
*/
event TransferAllowed(address indexed account);
/**
* @dev Emitted when the `account` is removed from allowed list.
*/
event TransferNotAllowed(address indexed account);
/**
* @dev The operation failed because Token transfer is disabled.
*/
error TokenTransferNotAllowed();
/**
* @dev The operation failed because `account` is already in the allowed transfer list.
* @param account Address to be added in allowed transfer list.
*/
error AlreadyTransferAllowed(address account);
/**
* @dev The operation failed because `account` is not in the allowed transfer list.
* @param account Address to be removed from allowed transfer list.
*/
error AlreadyTransferNotAllowed(address account);
/**
* @dev The operation failed because `account` is not valid.
* @param account Address that should be added or removed from transfer allow list.
*/
error InvalidAddress(address account);
constructor() {}
/**
* @dev Modifier to make a function callable only when token transfer is enabled.
*/
modifier requireTokenTransferEnabled(address caller) {
_requireTokenTransferEnabled(caller);
_;
}
/**
* @dev Modifier to make a function callable only when the `account` is already in transfer allowed list.
*
* Requirements:
*
* - The `account` must be in the transfer allowed list.
*/
modifier requireTransferAllowed(address account) {
_requireTransferAllowed(account);
_;
}
/**
* @dev Modifier to make a function callable only when the `account` is not already in transfer allowed list.
*
* Requirements:
*
* - The `account` must not be in the transfer allowed list.
*/
modifier requireTransferNotAllowed(address account) {
_requireTransferNotAllowed(account);
_;
}
/**
* @dev Returns true if the `account` is allowed transfer, and false otherwise.
*/
function _isTransferAllowed(address account) internal view virtual returns (bool) {
return _transferAllowed[account];
}
/**
* @dev Returns current state of `_isTokenTransferEnabled`.
*/
function _isTransferAllowed() internal view returns (bool) {
return _isTokenTransferEnabled;
}
/**
* @dev Throws if the `account` is in the transfer allowed list.
*/
function _requireTransferNotAllowed(address account) internal view virtual {
if (_isTransferAllowed(account)) {
revert AlreadyTransferAllowed({account: account});
}
}
/**
* @dev Throws if the `account` is not in the transfer allowed list.
*/
function _requireTransferAllowed(address account) internal view virtual {
if (!_isTransferAllowed(account)) {
revert AlreadyTransferNotAllowed({account: account});
}
}
/**
* @dev Throws if the Token transfer is disabled.
*/
function _requireTokenTransferEnabled(
address caller
) internal view virtual {
if (!_isTransferAllowed() && !_isTransferAllowed(caller)) {
revert TokenTransferNotAllowed();
}
}
/**
* @dev Enable token transfer.
*/
function _enableTokenTransfer() internal virtual {
_isTokenTransferEnabled = true;
emit TokenTransferEnabled();
}
/**
* @dev add an `account` to transfer allowed list.
*/
function _addToTransferAllowed(
address account
) internal virtual requireTransferNotAllowed(account) {
if (account == address(0)) {
revert InvalidAddress({account: address(0)});
}
_transferAllowed[account] = true;
emit TransferAllowed(account);
}
/**
* @dev remove an `account` from transfer allowed list.
*/
function _removeFromTransferAllowed(
address account
) internal virtual requireTransferAllowed(account) {
_transferAllowed[account] = false;
emit TransferNotAllowed(account);
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"ownerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AlreadyBlackListed","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AlreadyRewardIssuer","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AlreadyTransferAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AlreadyTransferNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AlreadyWhiteListed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"InvalidAccount","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"InvalidAccountAddress","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidRewardAmount","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NoRewardToClaim","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"NotRewardIssuer","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"TokenTransferNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BlackListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccount","type":"address"},{"indexed":false,"internalType":"address","name":"newAccount","type":"address"}],"name":"LiquidityProviderUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"RewardIssuerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"RewardIssuerRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenTransferEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TransferAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TransferNotAllowed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhiteListed","type":"event"},{"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"rewards","type":"uint256[]"}],"name":"addReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addRewardIssuer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToTransferAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"batchTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isRewardIssuer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTransferAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTransferAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromTransferAllowed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeRewardIssuer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"updateLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526007805460ff191690553480156200001b57600080fd5b5060405162002355380380620023558339810160408190526200003e916200055a565b80816040518060400160405280600b81526020016a2334b730b731b2a1b7b4b760a91b8152506040518060400160405280600481526020016378464e4360e01b815250816003908162000092919062000630565b506004620000a1828262000630565b50506005805460ff19169055506001600160a01b038116620000de57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000e9816200013a565b50620000f58162000194565b6200010081620001f6565b506200012881620001146012600a62000811565b62000122906113886200081f565b62000283565b6200013381620002c1565b506200084f565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600980546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fc9c8e8c3c0b36c9ad1dac9b1ec6ebbb5c43b302c59a7ba55ff508431a5ebf80791015b60405180910390a15050565b80620002028162000346565b6001600160a01b0382166200022e576040516301a19b6360e61b815260006004820152602401620000d5565b6001600160a01b0382166000818152600b6020908152604091829020805460ff1916600117905590519182527f975cd109f7f0a693c2460e6dddab3458d8b7d8ed67151e3740c3617b349d80f79101620001ea565b6001600160a01b038216620002af5760405163ec442f0560e01b815260006004820152602401620000d5565b620002bd6000838362000390565b5050565b80620002cd81620003a2565b6001600160a01b038216620002f957604051634726455360e11b815260006004820152602401620000d5565b6001600160a01b038216600081815260086020526040808220805460ff19166001179055517f603bfa8062dd31629426de2356498dcc751d795edf28a21fe8018e80dadf43a69190a25050565b6001600160a01b0381166000908152600b602052604090205460ff16156200038d57604051638d1631bf60e01b81526001600160a01b0382166004820152602401620000d5565b50565b6200039d838383620003e9565b505050565b6001600160a01b03811660009081526008602052604090205460ff16156200038d57604051636f1e82b560e11b81526001600160a01b0382166004820152602401620000d5565b620003f362000400565b6200039d83838362000427565b60055460ff1615620004255760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b038316620004565780600260008282546200044a919062000839565b90915550620004ca9050565b6001600160a01b03831660009081526020819052604090205481811015620004ab5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401620000d5565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216620004e85760028054829003905562000507565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200054d91815260200190565b60405180910390a3505050565b6000602082840312156200056d57600080fd5b81516001600160a01b03811681146200058557600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005b757607f821691505b602082108103620005d857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039d57600081815260208120601f850160051c81016020861015620006075750805b601f850160051c820191505b81811015620006285782815560010162000613565b505050505050565b81516001600160401b038111156200064c576200064c6200058c565b62000664816200065d8454620005a2565b84620005de565b602080601f8311600181146200069c5760008415620006835750858301515b600019600386901b1c1916600185901b17855562000628565b600085815260208120601f198616915b82811015620006cd57888601518255948401946001909101908401620006ac565b5085821015620006ec5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000753578160001904821115620007375762000737620006fc565b808516156200074557918102915b93841c939080029062000717565b509250929050565b6000826200076c575060016200080b565b816200077b575060006200080b565b81600181146200079457600281146200079f57620007bf565b60019150506200080b565b60ff841115620007b357620007b3620006fc565b50506001821b6200080b565b5060208310610133831016604e8410600b8410161715620007e4575081810a6200080b565b620007f0838362000712565b8060001904821115620008075762000807620006fc565b0290505b92915050565b60006200058583836200075b565b80820281158282048414176200080b576200080b620006fc565b808201808211156200080b576200080b620006fc565b611af6806200085f6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a9059cbb116100ad578063cd8c063b1161007c578063cd8c063b1461041c578063dd62ed3e14610424578063e47d60601461045d578063f2fde38b14610470578063f48f511d1461048357600080fd5b8063a9059cbb146103db578063ac8c4892146103ee578063b88a802f14610401578063cd5c645c1461040957600080fd5b806388d695b2116100e957806388d695b2146103975780638da5cb5b146103aa57806395d89b41146103c0578063a48caf51146103c857600080fd5b806370a082311461034b578063715018a6146103745780638456cb591461037c5780638822048e1461038457600080fd5b80633a7644621161019d5780634a49ac4c1161016c5780634a49ac4c146102e75780634f67c313146102fa5780635b8bec551461030d5780635c975abb1461032d5780636353586b1461033857600080fd5b80633a764462146102b15780633f4ba83a146102b9578063417c73a7146102c157806342966c68146102d457600080fd5b806323b872dd116101d957806323b872dd146102715780632ff2e9dc14610284578063313ce5671461028d578063391b3db51461029c57600080fd5b806306fdde031461020b578063095ea7b31461022957806318160ddd1461024c5780631c5462f71461025e575b600080fd5b610213610496565b604051610220919061167f565b60405180910390f35b61023c6102373660046116e9565b610528565b6040519015158152602001610220565b6002545b604051908152602001610220565b61023c61026c366004611713565b6105a1565b61023c61027f366004611735565b6105c4565b61025061138881565b60405160128152602001610220565b6102af6102aa366004611713565b610678565b005b6102af61068c565b6102af61069e565b6102af6102cf366004611713565b6106ae565b6102af6102e2366004611771565b6106bf565b6102af6102f5366004611713565b6106c9565b6102af610308366004611713565b6106da565b6103156106eb565b6040516001600160a01b039091168152602001610220565b60055460ff1661023c565b610250610346366004611713565b610704565b610250610359366004611713565b6001600160a01b031660009081526020819052604090205490565b6102af610722565b6102af610734565b61023c610392366004611713565b610744565b61023c6103a5366004611860565b610765565b60055461010090046001600160a01b0316610315565b6102136108a8565b6102af6103d6366004611713565b6108b7565b61023c6103e93660046116e9565b6108d6565b6102af6103fc366004611860565b610965565b61023c610a37565b6102af610417366004611713565b610b1f565b61023c610b30565b610250610432366004611920565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61023c61046b366004611713565b610b3e565b6102af61047e366004611713565b610b5c565b6102af610491366004611713565b610b97565b6060600380546104a590611953565b80601f01602080910402602001604051908101604052809291908181526020018280546104d190611953565b801561051e5780601f106104f35761010080835404028352916020019161051e565b820191906000526020600020905b81548152906001019060200180831161050157829003601f168201915b5050505050905090565b6000610532610ba8565b338361053d82610b3e565b156105635760405162461bcd60e51b815260040161055a9061198d565b60405180910390fd5b61056c81610b3e565b156105895760405162461bcd60e51b815260040161055a906119d6565b33610595818787610bcc565b50600195945050505050565b6001600160a01b0381166000908152600b602052604081205460ff165b92915050565b60006105ce610ba8565b81600081116105ef5760405162461bcd60e51b815260040161055a90611a1b565b336105f981610bd9565b858561060482610b3e565b156106215760405162461bcd60e51b815260040161055a9061198d565b61062a81610b3e565b156106475760405162461bcd60e51b815260040161055a906119d6565b3361065181610c23565b3361065d8a828a610c55565b6106688a8a8a610cd3565b5060019998505050505050505050565b610680610d32565b61068981610d65565b50565b610694610d32565b61069c610de6565b565b6106a6610d32565b61069c610e1e565b6106b6610d32565b61068981610e70565b6106893382610ef1565b6106d1610d32565b61068981610f27565b6106e2610d32565b61068981610f7b565b60006106ff6009546001600160a01b031690565b905090565b6001600160a01b0381166000908152600a60205260408120546105be565b61072a610d32565b61069c6000610fde565b61073c610d32565b61069c611038565b6001600160a01b03811660009081526008602052604081205460ff166105be565b600061076f610ba8565b3361077981610bd9565b338461078482610c23565b60005b81518110156107c4576107b28282815181106107a5576107a5611a68565b6020026020010151610c23565b806107bc81611a94565b915050610787565b5084518651146108315760405162461bcd60e51b815260206004820152603260248201527f46696e616e6365436f696e3a20526563697069656e747320616e642076616c756044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b606482015260840161055a565b3360005b875181101561089a57600088828151811061085257610852611a68565b60200260200101519050600088838151811061087057610870611a68565b60200260200101519050610885848383610cd3565b5050808061089290611a94565b915050610835565b506001979650505050505050565b6060600480546104a590611953565b6108bf610d32565b806108c981610c23565b6108d282611075565b5050565b60006108e0610ba8565b81600081116109015760405162461bcd60e51b815260040161055a90611a1b565b3361090b81610bd9565b338561091682610b3e565b156109335760405162461bcd60e51b815260040161055a9061198d565b61093c81610b3e565b156109595760405162461bcd60e51b815260040161055a906119d6565b3361089a818989610cd3565b61096d610ba8565b80518251146109d85760405162461bcd60e51b815260206004820152603160248201527f46696e616e6365436f696e3a206163636f756e747320616e64207265776172646044820152700e640d8cadccee8d040dad2e6dac2e8c6d607b1b606482015260840161055a565b60005b8251811015610a3257610a208382815181106109f9576109f9611a68565b6020026020010151838381518110610a1357610a13611a68565b60200260200101516110fd565b80610a2a81611a94565b9150506109db565b505050565b6000610a41610ba8565b33610a4b81610c23565b600954336000818152600a602052604081205491926001600160a01b031691905080610a8c836001600160a01b031660009081526020819052604090205490565b1015610b005760405162461bcd60e51b815260206004820152603b60248201527f46696e616e6365436f696e3a3a204c69717569646974792070726f766964657260448201527f20646f6573206e6f74206861766520656e6f7567682066756e64730000000000606482015260840161055a565b610b09836111c1565b610b14828483610cd3565b600194505050505090565b610b27610d32565b61068981611253565b60006106ff60075460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b610b64610d32565b6001600160a01b038116610b8e57604051631e4fbdf760e01b81526000600482015260240161055a565b61068981610fde565b610b9f610d32565b610689816112ad565b60055460ff161561069c5760405163d93c066560e01b815260040160405180910390fd5b610a328383836001611301565b60075460ff16158015610c0557506001600160a01b03811660009081526008602052604090205460ff16155b156106895760405163ca7cbc7760e01b815260040160405180910390fd5b610c2c81610b3e565b1561068957604051637766b36960e11b81526001600160a01b038216600482015260240161055a565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ccd5781811015610cbe57604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161055a565b610ccd84848484036000611301565b50505050565b6001600160a01b038316610cfd57604051634b637e8f60e11b81526000600482015260240161055a565b6001600160a01b038216610d275760405163ec442f0560e01b81526000600482015260240161055a565b610a328383836113d6565b6005546001600160a01b0361010090910416331461069c5760405163118cdaa760e01b815233600482015260240161055a565b80610d6f816113e1565b6001600160a01b038216610d9957604051634726455360e11b81526000600482015260240161055a565b6001600160a01b038216600081815260086020526040808220805460ff19166001179055517f603bfa8062dd31629426de2356498dcc751d795edf28a21fe8018e80dadf43a69190a25050565b6007805460ff191660011790556040517f06b35690d8e27bc30e13bd8f9952f8f95b30d6056676c7ea9a4141ad99995fa290600090a1565b610e26611426565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b80610e7a81610c23565b6001600160a01b038216610ea4576040516325abcd9160e11b81526000600482015260240161055a565b6001600160a01b038216600081815260066020526040808220805460ff19166001179055517f7fd26be6fc92aff63f1f4409b2b2ddeb272a888031d7f55ec830485ec61941869190a25050565b6001600160a01b038216610f1b57604051634b637e8f60e11b81526000600482015260240161055a565b6108d2826000836113d6565b80610f3181611449565b6001600160a01b038216600081815260066020526040808220805460ff19169055517f2e00aa132a0165955a7de5481083fd2933e22d472949147a9c3c69eec84c17009190a25050565b80610f858161147a565b6001600160a01b0382166000818152600b6020908152604091829020805460ff1916905590519182527fe87e81f83f34273d539b8cc6206619a01eef6aac38b9bf984b273ef190dc6f2a91015b60405180910390a15050565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611040610ba8565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e533390565b8061107f816114be565b6001600160a01b0382166110a9576040516301a19b6360e61b81526000600482015260240161055a565b6001600160a01b0382166000818152600b6020908152604091829020805460ff1916600117905590519182527f975cd109f7f0a693c2460e6dddab3458d8b7d8ed67151e3740c3617b349d80f79101610fd2565b6111063361147a565b6001600160a01b038216611130576040516301a19b6360e61b81526000600482015260240161055a565b8060000361115157604051633853986560e01b815260040160405180910390fd5b6001600160a01b0382166000908152600a602052604081208054839290611179908490611aad565b90915550506040518181526001600160a01b038316907fac24935fd910bc682b5ccb1a07b718cadf8cf2f6d1404c4f3ddc3662dae40e29906020015b60405180910390a25050565b6001600160a01b0381166000908152600a60205260408120549081900361120657604051633aa295af60e21b81526001600160a01b038316600482015260240161055a565b6001600160a01b0382166000818152600a602052604080822091909155517f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f7241906111b59084815260200190565b600980546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fc9c8e8c3c0b36c9ad1dac9b1ec6ebbb5c43b302c59a7ba55ff508431a5ebf8079101610fd2565b806112b781611503565b6001600160a01b038216600081815260086020526040808220805460ff19169055517f046fbddc1b262cbc444f1424c6da307ae14cfc08c6e7fbe57282f380a1aff5779190a25050565b6001600160a01b03841661132b5760405163e602df0560e01b81526000600482015260240161055a565b6001600160a01b03831661135557604051634a1406b160e11b81526000600482015260240161055a565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ccd57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113c891815260200190565b60405180910390a350505050565b610a32838383611547565b6001600160a01b03811660009081526008602052604090205460ff161561068957604051636f1e82b560e11b81526001600160a01b038216600482015260240161055a565b60055460ff1661069c57604051638dfc202b60e01b815260040160405180910390fd5b61145281610b3e565b6106895760405163f94f3e2d60e01b81526001600160a01b038216600482015260240161055a565b6001600160a01b0381166000908152600b602052604090205460ff1661068957604051630b69c5ad60e01b81526001600160a01b038216600482015260240161055a565b6001600160a01b0381166000908152600b602052604090205460ff161561068957604051638d1631bf60e01b81526001600160a01b038216600482015260240161055a565b6001600160a01b03811660009081526008602052604090205460ff1661068957604051630b5835d160e31b81526001600160a01b038216600482015260240161055a565b61154f610ba8565b610a328383836001600160a01b0383166115805780600260008282546115759190611aad565b909155506115f29050565b6001600160a01b038316600090815260208190526040902054818110156115d35760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161055a565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661160e5760028054829003905561162d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161167291815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156116ac57858101830151858201604001528201611690565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146116e457600080fd5b919050565b600080604083850312156116fc57600080fd5b611705836116cd565b946020939093013593505050565b60006020828403121561172557600080fd5b61172e826116cd565b9392505050565b60008060006060848603121561174a57600080fd5b611753846116cd565b9250611761602085016116cd565b9150604084013590509250925092565b60006020828403121561178357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156117c9576117c961178a565b604052919050565b600067ffffffffffffffff8211156117eb576117eb61178a565b5060051b60200190565b600082601f83011261180657600080fd5b8135602061181b611816836117d1565b6117a0565b82815260059290921b8401810191818101908684111561183a57600080fd5b8286015b84811015611855578035835291830191830161183e565b509695505050505050565b6000806040838503121561187357600080fd5b823567ffffffffffffffff8082111561188b57600080fd5b818501915085601f83011261189f57600080fd5b813560206118af611816836117d1565b82815260059290921b840181019181810190898411156118ce57600080fd5b948201945b838610156118f3576118e4866116cd565b825294820194908201906118d3565b9650508601359250508082111561190957600080fd5b50611916858286016117f5565b9150509250929050565b6000806040838503121561193357600080fd5b61193c836116cd565b915061194a602084016116cd565b90509250929050565b600181811c9082168061196757607f821691505b60208210810361198757634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526029908201527f426c61636b4c6973743a3a2063616c6c6572206164647265737320697320626c6040820152681858dadb1a5cdd195960ba1b606082015260800190565b60208082526025908201527f426c61636b4c6973743a3a20746f206164647265737320697320626c61636b6c6040820152641a5cdd195960da1b606082015260800190565b6020808252602d908201527f46696e616e6365436f696e3a3a2056616c7565206d757374206265206772656160408201526c746572207468616e207a65726f60981b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611aa657611aa6611a7e565b5060010190565b808201808211156105be576105be611a7e56fea264697066735822122044df5022aff75787ba14419485040b4d272af77be86f8d8e7ddbfa569afafd7e64736f6c63430008140033000000000000000000000000d9bca1b1e09c7349f56ccde6b34f592943f89923
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c806370a082311161011a578063a9059cbb116100ad578063cd8c063b1161007c578063cd8c063b1461041c578063dd62ed3e14610424578063e47d60601461045d578063f2fde38b14610470578063f48f511d1461048357600080fd5b8063a9059cbb146103db578063ac8c4892146103ee578063b88a802f14610401578063cd5c645c1461040957600080fd5b806388d695b2116100e957806388d695b2146103975780638da5cb5b146103aa57806395d89b41146103c0578063a48caf51146103c857600080fd5b806370a082311461034b578063715018a6146103745780638456cb591461037c5780638822048e1461038457600080fd5b80633a7644621161019d5780634a49ac4c1161016c5780634a49ac4c146102e75780634f67c313146102fa5780635b8bec551461030d5780635c975abb1461032d5780636353586b1461033857600080fd5b80633a764462146102b15780633f4ba83a146102b9578063417c73a7146102c157806342966c68146102d457600080fd5b806323b872dd116101d957806323b872dd146102715780632ff2e9dc14610284578063313ce5671461028d578063391b3db51461029c57600080fd5b806306fdde031461020b578063095ea7b31461022957806318160ddd1461024c5780631c5462f71461025e575b600080fd5b610213610496565b604051610220919061167f565b60405180910390f35b61023c6102373660046116e9565b610528565b6040519015158152602001610220565b6002545b604051908152602001610220565b61023c61026c366004611713565b6105a1565b61023c61027f366004611735565b6105c4565b61025061138881565b60405160128152602001610220565b6102af6102aa366004611713565b610678565b005b6102af61068c565b6102af61069e565b6102af6102cf366004611713565b6106ae565b6102af6102e2366004611771565b6106bf565b6102af6102f5366004611713565b6106c9565b6102af610308366004611713565b6106da565b6103156106eb565b6040516001600160a01b039091168152602001610220565b60055460ff1661023c565b610250610346366004611713565b610704565b610250610359366004611713565b6001600160a01b031660009081526020819052604090205490565b6102af610722565b6102af610734565b61023c610392366004611713565b610744565b61023c6103a5366004611860565b610765565b60055461010090046001600160a01b0316610315565b6102136108a8565b6102af6103d6366004611713565b6108b7565b61023c6103e93660046116e9565b6108d6565b6102af6103fc366004611860565b610965565b61023c610a37565b6102af610417366004611713565b610b1f565b61023c610b30565b610250610432366004611920565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61023c61046b366004611713565b610b3e565b6102af61047e366004611713565b610b5c565b6102af610491366004611713565b610b97565b6060600380546104a590611953565b80601f01602080910402602001604051908101604052809291908181526020018280546104d190611953565b801561051e5780601f106104f35761010080835404028352916020019161051e565b820191906000526020600020905b81548152906001019060200180831161050157829003601f168201915b5050505050905090565b6000610532610ba8565b338361053d82610b3e565b156105635760405162461bcd60e51b815260040161055a9061198d565b60405180910390fd5b61056c81610b3e565b156105895760405162461bcd60e51b815260040161055a906119d6565b33610595818787610bcc565b50600195945050505050565b6001600160a01b0381166000908152600b602052604081205460ff165b92915050565b60006105ce610ba8565b81600081116105ef5760405162461bcd60e51b815260040161055a90611a1b565b336105f981610bd9565b858561060482610b3e565b156106215760405162461bcd60e51b815260040161055a9061198d565b61062a81610b3e565b156106475760405162461bcd60e51b815260040161055a906119d6565b3361065181610c23565b3361065d8a828a610c55565b6106688a8a8a610cd3565b5060019998505050505050505050565b610680610d32565b61068981610d65565b50565b610694610d32565b61069c610de6565b565b6106a6610d32565b61069c610e1e565b6106b6610d32565b61068981610e70565b6106893382610ef1565b6106d1610d32565b61068981610f27565b6106e2610d32565b61068981610f7b565b60006106ff6009546001600160a01b031690565b905090565b6001600160a01b0381166000908152600a60205260408120546105be565b61072a610d32565b61069c6000610fde565b61073c610d32565b61069c611038565b6001600160a01b03811660009081526008602052604081205460ff166105be565b600061076f610ba8565b3361077981610bd9565b338461078482610c23565b60005b81518110156107c4576107b28282815181106107a5576107a5611a68565b6020026020010151610c23565b806107bc81611a94565b915050610787565b5084518651146108315760405162461bcd60e51b815260206004820152603260248201527f46696e616e6365436f696e3a20526563697069656e747320616e642076616c756044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b606482015260840161055a565b3360005b875181101561089a57600088828151811061085257610852611a68565b60200260200101519050600088838151811061087057610870611a68565b60200260200101519050610885848383610cd3565b5050808061089290611a94565b915050610835565b506001979650505050505050565b6060600480546104a590611953565b6108bf610d32565b806108c981610c23565b6108d282611075565b5050565b60006108e0610ba8565b81600081116109015760405162461bcd60e51b815260040161055a90611a1b565b3361090b81610bd9565b338561091682610b3e565b156109335760405162461bcd60e51b815260040161055a9061198d565b61093c81610b3e565b156109595760405162461bcd60e51b815260040161055a906119d6565b3361089a818989610cd3565b61096d610ba8565b80518251146109d85760405162461bcd60e51b815260206004820152603160248201527f46696e616e6365436f696e3a206163636f756e747320616e64207265776172646044820152700e640d8cadccee8d040dad2e6dac2e8c6d607b1b606482015260840161055a565b60005b8251811015610a3257610a208382815181106109f9576109f9611a68565b6020026020010151838381518110610a1357610a13611a68565b60200260200101516110fd565b80610a2a81611a94565b9150506109db565b505050565b6000610a41610ba8565b33610a4b81610c23565b600954336000818152600a602052604081205491926001600160a01b031691905080610a8c836001600160a01b031660009081526020819052604090205490565b1015610b005760405162461bcd60e51b815260206004820152603b60248201527f46696e616e6365436f696e3a3a204c69717569646974792070726f766964657260448201527f20646f6573206e6f74206861766520656e6f7567682066756e64730000000000606482015260840161055a565b610b09836111c1565b610b14828483610cd3565b600194505050505090565b610b27610d32565b61068981611253565b60006106ff60075460ff1690565b6001600160a01b031660009081526006602052604090205460ff1690565b610b64610d32565b6001600160a01b038116610b8e57604051631e4fbdf760e01b81526000600482015260240161055a565b61068981610fde565b610b9f610d32565b610689816112ad565b60055460ff161561069c5760405163d93c066560e01b815260040160405180910390fd5b610a328383836001611301565b60075460ff16158015610c0557506001600160a01b03811660009081526008602052604090205460ff16155b156106895760405163ca7cbc7760e01b815260040160405180910390fd5b610c2c81610b3e565b1561068957604051637766b36960e11b81526001600160a01b038216600482015260240161055a565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610ccd5781811015610cbe57604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161055a565b610ccd84848484036000611301565b50505050565b6001600160a01b038316610cfd57604051634b637e8f60e11b81526000600482015260240161055a565b6001600160a01b038216610d275760405163ec442f0560e01b81526000600482015260240161055a565b610a328383836113d6565b6005546001600160a01b0361010090910416331461069c5760405163118cdaa760e01b815233600482015260240161055a565b80610d6f816113e1565b6001600160a01b038216610d9957604051634726455360e11b81526000600482015260240161055a565b6001600160a01b038216600081815260086020526040808220805460ff19166001179055517f603bfa8062dd31629426de2356498dcc751d795edf28a21fe8018e80dadf43a69190a25050565b6007805460ff191660011790556040517f06b35690d8e27bc30e13bd8f9952f8f95b30d6056676c7ea9a4141ad99995fa290600090a1565b610e26611426565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b80610e7a81610c23565b6001600160a01b038216610ea4576040516325abcd9160e11b81526000600482015260240161055a565b6001600160a01b038216600081815260066020526040808220805460ff19166001179055517f7fd26be6fc92aff63f1f4409b2b2ddeb272a888031d7f55ec830485ec61941869190a25050565b6001600160a01b038216610f1b57604051634b637e8f60e11b81526000600482015260240161055a565b6108d2826000836113d6565b80610f3181611449565b6001600160a01b038216600081815260066020526040808220805460ff19169055517f2e00aa132a0165955a7de5481083fd2933e22d472949147a9c3c69eec84c17009190a25050565b80610f858161147a565b6001600160a01b0382166000818152600b6020908152604091829020805460ff1916905590519182527fe87e81f83f34273d539b8cc6206619a01eef6aac38b9bf984b273ef190dc6f2a91015b60405180910390a15050565b600580546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611040610ba8565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e533390565b8061107f816114be565b6001600160a01b0382166110a9576040516301a19b6360e61b81526000600482015260240161055a565b6001600160a01b0382166000818152600b6020908152604091829020805460ff1916600117905590519182527f975cd109f7f0a693c2460e6dddab3458d8b7d8ed67151e3740c3617b349d80f79101610fd2565b6111063361147a565b6001600160a01b038216611130576040516301a19b6360e61b81526000600482015260240161055a565b8060000361115157604051633853986560e01b815260040160405180910390fd5b6001600160a01b0382166000908152600a602052604081208054839290611179908490611aad565b90915550506040518181526001600160a01b038316907fac24935fd910bc682b5ccb1a07b718cadf8cf2f6d1404c4f3ddc3662dae40e29906020015b60405180910390a25050565b6001600160a01b0381166000908152600a60205260408120549081900361120657604051633aa295af60e21b81526001600160a01b038316600482015260240161055a565b6001600160a01b0382166000818152600a602052604080822091909155517f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f7241906111b59084815260200190565b600980546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fc9c8e8c3c0b36c9ad1dac9b1ec6ebbb5c43b302c59a7ba55ff508431a5ebf8079101610fd2565b806112b781611503565b6001600160a01b038216600081815260086020526040808220805460ff19169055517f046fbddc1b262cbc444f1424c6da307ae14cfc08c6e7fbe57282f380a1aff5779190a25050565b6001600160a01b03841661132b5760405163e602df0560e01b81526000600482015260240161055a565b6001600160a01b03831661135557604051634a1406b160e11b81526000600482015260240161055a565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610ccd57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113c891815260200190565b60405180910390a350505050565b610a32838383611547565b6001600160a01b03811660009081526008602052604090205460ff161561068957604051636f1e82b560e11b81526001600160a01b038216600482015260240161055a565b60055460ff1661069c57604051638dfc202b60e01b815260040160405180910390fd5b61145281610b3e565b6106895760405163f94f3e2d60e01b81526001600160a01b038216600482015260240161055a565b6001600160a01b0381166000908152600b602052604090205460ff1661068957604051630b69c5ad60e01b81526001600160a01b038216600482015260240161055a565b6001600160a01b0381166000908152600b602052604090205460ff161561068957604051638d1631bf60e01b81526001600160a01b038216600482015260240161055a565b6001600160a01b03811660009081526008602052604090205460ff1661068957604051630b5835d160e31b81526001600160a01b038216600482015260240161055a565b61154f610ba8565b610a328383836001600160a01b0383166115805780600260008282546115759190611aad565b909155506115f29050565b6001600160a01b038316600090815260208190526040902054818110156115d35760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161055a565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661160e5760028054829003905561162d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161167291815260200190565b60405180910390a3505050565b600060208083528351808285015260005b818110156116ac57858101830151858201604001528201611690565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146116e457600080fd5b919050565b600080604083850312156116fc57600080fd5b611705836116cd565b946020939093013593505050565b60006020828403121561172557600080fd5b61172e826116cd565b9392505050565b60008060006060848603121561174a57600080fd5b611753846116cd565b9250611761602085016116cd565b9150604084013590509250925092565b60006020828403121561178357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156117c9576117c961178a565b604052919050565b600067ffffffffffffffff8211156117eb576117eb61178a565b5060051b60200190565b600082601f83011261180657600080fd5b8135602061181b611816836117d1565b6117a0565b82815260059290921b8401810191818101908684111561183a57600080fd5b8286015b84811015611855578035835291830191830161183e565b509695505050505050565b6000806040838503121561187357600080fd5b823567ffffffffffffffff8082111561188b57600080fd5b818501915085601f83011261189f57600080fd5b813560206118af611816836117d1565b82815260059290921b840181019181810190898411156118ce57600080fd5b948201945b838610156118f3576118e4866116cd565b825294820194908201906118d3565b9650508601359250508082111561190957600080fd5b50611916858286016117f5565b9150509250929050565b6000806040838503121561193357600080fd5b61193c836116cd565b915061194a602084016116cd565b90509250929050565b600181811c9082168061196757607f821691505b60208210810361198757634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526029908201527f426c61636b4c6973743a3a2063616c6c6572206164647265737320697320626c6040820152681858dadb1a5cdd195960ba1b606082015260800190565b60208082526025908201527f426c61636b4c6973743a3a20746f206164647265737320697320626c61636b6c6040820152641a5cdd195960da1b606082015260800190565b6020808252602d908201527f46696e616e6365436f696e3a3a2056616c7565206d757374206265206772656160408201526c746572207468616e207a65726f60981b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611aa657611aa6611a7e565b5060010190565b808201808211156105be576105be611a7e56fea264697066735822122044df5022aff75787ba14419485040b4d272af77be86f8d8e7ddbfa569afafd7e64736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d9bca1b1e09c7349f56ccde6b34f592943f89923
-----Decoded View---------------
Arg [0] : ownerAddress (address): 0xD9BCa1B1e09c7349F56cCDE6B34F592943f89923
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d9bca1b1e09c7349f56ccde6b34f592943f89923
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.