PXN合约安全分析:合约间交互和Solidity修饰器`modifier`

这是NFT黑魔法第二期作业,关于PXN合约的审计分析和业务逻辑全面分析请参考末尾链接。本篇将主要解释Solidity 构造函数和修饰器知识如何在NFT合约中应用,以PXN合约为例。

合约间交互(contract interact) 是NFT合约发生漏洞原因之一。在Solidity 语言中主要通过构造函数( constructor) 和独有的修饰器 (modifier)来实现合约限制控制 (Ownable), 从而判断是否禁止合约间交互。


修饰器 (modifier)

是Solidity 专有语法,类似于Python 中的 decorator。 装饰器就是一种语法糖,会使代码显得简洁和直观;同理,修饰器可以声明函数拥有的特性,减少代码冗余。具体而言,modifier可作为函数运行前例行检查,例如余额、地址、变量等。这是PXN的主网合约地址, 下面是该合约中modifier部分:

post image

定义一个叫做callerIsUser 的修饰器,用于检查调用者是否为msg.sender地址;如果是的话,继续运行函数主体,否则报错;

带有callerIsUser修饰函数只能被msg.sender地址调用,若被合约地址调用就会报错,从而有效禁止合约间交互。这也是最常用的控制智能合约权限 Ownable方法。

更多关于OppenZepplinOwnable 标准实现请参考:

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol

关于PXN合约的审计分析和业务逻辑分析请参考:

https://mirror.xyz/gamfi.eth/yhwhIWIW6OkDQPoHUxTzXRowsaZvtfj3gqMH_rHWujc

关注NFT黑魔法Twitter:

https://twitter.com/MrsZaaa