# PXN合约安全分析:合约间交互和Solidity修饰器`modifier` **Published by:** [natQiu](https://paragraph.com/@natqiu/) **Published on:** 2022-05-10 **URL:** https://paragraph.com/@natqiu/pxn-solidity-modifier ## Content 这是NFT黑魔法第二期作业,关于PXN合约的审计分析和业务逻辑全面分析请参考末尾链接。本篇将主要解释Solidity 构造函数和修饰器知识如何在NFT合约中应用,以PXN合约为例。 合约间交互(contract interact) 是NFT合约发生漏洞原因之一。在Solidity 语言中主要通过构造函数( constructor) 和独有的修饰器 (modifier)来实现合约限制控制 (Ownable), 从而判断是否禁止合约间交互。修饰器 (modifier)是Solidity 专有语法,类似于Python 中的 decorator。 装饰器就是一种语法糖,会使代码显得简洁和直观;同理,修饰器可以声明函数拥有的特性,减少代码冗余。具体而言,modifier可作为函数运行前例行检查,例如余额、地址、变量等。这是PXN的主网合约地址, 下面是该合约中modifier部分:定义一个叫做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 ## Publication Information - [natQiu](https://paragraph.com/@natqiu/): Publication homepage - [All Posts](https://paragraph.com/@natqiu/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@natqiu): Subscribe to updates