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实景 | 彭文华
|
安全 区块链 开发者
ProTradex普瑞缇智能合约PRT分红系统开发(详细及玩法)丨ProTradex普瑞缇智能合约PRT分红开发源码说明
  简而言之,如果一个区块的交易信息被改变,那么该区块体、区块的哈希值也将被改变,该区块之后区块的哈希值也将被改变。如果想让后面的区块还能连接到它后面所有的区块必须全部同时修改,否则被改之后的区块就全部脱离了区块链。
|
区块链 vr&ar 开发工具
ProTradex(普瑞缇)智能合约开发案例
Source code WeChat:kaifa873
154 0
|
区块链 vr&ar 开发工具
ProTradex(普瑞缇)智能合约开发运营版丨普瑞缇ProTradex智能合约系统开发(开发案例)
  智能合约dapp开发技术是一种基于区块链技术的开发技术,它可以帮助开发者快速高效地开发出功能强大、可靠性高的dapp(去中心化应用)。
stepn跑鞋链游开发功能丨stepn跑鞋链游系统开发(详细及方案)丨stepn跑鞋链游源码部署
amountIn = max && exactIn ? amountIn : SqrtPriceMath.getAmount0Delta(sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, true);
|
JSON 小程序 JavaScript
【小程序 | 启航篇】一文打通任督二脉
【小程序 | 启航篇】一文打通任督二脉
【小程序 | 启航篇】一文打通任督二脉
|
Java Spring
一文彻底帮你打通SpringAOP的任督二脉,大厂高薪指日可待,建议收藏!!!
Spring的IoC和AOP不仅仅是我们学习Spring平台下各个框架的核心基础,同时也是我们出去面试问道的频率最高的面试题了,同时也是大家很难彻底掌握好的技术的,本文就透过本质来给大家来介绍下Spring的AOP,Spring的IoC也会在后续的文章中给大家介绍,欢迎大家一键三连哦!!!
一文彻底帮你打通SpringAOP的任督二脉,大厂高薪指日可待,建议收藏!!!
|
SQL 关系型数据库 Unix
百花开放笑声甜,“开源萌宠”庆六一
“少年易学老难成,一寸光阴不可轻”。树叶因风而动,雏苗因土而长,兴趣要从小培养,给孩子们“施肥”也要让他们印象深刻······儿童节到来之际,云栖社区精选了18款开源软件供孩子们了解,让孩子们在萌宠的陪伴下有个不一样的“六一”。
7368 0
|
搜索推荐
义乌启动“保企方舟”行动,多措并举帮扶企业渡难关
近期,义乌出台了《关于帮扶企业渡过难关的六条意见》,启动“保企方舟”专项行动,帮助企业稳就业,降成本,政银企携手共渡难关。
阿里巴巴取代腾讯成为新的“港股之王”;果冻有家,房联网概念的平台化应用。
阿里巴巴 昨日,阿里巴巴在港交所主板挂牌上市,开盘涨超6.25%,随后涨幅一度超过7%报189港元,阿里巴巴总市值超4万亿港元,腾讯目前市值约为3.27万亿港元。阿里巴巴取代腾讯成为新的“港股之王”。
278 0
下一篇
无影云桌面