Cannot Compile StorageFactory.sol because "not found contracts/SimpleStorage.sol - solidity

I am doing the Solidity, Blockchain, and Smart Contract Course – Beginner to Expert Python Tutorial from freeCodeCamp and Patrick AlphaC
https://github.com/PatrickAlphaC/storage_factory
Below is my code image from my IDE too here
// SPDX-License_Identifier: MIT
pragma solidity ^0.8.0;
import "./SimpleStorage.sol";
contract StorageFactory {
SimpleStorage[] public simpleStorageArray;
function createSimpleStorageContact() public {
SimpleStorage simpleStorage = new SimpleStorage();
simpleStorageArray.push(simpleStorage);
}
}
and I am getting the error:
not found contracts/SimpleStorage.sol
even though all the files are spelt correctly and in the same folder.
Please help as I am trying to follow along with the tutorial and don't want to get left behind.

In your picture your filename is wrong. You write SimpleSorage but it must be SimpleStorage. (Note the missing t in Storage.)

Related

How to check values of a variables and functions in solidity like javascript via console.log

How to check values of a variables and functions in solidity like javascript via console.log? Because i need visibility of results for deep understanding.
I am newbie...
i tried hardhat but need more understand.
I'm a newbie too, but I know this (I think)!
There is no console in solidity, you need to write a function for this, or just put it public in the variable itself!
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Value {
uint public num; //add "public" to see the value
function add(uint _num) external{
num += _num;
}
//this function is for returning value
function viewNum() public view returns(uint){
return(num);
}
}
Also use the Remix editor, it's in the browser. There are plenty of videos on the internet!
If you are using hardhat, then you can use console.sol.
You need to import it into your contract.
import "hardhat/console.sol";
Now, you are able to log your variable while you are working.
console.log(__your_variable__);
If you are still looking to log your variables once you deploy your contract, then you need to use event functionality.
Import hardhat console:
import "hardhat/console.sol";
Use console log in your contract
console.log(variable); //Variable value
console.log(1234); //direct value

Created custom ERC20 contract, balanceOf msg.sender is zero

I've created a ERC20 contract in Remix:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "#openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor(string memory name, string memory symbol) ERC20(name, symbol) {
_mint(msg.sender, 1002000);
}
}
Then I deployed it:
But the balance of msg.sender is zero:
Does anyone know what's wrong?
I just tried your code and it works perfectly like intended.
It is important, that you compile the correct contract using Remix, see my attached picture. You need to choose the contract "MyToken". I guess you could have deployed the contract "ERC20 - #openzeppelin/contracts/token/ERC20/ERC20.sol" which would lead to the behaviour you mentioned.
compile "MyToken" in Remix

Error: Compiler version ^0.8.0 does not satisfy the r semver requirement

I am new to solidity and I am running code on Remix.
It doesn't matter what version of compiler I specify, I keep on getting the same error.
Can someone help me out? What does "Compiler version ^0.8.0 does not satisfy the r semver requirement" exactly mean?
Here is my code:
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^ 0.8.0;
contract Storage {
struct People {
uint256 favoriteNumber;
string name;
}
mapping(string => uint256) public nameToFavoriteNumber;
People[] public people;
function addPerson(uint _personFavoriteNumber, string memory _personName ) public {
people.push(People({favoriteNumber: _personFavoriteNumber, name: _personName}));
nameToFavoriteNumber[_personName] = _personFavoriteNumber;
}
}
I had the same issue a couple of times. In Remix, I added a ".0" to the compiler version like so:
pragma solidity ^0.8.4.0;
I ran into this in Virtual Studio code also but I just ignored it and everything worked fine. I hope this helps!
It works in Remix as well, but I have worked on contracts that work without adding that ".0" at last, now even they show this error.
pragma solidity ^0.8.8.0;

running into decleration error in solidity course

just started a solidity coding course and ran into this issue with this code:
//SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;
import "./simplestorage.sol";
``
contract StorageFactory {
function createsimplestoragecontract() public {
simplestorage _simplestorage = new simplestorage();
}
}
I'm running into this error:
DeclarationError: Identifier not found or not unique.
--> contracts/storageFactory.sol:9:9:
|
9 | simplestorage _simplestorage = new simplestorage();
| ^^^^^^^^^^^^^
The following code worked fine for me.
//SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;
import "./1_Storage.sol";
contract StorageFactory {
function createsimplestoragecontract() public {
Storage _simplestorage = new Storage();
}
}
Did you check if the name of the contract in simplestorage.sol is "simplestorage"? Usually is Pascal case (not mandatory, but good practice), something like SimpleStorage. Be aware about this. Your error probably is about lowercase instead of uppercase.

How to correctly import SafeMath.sol into contract

This has been a problem I've been dealing with for a while now. My temporary solution has been to create a SafeMath.sol file in my Contracts directory and directly import it from there. However, I've been looking for a 'clearer solution' to this... Old way seemed to be directly importing it from a GitHub link, as seen in some repos and other stack overflow posts like such
However, the proper way do this seems to be installing the corresponding oz package (#openzeppelin/contracts-ethereum-package) and importing the file directly into the needed contract i.e.
import "#openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";
However, using VSCode, I still get the error Source "#openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol" not found: File import callback not supported
That said, how can I properly import SafeMath?
EDIT: I am using pragma solidity ^0.6.0;
I looked through the node_modules for the package #openzeppelin/contracts. Here is the current correct import path as of posting:
import "#openzeppelin/contracts/utils/math/SafeMath.sol";
This is no longer needed with Solidity version 8
path is different in v 3.0 documentation
I used this:
import "#openzeppelin/contracts/math/SafeMath.sol";
Instead of this:
import "#openzeppelin/contracts/utils/math/SafeMath.sol";
Can be used in the following way:
pragma solidity ^0.5.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.3.0/contracts/math/SafeMath.sol";
contract contractForSafeMath {
using SafeMath for uint;
uint256 addResult;
uint256 subResult;
uint256 mulResult;
uint256 divResult;
uint256 modResult;
uint public MAX_VALUE = 2**256 -1;
//overflow
uint256 overflowResult;
function getResults(uint256 a, uint256 b) public{
addResult = SafeMath.add(a,b);
subResult = SafeMath.sub(a,b);
mulResult = SafeMath.mul(a,b);
divResult = SafeMath.div(a,b);
modResult = SafeMath.mod(a,b);
overflowResult = SafeMath.add(SafeMath.add ( (a**b), SafeMath.mul (SafeMath.mul (b, a), b)), (b** b));
}
function addResultVal(uint a, uint b) public view returns(uint256){
return addResult;
}
function subResultVal() public view returns(uint256){
return subResult;
}
function mulResultVal() public view returns(uint256){
return mulResult;
}
function divResultVal() public view returns(uint256){
return divResult;
}
function modResultVal() public view returns(uint256){
return modResult;
}
function overflowResultVal() public view returns(uint256){
return overflowResult;
}
}
Go to the github page for any import you'll like to have for openzeppelin-contracts, "SafeMath" in this case, and copy the page url.
Ex:
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol";
Import the library right after pragma solidity. Then include it right after the opening of your contract.
pragma solidity ^x.x.x;
import "openzeppelin-solidity/contracts/utils/math/SafeMath.sol";
contract TheNameOfYourContract {
using SafeMath for uint;
.
.
...
}
creating a project from npx hardhat (2.8.3) selecting advanced project and then having a folder structure like this:
project
|--contracts
|--mycontract.sol
|--node_modules
|--{other files & folders}
The error is gone if I import libraries like this inside mycontract.sol:
pragma solidity ^0.8.4;
import "../node_modules/#openzeppelin/contracts/token/ERC20/ERC20.sol";
import "../node_modules/#openzeppelin/contracts/utils/math/SafeMath.sol";
import "../node_modules/#openzeppelin/contracts/access/Ownable.sol";
... other code
But this will not compile at least with hardhat. So it appears Solhint (.solhint.json) requires to know exactly the import paths but it ignores by default (.solhintignore) the node_modules folder. By removing node_modules from .solhintignore and restarting VS Code it works for me.
No longer needed but import that works for pragma solidity ^0.6.0;
would be:
import "#chainlink/contracts/src/v0.6/vendor/SafeMathChainlink.sol";