# 为什么你在opensea“铸造”的NFT不需要交gas费? **Published by:** [Jason chen](https://paragraph.com/@jason-chen/) **Published on:** 2022-04-11 **URL:** https://paragraph.com/@jason-chen/opensea-nft-gas ## Content 众所周知,所有对区块链进行写入的操作都需要缴纳gas费,NFT的mint过程就是将NFT数据写入区块链的过程,一定需要交gas费的,但是相信已经有不少朋友尝试过在opensea里上传一张图片,会发现并不需要交gas费,这是怎么回事呢?你真的将它铸造出来了吗? opensea使用了一种叫 lazy minting 的方式实现了无需gas费的效果,当你在opensea上传图片后,它并没有上链,而是先存储在了opensea的数据库中,所以不会消耗任何区块链资源从而要求你支付gas费,等到有人购买你的NFT时,它才会被铸造到链上并转移至买家,所以这个方法将铸造NFT的成本放在了买家而非创作者身上,从而极大的降低了创作门槛。 原理明白了,那这个过程具体是如何实现的呢? NFT创建者不是通过调用合约直接创建NFT,而是使用以太坊账户的私钥生成加密签名,签名数据充当兑换NFT的凭证,凭证包含实际NFT的所有信息,买家想购买NFT时,调用redeem函数来进行验证,如果验证通过则正式在链上创建NFT并将其转移给购买者。 当购买者真正真正为该NFT进行mint上链后,将读取该凭证的数据完成上链过程,如下图所示的凭证数据,tokenId和uri将被记录在区块链中(可回顾当你在买NFT时,你买到的究竟是什么?了解tokenId和uri代表什么),mintPirce是创建者设置的价格,不会被记录在区块链中,但是当被正式上链时会读取该参数并要求购买者支付给创建者。signature则是创建者的签名。创建签名使用的是EIP 712协议,下图为签名生成代码,设定好凭证数据后调用_signTypeData传入即可生成签名。下图的redeem函数则是购买者在购买时进行mint的过程,传入的两个参数分别为redeemer(购买者账号)和NFTVocher(凭证数据)。 首先调用_verify用来获取该NFT的创建者地址,然后校验购买者支付的费用是否大于mint费。 调用_mint传入signer创建者地址,和NFT编号,注意这里传入的是创建者地址,意味着虽然mint的费用是购买者支付的,但是依然是先由创建者mint后再调用_transfer转移给购买者。欢迎添加我的微信:cj350306878 一起交流学习探讨,请备注姓名 公司和职位,谢谢。 其他文章:可以退款的ERC721R会成为闯入NFT市场的鲶鱼吗?那个可以跨链的Gh0stlyGh0sts会成为下一个Azuki吗?如何做一个钓鱼网站偷走周杰伦的NFT?ERC1155是什么?以阿迪达斯NFT为例解析怎么通过看懂etherscan了解NFT项目情况?我是怎么让V神给我转了一个NFT的?web3的产品架构和web2到底有什么区别?为什么你在opensea“铸造”的NFT不需要交gas费?如何用5行代码发行一套虚拟货币?阿狸NFT到底做错了什么?web3的世界一片蛮荒-详解ERC721A如何在一级市场发行NFT(2):NFT图片生成当你在买NFT时,你买到的究竟是什么?NFT的130亿美金是从哪里来的?它与虚拟货币之间的关系是什么?如何在一级市场发行NFT系列(1):区块链合约开发浅谈我对元宇宙、Web3、区块链与NFT的理解 ## Publication Information - [Jason chen](https://paragraph.com/@jason-chen/): Publication homepage - [All Posts](https://paragraph.com/@jason-chen/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@jason-chen): Subscribe to updates - [Twitter](https://twitter.com/jason_chen998): Follow on Twitter