Anbi Lab은 "YFII 유동성 채굴 계약 보안 연구"를 발표했으며 관련된 4개의 계약에는 치명적인 보안 취약점이 포함되지 않았습니다.
yfiifinance
2020-08-04 07:16
本文约3420字,阅读全文需要约14分钟
현재 YFII 계약 코드는 Yearn Finance에서 직접 분기되었으며 YFII 토큰의 정기적인 반감 배포를 지원하기 위해 약간의 변경이 이루어졌습니다.

YFII는 새로운 분산형 DeFi 마이닝 풀입니다.Ambi Lab은 커뮤니티 파트너의 초청으로 2020년 7월 27일부터 8월 2일까지 YFII 스마트 계약에 대한 보안 연구를 수행했습니다.

분석 대상은 다음과 같은 계약입니다.

  • YFII Pool 1: 0xb81D3cB2708530ea990a287142b82D058725C092

  • YFII Pool 2: 0xAFfcD3D45cEF58B1DfA773463824c6F6bB0Dc13a

  • YFII Token: 0xa1d0E215a23d7030842FC67cE582a6aFa3CCaB83

  • BPT Token: 0x16cAC1403377978644e78769Daa49d8f6B6CF565

보조 제목

YFII와 YFI란?

보조 제목

현재 YFII 계약 코드는 Yearn Finance에서 직접 분기되었으며 YFII 토큰의 정기적인 반감 배포를 지원하기 위해 약간의 변경이 이루어졌습니다.

현재 YFII 계약 코드는 Yearn Finance에서 직접 분기되었으며 YFII 토큰의 정기적인 반감 배포를 지원하기 위해 약간의 변경이 이루어졌습니다.

다음 표는 YFII와 관련된 계약과 YFI 계약 간의 해당 관계 및 주소를 보여줍니다.

YFI/YFII 토큰은 프로젝트 거버넌스 토큰 계약이며 두 가지 구현이 일관되며 특히 민트 및 간단한 거버넌스 기능을 갖춘 표준 ERC-20 토큰입니다.

BPT Token은 Balancer Pool Token 계약으로 마켓 메이커의 유동성 증명 토큰이며 실제로 자동 마켓 메이커 계약 Balancer에 의해 제공됩니다.BFactory진입 계약이 생성되므로 둘의 구현이 완전히 일치합니다. 계약 코드는 이전에 Trail of Bits 및 Consensys Diligence에서 개발했습니다.감사

Pool1과 Pool2는 거버넌스 토큰을 분배하는 데 사용되는 유동성 채굴 계약입니다.Pool1과 Pool2의 코드는 동일한 방식으로 구현되며 둘 다 YearnRewards 계약이라고 하며 YFI에 대한 YFII의 변경 사항이 이 계약에 있습니다.

보조 제목

YFII 및 YFI 핵심 계약에 대한 간략한 분석

YFII 및 YFI 유동성 채굴의 핵심 계약 코드 YearnRewards는 실제로 Synthetix 프로젝트에서 파생됩니다.Unipool심사심사

YearnRewards를 기반으로 하는 유동성 채굴의 전체 프로세스는 다음 단계로 나눌 수 있습니다.

  • RewardDistribution 권한이 있는 주소는 사전에 YearnRewards 계약의 notifyRewardAmount() 함수를 호출하여 보상 금액을 설정하고 해당 금액의 YFI 토큰을 YFI minter에서 YearnRewards 계약으로 전송해야 합니다.

  • 채굴자는 YearnRewards 계약(자동 시장 조성자 DEX 또는 대출 계약일 수 있음)에 지정된 대상 DeFi 계약에 유동성(일반적으로 스테이블 코인 예치)을 제공하고 해당 유동성 증명 토큰(일반적으로 풀 토큰이라고도 함)을 얻습니다. 토큰을 사용하여 자산을 교환하고 이자 또는 수수료 수입을 얻을 수 있습니다.

  • 채굴자는 스테이크() 함수를 호출하여 얻은 풀 토큰을 YearnRewards 컨트랙트에 예치하고, 컨트랙트는 풀의 총 크기에서 스테이크 기간과 채굴자가 예치한 자금의 크기를 기반으로 자동으로 채굴자의 보상을 계산합니다.

  • 광부는 적법한 보상(YFI 토큰)과 이전에 예치한 풀 토큰을 언제든지 인출할 수 있습니다.

보조 제목

몇 가지 발견

앞서 언급했듯이 YFII는 YFI와 비교하여 전체 코드 변경이 상대적으로 적습니다.

두 개의 새로운 데코레이터 함수가 추가되어 stake(), withdraw() 및 getReward()의 세 가지 주요 함수 함수를 제한합니다.

YFI 토큰 계약을 직접 제어하여 현재 YearnRewards 계약에 지정된 수의 토큰을 알림(증가)하고 분배 보상으로 사용하는 데 사용되는 새로운 코드 라인이 notifyRewardAmount() 함수에 추가되었습니다. 따라서 Pool1 및 Pool2 계약은 YFII 토큰 계약의 발행인이어야 합니다.

이로 인해 YFII와 YFI는 토큰 분배 세부 사항의 논리가 약간 다릅니다. YFI의 각 기간에 대한 보상 분배에는 금액을 설정하고 토큰으로 이체할 책임이 있는 특정 주소가 필요합니다. YFII는 첫 번째 기간이 시작되기 전에 notifyRewardAmount() 작업을 실행하는 것 외에도 사용자가 호출할 때 주기적으로 출력을 자동으로 절반으로 줄입니다.

또한 커뮤니티 개발자 Madao 및 gaojin과 코드 세부 사항을 논의하는 과정에서 Madao는 Token 생산의 자동 반감 실행이 checkhalve() 함수 실행에 달려 있지만 실제로는 사용자와 사용자 간의 상호 작용에 달려 있다고 언급했습니다. 계약 및 실행 시간을 정확하게 제어할 수 없습니다. 이전 주기가 끝날 때 반감 시간과 예상 시간 사이에 일정 시간 차이가 있을 것이며 실제 계약 반감 시간은 예상 시간.

특히 컨트랙트에서 보상을 계산할 때 2주 사이의 추가 시간 차이를 고려하여 각 사용자별로 계산된 보상 값이 예상 값보다 약간 높아 특정 오류가 발생합니다. 또한 오류가 존재하는 한 이론적으로 Pool에서 보상을 마지막으로 인출한 사람이 정상적으로 인출하지 못할 수도 있음을 발견했습니다. 이는 Mint YFII Token이 계약이 반감됨과 동시에 풀 계약으로 이전되기 때문입니다. 이전 오류의 존재로 인해 계약서에 있는 사용자의 장부 수입이 Mint에서 실제 발행한 Token의 양보다 많습니다. 오류의 계산 방법은 각 기간의 종료 시간과 다음 반감의 실제 시간 사이의 시간 차이 Delta에 반감 후 rewardRate를 곱한 것입니다.

보조 제목

YFII 관리자 권한 처리

YFI와 같은 토큰에는 모두 발행(Mint) 인터페이스가 있으며 발행 권한이 있는 주소는 추가 토큰을 발행할 수 있습니다. Minter를 추가하고 삭제할 권한이 있는 YFI Token의 거버넌스 관리자도 있습니다. 이상적으로는 이러한 주소 특수 권한 주소는 다중 서명 계약 또는 기타 특수 계약이어야 합니다.

또한 YearnRewards 계약에는 rewardDistribution 권한 주소가 있으며, 이는 notifyRewardAmount() 함수를 호출하여 보상 금액을 설정하는 데 사용됩니다. YearnRewards 계약에는 rewardDistribution 주소를 설정하는 데 사용되는 소유자 권한 주소도 있습니다.

현재 YFII 프로젝트의 관행은 YFII 토큰 거버넌스 관리자와 Pool1 및 Pool2의 rewardDistribution을 주소 0으로 설정하는 것입니다. 기록을 파기할 수 있는 관리자 권한은 다음에서 찾을 수 있습니다.https://burn.yfii.finance/. 점검 결과 관리자 권한 소멸 사실입니다. 현재 Pool1과 Pool2의 두 계약 주소에만 YFII 토큰의 발행 권한이 있으며, 이는 주기적인 반감을 달성하는 데 필요한 권한이며 향후 남용될 수 없습니다.

특히 원래 YFI 토큰 코드의 구현에서 특권 기능인 addMinter()에 이벤트가 추가되지 않았기 때문에 일반 사용자가 계약에 얼마나 많은 발행인이 있는지 확인할 수 없다는 점을 언급할 가치가 있습니다. 이것은 다양한 YFI 프로젝트가 뒷문에 숨는 것을 매우 쉽게 만듭니다.

검사 후 YFII 토큰 계약은 총두 개의 addMinter() 레코드만요약하다

요약하다

전체적으로 YFI는 매우 의미 있는 DeFi 혁신 실험입니다.Yearn Finance를 통해 우리는 DeFi 커뮤니티의 채굴 및 거버넌스 열정을 충분히 자극한 탈중앙화된 거버넌스 토큰의 배포를 보았습니다.

안전 조언

안전 조언

유동성 채굴과 디파이 상품의 인기에 힘입어 다양한 신규 디파이 스마트 컨트랙트가 시장에 등장하면서 결합 위험이 급격히 증가했다. Ambi Labs는 사용자에게 DeFi 프로젝트와 상호 작용할 때 먼저 안전에 주의를 기울이고, 도메인 이름과 계약 주소를 인식하고, 자금과 관련된 모든 작업을 신중하게 검토하고, 출처를 알 수 없는 스마트 계약과 상호 작용하지 않도록 노력할 것을 상기시킵니다. 또한 DeFi 제품 자체와 스마트 계약의 보안에 더 많은 관심을 기울이고 APR을 맹목적으로 믿지 않고 가치 기반과 위험 소스를 분석하고 손실을 견딜 수있는 금액 만 투자해야합니다.

특별 알림, 참여하는 YFI 유사 프로젝트의 관리자 권한을 확인하려면 이 문서에 제공된 단서를 사용하는 것을 잊지 마십시오.

yfiifinance
作者文库