Solidity
錯誤:契約應標記為抽象
嗨,我正在關注有關 Chainlink NFT 的教程,但我在下面收到此錯誤:契約應標記為抽象。
現在我看到之前有人問過同樣的問題,但是在那個人的程式碼中,他們從未聲明過 ERC721 的建構子。我聲明了 ERC721 和 VRFConsumerBase 的兩個建構子。
如果我刪除 VRFConsumerBase 契約的繼承,這個錯誤也會消失,所以我猜它會導致這個錯誤。
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import "@chainlink/contracts/src/v0.8/VRFConsumerBase.sol"; contract PopNFT is ERC721URIStorage, VRFConsumerBase { bytes32 public keyHash; // Identifier for our Chainlink Oracle uint256 public fee; // Link for the oracle constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyHash, uint256 _fee) VRFConsumerBase(_VRFCoordinator, _LinkToken) ERC721("PopNFT", "PopNFT") { fee = _fee; keyHash = _keyHash; } }
您的合約沒有實現fullyRandomness 功能。
由於此函式未在 VRFConsumerBase 契約中定義(使其抽象),您必須自己定義它。如果你不這樣做,你的合約就沒有完全實現,因此也應該是抽象的。