Solidity
當您不是所有者時,是否可以呼叫 ERC721 傳輸函式?
當您不是所有者時,是否可以呼叫 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
)。但通常,如果這些函式未經授權,它們會拋出異常。以下是通常會導致成功轉移的場景:
- 代幣所有者正在呼叫轉賬
- 該特定令牌已被批准給正在轉移的其他人
- 代幣的所有者確實向正在轉移的其他人“授權”
- 合約“後門”了其他代幣訪問者
是的,實際上每個人都可以呼叫合約中的任何函式。為了限制這種行為,你應該讓合約 Ownable。