Description:
Proxy contract enabling upgradeable smart contract patterns. Delegates calls to an implementation contract.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
// SPDX-License-Identifier: X
pragma solidity ^0.8.20;
contract UUPSProxy {
bytes32 private constant IMPLEMENTATION_SLOT =
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
error InvalidImplementation();
constructor(address impl) {
require(impl != address(0), InvalidImplementation());
require(impl.code.length > 0, InvalidImplementation());
assembly {
sstore(IMPLEMENTATION_SLOT, impl)
}
}
fallback() external payable {
_fallback();
}
receive() external payable {
_fallback();
}
function _fallback() internal {
address impl = _implementation();
assembly {
calldatacopy(0, 0, calldatasize())
let result := delegatecall(gas(), impl, 0, calldatasize(), 0, 0)
returndatacopy(0, 0, returndatasize())
switch result
case 0 {
revert(0, returndatasize())
}
default {
return(0, returndatasize())
}
}
}
function _implementation() private view returns (address impl) {
assembly {
impl := sload(IMPLEMENTATION_SLOT)
}
}
}
Submitted on: 2025-10-15 10:59:44
Comments
Log in to comment.
No comments yet.