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가지 안전 팁이 있습니다.
- 시간 잠금은 setFarm() 및 setWrapToken()과 같은 주요 기능에 부과되며, 미래의 지정된 시간에만 수정을 허용하여 커뮤니티가 논의하고 합의에 도달할 수 있는 시간을 제공합니다.
- 수수료 및 보상에 영향을 미치는 enableFeeAmount() 및 newPool()과 같은 함수를 호출하려면 여러 지갑 주소의 다중 서명 승인이 필요합니다.
- expandObservationQueue() 및 collectFeeCharged()와 같은 함수에 대한 역할 기반 액세스 제어를 구현하여 지정된 역할만 호출하도록 제한
- 컨트랙트가 배포되면 startBlock, endBlock, rewardPerBlock과 같은 핵심 매개변수를 불변으로 만들고 후속 변경을 허용하지 않습니다.
- 민감한 기능에 대한 호출에 대한 커뮤니티 제안 및 투표가 필요한 DAO 거버넌스 구조를 설정합니다.
- 모듈식 아키텍처를 채택하여 책임을 분리하고 단일 모듈의 과도한 중앙 집중화를 방지합니다.
- 문제가 발생하면 계약을 중지할 수 있는 다중 서명 인증으로 비상 정지 메커니즘을 설정합니다.
- 외부 보안 감사를 정기적으로 실시하고 발견된 문제를 적시에 처리하여 중앙 집중식 제어의 위험을 줄입니다.
- 개발 중에 퍼징 및 기타 방법을 사용하여 중앙 제어 취약점을 식별하고 제거합니다.
- 최소 권한 원칙을 따르고 역할 및 계정에 필요한 최소한의 권한만 부여합니다.
이러한 중앙 집중화 위험은 계약 소유자가 계약의 매개변수 및 기능을 과도하게 제어할 수 있다는 사실에서 비롯되며, 이로 인해 소유자가 프로토콜을 조작하거나 사용자에게 피해를 줄 수 있습니다. 또한 이 분석이 iZiFinance의 스마트 계약을 개선하기 위한 몇 가지 유용한 통찰력과 보안 권장 사항을 제공할 수 있기를 바랍니다.
팔로우
트위터: @MetaTrustLabs
웹사이트: metatrust.io
모든 댓글