# PXN测试网合约审计

By [Kevin779](https://paragraph.com/@kevin779) · 2022-05-04

---

**一、合约审计分析**

1.  Reentrancy
    
    如果mint 的函数没有写在function的最后一行，那么就可以调用合约交互进行反复攻击
    
    例子 The dao attack
    
    [![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=eCEziQWb4Zg)
    
    [![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=3sIwIYfeOD8)
    
2.  Ownership
    
    合约权限管理，检查权限时候放开，检查合约里**ownerable**函数
    
3.  Timestamp dependency
    
    时间戳攻击，一般被矿工利用，矿工可以提前几个区块进行mint，以减少gas
    
4.  Dos with Throw
    
5.  Contract interact
    
    合约交互，检查是否该项目合约能否与合约进行交互
    
    在项目合约中搜索origin
    
    **Txn.origin == msg.sender** 如果有 这样的函数就不能进行合约与合约交互
    

**二、业务逻辑分析**

1.  Start from require()/ revert()
    
2.  白单
    
    白单是否符合roadmap的设计，包括并不限于白单的总数，每个白单可以mint的个数。
    
    白单mint完之后的记录，如果不记录，把nft transfer 之后，还能mint
    
    signature是否用message.sender 进行约束 例如 NBA的合约
    
3.  公售
    
    公售函数是否符合roadmap的设计，包括并不限于公售的总数，每个钱包可以mint的个数。
    
4.  withdraw函数
    
    mint完之后项目方提取ETH的方法，如果有漏洞ETH有可能被锁在合约中提取不出来，如Akutar的合约。
    

**三、PXN测试网合约审计**

1.  合约地址：
    
    [https://rinkeby.etherscan.deth.net/address/0x3201fe090e70bd464bc93469545be5278595d1f5#code](https://rinkeby.etherscan.deth.net/address/0x3201fe090e70bd464bc93469545be5278595d1f5#code)
    
2.  合约类型：ERC721A
    
3.  合约结构：
    
    白单0.35 ETH，共6000个
    
    团队设置mint4000个 没有mint完的 进行荷兰拍 如果荷兰拍没有mint完 又有dev mint 垫底，这个项目一定能mint完。**（人为制造繁荣？）**
    
    公售以荷兰拍的形式进行，每个最多钱包可以mint2
    
4.  能否可以进行合约交互：不可以
    
    modifier callerIsUser()
    
    { require(tx.origin == msg.sender, "The caller is another contract"); \_;}
    
5.  合约漏洞：**能力有限没有看出来，大概率没有前两部分所涉及的漏洞**

---

*Originally published on [Kevin779](https://paragraph.com/@kevin779/pxn)*
