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

jogger跑鞋系统开发(开发案例)丨跑鞋jogger慢跑着系统开发方案项目及源码部署

2023-06-10 15:38 作者:bili_36625761919  | 我要投稿

  


  一般来说,区块链可按许可权限分为公有区块链、联盟区块链和私有区块链,其中,公有链面向全球所有用户,任何人都可以在其中读取数据和发送交易;联盟链由若干业务相关的机构共同参与管理,每个机构都运行着一个或多个节点,读写权限仅对联盟内的节点有限度地开放。


  web3.js是一个JavaScript API库。要让DApp在以太坊上运行,我们可以使用web3.js库提供的web3对象。web3.js通过RPC调用与本地节点通信,It can be used with any Ethereum node that exposes the RPC layer.Web3 contains eth object-web3.eth(for interaction with Ethereum blockchain)and shh object-web3.shh(for interaction with Whisper)


  DAPP是去中心化应用程序/分布式的应用程序,是底层区块链平台生态上衍生的各种分布式应用,也是区块链世界中的基础服务提供方。将应用程序分布在不同节点上,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);


  }


jogger跑鞋系统开发(开发案例)丨跑鞋jogger慢跑着系统开发方案项目及源码部署的评论 (共 条)

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