Storage Layout
DISCLAIMER // NFA // DYOR
This analysis is based on decompiled bytecode — the contract source code is not verified on Etherscan. Function names, parameter types, and internal logic are inferred from selector matching, transaction input decoding, and event log analysis. We are not smart contract security experts. This document should not be considered a comprehensive security audit or financial advice. Always verify critical information independently.
⊙ generated by robots | curated by humans
| METADATA | |
|---|---|
| Contract Address | 0x99c96efF...Ab2dCC (etherscan) |
| Network | Ethereum Mainnet |
| Analysis Date | 2026-03-29 |
Storage Slots Overview
| SLOT | VARIABLE | TYPE | CURRENT VALUE |
|---|---|---|---|
| 0 | owner | address | 0x9fBcc72A...63eA03 |
| 1 | active flag | uint256 | 1 |
| 3 | userCount | uint256 | 85 |
| 5 | keeper | address | 0x9fBcc72A...63eA03 |
| 6 | feeRecipient | address | 0x90fF7835...fceEAD |
| 7 | depositFee | uint256 | 0.01 ETH (stored) |
| 8 | totalDeposits | uint256 | ~4.84 ETH |
| 9 | totalTradesExecuted | uint256 | 162 |
| 10 | totalProfitGenerated | uint256 | ~0.018 ETH |
| 11 | totalOperations | uint256 | 215 |
| 14 | sentThreshold | uint256 | 10,000 SENT |
Slot 0: Owner
| PROPERTY | VALUE |
|---|---|
| Type | address |
| Size | 20 bytes |
| Initial Value | 0x9fBcc72A6bc74D0060e14Fe8b8f4b7CcFA63eA03 |
| Access Pattern | Read on every admin call |
Purpose: Stores the contract owner address.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 0
0x0000000000000000000000009fbcc72a6bc74d0060e14fe8b8f4b7ccfa63ea03
Slot 1: Active/Paused Flag
| PROPERTY | VALUE |
|---|---|
| Type | uint256 |
| Current Value | 1 |
| Access Pattern | Checked on state-changing operations |
Purpose: Appears to be an active/paused flag (1 = active).
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 1
0x0000000000000000000000000000000000000000000000000000000000000001
Slot 3: Total Trades Executed
| PROPERTY | VALUE |
|---|---|
| Type | uint256 |
| Current Value | 0x55 = 85 |
Purpose: Appears to correlate with user count or a secondary counter.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 3
0x0000000000000000000000000000000000000000000000000000000000000055
Note
The value 0x55 (85) matches getUserCount(). This slot may store the user count rather than trades.
Slot 5: Keeper
| PROPERTY | VALUE |
|---|---|
| Type | address |
| Size | 20 bytes |
| Current Value | 0x9fBcc72A6bc74D0060e14Fe8b8f4b7CcFA63eA03 |
Purpose: Stores the keeper address authorized to execute trades.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 5
0x0000000000000000000000009fbcc72a6bc74d0060e14fe8b8f4b7ccfa63ea03
Security Considerations:
- ☒ Currently same address as owner — no separation of concerns
- △ Can be changed by owner at any time with no timelock
Slot 6: Fee Recipient
| PROPERTY | VALUE |
|---|---|
| Type | address |
| Size | 20 bytes |
| Current Value | 0x90fF7835f01537bB98d5835E4917F91c1EfcEEAD |
Purpose: Address that receives the flat deposit fee (0.005 ETH per deposit).
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 6
0x00000000000000000000000090ff7835f01537bb98d5835e4917f91c1efceead
Slot 7: Deposit Fee
| PROPERTY | VALUE |
|---|---|
| Type | uint256 |
| Current Value | 0x002386f26fc10000 = 0.01 ETH |
Purpose: Stores the per-deposit fee amount. On-chain value is 0.01 ETH, but internal transaction analysis shows 0.005 ETH being sent per deposit — the contract may split this or use a different fee calculation.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 7
0x000000000000000000000000000000000000000000000000002386f26fc10000
Note
The stored value (0.01 ETH) differs from observed fee transfers (0.005 ETH). The contract may calculate the actual fee differently than a straight storage read, or this slot may serve a different purpose.
Slot 8: Total Deposits
| PROPERTY | VALUE |
|---|---|
| Type | uint256 |
| Current Value | 0x431de5396b62facc |
Purpose: Running total of all ETH deposited into the contract.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 8
0x000000000000000000000000000000000000000000000000431de5396b62facc
Decoded: ~4.84 ETH (matches current contract balance approximately)
Slot 9: Trade/Operation Counter
| PROPERTY | VALUE |
|---|---|
| Type | uint256 |
| Current Value | 0xa2 = 162 |
Purpose: Matches totalTradesExecuted() return value.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 9
0x00000000000000000000000000000000000000000000000000000000000000a2
Slot 10: Total Profit Generated
| PROPERTY | VALUE |
|---|---|
| Type | uint256 |
| Current Value | 0x003ec87442517ed7 |
Purpose: Running total of profit generated across all trades.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 10
0x000000000000000000000000000000000000000000000000003ec87442517ed7
Decoded: ~0.018 ETH
Slot 11: Total Operations Counter
| PROPERTY | VALUE |
|---|---|
| Type | uint256 |
| Current Value | 0xd7 = 215 |
Purpose: Appears to count total operations (deposits + trades + topups + withdrawals). Matches getStats() fifth return value.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 11
0x00000000000000000000000000000000000000000000000000000000000000d7
Slot 14: Token Threshold
| PROPERTY | VALUE |
|---|---|
| Type | uint256 |
| Current Value | 0x21e19e0c9bab2400000 = 10,000 (in 18-decimal token units) |
Purpose: Appears to be a SENT token threshold, possibly for tier calculation or eligibility.
Current Value:
$ cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 14
0x00000000000000000000000000000000000000000000021e19e0c9bab2400000
Dynamic Storage: Vaults Mapping
The vaults are stored in a nested mapping structure:
Each vault struct contains approximately 11 fields spanning multiple storage slots:
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
| profit | uint256 | Accumulated profit for this vault (wei) |
| depositAmount | uint256 | Original ETH deposit (wei) |
| sentAmount | uint256 | Declared SENT token amount |
| tradeCountBuy | uint256 | Number of buy trades |
| tradeCountSell | uint256 | Number of sell trades |
| active | uint256 | Active flag (1 = active) |
| depositTimestamp | uint256 | When the deposit was made |
| lastTradeTimestamp | uint256 | When the last trade was executed |
| lastTradeToken | address | Address of last traded token |
| lastTradeAmount | uint256 | Amount of last trade in token units |
| accumulatedValue | uint256 | Accumulated ETH value |
Dynamic Storage: Users Array
Stores the array of registered user addresses.
Key Observations
| OBSERVATION | IMPACT |
|---|---|
| Owner and keeper stored in separate slots | Allows independent role assignment |
| Deposit fee stored on-chain | Can be verified, but stored value differs from observed transfers |
| Vault struct is large (~11 fields) | Higher gas costs for vault operations |
| Multiple counters tracked | Enables statistics but adds storage writes per operation |
| Slot 14 contains token threshold | Tier/eligibility system tied to SENT token balance |
| 16 unknown function selectors | Contract may have additional functionality not fully analyzed |
Storage Verification Commands
# Read all identified storage slots
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 0 # owner
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 1 # active flag
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 3 # user count
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 5 # keeper
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 6 # feeRecipient
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 7 # deposit fee
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 8 # total deposits
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 9 # trade counter
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 10 # total profit
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 11 # total operations
cast storage 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC 14 # token threshold
# View functions for verification
cast call 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC "owner()"
cast call 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC "keeper()"
cast call 0x99c96efFDbd52C6868CB500f10350DF444Ab2dCC "getStats()"