BasedToken
0x27d666ed212e7a0545f8c2dd759c0eac2665fb1d
Verification
Verified
v0.8.35+commit.47b9dedd
Type
Contract
15,026 bytes
ABI entries
58
22 read · 16 write
License
none
Contract information
- Address
- 0x27d666ed212e7a0545f8c2dd759c0eac2665fb1d
- Chain
- Robinhood Chain (4663)
- Compiler
- v0.8.35+commit.47b9dedd
- Optimization
- Enabled
- Creator
- 0x6EC95a3C6C…E55df3550d
- Creation tx
- 0x5909ce3182…44b8dc9df5
Token
- Name
- PIXEL MOG
- Symbol
- PKS
- Decimals
- 18
- Holders
- 2
- Market
- View token page →
Read contract (22)
allowance(address, address) → uint256
balanceOf(address) → uint256
decimals() → uint8
dividendTokenBalanceOf(address) → uint256
dividendTracker() → address
gasForProcessing() → uint256
getAccountDividendsInfo(address, address) → address, int256, int256, uint256, uint256, uint256, uint256, uint256
getAccountDividendsInfoAtIndex(uint256, address) → address, int256, int256, uint256, uint256, uint256, uint256, uint256
getClaimWait() → uint256
getLastProcessedIndex() → uint256
getMinimumTokenBalanceForDividends() → uint256
getNumberOfDividendTokenHolders() → uint256
getRewardTokenAt(uint256) → address
getRewardTokensLength() → uint256
getTotalDividendsDistributed(address) → uint256
isExcludedFromDividends(address) → bool
name() → string
owner() → address
symbol() → string
totalSupply() → uint256
tradingEnabled() → bool
withdrawableDividendOf(address, address) → uint256
Events (8)
ApprovalGasForProcessingUpdatedInitializedOwnershipTransferredProcessedDividendTrackerTradingEnabledTransferUpdateDividendTracker
ABI
[
{
"inputs": [],
"name": "ERC1167FailedCreateClone",
"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": "InvalidInitialization",
"type": "error"
},
{
"inputs": [],
"name": "NotInitializing",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"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": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "GasForProcessingUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint64",
"name": "version",
"type": "uint64"
}
],
"name": "Initialized",
"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": "uint256",
"name": "iterations",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "claims",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "lastProcessedIndex",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bool",
"name": "automatic",
"type": "bool"
},
{
"indexed": false,
"internalType": "uint256",
"name": "gas",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "processor",
"type": "address"
}
],
"name": "ProcessedDividendTracker",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "TradingEnabled",
"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": "tracker",
"type": "address"
}
],
"name": "UpdateDividendTracker",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "addRewardToken",
"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": [],
"name": "claim",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "dividendTokenBalanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "dividendTracker",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "enableTrade",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "excludeFromDividends",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "gasForProcessing",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "rewardToken",
"type": "address"
}
],
"name": "getAccountDividendsInfo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"internalType": "address",
"name": "rewardToken",
"type": "address"
}
],
"name": "getAccountDividendsInfoAtIndex",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getClaimWait",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getLastProcessedIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getMinimumTokenBalanceForDividends",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getNumberOfDividendTokenHolders",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "getRewardTokenAt",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getRewardTokensLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "rewardToken",
"type": "address"
}
],
"name": "getTotalDividendsDistributed",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_totalSupply",
"type": "uint256"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "uint8",
"name": "__decimals",
"type": "uint8"
},
{
"internalType": "address[]",
"name": "_rewardTokens",
"type": "address[]"
},
{
"internalType": "uint256",
"name": "minimumTokenBalanceForDividends",
"type": "uint256"
},
{
"internalType": "address",
"name": "v4Hook",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "isExcludedFromDividends",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"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": [
{
"internalType": "uint256",
"name": "gas",
"type": "uint256"
}
],
"name": "processDividendTracker",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"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": [],
"name": "tradingEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"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": [
{
"internalType": "uint256",
"name": "claimWait",
"type": "uint256"
}
],
"name": "updateClaimWait",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newAddress",
"type": "address"
}
],
"name": "updateDividendTracker",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "newValue",
"type": "uint256"
}
],
"name": "updateGasForProcessing",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "updateMinimumTokenBalanceForDividends",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newV4Hook",
"type": "address"
}
],
"name": "updateV4Hook",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "address",
"name": "rewardToken",
"type": "address"
}
],
"name": "withdrawableDividendOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
]Source code
// SPDX-License-Identifier: MIT
//Created on based.bid - Instant Token Launchpad with ZERO Cost
pragma solidity 0.8.35;
import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
import {DividendTokenDividendTracker} from "./DividendTokenDividendTracker.sol";
contract BasedToken is Initializable, ERC20Upgradeable, OwnableUpgradeable {
address public dividendTracker;
uint256 public gasForProcessing;
uint8 private _decimals;
bool public tradingEnabled;
event TradingEnabled();
event UpdateDividendTracker(address indexed tracker);
event GasForProcessingUpdated(uint256 indexed value);
event ProcessedDividendTracker(
uint256 iterations,
uint256 claims,
uint256 lastProcessedIndex,
bool indexed automatic,
uint256 gas,
address indexed processor
);
modifier validateTransfer(address from, address to) {
require(
tradingEnabled ||
_msgSender() == owner() ||
from == owner() ||
to == owner() ||
from == address(0) ||
to == address(0),
"not listed"
);
_;
}
/// @param _rewardTokens Reward assets paid to holders. Use `address(0)` for native coin.
function initialize(
uint256 _totalSupply,
string memory name,
string memory symbol,
uint8 __decimals,
address[] memory _rewardTokens,
uint256 minimumTokenBalanceForDividends,
address v4Hook
) public initializer {
__ERC20_init(name, symbol);
__Ownable_init(msg.sender);
gasForProcessing = 300000;
emit GasForProcessingUpdated(300000);
address tracker = Clones.clone(0x9C25B6ff9123C29D61ad8989D5F540714054f667);
dividendTracker = tracker;
emit UpdateDividendTracker(tracker);
DividendTokenDividendTracker(payable(tracker)).initialize(
_rewardTokens,
minimumTokenBalanceForDividends,
v4Hook
);
_decimals = __decimals;
_mint(msg.sender, _totalSupply);
DividendTokenDividendTracker(payable(tracker)).excludeFromDividends(address(this));
DividendTokenDividendTracker(payable(tracker)).excludeFromDividends(tracker);
DividendTokenDividendTracker(payable(tracker)).excludeFromDividends(owner());
DividendTokenDividendTracker(payable(tracker)).excludeFromDividends(address(0xdead));
}
function decimals() public view override returns (uint8) {
return _decimals;
}
function updateDividendTracker(address newAddress) public onlyOwner {
require(
newAddress != dividendTracker,
"The dividend tracker already has that address"
);
address newDividendTracker = payable(newAddress);
require(
DividendTokenDividendTracker(payable(newDividendTracker)).owner() ==
address(this),
"The new dividend tracker must be owned by the DIVIDENEDTOKEN token contract"
);
DividendTokenDividendTracker(payable(newDividendTracker)).excludeFromDividends(
newDividendTracker
);
DividendTokenDividendTracker(payable(newDividendTracker)).excludeFromDividends(
address(this)
);
DividendTokenDividendTracker(payable(newDividendTracker)).excludeFromDividends(
address(0xdead)
);
emit UpdateDividendTracker(newAddress);
dividendTracker = newDividendTracker;
}
function updateGasForProcessing(uint256 newValue) public onlyOwner {
require(
newValue >= 200000 && newValue <= 500000,
"gasForProcessing must be between 200,000 and 500,000"
);
require(
newValue != gasForProcessing,
"Cannot update gasForProcessing to same value"
);
emit GasForProcessingUpdated(newValue);
gasForProcessing = newValue;
}
function updateClaimWait(uint256 claimWait) external onlyOwner {
DividendTokenDividendTracker(payable(dividendTracker)).updateClaimWait(
claimWait
);
}
function getClaimWait() external view returns (uint256) {
return DividendTokenDividendTracker(payable(dividendTracker)).claimWait();
}
function updateMinimumTokenBalanceForDividends(
uint256 amount
) external onlyOwner {
DividendTokenDividendTracker(payable(dividendTracker))
.updateMinimumTokenBalanceForDividends(amount);
}
function getMinimumTokenBalanceForDividends()
external
view
returns (uint256)
{
return
DividendTokenDividendTracker(payable(dividendTracker))
.minimumTokenBalanceForDividends();
}
function addRewardToken(address token) external onlyOwner {
DividendTokenDividendTracker(payable(dividendTracker)).addRewardToken(token);
}
function getRewardTokensLength() external view returns (uint256) {
return DividendTokenDividendTracker(payable(dividendTracker)).rewardTokensLength();
}
function getRewardTokenAt(uint256 index) external view returns (address) {
return DividendTokenDividendTracker(payable(dividendTracker)).rewardTokens(index);
}
function getTotalDividendsDistributed(address rewardToken) external view returns (uint256) {
return
DividendTokenDividendTracker(payable(dividendTracker))
.totalDividendsDistributed(rewardToken);
}
function withdrawableDividendOf(
address account,
address rewardToken
) public view returns (uint256) {
return
DividendTokenDividendTracker(payable(dividendTracker))
.withdrawableDividendOf(account, rewardToken);
}
function dividendTokenBalanceOf(
address account
) public view returns (uint256) {
return DividendTokenDividendTracker(payable(dividendTracker)).balanceOf(account);
}
function excludeFromDividends(address account) external onlyOwner {
DividendTokenDividendTracker(payable(dividendTracker)).excludeFromDividends(
account
);
}
function isExcludedFromDividends(
address account
) public view returns (bool) {
return
DividendTokenDividendTracker(payable(dividendTracker))
.isExcludedFromDividends(account);
}
function getAccountDividendsInfo(
address account,
address rewardToken
)
external
view
returns (
address,
int256,
int256,
uint256,
uint256,
uint256,
uint256,
uint256
)
{
return
DividendTokenDividendTracker(payable(dividendTracker)).getAccount(account, rewardToken);
}
function getAccountDividendsInfoAtIndex(
uint256 index,
address rewardToken
)
external
view
returns (
address,
int256,
int256,
uint256,
uint256,
uint256,
uint256,
uint256
)
{
return
DividendTokenDividendTracker(payable(dividendTracker)).getAccountAtIndex(
index,
rewardToken
);
}
function processDividendTracker(uint256 gas) external {
(
uint256 iterations,
uint256 claims,
uint256 lastProcessedIndex
) = DividendTokenDividendTracker(payable(dividendTracker)).process(gas);
emit ProcessedDividendTracker(
iterations,
claims,
lastProcessedIndex,
false,
gas,
msg.sender
);
}
function claim() external {
DividendTokenDividendTracker(payable(dividendTracker)).processAccount(
payable(msg.sender),
false
);
}
function getLastProcessedIndex() external view returns (uint256) {
return
DividendTokenDividendTracker(payable(dividendTracker))
.getLastProcessedIndex();
}
function getNumberOfDividendTokenHolders() external view returns (uint256) {
return
DividendTokenDividendTracker(payable(dividendTracker))
.getNumberOfTokenHolders();
}
function _update(
address from,
address to,
uint256 amount
) internal override validateTransfer(from, to) {
super._update(from, to, amount);
DividendTokenDividendTracker tracker = DividendTokenDividendTracker(payable(dividendTracker));
try tracker.setBalance(payable(from), balanceOf(from)) {} catch {}
try tracker.setBalance(payable(to), balanceOf(to)) {} catch {}
if (from != address(0) && to != address(0) && tradingEnabled) {
uint256 gas = gasForProcessing;
try tracker.process(gas) returns (
uint256 iterations,
uint256 claims,
uint256 lastProcessedIndex
) {
emit ProcessedDividendTracker(
iterations, claims, lastProcessedIndex, true, gas, msg.sender
);
} catch {}
}
}
function enableTrade() external onlyOwner {
require(!tradingEnabled, "trading already enabled");
tradingEnabled = true;
emit TradingEnabled();
}
function updateV4Hook(address newV4Hook) public onlyOwner {
DividendTokenDividendTracker(payable(dividendTracker)).updateV4Hook(newV4Hook);
}
receive() external payable {}
}
Chain explorer5504msChain node96ms