// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.19;
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import {IVotingEscrow} from "./interfaces/IVotingEscrow.sol";
import {IRewardsDistributor} from "./interfaces/IRewardsDistributor.sol";
/// @notice Splits one permanent NORMAL veNFT into exact rebate veNFTs and distributes them in batches.
/// @dev The protocol Safe owns this helper. A separately configured keeper may operate campaigns but
/// cannot change roles, redirect failed transfers, use unsafe transfers, pause, or rescue assets.
contract VeNFTRebateDistributor is IERC721Receiver, Ownable, Pausable, ReentrancyGuard {
using SafeERC20 for IERC20;
uint256 public constant MAX_BATCH_SIZE = 50;
IVotingEscrow public immutable ve;
IRewardsDistributor public immutable rewardsDistributor;
address public keeper;
uint256 public depositedTokenId;
uint256 public remainingBalance;
uint256 public failedTransferCount;
mapping(uint256 => address) public failedRecipient;
bool private acceptingDeposit;
uint256 private expectedTokenId;
address private expectedFrom;
error BatchTooLarge();
error EmptyBatch();
error ExistingDeposit();
error FailedTransfersOutstanding();
error InvalidEscrowType();
error InvalidParams();
error GlobalSplitPermissionEnabled();
error LockNotPermanent();
error MissingDeposit();
error NoFailedTransfer();
error NotOperator();
error PendingRebaseRewards();
error SplitPermissionMissing();
error TokenAlreadyVoted();
error TokenNotHeld();
error TrackedToken();
error UnauthorizedNFTTransfer();
error WrongSourceOwner();
error ZeroAddress();
error ZeroAmount();
event KeeperUpdated(address indexed previousKeeper, address indexed newKeeper);
event VeNFTDeposited(
address indexed operator,
address indexed sourceOwner,
uint256 indexed tokenId,
uint256 amount
);
event RebateDistributed(
address indexed recipient,
uint256 indexed tokenId,
uint256 amount,
uint256 remainderTokenId
);
event RebateDistributionFailed(
address indexed recipient,
uint256 indexed tokenId,
uint256 amount,
uint256 remainderTokenId,
bytes32 reasonHash
);
event FailedTransferRecovered(
address indexed recipient,
uint256 indexed tokenId,
address indexed operator,
bool unsafeTransfer
);
event VeNFTWithdrawn(address indexed recipient, uint256 indexed tokenId, uint256 amount);
event UntrackedVeNFTRescued(address indexed recipient, uint256 indexed tokenId);
event ERC20Rescued(address indexed token, address indexed recipient, uint256 amount);
modifier onlyOperator() {
if (msg.sender != keeper && msg.sender != owner()) revert NotOperator();
_;
}
constructor(address _ve, address _owner, address _keeper) {
if (_ve == address(0) || _owner == address(0) || _keeper == address(0)) revert ZeroAddress();
ve = IVotingEscrow(_ve);
address distributor = IVotingEscrow(_ve).distributor();
if (distributor == address(0)) revert ZeroAddress();
rewardsDistributor = IRewardsDistributor(distributor);
keeper = _keeper;
_transferOwnership(_owner);
emit KeeperUpdated(address(0), _keeper);
}
/// @notice Changes the operational keeper. Only the protocol Safe/owner may call this.
function setKeeper(address _keeper) external onlyOwner {
if (_keeper == address(0)) revert ZeroAddress();
address previousKeeper = keeper;
keeper = _keeper;
emit KeeperUpdated(previousKeeper, _keeper);
}
function pause() external onlyOwner {
_pause();
}
function unpause() external onlyOwner {
_unpause();
}
/// @notice Pulls an approved permanent NORMAL veNFT into the helper.
/// @dev The source ID must have no active vote and no claimable rebase. Claim all other
/// token-ID-specific fees and incentives offchain before depositing.
function depositVeNFT(uint256 tokenId) external onlyOperator whenNotPaused nonReentrant {
if (depositedTokenId != 0) revert ExistingDeposit();
address sourceOwner = ve.ownerOf(tokenId);
uint256 amount = _validateSource(tokenId, sourceOwner);
acceptingDeposit = true;
expectedTokenId = tokenId;
expectedFrom = sourceOwner;
ve.safeTransferFrom(sourceOwner, address(this), tokenId);
acceptingDeposit = false;
expectedTokenId = 0;
expectedFrom = address(0);
if (ve.ownerOf(tokenId) != address(this)) revert TokenNotHeld();
depositedTokenId = tokenId;
remainingBalance = amount;
emit VeNFTDeposited(msg.sender, sourceOwner, tokenId, amount);
}
/// @notice Splits exact rebate amounts from the current remainder and transfers each child veNFT.
/// @dev Failed safe transfers do not revert successful splits or other recipients in the batch.
/// Each failure remains held by this helper and must be recovered before withdrawing the remainder.
function distributeTokens(
address[] calldata recipients,
uint256[] calldata amounts
) external onlyOperator whenNotPaused nonReentrant returns (uint256[] memory tokenIds) {
uint256 length = recipients.length;
if (length == 0) revert EmptyBatch();
if (length != amounts.length) revert InvalidParams();
if (length > MAX_BATCH_SIZE) revert BatchTooLarge();
uint256 sourceTokenId = depositedTokenId;
if (sourceTokenId == 0) revert MissingDeposit();
_validateHeldRemainder(sourceTokenId);
uint256 total;
for (uint256 i; i < length; ++i) {
if (recipients[i] == address(0)) revert ZeroAddress();
if (amounts[i] == 0) revert ZeroAmount();
total += amounts[i];
}
// VotingEscrow.split requires every split amount to be strictly below the current remainder.
if (total >= remainingBalance) revert InvalidParams();
tokenIds = new uint256[](length);
for (uint256 i; i < length; ++i) {
uint256 amount = amounts[i];
uint256 remainderBefore = depositedTokenId;
(uint256 remainderTokenId, uint256 childTokenId) = ve.split(remainderBefore, amount);
remainingBalance -= amount;
depositedTokenId = remainderTokenId;
tokenIds[i] = childTokenId;
_verifySplitResult(remainderTokenId, childTokenId, amount);
try ve.safeTransferFrom(address(this), recipients[i], childTokenId) {
emit RebateDistributed(recipients[i], childTokenId, amount, remainderTokenId);
} catch (bytes memory reason) {
failedRecipient[childTokenId] = recipients[i];
++failedTransferCount;
emit RebateDistributionFailed(recipients[i], childTokenId, amount, remainderTokenId, keccak256(reason));
}
}
}
/// @notice Retries the safe transfer to the originally intended recipient.
function retryFailedTransfer(uint256 tokenId) external onlyOperator whenNotPaused nonReentrant {
address recipient = failedRecipient[tokenId];
if (recipient == address(0)) revert NoFailedTransfer();
ve.safeTransferFrom(address(this), recipient, tokenId);
_clearFailedTransfer(tokenId);
emit FailedTransferRecovered(recipient, tokenId, msg.sender, false);
}
/// @notice Safely redirects a failed child NFT. Only the Safe/owner can change the recipient.
function redirectFailedTransfer(uint256 tokenId, address recipient) external onlyOwner whenNotPaused nonReentrant {
if (failedRecipient[tokenId] == address(0)) revert NoFailedTransfer();
if (recipient == address(0)) revert ZeroAddress();
ve.safeTransferFrom(address(this), recipient, tokenId);
_clearFailedTransfer(tokenId);
emit FailedTransferRecovered(recipient, tokenId, msg.sender, false);
}
/// @notice Uses raw ERC-721 transferFrom for a failed child that cannot accept safe transfers.
/// @dev This can permanently strand the NFT in a non-receiver contract and is restricted to the Safe.
function forceFailedTransfer(uint256 tokenId) external onlyOwner whenNotPaused nonReentrant {
address recipient = failedRecipient[tokenId];
if (recipient == address(0)) revert NoFailedTransfer();
ve.transferFrom(address(this), recipient, tokenId);
_clearFailedTransfer(tokenId);
emit FailedTransferRecovered(recipient, tokenId, msg.sender, true);
}
/// @notice Transfers the final unsplit remainder and closes the active campaign.
function withdrawVeNFT(address recipient) external onlyOperator whenNotPaused nonReentrant {
if (recipient == address(0)) revert ZeroAddress();
if (failedTransferCount != 0) revert FailedTransfersOutstanding();
uint256 tokenId = depositedTokenId;
if (tokenId == 0) revert MissingDeposit();
_validateHeldRemainder(tokenId);
uint256 amount = remainingBalance;
depositedTokenId = 0;
remainingBalance = 0;
ve.safeTransferFrom(address(this), recipient, tokenId);
emit VeNFTWithdrawn(recipient, tokenId, amount);
}
/// @notice Rescues an untracked veNFT sent with raw transferFrom. Requires the helper to be paused.
function rescueUntrackedVeNFT(uint256 tokenId, address recipient) external onlyOwner whenPaused nonReentrant {
if (recipient == address(0)) revert ZeroAddress();
if (tokenId == depositedTokenId || failedRecipient[tokenId] != address(0)) revert TrackedToken();
if (ve.ownerOf(tokenId) != address(this)) revert TokenNotHeld();
ve.safeTransferFrom(address(this), recipient, tokenId);
emit UntrackedVeNFTRescued(recipient, tokenId);
}
/// @notice Rescues unrelated ERC-20 tokens. Requires the helper to be paused.
function rescueERC20(address token, address recipient, uint256 amount) external onlyOwner whenPaused nonReentrant {
if (token == address(0) || recipient == address(0)) revert ZeroAddress();
IERC20(token).safeTransfer(recipient, amount);
emit ERC20Rescued(token, recipient, amount);
}
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata
) external view override returns (bytes4) {
if (
msg.sender != address(ve) ||
!acceptingDeposit ||
operator != address(this) ||
tokenId != expectedTokenId ||
from != expectedFrom
) revert UnauthorizedNFTTransfer();
return IERC721Receiver.onERC721Received.selector;
}
function _validateSource(uint256 tokenId, address sourceOwner) internal view returns (uint256 amount) {
if (sourceOwner == address(0)) revert WrongSourceOwner();
if (ve.escrowType(tokenId) != IVotingEscrow.EscrowType.NORMAL) revert InvalidEscrowType();
IVotingEscrow.LockedBalance memory lock = ve.locked(tokenId);
if (!lock.isPermanent) revert LockNotPermanent();
if (lock.amount <= 0) revert ZeroAmount();
if (ve.voted(tokenId)) revert TokenAlreadyVoted();
if (rewardsDistributor.claimable(tokenId) != 0) revert PendingRebaseRewards();
if (ve.canSplit(address(0))) revert GlobalSplitPermissionEnabled();
if (!ve.canSplit(address(this))) revert SplitPermissionMissing();
amount = uint256(uint128(lock.amount));
}
function _validateHeldRemainder(uint256 tokenId) internal view {
if (ve.ownerOf(tokenId) != address(this)) revert TokenNotHeld();
_validateSource(tokenId, address(this));
}
function _verifySplitResult(uint256 remainderTokenId, uint256 childTokenId, uint256 childAmount) internal view {
if (ve.ownerOf(remainderTokenId) != address(this) || ve.ownerOf(childTokenId) != address(this)) {
revert TokenNotHeld();
}
IVotingEscrow.LockedBalance memory remainder = ve.locked(remainderTokenId);
IVotingEscrow.LockedBalance memory child = ve.locked(childTokenId);
if (
!remainder.isPermanent ||
!child.isPermanent ||
remainder.amount <= 0 ||
child.amount <= 0 ||
uint256(uint128(remainder.amount)) != remainingBalance ||
uint256(uint128(child.amount)) != childAmount ||
ve.escrowType(remainderTokenId) != IVotingEscrow.EscrowType.NORMAL ||
ve.escrowType(childTokenId) != IVotingEscrow.EscrowType.NORMAL
) revert InvalidParams();
}
function _clearFailedTransfer(uint256 tokenId) internal {
delete failedRecipient[tokenId];
--failedTransferCount;
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_ve",
"type": "address",
"internalType": "address"
},
{
"name": "_owner",
"type": "address",
"internalType": "address"
},
{
"name": "_keeper",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "BatchTooLarge",
"type": "error",
"inputs": []
},
{
"name": "EmptyBatch",
"type": "error",
"inputs": []
},
{
"name": "ExistingDeposit",
"type": "error",
"inputs": []
},
{
"name": "FailedTransfersOutstanding",
"type": "error",
"inputs": []
},
{
"name": "GlobalSplitPermissionEnabled",
"type": "error",
"inputs": []
},
{
"name": "InvalidEscrowType",
"type": "error",
"inputs": []
},
{
"name": "InvalidParams",
"type": "error",
"inputs": []
},
{
"name": "LockNotPermanent",
"type": "error",
"inputs": []
},
{
"name": "MissingDeposit",
"type": "error",
"inputs": []
},
{
"name": "NoFailedTransfer",
"type": "error",
"inputs": []
},
{
"name": "NotOperator",
"type": "error",
"inputs": []
},
{
"name": "PendingRebaseRewards",
"type": "error",
"inputs": []
},
{
"name": "SplitPermissionMissing",
"type": "error",
"inputs": []
},
{
"name": "TokenAlreadyVoted",
"type": "error",
"inputs": []
},
{
"name": "TokenNotHeld",
"type": "error",
"inputs": []
},
{
"name": "TrackedToken",
"type": "error",
"inputs": []
},
{
"name": "UnauthorizedNFTTransfer",
"type": "error",
"inputs": []
},
{
"name": "WrongSourceOwner",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "ZeroAmount",
"type": "error",
"inputs": []
},
{
"name": "ERC20Rescued",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FailedTransferRecovered",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "unsafeTransfer",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "KeeperUpdated",
"type": "event",
"inputs": [
{
"name": "previousKeeper",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newKeeper",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"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": "Paused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RebateDistributed",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "remainderTokenId",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RebateDistributionFailed",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "remainderTokenId",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "reasonHash",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
}
],
"anonymous": false
},
{
"name": "Unpaused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "UntrackedVeNFTRescued",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "VeNFTDeposited",
"type": "event",
"inputs": [
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "sourceOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "VeNFTWithdrawn",
"type": "event",
"inputs": [
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MAX_BATCH_SIZE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "depositVeNFT",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "depositedTokenId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "distributeTokens",
"type": "function",
"inputs": [
{
"name": "recipients",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "amounts",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [
{
"name": "tokenIds",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"stateMutability": "nonpayable"
},
{
"name": "failedRecipient",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "failedTransferCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "forceFailedTransfer",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "keeper",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "onERC721Received",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [
{
"name": "",
"type": "bytes4",
"internalType": "bytes4"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "paused",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "redirectFailedTransfer",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "remainingBalance",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rescueERC20",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rescueUntrackedVeNFT",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "retryFailedTransfer",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "rewardsDistributor",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IRewardsDistributor"
}
],
"stateMutability": "view"
},
{
"name": "setKeeper",
"type": "function",
"inputs": [
{
"name": "_keeper",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "unpause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "ve",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IVotingEscrow"
}
],
"stateMutability": "view"
},
{
"name": "withdrawVeNFT",
"type": "function",
"inputs": [
{
"name": "recipient",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60c06040523480156200001157600080fd5b5060405162002c7838038062002c78833981016040819052620000349162000228565b6200003f33620001bb565b6000805460ff60a01b19169055600180556001600160a01b03831615806200006e57506001600160a01b038216155b806200008157506001600160a01b038116155b15620000a05760405163d92e233d60e01b815260040160405180910390fd5b826001600160a01b03166080816001600160a01b0316815250506000836001600160a01b031663bfe109286040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000121919062000272565b90506001600160a01b0381166200014b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381811660a052600280546001600160a01b0319169184169190911790556200017b83620001bb565b6040516001600160a01b038316906000907f53d3703fe259def57584466f32d1b94c30278008c683c21b04501c4966f13a69908290a35050505062000297565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200022357600080fd5b919050565b6000806000606084860312156200023e57600080fd5b62000249846200020b565b925062000259602085016200020b565b915062000269604085016200020b565b90509250925092565b6000602082840312156200028557600080fd5b62000290826200020b565b9392505050565b60805160a05161290c6200036c6000396000818161023001526120200152600081816101eb015281816103810152818161050a015281816106620152818161099c01528181610a5701528181610d5b01528181610e820152818161107c015281816111250152818161131f015281816113e601528181611490015281816116ba01528181611858015281816118f4015281816119a201528181611a3901528181611b2701528181611bca01528181611dea01528181611ea401528181611f79015281816120c7015261216d015261290c6000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80635fd25217116100c3578063aced16611161007c578063aced166114610317578063b2118a8d1461032a578063cfdbf2541461033d578063da25de3c14610345578063e9ddf3a31461034e578063f2fde38b1461036157600080fd5b80635fd25217146102bd578063715018a6146102d0578063748747e6146102d85780638456cb59146102eb5780638da5cb5b146102f3578063a721f1b01461030457600080fd5b80633f2a5540116101155780633f2a55401461022b5780633f4ba83a146102525780634989f6be1461025a5780634bd09c2a1461026d5780635bca5b1f1461028d5780635c975abb146102a057600080fd5b8063118644151461015d578063150b7a02146101795780631680d036146101a55780631f850716146101e657806322e812271461020d5780632e2c1a5a14610222575b600080fd5b61016660055481565b6040519081526020015b60405180910390f35b61018c61018736600461241b565b610374565b6040516001600160e01b03199091168152602001610170565b6101ce6101b33660046124ba565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610170565b6101ce7f000000000000000000000000000000000000000000000000000000000000000081565b61022061021b3660046124d3565b61041a565b005b61016660035481565b6101ce7f000000000000000000000000000000000000000000000000000000000000000081565b6102206105c5565b6102206102683660046124f7565b6105d7565b61028061027b366004612573565b610726565b60405161017091906125df565b61022061029b3660046124ba565b610cba565b600054600160a01b900460ff166040519015158152602001610170565b6102206102cb3660046124ba565b610e1d565b610220610f36565b6102206102e63660046124d3565b610f48565b610220610fc9565b6000546001600160a01b03166101ce565b6102206103123660046124f7565b610fd9565b6002546101ce906001600160a01b031681565b610220610338366004612623565b6111cf565b610166603281565b61016660045481565b61022061035c3660046124ba565b611291565b61022061036f3660046124d3565b611579565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415806103b1575060075460ff16155b806103c557506001600160a01b0386163014155b806103d257506008548414155b806103eb57506009546001600160a01b03868116911614155b156104085760405162f769b160e11b815260040160405180910390fd5b50630a85bd0160e11b95945050505050565b6002546001600160a01b0316331480159061044057506000546001600160a01b03163314155b1561045e57604051631f0853c160e21b815260040160405180910390fd5b6104666115f4565b61046e611641565b6001600160a01b0381166104955760405163d92e233d60e01b815260040160405180910390fd5b600554156104b657604051633404b7e760e11b815260040160405180910390fd5b60035460008190036104db57604051632873107160e11b815260040160405180910390fd5b6104e48161169a565b60048054600060038190558255604051632142170760e11b815290916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916342842e0e916105419130918891889101612664565b600060405180830381600087803b15801561055b57600080fd5b505af115801561056f573d6000803e3d6000fd5b5050505081836001600160a01b03167f7fcab8b06605d6bcf1f233a9ebf09c5525aada7c7b40f4fdd1145c20e59ee244836040516105af91815260200190565b60405180910390a350506105c260018055565b50565b6105cd611756565b6105d56117b0565b565b6105df611756565b6105e76115f4565b6105ef611641565b6000828152600660205260409020546001600160a01b0316610624576040516315c7ee3760e31b815260040160405180910390fd5b6001600160a01b03811661064b5760405163d92e233d60e01b815260040160405180910390fd5b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061069b90309085908790600401612664565b600060405180830381600087803b1580156106b557600080fd5b505af11580156106c9573d6000803e3d6000fd5b505050506106d682611805565b60405160008152339083906001600160a01b038416907f6ae32d80f783d480abd8751d9db1395b4a4e3a299d0e0827d7ad2f6fd938cc8f9060200160405180910390a461072260018055565b5050565b6002546060906001600160a01b0316331480159061074f57506000546001600160a01b03163314155b1561076d57604051631f0853c160e21b815260040160405180910390fd5b6107756115f4565b61077d611641565b8360008190036107a05760405163c2e5347d60e01b815260040160405180910390fd5b8083146107c057604051635435b28960e11b815260040160405180910390fd5b60328111156107e2576040516305beb17160e11b815260040160405180910390fd5b600354600081900361080757604051632873107160e11b815260040160405180910390fd5b6108108161169a565b6000805b838110156108db57600089898381811061083057610830612688565b905060200201602081019061084591906124d3565b6001600160a01b03160361086c5760405163d92e233d60e01b815260040160405180910390fd5b86868281811061087e5761087e612688565b905060200201356000036108a557604051631f2a200560e01b815260040160405180910390fd5b8686828181106108b7576108b7612688565b90506020020135826108c991906126b4565b91506108d4816126cd565b9050610814565b5060045481106108fe57604051635435b28960e11b815260040160405180910390fd5b8267ffffffffffffffff811115610917576109176126e6565b604051908082528060200260200182016040528015610940578160200160208202803683370190505b50935060005b83811015610ca557600087878381811061096257610962612688565b6003546040516312c66fb360e21b815260048101829052602090920293909301356024820181905293506000915081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634b19becc9060440160408051808303816000875af11580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0891906126fc565b915091508360046000828254610a1e9190612720565b90915550506003829055885181908a9087908110610a3e57610a3e612688565b602002602001018181525050610a55828286611838565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166342842e0e308f8f89818110610a9757610a97612688565b9050602002016020810190610aac91906124d3565b846040518463ffffffff1660e01b8152600401610acb93929190612664565b600060405180830381600087803b158015610ae557600080fd5b505af1925050508015610af6575060015b610c1c573d808015610b24576040519150601f19603f3d011682016040523d82523d6000602084013e610b29565b606091505b508d8d87818110610b3c57610b3c612688565b9050602002016020810190610b5191906124d3565b600083815260066020526040812080546001600160a01b0319166001600160a01b03939093169290921790915560058054909190610b8e906126cd565b90915550818e8e88818110610ba557610ba5612688565b9050602002016020810190610bba91906124d3565b6001600160a01b03167f4c9ef53b727d4d7c7fc88910773b5d276fe82d8605ffdd994808326e5881fa5c87868580519060200120604051610c0e939291909283526020830191909152604082015260600190565b60405180910390a350610c90565b808d8d87818110610c2f57610c2f612688565b9050602002016020810190610c4491906124d3565b6001600160a01b03167fc03a47e2901c63149a7d25390620ef8d865a17eaf843c2e8d594e3d52d915b478685604051610c87929190918252602082015260400190565b60405180910390a35b5050505080610c9e906126cd565b9050610946565b50505050610cb260018055565b949350505050565b6002546001600160a01b03163314801590610ce057506000546001600160a01b03163314155b15610cfe57604051631f0853c160e21b815260040160405180910390fd5b610d066115f4565b610d0e611641565b6000818152600660205260409020546001600160a01b031680610d44576040516315c7ee3760e31b815260040160405180910390fd5b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90610d9490309085908790600401612664565b600060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b50505050610dcf82611805565b60405160008152339083906001600160a01b038416907f6ae32d80f783d480abd8751d9db1395b4a4e3a299d0e0827d7ad2f6fd938cc8f906020015b60405180910390a4506105c260018055565b610e25611756565b610e2d6115f4565b610e35611641565b6000818152600660205260409020546001600160a01b031680610e6b576040516315c7ee3760e31b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610ebb90309085908790600401612664565b600060405180830381600087803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b50505050610ef682611805565b60405160018152339083906001600160a01b038416907f6ae32d80f783d480abd8751d9db1395b4a4e3a299d0e0827d7ad2f6fd938cc8f90602001610e0b565b610f3e611756565b6105d56000611c76565b610f50611756565b6001600160a01b038116610f775760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f53d3703fe259def57584466f32d1b94c30278008c683c21b04501c4966f13a6990600090a35050565b610fd1611756565b6105d5611cc6565b610fe1611756565b610fe9611d09565b610ff1611641565b6001600160a01b0381166110185760405163d92e233d60e01b815260040160405180910390fd5b60035482148061103e57506000828152600660205260409020546001600160a01b031615155b1561105c576040516393e088c560e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190612733565b6001600160a01b03161461110e57604051636bcd243760e11b815260040160405180910390fd5b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061115e90309085908790600401612664565b600060405180830381600087803b15801561117857600080fd5b505af115801561118c573d6000803e3d6000fd5b50506040518492506001600160a01b03841691507f43d5f08b0ffa72d880788183feb40a1abcb3f7081ade887e976d5d7f853f8b5490600090a361072260018055565b6111d7611756565b6111df611d09565b6111e7611641565b6001600160a01b038316158061120457506001600160a01b038216155b156112225760405163d92e233d60e01b815260040160405180910390fd5b6112366001600160a01b0384168383611d59565b816001600160a01b0316836001600160a01b03167f8bbfbb5d7fcacf6fc74005cdede0635561638507f576c95f7f294c22141be2e58360405161127b91815260200190565b60405180910390a361128c60018055565b505050565b6002546001600160a01b031633148015906112b757506000546001600160a01b03163314155b156112d557604051631f0853c160e21b815260040160405180910390fd5b6112dd6115f4565b6112e5611641565b6003541561130657604051633538ffe160e11b815260040160405180910390fd5b6040516331a9108f60e11b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190612733565b905060006113a08383611dab565b6007805460ff191660011790556008849055600980546001600160a01b038086166001600160a01b031990921691909117909155604051632142170760e11b81529192507f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061141f90859030908890600401612664565b600060405180830381600087803b15801561143957600080fd5b505af115801561144d573d6000803e3d6000fd5b50506007805460ff1916905550506000600855600980546001600160a01b03191690556040516331a9108f60e11b81526004810184905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190612733565b6001600160a01b03161461152257604051636bcd243760e11b815260040160405180910390fd5b6003839055600481905560405181815283906001600160a01b0384169033907fddba4b4d1da59b01f84b077034d6c6c687ffb73573c631f3f666686fa729c62f9060200160405180910390a450506105c260018055565b611581611756565b6001600160a01b0381166115eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6105c281611c76565b600054600160a01b900460ff16156105d55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016115e2565b6002600154036116935760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016115e2565b6002600155565b6040516331a9108f60e11b81526004810182905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117259190612733565b6001600160a01b03161461174c57604051636bcd243760e11b815260040160405180910390fd5b6107228130611dab565b6000546001600160a01b031633146105d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016115e2565b6117b8611d09565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600081815260066020526040812080546001600160a01b03191690556005805490919061183190612750565b9091555050565b6040516331a9108f60e11b81526004810184905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561189f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c39190612733565b6001600160a01b031614158061196b57506040516331a9108f60e11b81526004810183905230906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561193b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195f9190612733565b6001600160a01b031614155b1561198957604051636bcd243760e11b815260040160405180910390fd5b604051635a2d1e0760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b45a3c0e90602401606060405180830381865afa1580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a15919061277c565b604051635a2d1e0760e11b8152600481018590529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b45a3c0e90602401606060405180830381865afa158015611a80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa4919061277c565b905081604001511580611ab957508060400151155b80611acc575060008260000151600f0b13155b80611adf575060008160000151600f0b13155b80611af6575060045482516001600160801b031614155b80611b0b575080516001600160801b03168314155b80611bae5750600060405161f8e560ef1b8152600481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637c72800090602401602060405180830381865afa158015611b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9a919061280e565b6002811115611bab57611bab6127f8565b14155b80611c515750600060405161f8e560ef1b8152600481018690527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637c72800090602401602060405180830381865afa158015611c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3d919061280e565b6002811115611c4e57611c4e6127f8565b14155b15611c6f57604051635435b28960e11b815260040160405180910390fd5b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611cce6115f4565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117e83390565b600054600160a01b900460ff166105d55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016115e2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261128c90849061220e565b60006001600160a01b038216611dd45760405163bca078e760e01b815260040160405180910390fd5b600060405161f8e560ef1b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637c72800090602401602060405180830381865afa158015611e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5d919061280e565b6002811115611e6e57611e6e6127f8565b14611e8b5760405162aad18d60e41b815260040160405180910390fd5b604051635a2d1e0760e11b8152600481018490526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b45a3c0e90602401606060405180830381865afa158015611ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f17919061277c565b90508060400151611f3b57604051639859477d60e01b815260040160405180910390fd5b60008160000151600f0b13611f6357604051631f2a200560e01b815260040160405180910390fd5b604051638fbb38ff60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690638fbb38ff90602401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061282f565b1561200a5760405163a1f0d74b60e01b815260040160405180910390fd5b60405163d1d58b2560e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d1d58b2590602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612093919061284a565b156120b1576040516391f89ff760e01b815260040160405180910390fd5b604051633d085a3760e01b8152600060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633d085a3790602401602060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a919061282f565b156121585760405163040e4eed60e41b815260040160405180910390fd5b604051633d085a3760e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690633d085a3790602401602060405180830381865afa1580156121bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e0919061282f565b6121fd57604051634e9ed41360e11b815260040160405180910390fd5b516001600160801b03169392505050565b6000612263826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122e39092919063ffffffff16565b9050805160001480612284575080806020019051810190612284919061282f565b61128c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016115e2565b6060610cb2848460008585600080866001600160a01b0316858760405161230a9190612887565b60006040518083038185875af1925050503d8060008114612347576040519150601f19603f3d011682016040523d82523d6000602084013e61234c565b606091505b509150915061235d87838387612368565b979650505050505050565b606083156123d75782516000036123d0576001600160a01b0385163b6123d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115e2565b5081610cb2565b610cb283838151156123ec5781518083602001fd5b8060405162461bcd60e51b81526004016115e291906128a3565b6001600160a01b03811681146105c257600080fd5b60008060008060006080868803121561243357600080fd5b853561243e81612406565b9450602086013561244e81612406565b935060408601359250606086013567ffffffffffffffff8082111561247257600080fd5b818801915088601f83011261248657600080fd5b81358181111561249557600080fd5b8960208285010111156124a757600080fd5b9699959850939650602001949392505050565b6000602082840312156124cc57600080fd5b5035919050565b6000602082840312156124e557600080fd5b81356124f081612406565b9392505050565b6000806040838503121561250a57600080fd5b82359150602083013561251c81612406565b809150509250929050565b60008083601f84011261253957600080fd5b50813567ffffffffffffffff81111561255157600080fd5b6020830191508360208260051b850101111561256c57600080fd5b9250929050565b6000806000806040858703121561258957600080fd5b843567ffffffffffffffff808211156125a157600080fd5b6125ad88838901612527565b909650945060208701359150808211156125c657600080fd5b506125d387828801612527565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015612617578351835292840192918401916001016125fb565b50909695505050505050565b60008060006060848603121561263857600080fd5b833561264381612406565b9250602084013561265381612406565b929592945050506040919091013590565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156126c7576126c761269e565b92915050565b6000600182016126df576126df61269e565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561270f57600080fd5b505080516020909101519092909150565b818103818111156126c7576126c761269e565b60006020828403121561274557600080fd5b81516124f081612406565b60008161275f5761275f61269e565b506000190190565b8051801515811461277757600080fd5b919050565b60006060828403121561278e57600080fd5b6040516060810181811067ffffffffffffffff821117156127bf57634e487b7160e01b600052604160045260246000fd5b6040528251600f81900b81146127d457600080fd5b8152602083810151908201526127ec60408401612767565b60408201529392505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561282057600080fd5b8151600381106124f057600080fd5b60006020828403121561284157600080fd5b6124f082612767565b60006020828403121561285c57600080fd5b5051919050565b60005b8381101561287e578181015183820152602001612866565b50506000910152565b60008251612899818460208701612863565b9190910192915050565b60208152600082518060208401526128c2816040850160208701612863565b601f01601f1916919091016040019291505056fea2646970667358221220e9973c717351c3dae9b432f4c92f2f1c7709b0fd9da3eca0b8840c6fad5b8fa364736f6c634300081300330000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b60000000000000000000000000eea30aba3f07abfa20e4b544f55e0f917d9dfd800000000000000000000000085fb9f9bc8a44663a234adb4cfe4e1459c096651
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80635fd25217116100c3578063aced16611161007c578063aced166114610317578063b2118a8d1461032a578063cfdbf2541461033d578063da25de3c14610345578063e9ddf3a31461034e578063f2fde38b1461036157600080fd5b80635fd25217146102bd578063715018a6146102d0578063748747e6146102d85780638456cb59146102eb5780638da5cb5b146102f3578063a721f1b01461030457600080fd5b80633f2a5540116101155780633f2a55401461022b5780633f4ba83a146102525780634989f6be1461025a5780634bd09c2a1461026d5780635bca5b1f1461028d5780635c975abb146102a057600080fd5b8063118644151461015d578063150b7a02146101795780631680d036146101a55780631f850716146101e657806322e812271461020d5780632e2c1a5a14610222575b600080fd5b61016660055481565b6040519081526020015b60405180910390f35b61018c61018736600461241b565b610374565b6040516001600160e01b03199091168152602001610170565b6101ce6101b33660046124ba565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610170565b6101ce7f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b681565b61022061021b3660046124d3565b61041a565b005b61016660035481565b6101ce7f000000000000000000000000c75c2cc04f65d7c1e541474c8ce927b544fff84981565b6102206105c5565b6102206102683660046124f7565b6105d7565b61028061027b366004612573565b610726565b60405161017091906125df565b61022061029b3660046124ba565b610cba565b600054600160a01b900460ff166040519015158152602001610170565b6102206102cb3660046124ba565b610e1d565b610220610f36565b6102206102e63660046124d3565b610f48565b610220610fc9565b6000546001600160a01b03166101ce565b6102206103123660046124f7565b610fd9565b6002546101ce906001600160a01b031681565b610220610338366004612623565b6111cf565b610166603281565b61016660045481565b61022061035c3660046124ba565b611291565b61022061036f3660046124d3565b611579565b6000336001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b6161415806103b1575060075460ff16155b806103c557506001600160a01b0386163014155b806103d257506008548414155b806103eb57506009546001600160a01b03868116911614155b156104085760405162f769b160e11b815260040160405180910390fd5b50630a85bd0160e11b95945050505050565b6002546001600160a01b0316331480159061044057506000546001600160a01b03163314155b1561045e57604051631f0853c160e21b815260040160405180910390fd5b6104666115f4565b61046e611641565b6001600160a01b0381166104955760405163d92e233d60e01b815260040160405180910390fd5b600554156104b657604051633404b7e760e11b815260040160405180910390fd5b60035460008190036104db57604051632873107160e11b815260040160405180910390fd5b6104e48161169a565b60048054600060038190558255604051632142170760e11b815290916001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b616916342842e0e916105419130918891889101612664565b600060405180830381600087803b15801561055b57600080fd5b505af115801561056f573d6000803e3d6000fd5b5050505081836001600160a01b03167f7fcab8b06605d6bcf1f233a9ebf09c5525aada7c7b40f4fdd1145c20e59ee244836040516105af91815260200190565b60405180910390a350506105c260018055565b50565b6105cd611756565b6105d56117b0565b565b6105df611756565b6105e76115f4565b6105ef611641565b6000828152600660205260409020546001600160a01b0316610624576040516315c7ee3760e31b815260040160405180910390fd5b6001600160a01b03811661064b5760405163d92e233d60e01b815260040160405180910390fd5b604051632142170760e11b81526001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b616906342842e0e9061069b90309085908790600401612664565b600060405180830381600087803b1580156106b557600080fd5b505af11580156106c9573d6000803e3d6000fd5b505050506106d682611805565b60405160008152339083906001600160a01b038416907f6ae32d80f783d480abd8751d9db1395b4a4e3a299d0e0827d7ad2f6fd938cc8f9060200160405180910390a461072260018055565b5050565b6002546060906001600160a01b0316331480159061074f57506000546001600160a01b03163314155b1561076d57604051631f0853c160e21b815260040160405180910390fd5b6107756115f4565b61077d611641565b8360008190036107a05760405163c2e5347d60e01b815260040160405180910390fd5b8083146107c057604051635435b28960e11b815260040160405180910390fd5b60328111156107e2576040516305beb17160e11b815260040160405180910390fd5b600354600081900361080757604051632873107160e11b815260040160405180910390fd5b6108108161169a565b6000805b838110156108db57600089898381811061083057610830612688565b905060200201602081019061084591906124d3565b6001600160a01b03160361086c5760405163d92e233d60e01b815260040160405180910390fd5b86868281811061087e5761087e612688565b905060200201356000036108a557604051631f2a200560e01b815260040160405180910390fd5b8686828181106108b7576108b7612688565b90506020020135826108c991906126b4565b91506108d4816126cd565b9050610814565b5060045481106108fe57604051635435b28960e11b815260040160405180910390fd5b8267ffffffffffffffff811115610917576109176126e6565b604051908082528060200260200182016040528015610940578160200160208202803683370190505b50935060005b83811015610ca557600087878381811061096257610962612688565b6003546040516312c66fb360e21b815260048101829052602090920293909301356024820181905293506000915081906001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b61690634b19becc9060440160408051808303816000875af11580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0891906126fc565b915091508360046000828254610a1e9190612720565b90915550506003829055885181908a9087908110610a3e57610a3e612688565b602002602001018181525050610a55828286611838565b7f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b03166342842e0e308f8f89818110610a9757610a97612688565b9050602002016020810190610aac91906124d3565b846040518463ffffffff1660e01b8152600401610acb93929190612664565b600060405180830381600087803b158015610ae557600080fd5b505af1925050508015610af6575060015b610c1c573d808015610b24576040519150601f19603f3d011682016040523d82523d6000602084013e610b29565b606091505b508d8d87818110610b3c57610b3c612688565b9050602002016020810190610b5191906124d3565b600083815260066020526040812080546001600160a01b0319166001600160a01b03939093169290921790915560058054909190610b8e906126cd565b90915550818e8e88818110610ba557610ba5612688565b9050602002016020810190610bba91906124d3565b6001600160a01b03167f4c9ef53b727d4d7c7fc88910773b5d276fe82d8605ffdd994808326e5881fa5c87868580519060200120604051610c0e939291909283526020830191909152604082015260600190565b60405180910390a350610c90565b808d8d87818110610c2f57610c2f612688565b9050602002016020810190610c4491906124d3565b6001600160a01b03167fc03a47e2901c63149a7d25390620ef8d865a17eaf843c2e8d594e3d52d915b478685604051610c87929190918252602082015260400190565b60405180910390a35b5050505080610c9e906126cd565b9050610946565b50505050610cb260018055565b949350505050565b6002546001600160a01b03163314801590610ce057506000546001600160a01b03163314155b15610cfe57604051631f0853c160e21b815260040160405180910390fd5b610d066115f4565b610d0e611641565b6000818152600660205260409020546001600160a01b031680610d44576040516315c7ee3760e31b815260040160405180910390fd5b604051632142170760e11b81526001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b616906342842e0e90610d9490309085908790600401612664565b600060405180830381600087803b158015610dae57600080fd5b505af1158015610dc2573d6000803e3d6000fd5b50505050610dcf82611805565b60405160008152339083906001600160a01b038416907f6ae32d80f783d480abd8751d9db1395b4a4e3a299d0e0827d7ad2f6fd938cc8f906020015b60405180910390a4506105c260018055565b610e25611756565b610e2d6115f4565b610e35611641565b6000818152600660205260409020546001600160a01b031680610e6b576040516315c7ee3760e31b815260040160405180910390fd5b6040516323b872dd60e01b81526001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b616906323b872dd90610ebb90309085908790600401612664565b600060405180830381600087803b158015610ed557600080fd5b505af1158015610ee9573d6000803e3d6000fd5b50505050610ef682611805565b60405160018152339083906001600160a01b038416907f6ae32d80f783d480abd8751d9db1395b4a4e3a299d0e0827d7ad2f6fd938cc8f90602001610e0b565b610f3e611756565b6105d56000611c76565b610f50611756565b6001600160a01b038116610f775760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f53d3703fe259def57584466f32d1b94c30278008c683c21b04501c4966f13a6990600090a35050565b610fd1611756565b6105d5611cc6565b610fe1611756565b610fe9611d09565b610ff1611641565b6001600160a01b0381166110185760405163d92e233d60e01b815260040160405180910390fd5b60035482148061103e57506000828152600660205260409020546001600160a01b031615155b1561105c576040516393e088c560e01b815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905230906001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b61690636352211e90602401602060405180830381865afa1580156110c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e79190612733565b6001600160a01b03161461110e57604051636bcd243760e11b815260040160405180910390fd5b604051632142170760e11b81526001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b616906342842e0e9061115e90309085908790600401612664565b600060405180830381600087803b15801561117857600080fd5b505af115801561118c573d6000803e3d6000fd5b50506040518492506001600160a01b03841691507f43d5f08b0ffa72d880788183feb40a1abcb3f7081ade887e976d5d7f853f8b5490600090a361072260018055565b6111d7611756565b6111df611d09565b6111e7611641565b6001600160a01b038316158061120457506001600160a01b038216155b156112225760405163d92e233d60e01b815260040160405180910390fd5b6112366001600160a01b0384168383611d59565b816001600160a01b0316836001600160a01b03167f8bbfbb5d7fcacf6fc74005cdede0635561638507f576c95f7f294c22141be2e58360405161127b91815260200190565b60405180910390a361128c60018055565b505050565b6002546001600160a01b031633148015906112b757506000546001600160a01b03163314155b156112d557604051631f0853c160e21b815260040160405180910390fd5b6112dd6115f4565b6112e5611641565b6003541561130657604051633538ffe160e11b815260040160405180910390fd5b6040516331a9108f60e11b8152600481018290526000907f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b031690636352211e90602401602060405180830381865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113929190612733565b905060006113a08383611dab565b6007805460ff191660011790556008849055600980546001600160a01b038086166001600160a01b031990921691909117909155604051632142170760e11b81529192507f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b616906342842e0e9061141f90859030908890600401612664565b600060405180830381600087803b15801561143957600080fd5b505af115801561144d573d6000803e3d6000fd5b50506007805460ff1916905550506000600855600980546001600160a01b03191690556040516331a9108f60e11b81526004810184905230906001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b61690636352211e90602401602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb9190612733565b6001600160a01b03161461152257604051636bcd243760e11b815260040160405180910390fd5b6003839055600481905560405181815283906001600160a01b0384169033907fddba4b4d1da59b01f84b077034d6c6c687ffb73573c631f3f666686fa729c62f9060200160405180910390a450506105c260018055565b611581611756565b6001600160a01b0381166115eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6105c281611c76565b600054600160a01b900460ff16156105d55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016115e2565b6002600154036116935760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016115e2565b6002600155565b6040516331a9108f60e11b81526004810182905230906001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b61690636352211e90602401602060405180830381865afa158015611701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117259190612733565b6001600160a01b03161461174c57604051636bcd243760e11b815260040160405180910390fd5b6107228130611dab565b6000546001600160a01b031633146105d55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016115e2565b6117b8611d09565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600081815260066020526040812080546001600160a01b03191690556005805490919061183190612750565b9091555050565b6040516331a9108f60e11b81526004810184905230906001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b61690636352211e90602401602060405180830381865afa15801561189f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c39190612733565b6001600160a01b031614158061196b57506040516331a9108f60e11b81526004810183905230906001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b61690636352211e90602401602060405180830381865afa15801561193b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195f9190612733565b6001600160a01b031614155b1561198957604051636bcd243760e11b815260040160405180910390fd5b604051635a2d1e0760e11b8152600481018490526000907f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b03169063b45a3c0e90602401606060405180830381865afa1580156119f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a15919061277c565b604051635a2d1e0760e11b8152600481018590529091506000906001600160a01b037f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b6169063b45a3c0e90602401606060405180830381865afa158015611a80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa4919061277c565b905081604001511580611ab957508060400151155b80611acc575060008260000151600f0b13155b80611adf575060008160000151600f0b13155b80611af6575060045482516001600160801b031614155b80611b0b575080516001600160801b03168314155b80611bae5750600060405161f8e560ef1b8152600481018790527f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b031690637c72800090602401602060405180830381865afa158015611b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9a919061280e565b6002811115611bab57611bab6127f8565b14155b80611c515750600060405161f8e560ef1b8152600481018690527f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b031690637c72800090602401602060405180830381865afa158015611c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3d919061280e565b6002811115611c4e57611c4e6127f8565b14155b15611c6f57604051635435b28960e11b815260040160405180910390fd5b5050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611cce6115f4565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117e83390565b600054600160a01b900460ff166105d55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016115e2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261128c90849061220e565b60006001600160a01b038216611dd45760405163bca078e760e01b815260040160405180910390fd5b600060405161f8e560ef1b8152600481018590527f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b031690637c72800090602401602060405180830381865afa158015611e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5d919061280e565b6002811115611e6e57611e6e6127f8565b14611e8b5760405162aad18d60e41b815260040160405180910390fd5b604051635a2d1e0760e11b8152600481018490526000907f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b03169063b45a3c0e90602401606060405180830381865afa158015611ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f17919061277c565b90508060400151611f3b57604051639859477d60e01b815260040160405180910390fd5b60008160000151600f0b13611f6357604051631f2a200560e01b815260040160405180910390fd5b604051638fbb38ff60e01b8152600481018590527f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b031690638fbb38ff90602401602060405180830381865afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061282f565b1561200a5760405163a1f0d74b60e01b815260040160405180910390fd5b60405163d1d58b2560e01b8152600481018590527f000000000000000000000000c75c2cc04f65d7c1e541474c8ce927b544fff8496001600160a01b03169063d1d58b2590602401602060405180830381865afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612093919061284a565b156120b1576040516391f89ff760e01b815260040160405180910390fd5b604051633d085a3760e01b8152600060048201527f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b031690633d085a3790602401602060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a919061282f565b156121585760405163040e4eed60e41b815260040160405180910390fd5b604051633d085a3760e01b81523060048201527f0000000000000000000000005d321de36f0bf98d92b291280514f3878582b7b66001600160a01b031690633d085a3790602401602060405180830381865afa1580156121bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e0919061282f565b6121fd57604051634e9ed41360e11b815260040160405180910390fd5b516001600160801b03169392505050565b6000612263826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122e39092919063ffffffff16565b9050805160001480612284575080806020019051810190612284919061282f565b61128c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016115e2565b6060610cb2848460008585600080866001600160a01b0316858760405161230a9190612887565b60006040518083038185875af1925050503d8060008114612347576040519150601f19603f3d011682016040523d82523d6000602084013e61234c565b606091505b509150915061235d87838387612368565b979650505050505050565b606083156123d75782516000036123d0576001600160a01b0385163b6123d05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016115e2565b5081610cb2565b610cb283838151156123ec5781518083602001fd5b8060405162461bcd60e51b81526004016115e291906128a3565b6001600160a01b03811681146105c257600080fd5b60008060008060006080868803121561243357600080fd5b853561243e81612406565b9450602086013561244e81612406565b935060408601359250606086013567ffffffffffffffff8082111561247257600080fd5b818801915088601f83011261248657600080fd5b81358181111561249557600080fd5b8960208285010111156124a757600080fd5b9699959850939650602001949392505050565b6000602082840312156124cc57600080fd5b5035919050565b6000602082840312156124e557600080fd5b81356124f081612406565b9392505050565b6000806040838503121561250a57600080fd5b82359150602083013561251c81612406565b809150509250929050565b60008083601f84011261253957600080fd5b50813567ffffffffffffffff81111561255157600080fd5b6020830191508360208260051b850101111561256c57600080fd5b9250929050565b6000806000806040858703121561258957600080fd5b843567ffffffffffffffff808211156125a157600080fd5b6125ad88838901612527565b909650945060208701359150808211156125c657600080fd5b506125d387828801612527565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015612617578351835292840192918401916001016125fb565b50909695505050505050565b60008060006060848603121561263857600080fd5b833561264381612406565b9250602084013561265381612406565b929592945050506040919091013590565b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156126c7576126c761269e565b92915050565b6000600182016126df576126df61269e565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561270f57600080fd5b505080516020909101519092909150565b818103818111156126c7576126c761269e565b60006020828403121561274557600080fd5b81516124f081612406565b60008161275f5761275f61269e565b506000190190565b8051801515811461277757600080fd5b919050565b60006060828403121561278e57600080fd5b6040516060810181811067ffffffffffffffff821117156127bf57634e487b7160e01b600052604160045260246000fd5b6040528251600f81900b81146127d457600080fd5b8152602083810151908201526127ec60408401612767565b60408201529392505050565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561282057600080fd5b8151600381106124f057600080fd5b60006020828403121561284157600080fd5b6124f082612767565b60006020828403121561285c57600080fd5b5051919050565b60005b8381101561287e578181015183820152602001612866565b50506000910152565b60008251612899818460208701612863565b9190910192915050565b60208152600082518060208401526128c2816040850160208701612863565b601f01601f1916919091016040019291505056fea2646970667358221220e9973c717351c3dae9b432f4c92f2f1c7709b0fd9da3eca0b8840c6fad5b8fa364736f6c63430008130033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| veNFT (veNFT) | veNFT | 1 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…772cf212 [1] 0x000000000000…000003ee data: 0x000000000000000000…000003ed |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…7079ec79 [1] 0x000000000000…000003ec data: 0x000000000000000000…000003eb |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…718978f4 [1] 0x000000000000…000003ea data: 0x000000000000000000…000003e9 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…c4ddc808 [1] 0x000000000000…000003e8 data: 0x000000000000000000…000003e7 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…52e45bf0 [1] 0x000000000000…000003e6 data: 0x000000000000000000…000003e5 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…80047195 [1] 0x000000000000…000003e4 data: 0x000000000000000000…000003e3 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…c9b794f2 [1] 0x000000000000…000003e2 data: 0x000000000000000000…000003e1 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…4d16cda2 [1] 0x000000000000…000003e0 data: 0x000000000000000000…000003df |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…787da105 [1] 0x000000000000…000003de data: 0x000000000000000000…000003dd |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…f27655ab [1] 0x000000000000…000003dc data: 0x000000000000000000…000003db |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…3a20a4e6 [1] 0x000000000000…000003da data: 0x000000000000000000…000003d9 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…9a54381c [1] 0x000000000000…000003d8 data: 0x000000000000000000…000003d7 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…fb74ca03 [1] 0x000000000000…000003d6 data: 0x000000000000000000…000003d5 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…1c0a62d2 [1] 0x000000000000…000003d4 data: 0x000000000000000000…000003d3 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…126bbeb8 [1] 0x000000000000…000003d2 data: 0x000000000000000000…000003d1 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…229acce7 [1] 0x000000000000…000003d0 data: 0x000000000000000000…000003cf |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…56420bec [1] 0x000000000000…000003ce data: 0x000000000000000000…000003cd |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…9b38d0bd [1] 0x000000000000…000003cc data: 0x000000000000000000…000003cb |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…afea1086 [1] 0x000000000000…000003ca data: 0x000000000000000000…000003c9 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…ee407013 [1] 0x000000000000…000003c8 data: 0x000000000000000000…000003c7 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…b976481b [1] 0x000000000000…000003c6 data: 0x000000000000000000…000003c5 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…c9a0541e [1] 0x000000000000…000003c4 data: 0x000000000000000000…000003c3 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…e3355701 [1] 0x000000000000…000003c2 data: 0x000000000000000000…000003c1 |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…9dedabfd [1] 0x000000000000…000003c0 data: 0x000000000000000000…000003bf |
| 0x5cb431…402889 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0xc03a47…5b47 | [0] 0x000000000000…02863393 [1] 0x000000000000…000003be data: 0x000000000000000000…000003bd |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x5cb431…402889 | distributeTokens | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00031519 | |
| 0xaefb77…cefe8c | distributeTokens | 38,086,624 | 1 day agoSun, 16 Aug 2026 15:34:00 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00031576 | |
| 0xb4d8fb…fdd98b | distributeTokens | 33,690,718 | 6 days agoTue, 11 Aug 2026 13:16:50 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00020507 | |
| 0x578758…feaed9 | distributeTokens | 31,122,034 | 9 days agoSat, 08 Aug 2026 13:49:36 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00047905 | |
| 0x721069…49b4be | distributeTokens | 31,121,795 | 9 days agoSat, 08 Aug 2026 13:49:13 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00050075 | |
| 0x1162f5…409bb0 | distributeTokens | 25,203,326 | 16 days agoSat, 01 Aug 2026 17:03:07 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00032131 | |
| 0xcb3f86…f3d8aa | distributeTokens | 19,336,585 | 23 days agoSat, 25 Jul 2026 21:34:51 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00105258 | |
| 0xacc36b…f43580 | distributeTokens | 19,336,209 | 23 days agoSat, 25 Jul 2026 21:34:14 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00105849 | |
| 0x743298…8757d3 | distributeTokens | 19,333,220 | 23 days agoSat, 25 Jul 2026 21:29:14 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00006786 | |
| 0xd133d5…703d91 | depositVeNFT | 19,323,934 | 23 days agoSat, 25 Jul 2026 21:13:44 UTC | 0x85fb…6651 | IN | VeNFTRebateDistributor | $0.000 ETH | 0.00002135 |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0xe33b…f212 | Transfer | veNFT (veNFT) #1006 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #1006 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #1005 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0x0000…0000 | Transfer | veNFT (veNFT) #1003 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0xdedf…ec79 | Transfer | veNFT (veNFT) #1004 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #1004 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #1003 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0x0000…0000 | Transfer | veNFT (veNFT) #1001 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0xd850…78f4 | Transfer | veNFT (veNFT) #1002 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #1002 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #1001 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0x0000…0000 | Transfer | veNFT (veNFT) #999 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0xcc6a…c808 | Transfer | veNFT (veNFT) #1000 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #1000 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #999 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0x0000…0000 | Transfer | veNFT (veNFT) #997 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0xcabe…5bf0 | Transfer | veNFT (veNFT) #998 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #998 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #997 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0x0000…0000 | Transfer | veNFT (veNFT) #995 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0xc31b…7195 | Transfer | veNFT (veNFT) #996 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #996 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x0000…0000 | IN | 0x2e4a…d119 | Mint | veNFT (veNFT) #995 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0x0000…0000 | Transfer | veNFT (veNFT) #993 | |
| 0x5cb431ab…402889 | Transfer | 38,105,364 | 1 day agoSun, 16 Aug 2026 16:05:20 UTC | 0x2e4a…d119 | OUT | 0xc174…94f2 | Transfer | veNFT (veNFT) #994 |