Skip to content

Commit b426132

Browse files
authored
Merge pull request #162 from axieinfinity/implement-feature/rework/restore-transparent-proxy-v4_9_5
feat(rework): implement `restore-transparent-proxy-v4_9_5`
2 parents 0f3f935 + ac0327d commit b426132

File tree

5 files changed

+32
-5
lines changed

5 files changed

+32
-5
lines changed

script/BaseMigration.s.sol

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Vm } from "../dependencies/forge-std-1.9.3/src/Vm.sol";
77
import { console } from "../dependencies/forge-std-1.9.3/src/console.sol";
88
import { LibString } from "../dependencies/solady-0.0.228/src/utils/LibString.sol";
99
import { RoninTransparentProxy } from "../src/RoninTransparentProxy.sol";
10+
import { TransparentProxyOZv4_9_5 } from "../src/TransparentProxyOZv4_9_5.sol";
1011

1112
import { OnchainExecutor } from "./OnchainExecutor.s.sol";
1213
import { IScriptExtended, ScriptExtended } from "./extensions/ScriptExtended.s.sol"; // cheat to load artifact to parent
@@ -328,6 +329,7 @@ abstract contract BaseMigration is ScriptExtended {
328329
*/
329330
function _precompileProxyContracts() internal pure virtual {
330331
bytes memory dummy;
331-
dummy = type(RoninTransparentProxy).creationCode;
332+
dummy = type(RoninTransparentProxy).creationCode;
333+
dummy = type(TransparentProxyOZv4_9_5).creationCode;
332334
}
333335
}

script/libraries/LibDeploy.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ library LibDeploy {
205205
DeployInfo memory proxyInfo;
206206
proxyInfo.callValue = callValue;
207207
proxyInfo.by = implInfo.by;
208-
proxyInfo.contractName = "RoninTransparentProxy";
208+
proxyInfo.contractName = "TransparentProxyOZv4_9_5";
209209
proxyInfo.absolutePath = string.concat(proxyInfo.contractName, ".sol:", proxyInfo.contractName);
210210
proxyInfo.artifactName = string.concat(vm.replace(implInfo.artifactName, "Logic", ""), "Proxy");
211211
proxyInfo.constructorArgs = abi.encode(impl, proxyAdmin, callData);

script/libraries/LibInitializeGuard.sol

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,9 +340,12 @@ library LibInitializeGuard {
340340
string memory path
341341
) internal pure returns (string memory contractName) {
342342
uint256 length = bytes(path).length;
343-
// Remove ".sol"
343+
contractName = path;
344344
if (path.endsWith(".sol")) contractName = path.slice(0, length - 4);
345-
return string(contractName);
345+
string[] memory parts = contractName.split(":");
346+
if (parts.length != 0) contractName = parts[parts.length - 1];
347+
parts = contractName.split("/");
348+
if (parts.length != 0) contractName = parts[parts.length - 1];
346349
}
347350

348351
/**

src/TransparentProxyOZv4_9_5.sol

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {
5+
ITransparentUpgradeableProxy,
6+
TransparentUpgradeableProxy
7+
} from "../dependencies/openzeppelin-v4-4.9.5/contracts/proxy/transparent/TransparentUpgradeableProxy.sol";
8+
9+
/**
10+
* @title TransparentProxyOZv4_9_5
11+
* @dev A contract that acts as a proxy for transparent upgrades.
12+
*/
13+
contract TransparentProxyOZv4_9_5 is TransparentUpgradeableProxy {
14+
/**
15+
* @dev Initializes the Proxy contract.
16+
* @param logic The address of the logic contract.
17+
* @param admin The address of the admin contract.
18+
* @param data The initialization data.
19+
*/
20+
constructor(address logic, address admin, bytes memory data) payable TransparentUpgradeableProxy(logic, admin, data) { }
21+
}

test/LibInitializeGuard.t.sol

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { SampleProxyForTestingPurpose7 } from "src/mocks/ForTesting/SampleProxyF
2222
import { SampleProxy } from "src/mocks/SampleProxy.sol";
2323

2424
interface ITransparentUpgradeableProxy {
25+
function upgradeTo(address) external;
2526
function upgradeToAndCall(address, bytes memory) external payable;
2627
}
2728

@@ -65,7 +66,7 @@ contract LibInitializeGuardTest is Test {
6566

6667
address newLogic = address(new SampleProxyForTestingPurpose2());
6768
vm.prank(admin);
68-
ITransparentUpgradeableProxy(address(_sample)).upgradeToAndCall(newLogic, "");
69+
ITransparentUpgradeableProxy(address(_sample)).upgradeTo(newLogic);
6970
MockConfig(address(vme)).updateSampleProxyLogicForTesting("SampleProxyForTestingPurpose2");
7071

7172
Vm.Log[] memory logs = vm.getRecordedLogs();

0 commit comments

Comments
 (0)