// SPDX-License-Identifier: MIT
pragma solidity 0.8.28;
import {Ownable} from "solady/auth/Ownable.sol";
import {FixedPointMathLib} from "solady/utils/FixedPointMathLib.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {IHook} from "deepstate-contracts/interfaces/IHook.sol";
import {IOrderBook} from "./interfaces/IOrderBook.sol";
/// @title Deepstate Rewarder
/// @notice Pool-specific accounting for a finite DEEP market-making program.
/// @dev
/// One rewarder is deployed per pool. Each side receives an independent immutable emission cap and
/// starts its own clock when Deepstate first reports a live top order. Emissions follow a normalized
/// logarithmic curve, while the quantity required for full rewards grows geometrically for 30 days.
/// Amounts below that target earn linearly; amounts at or above it earn the full scheduled budget.
contract DeepstateRewarder is Ownable, IHook {
using FixedPointMathLib for uint256;
using SafeERC20 for IERC20;
struct OrderReference {
bytes32 bookId;
bytes32 order;
}
struct RewardClaim {
bytes32 bookId;
bytes32 order;
address token;
}
/// @notice Time constant used by the logarithmic cumulative emission curve.
uint256 public constant EMISSION_TIME_CONSTANT = 30 days;
/// @notice Duration of each side's geometric full-reward-quantity ramp.
uint256 public constant QUANTITY_RAMP_PERIOD = 30 days;
uint256 internal constant _WAD = 1e18;
uint256 internal constant _MIN_QUANTITY_GROWTH_WAD = 1_000e18;
uint256 internal constant _E1_ITERATIONS = 16;
/// @notice Deepstate order book authorized to update reward cursors.
address public immutable deepstate;
/// @notice Prefunded token transferred when rewards are claimed.
address public immutable rewardToken;
/// @notice Sorted-token pool id accepted by this rewarder.
bytes32 public immutable poolId;
/// @notice Lower sorted pool token.
address public immutable token0;
/// @notice Higher sorted pool token.
address public immutable token1;
/// @notice Lifetime emission cap for each side of the book.
uint96 public immutable sideEmissionCap;
/// @notice Number of seconds over which each side can earn its cap.
uint32 public immutable emissionDuration;
/// @notice Natural log of `1 + emissionDuration / 30 days`, WAD-scaled.
uint128 public immutable emissionLogDenominatorWad;
uint160 public immutable token0StartQuantity;
uint160 public immutable token0MaxQuantity;
uint160 public immutable token1StartQuantity;
uint160 public immutable token1MaxQuantity;
uint128 public immutable token0QuantityLogWad;
uint128 public immutable token1QuantityLogWad;
// Packed as: total accrued (96) | side activation (64) | current top start (64) | nonce (32).
uint256 private _token0State;
uint256 private _token1State;
bytes32 private _token0BookId;
bytes32 private _token1BookId;
mapping(bytes32 bookId => mapping(address token => mapping(uint32 orderNonce => uint256 balance))) public balances;
/// @notice Verified reward recipient for a canonical Deepstate order id.
mapping(bytes32 orderId => address claimant) public claimants;
event ClaimantRegistered(bytes32 indexed orderId, address indexed claimant);
event RewardsDistributed(bytes32 bookId, bytes32 order, address token, address owner, uint256 amount);
error InvalidOwner();
error InvalidDeepstate();
error InvalidRewardToken();
error InvalidPool();
error InvalidEmissionSchedule();
error InvalidQuantitySchedule();
error NotDeepstate();
error InvalidHookToken();
error NoOrderOwner();
error EmptyBatch();
error ClaimantMismatch();
constructor(
address owner_,
address deepstate_,
address rewardToken_,
bytes32 poolId_,
address token0_,
address token1_,
uint96 sideEmissionCap_,
uint32 emissionDuration_,
uint160 token0StartQuantity_,
uint160 token0MaxQuantity_,
uint160 token1StartQuantity_,
uint160 token1MaxQuantity_
) {
if (owner_ == address(0)) revert InvalidOwner();
if (deepstate_ == address(0)) revert InvalidDeepstate();
if (rewardToken_ == address(0)) revert InvalidRewardToken();
if (poolId_ == bytes32(0) || token0_ >= token1_ || poolId_ != _poolId(token0_, token1_)) {
revert InvalidPool();
}
if (sideEmissionCap_ == 0 || emissionDuration_ < QUANTITY_RAMP_PERIOD) {
revert InvalidEmissionSchedule();
}
uint256 token0Log = _validateQuantitySchedule(token0StartQuantity_, token0MaxQuantity_);
uint256 token1Log = _validateQuantitySchedule(token1StartQuantity_, token1MaxQuantity_);
uint256 durationRatioWad = (EMISSION_TIME_CONSTANT + emissionDuration_).fullMulDiv(_WAD, EMISSION_TIME_CONSTANT);
uint256 emissionLog = uint256(FixedPointMathLib.lnWad(int256(durationRatioWad)));
_initializeOwner(owner_);
deepstate = deepstate_;
rewardToken = rewardToken_;
poolId = poolId_;
token0 = token0_;
token1 = token1_;
sideEmissionCap = sideEmissionCap_;
emissionDuration = emissionDuration_;
emissionLogDenominatorWad = uint128(emissionLog);
token0StartQuantity = token0StartQuantity_;
token0MaxQuantity = token0MaxQuantity_;
token1StartQuantity = token1StartQuantity_;
token1MaxQuantity = token1MaxQuantity_;
token0QuantityLogWad = uint128(token0Log);
token1QuantityLogWad = uint128(token1Log);
}
/// @notice Current top-order cursor for one side.
function rewardees(address token) external view returns (uint32 orderNonce, uint64 startedAt) {
(orderNonce, startedAt,,) = _unpackState(_packedState(token));
}
/// @notice Timestamp when one side's finite schedule was activated, or zero before activation.
function emissionStart(address token) public view returns (uint64 activatedAt) {
(,, activatedAt,) = _unpackState(_packedState(token));
}
/// @notice Rewards accrued against one side's immutable cap, whether claimed or still owed.
function totalAccrued(address token) public view returns (uint96 accrued) {
(,,, accrued) = _unpackState(_packedState(token));
}
/// @notice Book containing the currently tracked top order for one side.
function rewardeeBookId(address token) external view returns (bytes32) {
if (token == token0) return _token0BookId;
if (token == token1) return _token1BookId;
revert InvalidHookToken();
}
/// @notice Cumulative maximum emissions for one side after `elapsed` schedule seconds.
function cumulativeEmissionsAtElapsed(uint256 elapsed) public view returns (uint256) {
uint256 duration = emissionDuration;
if (elapsed == 0) return 0;
if (elapsed >= duration) return sideEmissionCap;
uint256 ratioWad = (EMISSION_TIME_CONSTANT + elapsed).fullMulDiv(_WAD, EMISSION_TIME_CONSTANT);
uint256 logWad = uint256(FixedPointMathLib.lnWad(int256(ratioWad)));
return uint256(sideEmissionCap).fullMulDiv(logWad, emissionLogDenominatorWad);
}
/// @notice Cumulative maximum emissions for a side at an absolute timestamp.
function cumulativeEmissionsAt(address token, uint256 timestamp_) public view returns (uint256) {
uint64 start = emissionStart(token);
if (start == 0 || timestamp_ <= start) return 0;
return cumulativeEmissionsAtElapsed(timestamp_ - start);
}
/// @notice Maximum side emissions between two absolute timestamps.
function emissionsBetween(address token, uint256 start, uint256 end) public view returns (uint256) {
if (end <= start) return 0;
return cumulativeEmissionsAt(token, end) - cumulativeEmissionsAt(token, start);
}
/// @notice Quantity required to earn the full side budget after `elapsed` schedule seconds.
function fullRewardQuantityAtElapsed(address token, uint256 elapsed) public view returns (uint256) {
(uint160 startQuantity, uint160 maxQuantity, uint128 quantityLogWad) = _quantityConfig(token);
if (elapsed >= QUANTITY_RAMP_PERIOD) return maxQuantity;
uint256 exponentWad = uint256(quantityLogWad).fullMulDiv(elapsed, QUANTITY_RAMP_PERIOD);
return uint256(startQuantity).fullMulDiv(_expWad(int256(exponentWad)), _WAD);
}
/// @notice Quantity required to earn the full side budget at an absolute timestamp.
function fullRewardQuantityAt(address token, uint256 timestamp_) external view returns (uint256) {
uint64 start = emissionStart(token);
if (start == 0 || timestamp_ <= start) {
(uint160 startQuantity,,) = _quantityConfig(token);
return startQuantity;
}
return fullRewardQuantityAtElapsed(token, timestamp_ - start);
}
/// @notice Quantity-adjusted reward over an elapsed schedule interval.
/// @dev This integrates the moving quantity target over time rather than sampling an endpoint.
function previewRewardAtElapsed(address token, uint256 start, uint256 end, uint160 amount)
public
view
returns (uint256)
{
if (end <= start || amount == 0) return 0;
uint256 intervalStart = start;
(uint160 startQuantity, uint160 maxQuantity, uint128 quantityLogWad) = _quantityConfig(token);
uint256 duration = emissionDuration;
if (start >= duration) return 0;
if (end > duration) end = duration;
if (amount >= maxQuantity) {
return cumulativeEmissionsAtElapsed(end) - cumulativeEmissionsAtElapsed(start);
}
uint256 reward;
uint256 crossover = _crossoverTime(amount, startQuantity, maxQuantity, quantityLogWad);
if (start < crossover) {
uint256 fullEnd = end < crossover ? end : crossover;
reward = cumulativeEmissionsAtElapsed(fullEnd) - cumulativeEmissionsAtElapsed(start);
start = fullEnd;
}
if (start < end && start < QUANTITY_RAMP_PERIOD) {
uint256 rampEnd = end < QUANTITY_RAMP_PERIOD ? end : QUANTITY_RAMP_PERIOD;
reward += _rampAdjustedReward(start, rampEnd, amount, startQuantity, quantityLogWad);
start = rampEnd;
}
if (start < end) {
uint256 tailBudget = cumulativeEmissionsAtElapsed(end) - cumulativeEmissionsAtElapsed(start);
reward += tailBudget.fullMulDiv(amount, maxQuantity);
}
uint256 maximum = cumulativeEmissionsAtElapsed(end) - cumulativeEmissionsAtElapsed(intervalStart);
return reward > maximum ? maximum : reward;
}
/// @notice Quantity-adjusted reward over an absolute interval for an activated side.
function previewReward(address token, uint256 start, uint256 end, uint160 amount) public view returns (uint256) {
uint64 activatedAt = emissionStart(token);
if (activatedAt == 0 || end <= activatedAt || end <= start) return 0;
if (start < activatedAt) start = activatedAt;
return previewRewardAtElapsed(token, start - activatedAt, end - activatedAt, amount);
}
/// @inheritdoc IHook
function execute(bytes32 poolId_, bytes32 bookId, address token, uint160 outgoingAmount, uint32 incomingOrderNonce)
external
{
if (msg.sender != deepstate) revert NotDeepstate();
if (poolId_ != poolId) revert InvalidPool();
bool isToken0 = token == token0;
if (!isToken0 && token != token1) revert InvalidHookToken();
uint256 packed = isToken0 ? _token0State : _token1State;
(uint32 outgoingNonce, uint64 topStartedAt, uint64 activatedAt, uint96 accrued) = _unpackState(packed);
bytes32 outgoingBookId = isToken0 ? _token0BookId : _token1BookId;
if (
outgoingAmount != 0 && outgoingNonce != 0 && topStartedAt != 0 && activatedAt != 0
&& block.timestamp > topStartedAt
) {
uint256 reward = previewReward(token, topStartedAt, block.timestamp, outgoingAmount);
reward = _remainingReward(accrued, reward);
if (reward != 0) {
balances[outgoingBookId][token][outgoingNonce] += reward;
accrued += uint96(reward);
}
}
if (incomingOrderNonce == 0) {
topStartedAt = 0;
} else {
if (activatedAt == 0) activatedAt = uint64(block.timestamp);
topStartedAt = uint64(block.timestamp);
if (isToken0) {
if (_token0BookId != bookId) _token0BookId = bookId;
} else if (_token1BookId != bookId) {
_token1BookId = bookId;
}
}
uint256 nextState = _packState(incomingOrderNonce, topStartedAt, activatedAt, accrued);
if (isToken0) _token0State = nextState;
else _token1State = nextState;
}
/// @notice Cache the engine-verified owner that may claim rewards for an order after it is deleted.
/// @dev Anyone may register an active order, but the engine alone determines its claimant.
function registerClaimant(bytes32 bookId, bytes32 order) external returns (address claimant) {
return _resolveClaimant(bookId, order);
}
/// @notice Cache the same engine-verified claimant for multiple active orders.
/// @dev Reverts atomically if the orders do not share one claimant.
function registerClaimants(OrderReference[] calldata orders) external returns (address claimant) {
uint256 length = orders.length;
if (length == 0) revert EmptyBatch();
for (uint256 i; i < length; ++i) {
OrderReference calldata order = orders[i];
address current = _resolveClaimant(order.bookId, order.order);
if (claimant == address(0)) claimant = current;
else if (current != claimant) revert ClaimantMismatch();
}
}
/// @notice Accrue a live top order and pay all rewards to its verified claimant.
/// @dev Lazily registers an active order. Register before cancellation to preserve claims after
/// the engine permanently deletes ownership.
function distributeRewards(bytes32 bookId, bytes32 order, address token) external {
(address claimant, uint256 amount) = _accrueClaim(bookId, order, token);
if (amount == 0) return;
IERC20(rewardToken).safeTransfer(claimant, amount);
emit RewardsDistributed(bookId, order, token, claimant, amount);
}
/// @notice Accrue and distribute rewards for multiple orders owned by the same claimant.
/// @dev Aggregates the batch into one reward-token transfer and reverts atomically if any
/// resolved order belongs to a different claimant.
function distributeRewardsBatch(RewardClaim[] calldata claims) external {
uint256 length = claims.length;
if (length == 0) revert EmptyBatch();
address claimant;
uint256 totalAmount;
for (uint256 i; i < length; ++i) {
RewardClaim calldata claim = claims[i];
(address current, uint256 amount) = _accrueClaim(claim.bookId, claim.order, claim.token);
if (current != address(0)) {
if (claimant == address(0)) claimant = current;
else if (current != claimant) revert ClaimantMismatch();
}
if (amount == 0) continue;
totalAmount += amount;
emit RewardsDistributed(claim.bookId, claim.order, claim.token, current, amount);
}
if (totalAmount != 0) IERC20(rewardToken).safeTransfer(claimant, totalAmount);
}
function _accrueClaim(bytes32 bookId, bytes32 order, address token)
private
returns (address claimant, uint256 amount)
{
bool isToken0 = token == token0;
if (!isToken0 && token != token1) revert InvalidHookToken();
uint32 nonce = uint32(uint256(order));
uint256 packed = isToken0 ? _token0State : _token1State;
(uint32 currentNonce, uint64 topStartedAt, uint64 activatedAt, uint96 accrued) = _unpackState(packed);
bytes32 currentBookId = isToken0 ? _token0BookId : _token1BookId;
bool isCurrent = currentNonce == nonce && currentBookId == bookId && topStartedAt != 0;
amount = balances[bookId][token][nonce];
if (amount == 0 && !isCurrent) return (address(0), 0);
claimant = _resolveClaimant(bookId, order);
if (isCurrent && block.timestamp > topStartedAt) {
(uint32 liveNonce, uint160 liveAmount) = IOrderBook(deepstate).topOrder(bookId, !isToken0);
if (liveNonce == nonce && liveAmount != 0) {
uint256 liveReward = previewReward(token, topStartedAt, block.timestamp, liveAmount);
liveReward = _remainingReward(accrued, liveReward);
if (liveReward != 0) {
amount += liveReward;
accrued += uint96(liveReward);
balances[bookId][token][nonce] = amount;
}
uint256 nextState = _packState(currentNonce, uint64(block.timestamp), activatedAt, accrued);
if (isToken0) _token0State = nextState;
else _token1State = nextState;
}
}
if (amount == 0) return (claimant, 0);
balances[bookId][token][nonce] = 0;
}
function _resolveClaimant(bytes32 bookId, bytes32 order) private returns (address claimant) {
IOrderBook orderBook = IOrderBook(deepstate);
bytes32 id = orderBook.orderId(bookId, order);
claimant = claimants[id];
if (claimant != address(0)) return claimant;
claimant = orderBook.ownerOfOrder(id);
if (claimant == address(0)) revert NoOrderOwner();
claimants[id] = claimant;
emit ClaimantRegistered(id, claimant);
}
function _rampAdjustedReward(
uint256 start,
uint256 end,
uint160 amount,
uint160 startQuantity,
uint128 quantityLogWad
) private view returns (uint256) {
if (end <= start) return 0;
uint256 startTerm = _scaledE1Term(quantityLogWad, start);
uint256 endTerm = _scaledE1Term(quantityLogWad, end);
uint256 integralWad = (startTerm - endTerm).fullMulDiv(amount, startQuantity);
return uint256(sideEmissionCap).fullMulDiv(integralWad, emissionLogDenominatorWad);
}
/// @dev Returns `exp(a*tau) * E1(a*(tau+t))`, WAD-scaled, with
/// `a = ln(max/start) / QUANTITY_RAMP_PERIOD` and `tau = EMISSION_TIME_CONSTANT`.
function _scaledE1Term(uint128 quantityLogWad, uint256 elapsed) private pure returns (uint256) {
uint256 logWad = quantityLogWad;
uint256 exponentWad = logWad.fullMulDiv(elapsed, QUANTITY_RAMP_PERIOD);
uint256 argumentWad = logWad.fullMulDiv(EMISSION_TIME_CONSTANT + elapsed, QUANTITY_RAMP_PERIOD);
uint256 factorWad = _e1ContinuedFractionFactor(argumentWad);
return _expWad(-int256(exponentWad)).fullMulDiv(factorWad, _WAD);
}
/// @dev Continued-fraction factor `h(x)` where `E1(x) = exp(-x) * h(x)`.
function _e1ContinuedFractionFactor(uint256 xWad) private pure returns (uint256 hWad) {
int256 b = int256(xWad + _WAD);
int256 c = 1e36;
int256 d = int256(_WAD * _WAD / uint256(b));
int256 h = d;
for (uint256 i = 1; i <= _E1_ITERATIONS; ++i) {
int256 an = -int256(i * i * _WAD);
b += int256(2 * _WAD);
d = b + an * d / int256(_WAD);
d = int256(_WAD * _WAD) / d;
c = b + an * int256(_WAD) / c;
h = h * (d * c / int256(_WAD)) / int256(_WAD);
}
return uint256(h);
}
function _crossoverTime(uint160 amount, uint160 startQuantity, uint160 maxQuantity, uint128 quantityLogWad)
private
pure
returns (uint256)
{
if (amount <= startQuantity) return 0;
if (amount >= maxQuantity) return QUANTITY_RAMP_PERIOD;
uint256 ratioWad = uint256(amount).fullMulDiv(_WAD, startQuantity);
uint256 amountLogWad = uint256(FixedPointMathLib.lnWad(int256(ratioWad)));
return amountLogWad.fullMulDiv(QUANTITY_RAMP_PERIOD, quantityLogWad);
}
function _remainingReward(uint96 accrued, uint256 reward) private view returns (uint256) {
uint256 remaining = uint256(sideEmissionCap) - accrued;
return reward > remaining ? remaining : reward;
}
function _quantityConfig(address token)
private
view
returns (uint160 startQuantity, uint160 maxQuantity, uint128 quantityLogWad)
{
if (token == token0) return (token0StartQuantity, token0MaxQuantity, token0QuantityLogWad);
if (token == token1) return (token1StartQuantity, token1MaxQuantity, token1QuantityLogWad);
revert InvalidHookToken();
}
function _validateQuantitySchedule(uint160 startQuantity, uint160 maxQuantity)
private
pure
returns (uint256 logWad)
{
if (startQuantity == 0 || maxQuantity <= startQuantity) {
revert InvalidQuantitySchedule();
}
uint256 ratioWad = uint256(maxQuantity).fullMulDiv(_WAD, startQuantity);
if (ratioWad < _MIN_QUANTITY_GROWTH_WAD) revert InvalidQuantitySchedule();
logWad = uint256(FixedPointMathLib.lnWad(int256(ratioWad)));
if (logWad > type(uint128).max) revert InvalidQuantitySchedule();
}
function _packState(uint32 nonce, uint64 topStartedAt, uint64 activatedAt, uint96 accrued)
private
pure
returns (uint256)
{
return uint256(nonce) | (uint256(topStartedAt) << 32) | (uint256(activatedAt) << 96) | (uint256(accrued) << 160);
}
function _unpackState(uint256 packed)
private
pure
returns (uint32 nonce, uint64 topStartedAt, uint64 activatedAt, uint96 accrued)
{
nonce = uint32(packed);
topStartedAt = uint64(packed >> 32);
activatedAt = uint64(packed >> 96);
accrued = uint96(packed >> 160);
}
function _packedState(address token) private view returns (uint256) {
if (token == token0) return _token0State;
if (token == token1) return _token1State;
revert InvalidHookToken();
}
function _expWad(int256 x) private pure returns (uint256) {
return uint256(FixedPointMathLib.expWad(x));
}
function _poolId(address token0_, address token1_) private pure returns (bytes32 id) {
assembly ("memory-safe") {
let ptr := mload(0x40)
mstore(ptr, token0_)
mstore(add(ptr, 0x20), token1_)
id := keccak256(ptr, 0x40)
}
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "owner_",
"type": "address",
"internalType": "address"
},
{
"name": "deepstate_",
"type": "address",
"internalType": "address"
},
{
"name": "rewardToken_",
"type": "address",
"internalType": "address"
},
{
"name": "poolId_",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "token0_",
"type": "address",
"internalType": "address"
},
{
"name": "token1_",
"type": "address",
"internalType": "address"
},
{
"name": "sideEmissionCap_",
"type": "uint96",
"internalType": "uint96"
},
{
"name": "emissionDuration_",
"type": "uint32",
"internalType": "uint32"
},
{
"name": "token0StartQuantity_",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "token0MaxQuantity_",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "token1StartQuantity_",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "token1MaxQuantity_",
"type": "uint160",
"internalType": "uint160"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyInitialized",
"type": "error",
"inputs": []
},
{
"name": "ClaimantMismatch",
"type": "error",
"inputs": []
},
{
"name": "EmptyBatch",
"type": "error",
"inputs": []
},
{
"name": "InvalidDeepstate",
"type": "error",
"inputs": []
},
{
"name": "InvalidEmissionSchedule",
"type": "error",
"inputs": []
},
{
"name": "InvalidHookToken",
"type": "error",
"inputs": []
},
{
"name": "InvalidOwner",
"type": "error",
"inputs": []
},
{
"name": "InvalidPool",
"type": "error",
"inputs": []
},
{
"name": "InvalidQuantitySchedule",
"type": "error",
"inputs": []
},
{
"name": "InvalidRewardToken",
"type": "error",
"inputs": []
},
{
"name": "NewOwnerIsZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "NoHandoverRequest",
"type": "error",
"inputs": []
},
{
"name": "NoOrderOwner",
"type": "error",
"inputs": []
},
{
"name": "NotDeepstate",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "Unauthorized",
"type": "error",
"inputs": []
},
{
"name": "ClaimantRegistered",
"type": "event",
"inputs": [
{
"name": "orderId",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "claimant",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipHandoverCanceled",
"type": "event",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipHandoverRequested",
"type": "event",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "oldOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RewardsDistributed",
"type": "event",
"inputs": [
{
"name": "bookId",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
},
{
"name": "order",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
},
{
"name": "token",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "owner",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "EMISSION_TIME_CONSTANT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "QUANTITY_RAMP_PERIOD",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "balances",
"type": "function",
"inputs": [
{
"name": "bookId",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "orderNonce",
"type": "uint32",
"internalType": "uint32"
}
],
"outputs": [
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "cancelOwnershipHandover",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "claimants",
"type": "function",
"inputs": [
{
"name": "orderId",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [
{
"name": "claimant",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "completeOwnershipHandover",
"type": "function",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "cumulativeEmissionsAt",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "timestamp_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "cumulativeEmissionsAtElapsed",
"type": "function",
"inputs": [
{
"name": "elapsed",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "deepstate",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "distributeRewards",
"type": "function",
"inputs": [
{
"name": "bookId",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "order",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "distributeRewardsBatch",
"type": "function",
"inputs": [
{
"name": "claims",
"type": "tuple[]",
"components": [
{
"name": "bookId",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "order",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"internalType": "struct DeepstateRewarder.RewardClaim[]"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "emissionDuration",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint32",
"internalType": "uint32"
}
],
"stateMutability": "view"
},
{
"name": "emissionLogDenominatorWad",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint128",
"internalType": "uint128"
}
],
"stateMutability": "view"
},
{
"name": "emissionStart",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "activatedAt",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "emissionsBetween",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "start",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "end",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "execute",
"type": "function",
"inputs": [
{
"name": "poolId_",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "bookId",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "outgoingAmount",
"type": "uint160",
"internalType": "uint160"
},
{
"name": "incomingOrderNonce",
"type": "uint32",
"internalType": "uint32"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "fullRewardQuantityAt",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "timestamp_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "fullRewardQuantityAtElapsed",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "elapsed",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "result",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownershipHandoverExpiresAt",
"type": "function",
"inputs": [
{
"name": "pendingOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "result",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "poolId",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "previewReward",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "start",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "end",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint160",
"internalType": "uint160"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "previewRewardAtElapsed",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
},
{
"name": "start",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "end",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint160",
"internalType": "uint160"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "registerClaimant",
"type": "function",
"inputs": [
{
"name": "bookId",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "order",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [
{
"name": "claimant",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "registerClaimants",
"type": "function",
"inputs": [
{
"name": "orders",
"type": "tuple[]",
"components": [
{
"name": "bookId",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "order",
"type": "bytes32",
"internalType": "bytes32"
}
],
"internalType": "struct DeepstateRewarder.OrderReference[]"
}
],
"outputs": [
{
"name": "claimant",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "requestOwnershipHandover",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "rewardToken",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "rewardeeBookId",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"stateMutability": "view"
},
{
"name": "rewardees",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "orderNonce",
"type": "uint32",
"internalType": "uint32"
},
{
"name": "startedAt",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "sideEmissionCap",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint96",
"internalType": "uint96"
}
],
"stateMutability": "view"
},
{
"name": "token0",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "token0MaxQuantity",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint160",
"internalType": "uint160"
}
],
"stateMutability": "view"
},
{
"name": "token0QuantityLogWad",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint128",
"internalType": "uint128"
}
],
"stateMutability": "view"
},
{
"name": "token0StartQuantity",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint160",
"internalType": "uint160"
}
],
"stateMutability": "view"
},
{
"name": "token1",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "token1MaxQuantity",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint160",
"internalType": "uint160"
}
],
"stateMutability": "view"
},
{
"name": "token1QuantityLogWad",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint128",
"internalType": "uint128"
}
],
"stateMutability": "view"
},
{
"name": "token1StartQuantity",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint160",
"internalType": "uint160"
}
],
"stateMutability": "view"
},
{
"name": "totalAccrued",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "accrued",
"type": "uint96",
"internalType": "uint96"
}
],
"stateMutability": "view"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "payable"
}
]0x6102403461046757601f612f4138819003918201601f19168301916001600160401b0383118484101761046b5780849261018094604052833981010312610467576100498161047f565b6100556020830161047f565b906100626040840161047f565b926060810151936100756080830161047f565b9461008260a0840161047f565b60c08401516001600160601b03811691908281036104675760e08601519163ffffffff8316998a8403610467576100bc610100890161047f565b956100ca6101208a0161047f565b976100e56101606100de6101408d0161047f565b9b0161047f565b9a6001600160a01b0316968715610458576001600160a01b038d1615610449576001600160a01b0382161561043a5782158015610424575b801561040d575b6103ff571580156103f3575b6103e45761013e8989610493565b9b6101498c8c610493565b9d62278d00018062278d00116103d057670de0b6b3a764000081029062278d008115670de0b6b3a764000083850414170215610363575062278d0061018e91046105a4565b9780638b78c6d819555f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a360805260a05260c05260e05261010052610120526101405260018060801b031661016052610180526101a0526101c0526101e05260018060801b03166102005260018060801b03166102205260405161278790816107ba823960805181818161086601528181610e7a015281816117dc0152611a86015260a0518181816102d901528181610d6b015261160c015260c0518181816108960152610b8c015260e0518181816108bf01528181610f18015281816110a70152818161165301528181611953015261237c01526101005181818161048701528181610abd015281816110cf0152818161167b01528181611c5c01526123a4015261012051818181610327015281816112a5015281816113460152611ecf015261014051818181610db40152818161120201526113970152610160518181816107de015261127a015261018051818181610541015261172201526101a051818181610ded015261174401526101c05181818161058501526116b901526101e05181818161039d01526116db0152610200518181816102a00152611766015261022051818181610bce01526116fd0152f35b9062278d00670de0b6b3a76400005f198185098381108401900393098262278d0011156103c35761018e92828211900360f81b910360081c177f34b116baf3147468456110a980ec40d3fb0b5a3d0913b23a005a9e2036357345026105a4565b63ae47f7025f526004601cfd5b634e487b7160e01b5f52601160045260245ffd5b6301aa218760e01b5f5260045ffd5b5062278d008d10610130565b62820f3560e61b5f5260045ffd5b506040805185815286602082015220831415610124565b506001600160a01b03858116908516101561011d565b63dfde867160e01b5f5260045ffd5b631153ec7760e01b5f5260045ffd5b6349e27cff60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361046757565b906001600160a01b0382169081158015610591575b61050357670de0b6b3a76400006001600160a01b039190911681810293918185041481151783021561051257505090045b683635c9adc5dea000008110610503576104f2906105a4565b906001600160801b03821161050357565b63c6e11fdd60e01b5f5260045ffd5b82670de0b6b3a76400005f198184098681108701900392095f8490039092166001600160a01b031692818111156103c35783900480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f030401921190030217026104d9565b506001600160a01b0381168210156104a8565b6001600160801b03811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213156107ac577ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f1c806c465772b2bbbb5f824b15207a3001810260601d6d0388eaa27412d5aca026815d636e01810260601d6d0df99ac502031bf953eff472fdcc01810260601d6d13cdffb29d51d99322bdff5f221101810260601d6d0a0f742023def783a307a986912e01810260601d6d01920d8043ca89b5239253284e4201810260601d6c0b7a86d7375468fac667a0a527019060016c0504a838426634cdd8738f543560611b0319906cb9a025d814b29c212b8b1a07cd19816d02384773bdf1ac5676facced609019816c8c3f38e95a6b1ff2ab1c3b343619818080806c29508e458543d8aa4df2abee78010260601d6d0139601a2efabe717e604cbb4894010260601d6d02247f7a7b6594320649aa03aba1010260601d010260601d010260601d01020105711340daa0d5f769dba1915cef59f0815a55060290609f037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b631615e6385f526004601cfdfe60806040526004361015610011575f80fd5b5f3560e01c8062fbc02614610f6a57806308aa5ccd14610f475780630dfe168114610f035780630f66c21d14610ed0578063106c26d914610ea95780631303cda714610e655780632569296214610e1c578063262cf43014610dd857806332875ba114610d98578063345e49b514610bf2578063373e9a8e14610baf5780633e0dc34e14610b755780634dd6e1e314610b4e57806350b2e1c21461078257806354d1f13d14610b0a57806359bebdef146108205780635e7c1ce01461080257806360e1d161146107bf578063647ffad4146107a3578063676cb499146107875780636b8356d5146107825780636bac58f71461069d578063715018a6146106545780638da5cb5b146106285780639010aab6146105e75780639c9d69fe146105b4578063a31ddf1f14610570578063a9ea3ec51461052c578063aace50c5146104f6578063bf7dbf27146104b6578063d21220a714610472578063ed60f2a314610440578063f04e283e146103f3578063f05f4c22146103cc578063f1d3054514610388578063f2fde38b1461034b578063f50718b514610308578063f7c618c1146102c4578063fa32a89214610281578063fc3fec90146102115763fee81cf4146101db575f80fd5b3461020d57602036600319011261020d576101f4610f91565b63389a75e1600c525f52602080600c2054604051908152f35b5f80fd5b3461020d57606036600319011261020d576024356001600160a01b038116810361020d576044359063ffffffff8216820361020d576004355f52600460205260405f209060018060a01b03165f5260205263ffffffff60405f2091165f52602052602060405f2054604051908152f35b3461020d575f36600319011261020d5760206040516001600160801b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461020d575f36600319011261020d5760206040516001600160601b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b602036600319011261020d5761035f610f91565b610367612315565b8060601b1561037b5761037990612331565b005b637448fbae5f526004601cfd5b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461020d57606036600319011261020d576103796103e8610fa7565b6024356004356115cb565b602036600319011261020d57610407610f91565b61040f612315565b63389a75e1600c52805f526020600c209081544211610433575f6103799255612331565b636f5e88185f526004601cfd5b3461020d57602036600319011261020d576004355f526005602052602060018060a01b0360405f205416604051908152f35b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461020d57602036600319011261020d5760206104e16104dc6104d7610f91565b61236e565b611e8d565b925050506001600160601b0360405191168152f35b3461020d57602036600319011261020d5760206105176104dc6104d7610f91565b509150506001600160401b0360405191168152f35b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461020d57606036600319011261020d5760206105df6105d2610f91565b60443590602435906115a3565b604051908152f35b3461020d57602036600319011261020d5760406001600160401b036106106104dc6104d7610f91565b505063ffffffff849392935193168352166020820152f35b3461020d575f36600319011261020d57638b78c6d819546040516001600160a01b039091168152602090f35b5f36600319011261020d57610667612315565b5f638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35f638b78c6d81955005b3461020d57602036600319011261020d576004356001600160401b03811161020d573660238201121561020d578060040135906001600160401b03821161020d573660248360061b8301011161020d575f908215610773575f915b8383101561075e576107188360061b8301602460448201359101356117bd565b906001600160a01b03811680610736575050600190925b01916106f8565b9093916001600160a01b03160361074f5760019061072f565b63cf808fe360e01b5f5260045ffd5b6040516001600160a01b039091168152602090f35b63c2e5347d60e01b5f5260045ffd5b610fbd565b3461020d5760206105df61079a36610fda565b92919091611527565b3461020d5760206105df6107b636610fda565b9291909161136e565b3461020d575f36600319011261020d5760206040516001600160801b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461020d57602036600319011261020d5760206105df6004356111f5565b3461020d5760a036600319011261020d5760243561083c610fa7565b6064356001600160a01b0381169081810361020d576084359363ffffffff85169485810361020d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610afb577f000000000000000000000000000000000000000000000000000000000000000060043503610aed577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811690861690811496909590871580610aba575b610aab5761095e9688968715610aa0576109155f54611e8d565b94919096879a869c5f14610a9757600254955b151580610a88575b80610a76575b80610a64575b80610a52575b6109cf575b50505050505050155f1461096d57505f9150611ef4565b9015610968575f55005b600155005b6001600160401b0316156109be575b426001600160401b03169186156109a657806002540361099d575b50611ef4565b60025586610997565b80600354036109b55750611ef4565b60035586610997565b426001600160401b0316925061097c565b6109ee926109e8926001600160401b0342921690611527565b85611eb8565b92836109fc575b8080610947565b610a47959a50906001600160601b039392915f52600460205260405f20905f5260205263ffffffff60405f2091165f5260205260405f20610a3e828254611175565b905516906111d5565b9488808080806109f5565b506001600160401b0383164211610942565b506001600160401b038916151561093c565b506001600160401b0383161515610936565b5063ffffffff85161515610930565b60035495610928565b610915600154611e8d565b63dff2ee3960e01b5f5260045ffd5b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168714156108fb565b62820f3560e61b5f5260045ffd5b6322eb95cf60e21b5f5260045ffd5b5f36600319011261020d5763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b3461020d57604036600319011261020d5760206105df610b6c610f91565b60243590611182565b3461020d575f36600319011261020d5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461020d575f36600319011261020d5760206040516001600160801b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461020d57602036600319011261020d576004356001600160401b03811161020d573660238201121561020d5780600401356001600160401b03811161020d57366024606083028401011161020d578015610773575f915f905f5b83811015610d5c57606081028201602481013560646044830135920194610c7d610c7687611161565b8484611951565b916001600160a01b03821680610d26575b508215610d1857827f68328323bbb12cd4e9d6680575d0d8a5b45dd89313479ba6efea4fb1a9205f239492610cd3610ccd6001999896610d0e95611175565b9a611161565b6040805195865260208601969096526001600160a01b03908116958501959095529093166060830152608082019290925290819060a0820190565b0390a15b01610c4d565b965050505050600190610d12565b9099906001600160a01b0382169081610d455750505080985b8a610c8e565b919a9114610d3f5763cf808fe360e01b5f5260045ffd5b848380610d6557005b610379917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611c8c565b3461020d575f36600319011261020d57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5f36600319011261020d5763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461020d57604036600319011261020d5760206105df610ec7610f91565b60243590611118565b3461020d57604036600319011261020d576020610ef16024356004356117bd565b6040516001600160a01b039091168152f35b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461020d57602036600319011261020d5760206105df610f65610f91565b611099565b3461020d57604036600319011261020d5760206105df610f88610f91565b60243590611039565b600435906001600160a01b038216820361020d57565b604435906001600160a01b038216820361020d57565b3461020d575f36600319011261020d57602060405162278d008152f35b608090600319011261020d576004356001600160a01b038116810361020d579060243590604435906064356001600160a01b038116810361020d5790565b9190820391821161102557565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0361104d6104dc8361236e565b5091505016918215801561108f575b611076576110739261106d91611018565b90611182565b90565b506110819150611645565b50506001600160a01b031690565b508281111561105c565b6001600160a01b03908116907f0000000000000000000000000000000000000000000000000000000000000000168114611111577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461110b5763dff2ee3960e01b5f5260045ffd5b60035490565b5060025490565b61112c6104dc6001600160401b039261236e565b50915050169081158015611157575b611151576110739161114c91611018565b6111f5565b50505f90565b508181111561113b565b356001600160a01b038116810361020d5790565b9190820180921161102557565b61118b90611645565b9062278d008410156111c557506111b1611073936001600160801b036111b69316611d0d565b6123ec565b906001600160a01b0316611d80565b6001600160a01b03169392505050565b906001600160601b03809116911601906001600160601b03821161102557565b80156113695763ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681101561133b5762278d00018062278d001161102557670de0b6b3a764000081029062278d008115670de0b6b3a7640000838504141702156112ca575061127062278d006110739204611f37565b6001600160801b037f000000000000000000000000000000000000000000000000000000000000000016906001600160601b037f000000000000000000000000000000000000000000000000000000000000000016611e07565b62278d00670de0b6b3a76400005f19818409848110850190039209918162278d00111561132e576110739261127092828211900360f81b910360081c177f34b116baf3147468456110a980ec40d3fb0b5a3d0913b23a005a9e203635734502611f37565b63ae47f7025f526004601cfd5b506001600160601b037f00000000000000000000000000000000000000000000000000000000000000001690565b505f90565b90929192808411801590611516575b61150e5761138b8192611645565b63ffffffff95929391957f00000000000000000000000000000000000000000000000000000000000000001680831015611502578088116114fa575b506001600160a01b038681169490841693858510156114e3576113ed835f998484612152565b8085106114b2575b50888410806114a6575b611473575b505050858110611440575b50505061142861142261142e93946111f5565b916111f5565b90611018565b908181111561143b575090565b905090565b61142e94611467611428946114229461146261146d956114286114228d6111f5565b611e07565b90611175565b9361140f565b916114679161149294989362278d008b105f1461149b578a809a6122d8565b935f8080611404565b62278d00809a6122d8565b5062278d0084106113ff565b93975092808910156114d957506114d188975b6114286114228a6111f5565b96925f6113f5565b6114d190976114c5565b5050509350505050611428611422611073936111f5565b96505f6113c7565b50505050505050505f90565b505050505f90565b506001600160a01b0383161561137d565b9092916001600160401b0361153e6104dc8461236e565b50915050169384158015611599575b801561158f575b6115865784818161107397611578941061157e575b61157291611018565b92611018565b9161136e565b905080611569565b50505050505f90565b5080821115611554565b508482111561154d565b9091828111156115c457611073926115be6114289284611118565b92611118565b5050505f90565b6115d6838383611951565b809491941561163e577f68328323bbb12cd4e9d6680575d0d8a5b45dd89313479ba6efea4fb1a9205f239461163992610cd383837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611c8c565b0390a1565b5050505050565b6001600160a01b03908116907f000000000000000000000000000000000000000000000000000000000000000016811461171f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146116b75763dff2ee3960e01b5f5260045ffd5b7f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090565b507f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090565b90601f801991011681019081106001600160401b038211176117a957604052565b634e487b7160e01b5f52604160045260245ffd5b604051632a886cdb60e01b8152600481019190915260248101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169190602081604481865afa90811561190f575f9161191f575b505f818152600560205260409020546001600160a01b03168061191a575060206024936040519485809263141a615960e11b82528560048301525afa92831561190f575f936118cb575b506001600160a01b0383169081156118bc575f81815260056020526040812080546001600160a01b031916841790557f20504d07e89a94430e4a2ff6511a9ccd9e9cb991e4ad82890d4aaaa6ea3530cf9080a3565b63e9d1a52760e01b5f5260045ffd5b9092506020813d602011611907575b816118e760209383611788565b8101031261020d57516001600160a01b038116810361020d57915f611867565b3d91506118da565b6040513d5f823e3d90fd5b925050565b90506020813d602011611949575b8161193a60209383611788565b8101031261020d57515f61181d565b3d915061192d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416908114801595939492908680611c59575b610aab5763ffffffff8616938115611c4e576119ad5f54611e8d565b9092918194865f14611c45576002549b5b8a63ffffffff8616149c8d611c3b575b508c611c28575b9c8c9d895f52600460205260405f208b5f5260205260405f2063ffffffff8d165f5260205260405f20549d8e159081611c1f575b50611c0b57611a18908a6117bd565b9d80611bf9575b611a63575b50505050505050508415611a5b575f52600460205260405f20905f5260205263ffffffff60405f2091165f526020525f6040812055565b505f93505050565b604080516320b5afcb60e21b8152600481018b90526024810192909252816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa90811561190f578b905f905f93611b9b575b5063ffffffff161480611b89575b15611a2457611af492611aee926001600160401b0342921690611527565b82611eb8565b9081611b31575b505090611b1392916001600160401b03421690611ef4565b9015611b29575f555b5f80808080808080611a24565b600155611b1c565b611b1394506001600160601b03611b4f83611b57949d969596611175565b9b16906111d5565b91855f52600460205260405f20875f5260205260405f2063ffffffff89165f526020528960405f20559091925f611afb565b506001600160a01b0381161515611ad0565b925050506040813d604011611bf1575b81611bb860409383611788565b8101031261020d5780519063ffffffff8216820361020d5760200151906001600160a01b038216820361020d578b9063ffffffff611ac2565b3d9150611bab565b506001600160401b0383164211611a1f565b505f9d508d9c505050505050505050505050565b9050158f611a09565b6001600160401b03831615159c506119d5565b89149c505f6119ce565b6003549b6119be565b6119ad600154611e8d565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316831415611991565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f5114821615611cec575b60405215611ccc5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b906001811516611d0457823b15153d15161690611cc1565b503d5f823e3d90fd5b8181029162278d0081838504148315170215611d2e57505062278d00900490565b62278d00905f19818409848110850190039209908062278d00111561132e57828211900360f81b910360081c177f34b116baf3147468456110a980ec40d3fb0b5a3d0913b23a005a9e20363573450290565b81810291670de0b6b3a764000081838504148315170215611dab575050670de0b6b3a7640000900490565b670de0b6b3a7640000905f198184098481108501900392099080670de0b6b3a7640000111561132e57828211900360ee1b910360121c177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690290565b81810292918115828504821417830215611e22575050900490565b82905f1981840985811086019003920990825f038316928181111561132e5783900480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f0304019211900302170290565b9063ffffffff8216916001600160401b038160201c16916001600160401b038260601c169160a01c90565b6001600160601b0361142e91166001600160601b037f000000000000000000000000000000000000000000000000000000000000000016611018565b63ffffffff1660209190911b6bffffffffffffffff00000000161760609190911b67ffffffffffffffff60601b161760a09190911b6001600160a01b0319161790565b806001600160801b031060071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f821315612145577ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f1c806c465772b2bbbb5f824b15207a3001810260601d6d0388eaa27412d5aca026815d636e01810260601d6d0df99ac502031bf953eff472fdcc01810260601d6d13cdffb29d51d99322bdff5f221101810260601d6d0a0f742023def783a307a986912e01810260601d6d01920d8043ca89b5239253284e4201810260601d6c0b7a86d7375468fac667a0a5270190780a09507084cc699bb0e71ea869ffffffffffffffffffffffff19906cb9a025d814b29c212b8b1a07cd19816d02384773bdf1ac5676facced609019816c8c3f38e95a6b1ff2ab1c3b343619818080806c29508e458543d8aa4df2abee78010260601d6d0139601a2efabe717e604cbb4894010260601d6d02247f7a7b6594320649aa03aba1010260601d010260601d010260601d01020105711340daa0d5f769dba1915cef59f0815a55060290609f037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b631615e6385f526004601cfd5b6001600160a01b038281169391169083821115611586576001600160a01b03168110156122cd57670de0b6b3a7640000810291838215670de0b6b3a76400008486041417021561224b575050906121a99104611f37565b906001600160801b0381169062278d0083029282811562278d00838704141702156121d5575050900490565b6001600160801b038362278d005f1981850987811088019003930992845f031616928181111561132e5783900480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f0304019211900302170290565b83670de0b6b3a76400005f198185098581108601900393095f8590039091166001600160a01b0316918085111561132e57826121a9950480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f03040192119003021702611f37565b5050505062278d0090565b9290838111156115865784611428612300926122fa6112709761107399612569565b92612569565b6001600160a01b039182169290911690611e07565b638b78c6d81954330361232457565b6382b429005f526004601cfd5b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955565b6001600160a01b03908116907f00000000000000000000000000000000000000000000000000000000000000001681146123e6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146123e05763dff2ee3960e01b5f5260045ffd5b60015490565b505f5490565b68023f2fa8f6da5b9d281981131561136957680755bf798b4a1bf1e581121561254c576503782dace9d990604e1b0574029d9dc38563c32e5c2f6dc192ee70ef65f9978af36001605f1b6bb17217f7d1cf79abc9e3b3988360601b050160601d916bb17217f7d1cf79abc9e3b39883029003806c10fe68e7fd37d0007b713f765081010260601d6e05180bb14799ab47a8a8cb2a527d57826e02c72388d9f74f51a9331fed693f1419816db1bbb201f443cf962f1a1d3db4a5816d1a521255e34f6a5061b25ef1c9c319816d0277594991cfc85f6e2461837cd9816c240c330e9fb2d9cbaf0fd5aafb1981010260601d010260601d010260601d010260601d010260601d01916e0587f503bb6ea29d25fcb7401964506d360d7aeea093263ecc6e0ecb291760621b926d02d16720577bd19bf614176fe9ea810190836d01d3967ed30fc4f89c02bab57081199101010260601d01020105029060c3031c90565b63a37bfec95f526004601cfd5b600160ff1b8114611025575f0390565b6001600160801b031661257c8282611d0d565b9162278d00018062278d00116110255761259591611d0d565b90670de0b6b3a7640000820180921161102557816ec097ce7bc90715b34b9f10000000009280156127005783049260019184915b60108411156125eb5750505050906125e66111b161107393612559565b611d80565b9294919285800286158782048814171561102557670de0b6b3a7640000810290808204670de0b6b3a764000014901517156110255761262990612559565b671bc16d674ec800008301925f671bc16d674ec80000851291129080158216911516176110255761266e670de0b6b3a764000061266785978461272f565b0584612714565b8015612700576ec097ce7bc90715b34b9f100000000005938493670de0b6b3a7640000830292808405670de0b6b3a7640000149015171561102557831561270057600160ff1b83145f19851416611025576126e46126dd670de0b6b3a7640000959286936126eb960590612714565b809761272f565b059061272f565b05945f198114611025576001019290916125c9565b634e487b7160e01b5f52601260045260245ffd5b9190915f838201938412911290801582169115161761102557565b81810292915f8212600160ff1b8214166110255781840514901517156110255756fea2646970667358221220cb78f41e6307dd50b43996a2ec6b1993f17c4e965349997daa1bf112dade302b64736f6c634300081c0033000000000000000000000000f2de38643d0c35bb7250e7c78133ce07333c75db0000000000000000000000006cf19308c22fc82ea620fa0b3e94948d20f27b960000000000000000000000001da24f6bb623b9d1afeae3f3146659a2662d6d2742819cadfbb25aab80543236e280fba4e61aa61e0b5b777541de54ae69da35e40000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d168000000000000000000000000d0601ce157db5bdc3162bbac2a2c8af5320d9eec0000000000000000000000000000000000000000019d971e4fe8401e74000000000000000000000000000000000000000000000000000000000000000208c08000000000000000000000000000000000000000000000000000000000000f4240000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000010f0cf064dd59200000
0x60806040526004361015610011575f80fd5b5f3560e01c8062fbc02614610f6a57806308aa5ccd14610f475780630dfe168114610f035780630f66c21d14610ed0578063106c26d914610ea95780631303cda714610e655780632569296214610e1c578063262cf43014610dd857806332875ba114610d98578063345e49b514610bf2578063373e9a8e14610baf5780633e0dc34e14610b755780634dd6e1e314610b4e57806350b2e1c21461078257806354d1f13d14610b0a57806359bebdef146108205780635e7c1ce01461080257806360e1d161146107bf578063647ffad4146107a3578063676cb499146107875780636b8356d5146107825780636bac58f71461069d578063715018a6146106545780638da5cb5b146106285780639010aab6146105e75780639c9d69fe146105b4578063a31ddf1f14610570578063a9ea3ec51461052c578063aace50c5146104f6578063bf7dbf27146104b6578063d21220a714610472578063ed60f2a314610440578063f04e283e146103f3578063f05f4c22146103cc578063f1d3054514610388578063f2fde38b1461034b578063f50718b514610308578063f7c618c1146102c4578063fa32a89214610281578063fc3fec90146102115763fee81cf4146101db575f80fd5b3461020d57602036600319011261020d576101f4610f91565b63389a75e1600c525f52602080600c2054604051908152f35b5f80fd5b3461020d57606036600319011261020d576024356001600160a01b038116810361020d576044359063ffffffff8216820361020d576004355f52600460205260405f209060018060a01b03165f5260205263ffffffff60405f2091165f52602052602060405f2054604051908152f35b3461020d575f36600319011261020d5760206040516001600160801b037f000000000000000000000000000000000000000000000000bfba8da79e1e89b8168152f35b3461020d575f36600319011261020d576040517f0000000000000000000000001da24f6bb623b9d1afeae3f3146659a2662d6d276001600160a01b03168152602090f35b3461020d575f36600319011261020d5760206040516001600160601b037f0000000000000000000000000000000000000000019d971e4fe8401e74000000168152f35b602036600319011261020d5761035f610f91565b610367612315565b8060601b1561037b5761037990612331565b005b637448fbae5f526004601cfd5b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000010f0cf064dd592000006001600160a01b03168152602090f35b3461020d57606036600319011261020d576103796103e8610fa7565b6024356004356115cb565b602036600319011261020d57610407610f91565b61040f612315565b63389a75e1600c52805f526020600c209081544211610433575f6103799255612331565b636f5e88185f526004601cfd5b3461020d57602036600319011261020d576004355f526005602052602060018060a01b0360405f205416604051908152f35b3461020d575f36600319011261020d576040517f000000000000000000000000d0601ce157db5bdc3162bbac2a2c8af5320d9eec6001600160a01b03168152602090f35b3461020d57602036600319011261020d5760206104e16104dc6104d7610f91565b61236e565b611e8d565b925050506001600160601b0360405191168152f35b3461020d57602036600319011261020d5760206105176104dc6104d7610f91565b509150506001600160401b0360405191168152f35b3461020d575f36600319011261020d576040517f00000000000000000000000000000000000000000000000000000000000f42406001600160a01b03168152602090f35b3461020d575f36600319011261020d576040517f0000000000000000000000000000000000000000000000000de0b6b3a76400006001600160a01b03168152602090f35b3461020d57606036600319011261020d5760206105df6105d2610f91565b60443590602435906115a3565b604051908152f35b3461020d57602036600319011261020d5760406001600160401b036106106104dc6104d7610f91565b505063ffffffff849392935193168352166020820152f35b3461020d575f36600319011261020d57638b78c6d819546040516001600160a01b039091168152602090f35b5f36600319011261020d57610667612315565b5f638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35f638b78c6d81955005b3461020d57602036600319011261020d576004356001600160401b03811161020d573660238201121561020d578060040135906001600160401b03821161020d573660248360061b8301011161020d575f908215610773575f915b8383101561075e576107188360061b8301602460448201359101356117bd565b906001600160a01b03811680610736575050600190925b01916106f8565b9093916001600160a01b03160361074f5760019061072f565b63cf808fe360e01b5f5260045ffd5b6040516001600160a01b039091168152602090f35b63c2e5347d60e01b5f5260045ffd5b610fbd565b3461020d5760206105df61079a36610fda565b92919091611527565b3461020d5760206105df6107b636610fda565b9291909161136e565b3461020d575f36600319011261020d5760206040516001600160801b037f00000000000000000000000000000000000000000000000024c9dc0915c478cd168152f35b3461020d57602036600319011261020d5760206105df6004356111f5565b3461020d5760a036600319011261020d5760243561083c610fa7565b6064356001600160a01b0381169081810361020d576084359363ffffffff85169485810361020d577f0000000000000000000000006cf19308c22fc82ea620fa0b3e94948d20f27b966001600160a01b03163303610afb577f42819cadfbb25aab80543236e280fba4e61aa61e0b5b777541de54ae69da35e460043503610aed577f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b0390811690861690811496909590871580610aba575b610aab5761095e9688968715610aa0576109155f54611e8d565b94919096879a869c5f14610a9757600254955b151580610a88575b80610a76575b80610a64575b80610a52575b6109cf575b50505050505050155f1461096d57505f9150611ef4565b9015610968575f55005b600155005b6001600160401b0316156109be575b426001600160401b03169186156109a657806002540361099d575b50611ef4565b60025586610997565b80600354036109b55750611ef4565b60035586610997565b426001600160401b0316925061097c565b6109ee926109e8926001600160401b0342921690611527565b85611eb8565b92836109fc575b8080610947565b610a47959a50906001600160601b039392915f52600460205260405f20905f5260205263ffffffff60405f2091165f5260205260405f20610a3e828254611175565b905516906111d5565b9488808080806109f5565b506001600160401b0383164211610942565b506001600160401b038916151561093c565b506001600160401b0383161515610936565b5063ffffffff85161515610930565b60035495610928565b610915600154611e8d565b63dff2ee3960e01b5f5260045ffd5b507f000000000000000000000000d0601ce157db5bdc3162bbac2a2c8af5320d9eec6001600160a01b03168714156108fb565b62820f3560e61b5f5260045ffd5b6322eb95cf60e21b5f5260045ffd5b5f36600319011261020d5763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b3461020d57604036600319011261020d5760206105df610b6c610f91565b60243590611182565b3461020d575f36600319011261020d5760206040517f42819cadfbb25aab80543236e280fba4e61aa61e0b5b777541de54ae69da35e48152f35b3461020d575f36600319011261020d5760206040516001600160801b037f00000000000000000000000000000000000000000000000076332614e1bd8d72168152f35b3461020d57602036600319011261020d576004356001600160401b03811161020d573660238201121561020d5780600401356001600160401b03811161020d57366024606083028401011161020d578015610773575f915f905f5b83811015610d5c57606081028201602481013560646044830135920194610c7d610c7687611161565b8484611951565b916001600160a01b03821680610d26575b508215610d1857827f68328323bbb12cd4e9d6680575d0d8a5b45dd89313479ba6efea4fb1a9205f239492610cd3610ccd6001999896610d0e95611175565b9a611161565b6040805195865260208601969096526001600160a01b03908116958501959095529093166060830152608082019290925290819060a0820190565b0390a15b01610c4d565b965050505050600190610d12565b9099906001600160a01b0382169081610d455750505080985b8a610c8e565b919a9114610d3f5763cf808fe360e01b5f5260045ffd5b848380610d6557005b610379917f0000000000000000000000001da24f6bb623b9d1afeae3f3146659a2662d6d276001600160a01b0316611c8c565b3461020d575f36600319011261020d57602060405163ffffffff7f000000000000000000000000000000000000000000000000000000000208c080168152f35b3461020d575f36600319011261020d576040517f000000000000000000000000000000000000000000000000000000e8d4a510006001600160a01b03168152602090f35b5f36600319011261020d5763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b3461020d575f36600319011261020d576040517f0000000000000000000000006cf19308c22fc82ea620fa0b3e94948d20f27b966001600160a01b03168152602090f35b3461020d57604036600319011261020d5760206105df610ec7610f91565b60243590611118565b3461020d57604036600319011261020d576020610ef16024356004356117bd565b6040516001600160a01b039091168152f35b3461020d575f36600319011261020d576040517f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b03168152602090f35b3461020d57602036600319011261020d5760206105df610f65610f91565b611099565b3461020d57604036600319011261020d5760206105df610f88610f91565b60243590611039565b600435906001600160a01b038216820361020d57565b604435906001600160a01b038216820361020d57565b3461020d575f36600319011261020d57602060405162278d008152f35b608090600319011261020d576004356001600160a01b038116810361020d579060243590604435906064356001600160a01b038116810361020d5790565b9190820391821161102557565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0361104d6104dc8361236e565b5091505016918215801561108f575b611076576110739261106d91611018565b90611182565b90565b506110819150611645565b50506001600160a01b031690565b508281111561105c565b6001600160a01b03908116907f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d168168114611111577f000000000000000000000000d0601ce157db5bdc3162bbac2a2c8af5320d9eec6001600160a01b03161461110b5763dff2ee3960e01b5f5260045ffd5b60035490565b5060025490565b61112c6104dc6001600160401b039261236e565b50915050169081158015611157575b611151576110739161114c91611018565b6111f5565b50505f90565b508181111561113b565b356001600160a01b038116810361020d5790565b9190820180921161102557565b61118b90611645565b9062278d008410156111c557506111b1611073936001600160801b036111b69316611d0d565b6123ec565b906001600160a01b0316611d80565b6001600160a01b03169392505050565b906001600160601b03809116911601906001600160601b03821161102557565b80156113695763ffffffff7f000000000000000000000000000000000000000000000000000000000208c0801681101561133b5762278d00018062278d001161102557670de0b6b3a764000081029062278d008115670de0b6b3a7640000838504141702156112ca575061127062278d006110739204611f37565b6001600160801b037f00000000000000000000000000000000000000000000000024c9dc0915c478cd16906001600160601b037f0000000000000000000000000000000000000000019d971e4fe8401e7400000016611e07565b62278d00670de0b6b3a76400005f19818409848110850190039209918162278d00111561132e576110739261127092828211900360f81b910360081c177f34b116baf3147468456110a980ec40d3fb0b5a3d0913b23a005a9e203635734502611f37565b63ae47f7025f526004601cfd5b506001600160601b037f0000000000000000000000000000000000000000019d971e4fe8401e740000001690565b505f90565b90929192808411801590611516575b61150e5761138b8192611645565b63ffffffff95929391957f000000000000000000000000000000000000000000000000000000000208c0801680831015611502578088116114fa575b506001600160a01b038681169490841693858510156114e3576113ed835f998484612152565b8085106114b2575b50888410806114a6575b611473575b505050858110611440575b50505061142861142261142e93946111f5565b916111f5565b90611018565b908181111561143b575090565b905090565b61142e94611467611428946114229461146261146d956114286114228d6111f5565b611e07565b90611175565b9361140f565b916114679161149294989362278d008b105f1461149b578a809a6122d8565b935f8080611404565b62278d00809a6122d8565b5062278d0084106113ff565b93975092808910156114d957506114d188975b6114286114228a6111f5565b96925f6113f5565b6114d190976114c5565b5050509350505050611428611422611073936111f5565b96505f6113c7565b50505050505050505f90565b505050505f90565b506001600160a01b0383161561137d565b9092916001600160401b0361153e6104dc8461236e565b50915050169384158015611599575b801561158f575b6115865784818161107397611578941061157e575b61157291611018565b92611018565b9161136e565b905080611569565b50505050505f90565b5080821115611554565b508482111561154d565b9091828111156115c457611073926115be6114289284611118565b92611118565b5050505f90565b6115d6838383611951565b809491941561163e577f68328323bbb12cd4e9d6680575d0d8a5b45dd89313479ba6efea4fb1a9205f239461163992610cd383837f0000000000000000000000001da24f6bb623b9d1afeae3f3146659a2662d6d276001600160a01b0316611c8c565b0390a1565b5050505050565b6001600160a01b03908116907f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d16816811461171f577f000000000000000000000000d0601ce157db5bdc3162bbac2a2c8af5320d9eec6001600160a01b0316146116b75763dff2ee3960e01b5f5260045ffd5b7f0000000000000000000000000000000000000000000000000de0b6b3a7640000907f00000000000000000000000000000000000000000000010f0cf064dd59200000907f00000000000000000000000000000000000000000000000076332614e1bd8d7290565b507f00000000000000000000000000000000000000000000000000000000000f4240907f000000000000000000000000000000000000000000000000000000e8d4a51000907f000000000000000000000000000000000000000000000000bfba8da79e1e89b890565b90601f801991011681019081106001600160401b038211176117a957604052565b634e487b7160e01b5f52604160045260245ffd5b604051632a886cdb60e01b8152600481019190915260248101919091527f0000000000000000000000006cf19308c22fc82ea620fa0b3e94948d20f27b966001600160a01b03169190602081604481865afa90811561190f575f9161191f575b505f818152600560205260409020546001600160a01b03168061191a575060206024936040519485809263141a615960e11b82528560048301525afa92831561190f575f936118cb575b506001600160a01b0383169081156118bc575f81815260056020526040812080546001600160a01b031916841790557f20504d07e89a94430e4a2ff6511a9ccd9e9cb991e4ad82890d4aaaa6ea3530cf9080a3565b63e9d1a52760e01b5f5260045ffd5b9092506020813d602011611907575b816118e760209383611788565b8101031261020d57516001600160a01b038116810361020d57915f611867565b3d91506118da565b6040513d5f823e3d90fd5b925050565b90506020813d602011611949575b8161193a60209383611788565b8101031261020d57515f61181d565b3d915061192d565b7f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1686001600160a01b03908116908416908114801595939492908680611c59575b610aab5763ffffffff8616938115611c4e576119ad5f54611e8d565b9092918194865f14611c45576002549b5b8a63ffffffff8616149c8d611c3b575b508c611c28575b9c8c9d895f52600460205260405f208b5f5260205260405f2063ffffffff8d165f5260205260405f20549d8e159081611c1f575b50611c0b57611a18908a6117bd565b9d80611bf9575b611a63575b50505050505050508415611a5b575f52600460205260405f20905f5260205263ffffffff60405f2091165f526020525f6040812055565b505f93505050565b604080516320b5afcb60e21b8152600481018b90526024810192909252816044817f0000000000000000000000006cf19308c22fc82ea620fa0b3e94948d20f27b966001600160a01b03165afa90811561190f578b905f905f93611b9b575b5063ffffffff161480611b89575b15611a2457611af492611aee926001600160401b0342921690611527565b82611eb8565b9081611b31575b505090611b1392916001600160401b03421690611ef4565b9015611b29575f555b5f80808080808080611a24565b600155611b1c565b611b1394506001600160601b03611b4f83611b57949d969596611175565b9b16906111d5565b91855f52600460205260405f20875f5260205260405f2063ffffffff89165f526020528960405f20559091925f611afb565b506001600160a01b0381161515611ad0565b925050506040813d604011611bf1575b81611bb860409383611788565b8101031261020d5780519063ffffffff8216820361020d5760200151906001600160a01b038216820361020d578b9063ffffffff611ac2565b3d9150611bab565b506001600160401b0383164211611a1f565b505f9d508d9c505050505050505050505050565b9050158f611a09565b6001600160401b03831615159c506119d5565b89149c505f6119ce565b6003549b6119be565b6119ad600154611e8d565b507f000000000000000000000000d0601ce157db5bdc3162bbac2a2c8af5320d9eec6001600160a01b0316831415611991565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f5114821615611cec575b60405215611ccc5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b906001811516611d0457823b15153d15161690611cc1565b503d5f823e3d90fd5b8181029162278d0081838504148315170215611d2e57505062278d00900490565b62278d00905f19818409848110850190039209908062278d00111561132e57828211900360f81b910360081c177f34b116baf3147468456110a980ec40d3fb0b5a3d0913b23a005a9e20363573450290565b81810291670de0b6b3a764000081838504148315170215611dab575050670de0b6b3a7640000900490565b670de0b6b3a7640000905f198184098481108501900392099080670de0b6b3a7640000111561132e57828211900360ee1b910360121c177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690290565b81810292918115828504821417830215611e22575050900490565b82905f1981840985811086019003920990825f038316928181111561132e5783900480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f0304019211900302170290565b9063ffffffff8216916001600160401b038160201c16916001600160401b038260601c169160a01c90565b6001600160601b0361142e91166001600160601b037f0000000000000000000000000000000000000000019d971e4fe8401e7400000016611018565b63ffffffff1660209190911b6bffffffffffffffff00000000161760609190911b67ffffffffffffffff60601b161760a09190911b6001600160a01b0319161790565b806001600160801b031060071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f821315612145577ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f1c806c465772b2bbbb5f824b15207a3001810260601d6d0388eaa27412d5aca026815d636e01810260601d6d0df99ac502031bf953eff472fdcc01810260601d6d13cdffb29d51d99322bdff5f221101810260601d6d0a0f742023def783a307a986912e01810260601d6d01920d8043ca89b5239253284e4201810260601d6c0b7a86d7375468fac667a0a5270190780a09507084cc699bb0e71ea869ffffffffffffffffffffffff19906cb9a025d814b29c212b8b1a07cd19816d02384773bdf1ac5676facced609019816c8c3f38e95a6b1ff2ab1c3b343619818080806c29508e458543d8aa4df2abee78010260601d6d0139601a2efabe717e604cbb4894010260601d6d02247f7a7b6594320649aa03aba1010260601d010260601d010260601d01020105711340daa0d5f769dba1915cef59f0815a55060290609f037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b631615e6385f526004601cfd5b6001600160a01b038281169391169083821115611586576001600160a01b03168110156122cd57670de0b6b3a7640000810291838215670de0b6b3a76400008486041417021561224b575050906121a99104611f37565b906001600160801b0381169062278d0083029282811562278d00838704141702156121d5575050900490565b6001600160801b038362278d005f1981850987811088019003930992845f031616928181111561132e5783900480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f0304019211900302170290565b83670de0b6b3a76400005f198185098581108601900393095f8590039091166001600160a01b0316918085111561132e57826121a9950480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f03040192119003021702611f37565b5050505062278d0090565b9290838111156115865784611428612300926122fa6112709761107399612569565b92612569565b6001600160a01b039182169290911690611e07565b638b78c6d81954330361232457565b6382b429005f526004601cfd5b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955565b6001600160a01b03908116907f0000000000000000000000005fc5360d0400a0fd4f2af552add042d716f1d1681681146123e6577f000000000000000000000000d0601ce157db5bdc3162bbac2a2c8af5320d9eec6001600160a01b0316146123e05763dff2ee3960e01b5f5260045ffd5b60015490565b505f5490565b68023f2fa8f6da5b9d281981131561136957680755bf798b4a1bf1e581121561254c576503782dace9d990604e1b0574029d9dc38563c32e5c2f6dc192ee70ef65f9978af36001605f1b6bb17217f7d1cf79abc9e3b3988360601b050160601d916bb17217f7d1cf79abc9e3b39883029003806c10fe68e7fd37d0007b713f765081010260601d6e05180bb14799ab47a8a8cb2a527d57826e02c72388d9f74f51a9331fed693f1419816db1bbb201f443cf962f1a1d3db4a5816d1a521255e34f6a5061b25ef1c9c319816d0277594991cfc85f6e2461837cd9816c240c330e9fb2d9cbaf0fd5aafb1981010260601d010260601d010260601d010260601d010260601d01916e0587f503bb6ea29d25fcb7401964506d360d7aeea093263ecc6e0ecb291760621b926d02d16720577bd19bf614176fe9ea810190836d01d3967ed30fc4f89c02bab57081199101010260601d01020105029060c3031c90565b63a37bfec95f526004601cfd5b600160ff1b8114611025575f0390565b6001600160801b031661257c8282611d0d565b9162278d00018062278d00116110255761259591611d0d565b90670de0b6b3a7640000820180921161102557816ec097ce7bc90715b34b9f10000000009280156127005783049260019184915b60108411156125eb5750505050906125e66111b161107393612559565b611d80565b9294919285800286158782048814171561102557670de0b6b3a7640000810290808204670de0b6b3a764000014901517156110255761262990612559565b671bc16d674ec800008301925f671bc16d674ec80000851291129080158216911516176110255761266e670de0b6b3a764000061266785978461272f565b0584612714565b8015612700576ec097ce7bc90715b34b9f100000000005938493670de0b6b3a7640000830292808405670de0b6b3a7640000149015171561102557831561270057600160ff1b83145f19851416611025576126e46126dd670de0b6b3a7640000959286936126eb960590612714565b809761272f565b059061272f565b05945f198114611025576001019290916125c9565b634e487b7160e01b5f52601260045260245ffd5b9190915f838201938412911290801582169115161761102557565b81810292915f8212600160ff1b8214166110255781840514901517156110255756fea2646970667358221220cb78f41e6307dd50b43996a2ec6b1993f17c4e965349997daa1bf112dade302b64736f6c634300081c0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| Deepstate (DEEP) | DEEP | 969,175,774.705446 | — | — |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x29bde3…bb78f0 | registerClaimants | 39,241,267 | 5 secs agoMon, 17 Aug 2026 23:44:21 UTC | 0xb52e…714c | IN | DeepstateRewarder | $0.000 ETH | 0.00000110 | |
| 0x2a0bd7…05b9d3 | registerClaimant | 39,241,264 | 5 secs agoMon, 17 Aug 2026 23:44:21 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000106 | |
| 0x4b7bdd…57f62d | distributeRewardsBatch | 39,241,224 | 9 secs agoMon, 17 Aug 2026 23:44:17 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000088 | |
| 0x0c53ec…38be7d | registerClaimant | 39,241,212 | 10 secs agoMon, 17 Aug 2026 23:44:16 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000106 | |
| 0x5326a0…cfd261 | registerClaimants | 39,241,203 | 11 secs agoMon, 17 Aug 2026 23:44:15 UTC | 0xb52e…714c | IN | DeepstateRewarder | $0.000 ETH | 0.00000108 | |
| 0x75d7f1…517d8f | registerClaimant | 39,241,165 | 15 secs agoMon, 17 Aug 2026 23:44:11 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000106 | |
| 0x1feaa2…5278ce | registerClaimant | 39,241,112 | 20 secs agoMon, 17 Aug 2026 23:44:06 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000107 | |
| 0x3be4fa…1898c5 | registerClaimant | 39,241,082 | 23 secs agoMon, 17 Aug 2026 23:44:03 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000106 | |
| 0xdcaeda…a091e8 | registerClaimant | 39,241,057 | 26 secs agoMon, 17 Aug 2026 23:44:00 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000108 | |
| 0xff09fc…3cd313 | distributeRewardsBatch | 39,241,023 | 29 secs agoMon, 17 Aug 2026 23:43:57 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000070 | |
| 0xb36182…3d0d42 | registerClaimants | 39,241,021 | 29 secs agoMon, 17 Aug 2026 23:43:57 UTC | 0x9955…bee0 | IN | DeepstateRewarder | $0.000 ETH | 0.00000131 | |
| 0xe75e99…9349ae | registerClaimant | 39,240,983 | 33 secs agoMon, 17 Aug 2026 23:43:53 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000107 | |
| 0x97f330…5c89f7 | distributeRewards | 39,240,829 | 49 secs agoMon, 17 Aug 2026 23:43:37 UTC | 0x44cc…a504 | IN | DeepstateRewarder | $0.000 ETH | 0.00000062 | |
| 0x64f3fd…0ceb44 | distributeRewardsBatch | 39,240,823 | 49 secs agoMon, 17 Aug 2026 23:43:37 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000061 | |
| 0x6e7de7…2a012b | registerClaimant | 39,240,784 | 53 secs agoMon, 17 Aug 2026 23:43:33 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000106 | |
| 0x5f701d…a5b882 | registerClaimant | 39,240,763 | 55 secs agoMon, 17 Aug 2026 23:43:31 UTC | 0xff06…12bd | IN | DeepstateRewarder | $0.000 ETH | 0.00000105 | |
| 0xbacd76…ba3a77 | distributeRewardsBatch | 39,240,425 | 1 min agoMon, 17 Aug 2026 23:42:57 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000096 | |
| 0x40e4f1…57d8b6 | registerClaimant | 39,240,415 | 1 min agoMon, 17 Aug 2026 23:42:56 UTC | 0x44cc…a504 | IN | DeepstateRewarder | $0.000 ETH | 0.00000105 | |
| 0x62e77a…5ed588 | registerClaimant | 39,240,406 | 1 min agoMon, 17 Aug 2026 23:42:55 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000106 | |
| 0x57c18a…b4765d | registerClaimant | 39,240,359 | 1 min agoMon, 17 Aug 2026 23:42:50 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000106 | |
| 0xc3f210…207df2 | registerClaimant | 39,240,319 | 1 min agoMon, 17 Aug 2026 23:42:46 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000106 | |
| 0x1c0120…c4350e | registerClaimant | 39,240,279 | 1 min agoMon, 17 Aug 2026 23:42:42 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000107 | |
| 0xf7c33b…b4f49c | registerClaimant | 39,240,237 | 1 min agoMon, 17 Aug 2026 23:42:38 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000105 | |
| 0xe6e9e8…b98849 | distributeRewardsBatch | 39,240,226 | 1 min agoMon, 17 Aug 2026 23:42:37 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000078 | |
| 0x76b87a…dcb633 | registerClaimant | 39,240,202 | 1 min agoMon, 17 Aug 2026 23:42:34 UTC | 0x8c24…205c | IN | DeepstateRewarder | $0.000 ETH | 0.00000108 |
| 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 | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x7358b8fa…b5cafb | Transfer | 39,239,767 | 2 mins agoMon, 17 Aug 2026 23:41:51 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,476.452879 DEEP | Deepstate (DEEP) | |
| 0x089bedd3…b10640 | Transfer | 39,237,953 | 5 mins agoMon, 17 Aug 2026 23:38:48 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,478.041125 DEEP | Deepstate (DEEP) | |
| 0x15e55186…b56345 | Transfer | 39,236,117 | 8 mins agoMon, 17 Aug 2026 23:35:45 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,345.856792 DEEP | Deepstate (DEEP) | |
| 0x7335a3bb…a9e134 | Transfer | 39,234,304 | 11 mins agoMon, 17 Aug 2026 23:32:43 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,347.428134 DEEP | Deepstate (DEEP) | |
| 0x98d097c0…79dd8a | Transfer | 39,234,212 | 11 mins agoMon, 17 Aug 2026 23:32:34 UTC | 0xe85a…56d7 | OUT | 0xf91f…4690 | 133.793251 DEEP | Deepstate (DEEP) | |
| 0xc3b1e106…2187e3 | Transfer | 39,232,480 | 14 mins agoMon, 17 Aug 2026 23:29:41 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,482.789733 DEEP | Deepstate (DEEP) | |
| 0x30ffb126…47a54b | Transfer | 39,230,661 | 17 mins agoMon, 17 Aug 2026 23:26:38 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,350.580062 DEEP | Deepstate (DEEP) | |
| 0x111192b4…4a6fc5 | Transfer | 39,228,830 | 20 mins agoMon, 17 Aug 2026 23:23:36 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,485.959390 DEEP | Deepstate (DEEP) | |
| 0x0daba006…c135dd | Transfer | 39,227,010 | 23 mins agoMon, 17 Aug 2026 23:20:33 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,487.548869 DEEP | Deepstate (DEEP) | |
| 0xfaf12d31…aa442d | Transfer | 39,225,177 | 26 mins agoMon, 17 Aug 2026 23:17:30 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,622.963352 DEEP | Deepstate (DEEP) | |
| 0x59fdae0b…e7cd4a | Transfer | 39,224,824 | 27 mins agoMon, 17 Aug 2026 23:16:54 UTC | 0xe85a…56d7 | OUT | 0xde5c…85cc | 42,524.505468 DEEP | Deepstate (DEEP) | |
| 0x8b226ec2…bc894b | Transfer | 39,223,351 | 30 mins agoMon, 17 Aug 2026 23:14:26 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,624.570668 DEEP | Deepstate (DEEP) | |
| 0x44d46a6e…2f12c8 | Transfer | 39,221,502 | 33 mins agoMon, 17 Aug 2026 23:11:22 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,224.651528 DEEP | Deepstate (DEEP) | |
| 0xc8f52164…c0f28c | Transfer | 39,219,703 | 36 mins agoMon, 17 Aug 2026 23:08:21 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 24,226.207262 DEEP | Deepstate (DEEP) | |
| 0x74e788ab…d0ae9f | Transfer | 39,217,886 | 39 mins agoMon, 17 Aug 2026 23:05:20 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 1,674.903777 DEEP | Deepstate (DEEP) | |
| 0x9bcbc913…6b39ab | Transfer | 39,217,635 | 39 mins agoMon, 17 Aug 2026 23:04:55 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 1,741.915706 DEEP | Deepstate (DEEP) | |
| 0x07798cc6…8b5144 | Transfer | 39,217,376 | 39 mins agoMon, 17 Aug 2026 23:04:29 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 3,148.888448 DEEP | Deepstate (DEEP) | |
| 0x5f2bf829…ad88d8 | Transfer | 39,216,907 | 40 mins agoMon, 17 Aug 2026 23:03:42 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 6,431.935504 DEEP | Deepstate (DEEP) | |
| 0x040704f8…e89bff | Transfer | 39,215,961 | 42 mins agoMon, 17 Aug 2026 23:02:06 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 6,164.144013 DEEP | Deepstate (DEEP) | |
| 0x2156eb0b…c99214 | Transfer | 39,215,046 | 43 mins agoMon, 17 Aug 2026 23:00:34 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 12,261.885383 DEEP | Deepstate (DEEP) | |
| 0x6d232b73…10c823 | Transfer | 39,213,202 | 46 mins agoMon, 17 Aug 2026 22:57:31 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 12,396.705371 DEEP | Deepstate (DEEP) | |
| 0xc493349f…9a0b4e | Transfer | 39,211,564 | 49 mins agoMon, 17 Aug 2026 22:54:46 UTC | 0xe85a…56d7 | OUT | 0x2b3b…b717 | 9,295.154558 DEEP | Deepstate (DEEP) | |
| 0xd7c9a2ac…cdc322 | Transfer | 39,211,370 | 50 mins agoMon, 17 Aug 2026 22:54:26 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 12,196.472825 DEEP | Deepstate (DEEP) | |
| 0xe69ce823…f5a1bd | Transfer | 39,209,538 | 53 mins agoMon, 17 Aug 2026 22:51:24 UTC | 0xe85a…56d7 | OUT | 0x2acb…0706 | 12,264.281637 DEEP | Deepstate (DEEP) | |
| 0xe3170284…c442ae | Transfer | 39,208,041 | 55 mins agoMon, 17 Aug 2026 22:48:53 UTC | 0xe85a…56d7 | OUT | 0xedea…6ad1 | 468.216181 DEEP | Deepstate (DEEP) |
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x29bde3…bb78f0 | 6 secs agoMon, 17 Aug 2026 23:44:21 UTC | 0x20504d…30cf | [0] 0xd7d401cec369…39391877 [1] 0x000000000000…a76c714c |
| 0x2a0bd7…05b9d3 | 6 secs agoMon, 17 Aug 2026 23:44:21 UTC | 0x20504d…30cf | [0] 0x3853bb3b710b…b87ad751 [1] 0x000000000000…1ebe205c |
| 0x0c53ec…38be7d | 11 secs agoMon, 17 Aug 2026 23:44:16 UTC | 0x20504d…30cf | [0] 0xffae7dab1d42…20a00076 [1] 0x000000000000…1ebe205c |
| 0x5326a0…cfd261 | 12 secs agoMon, 17 Aug 2026 23:44:15 UTC | 0x20504d…30cf | [0] 0xde7e374ccc6a…42f90532 [1] 0x000000000000…a76c714c |
| 0x75d7f1…517d8f | 16 secs agoMon, 17 Aug 2026 23:44:11 UTC | 0x20504d…30cf | [0] 0x24e56382e96f…ea023aa3 [1] 0x000000000000…1ebe205c |
| 0x1feaa2…5278ce | 21 secs agoMon, 17 Aug 2026 23:44:06 UTC | 0x20504d…30cf | [0] 0xfb084b3122ac…f4d68e5b [1] 0x000000000000…1ebe205c |
| 0x3be4fa…1898c5 | 24 secs agoMon, 17 Aug 2026 23:44:03 UTC | 0x20504d…30cf | [0] 0x131d3377b4c2…9b5027ea [1] 0x000000000000…1ebe205c |
| 0xdcaeda…a091e8 | 27 secs agoMon, 17 Aug 2026 23:44:00 UTC | 0x20504d…30cf | [0] 0x0db20fd6e664…917165a5 [1] 0x000000000000…1ebe205c |
| 0xe75e99…9349ae | 34 secs agoMon, 17 Aug 2026 23:43:53 UTC | 0x20504d…30cf | [0] 0xbfe990ea540f…2b39ede7 [1] 0x000000000000…1ebe205c |
| 0x6e7de7…2a012b | 54 secs agoMon, 17 Aug 2026 23:43:33 UTC | 0x20504d…30cf | [0] 0xb8d629e4a874…d4d522d4 [1] 0x000000000000…1ebe205c |
| 0x5f701d…a5b882 | 56 secs agoMon, 17 Aug 2026 23:43:31 UTC | 0x20504d…30cf | [0] 0x1b45328a4968…adeac5ec [1] 0x000000000000…b1ea12bd |
| 0x40e4f1…57d8b6 | 1 min agoMon, 17 Aug 2026 23:42:56 UTC | 0x20504d…30cf | [0] 0x0a909b66a63a…1f54e292 [1] 0x000000000000…b587a504 |
| 0x62e77a…5ed588 | 1 min agoMon, 17 Aug 2026 23:42:55 UTC | 0x20504d…30cf | [0] 0x369d08ec11a9…8d07c6a8 [1] 0x000000000000…1ebe205c |
| 0x57c18a…b4765d | 1 min agoMon, 17 Aug 2026 23:42:50 UTC | 0x20504d…30cf | [0] 0x3bd965ed154f…f316e7b7 [1] 0x000000000000…1ebe205c |
| 0xc3f210…207df2 | 1 min agoMon, 17 Aug 2026 23:42:46 UTC | 0x20504d…30cf | [0] 0x275e0d99ea0b…f00af688 [1] 0x000000000000…1ebe205c |
| 0x1c0120…c4350e | 1 min agoMon, 17 Aug 2026 23:42:42 UTC | 0x20504d…30cf | [0] 0x89fade6f7f48…630ba26a [1] 0x000000000000…1ebe205c |
| 0xf7c33b…b4f49c | 1 min agoMon, 17 Aug 2026 23:42:38 UTC | 0x20504d…30cf | [0] 0xe1ec965c1a72…26397c00 [1] 0x000000000000…1ebe205c |
| 0x76b87a…dcb633 | 1 min agoMon, 17 Aug 2026 23:42:34 UTC | 0x20504d…30cf | [0] 0x7ecb7b990fe3…1cf4ab01 [1] 0x000000000000…1ebe205c |
| 0x284ac4…ba8363 | 1 min agoMon, 17 Aug 2026 23:42:32 UTC | 0x20504d…30cf | [0] 0x07977a63fa15…911e936a [1] 0x000000000000…1ebe205c |
| 0xf02e07…c8c56d | 2 mins agoMon, 17 Aug 2026 23:42:26 UTC | 0x20504d…30cf | [0] 0x228585a1bb1a…ecaaec2a [1] 0x000000000000…1ebe205c |
| 0xdc72cb…1008e2 | 2 mins agoMon, 17 Aug 2026 23:42:12 UTC | 0x20504d…30cf | [0] 0x2a9f1ba7ed0c…36ed100a [1] 0x000000000000…1ebe205c |
| 0xd439ae…afaf56 | 2 mins agoMon, 17 Aug 2026 23:42:05 UTC | 0x20504d…30cf | [0] 0xa0dce12ee3ee…2d814bb3 [1] 0x000000000000…1ebe205c |
| 0xe42b6d…9a5aaa | 2 mins agoMon, 17 Aug 2026 23:41:57 UTC | 0x20504d…30cf | [0] 0xd183873ced12…c947dbaa [1] 0x000000000000…1ebe205c |
| 0x346237…60d48e | 2 mins agoMon, 17 Aug 2026 23:41:55 UTC | 0x20504d…30cf | [0] 0x655641b3c202…2436f29f [1] 0x000000000000…b587a504 |
| 0xff690e…620499 | 2 mins agoMon, 17 Aug 2026 23:41:52 UTC | 0x20504d…30cf | [0] 0x69488637e09f…83958df6 [1] 0x000000000000…1ebe205c |