Skip to content

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 0x00000000...768E22 (etherscan)
Network Ethereum Mainnet
Analysis Date 2026-04-13

Variables

Persistent Storage (SSTORE / SLOAD)

SLOT VARIABLE NAME TYPE CURRENT VALUE PURPOSE
0 staked uint256 999999999999999996 (≈1 stETH) Principal basis — total stETH deposited/staked net of withdrawStETH
1 (low 16 bits) slipBps uint16 50 (0.5%) Slippage allowance for the harvest() ETH-gain invariant
1 (bits 16..175) owner address 0x1C0Aa8cC...855A20 Admin of all privileged functions
2 target address 0xDC24316b...f67022 (Curve stETH/ETH) Swap venue for harvest(); holds unlimited stETH approval
3 asset address 0x00a6bA94...2dCb12 (ZORG) Asset tracked by optional withdraw() condition (0 = native ETH)
4 holder address 0xd14a07B5...5013aa (Gnosis Safe) Account whose asset balance must grow during withdraw() (0 = condition disabled)

Transient Storage (TSTORE / TLOAD, EIP-1153)

SLOT PURPOSE
0 Reentrancy flag. Set to 1 during harvest() so receive() short-circuits if the swap target sends ETH back. Automatically clears at transaction end.

Packing Detail — Slot 1

bit:   255                                       176  175                                   16  15          0
        |                                           |  |                                     |  |           |
        |  unused (80 bits)                         |  |  owner address (160 bits)           |  |  slipBps  |

Decoded from bytecode: slipBps is read as uint16(SLOAD(1)); owner is read as address(SLOAD(1) >> 16). Confirmed by function selectors 0xf393a5f1 returning uint16(slot1) and 0x8da5cb5b returning address(slot1 >> 0x10).


Diagrams

graph TB
    subgraph Persistent["Persistent Storage"]
        S0["Slot 0: staked<br/>999999999999999996 wei"]
        S1["Slot 1: slipBps (16b) + owner (160b)<br/>50 | 0x1C0Aa8cC...855A20"]
        S2["Slot 2: target<br/>0xDC24316b...f67022 (Curve)"]
        S3["Slot 3: asset<br/>0x00a6bA94...2dCb12 (ZORG)"]
        S4["Slot 4: holder<br/>0xd14a07B5...5013aa (Safe)"]
    end

    subgraph Transient["Transient Storage (EIP-1153)"]
        T0["Slot 0: harvest reentrancy flag<br/>cleared at tx end"]
    end

    S0 --> S1 --> S2 --> S3 --> S4
    T0 -.-|set during harvest| S0

    style S0 fill:#ffe1e1
    style S1 fill:#fff4e1
    style T0 fill:#e1f5ff

Read-Verification Commands

C=0x0000000000BB8A44A568Ff0a9ef0E7fc20768E22

cast call $C "staked()(uint256)"
cast call $C "slipBps()(uint16)"
cast call $C "owner()(address)"
cast call $C "target()(address)"
cast call $C "asset()(address)"
cast call $C "holder()(address)"

# Direct slot reads
cast storage $C 0   # staked
cast storage $C 1   # packed slipBps + owner
cast storage $C 2   # target
cast storage $C 3   # asset
cast storage $C 4   # holder