Solidity

當您不是所有者時,是否可以呼叫 ERC721 傳輸函式?

  • December 27, 2021

當您不是所有者時,是否可以呼叫 ERC721 傳輸函式?我對solidity很陌生,所以如果你能提供你的程式碼,我就能很好地理解。(順便說一句,我之前問過問題,但他/她的回答讓我有點困惑)這裡我的程式碼再次:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract Tink is ERC721 {
   using Counters for Counters.Counter;
   Counters.Counter private _tokenIdCounter;

   constructor() ERC721("Tink", "TNT") { 

   }

   function _baseURI() internal pure override returns (string memory) {
       return "https://gateway.pinata.cloud/ipfs/QmX8ih22uNW5cDH5CeorzpTHTbsioFurgD6w5q7RKt298H";
   }


   function mint(address to)
       public returns (uint256)
   {
       require(_tokenIdCounter.current() < 3); 
       _tokenIdCounter.increment();
       _safeMint(to, _tokenIdCounter.current());

       return _tokenIdCounter.current();
   }
}

是的,任何人都可以呼叫傳遞函式(transferFrom以及兩種風格safeTransferFrom)。但通常,如果這些函式未經授權,它們會拋出異常。

以下是通常會導致成功轉移的場景:

  1. 代幣所有者正在呼叫轉賬
  2. 該特定令牌已被批准給正在轉移的其他人
  3. 代幣的所有者確實向正在轉移的其他人“授權”
  4. 合約“後門”了其他代幣訪問者

是的,實際上每個人都可以呼叫合約中的任何函式。為了限制這種行為,你應該讓合約 Ownable。

https://docs.openzeppelin.com/contracts/2.x/api/ownership

引用自:https://ethereum.stackexchange.com/questions/113681