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 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.
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.