ETH Price: $2,283.17 (-5.95%)

Transaction Decoder

Block:
19396392 at Mar-09-2024 08:37:23 AM +UTC
Transaction Fee:
0.002655930979256588 ETH $6.06
Gas Used:
58,852 Gas / 45.128984219 Gwei

Emitted Events:

301 AxeCapProfitShare8.EthClaim( claimer=[Sender] 0xe9030dc28f87872a1ba72fc3808ccbe3aa624353, amount=18867224491750423 )

Account State Difference:

  Address   Before After State Difference Code
0x0b274bCd...b8e631Dd3 4.093296705589081607 Eth4.074429481097331184 Eth0.018867224491750423
(Titan Builder)
45.244097589472210357 Eth45.244097648324210357 Eth0.000000058852
0xe9030dc2...3aA624353
0.125963737286975179 Eth
Nonce: 58
0.142175030799469014 Eth
Nonce: 59
0.016211293512493835

Execution Trace

AxeCapProfitShare8.CALL( )
  • ETH 0.018867224491750423 0xe9030dc28f87872a1ba72fc3808ccbe3aa624353.CALL( )
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0;
    contract AxeCapProfitShare8 {
        uint256 immutable public REVENUE_AMOUNT;
        address public owner;
        uint256 public totalSnapshotTokens;
        uint256 public snapshotTime;
        bool public isSnapshotLocked;
        bool public isFreezed; 
        mapping(address => uint256) public snapshotBalances;
        mapping(address => bool) public hasClaimed;
        event AxeSnapshotLock();
        event AxeSnapshotUnlock();
        event EthClaim(address indexed claimer, uint256 amount);
        event AdminWithdraw(uint256 amount);
        constructor () payable {
            owner = msg.sender;
            REVENUE_AMOUNT = msg.value;
        }
        modifier onlyOwner() {
            require(msg.sender == owner, "Caller is not the owner");
            _;
        }
    //  
        modifier after3Days() {
            require(block.timestamp > snapshotTime + 3 days , "Can only call after 3 days of snapshot");
            _;
        }
        function uploadSnapshot(address[] calldata users, uint256[] calldata balances) external onlyOwner {
            require(users.length == balances.length, "Arrays must be of equal length");
            // require(users.length <= 125, "Can only upload up to 125 addresses at a time");
            // note: should not have more than one user value
            for (uint256 i = 0; i < users.length; i++) {
                snapshotBalances[users[i]] += balances[i];
                totalSnapshotTokens += balances[i];
            }
        }
        function lockSnapshot() external onlyOwner {
            require(!isSnapshotLocked, "snapshot already locked");
            snapshotTime = block.timestamp;
            isSnapshotLocked = true;
            emit AxeSnapshotLock();
        }
        function freeze() external onlyOwner {
            require(!isFreezed, "Contract is already frozen");
            isFreezed = true;
            emit AxeSnapshotUnlock();
        }
        function claimETH() external {
            require(!isFreezed, "Contract is frozen");
            require(isSnapshotLocked, "Snapshot not yet locked");
            require(!hasClaimed[msg.sender], "You have already claimed your ETH");
            require(snapshotBalances[msg.sender] > 0, "You do not have any AXE tokens in the snapshot");
            uint256 claimableAmount = (REVENUE_AMOUNT * snapshotBalances[msg.sender]) / totalSnapshotTokens;
            // prevent reentrancy
            hasClaimed[msg.sender] = true;
            // see https://ethereum.stackexchange.com/questions/78124/is-transfer-still-safe-after-the-istanbul-update
            (bool isSuccess,) = msg.sender.call{value: claimableAmount}("");
            require(isSuccess, "Claim amount tranfer failed");
            emit EthClaim(msg.sender, claimableAmount);
        }
        // Function to withdraw unclaimed ETH after 7 days
        function withdrawUnclaimedETH() public onlyOwner after3Days {
            uint256 amount = address(this).balance;
            (bool success, ) = msg.sender.call{value: amount}("");
            require(success, "Withdraw failed");
            emit AdminWithdraw(amount);
        }
        receive() external payable {}
    }