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
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