ETH Price: $3,100.63 (+3.86%)
Gas: 11 Gwei

Contract

0xC011A72400E58ecD99Ee497CF89E3775d4bd732F
 
Transaction Hash
Method
Block
From
To
Value
0xd09fe9e9c6ac30ffaab1b317cfd9361455c9e838c9d753a345db45c24462fbaeIssue Max Synths(pending)2024-04-19 6:53:231 hr ago1713509603IN
Synthetix: Legacy Proxy SNX
0 ETH(Pending)(Pending)
Transfer195161532024-03-26 4:10:5924 days ago1711426259IN
Synthetix: Legacy Proxy SNX
0 ETH0.0005327717.19911989
Transfer195161222024-03-26 4:04:4724 days ago1711425887IN
Synthetix: Legacy Proxy SNX
0 ETH0.0006351419.79064074
Transfer195160602024-03-26 3:52:1124 days ago1711425131IN
Synthetix: Legacy Proxy SNX
0 ETH0.0004834519.33831346
Transfer195159622024-03-26 3:32:1124 days ago1711423931IN
Synthetix: Legacy Proxy SNX
0 ETH0.0006649521.4659655
Transfer195159232024-03-26 3:24:2324 days ago1711423463IN
Synthetix: Legacy Proxy SNX
0 ETH0.0004916216.95272522
Transfer194292752024-03-13 23:02:5936 days ago1710370979IN
Synthetix: Legacy Proxy SNX
0 ETH0.001957860.9585574
Transfer189480862024-01-06 12:09:59103 days ago1704542999IN
Synthetix: Legacy Proxy SNX
0 ETH0.0006121619.06746521
Transfer189480502024-01-06 12:02:23103 days ago1704542543IN
Synthetix: Legacy Proxy SNX
0 ETH0.0005233916.30246334
Transfer189134202024-01-01 15:18:23108 days ago1704122303IN
Synthetix: Legacy Proxy SNX
0 ETH0.0005235416.30103767
Transfer188115312023-12-18 7:56:11123 days ago1702886171IN
Synthetix: Legacy Proxy SNX
0 ETH0.0013080340.7422728
Transfer187754472023-12-13 6:24:23128 days ago1702448663IN
Synthetix: Legacy Proxy SNX
0 ETH0.0014545245.28843137
Transfer176223732023-07-04 18:35:23289 days ago1688495723IN
Synthetix: Legacy Proxy SNX
0 ETH0.0028161787.7834099
Transfer175214792023-06-20 14:23:11303 days ago1687270991IN
Synthetix: Legacy Proxy SNX
0 ETH0.0006395319.92759418
Transfer175214562023-06-20 14:18:35303 days ago1687270715IN
Synthetix: Legacy Proxy SNX
0 ETH0.0006799721.19556597
Transfer174325382023-06-08 2:09:23316 days ago1686190163IN
Synthetix: Legacy Proxy SNX
0 ETH0.0008214225.58561731
Transfer172297622023-05-10 11:39:11344 days ago1683718751IN
Synthetix: Legacy Proxy SNX
0 ETH0.0021553967.26136516
Transfer170539032023-04-15 17:34:23369 days ago1681580063IN
Synthetix: Legacy Proxy SNX
0 ETH0.000853126.5922512
Transfer169856062023-04-05 22:48:47379 days ago1680734927IN
Synthetix: Legacy Proxy SNX
0 ETH0.0012692539.65314084
Transfer168515182023-03-18 1:55:59398 days ago1679104559IN
Synthetix: Legacy Proxy SNX
0 ETH0.0007572723.58739533
Transfer168514792023-03-18 1:47:59398 days ago1679104079IN
Synthetix: Legacy Proxy SNX
0 ETH0.0009476129.52726279
Transfer168475372023-03-17 12:29:23398 days ago1679056163IN
Synthetix: Legacy Proxy SNX
0 ETH0.0011391135.49421921
Transfer165144422023-01-29 19:04:11445 days ago1675019051IN
Synthetix: Legacy Proxy SNX
0 ETH0.0008668327
Transfer165138222023-01-29 16:59:23445 days ago1675011563IN
Synthetix: Legacy Proxy SNX
0 ETH0.0004815715
Transfer165134872023-01-29 15:52:11445 days ago1675007531IN
Synthetix: Legacy Proxy SNX
0 ETH0.0007384123
View all transactions

Latest 10 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
107179482020-08-23 17:29:411334 days ago1598203781
Synthetix: Legacy Proxy SNX
0.00256079 ETH
96328662020-03-08 20:09:481502 days ago1583698188
Synthetix: Legacy Proxy SNX
0.11475868 ETH
91672152019-12-26 19:32:311575 days ago1577388751
Synthetix: Legacy Proxy SNX
0.02538071 ETH
90893972019-12-11 15:25:121590 days ago1576077912
Synthetix: Legacy Proxy SNX
0.01845 ETH
87589242019-10-17 13:59:421645 days ago1571320782
Synthetix: Legacy Proxy SNX
0.0015 ETH
87271112019-10-12 13:56:591650 days ago1570888619
Synthetix: Legacy Proxy SNX
0.011 ETH
73116972019-03-05 21:22:041871 days ago1551820924
Synthetix: Legacy Proxy SNX
1.79 ETH
58694022018-06-28 13:57:292121 days ago1530194249
Synthetix: Legacy Proxy SNX
0.02 ETH
58657102018-06-27 22:28:262122 days ago1530138506
Synthetix: Legacy Proxy SNX
0.02 ETH
57695262018-06-11 9:37:272138 days ago1528709847
Synthetix: Legacy Proxy SNX
0.001 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Proxy

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

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

/* 
 * Havven Token Contract Proxy
 * ========================
 * 
 * This contract points to an underlying target which implements its
 * actual functionality, while allowing that functionality to be upgraded.
 */

pragma solidity 0.4.24;

/**
 * @title A contract with an owner.
 * @notice Contract ownership can be transferred by first nominating the new owner,
 * who must then accept the ownership, which prevents accidental incorrect ownership transfers.
 */
contract Owned {
    address public owner;
    address public nominatedOwner;

    /**
     * @dev Owned Constructor
     */
    constructor(address _owner)
        public
    {
        require(_owner != address(0));
        owner = _owner;
        emit OwnerChanged(address(0), _owner);
    }

    /**
     * @notice Nominate a new owner of this contract.
     * @dev Only the current owner may nominate a new owner.
     */
    function nominateNewOwner(address _owner)
        external
        onlyOwner
    {
        nominatedOwner = _owner;
        emit OwnerNominated(_owner);
    }

    /**
     * @notice Accept the nomination to be owner.
     */
    function acceptOwnership()
        external
    {
        require(msg.sender == nominatedOwner);
        emit OwnerChanged(owner, nominatedOwner);
        owner = nominatedOwner;
        nominatedOwner = address(0);
    }

    modifier onlyOwner
    {
        require(msg.sender == owner);
        _;
    }

    event OwnerNominated(address newOwner);
    event OwnerChanged(address oldOwner, address newOwner);
}

// This contract should be treated like an abstract contract
contract Proxyable is Owned {
    /* The proxy this contract exists behind. */
    Proxy public proxy;

    /* The caller of the proxy, passed through to this contract.
     * Note that every function using this member must apply the onlyProxy or
     * optionalProxy modifiers, otherwise their invocations can use stale values. */ 
    address messageSender; 

    constructor(address _proxy, address _owner)
        Owned(_owner)
        public
    {
        proxy = Proxy(_proxy);
        emit ProxyUpdated(_proxy);
    }

    function setProxy(address _proxy)
        external
        onlyOwner
    {
        proxy = Proxy(_proxy);
        emit ProxyUpdated(_proxy);
    }

    function setMessageSender(address sender)
        external
        onlyProxy
    {
        messageSender = sender;
    }

    modifier onlyProxy {
        require(Proxy(msg.sender) == proxy);
        _;
    }

    modifier optionalProxy
    {
        if (Proxy(msg.sender) != proxy) {
            messageSender = msg.sender;
        }
        _;
    }

    modifier optionalProxy_onlyOwner
    {
        if (Proxy(msg.sender) != proxy) {
            messageSender = msg.sender;
        }
        require(messageSender == owner);
        _;
    }

    event ProxyUpdated(address proxyAddress);
}

contract Proxy is Owned {

    Proxyable public target;
    bool public useDELEGATECALL;

    constructor(address _owner)
        Owned(_owner)
        public
    {}

    function setTarget(Proxyable _target)
        external
        onlyOwner
    {
        target = _target;
        emit TargetUpdated(_target);
    }

    function setUseDELEGATECALL(bool value) 
        external
        onlyOwner
    {
        useDELEGATECALL = value;
    }

    function _emit(bytes callData, uint numTopics,
                   bytes32 topic1, bytes32 topic2,
                   bytes32 topic3, bytes32 topic4)
        external
        onlyTarget
    {
        uint size = callData.length;
        bytes memory _callData = callData;

        assembly {
            /* The first 32 bytes of callData contain its length (as specified by the abi). 
             * Length is assumed to be a uint256 and therefore maximum of 32 bytes
             * in length. It is also leftpadded to be a multiple of 32 bytes.
             * This means moving call_data across 32 bytes guarantees we correctly access
             * the data itself. */
            switch numTopics
            case 0 {
                log0(add(_callData, 32), size)
            } 
            case 1 {
                log1(add(_callData, 32), size, topic1)
            }
            case 2 {
                log2(add(_callData, 32), size, topic1, topic2)
            }
            case 3 {
                log3(add(_callData, 32), size, topic1, topic2, topic3)
            }
            case 4 {
                log4(add(_callData, 32), size, topic1, topic2, topic3, topic4)
            }
        }
    }

    function()
        external
        payable
    {
        if (useDELEGATECALL) {
            assembly {
                /* Copy call data into free memory region. */
                let free_ptr := mload(0x40)
                calldatacopy(free_ptr, 0, calldatasize)

                /* Forward all gas and call data to the target contract. */
                let result := delegatecall(gas, sload(target_slot), free_ptr, calldatasize, 0, 0)
                returndatacopy(free_ptr, 0, returndatasize)

                /* Revert if the call failed, otherwise return the result. */
                if iszero(result) { revert(free_ptr, returndatasize) }
                return(free_ptr, returndatasize)
            }
        } else {
            /* Here we are as above, but must send the messageSender explicitly 
             * since we are using CALL rather than DELEGATECALL. */
            target.setMessageSender(msg.sender);
            assembly {
                let free_ptr := mload(0x40)
                calldatacopy(free_ptr, 0, calldatasize)

                /* We must explicitly forward ether to the underlying contract as well. */
                let result := call(gas, sload(target_slot), callvalue, free_ptr, calldatasize, 0, 0)
                returndatacopy(free_ptr, 0, returndatasize)

                if iszero(result) { revert(free_ptr, returndatasize) }
                return(free_ptr, returndatasize)
            }
        }
    }

    modifier onlyTarget {
        require(Proxyable(msg.sender) == target);
        _;
    }

    event TargetUpdated(Proxyable newTarget);
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nominatedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_target","type":"address"}],"name":"setTarget","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"callData","type":"bytes"},{"name":"numTopics","type":"uint256"},{"name":"topic1","type":"bytes32"},{"name":"topic2","type":"bytes32"},{"name":"topic3","type":"bytes32"},{"name":"topic4","type":"bytes32"}],"name":"_emit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"useDELEGATECALL","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"bool"}],"name":"setUseDELEGATECALL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"target","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newTarget","type":"address"}],"name":"TargetUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"oldOwner","type":"address"},{"indexed":false,"name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"}]

608060405234801561001057600080fd5b5060405160208061066b833981016040525180600160a060020a038116151561003857600080fd5b60008054600160a060020a031916600160a060020a038316908117825560408051928352602083019190915280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a150506105ca806100a16000396000f3006080604052600436106100985763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631627540c811461018357806353a47bb7146101a4578063776d1a01146101d557806379ba5097146101f65780638da5cb5b1461020b578063907dff971461022057806395578ebd14610250578063befff6af14610279578063d4b8399214610293575b60025474010000000000000000000000000000000000000000900460ff16156100e157604051366000823760008036836002545af43d6000833e8015156100dd573d82fd5b3d82f35b600254604080517fbc67f8320000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163bc67f8329160248082019260009290919082900301818387803b15801561014657600080fd5b505af115801561015a573d6000803e3d6000fd5b5050505060405136600082376000803683346002545af13d6000833e8015156100dd573d82fd5b005b34801561018f57600080fd5b50610181600160a060020a03600435166102a8565b3480156101b057600080fd5b506101b9610320565b60408051600160a060020a039092168252519081900360200190f35b3480156101e157600080fd5b50610181600160a060020a036004351661032f565b34801561020257600080fd5b506101816103a7565b34801561021757600080fd5b506101b961043e565b34801561022c57600080fd5b5061018160246004803582810192910135903560443560643560843560a43561044d565b34801561025c57600080fd5b50610265610517565b604080519115158252519081900360200190f35b34801561028557600080fd5b506101816004351515610538565b34801561029f57600080fd5b506101b961058f565b600054600160a060020a031633146102bf57600080fd5b60018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b600154600160a060020a031681565b600054600160a060020a0316331461034657600080fd5b60028054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e9181900360200190a150565b600154600160a060020a031633146103be57600080fd5b60005460015460408051600160a060020a03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a1600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b600054600160a060020a031681565b600254600090606090600160a060020a0316331461046a57600080fd5b604080516020601f8b01819004810282018101909252898152899350908a90849081908401838280828437820191505050505050905086600081146104ce57600181146104d957600281146104e557600381146104f257600481146105005761050b565b8260208301a061050b565b868360208401a161050b565b85878460208501a261050b565b8486888560208601a361050b565b838587898660208701a45b50505050505050505050565b60025474010000000000000000000000000000000000000000900460ff1681565b600054600160a060020a0316331461054f57600080fd5b60028054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b600254600160a060020a0316815600a165627a7a723058209e104efaf0a7b150d5357b3a38b0260a3741a240fef678863453d378cc0622b90029000000000000000000000000b12a54406840a7ddfa9246efb3bf4724bf55f5f8

Deployed Bytecode

0x6080604052600436106100985763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631627540c811461018357806353a47bb7146101a4578063776d1a01146101d557806379ba5097146101f65780638da5cb5b1461020b578063907dff971461022057806395578ebd14610250578063befff6af14610279578063d4b8399214610293575b60025474010000000000000000000000000000000000000000900460ff16156100e157604051366000823760008036836002545af43d6000833e8015156100dd573d82fd5b3d82f35b600254604080517fbc67f8320000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a039092169163bc67f8329160248082019260009290919082900301818387803b15801561014657600080fd5b505af115801561015a573d6000803e3d6000fd5b5050505060405136600082376000803683346002545af13d6000833e8015156100dd573d82fd5b005b34801561018f57600080fd5b50610181600160a060020a03600435166102a8565b3480156101b057600080fd5b506101b9610320565b60408051600160a060020a039092168252519081900360200190f35b3480156101e157600080fd5b50610181600160a060020a036004351661032f565b34801561020257600080fd5b506101816103a7565b34801561021757600080fd5b506101b961043e565b34801561022c57600080fd5b5061018160246004803582810192910135903560443560643560843560a43561044d565b34801561025c57600080fd5b50610265610517565b604080519115158252519081900360200190f35b34801561028557600080fd5b506101816004351515610538565b34801561029f57600080fd5b506101b961058f565b600054600160a060020a031633146102bf57600080fd5b60018054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229181900360200190a150565b600154600160a060020a031681565b600054600160a060020a0316331461034657600080fd5b60028054600160a060020a03831673ffffffffffffffffffffffffffffffffffffffff19909116811790915560408051918252517f814250a3b8c79fcbe2ead2c131c952a278491c8f4322a79fe84b5040a810373e9181900360200190a150565b600154600160a060020a031633146103be57600080fd5b60005460015460408051600160a060020a03938416815292909116602083015280517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c9281900390910190a1600180546000805473ffffffffffffffffffffffffffffffffffffffff19908116600160a060020a03841617909155169055565b600054600160a060020a031681565b600254600090606090600160a060020a0316331461046a57600080fd5b604080516020601f8b01819004810282018101909252898152899350908a90849081908401838280828437820191505050505050905086600081146104ce57600181146104d957600281146104e557600381146104f257600481146105005761050b565b8260208301a061050b565b868360208401a161050b565b85878460208501a261050b565b8486888560208601a361050b565b838587898660208701a45b50505050505050505050565b60025474010000000000000000000000000000000000000000900460ff1681565b600054600160a060020a0316331461054f57600080fd5b60028054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b600254600160a060020a0316815600a165627a7a723058209e104efaf0a7b150d5357b3a38b0260a3741a240fef678863453d378cc0622b90029

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

000000000000000000000000b12a54406840a7ddfa9246efb3bf4724bf55f5f8

-----Decoded View---------------
Arg [0] : _owner (address): 0xB12a54406840a7DDfa9246EfB3bF4724bF55f5f8

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000b12a54406840a7ddfa9246efb3bf4724bf55f5f8


Swarm Source

bzzr://9e104efaf0a7b150d5357b3a38b0260a3741a240fef678863453d378cc0622b9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

The legacy proxy token contract for Synthetix SNX token.

MORE INFORMATION

Synthetix Network Token proxy contract.
A proxy contract that, if it does not recognise the function being called on it, passes all value and call data to an underlying target contract.

This proxy has the capacity to toggle between DELEGATECALL and CALL style proxy functionality.

The former executes in the proxy's context, and so will preserve msg.sender and store data at the proxy address. The latter will not.
Therefore, any contract the proxy wraps in the CALL style must implement the Proxyable interface, in order that it can pass msg.sender into the underlying contract as the state parameter, messageSender.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ 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.