ERC-4626 금고는 하나의 ERC-20 기초 자산을 받아 지분 토큰(share)을 발행하는 표준 인터페이스입니다. 수익·손실이나 기부로 금고의 총자산이 바뀌면 지분 1개가 나타내는 자산량도 달라질 수 있습니다. deposit은 넣을 자산량, mint는 받을 지분량을 기준으로 하고, withdraw는 꺼낼 자산량, redeem은 태울 지분량을 기준으로 하므로 미리보기 함수와 실제 한도를 함께 읽어야 합니다.
금고 자산과 지분은 서로 다른 수량이다
ERC-4626은 ERC-20 토큰 하나를 기초 자산으로 삼는 토큰화 금고 표준입니다. 사용자가 자산을 맡기면 금고는 소유 비율을 나타내는 ERC-20 지분을 발행합니다. 예치 토큰과 지분 토큰은 계약 주소와 소수 자릿수가 다를 수 있어 화면 숫자를 그대로 비교하면 안 됩니다.
금고가 전략으로 수익을 내면 totalAssets가 늘어 같은 지분이 더 많은 자산을 나타낼 수 있습니다. 손실이나 부실 채권이 생기면 반대입니다. 외부 시장에서 자산 가격이 움직인 것과 금고 안에서 지분당 자산량이 바뀐 것도 구분합니다. 금고 지분의 가치는 기초 자산의 시장 가격과 교환비율이라는 두 요인의 영향을 받습니다.
| 함수 | 사용자가 지정 | 계산되는 값 |
|---|---|---|
| deposit(assets) | 넣을 자산량 | 받을 지분 |
| mint(shares) | 받을 지분 | 필요한 자산 |
| withdraw(assets) | 꺼낼 자산량 | 태울 지분 |
| redeem(shares) | 태울 지분 | 받을 자산 |

그림은 이 주제의 공통 개념을 단순화한 설명입니다. 아래 항목에서 이 글의 구체적인 조건과 예외를 함께 읽어보세요.
- 금고 자산과 지분은 서로 다른 수량이다
ERC-4626은 ERC-20 토큰 하나를 기초 자산으로 삼는 토큰화 금고 표준입니다.
- 환산 함수와 미리보기 함수는 같은 질문이 아니다
convertToShares와 convertToAssets는 평균 교환비율에 따른 이상적인 환산값을 줍니다.
- 반올림은 항상 금고에 유리한 방향을 확인한다
정수 연산에서는 나눗셈 나머지가 생깁니다.
설명을 위한 개념도 · 실제 가격·거래 내역·통계가 아닙니다.
환산 함수와 미리보기 함수는 같은 질문이 아니다
convertToShares와 convertToAssets는 평균 교환비율에 따른 이상적인 환산값을 줍니다. ERC-4626 표준은 이 값을 특정 사용자의 가격 견적이나, 조작될 수 있는 단기 가격 오라클로 쓰지 않도록 구분합니다. 호출자별 제한과 실제 작업 수수료를 반영하지 않을 수 있습니다.
previewDeposit·previewMint·previewWithdraw·previewRedeem은 현재 블록에서 그 작업을 실행했을 때의 결과에 가깝도록 설계됩니다. 입출금 수수료와 표준이 정한 반올림 방향 때문에 환산 함수 결과와 다를 수 있습니다. 프런트엔드는 작업 종류에 맞는 미리보기 함수를 쓰고, 사용자는 최소 수령 지분이나 최대 지불 자산 조건을 확인합니다.
같은 교환비율도 어떤 수량을 고정하느냐에 따라 반올림 위험이 달라집니다.
JOBCOIN 해설
반올림은 항상 금고에 유리한 방향을 확인한다
정수 연산에서는 나눗셈 나머지가 생깁니다. 표준은 deposit, redeem 같은 함수가 사용자에게 지나친 이익을 주지 않도록 반올림 방향을 정해 둡니다. 예치액이 교환비율에 비해 너무 작으면 받을 지분이 0에 가까워져 예치 가치 대부분을 잃을 수 있습니다.
화면에 보이는 소수점 수량이 넉넉해 보여도 실제 기본 단위로 미리보기 함수를 호출합니다. 가격 변동 보호 장치 없이 deposit을 직접 호출하면, 상태가 바뀌는 사이에 예상보다 적은 지분을 받을 수 있습니다. 라우터나 래퍼를 쓴다면 minShares·maxAssets 같은 사용자 제한이 실제 호출 데이터에 들어가는지 확인합니다.
- 자산 계약과 지분 계약의 주소·소수 자릿수를 각각 확인합니다.
- 작업에 맞는 미리보기 함수 결과를 읽습니다.
- 최소 수령이나 최대 지불 조건을 설정합니다.
- maxDeposit·maxMint·maxWithdraw·maxRedeem 한도를 함께 확인합니다.
초기 금고는 기부로 교환비율이 왜곡될 수 있다
금고가 비어 있거나 지분 공급이 아주 적을 때, 공격자가 먼저 소량을 예치한 뒤 자산을 직접 기부하면 자산 대비 지분 비율을 크게 움직일 수 있습니다. 뒤이어 들어온 사용자의 예치가 반올림돼 지분을 거의 0개만 받으면, 기부자가 기존 지분으로 그 가치를 빨아들이는 인플레이션 공격(inflation attack)이 가능해집니다.
OpenZeppelin 가이드는 가상 자산과 가상 지분, 소수 자릿수 오프셋을 둬서 초기 환율과 반올림 손실을 줄이는 방법을 설명합니다. 모든 ERC-4626 구현이 같은 방어를 쓰지는 않습니다. 배포된 코드의 _convertToShares, 초기 공급, 최소 예치액, 라우터 보호를 확인하고, 빈 금고에 큰 금액을 처음으로 맡기지 않습니다.
한도 함수는 유동성과 정책 제한을 보여 준다
maxWithdraw와 maxRedeem은 소유권뿐 아니라 지금 출금할 수 있는 범위를 나타낼 수 있습니다. 전략 자산이 묶여 있거나 출금 대기열, 일일 한도, 일시 정지가 있으면 totalAssets가 넉넉해 보여도 당장 인출할 수 있는 양은 적을 수 있습니다. 미리보기 함수가 값을 보여 줘도 한도 때문에 실제 호출이 실패할 수 있습니다.
totalAssets를 어떻게 정의했는지도 구현을 읽어 봐야 합니다. 외부 전략의 미실현 가치, 받을 이자, 회수할 수 없는 자산을 어떻게 평가하느냐에 따라 지분 가격이 달라집니다. ERC-4626 호환이라고 전략의 건전성이나 언제든 가능한 상환을 보증하지는 않습니다.
예치 전 회계와 권한을 함께 점검한다
금고 계약을 업그레이드할 수 있는지, 자산을 옮기는 관리자와 전략 주소가 누구인지 확인합니다. asset()이 돌려주는 기초 자산 계약이 공식 문서와 같은지 보고, 승인 대상이 금고인지 라우터인지 구분합니다. 무제한 승인은 지분 교환비율과는 별개인 지갑 권한 위험입니다.
소액을 예치한 뒤 실제 받은 지분과 미리보기 결과를 비교하고, 곧바로 previewRedeem과 maxRedeem을 조회합니다. 수익률 표시는 과거 교환비율 변화일 수 있으며, 보상 토큰과 기초 자산 손익이 섞여 있을 수 있습니다. 거래 영수증의 Deposit·Withdraw 이벤트와 자산·지분 잔액을 함께 기록합니다.
자주 묻는 질문
ERC-4626 지분은 기초 자산과 항상 1대1인가요?
아닙니다. totalAssets와 총 지분의 관계, 수익·손실·수수료에 따라 교환비율이 바뀔 수 있습니다.
deposit과 mint는 무엇이 다른가요?
deposit은 넣을 자산을 고정하고 받을 지분을 계산하며, mint는 받을 지분을 고정하고 필요한 자산을 계산합니다.
표준 금고면 원금 상환이 보장되나요?
아닙니다. ERC-4626은 인터페이스와 회계 함수 규칙을 표준화할 뿐, 전략 손실, 유동성, 관리자 위험을 보증하지 않습니다.
더 깊이 읽기
본문에서 다룬 개념과 확인 절차를 다음 글에서 이어서 살펴보세요.



