ProTradex普瑞缇(PRT)开发系统搭建技术

简介: NFT是独一无二的,但它却不是一成不变的。所以NFT是可以成长的,可以通过两个不同的NFT合成一个新的NFT。生成的一个新的NFT,有的自己属性和技能同样继承NFT的属性让NFT实现更多玩法。

  NFT是独一无二的,但它却不是一成不变的。所以NFT是可以成长的,可以通过两个不同的NFT合成一个新的NFT。生成的一个新的NFT,有的自己属性和技能同样继承NFT的属性让NFT实现更多玩法。

  ProTradex目前基于NFT的去中心化杠杆抵押借贷协议,区别于目前市面上的NFT借贷平台,不仅仅允许用户将NFT资源抵押到资金池中,获得U等加密资源,也支持用户将加密资源在协议中抵押。

  项目中,我们初次mint出来的NFT等级是0级,并且它们的创建者也是0,通过两个NFT合成之后创建一个新的NFT,新的NFT等级会+1,并且会继承原NFT的的Id。

  代码实战

  //SPDX-License-Identifier:MIT

  pragma solidity^0.8.9;

  import"openzeppelin/contracts/token/ERC721/ERC721.sol";

  import"openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";

  import"openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";

  import"openzeppelin/contracts/utils/Counters.sol";

  import"openzeppelin/contracts/utils/Strings.sol";

  import"hardhat/console.sol";

  contract ComposeNFT is ERC721,ERC721Enumerable,ERC721URIStorage{

  using Counters for Counters.Counter;

  using Strings for uint256;

  Counters.Counter private _tokenIdCounter;

  struct Donkey{

  address owner;

  uint tokenId;

  uint8 level;

  uint dadId;//父

  uint mumId;//母

  string uri;

  }

  Donkey[]public donkeys;

  constructor()ERC721("Donkeys NFT","DONKEYS"){

  }

  function _baseURI()internal pure override returns(string memory){

  return"https://raw.githubusercontent.com/qdwds/NFT-metadata/master/metadata/donkeys/";

  }

  function _setURI(uint256 _level)internal view returns(string memory uri){

  uint random=_random(100)+1;

  uri=string(abi.encodePacked(_level.toString(),"/images/",random.toString(),".png"));

  }

  function _random(uint _max)internal view returns(uint256){

  uint256 random=uint256(keccak256(abi.encodePacked(msg.sender,block.timestamp,block.coinbase,gasleft())));

  return(random>block.number)?(random-block.number)%_max:(block.number-random)%_max;

  }

  function safeMint(address _to)public{

  _innerMint(_to,0,0,0);

  }

  function batchSafeMint(address _to,uint8 _numWords)public{

  require(_numWords<=100,"MAX mint 10");

  for(uint i=0;i<_numWords;i++){

  _innerMint(_to,0,0,0);

  }

  }

  function _innerMint(address _to,uint8 _level,uint256 _dadId,uint256 _mumId)internal{

  uint256 tokenId=_tokenIdCounter.current();

  _tokenIdCounter.increment();

  string memory uri=string(abi.encodePacked(_baseURI(),_setURI(_level)));

  Donkey memory donkey=Donkey({

  owner:_to,

  tokenId:tokenId,

  level:_level,

  mumId:_mumId,

  dadId:_dadId,

  uri:uri

  });

  donkeys.push(donkey);

  _safeMint(_to,tokenId);

  _setTokenURI(tokenId,uri);

  }

  function getDonkey(uint256 _tokenId)public view returns(Donkey memory donkey){

  donkey=donkeys[_tokenId];

  }

  function getDonkeys(address _owner)public view returns(Donkey[]memory ownerDonkeys){

  uint balance=balanceOf(_owner);

  ownerDonkeys=new Donkey[](balance);

  for(uint256 i=0;i<balance;i++){

  uint index=tokenOfOwnerByIndex(_owner,i);

  ownerDonkeys<i>=donkeys[index];

  }

  }

  function breed(uint256 _dadId,uint256 _mumId)public{

  Donkey memory dad=donkeys[_dadId];

  Donkey memory mum=donkeys[_mumId];

  require(dad.owner==msg.sender&&mum.owner==msg.sender,"Pass?");

  require(dad.level==mum.level,"level fild");

  require(dad.level<3,"Create MAX level 3");

  _innerMint(msg.sender,dad.level+1,dad.tokenId,mum.tokenId);

  }

  //The following functions are overrides required by Solidity.

  function _beforeTokenTransfer(address from,address to,uint256 tokenId,uint256 batchSize)

  internal

  override(ERC721,ERC721Enumerable)

  {

  super._beforeTokenTransfer(from,to,tokenId,batchSize);

  }

  function _burn(uint256 tokenId)internal override(ERC721,ERC721URIStorage){

  super._burn(tokenId);

  }

  function tokenURI(uint256 tokenId)

  public

  view

  override(ERC721,ERC721URIStorage)

  returns(string memory)

  {

  return super.tokenURI(tokenId);

  }

  function supportsInterface(bytes4 interfaceId)

  public

  view

  override(ERC721,ERC721Enumerable)

  returns(bool)

  {

  return super.supportsInterface(interfaceId);

  }

  }

相关文章
高效团队的实战-自如OKR实景 | 彭文华
高效团队的实战-自如OKR实景 | 彭文华
|
存储 Kubernetes 安全
VCF · 助力构建出一个牛气冲天的CaaS平台
VCF · 助力构建出一个牛气冲天的CaaS平台
VCF · 助力构建出一个牛气冲天的CaaS平台
|
存储 区块链 数据库
普瑞缇Protradex系统开发(案例详细)丨Protradex普瑞缇系统开发(源码方案)/玩法规则
 什么是DAPP?DAPP是Decentralized Application的缩写,中文叫分布式应用/去中心化应用。通常来说,不同的DAPP会采用不同的底层技术开发平台和共识机制,或者自行发布代币
|
安全 区块链 开发者
ProTradex普瑞缇智能合约PRT分红系统开发(详细及玩法)丨ProTradex普瑞缇智能合约PRT分红开发源码说明
  简而言之,如果一个区块的交易信息被改变,那么该区块体、区块的哈希值也将被改变,该区块之后区块的哈希值也将被改变。如果想让后面的区块还能连接到它后面所有的区块必须全部同时修改,否则被改之后的区块就全部脱离了区块链。
|
区块链 vr&ar 开发工具
ProTradex(普瑞缇)智能合约开发案例
Source code WeChat:kaifa873
158 0
|
区块链 vr&ar 开发工具
ProTradex(普瑞缇)智能合约开发运营版丨普瑞缇ProTradex智能合约系统开发(开发案例)
  智能合约dapp开发技术是一种基于区块链技术的开发技术,它可以帮助开发者快速高效地开发出功能强大、可靠性高的dapp(去中心化应用)。
|
人工智能 算法 PyTorch
原力元宇宙Metaforce/Forsage/佛萨奇2.0系统开发(开发详情),原力元宇宙Metaforce/Forsage/佛萨奇2.0系统源码部署
 去中心化是与中心化相对的一个概念,在一个中心化的系统中,其它的节点必须依赖中心才能生存,中心决定了节点。在一个去中心化的系统中,分布有众多的节点,每个节点都具有高度自治的特征,每一个节点都是一个“小中心”。
|
算法 安全 IDE
原力元宇宙MetaForce佛萨奇马蹄莲系统开发详情及功能丨MetaForce佛萨奇马蹄莲开发成品源码案例
互联网是人类通信技术的重大革命,对人类社会产生了极其深远的影响。随着当前各类信息技术的迭代创新,互联网正呈现向下一代互联网演进的趋势。这一演进或将引发新一轮的信息革命,进一步深刻改变人们的生活、工作以及社会的方方面面。
 原力元宇宙MetaForce佛萨奇马蹄莲系统开发详情及功能丨MetaForce佛萨奇马蹄莲开发成品源码案例
佛萨奇系统丨MetaForce2.0佛萨奇开发技术介绍(源码搭建)原力元宇宙佛萨奇成熟代码开发
佛萨奇系统丨MetaForce2.0佛萨奇开发技术介绍(源码搭建)原力元宇宙佛萨奇成熟代码开发
148 0
|
JavaScript 前端开发 区块链
​​MetaForce原力元宇宙佛萨奇系统开发(技术搭建)
元宇宙MetaForce是在Polygon马蹄链上部署:1【180-系统3831-开发9724薇】,的一个智能合约,Polygon马蹄链,是基于ETH开发的一个独立公链,用于构建和连接与以太坊兼容的区块链网络,智能合约可以直接在马蹄链上部署,百分百开源,百分百去中心化,一旦运行,不可篡改。