ERC1967Proxy
0xa319992dddf61b50886be043a0df8197cf2db911
Verification
Verified
v0.8.26+commit.8a97fa7a
Type
Contract
130 bytes
ABI entries
8
0 read · 0 write
License
none
Contract information
- Address
- 0xa319992dddf61b50886be043a0df8197cf2db911
- Chain
- Robinhood Chain (4663)
- Compiler
- v0.8.26+commit.8a97fa7a
- Optimization
- Enabled
- Creator
- 0x5752d8525f…fc6410a930
- Creation tx
- 0xc7fc02b42c…46e2829de6
Token
Not a token
This contract does not expose ERC-20 metadata.
Read contract (0)
No read functions
The ABI is unavailable or exposes no view functions.
Events (1)
Upgraded
ABI
[
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"stateMutability": "payable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "ERC1967InvalidImplementation",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967NonPayable",
"type": "error"
},
{
"inputs": [],
"name": "ERC1967ProxyUninitialized",
"type": "error"
},
{
"inputs": [],
"name": "FailedCall",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"name": "Upgraded",
"type": "event"
},
{
"stateMutability": "payable",
"type": "fallback"
}
]Source code
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.6.0) (proxy/ERC1967/ERC1967Proxy.sol)
pragma solidity ^0.8.22;
import {Proxy} from "../Proxy.sol";
import {ERC1967Utils} from "./ERC1967Utils.sol";
/**
* @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an
* implementation address that can be changed. This address is stored in storage in the location specified by
* https://eips.ethereum.org/EIPS/eip-1967[ERC-1967], so that it doesn't conflict with the storage layout of the
* implementation behind the proxy.
*/
contract ERC1967Proxy is Proxy {
/**
* @dev The proxy is left uninitialized.
*/
error ERC1967ProxyUninitialized();
/**
* @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.
*
* Provided `_data` is passed in a delegate call to `implementation`. This will typically be an encoded function
* call, and allows initializing the storage of the proxy like a Solidity constructor. By default construction
* will fail if `_data` is empty. This behavior can be overridden using a custom {_unsafeAllowUninitialized} that
* returns true. In that case, empty `_data` is ignored and no delegate call to the implementation is performed
* during construction.
*
* Requirements:
*
* - If `data` is empty, `msg.value` must be zero.
*/
constructor(address implementation, bytes memory _data) payable {
if (!_unsafeAllowUninitialized() && _data.length == 0) {
revert ERC1967ProxyUninitialized();
}
ERC1967Utils.upgradeToAndCall(implementation, _data);
}
/**
* @dev Returns the current implementation address.
*
* TIP: To get this value clients can read directly from the storage slot shown below (specified by ERC-1967) using
* the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.
* `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`
*/
function _implementation() internal view virtual override returns (address) {
return ERC1967Utils.getImplementation();
}
/**
* @dev Returns whether the proxy can be left uninitialized.
*
* NOTE: Override this function to allow the proxy to be left uninitialized.
* Consider uninitialized proxies might be susceptible to man-in-the-middle threats
* where the proxy is replaced with a malicious one.
*/
function _unsafeAllowUninitialized() internal pure virtual returns (bool) {
return false;
}
}
Chain explorer2777msChain node85ms