
…
0. Object
자동화된 유동성 공급 시스템
사용자는 복잡한 과정 없이 단일 자산(USDC)만 예치하면, 프로토콜이 자동으로 최적의 스왑과 유동성 공급을 수행하고, 그에 상응하는 지분 토큰(stToken)을 발행한다.
1. Info
Address
- Signer : 0x8A2c597029681cabdA12d8A66e3dc299D3892cEF
- AutoLPVault
- with V2 : 0x49c2F2fD7AB05e9d555e56047bC64A7Ea0dFA9d9
- with V3 : 0xF90F8291E491D41Ee6bBB26d5232b12Ca0D2Fd41
- Token
- USDC : 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238
- WETH : 0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14
Sepolia Faucet
- Sepolia ETH faucet (0.0001개): https://testnet.help/en/ethfaucet/sepolia
- Sepolia ETH faucet (POW) : https://sepolia-faucet.pk910.de
- Sepolia USDC faucet (1개) : https://faucet.circle.com
Sepolia Network Info
- RPC URL: https://ethereum-sepolia-rpc.publicnode.com
- ChainId : 11155111
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

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

- Signer 지갑에서 Vault 컨트랙트로 USDC 이동
- USDC 일부를 WETH로 스왑(설정된 가격 범위에 맞게)
- 컨트랙트가 USDC를 라우터로 전송
- 라우터가 컨트랙트로 상응하는 WETH 전송
- V3 NFT Manager를 통해 USDC-WETH 유동성 추가 (
mintorincreaseLiquidity) - Vault 컨트랙트는 NFT 포지션 획득 or 기존 포지션 유동성 증가
- Signer에게 stUSDC (증가된 유동성에 비례) 발행
4. 고려사항
- 스왑비율
- 스왑 전과 후의 가치가 달라질 수 있으므로 유동성을 넣고 난 뒤의 남는 자투리 자금 정책도 필요할 듯
- V2: 무조건 가치 기준 50:50
- V3: Tick Range에 따라 비율 달라짐
- lp 수수료 재투자
- V2: 수수료가 유동성에 그대로 섞임
- V3: 수수료가 격리되므로 claim해서 넣지 않으면 복리 효과가 없음
- Range
- V2
- 장: 유지보수 용이
- 단: 사실상 Full Range라서 자본 효율낮음
- V3
- 장: 자본 효율이 높음
- 단: 주기적으로 수수료를 claim해서 유동성에 추가하거나 지속적으로 포지션의 유효성을 체크해서 리밸런싱하는 로직이 붙어야됨
- 포지션의 inactive를 방지하기 위해 아예 넓은 범위로 고정한다면 유저의 신규 진입 시 기존 포지션 NFT를 그대로 유동성의 양만 늘리면 되고, 전체유동성 중 st토큰의 발행량 등을 계산해서 그에 상응하는 유동성을 유저의 지분으로 계산해야 함
- V2