Discover more of Etherscan's tools and services in one place.
Sponsored
Contract Source Code:
File 1 of 1 : AuthereumProxy
pragma solidity 0.5.12; pragma experimental ABIEncoderV2; // @author Authereum, Inc. /** * @title AuthereumProxy * @author Authereum, Inc. * @dev The Authereum Proxy. */ contract AuthereumProxy { string constant public authereumProxyVersion = "2019102500"; /// @dev Storage slot with the address of the current implementation. /// @notice This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted /// @notice by 1, and is validated in the constructor. bytes32 internal constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /// @dev Set the implementation in the constructor /// @param _logic Address of the logic contract constructor(address _logic) public payable { bytes32 slot = IMPLEMENTATION_SLOT; assembly { sstore(slot, _logic) } } /// @dev Fallback function /// @notice A payable fallback needs to be implemented in the implementation contract /// @notice This is a low level function that doesn't return to its internal call site. /// @notice It will return to the external caller whatever the implementation returns. function () external payable { if (msg.data.length == 0) return; address _implementation = implementation(); assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas, _implementation, 0, calldatasize, 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize) } default { return(0, returndatasize) } } } /// @dev Returns the current implementation. /// @return Address of the current implementation function implementation() public view returns (address impl) { bytes32 slot = IMPLEMENTATION_SLOT; assembly { impl := sload(slot) } } }
Please enter a contract address above to load the contract details and source code.
Please DO NOT store any passwords or private keys here. A private note (up to 100 characters) can be saved and is useful for transaction tracking.
My Name Tag:
Private Note:
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.