728x90
반응형
maia DAO 에서 발생한 버그
Maia DAO는 옴니체인 수익률 및 유동성 마켓플레이스를 목표로 하는 DeFi 프로토콜로, Olympus DAO 모델을 기반으로 트레저리 자산으로 뒷받침되는 준비통화 시스템을 운영한다.
title : 마이아 거버넌스 토큰 잔액 희석이 'vMaia' 금고에서 전환율 메커니즘을 깨뜨리고 있습니다
가설 : vMaia 볼트가 거버넌스 토큰(pbHermes)의 잔액을 .balanceOf()로 직접 조회하여 전환율을 계산하기 때문에, 잔액 희석을 통해 전환율 메커니즘에 영향을 미칠 수 있다.
문제:
ERC4626PartnerManager 추상 컨트랙트에서 _mint에서 pbHermes가 입금 비율만큼 민팅되는데, _burn에는 pbHermes를 소각하지 않는다.
/**
* @notice Mints new partner bhermes tokens to a specific address.
* @param to address to mints tokens to.
* @param amount amount of tokens to mint.
*/
function _mint(address to, uint256 amount) internal virtual override {
if (amount > maxMint(to)) revert ExceedsMaxDeposit();
bHermesToken.claimOutstanding();
ERC20MultiVotes(partnerGovernance).mint(address(this), amount * bHermesRate);
super._mint(to, amount);
}
function _burn(address from, uint256 amount) internal virtual override checkTransfer(from, amount) {
super._burn(from, amount);
}
그래서 입금->출금을 반복할 때마다 볼트 안의 pbHermes잔액이 계속 누적된다.
그러면 increaseConversionRate 함수에서 문제가 발생하는데
partnerGovernance.mint(
address(this), totalSupply * newRate - address(partnerGovernance).balanceOf(address(this))
);
여기서 address(partnerGovernanace).balanceOf(address(this)) 가 비정상적으로 커져있으므로 totalSupply * newRate 보다 커지면 언더플로우가 발생한다.
또 .balanceOf 야
728x90
반응형