// SPDX-License-Identifier: No License
import {Ownable, Ownable2Step} from "./Ownable2Step.sol";
pragma solidity ^0.8.19;
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
library SafeMathInt {
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
contract TruncatedERC20 {
mapping(address => uint256) private _balances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @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 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 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 Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
uint256 accountBalance = _balances[account];
if (accountBalance < amount) {
revert ERC20InsufficientBalance(account, accountBalance, amount);
}
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
}
}
/// @title Dividend-Paying Token Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev An interface for a dividend-paying token contract.
interface DividendPayingTokenInterface {
function dividendOf(address _owner) external view returns (uint256);
event DividendsDistributed(address indexed from, uint256 weiAmount);
event DividendWithdrawn(address indexed to, uint256 weiAmount);
}
/// @title Dividend-Paying Token Optional Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev OPTIONAL functions for a dividend-paying token contract.
interface DividendPayingTokenOptionalInterface {
function withdrawableDividendOf(address _owner) external view returns (uint256);
function withdrawnDividendOf(address _owner) external view returns (uint256);
function accumulativeDividendOf(address _owner) external view returns (uint256);
}
/// @title Dividend-Paying Token
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev A mintable ERC20 token that allows anyone to pay and distribute ether
/// to token holders as dividends and allows token holders to withdraw their dividends.
/// Reference: the source code of PoWH3D: https://etherscan.io/address/0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe#code
contract DividendPayingToken is TruncatedERC20, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
using SafeMathUint for uint256;
using SafeMathInt for int256;
uint256 constant internal magnitude = 2**128;
uint256 internal magnifiedDividendPerShare;
mapping(address => int256) internal magnifiedDividendCorrections;
mapping(address => uint256) internal withdrawnDividends;
uint256 public totalDividendsDistributed;
uint256 public callbackGas;
error DividendTrackerNoEligibleAddresses();
constructor(string memory _name, string memory _symbol) TruncatedERC20(_name, _symbol) {}
receive() external payable {
distributeDividends();
}
function distributeDividends() public payable {
if (totalSupply() == 0) {
revert DividendTrackerNoEligibleAddresses();
}
if (msg.value > 0) {
magnifiedDividendPerShare = magnifiedDividendPerShare + (msg.value * magnitude / totalSupply());
emit DividendsDistributed(msg.sender, msg.value);
totalDividendsDistributed = totalDividendsDistributed + msg.value;
}
}
function _withdrawDividend(address account, bool autoClaim) internal returns(uint256) {
uint256 withdrawableDividend = withdrawableDividendOf(account);
if (withdrawableDividend > 0) {
withdrawnDividends[account] = withdrawnDividends[account] + withdrawableDividend;
bool success = autoClaim ? _sendDividendAuto(account, withdrawableDividend) : _sendDividendManual(account, withdrawableDividend);
if (success) {
emit DividendWithdrawn(account, withdrawableDividend);
return withdrawableDividend;
} else {
withdrawnDividends[account] = withdrawnDividends[account] - withdrawableDividend;
}
}
return 0;
}
function _sendDividendAuto(address account, uint256 value) internal returns(bool success) {
(success,) = payable(account).call{value: value, gas: callbackGas}("");
}
function _sendDividendManual(address account, uint256 value) internal returns(bool success) {
(success,) = payable(account).call{value: value}("");
}
function dividendOf(address account) public view override returns(uint256) {
return withdrawableDividendOf(account);
}
function withdrawableDividendOf(address account) public view override returns(uint256) {
return accumulativeDividendOf(account) - withdrawnDividends[account];
}
function withdrawnDividendOf(address account) public view override returns(uint256) {
return withdrawnDividends[account];
}
function accumulativeDividendOf(address account) public view override returns(uint256) {
return ((magnifiedDividendPerShare * balanceOf(account)).toInt256Safe() + magnifiedDividendCorrections[account]).toUint256Safe() / magnitude;
}
function _mint(address account, uint256 value) internal override {
super._mint(account, value);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] - (magnifiedDividendPerShare * value).toInt256Safe();
}
function _burn(address account, uint256 value) internal override {
super._burn(account, value);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account] + (magnifiedDividendPerShare * value).toInt256Safe();
}
function _setBalance(address account, uint256 newBalance) internal {
uint256 currentBalance = balanceOf(account);
if (newBalance > currentBalance) _mint(account, newBalance - currentBalance);
else if (newBalance < currentBalance) _burn(account, currentBalance - newBalance);
}
}
library IterableMapping {
// Iterable mapping from address to uint;
struct Map {
address[] keys;
mapping(address => uint) values;
mapping(address => uint) indexOf;
mapping(address => bool) inserted;
}
function get(Map storage map, address key) public view returns (uint) {
return map.values[key];
}
function getIndexOfKey(Map storage map, address key) public view returns (int) {
if(!map.inserted[key]) {
return -1;
}
return int(map.indexOf[key]);
}
function getKeyAtIndex(Map storage map, uint index) public view returns (address) {
return map.keys[index];
}
function size(Map storage map) public view returns (uint) {
return map.keys.length;
}
function set(Map storage map, address key, uint val) public {
if (map.inserted[key]) {
map.values[key] = val;
} else {
map.inserted[key] = true;
map.values[key] = val;
map.indexOf[key] = map.keys.length;
map.keys.push(key);
}
}
function remove(Map storage map, address key) public {
if (!map.inserted[key]) {
return;
}
delete map.inserted[key];
delete map.values[key];
uint index = map.indexOf[key];
uint lastIndex = map.keys.length - 1;
address lastKey = map.keys[lastIndex];
map.indexOf[lastKey] = index;
delete map.indexOf[key];
map.keys[index] = lastKey;
map.keys.pop();
}
}
contract DividendTracker is Ownable, DividendPayingToken {
using IterableMapping for IterableMapping.Map;
IterableMapping.Map private tokenHoldersMap;
uint256 public lastProcessedIndex;
mapping(address => bool) public isExcludedFromDividends;
mapping(address => uint256) public lastClaimTimes;
uint256 public claimWait;
uint256 public minimumTokenBalanceForDividends;
error InvalidClaimWait(uint256 claimWait);
error InvalidCallbackGas(uint256 callbackGas);
event CallbackGasUpdated(uint256 callbackGas);
event ExcludeFromDividends(address indexed account, bool isExcluded);
event ClaimWaitUpdated(uint256 claimWait);
event ProcessedDividendTracker(uint256 iterations, uint256 claims);
constructor(uint256 _claimWait, uint256 _minimumTokenBalance, uint256 _callbackGas) DividendPayingToken("DividendTracker", "DividendTracker") Ownable(msg.sender) {
claimWaitSetup(_claimWait);
callbackGasSetup(_callbackGas);
minimumTokenBalanceForDividends = _minimumTokenBalance;
}
function callbackGasSetup(uint256 newCallbackGas) public onlyOwner {
if (newCallbackGas < 2_300 || newCallbackGas > 10_000) revert InvalidCallbackGas(newCallbackGas);
callbackGas = newCallbackGas;
emit CallbackGasUpdated(newCallbackGas);
}
function excludeFromDividends(address account, uint256 balance, bool isExcluded) external onlyOwner {
if (isExcluded) {
if (!isExcludedFromDividends[account]) {
isExcludedFromDividends[account] = true;
_setBalance(account, 0);
tokenHoldersMap.remove(account);
}
} else {
if (isExcludedFromDividends[account]) {
isExcludedFromDividends[account] = false;
setBalance(account, balance);
}
}
emit ExcludeFromDividends(account, isExcluded);
}
function claimWaitSetup(uint256 newClaimWait) public onlyOwner {
if (newClaimWait < 60 || newClaimWait > 7 days) revert InvalidClaimWait(newClaimWait);
claimWait = newClaimWait;
emit ClaimWaitUpdated(newClaimWait);
}
function getNumberOfTokenHolders() external view returns (uint256) {
return tokenHoldersMap.keys.length;
}
function getAccountData(address _account) public view returns (
address account,
int256 index,
int256 iterationsUntilProcessed,
uint256 withdrawableDividends,
uint256 totalDividends,
uint256 lastClaimTime,
uint256 nextClaimTime,
uint256 secondsUntilAutoClaimAvailable
)
{
account = _account;
index = tokenHoldersMap.getIndexOfKey(account);
iterationsUntilProcessed = -1;
if (index >= 0) {
if (uint256(index) > lastProcessedIndex) {
iterationsUntilProcessed = index - int256(lastProcessedIndex);
} else {
uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length > lastProcessedIndex ? tokenHoldersMap.keys.length - lastProcessedIndex : 0;
iterationsUntilProcessed = index + int256(processesUntilEndOfArray);
}
}
withdrawableDividends = withdrawableDividendOf(account);
totalDividends = accumulativeDividendOf(account);
lastClaimTime = lastClaimTimes[account];
nextClaimTime = lastClaimTime > 0 ? lastClaimTime + claimWait : 0;
secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime - block.timestamp : 0;
}
function getAccountDataAtIndex(uint256 index) public view returns (
address,
int256,
int256,
uint256,
uint256,
uint256,
uint256,
uint256
)
{
if (index >= tokenHoldersMap.size()) return (address(0), -1, -1, 0, 0, 0, 0, 0);
address account = tokenHoldersMap.getKeyAtIndex(index);
return getAccountData(account);
}
function claim(address account, bool autoClaim) public onlyOwner returns (bool) {
uint256 amount = _withdrawDividend(account, autoClaim);
if (amount > 0) {
lastClaimTimes[account] = block.timestamp;
return true;
}
return false;
}
function _canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
if (block.timestamp < lastClaimTime) return false;
return block.timestamp - lastClaimTime >= claimWait;
}
function setBalance(address account, uint256 newBalance) public onlyOwner {
if (!isExcludedFromDividends[account]) {
if (newBalance >= minimumTokenBalanceForDividends) {
_setBalance(account, newBalance);
tokenHoldersMap.set(account, newBalance);
} else {
_setBalance(account, 0);
tokenHoldersMap.remove(account);
}
}
}
function process(uint256 gas) external onlyOwner returns(uint256 iterations, uint256 claims) {
uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;
if (numberOfTokenHolders == 0) return (0, 0);
uint256 _lastProcessedIndex = lastProcessedIndex;
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
iterations = 0;
claims = 0;
while (gasUsed < gas && iterations < numberOfTokenHolders) {
_lastProcessedIndex++;
if (_lastProcessedIndex >= tokenHoldersMap.keys.length) _lastProcessedIndex = 0;
address account = tokenHoldersMap.keys[_lastProcessedIndex];
if (_canAutoClaim(lastClaimTimes[account])) {
if (claim(account, true)) {
claims++;
}
}
iterations++;
uint256 newGasLeft = gasleft();
if (gasLeft > newGasLeft) gasUsed = gasUsed + (gasLeft - newGasLeft);
gasLeft = newGasLeft;
}
lastProcessedIndex = _lastProcessedIndex;
emit ProcessedDividendTracker(iterations, claims);
}
}
abstract contract DividendTrackerFunctions is Ownable2Step {
DividendTracker public dividendTracker;
uint256 public gasForProcessing;
error InvalidGasForProcessing(uint256 gasForProcessing);
event DeployedDividendTracker(address indexed dividendTracker);
event GasForProcessingUpdated(uint256 gasForProcessing);
function _deployDividendTracker(uint256 claimWait, uint256 minimumTokenBalance, uint256 callbackGas) internal {
dividendTracker = new DividendTracker(claimWait, minimumTokenBalance, callbackGas);
emit DeployedDividendTracker(address(dividendTracker));
}
function gasForProcessingSetup(uint256 newGasForProcessing) public onlyOwner {
if (newGasForProcessing < 200_000 || newGasForProcessing > 500_000) revert InvalidGasForProcessing(newGasForProcessing);
gasForProcessing = newGasForProcessing;
emit GasForProcessingUpdated(newGasForProcessing);
}
function callbackGasSetup(uint256 callbackGas) external onlyOwner {
dividendTracker.callbackGasSetup(callbackGas);
}
function claimWaitSetup(uint256 claimWait) external onlyOwner {
dividendTracker.claimWaitSetup(claimWait);
}
function _excludeFromDividends(address account, bool isExcluded) internal virtual;
function isExcludedFromDividends(address account) public view returns (bool) {
return dividendTracker.isExcludedFromDividends(account);
}
function claim() external returns(bool) {
return dividendTracker.claim(msg.sender, false);
}
function getClaimWait() external view returns (uint256) {
return dividendTracker.claimWait();
}
function getTotalDividendsDistributed() external view returns (uint256) {
return dividendTracker.totalDividendsDistributed();
}
function withdrawableDividendOf(address account) public view returns (uint256) {
return dividendTracker.withdrawableDividendOf(account);
}
function dividendTokenBalanceOf(address account) public view returns (uint256) {
return dividendTracker.balanceOf(account);
}
function dividendTokenTotalSupply() public view returns (uint256) {
return dividendTracker.totalSupply();
}
function getAccountDividendsInfo(address account) external view returns (
address,
int256,
int256,
uint256,
uint256,
uint256,
uint256,
uint256
) {
return dividendTracker.getAccountData(account);
}
function getAccountDividendsInfoAtIndex(uint256 index) external view returns (
address,
int256,
int256,
uint256,
uint256,
uint256,
uint256,
uint256
) {
return dividendTracker.getAccountDataAtIndex(index);
}
function getLastProcessedIndex() external view returns (uint256) {
return dividendTracker.lastProcessedIndex();
}
function getNumberOfDividendTokenHolders() public view returns (uint256) {
return dividendTracker.getNumberOfTokenHolders();
}
function process(uint256 gas) external returns(uint256 iterations, uint256 claims) {
return dividendTracker.process(gas);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_claimWait",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_minimumTokenBalance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_callbackGas",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "DividendTrackerNoEligibleAddresses",
"type": "error",
"inputs": []
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "InvalidCallbackGas",
"type": "error",
"inputs": [
{
"name": "callbackGas",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InvalidClaimWait",
"type": "error",
"inputs": [
{
"name": "claimWait",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "CallbackGasUpdated",
"type": "event",
"inputs": [
{
"name": "callbackGas",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ClaimWaitUpdated",
"type": "event",
"inputs": [
{
"name": "claimWait",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "DividendWithdrawn",
"type": "event",
"inputs": [
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "weiAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "DividendsDistributed",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "weiAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ExcludeFromDividends",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "isExcluded",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "ProcessedDividendTracker",
"type": "event",
"inputs": [
{
"name": "iterations",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "claims",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "accumulativeDividendOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "callbackGas",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "callbackGasSetup",
"type": "function",
"inputs": [
{
"name": "newCallbackGas",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "claim",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "autoClaim",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "claimWait",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "claimWaitSetup",
"type": "function",
"inputs": [
{
"name": "newClaimWait",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "distributeDividends",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "dividendOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "excludeFromDividends",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "isExcluded",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "getAccountData",
"type": "function",
"inputs": [
{
"name": "_account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "index",
"type": "int256",
"internalType": "int256"
},
{
"name": "iterationsUntilProcessed",
"type": "int256",
"internalType": "int256"
},
{
"name": "withdrawableDividends",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalDividends",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "lastClaimTime",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "nextClaimTime",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "secondsUntilAutoClaimAvailable",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getAccountDataAtIndex",
"type": "function",
"inputs": [
{
"name": "index",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
},
{
"name": "",
"type": "int256",
"internalType": "int256"
},
{
"name": "",
"type": "int256",
"internalType": "int256"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getNumberOfTokenHolders",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "isExcludedFromDividends",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "lastClaimTimes",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lastProcessedIndex",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "minimumTokenBalanceForDividends",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "process",
"type": "function",
"inputs": [
{
"name": "gas",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "iterations",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "claims",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setBalance",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "newBalance",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalDividendsDistributed",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "withdrawableDividendOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "withdrawnDividendOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x6080604052600436106101c65760003560e01c8063715018a6116100f7578063a8b9d24011610095578063d1fbb84e11610064578063d1fbb84e1461053b578063e30443bc1461055b578063f2fde38b1461057b578063ffb2c4791461059b57600080fd5b8063a8b9d2401461049f578063aafd847a146104bf578063be10b614146104f5578063c705c5691461050b57600080fd5b806391b89fba116100d157806391b89fba1461042457806392fd2daf1461044457806395d89b4114610474578063a10132ad1461048957600080fd5b8063715018a6146103d157806385a6b3ae146103e65780638da5cb5b146103fc57600080fd5b80633009a609116101645780635d78650e1161013e5780635d78650e146103455780636cc9c8f1146103655780636f2789ec1461038557806370a082311461039b57600080fd5b80633009a609146102f3578063313ce56714610309578063393881a81461032557600080fd5b806318160ddd116101a057806318160ddd1461022c578063226cfa3d1461024157806327ce01471461026e5780632f7541e91461028e57600080fd5b806303c83302146101da57806306fdde03146101e257806309bbedde1461020d57600080fd5b366101d5576101d36105d0565b005b600080fd5b6101d36105d0565b3480156101ee57600080fd5b506101f761066d565b60405161020491906114a8565b60405180910390f35b34801561021957600080fd5b50600a545b604051908152602001610204565b34801561023857600080fd5b5060025461021e565b34801561024d57600080fd5b5061021e61025c36600461150c565b60106020526000908152604090205481565b34801561027a57600080fd5b5061021e61028936600461150c565b6106ff565b34801561029a57600080fd5b506102ae6102a9366004611530565b610762565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610204565b3480156102ff57600080fd5b5061021e600e5481565b34801561031557600080fd5b5060405160128152602001610204565b34801561033157600080fd5b506101d3610340366004611530565b6108b6565b34801561035157600080fd5b506102ae61036036600461150c565b610931565b34801561037157600080fd5b506101d3610380366004611530565b610a99565b34801561039157600080fd5b5061021e60115481565b3480156103a757600080fd5b5061021e6103b636600461150c565b6001600160a01b031660009081526001602052604090205490565b3480156103dd57600080fd5b506101d3610b08565b3480156103f257600080fd5b5061021e60085481565b34801561040857600080fd5b506000546040516001600160a01b039091168152602001610204565b34801561043057600080fd5b5061021e61043f36600461150c565b610b1a565b34801561045057600080fd5b5061046461045f36600461155e565b610b25565b6040519015158152602001610204565b34801561048057600080fd5b506101f7610b71565b34801561049557600080fd5b5061021e60095481565b3480156104ab57600080fd5b5061021e6104ba36600461150c565b610b80565b3480156104cb57600080fd5b5061021e6104da36600461150c565b6001600160a01b031660009081526007602052604090205490565b34801561050157600080fd5b5061021e60125481565b34801561051757600080fd5b5061046461052636600461150c565b600f6020526000908152604090205460ff1681565b34801561054757600080fd5b506101d3610556366004611593565b610bac565b34801561056757600080fd5b506101d36105763660046115d1565b610d15565b34801561058757600080fd5b506101d361059636600461150c565b610e36565b3480156105a757600080fd5b506105bb6105b6366004611530565b610e74565b60408051928352602083019190915201610204565b6002546000036105f35760405163021415c960e31b815260040160405180910390fd5b341561066b5760025461060a600160801b34611613565b610614919061162a565b600554610621919061164c565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a234600854610667919061164c565b6008555b565b60606003805461067c9061165f565b80601f01602080910402602001604051908101604052809291908181526020018280546106a89061165f565b80156106f55780601f106106ca576101008083540402835291602001916106f5565b820191906000526020600020905b8154815290600101906020018083116106d857829003601f168201915b5050505050905090565b6001600160a01b0381166000908152600660209081526040808320546001909252822054600160801b91610752916107439060055461073e9190611613565b610fc6565b61074d9190611699565b610fd6565b61075c919061162a565b92915050565b600080600080600080600080600a73b24969123b1dc397b5d470e9dd8ba0b7bc28b6fa63deb3d89690916040518263ffffffff1660e01b81526004016107aa91815260200190565b602060405180830381865af41580156107c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107eb91906116c1565b89106108105750600096506000199550859450869350839250829150819050806108ab565b6040516368d54f3f60e11b8152600a6004820152602481018a905260009073b24969123b1dc397b5d470e9dd8ba0b7bc28b6fa9063d1aa9e7e90604401602060405180830381865af415801561086a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088e91906116da565b905061089981610931565b98509850985098509850985098509850505b919395975091939597565b6108be610fe9565b6108fc8110806108cf575061271081115b156108f557604051631030c0f760e11b8152600481018290526024015b60405180910390fd5b60098190556040518181527fb1b0d1662f1613cc48bbdf25be1c8f7ba4cb61de464f286bc2d596f626b883d5906020015b60405180910390a150565b6040516317e142d160e01b8152600a60048201526001600160a01b0382166024820152819060009081908190819081908190819073b24969123b1dc397b5d470e9dd8ba0b7bc28b6fa906317e142d190604401602060405180830381865af41580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c591906116c1565b9650600019955060008712610a2757600e548711156109f257600e546109eb90886116f7565b9550610a27565b600e54600a5460009110610a07576000610a17565b600e54600a54610a17919061171e565b9050610a238189611699565b9650505b610a3088610b80565b9450610a3b886106ff565b6001600160a01b038916600090815260106020526040902054909450925082610a65576000610a72565b601154610a72908461164c565b9150428211610a82576000610a8c565b610a8c428361171e565b9050919395975091939597565b610aa1610fe9565b603c811080610ab2575062093a8081115b15610ad357604051639a60673160e01b8152600481018290526024016108ec565b60118190556040518181527f4b0a6b82d0dc4407b3359033a4f27efd1e2105e4571b72d6a3b8f1da3e6079dd90602001610926565b610b10610fe9565b61066b6000611016565b600061075c82610b80565b6000610b2f610fe9565b6000610b3b8484611066565b90508015610b675750506001600160a01b0382166000908152601060205260409020429055600161075c565b5060009392505050565b60606004805461067c9061165f565b6001600160a01b038116600090815260076020526040812054610ba2836106ff565b61075c919061171e565b610bb4610fe9565b8015610c80576001600160a01b0383166000908152600f602052604090205460ff16610c7b576001600160a01b0383166000908152600f60205260408120805460ff19166001179055610c08908490611174565b60405163131836e760e21b8152600a60048201526001600160a01b038416602482015273b24969123b1dc397b5d470e9dd8ba0b7bc28b6fa90634c60db9c9060440160006040518083038186803b158015610c6257600080fd5b505af4158015610c76573d6000803e3d6000fd5b505050505b610ccb565b6001600160a01b0383166000908152600f602052604090205460ff1615610ccb576001600160a01b0383166000908152600f60205260409020805460ff19169055610ccb8383610d15565b826001600160a01b03167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be82604051610d08911515815260200190565b60405180910390a2505050565b610d1d610fe9565b6001600160a01b0382166000908152600f602052604090205460ff16610e32576012548110610dcd57610d508282611174565b604051632f0ad01760e21b8152600a60048201526001600160a01b03831660248201526044810182905273b24969123b1dc397b5d470e9dd8ba0b7bc28b6fa9063bc2b405c9060640160006040518083038186803b158015610db157600080fd5b505af4158015610dc5573d6000803e3d6000fd5b505050505050565b610dd8826000611174565b60405163131836e760e21b8152600a60048201526001600160a01b038316602482015273b24969123b1dc397b5d470e9dd8ba0b7bc28b6fa90634c60db9c9060440160006040518083038186803b158015610db157600080fd5b5050565b610e3e610fe9565b6001600160a01b038116610e6857604051631e4fbdf760e01b8152600060048201526024016108ec565b610e7181611016565b50565b600080610e7f610fe9565b600a546000819003610e975750600093849350915050565b600e546000805a905060009550600094505b8682108015610eb757508386105b15610f7f5782610ec681611731565b600a5490945084109050610ed957600092505b6000600a6000018481548110610ef157610ef161174a565b60009182526020808320909101546001600160a01b03168083526010909152604090912054909150610f22906111c8565b15610f4557610f32816001610b25565b15610f455785610f4181611731565b9650505b86610f4f81611731565b97505060005a905080831115610f7657610f69818461171e565b610f73908561164c565b93505b9150610ea99050565b600e83905560408051878152602081018790527ff78a0aac70b15fc744c16ea2c52bba9a167f030b8961e62a1d2c92588f77facf910160405180910390a150505050915091565b6000818181121561075c57600080fd5b600080821215610fe557600080fd5b5090565b6000546001600160a01b0316331461066b5760405163118cdaa760e01b81523360048201526024016108ec565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008061107284610b80565b90508015610b67576001600160a01b03841660009081526007602052604090205461109e90829061164c565b6001600160a01b038516600090815260076020526040812091909155836110ce576110c985836111ef565b6110d8565b6110d8858361124b565b9050801561112b57846001600160a01b03167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d8360405161111b91815260200190565b60405180910390a250905061075c565b6001600160a01b03851660009081526007602052604090205461114f90839061171e565b6001600160a01b03861660009081526007602052604090205550600091505092915050565b6001600160a01b038216600090815260016020526040902054808211156111ad576111a8836111a3838561171e565b61129a565b505050565b808210156111a8576111a8836111c3848461171e565b6112f8565b6000814210156111da57506000919050565b6011546111e7834261171e565b101592915050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461123c576040519150601f19603f3d011682016040523d82523d6000602084013e611241565b606091505b5090949350505050565b6009546040516000916001600160a01b03851691849084818181858888f193505050503d806000811461123c576040519150601f19603f3d011682016040523d82523d6000602084013e611241565b6112a48282611336565b6112b58160055461073e9190611613565b6001600160a01b0383166000908152600660205260409020546112d891906116f7565b6001600160a01b0390921660009081526006602052604090209190915550565b61130282826113cb565b6113138160055461073e9190611613565b6001600160a01b0383166000908152600660205260409020546112d89190611699565b6001600160a01b0382166113605760405163ec442f0560e01b8152600060048201526024016108ec565b8060026000828254611372919061164c565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0382166113f557604051634b637e8f60e11b8152600060048201526024016108ec565b6001600160a01b038216600090815260016020526040902054818110156114485760405163391434e360e21b81526001600160a01b038416600482015260248101829052604481018390526064016108ec565b6001600160a01b03831660008181526001602090815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b60006020808352835180602085015260005b818110156114d6578581018301518582016040015282016114ba565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e7157600080fd5b60006020828403121561151e57600080fd5b8135611529816114f7565b9392505050565b60006020828403121561154257600080fd5b5035919050565b8035801515811461155957600080fd5b919050565b6000806040838503121561157157600080fd5b823561157c816114f7565b915061158a60208401611549565b90509250929050565b6000806000606084860312156115a857600080fd5b83356115b3816114f7565b9250602084013591506115c860408501611549565b90509250925092565b600080604083850312156115e457600080fd5b82356115ef816114f7565b946020939093013593505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761075c5761075c6115fd565b60008261164757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561075c5761075c6115fd565b600181811c9082168061167357607f821691505b60208210810361169357634e487b7160e01b600052602260045260246000fd5b50919050565b80820182811260008312801582168215821617156116b9576116b96115fd565b505092915050565b6000602082840312156116d357600080fd5b5051919050565b6000602082840312156116ec57600080fd5b8151611529816114f7565b8181036000831280158383131683831282161715611717576117176115fd565b5092915050565b8181038181111561075c5761075c6115fd565b600060018201611743576117436115fd565b5060010190565b634e487b7160e01b600052603260045260246000fdfea164736f6c6343000819000a
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xf78a0a…facf | data: 0x000000000000000000…0000000a |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…f57e4957 data: 0x000000000000000000…e107060d |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…1c73d9c1 data: 0x000000000000000000…457f86d9 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…5f07d225 data: 0x000000000000000000…81ded583 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…fe1c4a48 data: 0x000000000000000000…f5d10a7d |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…46511748 data: 0x000000000000000000…52b65977 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…62fcacc9 data: 0x000000000000000000…009b7c87 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…a7b351ba data: 0x000000000000000000…a9148299 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…00b890fc data: 0x000000000000000000…4be79915 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…04ec7b2a data: 0x000000000000000000…e7936e93 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xee503b…ca4d | [0] 0x000000000000…1c8fcae7 data: 0x000000000000000000…c51c90c6 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | Transfer | [0] 0x000000000000…5fffa11a [1] 0x000000000000…00000000 data: 0x000000000000000000…58b33438 |
| 0x3d2108…0e82d3 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0xa493a9…6511 | [0] 0x000000000000…ac938547 data: 0x000000000000000000…057f9519 |
| 0xd230c1…c3be1c | 1 day agoSun, 16 Aug 2026 09:00:12 UTC | 0xf78a0a…facf | data: 0x000000000000000000…00000000 |
| 0xd230c1…c3be1c | 1 day agoSun, 16 Aug 2026 09:00:12 UTC | Transfer | [0] 0x000000000000…03d3e2e4 [1] 0x000000000000…00000000 data: 0x000000000000000000…550951b4 |
| 0xfa4506…2e14c4 | 10 days agoFri, 07 Aug 2026 12:56:00 UTC | 0xf78a0a…facf | data: 0x000000000000000000…00000000 |
| 0xfa4506…2e14c4 | 10 days agoFri, 07 Aug 2026 12:56:00 UTC | 0xf78a0a…facf | data: 0x000000000000000000…00000000 |
| 0xfa4506…2e14c4 | 10 days agoFri, 07 Aug 2026 12:56:00 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…10d09799 data: 0x000000000000000000…46a89971 |
| 0xfa4506…2e14c4 | 10 days agoFri, 07 Aug 2026 12:56:00 UTC | 0xf78a0a…facf | data: 0x000000000000000000…00000000 |
| 0x7fb7eb…81ed50 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0xf78a0a…facf | data: 0x000000000000000000…00000000 |
| 0x7fb7eb…81ed50 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | Transfer | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…00000000 data: 0x000000000000000000…f401d07e |
| 0x7fb7eb…81ed50 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0xf78a0a…facf | data: 0x000000000000000000…00000001 |
| 0x7fb7eb…81ed50 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0xee503b…ca4d | [0] 0x000000000000…04ec7b2a data: 0x000000000000000000…c05b5054 |
| 0x7fb7eb…81ed50 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…10d09799 data: 0x000000000000000000…f6588bc0 |
| 0x7fb7eb…81ed50 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | Transfer | [0] 0x000000000000…20cbbe5f [1] 0x000000000000…00000000 data: 0x000000000000000000…f6588bc0 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| No direct transactions — this address is only ever reached via internal calls (common for a contract only invoked through a router or proxy). View Internal Transactions → | |||||||||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0x95a9…4957 | 0.00001 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0x98b5…d9c1 | 0.00052 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0xf541…d225 | 0.00004 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0xe58d…4a48 | 0.00003 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0xd040…1748 | 0.00000 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0x4de5…acc9 | 0.00002 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0xa068…51ba | 0.00017 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0x376e…90fc | 0.00014 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0x4cbe…7b2a | 0.00005 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xa563…6af3 | OUT | 0x24e2…cae7 | 0.00000 ETH |
| 39,014,948 | 8 hrs agoMon, 17 Aug 2026 17:26:08 UTC | 0x3d2108…0e82d3 | CALL | SigmaSwap | 0xcd0e…8547 | IN | 0xa563…6af3 | 0.00316 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0x4cbe…7b2a | 0.00007 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0x0000…dead | 0.00182 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0xdea1…f36d | 0.00038 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0x82e3…d4c8 | 0.00030 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0xcd6b…9799 | 0.00001 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0xedc6…e2e4 | 0.00000 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0x98b5…d9c1 | 0.00072 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0xf541…d225 | 0.00006 ETH |
| 28,300,563 | 12 days agoWed, 05 Aug 2026 07:18:53 UTC | 0x7fb7eb…81ed50 | CALL | exec | 0xa563…6af3 | OUT | 0xe58d…4a48 | 0.00004 ETH |
| 28,036,342 | 13 days agoTue, 04 Aug 2026 23:57:18 UTC | 0x745c54…650afe | CALL | 0x39ecce49 | 0xa563…6af3 | OUT | 0x95a9…4957 | 0.00002 ETH |
| 28,036,342 | 13 days agoTue, 04 Aug 2026 23:57:18 UTC | 0x745c54…650afe | CALL | 0x39ecce49 | 0xa563…6af3 | OUT | 0xe038…04f9 | 0.00007 ETH |
| 28,036,342 | 13 days agoTue, 04 Aug 2026 23:57:18 UTC | 0x745c54…650afe | CALL | 0x39ecce49 | 0xa563…6af3 | OUT | 0xd040…1748 | 0.00001 ETH |
| 28,036,342 | 13 days agoTue, 04 Aug 2026 23:57:18 UTC | 0x745c54…650afe | CALL | 0x39ecce49 | 0xa563…6af3 | OUT | 0x4de5…acc9 | 0.00003 ETH |
| 28,036,342 | 13 days agoTue, 04 Aug 2026 23:57:18 UTC | 0x745c54…650afe | CALL | 0x39ecce49 | 0xa563…6af3 | OUT | 0xa068…51ba | 0.00024 ETH |