ETH Price: $1,823.38 (+0.30%)

Transaction Decoder

Block:
21311817 at Dec-02-2024 02:22:59 AM +UTC
Transaction Fee:
0.000533029816989285 ETH $0.97
Gas Used:
32,109 Gas / 16.600635865 Gwei

Account State Difference:

  Address   Before After State Difference Code
(Titan Builder)
14.98618859185046517 Eth14.98622349777298125 Eth0.00003490592251608
0xcF8A4Ff0...E0aA51A9D
0xeCAB3064...F8f51fE8D
(OnChainDynamics: Deployer)
0.552505920519485843 Eth
Nonce: 273
0.551972890702496558 Eth
Nonce: 274
0.000533029816989285

Execution Trace

ClaimContract.addWalletsData( wallet=[0x571813C3cD7FC81b450a08FeC26a6816a090a6b5], amount=[95470936385019400] )
addWalletsData[ClaimContract (ln:27)]
//SPDX-License-Identifier: MIT Licensed
pragma solidity ^0.8.18;

contract ClaimContract {
    address public owner;
    uint256 public totalAddedReward;
    uint256 public totalClaimedReward;
    uint256 public totalUsersClaimed;
    bool public enableClaim;
    mapping(address => uint256) public userBalance;
    mapping(address => uint256) public claimedBalance;
    mapping(address => bool) public alreadyClaimed;

    modifier onlyOwner() {
        require(msg.sender == owner, " Not an owner");
        _;
    }

    receive() external payable {
        totalAddedReward += msg.value;
    }

    constructor(address _owner) {
        owner = _owner;
    }

    function addWalletsData(
        address[] memory wallet,
        uint256[] memory amount
    ) public onlyOwner {
        require(
            wallet.length == amount.length,
            "wallet and amount length mismatch"
        );
        for (uint256 i = 0; i < wallet.length; i++) {
            userBalance[wallet[i]] += amount[i];
        }
    }

    function claim() public {
        require(enableClaim, "wait for owner to start claim");
        uint256 availableBalance = userBalance[msg.sender] -
            claimedBalance[msg.sender];
        require(availableBalance > 0, "already claimed");
        claimedBalance[msg.sender] += availableBalance;
        totalClaimedReward += availableBalance;
        if (!alreadyClaimed[msg.sender]) {
            totalUsersClaimed++;
            alreadyClaimed[msg.sender] = true;
        }
        payable(msg.sender).transfer(availableBalance);
    }

    function enableClaimState(bool _state) external onlyOwner {
        enableClaim = _state;
    }

    // transfer ownership
    function changeOwner(address payable _newOwner) external onlyOwner {
        owner = _newOwner;
    }

    // to draw out tokens
    function transferStuckFunds(
        address _receiver,
        uint256 _value
    ) external onlyOwner {
        payable(_receiver).transfer(_value);
    }
}