ITPub博客

首页 > 区块链 > 区块链 > nft数藏平台系统开发技术方案丨数藏nft系统ai绘画定制开发技术流程

nft数藏平台系统开发技术方案丨数藏nft系统ai绘画定制开发技术流程

原创 区块链 作者:Tg_StPv888 时间:2023-03-03 10:01:08 0 删除 编辑

  根据一个Token ID返回Metadata的URL:uri(uint256 id)


  查询一个地址拥有的Token ID数量:balanceOf(address account,uint256 id)


  授权或取消授权一个地址有权转移NFT:setApprovalForAll(address operator,bool approved)


  转移一个NFT:safeTransferFrom(address from,address to,uint256 id,uint256 amount,bytes calldata data)


  EIP-1155定义的接口和实现都可以在OpenZeppelin上找到,我们只需要在ERC1155的基础上修改即可。ERC1155的核心代码其实就是一个映射,记录Token ID到持有地址、再到持有数量:


  contract ERC1155{     搭建‘I8O28578624'


  //Mapping from token ID to account balances


  mapping(uint256=>mapping(address=>uint256))private _balances;


  }


  我们做的主要修改是增加一个Token ID到URL的映射。因为我们准备将NFT的图片和Metadata数据都放到IPFS上,所以增加一个Token ID到IPFS文件哈希的映射:


  contract ERC1155{


  mapping(uint256=>string)private _metadataHashes;


  string private _uriPrefix=“https://ipfs.infura.io/ipfs/”;


  //返回”https://ipfs.infura.io/ipfs/QmasWH…re2Ych?filename=metadata.json”


  //如果使用服务器API返回则可以固定uri为”https://api.example.com/metadata/{id}”


  function uri(uint256 id)public view returns(string memory){


  return _concat(_uriPrefix,_metadataHashes[id],“?filename=metadata.json”);


  }


  }


  第二个修改是增加一个mint()方法来铸造NFT:


  function mint(uint256 amount,string memory metadataHash)public returns(uint256){


  //如果只允许合约部署者铸造,加上判断:


  //require(msg.sender==owner,“Not contract owner”);


  nextTokenId++;


  uint256 tokenId=nextTokenId;


  _metadataHashes[tokenId]=metadataHash;


  _mint(msg.sender,tokenId,amount,“”);


  return tokenId;


  }


  最后一步是在isApprovedForAll()中判断下当前转移操作的发起者是不是OpenSea的代理合约:


  function isApprovedForAll(address account,address operator)public view returns(bool){


  //Whitelist OpenSea proxy contract for easy trading.


  ProxyRegistry proxyRegistry=ProxyRegistry(proxyRegistryAddress);


  if(address(proxyRegistry.proxies(account))==operator){


  return true;


  }


  return _operatorApprovals[account][operator];


  }


  这么做的目的是将来在OpenSea售卖的时候,不需要授权操作,节省了gas费,缺点是无条件信任了OpenSea的代理合约,降低了一点安全性。


  NFT铸造流程


  理解NFT的铸造流程是非常重要的。首先,一个NFT关联了一个特定的资源,如图片、视频、3D模型、VR等。假定我们的NFT就是一个图片,铸造NFT的第一步是将图片上传并获得一个固定的URL。这里我们选择IPFS,上传成功后返回的URL类似:w開发StPv888


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70016646/viewspace-2937983/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专业区块项目开发团队:18028578624微電

注册时间:2022-04-13

  • 博文量
    158
  • 访问量
    95691