Skip to content

Commit f650cae

Browse files
committed
[WIP] Fix proxy admin deployment
1 parent 676e6e8 commit f650cae

File tree

5 files changed

+106
-16
lines changed

5 files changed

+106
-16
lines changed

claim_contracts/Makefile

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ help: ## 📚 Show help for each of the Makefile recipes
77
# Deployments
88

99
RPC_URL?=http://localhost:8545
10-
PRIVATE_KEY?=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
10+
PRIVATE_KEY?=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
1111

1212
deploy-all: ## 🚀 Deploy all contracts
1313
cd script && forge script DeployAll.s.sol --private-key $(PRIVATE_KEY) --rpc-url $(RPC_URL) --broadcast
@@ -20,7 +20,18 @@ deploy-token: ## 🚀 Deploy the token contract
2020
$(CONFIG) \
2121
--private-key $(PRIVATE_KEY) \
2222
--rpc-url $(RPC_URL) \
23-
--broadcast
23+
--broadcast \
24+
--verbosity 3
25+
26+
upgrade-token: ## 🚀 Upgrade the token contract
27+
cd script && \
28+
forge script UpgradeToken.s.sol \
29+
--sig "run(string)" \
30+
$(CONFIG) \
31+
--private-key $(PRIVATE_KEY) \
32+
--rpc-url $(RPC_URL) \
33+
--broadcast \
34+
--verbosity 3
2435

2536
MINT?="1 ether"
2637
OWNER?=0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266

claim_contracts/script-config/config.example.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@
66
"claimSupplier": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
77
"claimSupplierPrivateKey": "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d",
88
"limitTimestampToClaim": 2733427549,
9-
"claimMerkleRoot": "0x90076b5fb9a6c81d9fce83dfd51760987b8c49e7c861ea25b328e6e63d2cd3df"
9+
"claimMerkleRoot": "0x90076b5fb9a6c81d9fce83dfd51760987b8c49e7c861ea25b328e6e63d2cd3df",
10+
"airdropProxy": "0xB443aFBc5f9FCECB42334bb7EC95412FFCf9C860",
11+
"proxyAdmin": "0x74120FC99fEb357B7F3c277A42D1FA551A6eE23a",
12+
"tokenProxy": "0xfC3443C5Fc1b16fdA71B9CfBfe12aF874d6219c0"
1013
}

claim_contracts/script/DeployAlignedToken.s.sol

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import "../src/ClaimableAirdrop.sol";
66
import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
77
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
88
import "forge-std/Script.sol";
9+
import {Vm} from "forge-std/Vm.sol";
910
import {Utils} from "./Utils.sol";
1011

1112
contract DeployAlignedToken is Script {
@@ -28,17 +29,8 @@ contract DeployAlignedToken is Script {
2829
".claimSupplier"
2930
);
3031

31-
ProxyAdmin _proxyAdmin = deployProxyAdmin(_safe, _salt, _deployer);
32-
33-
console.log(
34-
"Proxy Admin deployed at address:",
35-
address(_proxyAdmin),
36-
"with owner:",
37-
_safe
38-
);
39-
4032
TransparentUpgradeableProxy _tokenProxy = deployAlignedTokenProxy(
41-
address(_proxyAdmin),
33+
_safe,
4234
_salt,
4335
_deployer,
4436
_foundation,
@@ -49,9 +41,9 @@ contract DeployAlignedToken is Script {
4941
string.concat(
5042
"Aligned Token Proxy deployed at address:",
5143
vm.toString(address(_tokenProxy)),
52-
"with proxy admin:",
53-
vm.toString(address(_proxyAdmin)),
54-
"and owner:",
44+
" with proxy admin: ",
45+
vm.toString(getAdminAddress(address(_tokenProxy))),
46+
" and owner: ",
5547
vm.toString(_safe)
5648
)
5749
);
@@ -102,4 +94,12 @@ contract DeployAlignedToken is Script {
10294
);
10395
return TransparentUpgradeableProxy(payable(_alignedTokenProxy));
10496
}
97+
98+
function getAdminAddress(address proxy) internal view returns (address) {
99+
address CHEATCODE_ADDRESS = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D;
100+
Vm vm = Vm(CHEATCODE_ADDRESS);
101+
102+
bytes32 adminSlot = vm.load(proxy, ERC1967Utils.ADMIN_SLOT);
103+
return address(uint160(uint256(adminSlot)));
104+
}
105105
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.19;
3+
4+
// import "../src/TestToken.sol";
5+
import "../src/AlignedTokenV2.sol";
6+
import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol";
7+
import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
8+
import {ERC1967Utils} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol";
9+
import "forge-std/Script.sol";
10+
import {Vm} from "forge-std/Vm.sol";
11+
import {Utils} from "./Utils.sol";
12+
13+
/// @notice This script upgrades the ClaimableAirdrop contract to ClaimableAirdropV2.
14+
/// @dev The `ProxyAdmin` owner must be the runner of this script since it is the
15+
/// one that will call the upgradeAndCall function of the `ProxyAdmin`.
16+
contract UpgradeToClaimableAirdropV2 is Script {
17+
function run(string memory config) public {
18+
string memory root = vm.projectRoot();
19+
string memory path = string.concat(
20+
root,
21+
"/script-config/config.",
22+
config,
23+
".json"
24+
);
25+
string memory config_json = vm.readFile(path);
26+
27+
address _currentTokenProxy = stdJson.readAddress(
28+
config_json,
29+
".tokenProxy"
30+
);
31+
32+
vm.startBroadcast();
33+
AlignedTokenV2 _newToken = new AlignedTokenV2();
34+
35+
address _adminAddress = getAdminAddress(_currentTokenProxy);
36+
37+
ProxyAdmin(_adminAddress).upgradeAndCall(
38+
ITransparentUpgradeableProxy(_currentTokenProxy),
39+
address(_newToken),
40+
abi.encodeCall(AlignedTokenV2.reinitialize, ())
41+
);
42+
43+
vm.stopBroadcast();
44+
}
45+
46+
function getAdminAddress(address proxy) internal view returns (address) {
47+
address CHEATCODE_ADDRESS = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D;
48+
Vm vm = Vm(CHEATCODE_ADDRESS);
49+
50+
bytes32 adminSlot = vm.load(proxy, ERC1967Utils.ADMIN_SLOT);
51+
return address(uint160(uint256(adminSlot)));
52+
}
53+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.13;
3+
4+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
5+
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
6+
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
7+
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
8+
import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol";
9+
import "@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol";
10+
import "./AlignedToken.sol";
11+
12+
contract AlignedTokenV2 is AlignedToken {
13+
/// @custom:oz-upgrades-unsafe-allow constructor
14+
constructor() {
15+
_disableInitializers();
16+
}
17+
18+
function reinitialize() public reinitializer(2) {}
19+
20+
function mint(address _tokenOwner, uint256 amount) public onlyOwner {
21+
_mint(_tokenOwner, amount);
22+
}
23+
}

0 commit comments

Comments
 (0)