Address Contract Verified
Address
0x294938EB354B30B9c237c9CDa8193dDFC5F38E2e
Balance
0.017000 ETH
Nonce
1
Code Size
1814 bytes
Creator
0x96Ec53A1...61B5 at tx 0x835bfb79...3c75ac
Indexed Transactions
0
Contract Bytecode
1814 bytes
0x6060604052600436106100825763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100c857806354fd4d50146100f75780635a8b1a9f146101815780635c60da1b146101df5780636fde8202146101f2578063958a41dd14610205578063f1739cae1461029f575b600061008c6102be565b9050600160a060020a03811615156100a357600080fd5b60405136600082376000803683855af43d806000843e8180156100c4578184f35b8184fd5b34156100d357600080fd5b6100db6102ce565b604051600160a060020a03909116815260200160405180910390f35b341561010257600080fd5b61010a6102dd565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561014657808201518382015260200161012e565b50505050905090810190601f1680156101735780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561018c57600080fd5b6101dd60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965050509235600160a060020a03169250610385915050565b005b34156101ea57600080fd5b6100db6102be565b34156101fd57600080fd5b6100db6103ba565b6101dd60046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843782019150505050505091908035600160a060020a031690602001909190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506103c995505050505050565b34156102aa57600080fd5b6101dd600160a060020a0360043516610486565b600854600160a060020a03165b90565b60006102d86103ba565b905090565b6102e5610640565b60078054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561037b5780601f106103505761010080835404028352916020019161037b565b820191906000526020600020905b81548152906001019060200180831161035e57829003601f168201915b5050505050905090565b61038d6102ce565b600160a060020a031633600160a060020a03161415156103ac57600080fd5b6103b6828261051b565b5050565b600654600160a060020a031690565b6103d16102ce565b600160a060020a031633600160a060020a03161415156103f057600080fd5b6103fa8383610385565b30600160a060020a0316348260405180828051906020019080838360005b83811015610430578082015183820152602001610418565b50505050905090810190601f16801561045d5780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876187965a03f192505050151561048157600080fd5b505050565b61048e6102ce565b600160a060020a031633600160a060020a03161415156104ad57600080fd5b600160a060020a03811615156104c257600080fd5b7f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd96104eb6102ce565b82604051600160a060020a039283168152911660208201526040908101905180910390a161051881610611565b50565b600854600160a060020a038281169116141561053657600080fd5b6007828051610549929160200190610652565b506008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383169081179091557f8e05e0e35ff592971ca8b477d4285a33a61ded208d644042667b78693a472f5e8360405160208082528190810183818151815260200191508051906020019080838360005b838110156105d35780820151838201526020016105bb565b50505050905090810190601f1680156106005780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60206040519081016040526000815290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061069357805160ff19168380011785556106c0565b828001600101855582156106c0579182015b828111156106c05782518255916020019190600101906106a5565b506106cc9291506106d0565b5090565b6102cb91905b808211156106cc57600081556001016106d65600a165627a7a723058200994b54ebd0bcfda0849eaac9eeff9b1ce09db58d1ea1e2c64c6746a9a4e7a8c0029
Verified Source Code Full Match
Compiler: v0.4.18+commit.9cf6e910
Optimization: Yes (200 runs)
EternalStorageProxy.sol 13 lines
pragma solidity ^0.4.18;
import "./EternalStorage.sol";
import "./OwnedUpgradeabilityProxy.sol";
/**
* @title EternalStorageProxy
* @dev This proxy holds the storage of the token contract and delegates every call to the current implementation set.
* Besides, it allows to upgrade the token's behaviour towards further implementations, and provides basic
* authorization control functionalities
*/
contract EternalStorageProxy is EternalStorage, OwnedUpgradeabilityProxy {}
EternalStorage.sol 18 lines
pragma solidity >= 0.4.18 <= 0.8.0;
/**
* @title EternalStorage
* @dev This contract holds all the necessary state variables to carry out the storage of any contract.
*/
contract EternalStorage {
mapping(bytes32 => uint256) internal uintStorage;
mapping(bytes32 => string) internal stringStorage;
mapping(bytes32 => address) internal addressStorage;
mapping(bytes32 => bytes) internal bytesStorage;
mapping(bytes32 => bool) internal boolStorage;
mapping(bytes32 => int256) internal intStorage;
}
OwnedUpgradeabilityProxy.sol 72 lines
pragma solidity ^0.4.18;
import './UpgradeabilityProxy.sol';
import './UpgradeabilityOwnerStorage.sol';
/**
* @title OwnedUpgradeabilityProxy
* @dev This contract combines an upgradeability proxy with basic authorization control functionalities
*/
contract OwnedUpgradeabilityProxy is UpgradeabilityOwnerStorage, UpgradeabilityProxy {
/**
* @dev Event to show ownership has been transferred
* @param previousOwner representing the address of the previous owner
* @param newOwner representing the address of the new owner
*/
event ProxyOwnershipTransferred(address previousOwner, address newOwner);
/**
* @dev the constructor sets the original owner of the contract to the sender account.
*/
function OwnedUpgradeabilityProxy() public {
setUpgradeabilityOwner(msg.sender);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyProxyOwner() {
require(msg.sender == proxyOwner());
_;
}
/**
* @dev Tells the address of the proxy owner
* @return the address of the proxy owner
*/
function proxyOwner() public view returns (address) {
return upgradeabilityOwner();
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferProxyOwnership(address newOwner) public onlyProxyOwner {
require(newOwner != address(0));
ProxyOwnershipTransferred(proxyOwner(), newOwner);
setUpgradeabilityOwner(newOwner);
}
/**
* @dev Allows the upgradeability owner to upgrade the current version of the proxy.
* @param version representing the version name of the new implementation to be set.
* @param implementation representing the address of the new implementation to be set.
*/
function upgradeTo(string version, address implementation) public onlyProxyOwner {
_upgradeTo(version, implementation);
}
/**
* @dev Allows the upgradeability owner to upgrade the current version of the proxy and call the new implementation
* to initialize whatever is needed through a low level call.
* @param version representing the version name of the new implementation to be set.
* @param implementation representing the address of the new implementation to be set.
* @param data represents the msg.data to bet sent in the low level call. This parameter may include the function
* signature of the implementation to be called with the needed payload
*/
function upgradeToAndCall(string version, address implementation, bytes data) payable public onlyProxyOwner {
upgradeTo(version, implementation);
require(this.call.value(msg.value)(data));
}
}
UpgradeabilityProxy.sol 29 lines
pragma solidity ^0.4.18;
import './Proxy.sol';
import './UpgradeabilityStorage.sol';
/**
* @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 {
/**
* @dev This event will be emitted every time the implementation gets upgraded
* @param version representing the version name of the upgraded implementation
* @param implementation representing the address of the upgraded implementation
*/
event Upgraded(string version, address indexed implementation);
/**
* @dev Upgrades the implementation address
* @param version representing the version name of the new implementation to be set
* @param implementation representing the address of the new implementation to be set
*/
function _upgradeTo(string version, address implementation) internal {
require(_implementation != implementation);
_version = version;
_implementation = implementation;
Upgraded(version, implementation);
}
}
UpgradeabilityOwnerStorage.sol 26 lines
pragma solidity ^0.4.18;
/**
* @title UpgradeabilityOwnerStorage
* @dev This contract keeps track of the upgradeability owner
*/
contract UpgradeabilityOwnerStorage {
// Owner of the contract
address private _upgradeabilityOwner;
/**
* @dev Tells the address of the owner
* @return the address of the owner
*/
function upgradeabilityOwner() public view returns (address) {
return _upgradeabilityOwner;
}
/**
* @dev Sets the address of the owner
*/
function setUpgradeabilityOwner(address newUpgradeabilityOwner) internal {
_upgradeabilityOwner = newUpgradeabilityOwner;
}
}
Proxy.sol 35 lines
pragma solidity ^0.4.18;
/**
* @title Proxy
* @dev Gives the possibility to delegate any call to a foreign implementation.
*/
contract Proxy {
/**
* @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) }
}
}
}
UpgradeabilityStorage.sol 29 lines
pragma solidity ^0.4.18;
/**
* @title UpgradeabilityStorage
* @dev This contract holds all the necessary state variables to support the upgrade functionality
*/
contract UpgradeabilityStorage {
// Version name of the current implementation
string internal _version;
// Address of the current implementation
address internal _implementation;
/**
* @dev Tells the version name of the current implementation
* @return string representing the name of the current version
*/
function version() public view returns (string) {
return _version;
}
/**
* @dev Tells the address of the current implementation
* @return address of the current implementation
*/
function implementation() public view returns (address) {
return _implementation;
}
}
Read Contract
implementation 0x5c60da1b → address
proxyOwner 0x025313a2 → address
upgradeabilityOwner 0x6fde8202 → address
version 0x54fd4d50 → string
Write Contract 3 functions
These functions modify contract state and require a wallet transaction to execute.
transferProxyOwnership 0xf1739cae
address newOwner
upgradeTo 0x5a8b1a9f
string version
address implementation
upgradeToAndCall 0x958a41dd
string version
address implementation
bytes data
Recent Transactions
No transactions found for this address