# 黑魔法作业2期:PXN合约分析 **Published by:** [0xXiaoChen](https://paragraph.com/@0xxiaochen/) **Published on:** 2022-05-10 **URL:** https://paragraph.com/@0xxiaochen/2-pxn ## Content 欢迎关注我的推特:@0xXiaoChen 欢迎加入黑魔法社区:NFT黑魔法社区PXN合约PXN的合约已经开源和上架OpenSea,合约类型是ERC721A。发售方式荷兰拍 4000 首拍2E,每15分钟降低0.05E 开始时间固定MintWL 6000 初始价格设置为0.35E,最后价格为荷兰拍最终价格的一半团队预留开发者预留Mint函数看两个主要MINT函数: mintDutchAuction()使用callerIsUser修饰器,限制调用者为真实地址(非合约) modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } 需要进行signature签名条件: DA_ACTIVE == true directMintAllowed为flase时对签名进行recover()校验,保证是前端mint 当前总量+Mint数量 < 荷兰拍规定的数量 当前时间戳 > 荷兰拍规定开始的时间戳 且 < MintWL规定开始的时间戳 此次Mint数量最大为2,地址最大Mint数为2 Mint价格由currentPrice()调用获取,并检查发送的ETH是否足够Mint userToTokenBatchPriceData结构体会记录本次Mint的基本信息条件成立,使用_safeMint()进行MintmintWl()使用callerIsUser修饰器,限制调用者为真实地址(非合约) modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } 需要进行signature签名条件: DA_ACTIVE == true directMintAllowed为flase时对签名进行recover()校验,保证是前端mint 当前总量+Mint数量 < WLmint规定的数量 userToHasMintedPublicWL查询调用者是否重复mint 当前时间戳 > MintWL规定开始的时间戳,时间持续24小时 此次Mint数量为1 检查发送的ETH是否足够Mint 将userToHasMintedPublicWL更改为true条件成立,使用_safeMint()进行Mint总结:合约将_safeMint()函数放在最后,以及对signature签名进行校验,同时又规避了外部合约Mint。目前我看了是一个没有什么问题的合约,在devMint和teamMint也做了总量设置,不会出现项目方作恶的情况。 如果有什么问题,请欢迎私信推特指正!! ## Publication Information - [0xXiaoChen](https://paragraph.com/@0xxiaochen/): Publication homepage - [All Posts](https://paragraph.com/@0xxiaochen/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@0xxiaochen): Subscribe to updates - [Twitter](https://twitter.com/SixSeeFar): Follow on Twitter