PXN测试网合约审计

一、合约审计分析

  1. Reentrancy

    如果mint 的函数没有写在function的最后一行,那么就可以调用合约交互进行反复攻击

    例子 The dao attack

    Play VideoPlay Video
  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

  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. 合约漏洞:能力有限没有看出来,大概率没有前两部分所涉及的漏洞