Solidity

錯誤:契約應標記為抽象

  • November 2, 2021

嗨,我正在關注有關 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 契約中定義(使其抽象),您必須自己定義它。如果你不這樣做,你的合約就沒有完全實現,因此也應該是抽象的。

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