Storage Layout
DISCLAIMER // NFA // DYOR
This analysis is based on 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 | 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 (etherscan) |
| Network | Ethereum Mainnet |
| Analysis Date | 2025-12-26 |
Variables
| SLOT | VARIABLE NAME | TYPE | CURRENT VALUE | PURPOSE |
|---|---|---|---|---|
| 0 | owner | address | 0x8758Ca21d08c9bdA75D6114614DCE373bFD76968 |
Contract owner (Ownable) |
| 1 | reentrancyLock | uint256 | 1 | ReentrancyGuard mutex (1=unlocked, 2=locked) |
| 2 | usdt | address | 0xdAC17F958D2ee523a2206206994597C13D831ec7 |
USDT contract address (hardcoded) |
| 3 | beneficiary | address | 0x853319C1eBebD1e7eD38747e14e7affe255145c6 |
Receives all presale funds |
| 4 | sentinelToken | address | 0x0000000000000000000000000000000000000000 |
Sentinel token address (not initialized) |
| 5 | totalSentinelBought | uint256 | 3,492,180,104 (~3.49B) | Total tokens purchased |
| 6 | totalSentinelRaised | uint256 | 3,492,180,104 (~3.49B) | Total tokens raised |
| 7 | totalSentinelRaisedInUsdWei | uint256 | 0 | USD value tracking (unused) |
| 8 | lastTotalSentinelRaised | uint256 | 1,958,062,704 (~1.96B) | Checkpoint for USD calc |
| 9 | packed state | bytes | 0x00120000 |
decimals(18) + initStatus(0) + isPresaleActive(false) |
| 10 | SupportedTokens | mapping(address => bool) | - | Token whitelist |
| 11 | TokenDecimals | mapping(address => uint8) | - | Token decimal configuration |
| 12 | TokenRates | mapping(address => uint256) | - | Token exchange rates |
| 13 | SentinelBoughtTotal | mapping(address => uint256) | - | Per-user purchase tracking |
Storage Slot Details
Slot 0: Owner
Raw: 0x0000000000000000000000008758ca21d08c9bda75d6114614dce373bfd76968
Type: address
Value: 0x8758Ca21d08c9bdA75D6114614DCE373bFD76968
The contract owner from OpenZeppelin's Ownable pattern. This address has full administrative control.
Slot 1: Reentrancy Lock
Raw: 0x0000000000000000000000000000000000000000000000000000000000000001
Type: uint256
Value: 1 (unlocked)
Standard ReentrancyGuard implementation. Value of 1 means unlocked, 2 means locked during execution.
Slot 2: USDT Address
Raw: 0x000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Type: address
Value: 0xdAC17F958D2ee523a2206206994597C13D831ec7
Hardcoded Tether USD (USDT) mainnet contract address. Set in constructor.
Slot 3: Beneficiary
Raw: 0x000000000000000000000000853319c1ebebd1e7ed38747e14e7affe255145c6
Type: address
Value: 0x853319C1eBebD1e7eD38747e14e7affe255145c6
Current beneficiary receiving all presale funds. Changed from original constructor value.
Slot 4: Sentinel Token
Raw: 0x0000000000000000000000000000000000000000000000000000000000000000
Type: address
Value: address(0)
The Sentinel token contract address. Currently uninitialized (zero address).
Slot 5: Total Sentinel Bought
Raw: 0x00000000000000000000000000000000000000000000000000000000d0267088
Type: uint256
Value: 3,492,180,104 (0xd0267088)
Total Sentinel tokens that have been "purchased" (recorded, not distributed).
Slot 6: Total Sentinel Raised
Raw: 0x00000000000000000000000000000000000000000000000000000000d0267088
Type: uint256
Value: 3,492,180,104 (0xd0267088)
Identical to totalSentinelBought. Appears to track the same value.
Slot 7: Total Sentinel Raised In USD Wei
USD tracking value. Currently not being used/updated.
Slot 8: Last Total Sentinel Raised
Raw: 0x0000000000000000000000000000000000000000000000000000000074b5aa70
Type: uint256
Value: 1,958,062,704 (0x74b5aa70)
Checkpoint value used in USD calculation during addSupportedTokens.
Slot 9: Packed State Variables
This slot packs multiple small variables:
| BYTE OFFSET | VARIABLE | VALUE | MEANING |
|---|---|---|---|
| 0 (rightmost) | isPresaleActive | 0x00 | false (presale ended) |
| 1 | initStatus | 0x00 | Not initialized |
| 2 | decimals | 0x12 (18) | 18 decimals |
Diagrams
graph TB
subgraph Core["Core State - Slots 0-4"]
S0["Slot 0: owner<br/>0x8758Ca21...76968"]
S1["Slot 1: reentrancyLock<br/>1 (unlocked)"]
S2["Slot 2: usdt<br/>0xdAC17F95...1ec7"]
S3["Slot 3: beneficiary<br/>0x853319C1...145c6"]
S4["Slot 4: sentinelToken<br/>address(0)"]
end
subgraph Counters["Counters - Slots 5-8"]
S5["Slot 5: totalSentinelBought<br/>3,492,180,104"]
S6["Slot 6: totalSentinelRaised<br/>3,492,180,104"]
S7["Slot 7: totalUsdWei<br/>0"]
S8["Slot 8: lastRaised<br/>1,958,062,704"]
end
subgraph Packed["Packed State - Slot 9"]
S9["Slot 9: packed<br/>decimals=18, init=0, active=false"]
end
subgraph Mappings["Mappings - Slots 10-13"]
S10["Slot 10: SupportedTokens<br/>mapping(address => bool)"]
S11["Slot 11: TokenDecimals<br/>mapping(address => uint8)"]
S12["Slot 12: TokenRates<br/>mapping(address => uint256)"]
S13["Slot 13: SentinelBoughtTotal<br/>mapping(address => uint256)"]
end
Core --> Counters --> Packed --> Mappings
style S0 fill:#ffe1e1
style S3 fill:#e1ffe1
style S4 fill:#ffffe1
style S5 fill:#fff4e1
style S6 fill:#fff4e1
Verification Commands
# SET RPC URL
export ETH_RPC_URL=https://eth.llamarpc.com
# READ SLOT 0 (OWNER)
cast storage 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 0
# READ SLOT 1 (REENTRANCY LOCK)
cast storage 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 1
# READ SLOT 2 (USDT)
cast storage 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 2
# READ SLOT 3 (BENEFICIARY)
cast storage 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 3
# READ SLOT 4 (SENTINEL TOKEN)
cast storage 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 4
# READ SLOT 5 (TOTAL BOUGHT)
cast storage 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 5
# READ SLOT 6 (TOTAL RAISED)
cast storage 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 6
# READ SLOT 9 (PACKED STATE)
cast storage 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 9
# VERIFY VIA FUNCTION CALLS
cast call 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 "owner()(address)"
cast call 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 "beneficiary()(address)"
cast call 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 "isPresaleActive()(bool)"
cast call 0x8d33666c83f7f17a1b8dc0e950d8ff2e7e37c563 "totalSentinelBought()(uint256)"
Key Observations
- ☑ Owner slot (0) matches the contract creator address
- ☑ Reentrancy guard is properly initialized to unlocked state
- △ Beneficiary was changed from constructor argument after deployment
- ☒ Sentinel token address is still address(0) - not initialized
- △ totalSentinelBought and totalSentinelRaised have identical values
- ☒ totalSentinelRaisedInUsdWei is 0 despite ~$3M in ETH raised
- △ Presale is currently inactive (isPresaleActive = false)