Hey y'all,
I'm trying to install openzeppelin-contracts-upgradeable & * openzeppelin-contracts using forge.
Installation:
forge install OpenZeppelin/openzeppelin-contracts-upgradeable
forge install OpenZeppelin/openzeppelin-contracts
foundry.toml:
remappings = [
'@openzeppelin/=lib/@openzeppelin-contracts/',
'@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/',
]
Is there someone who can help me import the following contracts/utils please?
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
<------------------------------------------------------------------------------->
import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
import "@openzeppelin/contracts/proxy/Clones.sol";
CC: @ernestognw
Change your remappings in foundry.toml to the following instead:
remappings = [
'@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/',
'@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/'
]
EDIT: The following works better for Etherscan source code verification. Note that this would mean both @openzeppelin/contracts/
and @openzeppelin/contracts-upgradeable/
are coming from the openzeppelin-contracts-upgradeable
submodule and its subdirectories (which includes its own transitive copy of openzeppelin-contracts
of the same release version number). Particularly, any openzeppelin-contracts
that you also have installed separately is NOT used.
foundry.toml:
remappings = [
'@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/',
'@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/'
]
or remappings.txt:
@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/
@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
1 Like
Seems like it works well; Except for those imports! I'll debug and update
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
UPDATE:
These two contracts have different import paths from previous openZeppelin versions (4.7.1)
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/Pausable.sol";
I'm guessing SafeMath.sol no longer available?
Yes, some of the paths have changed and SafeMath.sol was removed in 5.0.0. See https://github.com/OpenZeppelin/openzeppelin-contracts/releases/tag/v5.0.0
1 Like
exactly! @Ibrahim96 you can use Math
library and see the functions, some were renamed and improved!
@ericglau exactly! your remapping works fine, but I add here the command to run it and make it work:
forge install OpenZeppelin/openzeppelin-contracts@v5.0.1 --no-commit
just a little extra info in case anyone sees it! that worked for me too!
1 Like