I’m encountering an error while compiling a contract (with version >=0.4.21 <0.7.0) which imports the following contracts.
@openzeppelin/contracts/token/ERC721/ERC721.sol
@openzeppelin/contracts/utils/Counters.sol
which both have a solidity version (^0.6.0).
Here is the full contract used .
Here is the error while truffle compile
:
Error: Truffle is currently using solc 0.5.16, but one or more of your contracts specify "pragma solidity ^0.6.0"
Environment
truffle
: 5.1.43
solc
: 0.5.16
@openzeppelin/contracts
: 3.1.0
I have tried the following approach to fix the issue . Is this an issue from truffle or am I missing something here?
1 Like
Hi @vasa-develop , go to your truffle-config.js file and change the compiler version to use 0.6.0
1 Like
compilers: {
solc: {
version: "0.6.0", // Fetch exact version from solc-bin (default: truffle's version)
},
1 Like
Thanks @DragonLord ,
I believe it will actually need to be 0.6.2 or above as one of the dependencies needs 0.6.2.
Hi @vasa-develop ,
Just wanted to follow up.
As you are using OpenZeppelin Contracts v3.x, the pragma for your contract should be ^0.6.2 as an earlier version of the compiler won’t be able to compile the contract.
With your imports import "../node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol";
you should be able to have these as import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
There currently isn’t any access control on minting, which means anyone can mint a token.
https://github.com/filecoin-shipyard/meme-nft-token/blob/master/contracts/MemeMarketplace.sol#L15
To see AccessControl in action see the ERC721PresetMinterPauserAutoId contract:
* assigned (and available on the emitted {IERC721-Transfer} event), and the token
* URI autogenerated based on the base URI passed at construction.
*
* See {ERC721-_mint}.
*
* Requirements:
*
* - the caller must have the `MINTER_ROLE`.
*/
function mint(address to) public virtual {
require(hasRole(MINTER_ROLE, _msgSender()), "ERC721PresetMinterPauserAutoId: must have minter role to mint");
// We cannot just use balanceOf to create the new tokenId because tokens
// can be burned (destroyed), so we need a separate counter.
_mint(to, _tokenIdTracker.current());
_tokenIdTracker.increment();
}
/**
* @dev Pauses all token transfers.
*
2 Likes
Thanks for suggestions @abcoathup @DragonLord
1 Like