
ERC-4626 — DeFi 토큰화 금고의 새로운 표준
작성: Sina Pilehchiha
번역: TechFlow
TLDR: ERC-4626는 토큰화된 금고(Vault)를 위한 표준이다.
ERC-4626 도입 이전에는 각각의 금고가 고유한 명세와 구현 세부사항을 가지고 있었다. 이로 인해 통합이 어렵고 오류 발생 가능성이 높으며 자원 낭비가 심했다.
ERC-4626는 이러한 문제를 해결하기 위해 표준화된 명세를 제시함으로써 통합 작업량을 줄이고, ERC-20과 마찬가지로 더 일관되고 견고한 구현 패턴을 창출하고자 한다.
ERC-4626란 무엇인가?
ERC-4626는 수익성 금고의 기술적 파라미터를 개선하는 표준으로, 단일 기반 ERC-20 토큰에 대한 지분을 나타내는 수익 금고에 표준 API를 제공한다.
토큰화된 금고는 DeFi에서 매우 흔한 패턴이 되었다. 수익 어그리게이터, 대출 시장, 스테이킹 파생상품 등 많은 dApp들이 토큰화된 금고를 활용하고 의존하고 있다. 토큰화된 금고의 예로는 Yearn과 Balancer가 있다. 수익 어그리게이터로서 Yearn 금고는 사용자가 디지털 자산을 입금하고 수익을 얻을 수 있도록 해준다. Balancer는 자동화된 포트폴리오 관리자이자 유동성 공급자로, 그들의 비즈니스 로직 핵심은 금고에 의존한다. 이러한 금고들은 다양한 풀 내 토큰을 관리하면서도, 토큰 관리 로직을 풀 자체의 로직과 분리한다.
프로토콜은 금고를 토큰화함으로써 유동성과 유연성을 강화한다. 토큰화된 금고는 쉽게 거래될 수 있으며 DeFi 플랫폼에서 자산으로 활용할 수 있다. 또한, 다양하고 상호 연결된 금융 상품을 만들 수 있다. 업계는 이런 패러다임을 종종 '머니 레고(Money Legos)'라고 부르며 장려하고 있다.
하지만 적절한 적응이나 표준화되지 않은 조합성은 도전 과제를 야기한다. 이는 개발자들이 ERC-20 같은 산업 표준을 따르기 어렵게 만들 뿐 아니라 신규 개발자들에게 혼란을 초래할 수 있다. 적절한 적응이나 표준화 없이는 새로운 변화를 검토하거나 통합 구현 세부사항을 검증하기도 어렵다.
따라서 ERC-4626는 이러한 문제를 해결하여 통합을 단순화하고, DeFi 참여자들이 궁극적으로 더 안전하고 견고한 통합 금고 규격을 채택할 수 있도록 하기 위해 제안되었다. 이는 반대로 여러 프로토콜 간 토큰 통합 시 발생할 수 있는 공격 면을 줄이는 데도 기여할 것이다.
ERC-4626는 어떤 보안 문제를 방지할 수 있나요?
통일된 표준을 제공함으로써 ERC-4626는 프로토콜 간 통합 구축 속도를 가속화한다. 익숙하고 통일된 표준은 개발자들이 이해하기 쉬우므로 코딩 오류 가능성을 줄여준다. 이를 통해 조합성 문제를 방지할 수 있다. 표준화는 또한 중복 작업을 방지하며, 커뮤니티가 각 프로토콜마다 별도로 금고를 설계하는 것이 아니라 한 번만 설계하면 된다. 이러한 설계 작업은 일반적으로 오류가 발생하기 쉬우므로, 이미 존재하나 보편적인 설계 결함을 반복적으로 피할 수 있다.
여기서 ERC-4626가 방지할 수 있는 문제들을 보여주는 두 가지 사례 연구를 소개하겠다.
Rari Capital 사건
Rari Capital는 약 1100만 달러 상당의 토큰을 해킹당했으며, 이는 Rari Capital 이더리움 풀의 모든 사용자 자금의 60%에 해당한다.
전반적으로 Rari Capital의 해킹은 안전하지 않은 크로스 프로토콜 구현 때문이었다. 그들의 이더리움 풀은 Alpha Finance의 ibETH 토큰 컨트랙트에 ETH를 예치하는 것을 수익 전략으로 사용했다. 이 특정 전략은 ibETH.totalETH / ibETH.totalSupply 함수와 같은 특정 컨트랙트 및 공식을 통해 ibETH/ETH 환율 가치를 추적했는데, 이 공격 시나리오에서는 ibETH.work() 함수 호출 시 부채 가치가 인위적으로 증가되는 등의 오류 출력이 발생할 수 있었다.
공격자는 RariFundManager 컨트랙트 내 deposit 및 withdraw 함수를 반복 호출하기만 하면 Rari Fund Manager를 고갈시킬 수 있었다. deposit과 withdraw 함수는 호출자에게 발행할 REPT 토큰 수량 또는 지급할 ETH 금액을 계산하기 위해 풀의 잔고를 가져와야 했고, 이 작업은 Alpha 풀의 getBalance 함수를 호출하며, ibETH 컨트랙트의 totalETH 함수를 호출하게 된다. Rari는 이 함수를 조작할 수 있다는 사실을 몰랐다.

ibETH 컨트랙트에는 또 다른 함수인 ibETH.work가 있다. 이 함수는 사용자가 지정한 임의의 컨트랙트를 호출할 수 있으므로, Rari의 deposit 및 withdraw 함수는 재진입 가능해져 여러 번 호출될 수 있었다.
work 함수는 payable 함수이며, 사용자가 work 함수를 통해 ibETH 컨트랙트 내 ETH 수량을 조작함으로써 totalETH 함수가 반환하는 값을 변경할 수 있다. 더 나쁜 점은 work 함수가 다른 컨트랙트(예: RariFundManager) 호출도 지원한다는 것이다.
이 함수를 이용해 공격자는 다시 ETH를 보내 ibETH 컨트랙트 내 totalETH 금액을 늘리면서 동시에 RariFundManager 컨트랙트의 withdraw 함수를 호출해 더 많은 자산을 인출할 수 있었다.
이 사건은 DeFi 컨트랙트 내 통합 부족과 호환되지 않는 설계가 초래하는 중대한 위험을 부각시킨다. 이는 ERC-4626과 같은 표준이 중요한 보안 및 예측 가능성 레이어를 추가하여 그러한 공격을 방지하고, 통일된 행동과 상호 이해를 촉진할 수 있음을 강조한다.
Cream Finance 사건
Cream Finance는 플랫폼 내 두 가지 근본적 취약점 — 조작 가능한 믹스드 오라클과 무제한 토큰 공급 — 을 악용한 정교한 공격을 당했다. 공격의 핵심은 믹스드 오라클 조작이었으며, 이는 yUSD 토큰의 인식 가치에 영향을 미쳤다. 공격자가 yUSD 금고에 대량의 Yearn 4-Curve 토큰을 보내자, 금고가 보고하는 환율이 바뀌었고, 이로 인해 오라클이 인식하는 yUSD 토큰의 가치도 영향을 받았다.
여기서 얻는 주요 교훈은 견고하고 조작 불가능한 가격 오라클이 DeFi 프로토콜의 안정성에 필수적이라는 점이다. 시간가중평균가격(TWAP) 오라클은 갑작스러운 가격 조작에 더 강건하므로 이러한 해킹 공격을 방지하는 데 도움이 될 수 있다.
이러한 문제들과 기타 취약한 설계 패턴은 ERC-4626의 신중한 채택과 구현을 통해 완화될 수 있다.
ERC-4626 내 잠재적 보안 리스크
새로운 프로토콜을 사용할 때는 항상 장단점이 존재한다. 토큰화된 금고의 경우 스마트 컨트랙트에 통합할 때 잠재적 문제가 발생할 수 있으므로 특별한 주의가 필요하다.
feeOnTransfer 토큰 관리
금고가 feeOnTransfer 토큰을 지원하도록 설계된 경우, 자산 이체 시 금고 내 금액과 지분이 예상 범위 내에 있는지 확인해야 한다.
decimals 변수의 적절한 사용
convertTo 함수는 EIP-4626 금고의 decimals 변수를 사용하지 않아도 되지만, 가능한 경우 기반 토큰의 decimals 값을 미러링하는 것이 강력히 권장된다. 이 방법은 혼란의 가능성을 제거하고 다양한 프론트엔드 및 오프체인 사용자의 통합을 단순화하는 데 도움이 된다.
반올림 처리
명세에 따르면, 금고 구현자는 다양한 가변 및 조회 함수에서 특정하고 서로 반대되는 반올림 방향을 인식해야 한다. 계산 과정에서 보다 안전한 접근은 사용자보다 금고 자체를 우선시하는 것이다:
-
사용자가 일정량의 기반 토큰을 제공하여 얻을 지분 수를 계산하거나, 특정 지분에 해당하는 기반 토큰을 사용자에게 이체하는 경우, 내림 처리(round down)해야 한다.
-
사용자가 일정량의 기반 토큰을 얻기 위해 필요한 지분 수를 계산하거나, 일정량의 지분을 얻기 위해 제공해야 하는 기반 토큰의 양을 계산하는 경우, 올림 처리(round up)해야 한다.
반올림 방향이 모호할 수 있는 경우는 convertTo 함수이다. 모든 EIP-4626 금고 구현에서 일관성을 유지하기 위해, 이 함수들은 항상 내림 처리해야 한다고 명시되어 있다. 통합자는 결과에 wei 하나를 더하는 식으로 올림 처리 버전을 직접 모방할 수 있다.
사용자가 자신의 지분을 환매(previewRedeem)하여 얻는 기반 자산의 수량은, 동일한 수량의 지분을 발행(previewMint)할 때 필요한 기반 자산의 수량과 크게 다를 수 있다. 이러한 차이는 작을 수 있다(예: 반올림 오차 때문), 혹은 클 수도 있다(예: 금고가 출금 또는 입금 수수료를 구현한 경우). 따라서 통합자는 사용 사례에 가장 적합한 미리보기 함수를 사용해야 하며, 절대 이들 함수가 상호 교환 가능하다고 가정해서는 안 된다.
핵심 기능 오버라이드
기대되는 기능을 구현하거나 확장하기 위해 기존 훅(hook)을 사용하는 것이 좋다. 이 방법은 코드 테스트 및 검토를 보다 효과적으로 수행할 수 있도록 더 쉽게 관리 가능한 트레이싱을 보장한다.
제로 지분(Zero Shares)
ERC-4626 원본 명세는 금고 내 지분이 없는 극단적 경우를 어떻게 처리해야 하는지, 즉 금고가 정상처럼 작동해야 하는지 아니면 롤백해야 하는지를 설명하지 않는다. 이는 혼란과 오류의 잠재적 원인이 될 수 있다.
금고를 가격 오라클로 사용
오라클 가격 조작 공격의 위험에 대해, preview 메서드가 반환하는 값은 가능한 한 정확하게 근접해야 한다. 그러나 이 값들은 체인 상 조건 변경을 통해 조작될 수 있으므로 항상 가격 오라클로 안전하게 사용할 수는 없다. ERC-4626 명세는 부정확한 convert 메서드와 totalAssets 메서드를 허용하므로 강력한 가격 오라클로 구현할 수 있다. 예를 들어 자산과 지분 간 변환 시 convert 메서드를 시간가중평균가격(TWAP)으로 구현하는 것은 올바른 접근이다.
구체적 구현 문제
추가 통합 이전에 통합자는 모든 토큰화된 금고의 구현을 검토해야 한다. 인터페이스 명세에는 부합하는 것처럼 보이지만, 핵심 함수가 완전히 다른 설계 명세로 구성된 악성 구현이 존재할 수 있기 때문이다.
EOA 직접 접근
금고에 직접 접근할 경우, 슬리피지 손실 또는 예기치 못한 입출금 제한을 수용할 수 있는 기능이 구현되어야 한다. 스마트 컨트랙트와 달리 EOA는 트랜잭션 롤백을 위한 장애 조치(fail-safe) 메커니즘이 없으므로, 핵심 함수 호출 시 정확한 출력이 구현되지 않으면 되돌릴 수 없다.
금고 확장
점점 더 많은 참여자들이 ERC-4626 표준을 채택함에 따라, 이 표준을 위한 더 많은 확장이 등장할 것이다. 예를 들어 Superform은 하나의 금고 컨트랙트 내에서 다양한 계산을 지원하는 실험적인 Multi 금고 확장을 개발했다. 자연스럽게 원래 표준에서 구현이 벗어날수록 새로운 취약점을 도입할 가능성은 높아진다. 개발자와 감사자들은 사용 사례에 따라 실제 리스크 수준을 판단하기 위해 최선의 선택을 찾아야 한다.
참고로, 치명적인 사건을 초래하는 것은 각 프로토콜의 최소한의 추가 기능이 아니라, 그것들이 함께 통합될 때 전체적으로 발생하는 부담이다.
위에서 언급한 잠재적 공격 벡터는 ERC-4626 표준 주변에서 많이 논의되는 일부 문제들이다. 채택률이 증가함에 따라 우리는 더 많은 구현 사례와 ERC-4626 금고 통합의 적절한 시나리오들을 탐색하게 될 것이다.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














