Cointime

Download App
iOS & Android

체인 보안 분석 보고서: iZiFinance 스마트 계약 중앙화 위험 분석 보고서

Validated Project

iZiFinance는 이더리움용 레이어 2 확장 솔루션인 zkSync를 활용하는 분산형 금융 프로토콜입니다. zkSync는 레이어 1 네트워크의 보안 및 구성 가능성을 유지하면서 Ethereum에서 빠르고 저렴한 트랜잭션을 가능하게 합니다. 그러나 가스 최적화는 프로토콜의 성능과 수익성에 영향을 미치기 때문에 zkSync에서 스마트 계약 개발을 수행할 때 여전히 중요한 측면입니다.

이 분석에서는 iZiFinance의 핵심 계약 중 하나인 iZiSwapPool.sol을 검토하고 중복 표현을 제거하여 가스 소비를 줄이는 간단한 방법을 찾습니다.

iZiSwapPool 계약

iZiSwapPool 계약은 iZiFinance에서 유동성 풀 및 토큰 교환의 논리를 구현하며 계약의 기능 및 이벤트를 정의하는 IiZiSwapPool 인터페이스를 따릅니다. 이러한 기능 중 하나는 modifyFeeChargePercent로, 계약 소유자가 풀당 수수료 비율을 조정할 수 있습니다. 수수료 징수 비율은 유동성 공급자와 프로토콜 간의 교환 수수료 분배를 결정하는 매개변수입니다. modifyFeeChargePercent 함수의 코드는 다음과 같습니다.

이 함수는 설정할 새 수수료 청구 비율을 나타내는 newFeeChargePercent라는 uint24 유형의 매개변수를 허용합니다. 또한 소유자만 함수를 호출할 수 있고 newFeeChargePercent가 유효한지 확인하는 몇 가지 수정자와 require 문이 있습니다. 코드 분석 본 컨트랙트 코드는 Solidity로 작성되어 수수료 징수율을 수정하는 기능을 나타냅니다. 실제 수정 전에 적용된 제한 사항을 고려하여 안전한 방식으로 설계된 것으로 보입니다(534-536행).

그러나 535줄 require(newFeeChargePercent >= 0, "FP0");는 실제로 불필요합니다. 이는 Solidity에서 uint(부호 없는 정수) 데이터 유형이 음수가 될 수 없기 때문입니다. uint24는 0에서 2^24 - 1 사이의 부호 없는 정수 유형입니다.

따라서 newFeeChargePercent가 0보다 크거나 같은지 확인하는 것은 무부호 정수가 정의상 0보다 작을 수 없기 때문에 동어반복입니다. 따라서 이 줄은 동어반복을 구성하며 코드의 기능에 영향을 미치거나 보안 허점을 도입하지 않고 안전하게 제거할 수 있습니다. 그 바로 다음 줄인 require(newFeeChargePercent <= 100, "FP0");은 newFeeChargePercent가 예상 범위(0-100) 내에 있는지 확인하기에 충분합니다.

중앙 집중화 위험

우리는 또한 프로토콜의 보안과 사용자 자산의 보안을 손상시킬 수 있는 일부 중앙 집중화 위험을 식별했습니다.

중앙 집중화 위험

우리는 또한 프로토콜의 보안과 사용자 자산의 보안을 손상시킬 수 있는 일부 중앙 집중화 위험을 식별했습니다.

안전 조언

iZiFinance 프로젝트 팀을 위해 중앙화 위험으로부터 사용자의 온체인 자산을 보호하기 위한 10가지 안전 팁이 있습니다.

  1. 시간 잠금은 setFarm() 및 setWrapToken()과 같은 주요 기능에 부과되며, 미래의 지정된 시간에만 수정을 허용하여 커뮤니티가 논의하고 합의에 도달할 수 있는 시간을 제공합니다.
  2. 수수료 및 보상에 영향을 미치는 enableFeeAmount() 및 newPool()과 같은 함수를 호출하려면 여러 지갑 주소의 다중 서명 승인이 필요합니다.
  3. expandObservationQueue() 및 collectFeeCharged()와 같은 함수에 대한 역할 기반 액세스 제어를 구현하여 지정된 역할만 호출하도록 제한
  4. 컨트랙트가 배포되면 startBlock, endBlock, rewardPerBlock과 같은 핵심 매개변수를 불변으로 만들고 후속 변경을 허용하지 않습니다.
  5. 민감한 기능에 대한 호출에 대한 커뮤니티 제안 및 투표가 필요한 DAO 거버넌스 구조를 설정합니다.
  6. 모듈식 아키텍처를 채택하여 책임을 분리하고 단일 모듈의 과도한 중앙 집중화를 방지합니다.
  7. 문제가 발생하면 계약을 중지할 수 있는 다중 서명 인증으로 비상 정지 메커니즘을 설정합니다.
  8. 외부 보안 감사를 정기적으로 실시하고 발견된 문제를 적시에 처리하여 중앙 집중식 제어의 위험을 줄입니다.
  9. 개발 중에 퍼징 및 기타 방법을 사용하여 중앙 제어 취약점을 식별하고 제거합니다.
  10. 최소 권한 원칙을 따르고 역할 및 계정에 필요한 최소한의 권한만 부여합니다.

이러한 중앙 집중화 위험은 계약 소유자가 계약의 매개변수 및 기능을 과도하게 제어할 수 있다는 사실에서 비롯되며, 이로 인해 소유자가 프로토콜을 조작하거나 사용자에게 피해를 줄 수 있습니다. 또한 이 분석이 iZiFinance의 스마트 계약을 개선하기 위한 몇 가지 유용한 통찰력과 보안 권장 사항을 제공할 수 있기를 바랍니다.

팔로우

트위터: @MetaTrustLabs

웹사이트: metatrust.io

댓글

모든 댓글

Recommended for you