最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

jogger跑鞋系統(tǒng)開發(fā)(開發(fā)案例)丨跑鞋jogger慢跑著系統(tǒng)開發(fā)方案項(xiàng)目及源碼部署

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

  


  一般來說,區(qū)塊鏈可按許可權(quán)限分為公有區(qū)塊鏈、聯(lián)盟區(qū)塊鏈和私有區(qū)塊鏈,其中,公有鏈面向全球所有用戶,任何人都可以在其中讀取數(shù)據(jù)和發(fā)送交易;聯(lián)盟鏈由若干業(yè)務(wù)相關(guān)的機(jī)構(gòu)共同參與管理,每個機(jī)構(gòu)都運(yùn)行著一個或多個節(jié)點(diǎn),讀寫權(quán)限僅對聯(lián)盟內(nèi)的節(jié)點(diǎn)有限度地開放。


  web3.js是一個JavaScript API庫。要讓DApp在以太坊上運(yùn)行,我們可以使用web3.js庫提供的web3對象。web3.js通過RPC調(diào)用與本地節(jié)點(diǎn)通信,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是去中心化應(yīng)用程序/分布式的應(yīng)用程序,是底層區(qū)塊鏈平臺生態(tài)上衍生的各種分布式應(yīng)用,也是區(qū)塊鏈?zhǔn)澜缰械幕A(chǔ)服務(wù)提供方。將應(yīng)用程序分布在不同節(jié)點(diǎn)上,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.


  從本質(zhì)上看,區(qū)塊鏈?zhǔn)且苑植际綌?shù)據(jù)存儲、點(diǎn)對點(diǎn)傳輸、共識機(jī)制、加密算法、,智能合約等計(jì)算機(jī)技術(shù)集成創(chuàng)新而產(chǎn)生的分布式賬本技術(shù),是基于互聯(lián)網(wǎng)的分布式數(shù)據(jù)庫,具有去中心化、共識機(jī)制、不可篡改、可以追溯、規(guī)則透明等特點(diǎn),


  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);


  }


  //授權(quán)


  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);//是否實(shí)現(xiàn)了ERC721Received


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


  }


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


  }


jogger跑鞋系統(tǒng)開發(fā)(開發(fā)案例)丨跑鞋jogger慢跑著系統(tǒng)開發(fā)方案項(xiàng)目及源碼部署的評論 (共 條)

分享到微博請遵守國家法律
无为县| 扎囊县| 嫩江县| 无极县| 阿拉善右旗| 油尖旺区| 华坪县| 贡觉县| 景泰县| 宣汉县| 河曲县| 宾川县| 呼和浩特市| 河源市| 南昌县| 图木舒克市| 武强县| 安康市| 襄汾县| 中阳县| 宝山区| 那曲县| 崇明县| 新沂市| 海阳市| 阿鲁科尔沁旗| 永吉县| 威远县| 嘉鱼县| 伊川县| 霸州市| 石林| 宝丰县| 特克斯县| 宝应县| 黄石市| 松滋市| 浑源县| 铜陵市| 桦甸市| 多伦县|