Proxy Liquid Staking 구조 구현 (Sepolia Testnet)
JAY.LOG
dev/January 7, 2026

Proxy Liquid Staking 구조 구현 (Sepolia Testnet)

0. Object

자동화된 유동성 공급 시스템

사용자는 복잡한 과정 없이 단일 자산(USDC)만 예치하면, 프로토콜이 자동으로 최적의 스왑과 유동성 공급을 수행하고, 그에 상응하는 지분 토큰(stToken)을 발행한다.

1. Info

Address

  • Signer : 0x8A2c597029681cabdA12d8A66e3dc299D3892cEF
  • AutoLPVault
    • with V2 : 0x49c2F2fD7AB05e9d555e56047bC64A7Ea0dFA9d9
    • with V3 : 0xF90F8291E491D41Ee6bBB26d5232b12Ca0D2Fd41
  • Token
    • USDC : 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238
    • WETH : 0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14

Sepolia Faucet

Sepolia Network Info

2. 자금 흐름 구조

V2

graph TD
    %% 스타일 정의
    classDef user fill:#FFF9C4,stroke:#FBC02D,stroke-width:2px,color:black;
    classDef vault fill:#E8F5E9,stroke:#4CAF50,stroke-width:2px,color:black;
    classDef uni fill:#FCE4EC,stroke:#F06292,stroke-width:2px,color:black;
    classDef token fill:#E3F2FD,stroke:#2196F3,stroke-width:2px,color:black;

    %% 노드 정의
    U(User 지갑):::user
    V[AutoLP Vault 컨트랙트]:::vault
    Pool[Uniswap USDC-WETH 페어]:::uni
    ST(st토큰):::token

    %% 흐름 연결
    U -->|1. USDC 토큰 전송| V
    
    subgraph Zap_Process ["세부 로직 with V2"]
	    V -->|2. USDC 절반을 WETH로 스왑| Pool
	    Pool -->|3. WETH 토큰 확보| V
	    V -->|4. USDC-WETH 유동성 공급| Pool
	    Pool -->|5. LP 토큰 확보| V
    end

    V -->|6. LP토큰 1:1 대응 mint | ST
    ST -->| | U

V3

graph TD
		%% 스타일 정의
    classDef user fill:#FFF9C4,stroke:#FBC02D,stroke-width:2px,color:black;
    classDef vault fill:#E8F5E9,stroke:#4CAF50,stroke-width:2px,color:black;
    classDef uni fill:#FCE4EC,stroke:#F06292,stroke-width:2px,color:black;
    classDef token fill:#E3F2FD,stroke:#2196F3,stroke-width:2px,color:black;

    %% 노드 정의
    U(User 지갑):::user
    V[AutoLP Vault 컨트랙트]:::vault
    Pool[Uniswap V3 Pool / NFT Manager]:::uni
    ST(st토큰):::token
    Cron[Cron job]:::cron

    %% 흐름 연결
    U -->|1. USDC 토큰 전송| V
    
    subgraph Zap_Process ["세부 로직 with V3"]
      V -->|2. 설정된 tick 범위에 맞춰 최적 비율로 스왑| Pool
      Pool -->|3. WETH 토큰 확보| V
      V -->|4. 지정된 tick 범위에 유동성 공급| Pool
      Pool -->|5. NFT 확보| V
    end

    V -->|6. 유동성에 1:1 대응 mint| ST
    ST -->| | U
    Cron -->| 7. 포지션 유효성 검사| Pool

3. 구현 결과

  • with V2

    https://sepolia.etherscan.io/tx/0x4030279ca42c2921efa4d1a88b7fda3890954d353c463e97eab42290c94e4106

    1. Signer 지갑에서 Vault 컨트랙트로 USDC 이동
    2. USDC 일부를 WETH로 스왑
      1. 컨트랙트가 USDC를 라우터로 전송
      2. 라우터가 컨트랙트로 상응하는 WETH 전송
    3. USDC-WETH V2 Pair에 addLiquidity
    4. Vault 컨트랙트는 LP 토큰 획득
    5. Signer에게 stUSDC(LP토큰 1:1) 발행
  • with V3

    https://sepolia.etherscan.io/tx/0xa1bfaa62bf93826ceb292f2f6f3acd88241d0bfc97bf79c78f890382f8e5a743

    1. Signer 지갑에서 Vault 컨트랙트로 USDC 이동
    2. USDC 일부를 WETH로 스왑(설정된 가격 범위에 맞게)
      1. 컨트랙트가 USDC를 라우터로 전송
      2. 라우터가 컨트랙트로 상응하는 WETH 전송
    • V3 NFT Manager를 통해 USDC-WETH 유동성 추가 (mint or increaseLiquidity)
    • Vault 컨트랙트는 NFT 포지션 획득 or 기존 포지션 유동성 증가
    • Signer에게 stUSDC (증가된 유동성에 비례) 발행

4. 고려사항

  1. 스왑비율
    • 스왑 전과 후의 가치가 달라질 수 있으므로 유동성을 넣고 난 뒤의 남는 자투리 자금 정책도 필요할 듯
    • V2: 무조건 가치 기준 50:50
    • V3: Tick Range에 따라 비율 달라짐
  2. lp 수수료 재투자
    • V2: 수수료가 유동성에 그대로 섞임
    • V3: 수수료가 격리되므로 claim해서 넣지 않으면 복리 효과가 없음
  3. Range
    • V2
      • 장: 유지보수 용이
      • 단: 사실상 Full Range라서 자본 효율낮음
    • V3
      • 장: 자본 효율이 높음
      • 단: 주기적으로 수수료를 claim해서 유동성에 추가하거나 지속적으로 포지션의 유효성을 체크해서 리밸런싱하는 로직이 붙어야됨
        • 포지션의 inactive를 방지하기 위해 아예 넓은 범위로 고정한다면 유저의 신규 진입 시 기존 포지션 NFT를 그대로 유동성의 양만 늘리면 되고, 전체유동성 중 st토큰의 발행량 등을 계산해서 그에 상응하는 유동성을 유저의 지분으로 계산해야 함