Storage Layout
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 |
Variables
| SLOT | VARIABLE NAME | TYPE | PURPOSE |
|---|---|---|---|
| 0 | _owner |
address | Owner address from Ownable (160 bits) |
| 1-3 | ERC20 metadata | string | _name, _symbol (inherited) |
| 4 | _totalSupply |
uint256 | Current circulating supply (ERC20) |
| 5 | _balances |
mapping(address => uint256) | Token balances per address |
| 6 | _allowances |
mapping(address => mapping) | Spending approvals |
| N/A | TOTAL_SUPPLY |
uint256 | Immutable, stored in contract bytecode |
| 7 | presaleWallet |
address | Public state variable |
| 8 | presaleAllocation |
uint256 | Public state variable |
Immutable Variables
The TOTAL_SUPPLY variable is marked as immutable in Solidity. Immutable variables are stored in the contract bytecode, not in storage slots. This means they cannot be changed after deployment and cost less gas to read.
Variable Details
TOTAL_SUPPLY
| ATTRIBUTE | VALUE |
|---|---|
| Type | uint256 |
| Modifier | public immutable |
| Location | Contract bytecode (not storage) |
| Purpose | Original maximum supply set at deployment |
This variable stores the original total supply and never changes. The actual circulating supply (_totalSupply from ERC20) may be less if tokens have been burned.
presaleWallet
| ATTRIBUTE | VALUE |
|---|---|
| Type | address |
| Modifier | public |
| Purpose | Address that received presale allocation at deployment |
Historical record of the presale recipient. This address received presaleAllocation tokens during contract construction.
presaleAllocation
| ATTRIBUTE | VALUE |
|---|---|
| Type | uint256 |
| Modifier | public |
| Purpose | Amount allocated to presale wallet at deployment |
Historical record of the presale amount. Provides transparency about initial token distribution.
Inherited from ERC20
| VARIABLE | TYPE | PURPOSE |
|---|---|---|
_balances |
mapping(address => uint256) | Token balance for each address |
_allowances |
mapping(address => mapping(address => uint256)) | Approved spending amounts |
_totalSupply |
uint256 | Current circulating supply (decreases with burns) |
_name |
string | Token name ("Xcellar") |
_symbol |
string | Token symbol ("XCL") |
Inherited from Ownable
| VARIABLE | TYPE | PURPOSE |
|---|---|---|
_owner |
address | Current owner address (initially deployer) |
Storage Diagram
graph TD
subgraph Bytecode["Contract Bytecode (Immutable)"]
TotalSup["TOTAL_SUPPLY: uint256<br/>Original maximum supply"]
end
subgraph Ownable["Ownable State (Slot 0)"]
Owner["_owner: address<br/>Contract owner"]
end
subgraph ERC20["ERC20 State"]
Supply["_totalSupply: uint256<br/>Circulating supply"]
Balances["_balances: mapping<br/>address => uint256"]
Allowances["_allowances: mapping<br/>owner => spender => amount"]
end
subgraph Custom["Custom State"]
Presale["presaleWallet: address<br/>Presale recipient"]
Alloc["presaleAllocation: uint256<br/>Presale amount"]
end
TotalSup -.->|"reference"| Supply
Presale -.->|"initial recipient"| Balances
Verification Commands
Tip
Commands below use cast from the Foundry Toolkit. Set the RPC URL: