This project demonstrates how to deploy and upgrade a Solidity smart contract using the ERC1967 Proxy pattern. It includes:
- BasicContractV1: Initial contract version
- BasicContractV2: Upgraded contract version
- ERC1967 Proxy: Used for contract upgradability
- Foundry Tests: Ensures deployment and upgrade functionality
├── src/
│ ├── BasicContractV1.sol
│ ├── BasicContractV2.sol
│
├── script/
│ ├── DeployBasicContractV1.s.sol
│ ├── DeployUpgrade.s.sol
│
├── test/
│ ├── DeployAndUpgradeTest.t.sol
│
├── foundry.toml
├── README.md
git clone https://github.com/Rahber-1/Upgradeable_Contracts_Project.git cd Ugradeable_Contracts_Project
curl -L https://foundry.paradigm.xyz | bash
foundryup
forge install
forge build
forge test -vv
- Implements the core logic
- Uses OpenZeppelin’s OwnableUpgradeable
- Function:
initialize()for initializing state
- Extends BasicContractV1
- Introduces additional functionality
- Used to delegate calls to implementation contracts
- Enables upgradability without changing the contract address
forge script script/DeployBasicContractV1.s.sol --rpc-url YOUR_RPC_URL --broadcast
forge script script/DeployUpgrade.s.sol --rpc-url YOUR_RPC_URL --broadcast
Test Coverage Includes:
✔️ Deployment of V1 contract
✔️ Ensures correct contract version
✔️ Upgrade to V2 and validation
Run all tests:
forge test -vv
This project is MIT licensed.