众所周知,所有对区块链进行写入的操作都需要缴纳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的理解