我正在做一个 NFT 项目。我的合约文件夹中有我的 NFT 文件,该文件是从 nodemodules 中的 openzeppelin 文件导入的。但是,编译器似乎建议 Context.sol 已在我的文件中声明。我检查了 Context.sol 文件,在给定的文件夹中似乎有很多,我该如何解决这个问题。
Error: DeclarationError: Identifier already declared.
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
^-------------------------------------------------------^
@openzeppelin/contracts/utils/Context.sol:15:2: The previous declaration is here
:
contract Context {
^ (Relevant source part starts here and spans across multiple lines)
NFT.sol
pragma solidity ^0.5.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract NFT is ERC721, Ownable {
address payable public _owner;
mapping (uint => bool) public sold;
mapping (uint => uint) public price;
event Purchase(address owner, uint price, uint id, string uri);
constructor() ERC721("Dapp University", "DAPPU") public{
_owner = msg.sender;
}
function mint(string memory _tokenURI, uint _price) public onlyOwner returns (bool) {
uint _tokenId = totalSupply() + 1;
price[_tokenId] = _price;
_mint(address(this), _tokenId);
_setTokenURI(_tokenId, _tokenURI);
return true;
}
function buy(uint _id) external payable {
_validate(_id); //check req. for trade
_trade(_id); //swap nft for eth
emit Purchase(msg.sender, price[_id], _id, tokenURI(_id));
}
function _validate(uint _id) internal {
require(_exists(_id), "Error, wrong Token id"); //not exists
require(!sold[_id], "Error, Token is sold"); //already sold
require(msg.value >= price[_id], "Error, Token costs more"); //costs more
}
function _trade(uint _id) internal {
_transfer(address(this), msg.sender, _id); //nft to user
_owner.transfer(msg.value); //eth to owner
sold[_id] = true; //nft is sold
}
}
上下文.sol
pragma solidity ^0.5.0;
contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}