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

NFT数字藏品开发运营版丨NFT数字藏品系统开发(开发源码)丨成熟及技术

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

  数字藏品的特征完全符合数字出版物的核心形态,同时也体现出数字版权的核心要素。数字藏品利用区块链技术,锚定作品生成链上唯一的所有权或使用权的数字凭证,不可篡改、不可拆分、限量发行,目的是实现作品真实可信的数字化发行、收藏、使用和流转。


  Compared to paper collections,digital collections are formed by digitizing traditional paper media using IT technology.目前,数字藏品主要有网络、移动媒体、大型的图书和数据库等。开发案例威:MrsFu123,数字藏品的基本特点是可量测、可存储、可携带,这些特点可以被视为数字藏品在技术层面的最大优势。


  //The next token ID to be minted.


  uint256 private _currentIndex;


  //The number of tokens burned.


  uint256 private _burnCounter;


  //Token name


  string private _name;


  //Token symbol


  string private _symbol;


  //Mapping from token ID to ownership details


  //An empty struct value does not necessarily mean the token is unowned.


  //See{_packedOwnershipOf}implementation for details.


  //


  //Bits Layout:


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


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


  //-[224]`burned`


  //-[225]`nextInitialized`


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


  mapping(uint256=>uint256)private _packedOwnerships;


  //Mapping owner address to address data.


  //


  //Bits Layout:


  //-[0..63]`balance`


  //-[64..127]`numberMinted`


  //-[128..191]`numberBurned`


  //-[192..255]`aux`


  mapping(address=>uint256)private _packedAddressData;


  //Mapping from token ID to approved address.


  mapping(uint256=>TokenApprovalRef)private _tokenApprovals;


  //Mapping from owner to operator approvals


  mapping(address=>mapping(address=>bool))private _operatorApprovals;


  与其他简单参数相比,我们主要关注复杂的参数:


  _packedOwnerships类似常规NFT实现中的_ownerOf,我们通过此映射查询某tokenID的拥有者,但此结构是打包方式的,即我们并不指定每一个tokenID对应的拥有者而是仅记录开头


  _packedAddressData类似常规NFT实现中的_balanceOf,用于查询某一用户所拥有的NFT的相关数据。此处的aux是指附加信息,比如用户当前使用的NFT铸造白名单数量,请根据自身项目酌情修改


  此处,我们简单介绍数据读取的部分函数,关于在uint256压缩数据结构内进行数据读取的具体方法,我们已在深入解析AAVE智能合约:存款介绍过类似的uint256压缩数据提取方法。简单来说,就是使用&操作的特性实现数据提取。我们给出balanceOf的代码实现:


  function balanceOf(address owner)public view virtual override returns(uint256){


  if(owner==address(0))_revert(BalanceQueryForZeroAddress.selector);


  return _packedAddressData[owner]&_BITMASK_ADDRESS_DATA_ENTRY;


  }


  基于1&1=1、0&1=0和0&0=0,我们可以通过将待提取位数(此处为0至63位置为1即可)。此处的_BITMASK_ADDRESS_DATA_ENTRY与我们设想的类似:


  uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY=(1<<64)-1;


NFT数字藏品开发运营版丨NFT数字藏品系统开发(开发源码)丨成熟及技术的评论 (共 条)

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