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

Proxy Liquid Staking 구조 구현 (Sepolia Testnet)

#Web3#스마트컨트랙트#스테이킹

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토큰의 발행량 등을 계산해서 그에 상응하는 유동성을 유저의 지분으로 계산해야 함