鏈遊開發功能版/NFT鏈遊系統開發運營版/區塊鏈遊戲系統開發/成熟技術/原始碼案例

開發MrsFu123發表於2023-04-23

 區塊鏈的可追溯性來源於區塊鏈資料結構的特殊性。在區塊鏈系統中,它的鏈式結構是從創世區塊開始的,其後系統產生的所有區塊都透過父區塊的雜湊值前後相連,並最終能追溯到創世區塊。


  區塊鏈智慧合約有三個技術特性:


  1.資料透明


  區塊鏈上所有的資料都是公開透明的,因此智慧合約的資料處理也是公開透明的,執行時任何一方都可以檢視其程式碼和資料。


  2.不可篡改


  區塊鏈本身的所有資料不可篡改,因此部署在區塊鏈上的智慧合約程式碼以及執行產生的資料輸出也是不可篡改的


  3.yong jiu 執行


  支撐區塊鏈網路的節點往往達到數百甚至上千,部分節點的失效並不會導致智慧合約的停止,其可靠性理論上接近於yong .久執行,這樣就保證了智慧合約能像紙質合同一樣每時每刻都有效。



function ownerOf(uint256 tokenId)public view virtual override returns(address){


  address owner=_owners[tokenId];


  require(owner!=address(0),"ERC721:owner query for nonexistent token");


  return owner;


  }


  /**


  *dev See{IERC721Metadata-name}.


  *後設資料:返回合約名字


  */


  function name()public view virtual override returns(string memory){


  return _name;


  }


  /**


  *dev See{IERC721Metadata-symbol}.


  *後設資料:返回合約標誌


  */


  function symbol()public view virtual override returns(string memory){


  return _symbol;


  }


  /**


  *dev See{IERC721Metadata-tokenURI}.


  *後設資料:返回tokenID代幣對應的tokenURI;tokenURI在後文會詳解介紹。


  */


  function tokenURI(uint256 tokenId)public view virtual override returns(string memory){


  require(_exists(tokenId),"ERC721Metadata:URI query for nonexistent token");


  string memory baseURI=_baseURI();


  return bytes(baseURI).length>0?string(abi.encodePacked(baseURI,tokenId.toString())):"";


  }


  /**


  *dev Base URI for computing{tokenURI}.


  *tokenURI一般構建方式是:baseURI+tokenID+baseExt的方式


  */


  function _baseURI()internal view virtual returns(string memory){


  return"";


  }


  /**


  *dev See{IERC721-approve}.


  *呼叫者msgSender()對賬號to授予tokenID的行使權


  */


  function approve(address to,uint256 tokenId)public virtual override{


  address owner=ERC721.ownerOf(tokenId);


  //要求:被授權賬號to不能為代幣的owner


  require(to!=owner,"ERC721:approval to current owner");


  //要求:函式呼叫者為代幣的owner或者函式呼叫者是owner設定的所有代幣授權使用者


  require(


  _msgSender()==owner||isApprovedForAll(owner,_msgSender()),


  "ERC721:approve caller is not owner nor approved for all"


  );


  //內部函式,執行真正的授權操作


  _approve(to,tokenId);


  }


  /**


  *dev Approve`to`to operate on`tokenId`


  *Emits a{Approval}event.


  *授予to賬號tokenID的行使權,並觸發授權事件


  */


  function _approve(address to,uint256 tokenId)internal virtual{


  _tokenApprovals[tokenId]=to;


  emit Approval(ERC721.ownerOf(tokenId),to,tokenId);


  }


  /**


  *dev See{IERC721-getApproved}.


  *獲取代幣tokenID的被授權使用者地址


  */


  function getApproved(uint256 tokenId)public view virtual override returns(address){


  //引數判斷:tokenID必須存在


  require(_exists(tokenId),"ERC721:approved query for nonexistent token");


  return _tokenApprovals[tokenId];


  }


  /**


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

相關文章