ERC-7535 이더 네이티브 ERC-4626 금고 (Native Asset ERC-4626 Tokenized Vault)

Final · 금고·DeFi · 2023-10-12 작성

ERC-4626 토큰화 금고(Vault) 인터페이스를 그대로 유지하면서 ERC-20 토큰 대신 이더리움의 기본 화폐인 이더(ETH)를 금고의 기초 자산으로 넣고 뺄 수 있게 하는 표준입니다.

왜 필요한가

ERC-4626은 자산을 맡기면 지분 토큰을 받는 금고의 공통 규격이지만, 맡길 수 있는 자산을 ERC-20 토큰으로 전제합니다. 그런데 이더 자체는 ERC-20 토큰이 아니어서 토큰 전송 함수나 사용 승인(approve) 절차가 없고 거래에 금액을 직접 실어 보내는 방식(msg.value)으로 움직입니다. 그래서 이더를 직접 받는 금고, 특히 이더를 맡기고 유동화 토큰을 받는 리퀴드 스테이킹 토큰(Liquid Staking Token) 같은 서비스는 ERC-4626을 그대로 쓸 수 없었습니다. 각 서비스가 제각각의 방식으로 이더 예치 기능을 만들면, ERC-4626에 맞춰 만들어진 기존 도구나 프로토콜과 호환되지 않고 통합 비용이 커집니다. 이 표준은 ERC-4626과 똑같은 함수 모양을 유지하면서 이더를 다룰 때 달라지는 동작만 정해, 기존 생태계와의 호환성을 최대한 살립니다.

심층 설명

ERC-4626 대비 달라지는 동작

이 표준의 금고는 ERC-4626(그리고 ERC-20)을 반드시 구현하되 asset, deposit, mint 세 함수의 동작만 바꿉니다. 모든 assets 수량은 ERC-20 잔액이 아니라 이더의 wei 단위를 뜻합니다. ERC-20 transfer 호출은 이더 전송(send 또는 call)으로 대체되고 기초 자산에 대한 transferFrom 승인 흐름은 구현하지 않습니다. deposit과 mint는 상태 변경성이 payable이어야 하고 deposit은 msg.value를 기본 입력으로 쓰며 assets 매개변수는 무시해도 됩니다. 이벤트 사용 방식은 ERC-4626과 동일해야 합니다.

asset은 이더 대표 주소를 반환

이더는 컨트랙트 주소가 없으므로, asset 함수는 ERC-7528이 정한 이더 대표 주소 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE를 반드시 반환해야 합니다. 이 주소를 보고 통합하는 쪽은 이 금고의 기초 자산이 ERC-20 토큰이 아니라 네이티브 이더임을 알 수 있습니다.

deposit은 msg.value가 기준

deposit은 정확히 msg.value만큼의 이더를 예치하고 receiver에게 지분을 발행합니다. 지분 계산의 기본 입력은 msg.value여야 하고 assets 매개변수는 무시할 수 있습니다(MAY). 예치 한도 도달이나 슬리피지 등으로 msg.value 전액을 예치할 수 없으면 반드시 되돌려야 하며 Deposit 이벤트를 반드시 발생시켜야 합니다. assets 입력을 남겨 둔 이유는 ERC-4626과 함수 모양을 똑같이 유지하기 위해서입니다. msg.value는 어차피 항상 전달되므로 이를 기준값으로 삼고 assets와의 일치를 강제하면 불필요한 가스 비용이 들거나 두 값이 달라 미정의 동작이 생길 수 있어 무시 가능하게 두었습니다.

mint는 지분 수량이 기준

mint는 정확히 shares만큼의 지분을 receiver에게 발행하고 필요한 이더 양 assets를 반환합니다. payable이어야 하고 Deposit 이벤트를 발생시켜야 하며 예치 한도 도달, 슬리피지, 사용자가 보낸 msg.value가 부족한 경우 등 shares 전부를 발행할 수 없으면 되돌려야 합니다. 원문은 msg.value와 assets 반환값이 같아야 한다고 강제하지 않습니다. 사용자가 이더를 약간 넉넉히 보내는 경우가 많은데 일치를 강제하면 불필요하게 거래가 실패하기 때문입니다. 남는 이더를 환불할지 금고가 흡수할지는 구현자가 정하고 예치자는 최대한 정확한 금액을 보내는 것이 좋습니다.

래핑된 이더 금고에는 적용 금지

래핑된 이더(Wrapped ETH) ERC-20 토큰을 기초 자산으로 쓰는 ERC-4626 금고는 이 표준을 구현해서는 안 됩니다. 이 표준은 네이티브 이더에만 적용됩니다. 래핑된 이더 금고는 일반 ERC-4626로 충분하고 두 표준이 섞이면 미묘한 동작 차이 때문에 혼란이 생길 수 있기 때문입니다.

설계 방향: 최소한의 변경

이 표준은 ERC-4626과의 호환성을 최대화하고 인터페이스에 추가 의견을 최소한으로 넣는 방향으로 설계되었습니다. deposit의 중복 assets 입력을 유지하되 사용을 선택 사항으로 두고 mint에서 msg.value와 assets의 관계를 강제하지 않으며 fallback 동작이나 다른 함수의 payable 여부, 강제로 들어온 이더 처리 방식도 규정하지 않습니다. ERC-4626과 다른 부분은 전부 이더가 ERC-20이 아니라는 사실을 수용하기 위한 것입니다. 함수 인터페이스 수준에서는 ERC-4626과 완전히 하위 호환되며 다른 표준과 알려진 충돌은 없습니다. 이 제안의 상태는 Final로 확정되었습니다.

쓸 때 주의할 점

ERC 원문 · ← ERCs