Skip to content

Commit f055494

Browse files
committed
add HybridProxy
1 parent 06fec21 commit f055494

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

contracts/access/AccessManagerLight.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
pragma solidity ^0.8.20;
44

5-
import { IAuthority } from "@openzeppelin/contracts/access/manager/IAuthority.sol";
6-
import { Masks } from "../utils/Masks.sol";
5+
import { IAuthority } from "@openzeppelin/contracts/access/manager/IAuthority.sol";
6+
import { Masks } from "../utils/Masks.sol";
77

88
contract AccessManagerLight is IAuthority {
99
using Masks for *;

contracts/proxy/HybridProxy.sol

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// SPDX-License-Identifier: MIT
2+
3+
pragma solidity ^0.8.20;
4+
5+
import {IBeacon} from "@openzeppelin/contracts/proxy/beacon/IBeacon.sol";
6+
import {ERC1967Utils} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol";
7+
import {Proxy} from "@openzeppelin/contracts/proxy/Proxy.sol";
8+
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
9+
10+
contract HybridProxy is Proxy {
11+
constructor(address implementation, bytes memory data)
12+
{
13+
ERC1967Utils.upgradeToAndCall(implementation, "");
14+
if (data.length > 0) {
15+
Address.functionDelegateCall(_implementation(), data);
16+
}
17+
}
18+
19+
function _implementation()
20+
internal
21+
view
22+
override
23+
returns (address)
24+
{
25+
address implementation = ERC1967Utils.getImplementation();
26+
try IBeacon(implementation).implementation() returns (address result) {
27+
return result;
28+
} catch {
29+
return implementation;
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)