ETH Price: $2,393.27 (-4.46%)

Contract

0x406a112f3218b988c66778Fd72fc8467f2601366
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Service URI157868052022-10-20 4:05:23685 days ago1666238723IN
Livepeer: Proxy Service Registry
0 ETH0.0010410117.52641411
Set Service URI157303992022-10-12 7:00:11693 days ago1665558011IN
Livepeer: Proxy Service Registry
0 ETH0.0010407917.54045875
Set Service URI153983892022-08-23 19:02:02742 days ago1661281322IN
Livepeer: Proxy Service Registry
0 ETH0.0008753314.74699288
Set Service URI142272592022-02-18 1:53:21929 days ago1645149201IN
Livepeer: Proxy Service Registry
0 ETH0.002151948.3292381
Set Service URI142027692022-02-14 6:58:13933 days ago1644821893IN
Livepeer: Proxy Service Registry
0 ETH0.0030036234.55263002
Set Service URI142027512022-02-14 6:55:02933 days ago1644821702IN
Livepeer: Proxy Service Registry
0 ETH0.0014654134.25873201
Set Service URI141903742022-02-12 9:21:25935 days ago1644657685IN
Livepeer: Proxy Service Registry
0 ETH0.0020854346.79433451
Set Service URI141903532022-02-12 9:16:26935 days ago1644657386IN
Livepeer: Proxy Service Registry
0 ETH0.0021262747.77503267
Set Service URI141903502022-02-12 9:15:54935 days ago1644657354IN
Livepeer: Proxy Service Registry
0 ETH0.0022852951.3711432
Set Service URI141819222022-02-11 1:51:39936 days ago1644544299IN
Livepeer: Proxy Service Registry
0 ETH0.0047915580.66997542
Set Service URI141792452022-02-10 15:54:29936 days ago1644508469IN
Livepeer: Proxy Service Registry
0 ETH0.00730667113.1431874
Set Service URI141738412022-02-09 19:48:34937 days ago1644436114IN
Livepeer: Proxy Service Registry
0 ETH0.00779224175.08293808
Set Service URI141737152022-02-09 19:18:39937 days ago1644434319IN
Livepeer: Proxy Service Registry
0 ETH0.0041407393.0795834
Set Service URI141726792022-02-09 15:25:05937 days ago1644420305IN
Livepeer: Proxy Service Registry
0 ETH0.00510254114.59704658
Set Service URI141683982022-02-08 23:29:12938 days ago1644362952IN
Livepeer: Proxy Service Registry
0 ETH0.01000033115.01382134
Set Service URI141648572022-02-08 10:18:37939 days ago1644315517IN
Livepeer: Proxy Service Registry
0 ETH0.0029207265.56645436
Set Service URI141638592022-02-08 6:38:53939 days ago1644302333IN
Livepeer: Proxy Service Registry
0 ETH0.00438716102.56365868
Set Service URI141508602022-02-06 6:31:11941 days ago1644129071IN
Livepeer: Proxy Service Registry
0 ETH0.0027409546.17751944
Set Service URI141381742022-02-04 7:28:03943 days ago1643959683IN
Livepeer: Proxy Service Registry
0 ETH0.0031404970.62688598
Set Service URI141335712022-02-03 14:34:19943 days ago1643898859IN
Livepeer: Proxy Service Registry
0 ETH0.00971361111.76769114
Set Service URI141297472022-02-03 0:06:22944 days ago1643846782IN
Livepeer: Proxy Service Registry
0 ETH0.00628523141.03211335
Set Service URI141039442022-01-30 0:42:00948 days ago1643503320IN
Livepeer: Proxy Service Registry
0 ETH0.00516548116.11494421
Set Service URI140845052022-01-27 0:38:52951 days ago1643243932IN
Livepeer: Proxy Service Registry
0 ETH0.01209381139.05893904
Set Service URI140759252022-01-25 16:50:15952 days ago1643129415IN
Livepeer: Proxy Service Registry
0 ETH0.00739477166.07765428
Set Service URI140704102022-01-24 20:15:40953 days ago1643055340IN
Livepeer: Proxy Service Registry
0 ETH0.00777026130.86313579
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ManagerProxy

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-08-22
*/

pragma solidity 0.4.18;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
}

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    Unpause();
  }
}

contract IController is Pausable {
    event SetContractInfo(bytes32 id, address contractAddress, bytes20 gitCommitHash);

    function setContractInfo(bytes32 _id, address _contractAddress, bytes20 _gitCommitHash) external;
    function updateController(bytes32 _id, address _controller) external;
    function getContract(bytes32 _id) public view returns (address);
}

contract IManager {
    event SetController(address controller);
    event ParameterUpdate(string param);

    function setController(address _controller) external;
}

contract Manager is IManager {
    // Controller that contract is registered with
    IController public controller;

    // Check if sender is controller
    modifier onlyController() {
        require(msg.sender == address(controller));
        _;
    }

    // Check if sender is controller owner
    modifier onlyControllerOwner() {
        require(msg.sender == controller.owner());
        _;
    }

    // Check if controller is not paused
    modifier whenSystemNotPaused() {
        require(!controller.paused());
        _;
    }

    // Check if controller is paused
    modifier whenSystemPaused() {
        require(controller.paused());
        _;
    }

    function Manager(address _controller) public {
        controller = IController(_controller);
    }

    /*
     * @dev Set controller. Only callable by current controller
     * @param _controller Controller contract address
     */
    function setController(address _controller) external onlyController {
        controller = IController(_controller);

        SetController(_controller);
    }
}

/**
 * @title ManagerProxyTarget
 * @dev The base contract that target contracts used by a proxy contract should inherit from
 * Note: Both the target contract and the proxy contract (implemented as ManagerProxy) MUST inherit from ManagerProxyTarget in order to guarantee
 * that both contracts have the same storage layout. Differing storage layouts in a proxy contract and target contract can
 * potentially break the delegate proxy upgradeability mechanism
 */
contract ManagerProxyTarget is Manager {
    // Used to look up target contract address in controller's registry
    bytes32 public targetContractId;
}

/**
 * @title ManagerProxy
 * @dev A proxy contract that uses delegatecall to execute function calls on a target contract using its own storage context.
 * The target contract is a Manager contract that is registered with the Controller.
 * Note: Both this proxy contract and its target contract MUST inherit from ManagerProxyTarget in order to guarantee
 * that both contracts have the same storage layout. Differing storage layouts in a proxy contract and target contract can
 * potentially break the delegate proxy upgradeability mechanism
 */
contract ManagerProxy is ManagerProxyTarget {
    /**
     * @dev ManagerProxy constructor. Invokes constructor of base Manager contract with provided Controller address.
     * Also, sets the contract ID of the target contract that function calls will be executed on.
     * @param _controller Address of Controller that this contract will be registered with
     * @param _targetContractId contract ID of the target contract
     */
    function ManagerProxy(address _controller, bytes32 _targetContractId) public Manager(_controller) {
        targetContractId = _targetContractId;
    }

    /**
     * @dev Uses delegatecall to execute function calls on this proxy contract's target contract using its own storage context.
     * This fallback function will look up the address of the target contract using the Controller and the target contract ID.
     * It will then use the calldata for a function call as the data payload for a delegatecall on the target contract. The return value
     * of the executed function call will also be returned
     */
    function() public payable {
        address target = controller.getContract(targetContractId);
        // Target contract must be registered
        require(target > 0);

        assembly {
            // Solidity keeps a free memory pointer at position 0x40 in memory
            let freeMemoryPtrPosition := 0x40
            // Load the free memory pointer
            let calldataMemoryOffset := mload(freeMemoryPtrPosition)
            // Update free memory pointer to after memory space we reserve for calldata
            mstore(freeMemoryPtrPosition, add(calldataMemoryOffset, calldatasize))
            // Copy calldata (method signature and params of the call) to memory
            calldatacopy(calldataMemoryOffset, 0x0, calldatasize)

            // Call method on target contract using calldata which is loaded into memory
            let ret := delegatecall(gas, target, calldataMemoryOffset, calldatasize, 0, 0)

            // Load the free memory pointer
            let returndataMemoryOffset := mload(freeMemoryPtrPosition)
            // Update free memory pointer to after memory space we reserve for returndata
            mstore(freeMemoryPtrPosition, add(returndataMemoryOffset, returndatasize))
            // Copy returndata (result of the method invoked by the delegatecall) to memory
            returndatacopy(returndataMemoryOffset, 0x0, returndatasize)

            switch ret
            case 0 {
                // Method call failed - revert
                // Return any error message stored in mem[returndataMemoryOffset..(returndataMemoryOffset + returndatasize)]
                revert(returndataMemoryOffset, returndatasize)
            } default {
                // Return result of method call stored in mem[returndataMemoryOffset..(returndataMemoryOffset + returndatasize)]
                return(returndataMemoryOffset, returndatasize)
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"targetContractId","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_controller","type":"address"},{"name":"_targetContractId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"controller","type":"address"}],"name":"SetController","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"param","type":"string"}],"name":"ParameterUpdate","type":"event"}]

6060604052341561000f57600080fd5b6040516040806102c1833981016040528080519190602001805160008054600160a060020a03909516600160a060020a03199095169490941790935550506001556102628061005f6000396000f3006060604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166351720b41811461012957806392eefe9b1461014e578063f77c47911461016f575b60008054600154600160a060020a039091169063e16c7d989083604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b15156100c657600080fd5b6102c65a03f115156100d757600080fd5b50505060405180519150506000600160a060020a038216116100f857600080fd5b60408051368101825236600082376000803683865af482513d810184523d6000823e818015610125573d82f35b3d82fd5b341561013457600080fd5b61013c61019e565b60405190815260200160405180910390f35b341561015957600080fd5b61016d600160a060020a03600435166101a4565b005b341561017a57600080fd5b610182610227565b604051600160a060020a03909116815260200160405180910390f35b60015481565b60005433600160a060020a039081169116146101bf57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790557f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f7081604051600160a060020a03909116815260200160405180910390a150565b600054600160a060020a0316815600a165627a7a7230582068a9b6028b9efa42cdc837db1b6d1cd0868954328ea40d6a67a76b72c0f8feb80029000000000000000000000000f96d54e490317c557a967abfa5d6e33006be69b3a65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564

Deployed Bytecode

0x6060604052600436106100565763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166351720b41811461012957806392eefe9b1461014e578063f77c47911461016f575b60008054600154600160a060020a039091169063e16c7d989083604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff84160281526004810191909152602401602060405180830381600087803b15156100c657600080fd5b6102c65a03f115156100d757600080fd5b50505060405180519150506000600160a060020a038216116100f857600080fd5b60408051368101825236600082376000803683865af482513d810184523d6000823e818015610125573d82f35b3d82fd5b341561013457600080fd5b61013c61019e565b60405190815260200160405180910390f35b341561015957600080fd5b61016d600160a060020a03600435166101a4565b005b341561017a57600080fd5b610182610227565b604051600160a060020a03909116815260200160405180910390f35b60015481565b60005433600160a060020a039081169116146101bf57600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790557f4ff638452bbf33c012645d18ae6f05515ff5f2d1dfb0cece8cbf018c60903f7081604051600160a060020a03909116815260200160405180910390a150565b600054600160a060020a0316815600a165627a7a7230582068a9b6028b9efa42cdc837db1b6d1cd0868954328ea40d6a67a76b72c0f8feb80029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000f96d54e490317c557a967abfa5d6e33006be69b3a65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564

-----Decoded View---------------
Arg [0] : _controller (address): 0xF96D54E490317c557A967ABfA5d6e33006BE69b3
Arg [1] : _targetContractId (bytes32): 0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f96d54e490317c557a967abfa5d6e33006be69b3
Arg [1] : a65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564


Swarm Source

bzzr://68a9b6028b9efa42cdc837db1b6d1cd0868954328ea40d6a67a76b72c0f8feb8

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.