欢迎光临散文网 会员登陆 & 注册

数字藏品系统开发(NFT数字藏品)详细及分析丨NFT数字藏品系统开发(数字藏品源码)

2023-04-03 14:08 作者:bili_56252132691  | 我要投稿

  数字藏品其实是NFT的一种应用形式,即使用区块链技术,对应特定的作品、艺术品生成的唯一数字凭证,在保护其数字版权的基础上,实现真实可信的数字化发行、购买、收藏和使用。


  各数藏平台一般将数字藏品定义为:一种限量发行的虚拟文化商品,包括但不限于数字画作、图片、音乐、视频、3D模型等各种形式,它使用区块链技术记录其链上确权、发行、购买、使用等流程。每一份数字藏品对应特定的作品、开发功能威:MrsFu123,艺术品,拥有链上独一无二的序列号作为唯一所有权凭证,不可篡改、不可拆分、不可复制。


  铸造


  基本函数


  铸造使用了_mint函数,其函数定义是:


  function _mint(address to,uint256 quantity)internal virtual


  1


  该函数规定了以下参数:


  to铸造NFT接受地址


  quantity铸造的NFT数量


  由于ERC721A只能铸造固定数量的NFT,所以无法指定铸造NFT的tokenID


  其函数的运行逻辑简单如下:


  运行_beforeTokenTransfers,此函数应根据具体目的编写


  设置_packedOwnerships,以方便查询NFT的拥有者


  设置_packedAddressData,方便查询某一用户的所有NFT


  释放Transfer事件


  运行_afterTokenTransfers,此函数应根据具体目的编写


  接下来,我们将结合代码进行分析。


  最先运行的_beforeTokenTransfers和最后运行的


  _afterTokenTransfers都是由用户自定义的函数,用于实现白名单等功能。函数具体定义如下:


  function _beforeTokenTransfers(


  address from,


  address to,


  uint256 startTokenId,


  uint256 quantity


  )internal virtual{}


  function _afterTokenTransfers(


  address from,


  address to,


  uint256 startTokenId,


  uint256 quantity


  )internal virtual{}


  读者可根据自身需求,通过继承覆盖的方式定义这两个函数。


  接下来,我们设置一些核心数据,这些数据的设置是_mint函数的核心。值得注意的是,这些函数都定义在unchecked代码块中,因为NFT的各个参数设置不会产生溢出情况,通过unchecked可以避免编译过程中插入溢出检查代码以减少gas消耗。


  简而言之,在某些已经确定不会出现数据溢出的场景中使用unchecked包裹代码可以减少gas消耗


  最开始,我们设置表示NFT所有者的_packOwnershipData数据结构,具体设置方法如下:


  _packedOwnerships[startTokenId]=_packOwnershipData(


  to,


  _nextInitializedFlag(quantity)|_nextExtraData(address(0),to,0)


  );


  为方便读者理解代码,在此处,我们给出_packedOwnerships的定义:


  //Bits Layout:


  //-[0..159]`addr`


  //-[160..223]`startTimestamp`


  //-[224]`burned`


  //-[225]`nextInitialized`


  //-[232..255]`extraData`


  mapping(uint256=>uint256)private _packedOwnerships;


数字藏品系统开发(NFT数字藏品)详细及分析丨NFT数字藏品系统开发(数字藏品源码)的评论 (共 条)

分享到微博请遵守国家法律