[OlympusDAO를 분석해보자] — 4. 주목할 만한 기능들

DongHeon Lee
BerryFi
Published in
9 min readFeb 11, 2022

BerryFi는 크립토 씬에서 화제가 되었던 프로젝트들을 코드 수준까지 분석하는 개발자/기획자들의 모임입니다. BerryFi의 첫 번째 시리즈로 올림푸스 다오에 대한 분석 아티클을 연재합니다. 본 글은 올림푸스 다오 깃헙 레포지토리 메인 브랜치에 22년 2월 4일 업데이트된 272e169450커밋을 기준으로 하고 있습니다.

Author: 이동헌

Audited By: 이태헌, 표정우

앞선 아티클에서 올림푸스 다오의 핵심이 되는 Bond, Staking과 Treasury 관련 컨트랙트를 분석했다. 본 시리즈의 마지막 편인 이번 글에서는 지금까지 분석한 컨트랙트 외에 올림푸스 다오에서 주목할 가치가 있는 기능들을 살펴보고 Q&A 형식으로 정리하였다.

1. Allocator는 무엇이고 어디에 쓰이는가?

Olympus v2의 특징 중 하나인 Allocator는 외부 디파이 전략에 treasury의 자산을 배치하기 위해 작성된 컨트랙트로, 주로 passive income을 얻고 런웨이를 연장시킬 목적으로 사용된다. 현재 Convex, FXS, BTRFLY / LOBI 등 다양한 Allocator 컨트랙트가 배포되어 있는데 여기서는 비교적 단순한 전략을 가진 AAVE Allocator를 살펴보기로 한다.

AAVE Allocator는 reserve 자산을 AAVE에 예치하고 이자를 수취하는 전략으로 Olympus forum의 OIP-13 제안에 따라 생성되었다.

aToken에 관한 정보를 저장하는 자료구조는 위와 같다. limit는 deploy할 수 있는 최대 토큰 수량을 정의하고, limitChangeTimelockEndlimit을 변경할 수 없는 기간인 타임락을 블록 넘버로 정의한 것으로 limit 의 잦은 변경에 제동을 거는 역할을 한다.

AAVE Allocator의 주요 함수는 AAVE에 토큰을 예치하는 deposit과 AAVE에서 토큰을 인출하는 withdraw 함수이다. deposit함수는 amount만큼의 토큰을 예치할 경우 limit를 초과하는지 확인한 후 treasurymanage함수를 호출하여 reserve 자산을 인출한다. 이후 lending pool에 자산을 예치하고 internal function인 accountingFor을 통해 aTokenData를 업데이트한다.

withdraw는 lending pool에서 자산을 인출하고 treasury.deposit함수를 호출하는데, 이때 treasury.deposit의 인자인 valuetreasury.tokenValue를 먼저 할당하는 것을 볼 수 있다. 이는 treasury에 자산을 보내더라도 OHM이 추가로 발행되지 않게 하기 위한 장치로 3. Treasury 및 Staking 컨트랙트 코드 리뷰deposit 함수 부분을 보면 자세히 알 수 있다.

이 외에도 AAVE Allocator에는 파밍된 AAVE 토큰을 수집하는 harvest() 함수가 있다.

2. Treasury에서 Debt의 의미는 무엇이고 어떻게 활용될 수 있는가?

올림푸스 다오 컨트랙트에는 서로 다른 두 가지 Debt이 등장하는데, 하나는 2편에서 살펴보았듯 채권 판매에 따라 발생할 OHM의 양을 의미하고 다른 하나는 DAO에 의해 승인받은 address가 Treasury의 자산을 빌려갈 수 있게 하는 기능을 의미한다. 여기서는 후자의 Debt에 대해 설명한다.

승인받은 address는 OHM을 빌릴 수도 있고 reserve를 빌릴 수도 있는데 각각의 경우에 대해 살펴보겠다.

OHM을 빌려갈 때

1) Debt 생성

incurDebt함수를 호출하면 먼저 호출자가 OHMDEBTOR로 승인받은 address인지를 체크한다. 그리고 sOHM.changeDebt 함수를 호출하는데 이는 sOlympusERC20.sol에서 정의된 함수로 OHM를 빌리기에 충분한 sOHM을 담보로 갖고 있는지 체크하고 debtBalanace를 업데이트하는 함수이다.

즉 승인받은 address는 자신이 가진 sOHM의 balance까지 OHM을 빌릴 수 있는데, 이는 OHM을 스테이킹한 상태에서 그만큼의 OHM 유동성을 활용하는 것이 가능하다는 것을 의미한다.

다시 incurDebt 함수로 돌아가보면, sOHM.changeDebt를 호출한 뒤에 OHM.mint 함수를 통해 OHM을 발행하는 로직을 볼 수 있다. 즉 OHM을 빌리는 것은 어딘가에 있는 OHM을 transfer 하는 것이 아니라 새로운 OHM을 발행하는 것이다.

다만 이렇게 발행된 양에 해당하는 ohmDebtbaseSupply에서 제외되기 때문에 2. Bonding Contract 코드 리뷰에서 살펴본 controlVariable에는 영향을 미치지 않는다.

2) Debt 상환

OHM Debt의 상환은 repayDebtWithOHM함수를 통해 이루어진다. 이 함수는 상환하는 OHM 수량을 소각하고 sOHM.changeDebt를 통해 debtBalance를 업데이트한다.

Reserve를 빌려갈 때

1) Debt 생성

incurDebt함수를 호출하면 호출자가 RESERVEDEBTOR로 승인받은 address인지를 체크한 후sOHM.changeDebt 함수를 호출한다. 이때 OHM으로 표현한 token의 가치를 인자로 받아 address가 보유한 sOHM의 balance와 비교함으로써 대출의 가능 여부를 판단한다. 즉 OHM을 빌릴 때와 마찬가지로 address는 자신이 가진 sOHM 가치까지 reserve를 대출받을 수 있다.

2) Debt 상환

reserve Debt의 상환은 repayDebtWithReserve 함수를 통해 이루어진다. 이 함수는 상환하는 토큰을 Treasury의 주소로 옮기고 totalDebt를 줄이는 역할을 수행한다.

이처럼 Debt는 sOHM을 보유하여 Staking 이자를 계속 받으면서 OHM 또는 reserve 자산을 0% 이자율로, 최대 100%의 LTV로 대출받아 사용할 수 있는 기회를 제공한다. DAO는 이 기능이 어떻게 활용될 수 있을지 불확실하나 잠재성이 크다고 판단하고 있다. 현재 forum.olympusdao.finance 에서 Debt 기능의 usecase에 대한 제안들이 올라오고 있다.

가령 올림푸스의 SubDAO인 Redacted Cartel은 초기 급격한 토큰 가격 상승으로 유동성 부족을 겪은 이후 Bond를 이용하는 것보다 더 빠르게 POL(Protocol-Owned Liquidity)을 확보하기 위해 자신들이 Stake한 OHM을 담보로 OHM을 빌려 OHM-BTRFLY 유동성을 공급하기 위한 OIP-69를 제안한 바 있다.

3. Inverse Bond란 무엇이며 왜 필요한가?

Inverse Bond는 비교적 최근 제안인 OIP-76에서 제시된 개념으로 구매자가 OHM을 팔고 OHM 가격 이상의 reserve를 받을 수 있는 채권이다. 채권의 vesting 기간은 없으며, 채권 행사시 프로토콜은 OHM의 가격에 프리미엄을 더해 OHM을 구매한 뒤 소각한다.

Inverse Bond는 OHM의 가격이 OHM 1개당 backing 자산의 가격보다 낮아졌을 때에만 DAO의 정책 팀에 의해 판매된다. 가령 backing per OHM이 $120, OHM의 시장가가 $100, 프리미엄이 5%라고 하면 채권 구매자는 $105 상당의 reserve 자산을 받고 프로토콜에 OHM을 판매하게 된다.

Inverse Bond에는 OHM의 가격하락을 어느정도 저지하는 효과가 있다. OHM을 시장에서 판매하는 것은 OHM의 가격을 떨어뜨리지만, 채권 행사를 통해 OHM을 소각하게 되면 가격이 떨어지지 않기 때문이다.

Inverse Bond는 backing per OHM을 상승시키는 효과도 있다. 채권의 가격은 backing per OHM보다 낮게 형성될 것이므로, OHM 1개를 소각하는 대신 현재의 backing per OHM보다 적은 양의 reserve를 방출하는 것이기 때문이다.

결과적으로 Inverse Bond는 올림푸스 다오의 경제를 건전하게 만드는 데 기여한다. 이는 담보자산 기반 스테이블 코인과 달리 청산 매커니즘이 없는 OHM토큰이 backing 자산 가격 이상으로 soft하게 유지되도록 하는 역할을 수행한다고 볼 수도 있을 것이다. 하지만 Inverse Bond가 reserve 자산을 매도하지 않는다는 올림푸스 다오의 기존 철학과 상충하는 부분이 있고, 또 reserve 자산이 방출됨으로써 런웨이에 영향을 받기 때문에 커뮤니티에서도 우려가 제기되고 있는 상황이다.

Inverse Bond는 기본적으로 v2 Bond의 코드를 변형한 형태가 될 것이라고 한다. OHM 가격이 backing per OHM을 상회하고 있는 현재 시점에서 공개된 Inverse Bond의 코드는 없고, 이 기능이 필요한 시점에서 투표를 거친 뒤 필요한 contract를 deploy할 예정이라고 한다. 만약 Inverse Bond를 deploy해야 하는 상황이 온다면, 앞에서 언급한 우려를 고려하여 매도할 reserve 자산의 종류와 bond capacity를 적절히 결정하는 이슈가 생길 것이다.

마치며

올림푸스 다오는 backing 자산의 가치보다 높은 프리미엄을 주고 OHM을 발행하는 유저들에 의해 새로운 자본이 시스템으로 계속 유입되어야 유지될 수 있는 디파이 모델이다. 하지만 아래 그래프와 같이 OHM의 Holder 수는 증가세가 둔화된 수준을 넘어 감소하고 있는 추세이다.

DeFi 2.0이 한순간의 유행으로 끝나지 않기 위해서는 신규 유저를 확보 외에도 Treasury 자산 운용을 통해 Treasury 규모를 지속적으로 키워 나갈 방안이 필요해 보인다. 올림푸스 다오의 컨트랙트에는 DAO가 Treasury 자산을 레버리지하여 수익을 얻을 수 있도록 하는 Allocator, Debt 등의 기능이 내재되어 있고 이를 활용하려는 OIP가 forum에서 제안되고 있다.

Redacted Cartel를 필두로 Wonderland 등의 올림푸스 포크 프로젝트에서도 Treasury의 자산으로 Active한 수익을 얻는 것을 메인 BM으로 가져가는 사례들이 등장하고 있다. 이러한 사례들이 DeFi 2.0의 새로운 메타가 될 수 있을지 지켜볼 만 하다.

--

--