Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
9165737 | 1885 days ago | Contract Creation | 0 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x5811E3Ce...03C3C4eB5 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
UpgradeabilityProxy
Compiler Version
v0.4.24+commit.e67f0147
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-31 */ pragma solidity ^0.4.24; /** * @title IRegistry * @dev This contract represents the interface of a registry contract */ interface ITwoKeySingletonesRegistry { /** * @dev This event will be emitted every time a new proxy is created * @param proxy representing the address of the proxy created */ event ProxyCreated(address proxy); /** * @dev This event will be emitted every time a new implementation is registered * @param version representing the version name of the registered implementation * @param implementation representing the address of the registered implementation * @param contractName is the name of the contract we added new version */ event VersionAdded(string version, address implementation, string contractName); /** * @dev Registers a new version with its implementation address * @param version representing the version name of the new implementation to be registered * @param implementation representing the address of the new implementation to be registered */ function addVersion(string _contractName, string version, address implementation) public; /** * @dev Tells the address of the implementation for a given version * @param _contractName is the name of the contract we're querying * @param version to query the implementation of * @return address of the implementation registered for the given version */ function getVersion(string _contractName, string version) public view returns (address); } /** * @title Proxy */ contract Proxy { // Gives the possibility to delegate any call to a foreign implementation. /** * @dev Tells the address of the implementation where every call will be delegated. * @return address of the implementation to which it will be delegated */ function implementation() public view returns (address); /** * @dev Fallback function allowing to perform a delegatecall to the given implementation. * This function will return whatever the implementation call returns */ function () payable public { address _impl = implementation(); require(_impl != address(0)); assembly { let ptr := mload(0x40) calldatacopy(ptr, 0, calldatasize) let result := delegatecall(gas, _impl, ptr, calldatasize, 0, 0) let size := returndatasize returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } } /** * @author Nikola Madjarevic * @dev This contract holds all the necessary state variables to support the upgrade functionality */ contract UpgradeabilityStorage { // Versions registry ITwoKeySingletonesRegistry internal registry; // Address of the current implementation address internal _implementation; /** * @dev Tells the address of the current implementation * @return address of the current implementation */ function implementation() public view returns (address) { return _implementation; } } /** * @title UpgradeabilityProxy * @dev This contract represents a proxy where the implementation address to which it will delegate can be upgraded */ contract UpgradeabilityProxy is Proxy, UpgradeabilityStorage { //TODO: Add event through event source whenever someone calls upgradeTo /** * @dev Constructor function */ constructor (string _contractName, string _version) public { registry = ITwoKeySingletonesRegistry(msg.sender); _implementation = registry.getVersion(_contractName, _version); } /** * @dev Upgrades the implementation to the requested version * @param _version representing the version name of the new implementation to be set */ function upgradeTo(string _contractName, string _version, address _impl) public { require(msg.sender == address(registry)); require(_impl != address(0)); _implementation = _impl; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_contractName","type":"string"},{"name":"_version","type":"string"},{"name":"_impl","type":"address"}],"name":"upgradeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_contractName","type":"string"},{"name":"_version","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]
Deployed Bytecode
0x60806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632bc38f78146100bb5780635c60da1b1461018a575b60006100566101e1565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561009457600080fd5b60405136600082376000803683855af43d806000843e81600081146100b7578184f35b8184fd5b3480156100c757600080fd5b50610188600480360381019080803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061020b565b005b34801561019657600080fd5b5061019f6101e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561026657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156102a257600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505600a165627a7a72305820266e2105873a82d4af9bbdbebef4389e828d87a65cfb900790bcdc8c8c6bf18c0029
Deployed Bytecode Sourcemap
3394:793:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;2180:13;2196:16;:14;:16::i;:::-;2180:32;;2248:1;2231:19;;:5;:19;;;;2223:28;;;;;;;;2305:4;2299:11;2345:12;2342:1;2337:3;2324:34;2433:1;2430;2416:12;2411:3;2404:5;2399:3;2386:49;2461:14;2512:4;2509:1;2504:3;2489:28;2540:6;2565:1;2560:28;;;;2624:4;2619:3;2612:17;2560:28;2581:4;2576:3;2569:17;3970:212;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3970:212:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3132:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3132:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3179:7;3206:15;;;;;;;;;;;3199:22;;3132:97;:::o;3970:212::-;4091:8;;;;;;;;;;;4069:31;;:10;:31;;;4061:40;;;;;;;;4137:1;4120:19;;:5;:19;;;;4112:28;;;;;;;;4169:5;4151:15;;:23;;;;;;;;;;;;;;;;;;3970:212;;;:::o
Swarm Source
bzzr://266e2105873a82d4af9bbdbebef4389e828d87a65cfb900790bcdc8c8c6bf18c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.