Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0x294938EB354B30B9c237c9CDa8193dDFC5F38E2e
Balance 0.017000 ETH
Nonce 1
Code Size 1814 bytes
Indexed Transactions 0
External Etherscan · Sourcify

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