
Skill
setup-solidity-contracts
set up Solidity smart contract projects
Description
Set up a Solidity smart contract project with OpenZeppelin Contracts. Use when users need to: (1) create a new Hardhat or Foundry project, (2) install OpenZeppelin Contracts dependencies for Solidity, (3) configure remappings for Foundry, or (4) understand Solidity import conventions for OpenZeppelin.
SKILL.md
Solidity Setup
For existing projects, detect the framework by looking for hardhat.config.* (Hardhat) or foundry.toml (Foundry). For new projects, ask the user which framework they prefer.
Hardhat Setup
- Initialize project (only if starting a new project)
npx hardhat init # Hardhat v2
npx hardhat --init # Hardhat v3
- Install OpenZeppelin Contracts:
npm install @openzeppelin/contracts
- If using upgradeable contracts, also install the upgradeable variant:
npm install @openzeppelin/contracts-upgradeable
Foundry Setup
- Install Foundry
curl -L https://foundry.paradigm.xyz | bash
foundryup
- Initialize project (only if starting a new project)
forge init my-project
cd my-project
- Add OpenZeppelin Contracts:
forge install OpenZeppelin/openzeppelin-contracts@v<VERSION>
- If using upgradeable contracts, also add the upgradeable variant:
forge install OpenZeppelin/openzeppelin-contracts-upgradeable@v<VERSION>
Look up the current version from https://github.com/OpenZeppelin/openzeppelin-contracts/releases. Pin to a release tag — without one,
forge installpulls the default branch, which may be unstable.
remappings.txt(if not using upgradeable contracts)
@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
remappings.txt(if using upgradeable contracts)
@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/
@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
Note The above remappings mean that both
@openzeppelin/contracts/(including proxy contracts) and@openzeppelin/contracts-upgradeable/come from theopenzeppelin-contracts-upgradeablesubmodule and its subdirectories, which includes its own transitive copy ofopenzeppelin-contractsof the same release version number. This format is needed for Etherscan verification to work. Particularly, any copies ofopenzeppelin-contractsthat are installed separately are NOT used.
Import Conventions
- Standard:
@openzeppelin/contracts/token/ERC20/ERC20.sol - Upgradeable:
@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol - Use upgradeable variants only when deploying behind proxies; otherwise use standard contracts.
More skills from the openzeppelin-skills repository
View all 11 skillsdevelop-secure-contracts
develop secure smart contracts with OpenZeppelin
Jul 13Access ControlSecuritySmart ContractsSolidityreview-sui-contracts
review Sui Move smart contracts
Jul 16BlockchainCode ReviewRustSmart Contractssetup-cairo-contracts
set up Cairo smart contract projects
Jul 13EngineeringSmart ContractsWeb3setup-stellar-contracts
set up Stellar Soroban smart contract projects
Jul 13RustSmart ContractsWeb3setup-stylus-contracts
set up Stylus smart contract projects
Jul 13RustSmart ContractsWeb3setup-sui-contracts
set up Sui Move smart contracts
Jul 16BlockchainCLIRustSmart Contracts
More from OpenZeppelin
View publisherupgrade-cairo-contracts
upgrade Cairo smart contracts on Starknet
openzeppelin-skills
Jul 13MigrationSmart ContractsWeb3upgrade-solidity-contracts
upgrade Solidity smart contracts with proxies
openzeppelin-skills
Jul 13MigrationSecuritySmart ContractsSolidityupgrade-stellar-contracts
upgrade Stellar Soroban smart contracts
openzeppelin-skills
Jul 13BlockchainMigrationSecuritySmart Contractsupgrade-stylus-contracts
upgrade Stylus smart contracts
openzeppelin-skills
Jul 13MigrationRustSmart ContractsWeb3