公排互助拆分开发运营版丨拆分互助公排系统开发(逻辑项目)/玩法规则/详细方案/代码部署

简介: Applications that complete tasks through consensus mechanisms and blockchain platforms are inherently decentralized and do not rely on any centralized servers,promoting safer user transactions.

Applications that complete tasks through consensus mechanisms and blockchain platforms are inherently decentralized and do not rely on any centralized servers,promoting safer user transactions.

  contract ERC721 is IERC721,IERC165{

  mapping(bytes4=>bool)supportsInterfaces;

  bytes4 invalidID=0xffffffff;

  bytes4 constant ERC165_InterfaceID=0x01ffc9a7;//erc165

  bytes4 constant ERC721_InterfaceID=0x80ac58cd;//erc721

  mapping(address=>uint256)ercTokenCount;

  mapping(uint256=>address)ercTokenOwner;

  mapping(uint256=>address)ercTokenApproved;

  mapping(address=>mapping(address=>bool))ercOperatorForAll;

  using Address for address;

  constructor(){

  _registerInterface(ERC165_InterfaceID);

  _registerInterface(ERC721_InterfaceID);

  }

  //授权

  modifier canOperator(uint256 _tokenId){

  address owner=ercTokenOwner[_tokenId];

  require(msg.sender==owner||ercOperatorForAll[owner][msg.sender]);

  _;

  }

  modifier canTransfer(uint256 _tokenId,address _from){

  address owner=ercTokenOwner[_tokenId];

  require(owner==_from);

  require(msg.sender==owner||msg.sender==ercTokenApproved[_tokenId]||ercOperatorForAll[owner][msg.sender]);

  _;

  }

  function _registerInterface(bytes4 interfaceID)internal{

  supportsInterfaces[interfaceID]=true;

  }

  function supportsInterface(bytes4 interfaceID)override external view returns(bool){

  require(invalidID!=interfaceID);

  return supportsInterfaces[interfaceID];

  }

  //721

  function balanceOf(address _owner)override external view returns(uint256){

  return ercTokenCount[_owner];

  }

  function ownerOf(uint256 _tokenId)override external view returns(address){

  return ercTokenOwner[_tokenId];

  }

  function getApproved(uint256 _tokenId)override external view returns(address){

  return ercTokenApproved[_tokenId];

  }

  function isApprovedForAll(address _owner,address _operator)external view returns(bool){

  return ercOperatorForAll[_owner][_operator];

  }

  function approve(address _approved,uint256 _tokenId)override external payable{

  ercTokenApproved[_tokenId]=_approved;

  emit Approval(msg.sender,_approved,_tokenId);

  }

  function setApprovalForAll(address _operator,bool _approved)override external{

  ercOperatorForAll[msg.sender][_operator]=_approved;

  emit ApprovalForAll(msg.sender,_operator,_approved);

  }

  function transferFrom(address _from,address _to,uint256 _tokenId)override external payable{

  _transferFrom(_from,_to,_tokenId);

  }

  function _transferFrom(address _from,address _to,uint256 _tokenId)internal canTransfer(_tokenId,_from){

  ercTokenOwner[_tokenId]=_to;

  ercTokenCount[_to]+=1;

  ercTokenApproved[_tokenId]=address(0);

  emit Transfer(_from,_to,_tokenId);

  }

  function safeTransferFrom(address _from,address _to,uint256 _tokenId,bytes memory data)override external payable{

  _safeTransferFrom(_from,_to,_tokenId,data);

  }

  function safeTransferFrom(address _from,address _to,uint256 _tokenId)override external payable{

  _safeTransferFrom(_from,_to,_tokenId,"");

  }

  function _safeTransferFrom(address _from,address _to,uint256 _tokenId,bytes memory data)internal{

  _transferFrom(_from,_to,_tokenId);

  //add safe code

  if(_to.isContract()){//首先判断对方是否是合约

  bytes4 retval=ERC721TokenReceiver(_to).onERC721Received(msg.sender,_from,_tokenId,data);

  require(retval==ERC721TokenReceiver.onERC721Received.selector);

  }

  }

  function mint(address _to,uint256 _tokenId,bytes memory data)external{

  require(_to!=address(0));

  require(ercTokenOwner[_tokenId]==address(0));

  ercTokenOwner[_tokenId]=_to;

  ercTokenCount[_to]+=1;

  if(_to.isContract()){//首先判断对方是否是合约

  bytes4 retval=ERC721TokenReceiver(_to).onERC721Received(msg.sender,address(0),_tokenId,data);//是否实现了ERC721Received

  require(retval==ERC721TokenReceiver.onERC721Received.selector);

  }

  emit Transfer(address(0),_to,_tokenId);

  }

相关文章
|
3天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
13天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
524 205
|
2天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
212 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
702 48
|
5天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
827 157
|
4天前
|
存储 Linux iOS开发
最新学习教程,电脑剪贴板不够用!这几个方法教你更多复制粘贴超高效方法,并附上几个扩展工具供你学习
最新学习教程,电脑剪贴板不够用!这几个方法教你更多复制粘贴超高效方法,并附上几个扩展工具供你学习
210 136
下一篇
oss云网关配置