3M互助公排智慧合約系統開發(詳細及規則)丨3M互助公排智慧合約系統開發(原始碼邏輯)

xiaofufu發表於2023-04-06

  


  區塊鏈是分散式資料儲存、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。


  狹義來講,區塊鏈是一種按照時間順序將資料區塊以順序相連的方式組合成的一種鏈式資料結構,並以密碼學方式保證的不可篡改和不可偽造的分散式賬本。


  廣義來講,區塊鏈技術是利用塊鏈式資料結構來驗證與儲存資料、利用分散式節點共識演算法來生成和更新資料、利用密碼學的方式保證資料傳輸和訪問的安全、利用由自動化指令碼程式碼組成的智慧合約來程式設計和運算元據的一種全新的分散式基礎架構與計算方式。


  關於區塊鏈專案技術開發唯:MrsFu123,代幣發行、dapp智慧合約開發、鏈遊開發、單雙幣質押、多鏈錢包開發、NFT盲盒遊戲、公鏈、鏈上游戲開發


  Uniswap博餅、交易所開發、量化合約開發、合約對沖、互助遊戲開發、Nft數字藏品開發、眾籌互助開發、元宇宙開發、swap開發、DAO智慧合約、


  夾子合約、鏈上合約開發、ido開發、商城開發等,開發過各種各樣的系統模式,更有多種模式、制度、案例、後臺等,成熟技術團隊,歡迎實體參考。


  在區塊鏈技術中的資料有一定的順序性,每個資料區塊都有一個“雜湊值”程式碼,在鏈狀資料結構中,任意區塊中的資料改變都會影響後續與之相關所有區塊的資訊變化。這一技術確保區塊鏈上的每個區塊資料都不能隨意被篡改、刪除或破壞。因此,區塊鏈技術在保證電子檔案完整、真實的基礎上還具有較強的追溯性


  //SPDX-License-Identifier:MIT


  pragma solidity^0.8.0;


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


  import"./IERC4907.sol";


  contract ERC4907 is ERC721URIStorage,IERC4907{


  struct UserInfo{


  address user;//address of user role


  uint64 expires;//unix timestamp,user expires


  }


  mapping(uint256=>UserInfo)internal _users;


  constructor(string memory name_,string memory symbol_)ERC721(name_,symbol_){}


  ///notice set the user and expires of a NFT


  ///dev The zero address indicates there is no user


  ///Throws if`tokenId`is not valid NFT


  ///param user The new user of the NFT


  ///param expires UNIX timestamp,The new user could use the NFT before expires


  function setUser(


  uint256 tokenId,


  address user,


  uint64 expires


  )public virtual override{


  require(


  _isApprovedOrOwner(msg.sender,tokenId),


  "ERC721:transfer caller is not owner nor approved"


  );


  UserInfo storage info=_users[tokenId];


  info.user=user;


  info.expires=expires;


  emit UpdateUser(tokenId,user,expires);


  }


  ///notice Get the user address of an NFT


  ///dev The zero address indicates that there is no user or the user is expired


  ///param tokenId The NFT to get the user address for


  ///return The user address for this NFT


  function userOf(uint256 tokenId)


  public


  view


  virtual


  override


  returns(address)


  {


  if(uint256(_users[tokenId].expires)>=block.timestamp){


  return _users[tokenId].user;


  }else{


  return address(0);


  }


  }


  ///notice Get the user expires of an NFT


  ///dev The zero value indicates that there is no user


  ///param tokenId The NFT to get the user expires for


  ///return The user expires for this NFT


  function userExpires(uint256 tokenId)


  public


  view


  virtual


  override


  returns(uint256)


  {


  return _users[tokenId].expires;


  }


  ///dev See{IERC165-supportsInterface}.


  function supportsInterface(bytes4 interfaceId)


  public


  view


  virtual


  override


  returns(bool)


  {


  return


  interfaceId==type(IERC4907).interfaceId||


  super.supportsInterface(interfaceId);


  }


  function _beforeTokenTransfer(


  address from,


  address to,


  uint256 tokenId


  )internal virtual override{


  super._beforeTokenTransfer(from,to,tokenId);


  if(from!=to&&_users[tokenId].user!=address(0)){


  delete _users[tokenId];


  emit UpdateUser(tokenId,address(0),0);


  }


  }


  }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69956839/viewspace-2944171/,如需轉載,請註明出處,否則將追究法律責任。

相關文章