撰写批量mint NFT的合约教程

  • 猪猪bang
  • 更新于 2023-08-28 14:22
  • 阅读 1253

❓为什么写这篇文章主要是因为@eigenlayer的nft只是一个纪念意义的nft,并且是无限制的mint。并且本来想趁着gas低,写一个批量mint的程序,然后节省gas去mint,不过发现其实不行(线程内会解释)然后反正没事做,那还不如写个线程说一下我们应该如何自己创建一个批量mi

<!--StartFragment-->

为什么写这篇文章

  • 主要是因为 @eigenlayer 的nft只是一个纪念意义的nft,并且是无限制的mint。
  • 并且本来想趁着gas低,写一个批量mint的程序,然后节省gas去mint,不过发现其实不行(线程内会解释)
  • 然后反正没事做,那还不如写个线程说一下我们应该如何自己创建一个批量mint的智能合约

🧑‍先说结论,批量mint能有什么好处

  • 节省人力,如果项目只能一次Mint一张的话,不需要那么费事费力手动去点
  • 节省gas,同mint 100张nft, 批量合约mint,大概能省个 8\~15%的gas费用 (有的可能会更多,不一定的,不过用eip-1167的话倒是比较省)
  • 可以收费,既然批量mint合约可以省时省gas,就可以开源给别人用,并且在代码里面,写明收 x%的费用,或者mint 20张收1张 - 熟悉代码,有的时候能找到一些bug,如 https://twitter.com/0xblackecn/status/1693560936773329034?s=20…

🧬大概路径 路径超级简陋图如下: 图像

对于批量mint NFT,要结合具体的项目合约来使用,有的合约有限制的时候是不可以进行批量mint的,如 @eigenlayer

有些是可以,如之前的 $xen $clips $ferc 都是可以做到批量mint,特别是 $ferc 由于合约的问题,当时mint一个会吃税,但是有批量mint合约的话,只会吃税1次,但是得到了100

不要特别迷信批量mint就会省钱, 因为

  • 成本:部署合约 + 调用合约成本
  • 可能存在的收益:节省gas + 收税开源给别人使用

需要有一定的solidity基础,如果没有solidity基础的话,可以先去学或者直接先看一下熟悉一下也行

然后对于以后有些nft或者airdrop的领取的话,自己都可以去看项目代码看能否使用批量

如果对于抓不准的,也欢迎大家发我,然后我看看能不能写批量,毕竟我也想实践中成长

🧑‍💻具体代码撰写思路

  • 若项目合约不存在地址校验,则批量mint只需要连接一次项目合约,遍历循环即可
  • 若项目合约只存在 msg.sender 的判断,如 msg.sender 一天只能mint一次,则此时我们只需要在合约中创建多个子合约去调用即可
  • 若项目合约将 msg.sender 为合约账户给ban掉, 如 (msg.sender !=tx.origin) 则此时我们不能做批量合约

🔗 先直接把合约模板发出来

🤖 代码解析 直接解释这代码吧,对于不同的项目,其实相对应的改一下内容即可

  • 项目合约的接口 图像

主要原理就是,我们需要连接项目的合约,然后调用项目合约里面的方法,所以我们需要抽取一个接口出来。

需要实现两个逻辑 ① 能进行mint token 的方法 ② 能转账 token 给原钱包的方法

所以我们相对应需要改的也是这两个方法,以下是修改步骤 ① 先找项目合约,通过别人成功调用的交易地址,找到具体的mint方法,以之前的 clips 为例 https://etherscan.io/tx/0xa2b9c10eef73acff7277c845a7e77e06c7f37222a0797a3d01361df555504308 图像

② 查看项目具体代码,需要方法名称,传递参数 图像 ③ 修改批量mint合约的内容 图像 ④ 从 ② 可以看出,我们需要接入 transfer方法,所以相对应的, transfer方法也需要修改,修改成什么样的话,和 mint方法同理 <br> 修改批量mint逻辑 图像 ① 首先判断是否需要创建子合约调用 图像

② 修改项目地址 图像 <br> 修改循环逻辑 图像

循环逻辑其实不用修改,不过我们可以新增一些其他逻辑如 - 只想自己调用,不给其他人用,在

  • 调用的时候判断是自己的地址才能调用
  • 收取一定的费用,直接 transfer给自己的地址
  • 堆nft收费用,如转账20张发一张给自己地址
  • 等等等等 图像

当存在一些特殊情况的时候,其实是不能批量mint的

  • 调用mint的地址,只能是最原始的地址 图像 这个为什么不能批量mint呢,具体可看流程图 图像 <br> 因为 mint 是创建了一个新的子合约去mint的,所以导致有个问题就是 msg.sender 是子合约的地址,所以就无法成功调用mint了

<!--EndFragment-->

点赞 0
收藏 0
分享

0 条评论

请先 登录 后评论
猪猪bang
猪猪bang
猪猪 Bang 空投:区块链空投专家 | ?区块链项目咨询者 工具: 区块链监控 | 代码审查专员 主要关注点:Alpha项目 | 空投项目教程 | 链上工具 | 代码审查 #airdrop #空投 #区块链 #Alpha项目 #BTC #ETH