pragma solidity 0.8.26;
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
interface IClockInSnapshotRegistry {
function finalized() external view returns (bool);
function totalEligibleWeight() external view returns (uint256);
function leaf(address account, uint256 brokerTokenId, uint256 weight) external pure returns (bytes32);
function verify(address account, uint256 brokerTokenId, uint256 weight, bytes32[] calldata proof)
external
view
returns (bool);
}
interface IClockInShiftPass {
function issuer() external view returns (address);
function mint(address recipient, uint256 brokerTokenId) external;
}
interface IClockInLaunchClock {
function launchOpen() external view returns (bool);
}
contract TimecardClaimVault is ReentrancyGuard {
using SafeERC20 for IERC20;
error InvalidConfiguration();
error NotReady();
error ClaimsAlreadyActivated();
error ClaimsInactive();
error InvalidClaim();
error AlreadyClaimed();
error Unauthorized();
error GrantAlreadyReleased();
error CommunityReserveExceeded();
error SweepUnavailable();
uint256 public constant RECOGNITION_ALLOCATION = 100_000_000 ether;
uint256 public constant COMMUNITY_ALLOCATION = 70_000_000 ether;
uint64 public constant CLAIM_DURATION = 180 days;
IERC20 public immutable clockInToken;
IClockInSnapshotRegistry public immutable registry;
IClockInShiftPass public immutable shiftPass;
IClockInLaunchClock public immutable commitment;
address public immutable treasury;
uint64 public claimsStartedAt;
uint64 public claimDeadline;
uint256 public claimedRecognition;
uint256 public communityReleased;
bool public expiredRecognitionSwept;
mapping(bytes32 => bool) public claimed;
mapping(bytes32 => bool) public grantReleased;
event ClaimsActivated(uint64 startedAt, uint64 deadline);
event RecognitionClaimed(address indexed account, uint256 indexed brokerTokenId, uint256 amount, uint256 weight);
event CommunityGrantReleased(bytes32 indexed grantId, address indexed recipient, uint256 amount);
event ExpiredRecognitionSwept(uint256 amount);
constructor(address token_, address registry_, address shiftPass_, address commitment_, address treasury_) {
if (
token_.code.length == 0 || registry_.code.length == 0 || shiftPass_.code.length == 0
|| commitment_.code.length == 0 || treasury_.code.length == 0
) revert InvalidConfiguration();
clockInToken = IERC20(token_);
registry = IClockInSnapshotRegistry(registry_);
shiftPass = IClockInShiftPass(shiftPass_);
commitment = IClockInLaunchClock(commitment_);
treasury = treasury_;
}
function ready() public view returns (bool) {
return registry.finalized() && shiftPass.issuer() == address(this)
&& clockInToken.balanceOf(address(this)) == RECOGNITION_ALLOCATION + COMMUNITY_ALLOCATION;
}
function activateClaims() external {
if (claimsStartedAt != 0) revert ClaimsAlreadyActivated();
if (!commitment.launchOpen() || !ready()) revert NotReady();
uint64 startedAt = uint64(block.timestamp);
claimsStartedAt = startedAt;
claimDeadline = startedAt + CLAIM_DURATION;
emit ClaimsActivated(startedAt, claimDeadline);
}
function claim(uint256 brokerTokenId, uint256 weight, bytes32[] calldata proof)
external
nonReentrant
returns (uint256 amount)
{
if (claimsStartedAt == 0 || block.timestamp > claimDeadline) revert ClaimsInactive();
if (weight == 0 || !registry.verify(msg.sender, brokerTokenId, weight, proof)) revert InvalidClaim();
bytes32 claimId = registry.leaf(msg.sender, brokerTokenId, weight);
if (claimed[claimId]) revert AlreadyClaimed();
amount = Math.mulDiv(RECOGNITION_ALLOCATION, weight, registry.totalEligibleWeight());
if (amount == 0 || claimedRecognition + amount > RECOGNITION_ALLOCATION) revert InvalidClaim();
claimed[claimId] = true;
claimedRecognition += amount;
shiftPass.mint(msg.sender, brokerTokenId);
clockInToken.safeTransfer(msg.sender, amount);
emit RecognitionClaimed(msg.sender, brokerTokenId, amount, weight);
}
function releaseCommunity(bytes32 grantId, address recipient, uint256 amount) external nonReentrant {
if (msg.sender != treasury) revert Unauthorized();
if (!commitment.launchOpen() || grantId == bytes32(0) || recipient == address(0) || amount == 0) {
revert InvalidConfiguration();
}
if (grantReleased[grantId]) revert GrantAlreadyReleased();
if (communityReleased + amount > COMMUNITY_ALLOCATION) revert CommunityReserveExceeded();
grantReleased[grantId] = true;
communityReleased += amount;
clockInToken.safeTransfer(recipient, amount);
emit CommunityGrantReleased(grantId, recipient, amount);
}
function sweepExpiredRecognition() external nonReentrant returns (uint256 amount) {
if (claimsStartedAt == 0 || block.timestamp <= claimDeadline || expiredRecognitionSwept) {
revert SweepUnavailable();
}
expiredRecognitionSwept = true;
amount = RECOGNITION_ALLOCATION - claimedRecognition;
clockInToken.safeTransfer(treasury, amount);
emit ExpiredRecognitionSwept(amount);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "token_",
"type": "address",
"internalType": "address"
},
{
"name": "registry_",
"type": "address",
"internalType": "address"
},
{
"name": "shiftPass_",
"type": "address",
"internalType": "address"
},
{
"name": "commitment_",
"type": "address",
"internalType": "address"
},
{
"name": "treasury_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyClaimed",
"type": "error",
"inputs": []
},
{
"name": "ClaimsAlreadyActivated",
"type": "error",
"inputs": []
},
{
"name": "ClaimsInactive",
"type": "error",
"inputs": []
},
{
"name": "CommunityReserveExceeded",
"type": "error",
"inputs": []
},
{
"name": "GrantAlreadyReleased",
"type": "error",
"inputs": []
},
{
"name": "InvalidClaim",
"type": "error",
"inputs": []
},
{
"name": "InvalidConfiguration",
"type": "error",
"inputs": []
},
{
"name": "NotReady",
"type": "error",
"inputs": []
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "SweepUnavailable",
"type": "error",
"inputs": []
},
{
"name": "Unauthorized",
"type": "error",
"inputs": []
},
{
"name": "ClaimsActivated",
"type": "event",
"inputs": [
{
"name": "startedAt",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
},
{
"name": "deadline",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
}
],
"anonymous": false
},
{
"name": "CommunityGrantReleased",
"type": "event",
"inputs": [
{
"name": "grantId",
"type": "bytes32",
"indexed": true,
"internalType": "bytes32"
},
{
"name": "recipient",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ExpiredRecognitionSwept",
"type": "event",
"inputs": [
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "RecognitionClaimed",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "brokerTokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "weight",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "CLAIM_DURATION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "COMMUNITY_ALLOCATION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "RECOGNITION_ALLOCATION",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "activateClaims",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "claim",
"type": "function",
"inputs": [
{
"name": "brokerTokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "weight",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "proof",
"type": "bytes32[]",
"internalType": "bytes32[]"
}
],
"outputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "claimDeadline",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "claimed",
"type": "function",
"inputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "claimedRecognition",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "claimsStartedAt",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "clockInToken",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IERC20"
}
],
"stateMutability": "view"
},
{
"name": "commitment",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IClockInLaunchClock"
}
],
"stateMutability": "view"
},
{
"name": "communityReleased",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "expiredRecognitionSwept",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "grantReleased",
"type": "function",
"inputs": [
{
"name": "",
"type": "bytes32",
"internalType": "bytes32"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "ready",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "registry",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IClockInSnapshotRegistry"
}
],
"stateMutability": "view"
},
{
"name": "releaseCommunity",
"type": "function",
"inputs": [
{
"name": "grantId",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "recipient",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "shiftPass",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IClockInShiftPass"
}
],
"stateMutability": "view"
},
{
"name": "sweepExpiredRecognition",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "treasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
}
]0x610120346101af57601f61152138819003918201601f19168301916001600160401b038311848410176101b35780849260a0946040528339810103126101af57610048816101c7565b90610055602082016101c7565b610061604083016101c7565b9061007a6080610073606086016101c7565b94016101c7565b9360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055803b1580156101a6575b801561019d575b8015610194575b801561018b575b61017c576001600160a01b0390811660805290811660a05290811660c0521660e0526101005260405161134590816101dc82396080518181816105900152818161089001528181610b7501528181610d9c0152610fa1015260a051818181610408015281816107960152818161091e0152610f25015260c0518181816105140152818161084d0152611056015260e0518181816101ea01528181610aa90152610ce50152610100518181816109c401528181610a4d0152610d7b0152f35b63c52a9bd360e01b5f5260045ffd5b50843b156100be565b50833b156100b7565b50823b156100b0565b50813b156100a9565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101af5756fe60806040526004361015610011575f80fd5b5f803560e01c806302d5a68b14610d095780631303a48414610cc65780633ba86c4414610c9d5780634b9727ff14610a0d5780634e02d126146109e857806361d027b3146109a557806366146615146109835780636defbf801461095f5780636e8ec1f2146109425780637b103999146108ff578063837b08a7146108d9578063993eb1c5146108b4578063a16615da14610871578063abfb8b171461082e578063ae0b51df14610372578063b1aeaa7814610192578063b7551f2214610174578063cc3c0f0614610145578063d97d76bd146101165763ff844a63146100f6575f80fd5b34610113578060031936011261011357602060405162ed4e008152f35b80fd5b50346101135760206003193601126101135760ff60406020926004358152600584522054166040519015158152f35b50346101135760206003193601126101135760ff60406020926004358152600484522054166040519015158152f35b50346101135780600319360112610113576020600254604051908152f35b5034610113578060031936011261011357805467ffffffffffffffff811661034a576040517f229ae1530000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561033f578391610310575b50158015610301575b6102d95767ffffffffffffffff42169062ed4e00820167ffffffffffffffff81116102c5579167ffffffffffffffff604092827fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff00000000000000007fa5154953b3a76f8c716f6715f5d2115b2109a5dc53f3a648572e1630729b573297871b16921617178086558351928352831c166020820152a180f35b602484634e487b7160e01b81526011600452fd5b6004827f9488aaa6000000000000000000000000000000000000000000000000000000008152fd5b5061030a610eef565b15610223565b610332915060203d602011610338575b61032a8183610e75565b810190610eca565b5f61021a565b503d610320565b6040513d85823e3d90fd5b6004827f2f53e7bc000000000000000000000000000000000000000000000000000000008152fd5b3461062c57606060031936011261062c5760243560043560443567ffffffffffffffff811161062c573660238201121561062c57806004013567ffffffffffffffff811161062c578060051b366024828501011161062c576103d26110f8565b5f5467ffffffffffffffff811615908115610817575b506107ef578415928315610707575b505050610630576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690604051917fb6730f0f000000000000000000000000000000000000000000000000000000008352336004840152816024840152836044840152602083606481845afa928315610621575f936106d3575b50825f52600460205260ff60405f2054166106ab576020600491604051928380927fd016c7a80000000000000000000000000000000000000000000000000000000082525afa8015610621575f90610677575b6104d791508461121f565b9182158015610658575b610630575f52600460205260405f20600160ff1982541617905561050782600154610ee2565b6001556001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692833b1561062c575f80946044604051809781937f40c10f190000000000000000000000000000000000000000000000000000000083523360048401528760248401525af193841561062157602094610611575b506105b483337f000000000000000000000000000000000000000000000000000000000000000061116f565b60405190838252848201527fd1cdb41d21f6516cd0cad6c532b7b71ceacd9b99bd493872a8d53b791431b8b060403392a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b5f61061b91610e75565b5f610588565b6040513d5f823e3d90fd5b5f80fd5b7fed3c247c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506a52b7d2dcc80cd2e400000061067184600154610ee2565b116104e1565b506020813d6020116106a3575b8161069160209383610e75565b8101031261062c576104d790516104cc565b3d9150610684565b7f646cf558000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d6020116106ff575b816106ef60209383610e75565b8101031261062c57519184610479565b3d91506106e2565b909192507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051937fe329e18b000000000000000000000000000000000000000000000000000000008552336004860152856024860152866044860152608060648601528060848601521161062c5760a4838360209460248395018484013781010301816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610621575f916107d0575b50158380806103f7565b6107e9915060203d6020116103385761032a8183610e75565b836107c6565b7f8868de62000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff915060401c164211866103e8565b3461062c575f60031936011261062c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461062c575f60031936011261062c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461062c575f60031936011261062c5760206040516a39e7139a8c08fa060000008152f35b3461062c575f60031936011261062c57602067ffffffffffffffff5f5416604051908152f35b3461062c575f60031936011261062c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461062c575f60031936011261062c576020600154604051908152f35b3461062c575f60031936011261062c576020610979610eef565b6040519015158152f35b3461062c575f60031936011261062c57602060ff600354166040519015158152f35b3461062c575f60031936011261062c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461062c575f60031936011261062c5760206040516a52b7d2dcc80cd2e40000008152f35b3461062c57606060031936011261062c57600435602435906001600160a01b0382169182810361062c5760443590610a436110f8565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610c75576040517f229ae1530000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610621575f91610c56575b50158015610c4e575b8015610c46575b8015610c3e575b610c1657825f52600560205260ff60405f205416610bee576a39e7139a8c08fa06000000610b2083600254610ee2565b11610bc65781610b997ff5f8d22e9bd58ad10ac07690324f5d88ced2024006ce49182394d55f6acbd50493602093865f526005855260405f20600160ff19825416179055610b7082600254610ee2565b6002557f000000000000000000000000000000000000000000000000000000000000000061116f565b604051908152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055005b7f9b144652000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f59216747000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc52a9bd3000000000000000000000000000000000000000000000000000000005f5260045ffd5b508115610af0565b508315610ae9565b508215610ae2565b610c6f915060203d6020116103385761032a8183610e75565b85610ad9565b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461062c575f60031936011261062c57602067ffffffffffffffff5f5460401c16604051908152f35b3461062c575f60031936011261062c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461062c575f60031936011261062c57610d216110f8565b5f5467ffffffffffffffff811615908115610e5d575b508015610e51575b610e2957600160ff1960035416176003556001546a52b7d2dcc80cd2e4000000036a52b7d2dcc80cd2e40000008111610e155780610dc06020927f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061116f565b7f0cc682ecdab24cd0e859b62faf5f85b33d541563c738e0da50f90e6af629635282604051838152a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b634e487b7160e01b5f52601160045260245ffd5b7f5a55d3c3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060ff60035416610d3f565b67ffffffffffffffff915060401c1642111581610d37565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610eb657604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261062c5751801515810361062c5790565b91908201809211610e1557565b6040517fb3f05b970000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610621575f916110d9575b508061101f575b80610f645790565b506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526020816024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa8015610621575f90610fe2575b6a8c9ee6775415ccea00000091501490565b506020813d602011611017575b81610ffc60209383610e75565b8101031261062c576a8c9ee6775415ccea0000009051610fd0565b3d9150610fef565b506040517f1d1438480000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa908115610621575f91611097575b506001600160a01b03163014610f5c565b90506020813d6020116110d1575b816110b260209383610e75565b8101031261062c57516001600160a01b038116810361062c575f611086565b3d91506110a5565b6110f2915060203d6020116103385761032a8183610e75565b5f610f55565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054146111475760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b916001600160a01b03604051927fa9059cbb000000000000000000000000000000000000000000000000000000005f521660045260245260205f60448180865af19060015f51148216156111fe575b604052156111c95750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90600181151661121657823b15153d151616906111be565b503d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816a52b7d2dcc80cd2e40000000991816a52b7d2dcc80cd2e400000002918280851094039380850394146112ee57838211156112d65781906a52b7d2dcc80cd2e400000009815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b50809250156112fb570490565b634e487b7160e01b5f52601260045260245ffdfea26469706673582212200b328723eb0f3914db2821c68533f5662efc3678f60dbd413f0c13f858ae66f064736f6c634300081a0033000000000000000000000000eafacb4fda62138a9f0e0d18d5dd87e984c4b0ff00000000000000000000000065e9db721466dc90e0b5a4da05c2a8ee072e5f2b00000000000000000000000069d41a456b613fc465eaf784cb78bd3dc09382820000000000000000000000009e66140451e7fa9aec2abac48151e3748e735e5d000000000000000000000000b26b82885246db7ff45470976e15f8670ec29fed
0x60806040526004361015610011575f80fd5b5f803560e01c806302d5a68b14610d095780631303a48414610cc65780633ba86c4414610c9d5780634b9727ff14610a0d5780634e02d126146109e857806361d027b3146109a557806366146615146109835780636defbf801461095f5780636e8ec1f2146109425780637b103999146108ff578063837b08a7146108d9578063993eb1c5146108b4578063a16615da14610871578063abfb8b171461082e578063ae0b51df14610372578063b1aeaa7814610192578063b7551f2214610174578063cc3c0f0614610145578063d97d76bd146101165763ff844a63146100f6575f80fd5b34610113578060031936011261011357602060405162ed4e008152f35b80fd5b50346101135760206003193601126101135760ff60406020926004358152600584522054166040519015158152f35b50346101135760206003193601126101135760ff60406020926004358152600484522054166040519015158152f35b50346101135780600319360112610113576020600254604051908152f35b5034610113578060031936011261011357805467ffffffffffffffff811661034a576040517f229ae1530000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000009e66140451e7fa9aec2abac48151e3748e735e5d165afa90811561033f578391610310575b50158015610301575b6102d95767ffffffffffffffff42169062ed4e00820167ffffffffffffffff81116102c5579167ffffffffffffffff604092827fffffffffffffffffffffffffffffffff000000000000000000000000000000006fffffffffffffffff00000000000000007fa5154953b3a76f8c716f6715f5d2115b2109a5dc53f3a648572e1630729b573297871b16921617178086558351928352831c166020820152a180f35b602484634e487b7160e01b81526011600452fd5b6004827f9488aaa6000000000000000000000000000000000000000000000000000000008152fd5b5061030a610eef565b15610223565b610332915060203d602011610338575b61032a8183610e75565b810190610eca565b5f61021a565b503d610320565b6040513d85823e3d90fd5b6004827f2f53e7bc000000000000000000000000000000000000000000000000000000008152fd5b3461062c57606060031936011261062c5760243560043560443567ffffffffffffffff811161062c573660238201121561062c57806004013567ffffffffffffffff811161062c578060051b366024828501011161062c576103d26110f8565b5f5467ffffffffffffffff811615908115610817575b506107ef578415928315610707575b505050610630576001600160a01b037f00000000000000000000000065e9db721466dc90e0b5a4da05c2a8ee072e5f2b1690604051917fb6730f0f000000000000000000000000000000000000000000000000000000008352336004840152816024840152836044840152602083606481845afa928315610621575f936106d3575b50825f52600460205260ff60405f2054166106ab576020600491604051928380927fd016c7a80000000000000000000000000000000000000000000000000000000082525afa8015610621575f90610677575b6104d791508461121f565b9182158015610658575b610630575f52600460205260405f20600160ff1982541617905561050782600154610ee2565b6001556001600160a01b037f00000000000000000000000069d41a456b613fc465eaf784cb78bd3dc09382821692833b1561062c575f80946044604051809781937f40c10f190000000000000000000000000000000000000000000000000000000083523360048401528760248401525af193841561062157602094610611575b506105b483337f000000000000000000000000eafacb4fda62138a9f0e0d18d5dd87e984c4b0ff61116f565b60405190838252848201527fd1cdb41d21f6516cd0cad6c532b7b71ceacd9b99bd493872a8d53b791431b8b060403392a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b5f61061b91610e75565b5f610588565b6040513d5f823e3d90fd5b5f80fd5b7fed3c247c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506a52b7d2dcc80cd2e400000061067184600154610ee2565b116104e1565b506020813d6020116106a3575b8161069160209383610e75565b8101031261062c576104d790516104cc565b3d9150610684565b7f646cf558000000000000000000000000000000000000000000000000000000005f5260045ffd5b9092506020813d6020116106ff575b816106ef60209383610e75565b8101031261062c57519184610479565b3d91506106e2565b909192507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051937fe329e18b000000000000000000000000000000000000000000000000000000008552336004860152856024860152866044860152608060648601528060848601521161062c5760a4838360209460248395018484013781010301816001600160a01b037f00000000000000000000000065e9db721466dc90e0b5a4da05c2a8ee072e5f2b165afa908115610621575f916107d0575b50158380806103f7565b6107e9915060203d6020116103385761032a8183610e75565b836107c6565b7f8868de62000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff915060401c164211866103e8565b3461062c575f60031936011261062c5760206040516001600160a01b037f00000000000000000000000069d41a456b613fc465eaf784cb78bd3dc0938282168152f35b3461062c575f60031936011261062c5760206040516001600160a01b037f000000000000000000000000eafacb4fda62138a9f0e0d18d5dd87e984c4b0ff168152f35b3461062c575f60031936011261062c5760206040516a39e7139a8c08fa060000008152f35b3461062c575f60031936011261062c57602067ffffffffffffffff5f5416604051908152f35b3461062c575f60031936011261062c5760206040516001600160a01b037f00000000000000000000000065e9db721466dc90e0b5a4da05c2a8ee072e5f2b168152f35b3461062c575f60031936011261062c576020600154604051908152f35b3461062c575f60031936011261062c576020610979610eef565b6040519015158152f35b3461062c575f60031936011261062c57602060ff600354166040519015158152f35b3461062c575f60031936011261062c5760206040516001600160a01b037f000000000000000000000000b26b82885246db7ff45470976e15f8670ec29fed168152f35b3461062c575f60031936011261062c5760206040516a52b7d2dcc80cd2e40000008152f35b3461062c57606060031936011261062c57600435602435906001600160a01b0382169182810361062c5760443590610a436110f8565b6001600160a01b037f000000000000000000000000b26b82885246db7ff45470976e15f8670ec29fed163303610c75576040517f229ae1530000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000009e66140451e7fa9aec2abac48151e3748e735e5d165afa908115610621575f91610c56575b50158015610c4e575b8015610c46575b8015610c3e575b610c1657825f52600560205260ff60405f205416610bee576a39e7139a8c08fa06000000610b2083600254610ee2565b11610bc65781610b997ff5f8d22e9bd58ad10ac07690324f5d88ced2024006ce49182394d55f6acbd50493602093865f526005855260405f20600160ff19825416179055610b7082600254610ee2565b6002557f000000000000000000000000eafacb4fda62138a9f0e0d18d5dd87e984c4b0ff61116f565b604051908152a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055005b7f9b144652000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f59216747000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc52a9bd3000000000000000000000000000000000000000000000000000000005f5260045ffd5b508115610af0565b508315610ae9565b508215610ae2565b610c6f915060203d6020116103385761032a8183610e75565b85610ad9565b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461062c575f60031936011261062c57602067ffffffffffffffff5f5460401c16604051908152f35b3461062c575f60031936011261062c5760206040516001600160a01b037f0000000000000000000000009e66140451e7fa9aec2abac48151e3748e735e5d168152f35b3461062c575f60031936011261062c57610d216110f8565b5f5467ffffffffffffffff811615908115610e5d575b508015610e51575b610e2957600160ff1960035416176003556001546a52b7d2dcc80cd2e4000000036a52b7d2dcc80cd2e40000008111610e155780610dc06020927f000000000000000000000000b26b82885246db7ff45470976e15f8670ec29fed7f000000000000000000000000eafacb4fda62138a9f0e0d18d5dd87e984c4b0ff61116f565b7f0cc682ecdab24cd0e859b62faf5f85b33d541563c738e0da50f90e6af629635282604051838152a160017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051908152f35b634e487b7160e01b5f52601160045260245ffd5b7f5a55d3c3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5060ff60035416610d3f565b67ffffffffffffffff915060401c1642111581610d37565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610eb657604052565b634e487b7160e01b5f52604160045260245ffd5b9081602091031261062c5751801515810361062c5790565b91908201809211610e1557565b6040517fb3f05b970000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f00000000000000000000000065e9db721466dc90e0b5a4da05c2a8ee072e5f2b165afa908115610621575f916110d9575b508061101f575b80610f645790565b506040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526020816024816001600160a01b037f000000000000000000000000eafacb4fda62138a9f0e0d18d5dd87e984c4b0ff165afa8015610621575f90610fe2575b6a8c9ee6775415ccea00000091501490565b506020813d602011611017575b81610ffc60209383610e75565b8101031261062c576a8c9ee6775415ccea0000009051610fd0565b3d9150610fef565b506040517f1d1438480000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f00000000000000000000000069d41a456b613fc465eaf784cb78bd3dc0938282165afa908115610621575f91611097575b506001600160a01b03163014610f5c565b90506020813d6020116110d1575b816110b260209383610e75565b8101031261062c57516001600160a01b038116810361062c575f611086565b3d91506110a5565b6110f2915060203d6020116103385761032a8183610e75565b5f610f55565b60027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054146111475760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b916001600160a01b03604051927fa9059cbb000000000000000000000000000000000000000000000000000000005f521660045260245260205f60448180865af19060015f51148216156111fe575b604052156111c95750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b90600181151661121657823b15153d151616906111be565b503d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff816a52b7d2dcc80cd2e40000000991816a52b7d2dcc80cd2e400000002918280851094039380850394146112ee57838211156112d65781906a52b7d2dcc80cd2e400000009815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b50809250156112fb570490565b634e487b7160e01b5f52601260045260245ffdfea26469706673582212200b328723eb0f3914db2821c68533f5662efc3678f60dbd413f0c13f858ae66f064736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| Clock In (CLOCKIN) | CLOCKIN | 170,000,000 | — | — |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| no event logs emitted by this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| no transactions indexed for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xdf6622f9…3aeda5 | Transfer | 37,275,383 | 2 days agoSat, 15 Aug 2026 16:57:04 UTC | 0x637b…f065 | IN | 0xd083…64c3 | 170,000,000.000000 CLOCKIN | Clock In (CLOCKIN) |