// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MultiLockMoat is ReentrancyGuard, Ownable {
using SafeERC20 for IERC20;
event RewardTokenAdded(address indexed token);
struct Lock {
uint256 amount;
uint256 end;
uint256 points;
uint256 originalDuration;
uint256 lastUpdated;
bool active;
}
struct UserInfo {
uint256 stakedAmount;
uint256 totalUserBurn;
uint256 stakingPoints;
uint256 burnPoints;
mapping(address => uint256) rewardDebt;
Lock[] locks;
uint256 activeLockCount;
}
struct RewardTokenInfo {
IERC20 token;
uint256 accRewardPerPoint;
uint256 unallocatedRewards;
uint256 totalRewardsDeposited;
uint256 totalRewardsClaimed;
}
IERC20 public immutable stakingToken;
uint8 public immutable tokenDecimals;
uint256 public immutable POINTS_SCALING_FACTOR;
uint256 public immutable MIN_STAKE_AMOUNT;
address public constant DEAD_WALLET =
0x000000000000000000000000000000000000dEaD;
address[] public rewardTokenAddresses;
mapping(address => RewardTokenInfo) public rewardInfo;
string private _logoURL;
address[] public activeUsers;
mapping(address => bool) public isActiveUser;
uint256 public activeUserCount;
uint256 public constant POINTS_PER_TOKEN = 1;
uint256 public constant BURN_MULTIPLIER = 10;
uint256 public constant MAX_LOCK_DURATION = 730 days;
uint256 public constant MIN_LOCK_DURATION = 1 days;
uint256 public constant MIN_LOCK_MULTIPLIER = 2;
uint256 public constant MAX_LOCK_MULTIPLIER = 5;
uint256 public constant PRECISION_FACTOR = 1e18;
uint256 public constant MULTIPLIER_PRECISION = 1e18;
uint256 public constant EARLY_EXIT_MAX_FEE = 9500;
uint256 public constant MAX_FEE = 3000;
uint256 public totalPoints;
uint256 public lastRewardBlock;
uint256 public totalStaked;
uint256 public totalLocked;
uint256 public totalBurned;
bool public emergencyUnlockEnabled = false;
uint256 public unstakeFee = 50;
address public feeCollector;
bool public stakingEnabled = true;
bool public earlyExitEnabled = true;
bool public lockingEnabled = true;
bool public burningEnabled = true;
bool public paused = false;
mapping(address => bool) public admins;
mapping(address => UserInfo) public userInfo;
// Moat manager role
address public moatManager;
event Staked(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
event Locked(
address indexed user,
uint256 amount,
uint256 duration,
uint256 lockIndex
);
event Burned(address indexed user, uint256 amount);
event RewardClaimed(
address indexed user,
address indexed token,
uint256 amount
);
event RewardsDeposited(address indexed token, uint256 amount);
event StakeIncreased(
address indexed user,
uint256 additionalAmount,
uint256 newTotalAmount
);
event LockExited(address indexed user, uint256 amount, uint256 lockIndex);
event EarlyExit(
address indexed user,
uint256 amount,
uint256 fee,
uint256 lockIndex
);
event FeeUpdated(uint256 newFee);
event FeeCollectorUpdated(address newCollector);
event UserAction(
address indexed user,
string actionType,
uint256 amount,
uint256 points,
uint256 timestamp,
bytes extraData
);
event BurnPointsMigrated(
address indexed user,
uint256 addedBurnAmount,
uint256 addedBurnPoints
);
event EmergencyRewardWithdrawal(
address indexed token,
uint256 amount,
address indexed recipient
);
constructor(
address _stakingToken,
address _feeCollector,
address _adminWallet
) {
require(_stakingToken != address(0), "Invalid staking token");
require(_feeCollector != address(0), "Invalid fee collector");
require(_adminWallet != address(0), "Invalid admin wallet");
stakingToken = IERC20(_stakingToken);
tokenDecimals = IERC20Metadata(_stakingToken).decimals();
POINTS_SCALING_FACTOR = tokenDecimals >= 12
? 10 ** 12
: 10 ** tokenDecimals;
feeCollector = _feeCollector;
MIN_STAKE_AMOUNT = POINTS_SCALING_FACTOR;
admins[_adminWallet] = true;
moatManager = _adminWallet;
}
modifier whenStakingEnabled() {
require(stakingEnabled, "Staking is disabled");
_;
}
modifier whenEarlyExitEnabled() {
require(earlyExitEnabled, "Early exit is disabled");
_;
}
modifier onlyAdmin() {
require(owner() == msg.sender || admins[msg.sender], "Not admin");
_;
}
modifier onlyMoatManager() {
require(msg.sender == moatManager, "Not moat manager");
_;
}
modifier whenLockingEnabled() {
require(lockingEnabled, "Locking is disabled");
_;
}
modifier whenBurningEnabled() {
require(burningEnabled, "Burning is disabled");
_;
}
modifier whenNotPaused() {
require(!paused, "Contract is paused");
_;
}
function addRewardToken(address _rewardToken) external onlyAdmin {
require(_rewardToken != address(0), "Invalid reward token");
require(
rewardInfo[_rewardToken].token == IERC20(address(0)),
"Reward token already exists"
);
rewardInfo[_rewardToken] = RewardTokenInfo({
token: IERC20(_rewardToken),
accRewardPerPoint: 0,
unallocatedRewards: 0,
totalRewardsDeposited: 0,
totalRewardsClaimed: 0
});
rewardTokenAddresses.push(_rewardToken);
emit RewardTokenAdded(_rewardToken);
}
function depositRewards(
address _rewardToken,
uint256 _amount
) external onlyAdmin whenNotPaused nonReentrant {
require(_amount > 0, "Cannot deposit 0");
require(
rewardInfo[_rewardToken].token != IERC20(address(0)),
"Reward token not added"
);
RewardTokenInfo storage reward = rewardInfo[_rewardToken];
reward.token.safeTransferFrom(msg.sender, address(this), _amount);
reward.unallocatedRewards += _amount;
reward.totalRewardsDeposited += _amount;
distributeRewards();
emit RewardsDeposited(_rewardToken, _amount);
}
function setLockingEnabled(bool _enabled) external onlyAdmin {
lockingEnabled = _enabled;
}
function setBurningEnabled(bool _enabled) external onlyAdmin {
burningEnabled = _enabled;
}
function setStakingEnabled(bool _enabled) external onlyMoatManager {
stakingEnabled = _enabled;
}
function setEarlyExitEnabled(bool _enabled) external onlyAdmin {
earlyExitEnabled = _enabled;
}
function addAdmin(address _admin) external onlyAdmin {
require(_admin != address(0), "Zero address not allowed");
require(!admins[_admin], "Already admin");
admins[_admin] = true;
}
function removeAdmin(address _admin) external onlyAdmin {
require(_admin != owner(), "Cannot remove owner");
require(_admin != moatManager, "Cannot remove moat manager");
require(admins[_admin], "Not admin");
admins[_admin] = false;
}
function setUnstakeFee(uint256 _newFee) external onlyMoatManager {
require(_newFee <= MAX_FEE, "Fee too high");
unstakeFee = _newFee;
}
function setFeeCollector(address _newCollector) external onlyMoatManager {
require(_newCollector != address(0), "Invalid address");
feeCollector = _newCollector;
}
function togglePause(bool _state) external onlyAdmin {
paused = _state;
}
function enableEmergencyUnlock() external onlyAdmin {
emergencyUnlockEnabled = true;
paused = true;
}
function setLogoURL(string calldata newLogoURL) external onlyAdmin {
require(bytes(newLogoURL).length > 0, "URL cannot be empty");
_logoURL = newLogoURL;
}
function distributeRewards() internal {
if (totalPoints > 0) {
uint256 numRewardTokens = rewardTokenAddresses.length;
for (uint i = 0; i < numRewardTokens; i++) {
address rewardTokenAddress = rewardTokenAddresses[i];
RewardTokenInfo storage reward = rewardInfo[rewardTokenAddress];
if (reward.unallocatedRewards > 0) {
reward.accRewardPerPoint +=
(reward.unallocatedRewards * PRECISION_FACTOR) /
totalPoints;
reward.unallocatedRewards = 0;
}
}
}
lastRewardBlock = block.number;
}
function updatePool() internal {
if (block.number <= lastRewardBlock) {
return;
}
distributeRewards();
}
function stake(
uint256 _amount
) external whenStakingEnabled whenNotPaused nonReentrant {
require(_amount > 0, "Cannot stake 0");
require(_amount >= MIN_STAKE_AMOUNT, "Amount below minimum");
updatePool();
UserInfo storage user = userInfo[msg.sender];
_harvestAllRewards(msg.sender);
stakingToken.safeTransferFrom(msg.sender, address(this), _amount);
uint256 points = (_amount * POINTS_PER_TOKEN) / POINTS_SCALING_FACTOR;
user.stakedAmount += _amount;
user.stakingPoints += points;
totalPoints += points;
totalStaked += _amount;
_updateAllRewardDebts(msg.sender);
_addActiveUser(msg.sender);
emit Staked(msg.sender, _amount);
}
function lock(
uint256 _amount,
uint256 _duration
) external whenLockingEnabled whenNotPaused nonReentrant {
require(_amount > 0, "Cannot lock 0");
require(_amount >= MIN_STAKE_AMOUNT, "Amount below minimum");
require(_duration >= MIN_LOCK_DURATION, "Duration too short");
require(_duration <= MAX_LOCK_DURATION, "Duration too long");
require(
_amount <= stakingToken.balanceOf(msg.sender),
"Insufficient balance"
);
updatePool();
UserInfo storage user = userInfo[msg.sender];
_harvestAllRewards(msg.sender);
stakingToken.safeTransferFrom(msg.sender, address(this), _amount);
uint256 multiplier = calculateLockMultiplier(_duration);
uint256 points = (_amount * POINTS_PER_TOKEN * multiplier) /
(POINTS_SCALING_FACTOR * MULTIPLIER_PRECISION);
// Create new lock
Lock memory newLock = Lock({
amount: _amount,
end: block.timestamp + _duration,
points: points,
originalDuration: _duration,
lastUpdated: block.timestamp,
active: true
});
user.locks.push(newLock);
user.activeLockCount++;
totalPoints += points;
totalLocked += _amount;
_updateAllRewardDebts(msg.sender);
_addActiveUser(msg.sender);
emit Locked(msg.sender, _amount, _duration, user.locks.length - 1);
}
function burn(
uint256 _amount
) external whenBurningEnabled whenNotPaused nonReentrant {
require(_amount > 0, "Cannot burn 0");
require(_amount >= MIN_STAKE_AMOUNT, "Amount below minimum");
require(
_amount <= stakingToken.balanceOf(msg.sender),
"Insufficient balance"
);
updatePool();
UserInfo storage user = userInfo[msg.sender];
_harvestAllRewards(msg.sender);
stakingToken.safeTransferFrom(msg.sender, address(this), _amount);
uint256 points = (_amount * POINTS_PER_TOKEN * BURN_MULTIPLIER) /
POINTS_SCALING_FACTOR;
user.burnPoints += points;
user.totalUserBurn += _amount;
totalPoints += points;
totalBurned += _amount;
stakingToken.transfer(DEAD_WALLET, _amount);
_updateAllRewardDebts(msg.sender);
_addActiveUser(msg.sender);
emit Burned(msg.sender, _amount);
}
function unstake(uint256 _amount) external whenNotPaused nonReentrant {
UserInfo storage user = userInfo[msg.sender];
require(user.stakedAmount >= _amount, "Insufficient staked amount");
updatePool();
_harvestAllRewards(msg.sender);
uint256 remainingAmount = user.stakedAmount - _amount;
if (remainingAmount > 0) {
require(
remainingAmount >= MIN_STAKE_AMOUNT,
"Must unstake all or leave minimum amount"
);
}
uint256 feeAmount = (_amount * unstakeFee) / 10000;
uint256 amountAfterFee = _amount - feeAmount;
user.stakedAmount -= _amount;
totalStaked -= _amount;
uint256 points = (_amount * POINTS_PER_TOKEN) / POINTS_SCALING_FACTOR;
user.stakingPoints -= points;
totalPoints -= points;
_updateAllRewardDebts(msg.sender);
if (feeAmount > 0) {
stakingToken.safeTransfer(feeCollector, feeAmount);
}
stakingToken.safeTransfer(msg.sender, amountAfterFee);
_removeActiveUser(msg.sender);
emit Withdrawn(msg.sender, _amount);
}
function exitLock(uint256 _lockIndex) external whenNotPaused nonReentrant {
UserInfo storage user = userInfo[msg.sender];
require(_lockIndex < user.locks.length, "Invalid lock index");
require(user.locks[_lockIndex].active, "Lock not active");
require(user.locks[_lockIndex].amount > 0, "No locked tokens");
require(
block.timestamp >= user.locks[_lockIndex].end,
"Lock period not ended"
);
updatePool();
_harvestAllRewards(msg.sender);
Lock storage lockData = user.locks[_lockIndex];
uint256 lockAmount = lockData.amount;
uint256 feeAmount = (lockAmount * unstakeFee) / 10000;
uint256 amountAfterFee = lockAmount - feeAmount;
totalLocked -= lockAmount;
totalPoints -= lockData.points;
// Deactivate the lock
lockData.active = false;
lockData.amount = 0;
lockData.points = 0;
lockData.lastUpdated = block.timestamp;
user.activeLockCount--;
_updateAllRewardDebts(msg.sender);
if (feeAmount > 0) {
stakingToken.safeTransfer(feeCollector, feeAmount);
}
stakingToken.safeTransfer(msg.sender, amountAfterFee);
_removeActiveUser(msg.sender);
emit LockExited(msg.sender, amountAfterFee, _lockIndex);
}
function earlyExitLock(
uint256 _lockIndex
) external whenEarlyExitEnabled whenNotPaused nonReentrant {
UserInfo storage user = userInfo[msg.sender];
require(_lockIndex < user.locks.length, "Invalid lock index");
require(user.locks[_lockIndex].active, "Lock not active");
require(user.locks[_lockIndex].amount > 0, "No locked tokens");
require(
block.timestamp < user.locks[_lockIndex].end,
"Lock period has ended"
);
updatePool();
_harvestAllRewards(msg.sender);
(uint256 feeAmount, uint256 amountAfterFee) = calculateEarlyExitFee(
msg.sender,
_lockIndex
);
Lock storage lockData = user.locks[_lockIndex];
uint256 amountToReturn = lockData.amount;
totalPoints -= lockData.points;
totalLocked -= lockData.amount;
// Deactivate the lock
lockData.active = false;
lockData.amount = 0;
lockData.points = 0;
lockData.lastUpdated = block.timestamp;
user.activeLockCount--;
_updateAllRewardDebts(msg.sender);
if (feeAmount > 0) {
stakingToken.safeTransfer(feeCollector, feeAmount);
}
stakingToken.safeTransfer(msg.sender, amountAfterFee);
_removeActiveUser(msg.sender);
emit EarlyExit(msg.sender, amountToReturn, feeAmount, _lockIndex);
}
function claimAllRewards() external whenNotPaused nonReentrant {
_harvestAllRewards(msg.sender);
}
function _harvestAllRewards(address _user) internal {
uint256 numRewardTokens = rewardTokenAddresses.length;
if (numRewardTokens > 0) {
updatePool();
for (uint i = 0; i < numRewardTokens; i++) {
address rewardTokenAddress = rewardTokenAddresses[i];
uint256 pending = pendingRewards(_user, rewardTokenAddress);
if (pending > 0) {
_harvestSingleReward(_user, rewardTokenAddress, pending);
}
}
}
}
function _harvestSingleReward(
address _user,
address _rewardToken,
uint256 _pending
) internal {
UserInfo storage userData = userInfo[_user];
RewardTokenInfo storage reward = rewardInfo[_rewardToken];
uint256 currentPointsForDebt = getCurrentPoints(_user);
userData.rewardDebt[_rewardToken] =
(currentPointsForDebt * reward.accRewardPerPoint) /
PRECISION_FACTOR;
reward.totalRewardsClaimed += _pending;
reward.token.safeTransfer(_user, _pending);
emit RewardClaimed(_user, _rewardToken, _pending);
}
function _updateAllRewardDebts(address _user) internal {
UserInfo storage user = userInfo[_user];
uint256 totalUserPoints = getCurrentPoints(_user);
uint256 numRewardTokens = rewardTokenAddresses.length;
for (uint i = 0; i < numRewardTokens; i++) {
address rewardTokenAddress = rewardTokenAddresses[i];
user.rewardDebt[rewardTokenAddress] =
(totalUserPoints *
rewardInfo[rewardTokenAddress].accRewardPerPoint) /
PRECISION_FACTOR;
}
}
function pendingRewards(
address _user,
address _rewardToken
) public view returns (uint256) {
RewardTokenInfo storage reward = rewardInfo[_rewardToken];
UserInfo storage user = userInfo[_user];
uint256 currentPoints = getCurrentPoints(_user);
uint256 accumulatedReward = (currentPoints * reward.accRewardPerPoint) /
PRECISION_FACTOR;
uint256 userRewardDebt = user.rewardDebt[_rewardToken];
if (accumulatedReward <= userRewardDebt) {
return 0;
}
return accumulatedReward - userRewardDebt;
}
function getAllPendingRewards(
address _user
) external view returns (address[] memory, uint256[] memory) {
uint256 numRewardTokens = rewardTokenAddresses.length;
address[] memory tokens = new address[](numRewardTokens);
uint256[] memory amounts = new uint256[](numRewardTokens);
for (uint i = 0; i < numRewardTokens; i++) {
address tokenAddress = rewardTokenAddresses[i];
tokens[i] = tokenAddress;
amounts[i] = pendingRewards(_user, tokenAddress);
}
return (tokens, amounts);
}
function getCurrentPoints(address _user) public view returns (uint256) {
UserInfo storage user = userInfo[_user];
uint256 totalLockPoints = 0;
for (uint256 i = 0; i < user.locks.length; i++) {
if (user.locks[i].active && user.locks[i].amount > 0) {
totalLockPoints += user.locks[i].points;
}
}
return user.stakingPoints + totalLockPoints + user.burnPoints;
}
function calculateLockMultiplier(
uint256 _duration
) public pure returns (uint256) {
unchecked {
if (_duration >= MAX_LOCK_DURATION) {
return MAX_LOCK_MULTIPLIER * MULTIPLIER_PRECISION;
}
uint256 scaledDuration = _duration * 1e18;
uint256 scaledMaxDuration = MAX_LOCK_DURATION * 1e18;
uint256 multiplierIncrease = (sqrt(scaledDuration) *
(MAX_LOCK_MULTIPLIER - MIN_LOCK_MULTIPLIER) *
MULTIPLIER_PRECISION) / sqrt(scaledMaxDuration);
return
(MIN_LOCK_MULTIPLIER * MULTIPLIER_PRECISION) +
multiplierIncrease;
}
}
function sqrt(uint256 x) internal pure returns (uint256) {
if (x == 0) return 0;
uint256 z = (x + 1) / 2;
uint256 y = x;
while (z < y) {
y = z;
z = (x / z + z) / 2;
}
return y;
}
function emergencyWithdraw() external nonReentrant {
require(emergencyUnlockEnabled, "Emergency unlock not enabled");
UserInfo storage user = userInfo[msg.sender];
uint256 totalLockedAmount = 0;
for (uint256 i = 0; i < user.locks.length; i++) {
if (user.locks[i].active) {
totalLockedAmount += user.locks[i].amount;
}
}
uint256 totalAmount = user.stakedAmount + totalLockedAmount;
require(totalAmount > 0, "Nothing to withdraw");
require(
stakingToken.balanceOf(address(this)) >= totalAmount,
"Insufficient contract balance"
);
totalStaked -= user.stakedAmount;
totalLocked -= totalLockedAmount;
totalPoints -= (user.stakingPoints + user.burnPoints);
// Subtract points from all active locks
for (uint256 i = 0; i < user.locks.length; i++) {
if (user.locks[i].active) {
totalPoints -= user.locks[i].points;
}
}
delete userInfo[msg.sender];
stakingToken.safeTransfer(msg.sender, totalAmount);
_removeActiveUser(msg.sender);
}
function calculateEarlyExitFee(
address _user,
uint256 _lockIndex
) public view returns (uint256 fee, uint256 amountAfterFee) {
UserInfo storage user = userInfo[_user];
require(_lockIndex < user.locks.length, "Invalid lock index");
require(user.locks[_lockIndex].active, "Lock not active");
require(user.locks[_lockIndex].amount > 0, "No locked tokens");
require(
block.timestamp < user.locks[_lockIndex].end,
"Lock period ended"
);
Lock storage lockData = user.locks[_lockIndex];
uint256 remainingDuration = lockData.end - block.timestamp;
uint256 timeFeePercent = (remainingDuration * EARLY_EXIT_MAX_FEE) /
lockData.originalDuration;
uint256 feePercent = timeFeePercent > unstakeFee
? timeFeePercent
: unstakeFee;
fee = (lockData.amount * feePercent) / 10000;
amountAfterFee = lockData.amount - fee;
return (fee, amountAfterFee);
}
function _isUserActive(address _user) internal view returns (bool) {
UserInfo storage user = userInfo[_user];
return
user.stakedAmount > 0 ||
user.activeLockCount > 0 ||
user.burnPoints > 0;
}
function _addActiveUser(address _user) internal {
if (!isActiveUser[_user] && _isUserActive(_user)) {
activeUsers.push(_user);
isActiveUser[_user] = true;
activeUserCount++;
}
}
function _removeActiveUser(address _user) internal {
if (isActiveUser[_user] && !_isUserActive(_user)) {
uint256 length = activeUsers.length;
for (uint256 i = 0; i < length; i++) {
if (activeUsers[i] == _user) {
activeUsers[i] = activeUsers[length - 1];
activeUsers.pop();
break;
}
}
isActiveUser[_user] = false;
activeUserCount--;
}
}
// New view functions for multiple locks
function getUserLockCount(address _user) external view returns (uint256) {
return userInfo[_user].locks.length;
}
function getUserActiveLockCount(
address _user
) external view returns (uint256) {
return userInfo[_user].activeLockCount;
}
function getUserLock(
address _user,
uint256 _lockIndex
)
external
view
returns (
uint256 amount,
uint256 end,
uint256 points,
uint256 originalDuration,
uint256 lastUpdated,
bool active
)
{
require(
_lockIndex < userInfo[_user].locks.length,
"Invalid lock index"
);
Lock storage lockData = userInfo[_user].locks[_lockIndex];
return (
lockData.amount,
lockData.end,
lockData.points,
lockData.originalDuration,
lockData.lastUpdated,
lockData.active
);
}
function getUserAllLocks(
address _user
)
external
view
returns (
uint256[] memory amounts,
uint256[] memory ends,
uint256[] memory points,
uint256[] memory originalDurations,
uint256[] memory lastUpdated,
bool[] memory active
)
{
UserInfo storage user = userInfo[_user];
uint256 lockCount = user.locks.length;
amounts = new uint256[](lockCount);
ends = new uint256[](lockCount);
points = new uint256[](lockCount);
originalDurations = new uint256[](lockCount);
lastUpdated = new uint256[](lockCount);
active = new bool[](lockCount);
for (uint256 i = 0; i < lockCount; i++) {
Lock storage lockData = user.locks[i];
amounts[i] = lockData.amount;
ends[i] = lockData.end;
points[i] = lockData.points;
originalDurations[i] = lockData.originalDuration;
lastUpdated[i] = lockData.lastUpdated;
active[i] = lockData.active;
}
}
function getActiveUserCount() external view returns (uint256) {
return activeUserCount;
}
function getActiveUsers(
uint256 _startIndex,
uint256 _endIndex
) external view returns (address[] memory) {
require(_startIndex < activeUsers.length, "Start index out of range");
require(_endIndex <= activeUsers.length, "End index out of range");
require(_startIndex < _endIndex, "Invalid range");
uint256 length = _endIndex - _startIndex;
address[] memory users = new address[](length);
for (uint256 i = 0; i < length; i++) {
users[i] = activeUsers[_startIndex + i];
}
return users;
}
function getTotalAmounts()
external
view
returns (
uint256 _totalStaked,
uint256 _totalLocked,
uint256 _totalBurned,
uint256 _totalInContract
)
{
return (
totalStaked,
totalLocked,
totalBurned,
stakingToken.balanceOf(address(this))
);
}
function getLogoURL() external view returns (string memory) {
return _logoURL;
}
function getRewardTokens()
external
view
returns (
address[] memory addresses,
uint256[] memory totalDeposited,
uint256[] memory totalClaimed,
uint256[] memory unallocated
)
{
uint256 numTokens = rewardTokenAddresses.length;
addresses = new address[](numTokens);
totalDeposited = new uint256[](numTokens);
totalClaimed = new uint256[](numTokens);
unallocated = new uint256[](numTokens);
for (uint256 i = 0; i < numTokens; i++) {
address tokenAddress = rewardTokenAddresses[i];
RewardTokenInfo storage info = rewardInfo[tokenAddress];
addresses[i] = tokenAddress;
totalDeposited[i] = info.totalRewardsDeposited;
totalClaimed[i] = info.totalRewardsClaimed;
unallocated[i] = info.unallocatedRewards;
}
return (addresses, totalDeposited, totalClaimed, unallocated);
}
function migrateBurnUsers(
address[] calldata _users,
uint256[] calldata _burnAmounts
) external onlyAdmin {
require(_users.length == _burnAmounts.length, "Array mismatch");
updatePool();
for (uint i = 0; i < _users.length; i++) {
address _user = _users[i];
uint256 _burnAmountToAdd = _burnAmounts[i];
require(_user != address(0), "Cannot migrate zero address");
if (_burnAmountToAdd > 0) {
UserInfo storage user = userInfo[_user];
uint256 pointsToAdd = (_burnAmountToAdd *
POINTS_PER_TOKEN *
BURN_MULTIPLIER) / POINTS_SCALING_FACTOR;
user.totalUserBurn += _burnAmountToAdd;
user.burnPoints += pointsToAdd;
totalPoints += pointsToAdd;
totalBurned += _burnAmountToAdd;
_addActiveUser(_user);
_updateAllRewardDebts(_user);
emit BurnPointsMigrated(_user, _burnAmountToAdd, pointsToAdd);
}
}
}
function emergencyWithdrawAllRewards(
address _recipient
) external onlyAdmin nonReentrant {
require(emergencyUnlockEnabled, "Emergency unlock not enabled");
require(_recipient != address(0), "Invalid recipient");
uint256 numRewardTokens = rewardTokenAddresses.length;
require(numRewardTokens > 0, "No reward tokens");
for (uint256 i = 0; i < numRewardTokens; i++) {
address rewardTokenAddress = rewardTokenAddresses[i];
RewardTokenInfo storage reward = rewardInfo[rewardTokenAddress];
uint256 balance = reward.token.balanceOf(address(this));
if (balance > 0) {
reward.token.safeTransfer(_recipient, balance);
emit EmergencyRewardWithdrawal(
rewardTokenAddress,
balance,
_recipient
);
}
}
}
function emergencyWithdrawRewardToken(
address _rewardToken,
address _recipient
) external onlyAdmin nonReentrant {
require(emergencyUnlockEnabled, "Emergency unlock not enabled");
require(_recipient != address(0), "Invalid recipient");
require(
rewardInfo[_rewardToken].token != IERC20(address(0)),
"Reward token not added"
);
RewardTokenInfo storage reward = rewardInfo[_rewardToken];
uint256 balance = reward.token.balanceOf(address(this));
require(balance > 0, "No balance to withdraw");
reward.token.safeTransfer(_recipient, balance);
emit EmergencyRewardWithdrawal(_rewardToken, balance, _recipient);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_stakingToken",
"type": "address",
"internalType": "address"
},
{
"name": "_feeCollector",
"type": "address",
"internalType": "address"
},
{
"name": "_adminWallet",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "BurnPointsMigrated",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "addedBurnAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "addedBurnPoints",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Burned",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "EarlyExit",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "fee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lockIndex",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "EmergencyRewardWithdrawal",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "FeeCollectorUpdated",
"type": "event",
"inputs": [
{
"name": "newCollector",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "FeeUpdated",
"type": "event",
"inputs": [
{
"name": "newFee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "LockExited",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lockIndex",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Locked",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "duration",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "lockIndex",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"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": "RewardClaimed",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RewardTokenAdded",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RewardsDeposited",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "StakeIncreased",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "additionalAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "newTotalAmount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Staked",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "UserAction",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "actionType",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "points",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "timestamp",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "extraData",
"type": "bytes",
"indexed": false,
"internalType": "bytes"
}
],
"anonymous": false
},
{
"name": "Withdrawn",
"type": "event",
"inputs": [
{
"name": "user",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BURN_MULTIPLIER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "DEAD_WALLET",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "EARLY_EXIT_MAX_FEE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_FEE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_LOCK_DURATION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_LOCK_MULTIPLIER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MIN_LOCK_DURATION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MIN_LOCK_MULTIPLIER",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MIN_STAKE_AMOUNT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MULTIPLIER_PRECISION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "POINTS_PER_TOKEN",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "POINTS_SCALING_FACTOR",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "PRECISION_FACTOR",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "activeUserCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "activeUsers",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "addAdmin",
"type": "function",
"inputs": [
{
"name": "_admin",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "addRewardToken",
"type": "function",
"inputs": [
{
"name": "_rewardToken",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "admins",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "burn",
"type": "function",
"inputs": [
{
"name": "_amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "burningEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "calculateEarlyExitFee",
"type": "function",
"inputs": [
{
"name": "_user",
"type": "address",
"internalType": "address"
},
{
"name": "_lockIndex",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "fee",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amountAfterFee",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "calculateLockMultiplier",
"type": "function",
"inputs": [
{
"name": "_duration",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "pure"
},
{
"name": "claimAllRewards",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "depositRewards",
"type": "function",
"inputs": [
{
"name": "_rewardToken",
"type": "address",
"internalType": "address"
},
{
"name": "_amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "earlyExitEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "earlyExitLock",
"type": "function",
"inputs": [
{
"name": "_lockIndex",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "emergencyUnlockEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "emergencyWithdraw",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "emergencyWithdrawAllRewards",
"type": "function",
"inputs": [
{
"name": "_recipient",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "emergencyWithdrawRewardToken",
"type": "function",
"inputs": [
{
"name": "_rewardToken",
"type": "address",
"internalType": "address"
},
{
"name": "_recipient",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "enableEmergencyUnlock",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "exitLock",
"type": "function",
"inputs": [
{
"name": "_lockIndex",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "feeCollector",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "getActiveUserCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getActiveUsers",
"type": "function",
"inputs": [
{
"name": "_startIndex",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_endIndex",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address[]",
"internalType": "address[]"
}
],
"stateMutability": "view"
},
{
"name": "getAllPendingRewards",
"type": "function",
"inputs": [
{
"name": "_user",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "getCurrentPoints",
"type": "function",
"inputs": [
{
"name": "_user",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getLogoURL",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "getRewardTokens",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "addresses",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "totalDeposited",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "totalClaimed",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "unallocated",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "view"
},
{
"name": "getTotalAmounts",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "_totalStaked",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_totalLocked",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_totalBurned",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_totalInContract",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getUserActiveLockCount",
"type": "function",
"inputs": [
{
"name": "_user",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getUserAllLocks",
"type": "function",
"inputs": [
{
"name": "_user",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "amounts",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "ends",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "points",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "originalDurations",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "lastUpdated",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "active",
"type": "bool[]",
"internalType": "bool[]"
}
],
"stateMutability": "view"
},
{
"name": "getUserLock",
"type": "function",
"inputs": [
{
"name": "_user",
"type": "address",
"internalType": "address"
},
{
"name": "_lockIndex",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "end",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "points",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "originalDuration",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "lastUpdated",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "active",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "getUserLockCount",
"type": "function",
"inputs": [
{
"name": "_user",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "isActiveUser",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "lastRewardBlock",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lock",
"type": "function",
"inputs": [
{
"name": "_amount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_duration",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "lockingEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "migrateBurnUsers",
"type": "function",
"inputs": [
{
"name": "_users",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "_burnAmounts",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "moatManager",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "paused",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "pendingRewards",
"type": "function",
"inputs": [
{
"name": "_user",
"type": "address",
"internalType": "address"
},
{
"name": "_rewardToken",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "removeAdmin",
"type": "function",
"inputs": [
{
"name": "_admin",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rewardInfo",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "contract IERC20"
},
{
"name": "accRewardPerPoint",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "unallocatedRewards",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalRewardsDeposited",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalRewardsClaimed",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "rewardTokenAddresses",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "setBurningEnabled",
"type": "function",
"inputs": [
{
"name": "_enabled",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setEarlyExitEnabled",
"type": "function",
"inputs": [
{
"name": "_enabled",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setFeeCollector",
"type": "function",
"inputs": [
{
"name": "_newCollector",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setLockingEnabled",
"type": "function",
"inputs": [
{
"name": "_enabled",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setLogoURL",
"type": "function",
"inputs": [
{
"name": "newLogoURL",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setStakingEnabled",
"type": "function",
"inputs": [
{
"name": "_enabled",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setUnstakeFee",
"type": "function",
"inputs": [
{
"name": "_newFee",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "stake",
"type": "function",
"inputs": [
{
"name": "_amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "stakingEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "stakingToken",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "togglePause",
"type": "function",
"inputs": [
{
"name": "_state",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "tokenDecimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "totalBurned",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalLocked",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalPoints",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "totalStaked",
"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": "unstake",
"type": "function",
"inputs": [
{
"name": "_amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "unstakeFee",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "userInfo",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "stakedAmount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "totalUserBurn",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "stakingPoints",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "burnPoints",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "activeLockCount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
}
]0x60406080815260048036101561001457600080fd5b600090813560e01c806218a1161461355457806309bc605a146134ae5780630b5dce331461348a5780630b83a7271461344f5780630dba74d7146133e65780630f513164146133ca5780631338736f14612fb05780631785f53c14612ea15780631959a00214612e3c5780631c03e6cc14612c505780631cfff51b14612c295780632543408f14612b4b57806327ed718814612b105780632a6c313014612ab25780632aa11126146129275780632e17de78146126a857806335b338491461267d5780633b97e8561461263f5780633fa2fe7a14611bb75780634202d2141461260157806342966c6814612317578063429b62e5146122d95780634ae1815e146122b25780634d7547151461228b5780634f1bfc9e1461226c578063567142be1461224d578063568914121461222e57806357d159c6146121d05780635b2cee4b146121955780635c975abb1461216e5780635e06c6f014611f055780637026949a14611d2d5780637048027514611c33578063715018a614611bd6578063728e9ecc14611bb757806372f702f314611b73578063784ea51614611b4057806378b4330f14611b225780637a1b415814611b055780637b2d9b2c14611ad9578063803ae51814611a9757806380771ca214611a7b57806380ac822814611a4d578063817b1cd214611a2e578063818e8cfa1461183957806381eaae48146117db5780638d5d9581146115e65780638da5cb5b146115bd5780638ea97d261461159e578063937c91301461157757806397ad1cce1461143d5780639b7d02ad14611401578063a01c3483146113e4578063a42dce8014611359578063a694fc3a1461116e578063a9f8d1811461114f578063b0b9151714611133578063b309483a14610dcf578063bc063e1a14611116578063bce8567e146110c4578063c415b95c1461109b578063c4160f8a14611026578063c4a7761e14610f59578063c4f59f9b14610e5b578063ca9ad8d214610e3a578063cbecf6b514610dd4578063ccd34cd514610dcf578063d0a4af5014610da2578063d89135cd14610d83578063db2e21bc14610a7b578063e91c3b9e1461092b578063f2fde38b14610863578063f5b8488f1461083a578063f953d80a14610681578063f9fca4cf14610665578063fae7e9c9146105c65763ff8fe93c1461036e57600080fd5b346105c25760203660031901126105c2578035600f5460ff8160a81c16156105865760ff6103a09160c01c1615613864565b6103a861390d565b338352601160205283832060058101906103c482548410613e31565b6103de60ff60056103d58686613db8565b50015416613e72565b6103f46103eb8484613db8565b50541515613eb0565b60016104008484613db8565b50015442101561054b577fba6eb55a406f821a90a79fc206edb5b569eea34cce1f41bfb74b9982b021129e9394956104de84600661050494610440613d63565b61044933613efc565b61045e6104568433614350565b949098613db8565b5080549a8c600283016104748154600854613dd4565b6008556104848454600b54613dd4565b600b556005840160ff1981541690558184555542910155016104a68154613eef565b90556104b133613fff565b8461050e575b337f000000000000000000000000e8fb470e0685437d7739bd2aacba60b228800335613de1565b6104e73361452f565b519283923396846040919493926060820195825260208201520152565b0390a26001815580f35b600f546105469086906001600160a01b03167f000000000000000000000000e8fb470e0685437d7739bd2aacba60b228800335613de1565b6104b7565b855162461bcd60e51b81526020818601526015602482015274131bd8dac81c195c9a5bd9081a185cc8195b991959605a1b6044820152606490fd5b845162461bcd60e51b8152602081850152601660248201527511585c9b1e48195e1a5d081a5cc8191a5cd8589b195960521b6044820152606490fd5b5080fd5b50823461066157806003193601126106615761061f60c0936005836105e96135c3565b6001600160a01b03168084526011602052818420830154602435949190610611908610613e31565b815260116020522001613db8565b5080549260018201549260028301549060ff600560038601549486015495015416948151968752602087015285015260608401526080830152151560a0820152f35b8280fd5b8284346105c257816003193601126105c2576020905160028152f35b50829034610661576020806003193601126108365761069e6135c3565b6001546001600160a01b039290831633148015610822575b6106bf906137f4565b6106c761390d565b6106d560ff600d5416614304565b828216936106e4851515614673565b6002549586156107ee57875b8781106106ff57886001815580f35b8061070a87926136f5565b9054600391821b1c909216808b52918552828a205483516370a0823160e01b81523086820152929088168684602481845afa938c85156107e3578b9392918991966107a9575b50858a6107679761076c575b505050505050613c2d565b6106f0565b81610798917ffe8036b71c8b5af11d8c50cb29338049c40a64f2ab1e067c08cdd323c21cf98f95613de1565b8751908152a3878b8087818a61075c565b935090945082813d83116107dc575b6107c2818361382c565b810103126107d85761076793878b935195610750565b8b80fd5b503d6107b8565b8651903d90823e3d90fd5b91606492519162461bcd60e51b8352820152601060248201526f4e6f2072657761726420746f6b656e7360801b6044820152fd5b50338652601081528486205460ff166106b6565b8380fd5b8284346105c257816003193601126105c25760125490516001600160a01b039091168152602090f35b508290346106615760203660031901126106615761087f6135c3565b9061088861379c565b6001600160a01b039182169283156108d9575050600154826001600160601b0360a01b821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b906020608492519162461bcd60e51b8352820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152fd5b5091346105c25761093b36613665565b909360055480861015610a385782116109fc57818510156109c957508361096191613dd4565b61096a81614117565b925b81811061098c57825160208082528190610988908201876135f4565b0390f35b806109a261099d6109c493886138ea565b613742565b905460039190911b1c6001600160a01b03166109be8287614149565b52613c2d565b61096c565b606490602084519162461bcd60e51b8352820152600d60248201526c496e76616c69642072616e676560981b6044820152fd5b606490602084519162461bcd60e51b83528201526016602482015275456e6420696e646578206f7574206f662072616e676560501b6044820152fd5b835162461bcd60e51b8152602081840152601860248201527f537461727420696e646578206f7574206f662072616e676500000000000000006044820152606490fd5b50919034610d805780600319360112610d8057610a9661390d565b60ff90610aa682600d5416614304565b33815260209160118352838220829583600592838101958654905b818110610d3b575050805498610ad7818b6138ea565b908115610d02577f000000000000000000000000e8fb470e0685437d7739bd2aacba60b2288003359a60248a8d8d51928380926370a0823160e01b8252308c83015260018060a01b03165afa908115610cf8579084918791610cc3575b5010610c805790610b4a610b5592600a54613dd4565b600a55600b54613dd4565b600b55600299610b6e8b840154600380950154906138ea565b98610b7c60089a8b54613dd4565b8a55845b8954811015610bd35780808e8c8c8c610b9c610bad9784613db8565b50015416610bb2575b505050613c2d565b610b80565b610bc992610bbf91613db8565b5001548d54613dd4565b8c55808e8c610ba5565b508b90878c3388526011835287209787895560019688888b015588858b015588818b0155828a01948554948a875585610c29575b60068c018b90558a8a610c1b8b338c613de1565b610c243361452f565b815580f35b6006968688029688880403610c6d578b528a20948501945b85811015610c0757808b8892558b8b8201558b838201558b848201558b858201558b8682015501610c41565b634e487b7160e01b8c526011855260248cfd5b8a5162461bcd60e51b81528087018b9052601d60248201527f496e73756666696369656e7420636f6e74726163742062616c616e63650000006044820152606490fd5b8092508c8092503d8311610cf1575b610cdc818361382c565b81010312610ced5783905138610b34565b8580fd5b503d610cd2565b8c513d88823e3d90fd5b895162461bcd60e51b81528086018a905260136024820152724e6f7468696e6720746f20776974686472617760681b6044820152606490fd5b8686610d47838b613db8565b50015416610d5e575b610d5990613c2d565b610ac1565b99610d78610d5991610d708d8b613db8565b5054906138ea565b9a9050610d50565b80fd5b8284346105c257816003193601126105c257602090600c549051908152f35b8284346105c25760203660031901126105c257602090610dc8610dc36135c3565b61415d565b9051908152f35b613779565b5082346106615760203660031901126106615760a0926001600160a01b0390829082610dfe6135c3565b16815260036020522090815416926001820154926002830154916003840154930154938151958652602086015284015260608301526080820152f35b50919034610d80576020366003190112610d805750610dc86020923561420e565b509034610d805780600319360112610d8057600291825492610e7c84614117565b93610e8681614117565b91610e9082614117565b93610e9a83614117565b95805b848110610ef157610ec8896109888a610ee38e8c610ed68d835198899860808a5260808a01906135f4565b9088820360208a0152613631565b9186830390870152613631565b908382036060850152613631565b80848a828d610f2a610f05610f54976136f5565b9054600391821b1c6001600160a01b0316808a52602082905292892094909390614149565b52810154610f38848b614149565b5285810154610f47848c614149565b5201546109be828b614149565b610e9d565b50829034610661578260031936011261066157600a54600b54600c5484516370a0823160e01b815230948101949094529193906020846024817f000000000000000000000000e8fb470e0685437d7739bd2aacba60b2288003356001600160a01b03165afa93841561101c578694610fe5575b5060809550815194855260208501528301526060820152f35b9093506020813d8211611014575b816110006020938361382c565b81010312610ced5760809550519286610fcc565b3d9150610ff3565b82513d88823e3d90fd5b50829034610661576020366003190112610661573590811515809203610661576110659060018060a01b03600154163314908115611085575b506137f4565b600f805460ff60a81b191660a89290921b60ff60a81b1691909117905580f35b60ff91503385526010602052842054168461105f565b8284346105c257816003193601126105c257600f5490516001600160a01b039091168152602090f35b50346105c25760203660031901126105c257358015158091036105c2576110f660018060a01b03601254163314613bb4565b600f805460ff60a01b191660a09290921b60ff60a01b1691909117905580f35b8284346105c257816003193601126105c25760209051610bb88152f35b8284346105c257816003193601126105c2576020905160058152f35b8284346105c257816003193601126105c2576020906009549051908152f35b50823461066157602036600319011261066157813591600f5460ff8160a01c16156113205760ff6111a39160c01c1615613864565b6111ab61390d565b82156112ed576111dd7f000000000000000000000000000000000000000000000000000000e8d4a51000841015613d20565b6111e5613d63565b3384526011602052818420906111fa33613efc565b6112268430337f000000000000000000000000e8fb470e0685437d7739bd2aacba60b228800335613963565b8380046001036112da57506112859060026112617f000000000000000000000000000000000000000000000000000000e8d4a5100086613c4f565b9161126d8682546138ea565b81550161127b8282546138ea565b90556008546138ea565b60085561129482600a546138ea565b600a556112a033613fff565b6112a93361444d565b519081527f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d60203392a26001815580f35b634e487b7160e01b855260119052602484fd5b6020606492519162461bcd60e51b8352820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152fd5b506020606492519162461bcd60e51b8352820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b6044820152fd5b50829034610661576020366003190112610661576113756135c3565b6012546001600160a01b03919061138f9083163314613bb4565b169182156113af5750506001600160601b0360a01b600f541617600f5580f35b906020606492519162461bcd60e51b8352820152600f60248201526e496e76616c6964206164647265737360881b6044820152fd5b8284346105c257816003193601126105c2576020905161dead8152f35b8284346105c25760203660031901126105c25760209160059082906001600160a01b0361142c6135c3565b168152601185522001549051908152f35b5082346106615780600319360112610661576114576135c3565b6001546001600160a01b0393602435939291851633148015611562575b61147d906137f4565b61148f60ff600f5460c01c1615613864565b61149761390d565b831561152c5750916020916003857fb8b27d0db504fa5d914f1fd330347096e88d5ff94b6c612d32797e7c12a8f66f9516958688528185526114df81848a20541615156138a5565b8688528185526114f984848a209283541630903390613963565b600281016115088582546138ea565b9055016115168382546138ea565b9055611520613c6f565b51908152a26001815580f35b606490602084519162461bcd60e51b8352820152601060248201526f043616e6e6f74206465706f73697420360841b6044820152fd5b5033865260106020528286205460ff16611474565b8284346105c257816003193601126105c25760209060ff600f5460b01c1690519015158152f35b8284346105c257816003193601126105c257602090600e549051908152f35b8284346105c257816003193601126105c25760015490516001600160a01b039091168152602090f35b5091346105c25760203660031901126105c25782359061160e60ff600f5460c01c1615613864565b61161661390d565b338352601160205280832091600583019461163386548310613e31565b61164460ff60056103d5858a613db8565b6116516103eb8388613db8565b600161165d8388613db8565b50015442106117a05760066116a6837f7b2a192f4099743aac528d5bac424f1aa18365e0c6f67c2150144f90b6046406969798611698613d63565b6116a133613efc565b613db8565b50958654966127106116ba600e548a613c3c565b04936116d26116c9868b613dd4565b99600b54613dd4565b600b5589600283016116e78154600854613dd4565b6008556005840160ff1981541690558184555542910155016117098154613eef565b905561171433613fff565b80611763575b5061174684337f000000000000000000000000e8fb470e0685437d7739bd2aacba60b228800335613de1565b61174f3361452f565b815193845260208401523392a26001815580f35b600f5461179a91906001600160a01b03167f000000000000000000000000e8fb470e0685437d7739bd2aacba60b228800335613de1565b3861171a565b606490602084519162461bcd60e51b83528201526015602482015274131bd8dac81c195c9a5bd9081b9bdd08195b991959605a1b6044820152fd5b50829034610661576020366003190112610661573590811515809203610661576118199060018060a01b0360015416331490811561108557506137f4565b600f805460ff60b81b191660b89290921b60ff60b81b1691909117905580f35b5082346106615760208060031936011261083657823567ffffffffffffffff91828211610ced5736602383011215610ced5781850135928311610ced5760249136838583010111611a2a5760019460018060a01b0386541633148015611a16575b6118a3906137f4565b84156119df57506118b48654613bf3565b601f811161197e575b508691601f85116001146118fb575091839491849388956118ee575b5050501b916000199060031b1c191617905580f35b01013592508680806118d9565b92909184601f1981167f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b958a905b898383106119625750505010611946575b50505050811b01905580f35b60001960f88660031b161c19920101351690558480808061193a565b8786018701358955909701969384019388935090810190611929565b7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f860160051c8101918487106119d5575b601f0160051c019086905b8281106119ca5750506118bd565b8981550186906119bc565b90915081906119b1565b5162461bcd60e51b81528087018390526013818501527255524c2063616e6e6f7420626520656d70747960681b6044820152606490fd5b50338852601083528088205460ff1661189a565b8680fd5b8284346105c257816003193601126105c257602090600a549051908152f35b8284346105c257806003193601126105c257602090610dc8611a6d6135c3565b611a756135de565b9061408d565b8284346105c257816003193601126105c25760209051600a8152f35b50829034610661576020366003190112610661573591600554831015610d805750611ac3602092613742565b905491519160018060a01b039160031b1c168152f35b50829034610661576020366003190112610661573591600254831015610d805750611ac36020926136f5565b8284346105c257816003193601126105c2576020905161251c8152f35b8284346105c257816003193601126105c25760209051620151808152f35b505034610d805781600319360112610d805750611b67611b5e6135c3565b60243590614350565b82519182526020820152f35b8284346105c257816003193601126105c257517f000000000000000000000000e8fb470e0685437d7739bd2aacba60b2288003356001600160a01b03168152602090f35b8284346105c257816003193601126105c2576020906007549051908152f35b8234610d805780600319360112610d8057611bef61379c565b600180546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50829034610661576020908160031936011261083657611c516135c3565b6001546001600160a01b039190821633148015611d19575b611c72906137f4565b16908115611cd6578185526010835260ff8486205416611ca357508352601090528120805460ff1916600117905580f35b835162461bcd60e51b8152908101839052600d60248201526c20b63932b0b23c9030b236b4b760991b6044820152606490fd5b835162461bcd60e51b8152908101839052601860248201527f5a65726f2061646472657373206e6f7420616c6c6f77656400000000000000006044820152606490fd5b50338652601084528486205460ff16611c69565b50346105c2576020806003193601126106615790916001600160a01b03611d526135c3565b16815260118252600592838583200192835494611d6e86614117565b95611d7881614117565b97611d8282614117565b90611d8c83614117565b92611d9681614117565b94611da0826140ff565b97611dad8451998a61382c565b828952611db9836140ff565b8989019b90601f1901368d378a5b848110611e6b575050505050908185949392519a8b9a60c08c5260c08c01611dee91613631565b8b8103878d0152611dfe91613631565b908a8203908b0152611e0f91613631565b88810360608a0152611e2091613631565b8781036080890152611e3191613631565b9286840360a088015251928381520193925b828110611e5257505050500390f35b8351151585528695509381019392810192600101611e43565b808e9f969798999a9c9b809e9f8260ff888f938f948f95611eeb968f611e94611ef59c8e613db8565b5094611ea289875492614149565b52611eb288600187015492614149565b52611ec287600286015492614149565b52611ed286600385015492614149565b52611ee1858c84015492614149565b5201541692614149565b9015159052613c2d565b9d9c9b999a98979695949d611dc7565b5082903461066157816003193601126106615767ffffffffffffffff90803582811161216a57611f3890369083016136c4565b6024939193918235908111611a2a57611f5490369085016136c4565b909360018060a01b03916001938385541633148015612155575b611f77906137f4565b81810361212257611f86613d63565b895b818110611f93578a80f35b611f9e81838b614663565b358581169081810361211e57611fb583868c614663565b359082156120dc578d908d83158015611fdd575b505050505050611fd890613c2d565b611f88565b85845260119160209483865220918580048d148217156120c557600a91828702928784041417156120c557508f92936120b17ffad6174a7e4f80106b100c91688e6000371ba0f5c5958296abb598ae25d7573a9560038f9495612067611fd89c9b9a977f000000000000000000000000000000000000000000000000000000e8d4a5100090613c4f565b9581016120758882546138ea565b9055016120838582546138ea565b905560086120928582546138ea565b9055600c6120a18682546138ea565b90556120ac8161444d565b613fff565b8351928352820152a2908c8c818d81611fc9565b9150508f91508b925088634e487b7160e01b835252fd5b8c5162461bcd60e51b8152602081890152601b818c01527f43616e6e6f74206d696772617465207a65726f206164647265737300000000006044820152606490fd5b8c80fd5b885162461bcd60e51b8152602081850152600e818801526d082e4e4c2f240dad2e6dac2e8c6d60931b6044820152606490fd5b50338a526010602052888a205460ff16611f6e565b8480fd5b8284346105c257816003193601126105c25760209060ff600f5460c01c1690519015158152f35b8284346105c257816003193601126105c257602090517f000000000000000000000000000000000000000000000000000000e8d4a510008152f35b508290346106615760203660031901126106615735908115158092036106615761220e9060018060a01b0360015416331490811561108557506137f4565b600f805460ff60c01b191660c09290921b60ff60c01b1691909117905580f35b8284346105c257816003193601126105c257602090600b549051908152f35b8284346105c257816003193601126105c2576020906008549051908152f35b8284346105c257816003193601126105c257602090516303c267008152f35b8284346105c257816003193601126105c25760209060ff600f5460b81c1690519015158152f35b8284346105c257816003193601126105c25760209060ff600f5460a81c1690519015158152f35b8284346105c25760203660031901126105c25760209160ff9082906001600160a01b036123046135c3565b1681526010855220541690519015158152f35b5082346106615760208060031936011261083657823591600f5460ff8160b81c16156125c85760ff61234d9160c01c1615613864565b61235561390d565b8215612597576123877f000000000000000000000000000000000000000000000000000000e8d4a51000841015613d20565b80516370a0823160e01b815233858201527f000000000000000000000000e8fb470e0685437d7739bd2aacba60b2288003356001600160a01b038116959184816024818a5afa801561258d57889061255a575b6123e79150861115613d75565b6123ef613d63565b33875260118452612410858489209261240733613efc565b30903390613963565b84800460010361254757600a8502858104600a0361253457849261247e61dead9360016124606044957f000000000000000000000000000000000000000000000000000000e8d4a5100090613c4f565b91600381016124708482546138ea565b90550161127b8a82546138ea565b60085561248d87600c546138ea565b600c55888551988994859363a9059cbb60e01b85528401528860248401525af193841561252a577f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df793946124fd575b506124e633613fff565b6124ef3361444d565b519283523392a26001815580f35b61251c90833d8511612523575b612514818361382c565b8101906139be565b50856124dc565b503d61250a565b81513d87823e3d90fd5b634e487b7160e01b885260118352602488fd5b634e487b7160e01b875260118252602487fd5b508481813d8311612586575b612570818361382c565b81010312612582576123e790516123da565b8780fd5b503d612566565b84513d8a823e3d90fd5b5162461bcd60e51b81529283015250600d60248201526c043616e6e6f74206275726e203609c1b6044820152606490fd5b815162461bcd60e51b81528086018490526013602482015272109d5c9b9a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606490fd5b8284346105c25760203660031901126105c25760209160ff9082906001600160a01b0361262c6135c3565b1681526006855220541690519015158152f35b8284346105c257816003193601126105c2576020905160ff7f0000000000000000000000000000000000000000000000000000000000000012168152f35b8284346105c25760203660031901126105c25760209160069082906001600160a01b0361142c6135c3565b5091346105c25760203660031901126105c2578235906126d060ff600f5460c01c1615613864565b6126d861390d565b3383526011602052808320828154106128e4576126f3613d63565b6126fc33613efc565b8054906127098483613dd4565b80612864575b5061271061271f600e5486613c3c565b04906127358561272f8482613dd4565b94613dd4565b815561274385600a54613dd4565b600a558480046001148515171561285157906127a06127da939260026127897f000000000000000000000000000000000000000000000000000000e8d4a5100089613c4f565b9101612796828254613dd4565b9055600854613dd4565b6008556127ac33613fff565b80612814575b50337f000000000000000000000000e8fb470e0685437d7739bd2aacba60b228800335613de1565b6127e33361452f565b519081527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d560203392a26001815580f35b600f5461284b91906001600160a01b03167f000000000000000000000000e8fb470e0685437d7739bd2aacba60b228800335613de1565b856127b2565b634e487b7160e01b865260118752602486fd5b7f000000000000000000000000000000000000000000000000000000e8d4a5100011612890573861270f565b825162461bcd60e51b8152602081880152602860248201527f4d75737420756e7374616b6520616c6c206f72206c65617665206d696e696d756044820152671b48185b5bdd5b9d60c21b6064820152608490fd5b815162461bcd60e51b8152602081870152601a60248201527f496e73756666696369656e74207374616b656420616d6f756e740000000000006044820152606490fd5b508290346106615781600319360112610661576129426135c3565b9161294b6135de565b9160018060a01b0391826001541633148015612a9d575b61296b906137f4565b61297361390d565b61298160ff600d5416614304565b8280851695612991871515614673565b1693848752602093600385526129ad81848a20541615156138a5565b8588526003855282882054168251936370a0823160e01b855230818601528585602481855afa948515612a93578995612a60575b508415612a245750837ffe8036b71c8b5af11d8c50cb29338049c40a64f2ab1e067c08cdd323c21cf98f95949392612a1892613de1565b51908152a36001815580f35b835162461bcd60e51b815290810186905260166024820152754e6f2062616c616e636520746f20776974686472617760501b6044820152606490fd5b9094508581813d8311612a8c575b612a78818361382c565b81010312612a88575193896129e1565b8880fd5b503d612a6e565b84513d8b823e3d90fd5b5033865260106020528086205460ff16612962565b5082903461066157602036600319011261066157359081151580920361066157612af09060018060a01b0360015416331490811561108557506137f4565b600f805460ff60b01b191660b09290921b60ff60b01b1691909117905580f35b8284346105c257816003193601126105c257602090517f000000000000000000000000000000000000000000000000000000e8d4a510008152f35b50823461066157826003193601126106615780519183815490612b6d82613bf3565b80865292600192808416908115612bfe5750600114612ba2575b6109888686612b98828b038361382c565b519182918261367b565b815294507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828610612be657505050612b98826020610988958201019486612b87565b80546020878701810191909152909501948101612bc8565b9050610988975086935060209250612b9894915060ff191682840152151560051b8201019486612b87565b8284346105c257816003193601126105c25760209060ff600f5460a01c1690519015158152f35b5091346105c25760208060031936011261066157612c6c6135c3565b60015490916001600160a01b0391821633148015612e28575b612c8e906137f4565b818316938415612dee5784865260038252828187205416612dab5780519260a0840184811067ffffffffffffffff821117612d9857908291899493528685528285018881528286019189835260608701938a8552600360808901968c88528b8d52528a209651166001600160601b0360a01b87541617865551600186015551600285015551600384015551910155600254600160401b811015612d855790612d3f826001612d5e94016002556136f5565b90919082549060031b9160018060a01b03809116831b921b1916179055565b7ff3e4c2c64e71e6ba2eaab9a599bced62f9eb91d2cda610bf41aa8c80ff2cf8268280a280f35b634e487b7160e01b845260418552602484fd5b634e487b7160e01b885260418952602488fd5b5162461bcd60e51b815280870191909152601b60248201527f52657761726420746f6b656e20616c72656164792065786973747300000000006044820152606490fd5b5162461bcd60e51b815280870191909152601460248201527324b73b30b634b2103932bbb0b932103a37b5b2b760611b6044820152606490fd5b50338552601081528385205460ff16612c85565b8284346105c25760203660031901126105c25760a09181906001600160a01b03612e646135c3565b1681526011602052209081549160018101549160028201549060066003840154930154938151958652602086015284015260608301526080820152f35b50829034610661576020908160031936011261083657612ebf6135c3565b6001546001600160a01b03908116929181903385148015612f9c575b612ee4906137f4565b16928314612f6357601254168214612f20575090816010928552828252612f1060ff85872054166137f4565b8452528120805460ff1916905580f35b835162461bcd60e51b8152908101839052601a60248201527f43616e6e6f742072656d6f7665206d6f6174206d616e616765720000000000006044820152606490fd5b845162461bcd60e51b8152808301859052601360248201527221b0b73737ba103932b6b7bb329037bbb732b960691b6044820152606490fd5b50338852601086528688205460ff16612edb565b50346105c257612fbf36613665565b600f9291925460ff8160b01c16156133915760ff612fe19160c01c1615613864565b612fe961390d565b821561335e5761301b7f000000000000000000000000000000000000000000000000000000e8d4a51000841015613d20565b620151808110613326576303c2670081116132ef5784516370a0823160e01b815233838201526024906020907f000000000000000000000000e8fb470e0685437d7739bd2aacba60b22880033590828185816001600160a01b0386165afa80156132e55788906132b6575b6130939150871115613d75565b61309b613d63565b338752601182526130b3868989209261240733613efc565b6130bc8461420e565b8680046001036132a4576130d09087613c3c565b670de0b6b3a76400007f000000000000000000000000000000000000000000000000000000e8d4a5100081810292918115918404141715613292579061311591613c4f565b9061312085426138ea565b9289519060c0820182811067ffffffffffffffff821117613280578b5288825281019384528981019083825260608101878152608082019042825260a08301936001855260058601978854600160401b81101561326e5780600161318792018b558a613db8565b95909561325d57926131d4989795926006979592600595518555516001850155516002840155516003830155518b820155019051151560ff801983541691161790550161127b8154613c2d565b6008556131e385600b546138ea565b600b556131ef33613fff565b6131f83361444d565b5460001981019390841161324c5750506105047f44cebfefa4561bee5b61d675ccfd8dc9969fff9cc15e7a4eccccd62af94f9c11939495519283923396846040919493926060820195825260208201520152565b634e487b7160e01b86526011905284fd5b634e487b7160e01b8f528e8d528a8ffd5b634e487b7160e01b8f5260418d528a8ffd5b634e487b7160e01b8b5260418952868bfd5b634e487b7160e01b8952601187528489fd5b634e487b7160e01b8852601186528388fd5b508281813d83116132de575b6132cc818361382c565b81010312612582576130939051613086565b503d6132c2565b89513d8a823e3d90fd5b845162461bcd60e51b815260208184015260116024820152704475726174696f6e20746f6f206c6f6e6760781b6044820152606490fd5b845162461bcd60e51b81526020818401526012602482015271111d5c985d1a5bdb881d1bdbc81cda1bdc9d60721b6044820152606490fd5b845162461bcd60e51b8152602081840152600d60248201526c043616e6e6f74206c6f636b203609c1b6044820152606490fd5b855162461bcd60e51b81526020818501526013602482015272131bd8dada5b99c81a5cc8191a5cd8589b1959606a1b6044820152606490fd5b8284346105c257816003193601126105c2576020905160018152f35b8284346105c257816003193601126105c2576134169060018060a01b0360015416331490811561343957506137f4565b600d805460ff19166001179055600f805460ff60c01b1916600160c01b17905580f35b60ff91503384526010602052832054168361105f565b8234610d805780600319360112610d805761347260ff600f5460c01c1615613864565b61347a61390d565b61348333613efc565b6001815580f35b8284346105c257816003193601126105c25760209060ff600d541690519015158152f35b8284346105c25760203660031901126105c2576134c96135c3565b916002546134d681614117565b936134e082614117565b925b828110613511575050506109889061350383519484869586528501906135f4565b908382036020850152613631565b8061354561352161354f936136f5565b905460039190911b1c6001600160a01b03168061353e848b614149565b528461408d565b6109be8287614149565b6134e2565b508290346106615760203660031901126106615780359161358060018060a01b03601254163314613bb4565b610bb88311613591575050600e5580f35b906020606492519162461bcd60e51b8352820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152fd5b600435906001600160a01b03821682036135d957565b600080fd5b602435906001600160a01b03821682036135d957565b90815180825260208080930193019160005b828110613614575050505090565b83516001600160a01b031685529381019392810192600101613606565b90815180825260208080930193019160005b828110613651575050505090565b835185529381019392810192600101613643565b60409060031901126135d9576004359060243590565b6020808252825181830181905290939260005b8281106136b057505060409293506000838284010152601f8019910116010190565b81810186015184820160400152850161368e565b9181601f840112156135d95782359167ffffffffffffffff83116135d9576020808501948460051b0101116135d957565b60025481101561372c5760026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0190600090565b634e487b7160e01b600052603260045260246000fd5b60055481101561372c5760056000527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00190600090565b346135d95760003660031901126135d9576020604051670de0b6b3a76400008152f35b6001546001600160a01b031633036137b057565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b156137fb57565b60405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b6044820152606490fd5b90601f8019910116810190811067ffffffffffffffff82111761384e57604052565b634e487b7160e01b600052604160045260246000fd5b1561386b57565b60405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b6044820152606490fd5b156138ac57565b60405162461bcd60e51b815260206004820152601660248201527514995dd85c99081d1bdad95b881b9bdd08185919195960521b6044820152606490fd5b919082018092116138f757565b634e487b7160e01b600052601160045260246000fd5b60026000541461391e576002600055565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a081019181831067ffffffffffffffff84111761384e576139bc926040526139d6565b565b908160209103126135d9575180151581036135d95790565b6040805167ffffffffffffffff94936001600160a01b0390931692909182018581118382101761384e576040526020928383527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564848401526000808386829551910182855af1903d15613b12573d968711613afe57613a7694959660405190613a6888601f19601f840116018361382c565b81528093873d92013e613b1f565b805190828215928315613ae6575b50505015613a8f5750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b613af693508201810191016139be565b388281613a84565b634e487b7160e01b83526041600452602483fd5b9150613a76939495506060915b91929015613b815750815115613b33575090565b3b15613b3c5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015613b945750805190602001fd5b60405162461bcd60e51b8152908190613bb0906004830161367b565b0390fd5b15613bbb57565b60405162461bcd60e51b815260206004820152601060248201526f2737ba1036b7b0ba1036b0b730b3b2b960811b6044820152606490fd5b90600182811c92168015613c23575b6020831014613c0d57565b634e487b7160e01b600052602260045260246000fd5b91607f1691613c02565b60001981146138f75760010190565b818102929181159184041417156138f757565b8115613c59570490565b634e487b7160e01b600052601260045260246000fd5b60088054613c7f575b5043600955565b600280549060005b828110613c9657505050613c78565b613c9f816136f5565b90549060039160018060a01b0391831b1c1660005260205260406000209082820180549081158015613cde575b505050613cd99150613c2d565b613c87565b670de0b6b3a76400008084029384041417156138f757613cd993613d156001613d0b6000958b5490613c4f565b92019182546138ea565b905555388080613ccc565b15613d2757565b60405162461bcd60e51b8152602060048201526014602482015273416d6f756e742062656c6f77206d696e696d756d60601b6044820152606490fd5b6009544311156139bc576139bc613c6f565b15613d7c57565b60405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606490fd5b805482101561372c576000526006602060002091020190600090565b919082039182116138f757565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152608081019167ffffffffffffffff83118284101761384e576139bc926040526139d6565b15613e3857565b60405162461bcd60e51b8152602060048201526012602482015271092dcecc2d8d2c840d8dec6d640d2dcc8caf60731b6044820152606490fd5b15613e7957565b60405162461bcd60e51b815260206004820152600f60248201526e4c6f636b206e6f742061637469766560881b6044820152606490fd5b15613eb757565b60405162461bcd60e51b815260206004820152601060248201526f4e6f206c6f636b656420746f6b656e7360801b6044820152606490fd5b80156138f7576000190190565b6002549081613f09575050565b613f11613d63565b60005b828110613f2057505050565b80613f2d613f5c926136f5565b9054600391821b1c6001600160a01b039081169190613f4c838761408d565b9081613f61575b50505050613c2d565b613f14565b7f0aa4d283470c904c551d18bb894d37e17674920f3261a7f854be501e25f421b7918188169384600052613ff1828a6020956011875260409485600020908b60005288528560002090670de0b6b3a7640000613fca613fbf8661415d565b600185015490613c3c565b048c60005260048092018a5287600020558101613fe88582546138ea565b90555416613de1565b51908152a338808080613f53565b60018060a01b036000918181168352602092601184526040916140248383209161415d565b94600254956004849301925b878110614041575050505050505050565b808761404f614088936136f5565b919054600392831b1c16908188528552670de0b6b3a764000061407860018a8a20015486613c3c565b0490875285855287872055613c2d565b614030565b600460018060a01b0380931691670de0b6b3a76400006140d76000958587526003602052604087209084168752601160205260016140ce604089209561415d565b91015490613c3c565b0492845201602052604082205490818111156140fa576140f79250613dd4565b90565b505090565b67ffffffffffffffff811161384e5760051b60200190565b90614121826140ff565b61412e604051918261382c565b828152809261413f601f19916140ff565b0190602036910137565b805182101561372c5760209160051b010190565b6001600160a01b03166000908152601160205260408120600580820180549194939190825b8281106141ab575050506140f79293506141a260039160028401546138ea565b910154906138ea565b60ff876141b88385613db8565b50015416806141fa575b6141d5575b6141d090613c2d565b614182565b926141f26141d09160026141e98786613db8565b500154906138ea565b9390506141c7565b506142058183613db8565b505415156141c2565b6303c267008110156142ad57614236670de0b6b3a76400006729a2241af62c000092026142ba565b02906a342c03f89d4e213c0000006a1a1601fc4ea7109e0000005b81811061427057506142639192613c4f565b671bc16d674ec800000190565b90508080156142985780614290916a342c03f89d4e213c000000046138ea565b60011c614251565b60246000634e487b7160e01b81526012600452fd5b50674563918244f4000090565b80156142fe5760018082018083116138f757811c90825b8383106142de5750505090565b909192506142f5836142f08184613c4f565b6138ea565b821c91906142d1565b50600090565b1561430b57565b60405162461bcd60e51b815260206004820152601c60248201527f456d657267656e637920756e6c6f636b206e6f7420656e61626c6564000000006044820152606490fd5b60018060a01b0316600052601160205260056040600020019061437582548210613e31565b61438660ff60056103d58486613db8565b6143936103eb8284613db8565b600161439f8284613db8565b500154421015614414576143b291613db8565b50906143c2426001840154613dd4565b61251c908181029181830414901517156138f7576127106144046143ee6140f793600387015490613c4f565b600e548082111561440c5750945b549485613c3c565b048093613dd4565b9050946143fc565b60405162461bcd60e51b8152602060048201526011602482015270131bd8dac81c195c9a5bd908195b991959607a1b6044820152606490fd5b6001600160a01b03811660008181526006602052604081205490929060ff1615806144da575b61447c57505050565b600554600160401b8110156144c6576040939291612d3f8260016144a39401600555613742565b8152600660205220600160ff198254161790556144c1600754613c2d565b600755565b634e487b7160e01b84526041600452602484fd5b506144e4816144e9565b614473565b6001600160a01b0316600090815260116020526040902080541580159190614521575b8115614516575090565b600391500154151590565b60068101541515915061450c565b6001600160a01b03808216600081815260066020526040812054929493909260ff169081614652575b50614564575b50509050565b600593845494835b8681106145a2575b5050506040929350815260066020522060ff198154169055614597600754613eef565b60075580388061455e565b80846145ae8593613742565b959054600396871b1c16146145d1576145c991929350613c2d565b91909161456c565b6000199780890190811161463e5790612d3f836145f06145fd94613742565b905490881b1c1691613742565b815496871561462a5760409697019261461584613742565b81939154921b1b191690555583923880614574565b634e487b7160e01b86526031600452602486fd5b634e487b7160e01b87526011600452602487fd5b61465c91506144e9565b1538614558565b919081101561372c5760051b0190565b1561467a57565b60405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081c9958da5c1a595b9d607a1b6044820152606490fdfea26469706673582212201ea36bc7dbd22c8632e2a4f7633af1ba4d426f36958299d4d98578042a8834fd64736f6c63430008140033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| THROBBIN | 42,073,438.686742 | $0.000494 | $20,786.36 |
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x866fc2…0c318e | 2 hrs agoMon, 17 Aug 2026 21:22:43 UTC | 0x7b2a19…6406 | [0] 0x000000000000…b9c11611 data: 0x000000000000000000…00000001 |
| 0x774fb1…dda917 | 2 hrs agoMon, 17 Aug 2026 21:20:52 UTC | 0x7b2a19…6406 | [0] 0x000000000000…b9c11611 data: 0x000000000000000000…00000000 |
| 0x7947f4…ab1ead | 2 days agoSat, 15 Aug 2026 09:26:54 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…e2840000 |
| 0x02299e…c0ce37 | 2 days agoSat, 15 Aug 2026 09:26:35 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…cad00000 |
| 0x75696b…cf2165 | 2 days agoSat, 15 Aug 2026 09:26:06 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…e5f80000 |
| 0x874f35…23046f | 2 days agoSat, 15 Aug 2026 09:25:49 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…cbf00000 |
| 0xe6a569…939b2b | 2 days agoSat, 15 Aug 2026 09:25:20 UTC | 0x7084f5…05d5 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…b2400000 |
| 0xfaee1c…880044 | 3 days agoFri, 14 Aug 2026 20:36:51 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…95c40000 |
| 0x39789d…7be56c | 3 days agoFri, 14 Aug 2026 20:36:38 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…ec580000 |
| 0x395f9f…400b9c | 3 days agoFri, 14 Aug 2026 20:36:28 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…3b700000 |
| 0xeebc2a…2bb499 | 3 days agoFri, 14 Aug 2026 20:36:13 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…b5700000 |
| 0xde3e50…258e2a | 3 days agoFri, 14 Aug 2026 20:35:51 UTC | 0x9e71bc…5f3d | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…b2400000 |
| 0x9485a2…30a4cd | 3 days agoFri, 14 Aug 2026 20:01:53 UTC | 0x7084f5…05d5 | [0] 0x000000000000…dd4561ad data: 0x000000000000000000…5bdbdc00 |
| 0x4d2208…cf72b1 | 3 days agoFri, 14 Aug 2026 10:11:14 UTC | 0x9e71bc…5f3d | [0] 0x000000000000…ae5b3f92 data: 0x000000000000000000…b176b000 |
| 0x1d5e69…4de71d | 4 days agoThu, 13 Aug 2026 22:36:34 UTC | 0x9e71bc…5f3d | [0] 0x000000000000…ce23ceb0 data: 0x000000000000000000…d1d74580 |
| 0xbb74ee…e706ab | 4 days agoThu, 13 Aug 2026 07:27:25 UTC | 0x9e71bc…5f3d | [0] 0x000000000000…9a77a926 data: 0x000000000000000000…0056e800 |
| 0x216769…7b1a20 | 4 days agoThu, 13 Aug 2026 06:05:23 UTC | 0x9e71bc…5f3d | [0] 0x000000000000…56b15aa2 data: 0x000000000000000000…7c40212f |
| 0xbce891…0a76e8 | 4 days agoThu, 13 Aug 2026 01:52:12 UTC | 0x696de4…8df7 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…e0080000 |
| 0xe2d459…a75e82 | 4 days agoThu, 13 Aug 2026 01:51:54 UTC | 0x7084f5…05d5 | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…b2400000 |
| 0x2a5325…b274b0 | 4 days agoThu, 13 Aug 2026 01:23:38 UTC | 0x9e71bc…5f3d | [0] 0x000000000000…fd0dc259 data: 0x000000000000000000…b2400000 |
| 0xd7b40b…9f243e | 4 days agoThu, 13 Aug 2026 01:08:31 UTC | 0x7084f5…05d5 | [0] 0x000000000000…02d57553 data: 0x000000000000000000…875c0000 |
| 0xb03b3e…fbdad4 | 4 days agoThu, 13 Aug 2026 00:27:47 UTC | 0x7084f5…05d5 | [0] 0x000000000000…8e10d276 data: 0x000000000000000000…32240000 |
| 0xdc599c…49a668 | 5 days agoWed, 12 Aug 2026 16:23:05 UTC | 0x9e71bc…5f3d | [0] 0x000000000000…ae5b3f92 data: 0x000000000000000000…ce2f5a00 |
| 0x6411f6…7fe3bd | 5 days agoWed, 12 Aug 2026 09:09:56 UTC | 0x9e71bc…5f3d | [0] 0x000000000000…02d57553 data: 0x000000000000000000…0eb80000 |
| 0x35130d…9bbbae | 6 days agoTue, 11 Aug 2026 09:44:30 UTC | 0x44cebf…9c11 | [0] 0x000000000000…b9c11611 data: 0x000000000000000000…00000001 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x866fc2c6…0c318e | Transfer | 39,156,469 | 2 hrs agoMon, 17 Aug 2026 21:22:43 UTC | 0x56b6…15e9 | OUT | 0xd348…1611 | $NaN137,380.110280 THROBBIN | ||
| 0x866fc2c6…0c318e | Transfer | 39,156,469 | 2 hrs agoMon, 17 Aug 2026 21:22:43 UTC | 0x56b6…15e9 | OUT | 0x7fa5…3588 | $0.34690.352312 THROBBIN | ||
| 0x774fb1df…dda917 | Transfer | 39,155,362 | 2 hrs agoMon, 17 Aug 2026 21:20:52 UTC | 0x56b6…15e9 | OUT | 0xd348…1611 | $NaN2,985,000.000000 THROBBIN | ||
| 0x774fb1df…dda917 | Transfer | 39,155,362 | 2 hrs agoMon, 17 Aug 2026 21:20:52 UTC | 0x56b6…15e9 | OUT | 0x7fa5…3588 | $NaN15,000 THROBBIN | ||
| 0x7947f469…ab1ead | Transfer | 37,006,053 | 2 days agoSat, 15 Aug 2026 09:26:54 UTC | 0x56b6…15e9 | OUT | 0x0000…dead | $0.009 THROBBIN | ||
| 0x7947f469…ab1ead | Transfer | 37,006,053 | 2 days agoSat, 15 Aug 2026 09:26:54 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $0.009 THROBBIN | ||
| 0x02299ed5…c0ce37 | Transfer | 37,005,862 | 2 days agoSat, 15 Aug 2026 09:26:35 UTC | 0x56b6…15e9 | OUT | 0x0000…dead | $0.48980 THROBBIN | ||
| 0x02299ed5…c0ce37 | Transfer | 37,005,862 | 2 days agoSat, 15 Aug 2026 09:26:35 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $0.48980 THROBBIN | ||
| 0x75696b74…cf2165 | Transfer | 37,005,579 | 2 days agoSat, 15 Aug 2026 09:26:06 UTC | 0x56b6…15e9 | OUT | 0x0000…dead | $NaN2,222 THROBBIN | ||
| 0x75696b74…cf2165 | Transfer | 37,005,579 | 2 days agoSat, 15 Aug 2026 09:26:06 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $NaN2,222 THROBBIN | ||
| 0x874f3542…23046f | Transfer | 37,005,405 | 2 days agoSat, 15 Aug 2026 09:25:49 UTC | 0x56b6…15e9 | OUT | 0x0000…dead | $NaN4,444 THROBBIN | ||
| 0x874f3542…23046f | Transfer | 37,005,405 | 2 days agoSat, 15 Aug 2026 09:25:49 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $NaN4,444 THROBBIN | ||
| 0xe6a5698b…939b2b | Transfer | 37,005,122 | 2 days agoSat, 15 Aug 2026 09:25:20 UTC | 0x56b6…15e9 | OUT | 0xf7b7…c259 | $NaN9,950.000000 THROBBIN | ||
| 0xe6a5698b…939b2b | Transfer | 37,005,122 | 2 days agoSat, 15 Aug 2026 09:25:20 UTC | 0x56b6…15e9 | OUT | 0x7fa5…3588 | $0.0250 THROBBIN | ||
| 0xfaee1cdf…880044 | Transfer | 36,545,215 | 3 days agoFri, 14 Aug 2026 20:36:51 UTC | 0x56b6…15e9 | OUT | 0x0000…dead | $0.17345 THROBBIN | ||
| 0xfaee1cdf…880044 | Transfer | 36,545,215 | 3 days agoFri, 14 Aug 2026 20:36:51 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $0.17345 THROBBIN | ||
| 0x39789d28…7be56c | Transfer | 36,545,085 | 3 days agoFri, 14 Aug 2026 20:36:38 UTC | 0x56b6…15e9 | OUT | 0x0000…dead | $0.006 THROBBIN | ||
| 0x39789d28…7be56c | Transfer | 36,545,085 | 3 days agoFri, 14 Aug 2026 20:36:38 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $0.006 THROBBIN | ||
| 0x395f9f73…400b9c | Transfer | 36,544,987 | 3 days agoFri, 14 Aug 2026 20:36:28 UTC | 0x56b6…15e9 | OUT | 0x0000…dead | $0.0360 THROBBIN | ||
| 0x395f9f73…400b9c | Transfer | 36,544,987 | 3 days agoFri, 14 Aug 2026 20:36:28 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $0.0360 THROBBIN | ||
| 0xeebc2a0d…2bb499 | Transfer | 36,544,836 | 3 days agoFri, 14 Aug 2026 20:36:13 UTC | 0x56b6…15e9 | OUT | 0x0000…dead | $0.35700 THROBBIN | ||
| 0xeebc2a0d…2bb499 | Transfer | 36,544,836 | 3 days agoFri, 14 Aug 2026 20:36:13 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $0.35700 THROBBIN | ||
| 0xde3e503b…258e2a | Transfer | 36,544,617 | 3 days agoFri, 14 Aug 2026 20:35:51 UTC | 0xf7b7…c259 | IN | 0x56b6…15e9 | $NaN10,000 THROBBIN | ||
| 0x9485a219…30a4cd | Transfer | 36,524,296 | 3 days agoFri, 14 Aug 2026 20:01:53 UTC | 0x56b6…15e9 | OUT | 0xa31b…61ad | $NaN803,441.201878 THROBBIN | ||
| 0x9485a219…30a4cd | Transfer | 36,524,296 | 3 days agoFri, 14 Aug 2026 20:01:53 UTC | 0x56b6…15e9 | OUT | 0x7fa5…3588 | $NaN4,037.392974 THROBBIN |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 21,069,385 | 21 days agoMon, 27 Jul 2026 21:54:02 UTC | 0x90c6d5…f020cf | CREATE | deployContract | 0x5cff…9560 | IN | 0x56b6…15e9 | 0 ETH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x866fc2…0c318e | exitLock | 39,156,469 | 2 hrs agoMon, 17 Aug 2026 21:22:43 UTC | 0xd348…1611 | IN | MultiLockMoat | $0.000 ETH | 0.00000340 | |
| 0x774fb1…dda917 | exitLock | 39,155,362 | 2 hrs agoMon, 17 Aug 2026 21:20:52 UTC | 0xd348…1611 | IN | MultiLockMoat | $0.000 ETH | 0.00000216 | |
| 0x7947f4…ab1ead | burn | 37,006,053 | 2 days agoSat, 15 Aug 2026 09:26:54 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000318 | |
| 0x02299e…c0ce37 | burn | 37,005,862 | 2 days agoSat, 15 Aug 2026 09:26:35 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000318 | |
| 0x75696b…cf2165 | burn | 37,005,579 | 2 days agoSat, 15 Aug 2026 09:26:06 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000319 | |
| 0x874f35…23046f | burn | 37,005,405 | 2 days agoSat, 15 Aug 2026 09:25:49 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000318 | |
| 0xe6a569…939b2b | unstake | 37,005,122 | 2 days agoSat, 15 Aug 2026 09:25:20 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000303 | |
| 0xfaee1c…880044 | burn | 36,545,215 | 3 days agoFri, 14 Aug 2026 20:36:51 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000374 | |
| 0x39789d…7be56c | burn | 36,545,085 | 3 days agoFri, 14 Aug 2026 20:36:38 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000360 | |
| 0x395f9f…400b9c | burn | 36,544,987 | 3 days agoFri, 14 Aug 2026 20:36:28 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000373 | |
| 0xeebc2a…2bb499 | burn | 36,544,836 | 3 days agoFri, 14 Aug 2026 20:36:13 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000372 | |
| 0xde3e50…258e2a | stake | 36,544,617 | 3 days agoFri, 14 Aug 2026 20:35:51 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000481 | |
| 0x9485a2…30a4cd | unstake | 36,524,296 | 3 days agoFri, 14 Aug 2026 20:01:53 UTC | 0xa31b…61ad | IN | MultiLockMoat | $0.000 ETH | 0.00000361 | |
| 0x4d2208…cf72b1 | stake | 36,170,619 | 3 days agoFri, 14 Aug 2026 10:11:14 UTC | 0xc14a…3f92 | IN | MultiLockMoat | $0.000 ETH | 0.00000344 | |
| 0x1d5e69…4de71d | stake | 35,754,570 | 4 days agoThu, 13 Aug 2026 22:36:34 UTC | 0x3617…ceb0 | IN | MultiLockMoat | $0.000 ETH | 0.00000357 | |
| 0xbb74ee…e706ab | stake | 35,210,560 | 4 days agoThu, 13 Aug 2026 07:27:25 UTC | 0x77ca…a926 | IN | MultiLockMoat | $0.000 ETH | 0.00000409 | |
| 0x216769…7b1a20 | stake | 35,161,521 | 4 days agoThu, 13 Aug 2026 06:05:23 UTC | 0xa56b…5aa2 | IN | MultiLockMoat | $0.000 ETH | 0.00000835 | |
| 0xbce891…0a76e8 | burn | 35,010,034 | 4 days agoThu, 13 Aug 2026 01:52:12 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000531 | |
| 0xe2d459…a75e82 | unstake | 35,009,859 | 4 days agoThu, 13 Aug 2026 01:51:54 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000490 | |
| 0x2a5325…b274b0 | stake | 34,992,921 | 4 days agoThu, 13 Aug 2026 01:23:38 UTC | 0xf7b7…c259 | IN | MultiLockMoat | $0.000 ETH | 0.00000660 | |
| 0xd7b40b…9f243e | unstake | 34,983,874 | 4 days agoThu, 13 Aug 2026 01:08:31 UTC | 0x8c09…7553 | IN | MultiLockMoat | $0.000 ETH | 0.00000501 | |
| 0xb03b3e…fbdad4 | unstake | 34,959,475 | 4 days agoThu, 13 Aug 2026 00:27:47 UTC | 0x7317…d276 | IN | MultiLockMoat | $0.000 ETH | 0.00000799 | |
| 0xdc599c…49a668 | stake | 34,669,062 | 5 days agoWed, 12 Aug 2026 16:23:05 UTC | 0xc14a…3f92 | IN | MultiLockMoat | $0.000 ETH | 0.00000847 | |
| 0x6411f6…7fe3bd | stake | 34,408,619 | 5 days agoWed, 12 Aug 2026 09:09:56 UTC | 0x8c09…7553 | IN | MultiLockMoat | $0.000 ETH | 0.00000779 | |
| 0x35130d…9bbbae | lock | 33,563,313 | 6 days agoTue, 11 Aug 2026 09:44:30 UTC | 0xd348…1611 | IN | MultiLockMoat | $0.000 ETH | 0.00000647 |