一、合约审计分析
Reentrancy
如果mint 的函数没有写在function的最后一行,那么就可以调用合约交互进行反复攻击
例子 The dao attack
Play Video Play Video Ownership
合约权限管理,检查权限时候放开,检查合约里ownerable函数
Timestamp dependency
时间戳攻击,一般被矿工利用,矿工可以提前几个区块进行mint,以减少gas
Dos with Throw
Contract interact
合约交互,检查是否该项目合约能否与合约进行交互
在项目合约中搜索origin
Txn.origin == msg.sender 如果有 这样的函数就不能进行合约与合约交互
二、业务逻辑分析
Start from require()/ revert()
白单
白单是否符合roadmap的设计,包括并不限于白单的总数,每个白单可以mint的个数。
白单mint完之后的记录,如果不记录,把nft transfer 之后,还能mint
signature是否用message.sender 进行约束 例如 NBA的合约
公售
公售函数是否符合roadmap的设计,包括并不限于公售的总数,每个钱包可以mint的个数。
withdraw函数
mint完之后项目方提取ETH的方法,如果有漏洞ETH有可能被锁在合约中提取不出来,如Akutar的合约。
三、PXN测试网合约审计
合约地址:
https://rinkeby.etherscan.deth.net/address/0x3201fe090e70bd464bc93469545be5278595d1f5#code
合约类型:ERC721A
合约结构:
白单0.35 ETH,共6000个
团队设置mint4000个 没有mint完的 进行荷兰拍 如果荷兰拍没有mint完 又有dev mint 垫底,这个项目一定能mint完。(人为制造繁荣?)
公售以荷兰拍的形式进行,每个最多钱包可以mint2
能否可以进行合约交互:不可以
modifier callerIsUser()
{ require(tx.origin == msg.sender, "The caller is another contract"); _;}
合约漏洞:能力有限没有看出来,大概率没有前两部分所涉及的漏洞
