Skip to content

Artifacts

DISCLAIMER // NFA // DYOR

This analysis is based on verified source code retrieved from Etherscan and observations of the contract behavior. We are not smart contract security experts. This document aims to explain what the contract appears to do based on the code. It should not be considered a comprehensive security audit or financial advice. Always verify critical information independently and consult with blockchain security professionals for important decisions.

⊙ generated by robots | curated by humans

METADATA
Contract Address 0xCa5E50710F656F2e537cE2Fc8504dB6E24eD3515 (etherscan)
Network Ethereum Mainnet
Analysis Date 2025-12-13

Verified Source Code

The contract source code is verified on Etherscan. This is the official implementation.

Source: Etherscan - Contract Code

Artifact:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.30;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title XcellarToken
 * @dev ERC20 Token with fixed supply and burn capability
 */
contract XcellarToken is ERC20, Ownable {
    /// @notice The total supply of tokens (immutable after deployment)
    uint256 public immutable TOTAL_SUPPLY;

    /// @notice The address that received presale tokens
    address public presaleWallet;

    /// @notice The amount of tokens allocated to presale
    uint256 public presaleAllocation;

    /**
     * @dev Constructor that creates the token with initial distribution
     * @param _totalSupply Total supply of tokens to mint
     * @param _presaleWallet Address to receive presale allocation
     * @param _presaleAllocation Amount of tokens for presale
     */
    constructor(
        uint256 _totalSupply,
        address _presaleWallet,
        uint256 _presaleAllocation
    ) ERC20("Xcellar", "XCL") Ownable(msg.sender) {
        require(_totalSupply > 0, "Total supply must be greater than zero");
        require(_presaleWallet != address(0), "Presale wallet cannot be zero address");
        require(_presaleAllocation <= _totalSupply, "Presale allocation exceeds total supply");

        TOTAL_SUPPLY = _totalSupply;
        presaleWallet = _presaleWallet;
        presaleAllocation = _presaleAllocation;

        // Mint presale allocation to presale wallet
        if (_presaleAllocation > 0) {
            _mint(_presaleWallet, _presaleAllocation);
        }

        // Mint remaining tokens to deployer
        uint256 remainingTokens = TOTAL_SUPPLY - _presaleAllocation;
        if (remainingTokens > 0) {
            _mint(msg.sender, remainingTokens);
        }
    }

    /**
     * @dev Burns tokens from the caller's balance
     * @param value Amount of tokens to burn
     */
    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }
}

Runtime Bytecode

The deployed contract bytecode fetched from the blockchain.

Source: Etherscan - Contract Code

Command:

export ETH_RPC_URL=https://eth.llamarpc.com
cast code 0xCa5E50710F656F2e537cE2Fc8504dB6E24eD3515

Constructor Arguments

The parameters used when deploying the contract.

Source: Etherscan - Creation TX

Decoded Arguments:

PARAMETER TYPE VALUE
_totalSupply uint256 Query via TOTAL_SUPPLY()
_presaleWallet address Query via presaleWallet()
_presaleAllocation uint256 Query via presaleAllocation()

Verification Commands:

export ETH_RPC_URL=https://eth.llamarpc.com

# GET TOTAL SUPPLY
cast call 0xCa5E50710F656F2e537cE2Fc8504dB6E24eD3515 "TOTAL_SUPPLY()(uint256)"

# GET PRESALE WALLET
cast call 0xCa5E50710F656F2e537cE2Fc8504dB6E24eD3515 "presaleWallet()(address)"

# GET PRESALE ALLOCATION
cast call 0xCa5E50710F656F2e537cE2Fc8504dB6E24eD3515 "presaleAllocation()(uint256)"

Contract ABI

The Application Binary Interface for interacting with the contract.

Source: Etherscan - Contract ABI

Key Function Signatures:

FUNCTION SELECTOR SIGNATURE
burn 0x42966c68 burn(uint256)
transfer 0xa9059cbb transfer(address,uint256)
transferFrom 0x23b872dd transferFrom(address,address,uint256)
approve 0x095ea7b3 approve(address,uint256)
balanceOf 0x70a08231 balanceOf(address)
totalSupply 0x18160ddd totalSupply()
allowance 0xdd62ed3e allowance(address,address)
name 0x06fdde03 name()
symbol 0x95d89b41 symbol()
decimals 0x313ce567 decimals()
owner 0x8da5cb5b owner()
transferOwnership 0xf2fde38b transferOwnership(address)
renounceOwnership 0x715018a6 renounceOwnership()
TOTAL_SUPPLY 0x902d55a5 TOTAL_SUPPLY()
presaleWallet 0x59be1d6c presaleWallet()
presaleAllocation 0x2e1e7264 presaleAllocation()

OpenZeppelin Dependencies

The contract inherits from OpenZeppelin contracts (version appears to be v5.x based on constructor pattern).

Inherited Contracts:

  • @openzeppelin/contracts/token/ERC20/ERC20.sol
  • @openzeppelin/contracts/access/Ownable.sol

Reference: OpenZeppelin Contracts v5.x