Skip to content

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:

mapping(address => mapping(uint256 => Vault))

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

Slot 2 (or similar): users.length
Slot keccak256(2) + index: users[index]

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()"