Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0x6969Ad43Eb54B657B81eA019A805937Ccc5a541C
Balance 0 ETH
Nonce 1
Code Size 1236 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

1236 bytes
0x608060405234801561001057600080fd5b50600436106100725760003560e01c80638da5cb5b116100505780638da5cb5b146100a7578063ab518e6e146100d0578063f2fde38b146100e357600080fd5b806340a0b4ec146100775780636ac385a21461008c578063715018a61461009f575b600080fd5b61008a6100853660046103ca565b6100f6565b005b61008a61009a3660046103fa565b6101f0565b61008a6102bc565b6000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b6001546100b4906001600160a01b031681565b61008a6100f13660046103ca565b6102d0565b6100fe610327565b6001600160a01b038116610199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4261746368436c61696d3a20436c61696d5661756c742061646472657373206360448201527f616e6e6f7420626520746865207a65726f20616464726573730000000000000060648201526084015b60405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517fe8be4a3b4254e4bf5ece73e698ebf93c5d0e46b71dcb1375e8165b6884e10f3e90600090a250565b8060005b818110156102b6576001546001600160a01b031663a166334085858481811061021f5761021f61046f565b905060200201602081019061023491906103ca565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152336024820152604401600060405180830381600087803b15801561029357600080fd5b505af11580156102a7573d6000803e3d6000fd5b505050508060010190506101f4565b50505050565b6102c4610327565b6102ce600061036d565b565b6102d8610327565b6001600160a01b03811661031b576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610190565b6103248161036d565b50565b6000546001600160a01b031633146102ce576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610190565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156103dc57600080fd5b81356001600160a01b03811681146103f357600080fd5b9392505050565b6000806020838503121561040d57600080fd5b823567ffffffffffffffff8082111561042557600080fd5b818501915085601f83011261043957600080fd5b81358181111561044857600080fd5b8660208260051b850101111561045d57600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220ab5c8032b7aecbc485d09bb98661db2f089674801d2ace3b1a40af9ad7c71f2e64736f6c63430008170033

Verified Source Code Full Match

Compiler: v0.8.23+commit.f704f362 EVM: paris Optimization: Yes (1000 runs)
Ownable.sol 100 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
Context.sol 28 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}
IClaimVault.sol 16 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

/**
 * @title Claim Vault Interface
 * @author A Q T I S / @AQTIS-Team
 * @notice Interface for claim vault
 */

interface IClaimVault {
    function claimRewards(address lst) external;

    function claimRewardsFor(address lst, address user) external;

    function getLSTs() external view returns (address[] memory);
}
BatchClaimUsers.sol 34 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

import {Ownable} from "node_modules/@openzeppelin/contracts/access/Ownable.sol";

import {IClaimVault} from "../interfaces/IClaimVault.sol";

contract BatchClaimUsers is Ownable {
    IClaimVault public claimVault;

    event ClaimVaultUpdated(address indexed newClaimVault);

    constructor(address _claimVault) Ownable(msg.sender) {
        claimVault = IClaimVault(_claimVault);
    }

    /**
     * @dev Claims rewards for multiple LST addresses and sends them to the caller.
     * @param lsts Array of LST contract addresses for which to claim rewards.
     */
    function claimRewardsForMultiple(address[] calldata lsts) external {
        uint256 len = lsts.length;
        for (uint i; i < len; ++i) {
            claimVault.claimRewardsFor(lsts[i], msg.sender);
        }
    }

    // ======= Permissioned Functions ======= //
       function updateClaimVault(address _newClaimVault) external onlyOwner {
        require(_newClaimVault != address(0), "BatchClaim: ClaimVault address cannot be the zero address");
        claimVault = IClaimVault(_newClaimVault);
        emit ClaimVaultUpdated(_newClaimVault);
    }
}

Read Contract

claimVault 0xab518e6e → address
owner 0x8da5cb5b → address

Write Contract 4 functions

These functions modify contract state and require a wallet transaction to execute.

claimRewardsForMultiple 0x6ac385a2
address[] lsts
renounceOwnership 0x715018a6
No parameters
transferOwnership 0xf2fde38b
address newOwner
updateClaimVault 0x40a0b4ec
address _newClaimVault

Recent Transactions

No transactions found for this address