解析爆火鏈游 Fren Pet 的合約安全
封面:Photo by Fabian Albert on Unsplash
在 Friend.tech 熱潮消退後,由兩位開發者構建的基於 Base 鏈的區塊鏈遊戲 Fren Pet 吸引了市場的注意力。 11 月 19 日-20 日,得益於 Base 官方的關注和 Fren Pet 社交裂變的玩法,Fren Pet 在社交媒體上爆紅,成為 GameFi 新秀。
在 Fren Pet 使用者迅速增長的同時,安全方面依然不容忽視。 今天 Beosin 安全團隊將為大家分析 Fren Pet 的設計機制和合約代碼,説明大家瞭解其中的潛在風險。
![](https://web3caff.com/wp-content/uploads/2023/11/image-626.png)
Fren Pet 機制分析
Fren Pet 目前的遊戲內容為寵物鑄造、餵養寵物、與其他用戶的寵物對戰、幸運轉盤和擲骰子。 參與 Fren Pet 的遊戲使用者首先需要鑄造寵物(NFT),每隻寵物的鑄造需花費 100 FP 代幣(如果後續有其他使用者鑄造寵物,花費的 FP 將返還給使用者),然後使用者需要支付 FP 代幣購買蘋果、咖啡等道具餵養寵物,以避免寵物的 TOD(死亡倒計時)歸 0,即持有的 NFT 被自動銷毀。
![](https://web3caff.com/wp-content/uploads/2023/11/image-625.png)
餵養寵物可獲得積分(Pet Point),積分越高,獲得的 ETH 獎勵越多,而 ETH 獎勵來自於 FP 代幣的交易稅,每筆交易收取 5% 的稅費,2% 會分配給遊戲玩家。 因此,參與的使用者越多,對 FP 代幣的需求越多,FP 代幣的交易量越大,獎勵的 ETH 越多。
Fren Pet 合約分析
Fren Pet 的主合約地址為 0x85b157EbaAF289De5301aE6694B651BF3b8df1C3,其 NFT 合約地址為 0x5b51Cf49Cb48617084eF35e7c7d7A21914769ff1,其代幣合約位址為 0xFF0C532FDB8Cd566Ae169C1CB157ff2Bdc83E105,本次我們通過 Beosin VaaS 工具掃描該合約,結合 Beosin 安全審計專家的分析,發現其合約存在以下潛在的安全風險:
![](https://web3caff.com/wp-content/uploads/2023/11/image-624.png)
Fren Pet 主合約
Fren Pet 主合約主要負責上述提到的遊戲內容和獎勵分發。 以下是提升其合約安全性的建議:
1. 添加 nonReentrant 修飾符
在合約的 redeem 和 kill 函數中,開發者應該確認函數無重入攻擊的風險。 建議使用 openzeppelin 防重入合約的 nonReentrant 修飾符以避免重入攻擊。
![](https://web3caff.com/wp-content/uploads/2023/11/image-623.png)
2. 使用安全的隨機數產生器
Fren Pet 主合約使用的隨機數是由區塊和 sender 位址生成的,更為安全的做法是使用類似 Chainlink 的 Verifiable Random Function 生成可靠公平的隨機數。
![](https://web3caff.com/wp-content/uploads/2023/11/image-622.png)
3. 注意存取控制
Fren Pet 主合約使用 isApproved 修飾符來控制調用者是否有許可權調用函數,這需要開發者非常熟悉其專案業務邏輯並確認許可權不會被繞過。 在 Fren Pet V2 合約中,訪問控制問題也依然需要重視。
Fren Pet NFT 合約
Fren Pet NFT 合約整體結構如下所示:
![](https://web3caff.com/wp-content/uploads/2023/11/image-621.png)
FrenpetNFT 合約繼承 ERC721,負責 NFT 的鑄造和銷毀,IRenderer 負責處理 Fren Pet NFT 的 metadata。 建議在其 setRenderer 和 setMinter 兩個函數被調用時發出事件,以便外部監聽並追蹤相關信息的轉移情況。
![](https://web3caff.com/wp-content/uploads/2023/11/image-619.png)
Fren Pet 代幣合約
1. 中心化風險
該代幣合約有多個 onlyOwner 的函數,如 blacklist 函數和 updateBuyFees 函數。 這些函數可以對代幣的交易造成巨大的影響。 合約的所有者可以修改交易費用,阻止用戶買入或賣出,添加位址黑名單:
![](https://web3caff.com/wp-content/uploads/2023/11/image-618.png)
2. 缺少時間鎖
Fren Pet 代幣合約沒有時間鎖,以限制合約持有者的操作許可權。 雖然合約中的一些函數如 withdrawStuckToken(),updateSwapEnabled()可以讓合約持有者在緊急情況下對合約採取措施,保護用戶資產,但缺乏時間鎖可能會讓這些函數被濫用。 在此情況下,使用者和安全公司對合約持有者的操作沒有足夠的反應時間。
警惕釣魚風險!
除了合約風險外,由於 Fren Pet 的火熱,相關釣魚網站和社交帳號也是層出不窮。 提醒廣大使用者切勿點擊虛假連結,比如通過從谷歌搜索出來的連結,最好再通過其它社交平台進行二次驗證。 此類虛假帳戶往往發佈推文稱目前已經開放相關代幣空投,誘導使用者進入釣魚網站。
![](https://web3caff.com/wp-content/uploads/2023/11/image-617.png)
Fren Pet 釣魚網站使用者需謹記一些防釣魚技巧,盡量避免自己被釣魚詐騙,或者可以考慮安裝 Beosin Alert 防釣魚外掛程式,説明自己識別釣魚網站。
![](https://web3caff.com/wp-content/uploads/2023/11/image-616.png)
總結
Fren Pet 合約沒有明顯的業務邏輯漏洞,但合約的中心化風險明顯,部分代碼有更為安全的實現,以提升其合約的安全性。 在此之前市場出現過多次 GameFi、SocialFi 的熱潮,普通用戶易產生 FOMO 情緒,盲目掉入釣魚陷阱。 使用者需認清 Fren Pet 只是兩位開發者在 Web3 領域的一次嘗試,用戶應當做好資金管理和項目調研,理性參與。
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。