ETH Price: $2,100.00 (+2.90%)

Contract

0xa8a3c86c4A2DcCf350E84D2b3c46BDeBc711C16e
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add New Proxy245722712026-03-02 20:52:4710 days ago1772484767IN
0xa8a3c86c...Bc711C16e
0 ETH0.000082190.13273641
Add New Proxy244151492026-02-08 22:50:4732 days ago1770591047IN
0xa8a3c86c...Bc711C16e
0 ETH0.000032960.05324049
Add New Proxy243212112026-01-26 19:52:4745 days ago1769457167IN
0xa8a3c86c...Bc711C16e
0 ETH0.001588742.56567655
Add New Proxy243159162026-01-26 2:08:4746 days ago1769393327IN
0xa8a3c86c...Bc711C16e
0 ETH0.00157622.54541654
Add New Proxy241201312025-12-29 18:36:3573 days ago1767033395IN
0xa8a3c86c...Bc711C16e
0 ETH0.000056960.09199321
Add New Proxy240896822025-12-25 12:37:1177 days ago1766666231IN
0xa8a3c86c...Bc711C16e
0 ETH0.000027430.04431223
Add New Proxy240756262025-12-23 13:31:2379 days ago1766496683IN
0xa8a3c86c...Bc711C16e
0 ETH0.001571552.53791179
Add New Proxy239479112025-12-05 16:24:1197 days ago1764951851IN
0xa8a3c86c...Bc711C16e
0 ETH0.000118880.1919931
Add New Proxy238505882025-11-21 23:17:59111 days ago1763767079IN
0xa8a3c86c...Bc711C16e
0 ETH0.000171860.2775503
Add New Proxy235712592025-10-13 20:45:47150 days ago1760388347IN
0xa8a3c86c...Bc711C16e
0 ETH0.000798351.32587588
Add New Proxy235662832025-10-13 4:01:47151 days ago1760328107IN
0xa8a3c86c...Bc711C16e
0 ETH0.001608792.67183265
Add New Proxy235662372025-10-13 3:52:35151 days ago1760327555IN
0xa8a3c86c...Bc711C16e
0 ETH0.001618032.61296952
Add New Proxy235159602025-10-06 3:11:11158 days ago1759720271IN
0xa8a3c86c...Bc711C16e
0 ETH0.000064560.10427337
Add New Proxy235094622025-10-05 5:24:59159 days ago1759641899IN
0xa8a3c86c...Bc711C16e
0 ETH0.000078370.12656362
Add New Proxy234051902025-09-20 15:32:35173 days ago1758382355IN
0xa8a3c86c...Bc711C16e
0 ETH0.000202450.33622898
Add New Proxy233496202025-09-12 21:17:59181 days ago1757711879IN
0xa8a3c86c...Bc711C16e
0 ETH0.00078221.26318111
Add New Proxy232136692025-08-24 21:34:23200 days ago1756071263IN
0xa8a3c86c...Bc711C16e
0 ETH0.000210310.33963884
Add New Proxy231951432025-08-22 7:32:59202 days ago1755847979IN
0xa8a3c86c...Bc711C16e
0 ETH0.000715971.15623815
Add New Proxy231457102025-08-15 10:02:59209 days ago1755252179IN
0xa8a3c86c...Bc711C16e
0 ETH0.000428010.71082717
Add New Proxy231457062025-08-15 10:02:11209 days ago1755252131IN
0xa8a3c86c...Bc711C16e
0 ETH0.000472340.76278662
Add New Proxy231078842025-08-10 3:09:59215 days ago1754795399IN
0xa8a3c86c...Bc711C16e
0 ETH0.000334380.54
Add New Proxy230191992025-07-28 17:41:35227 days ago1753724495IN
0xa8a3c86c...Bc711C16e
0 ETH0.001984913.20545397
Add New Proxy229766182025-07-22 18:51:35233 days ago1753210295IN
0xa8a3c86c...Bc711C16e
0 ETH0.000681151.1
Add New Proxy229641372025-07-21 0:58:47235 days ago1753059527IN
0xa8a3c86c...Bc711C16e
0 ETH0.001915343.09309813
Add New Proxy229337412025-07-16 19:07:59239 days ago1752692879IN
0xa8a3c86c...Bc711C16e
0 ETH0.0067966510.97596719
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LSVProxyRegistry

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-08-25
*/

// SPDX-License-Identifier: MIT

pragma solidity =0.8.10;





contract MainnetActionsUtilAddresses {
    address internal constant DFS_REG_CONTROLLER_ADDR = 0xF8f8B3C98Cf2E63Df3041b73f80F362a4cf3A576;
    address internal constant REGISTRY_ADDR = 0x287778F121F134C66212FB16c9b53eC991D32f5b;
    address internal constant DFS_LOGGER_ADDR = 0xcE7a977Cac4a481bc84AC06b2Da0df614e621cf3;
    address internal constant SUB_STORAGE_ADDR = 0x1612fc28Ee0AB882eC99842Cde0Fc77ff0691e90;
    address internal constant PROXY_AUTH_ADDR = 0x149667b6FAe2c63D1B4317C716b0D0e4d3E2bD70;
    address internal constant LSV_PROXY_REGISTRY_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address internal constant TRANSIENT_STORAGE = 0x2F7Ef2ea5E8c97B8687CA703A0e50Aa5a49B7eb2;
}





contract ActionsUtilHelper is MainnetActionsUtilAddresses {
}





contract MainnetAuthAddresses {
    address internal constant ADMIN_VAULT_ADDR = 0xCCf3d848e08b94478Ed8f46fFead3008faF581fD;
    address internal constant FACTORY_ADDRESS = 0x5a15566417e6C1c9546523066500bDDBc53F88C7;
    address internal constant ADMIN_ADDR = 0x25eFA336886C74eA8E282ac466BdCd0199f85BB9; // USED IN ADMIN VAULT CONSTRUCTOR
}





contract AuthHelper is MainnetAuthAddresses {
}





contract AdminVault is AuthHelper {
    address public owner;
    address public admin;

    error SenderNotAdmin();

    constructor() {
        owner = msg.sender;
        admin = ADMIN_ADDR;
    }

    /// @notice Admin is able to change owner
    /// @param _owner Address of new owner
    function changeOwner(address _owner) public {
        if (admin != msg.sender){
            revert SenderNotAdmin();
        }
        owner = _owner;
    }

    /// @notice Admin is able to set new admin
    /// @param _admin Address of multisig that becomes new admin
    function changeAdmin(address _admin) public {
        if (admin != msg.sender){
            revert SenderNotAdmin();
        }
        admin = _admin;
    }

}





interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint256 digits);
    function totalSupply() external view returns (uint256 supply);

    function balanceOf(address _owner) external view returns (uint256 balance);

    function transfer(address _to, uint256 _value) external returns (bool success);

    function transferFrom(
        address _from,
        address _to,
        uint256 _value
    ) external returns (bool success);

    function approve(address _spender, uint256 _value) external returns (bool success);

    function allowance(address _owner, address _spender) external view returns (uint256 remaining);

    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}





library Address {
    //insufficient balance
    error InsufficientBalance(uint256 available, uint256 required);
    //unable to send value, recipient may have reverted
    error SendingValueFail();
    //insufficient balance for call
    error InsufficientBalanceForCall(uint256 available, uint256 required);
    //call to non-contract
    error NonContractCall();
    
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        uint256 balance = address(this).balance;
        if (balance < amount){
            revert InsufficientBalance(balance, amount);
        }

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        if (!(success)){
            revert SendingValueFail();
        }
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        uint256 balance = address(this).balance;
        if (balance < value){
            revert InsufficientBalanceForCall(balance, value);
        }
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        if (!(isContract(target))){
            revert NonContractCall();
        }

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}




library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}







library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    /// @dev Edited so it always first approves 0 and then the value, because of non standard tokens
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, newAllowance)
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(
            value,
            "SafeERC20: decreased allowance below zero"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, newAllowance)
        );
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}







contract AdminAuth is AuthHelper {
    using SafeERC20 for IERC20;

    AdminVault public constant adminVault = AdminVault(ADMIN_VAULT_ADDR);

    error SenderNotOwner();
    error SenderNotAdmin();

    modifier onlyOwner() {
        if (adminVault.owner() != msg.sender){
            revert SenderNotOwner();
        }
        _;
    }

    modifier onlyAdmin() {
        if (adminVault.admin() != msg.sender){
            revert SenderNotAdmin();
        }
        _;
    }

    /// @notice withdraw stuck funds
    function withdrawStuckFunds(address _token, address _receiver, uint256 _amount) public onlyOwner {
        if (_token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) {
            payable(_receiver).transfer(_amount);
        } else {
            IERC20(_token).safeTransfer(_receiver, _amount);
        }
    }

    /// @notice Destroy the contract
    function kill() public onlyAdmin {
        selfdestruct(payable(msg.sender));
    }
}





abstract contract DSAuthority {
    function canCall(
        address src,
        address dst,
        bytes4 sig
    ) public view virtual returns (bool);
}





contract DSAuthEvents {
    event LogSetAuthority(address indexed authority);
    event LogSetOwner(address indexed owner);
}

contract DSAuth is DSAuthEvents {
    DSAuthority public authority;
    address public owner;

    constructor() {
        owner = msg.sender;
        emit LogSetOwner(msg.sender);
    }

    function setOwner(address owner_) public auth {
        owner = owner_;
        emit LogSetOwner(owner);
    }

    function setAuthority(DSAuthority authority_) public auth {
        authority = authority_;
        emit LogSetAuthority(address(authority));
    }

    modifier auth {
        require(isAuthorized(msg.sender, msg.sig), "Not authorized");
        _;
    }

    function isAuthorized(address src, bytes4 sig) internal view returns (bool) {
        if (src == address(this)) {
            return true;
        } else if (src == owner) {
            return true;
        } else if (authority == DSAuthority(address(0))) {
            return false;
        } else {
            return authority.canCall(src, address(this), sig);
        }
    }
}





contract DSNote {
    event LogNote(
        bytes4 indexed sig,
        address indexed guy,
        bytes32 indexed foo,
        bytes32 indexed bar,
        uint256 wad,
        bytes fax
    ) anonymous;

    modifier note {
        bytes32 foo;
        bytes32 bar;

        assembly {
            foo := calldataload(4)
            bar := calldataload(36)
        }

        emit LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data);

        _;
    }
}






abstract contract DSProxy is DSAuth, DSNote {
    DSProxyCache public cache; // global cache for contracts

    constructor(address _cacheAddr) {
        if (!(setCache(_cacheAddr))){
            require(isAuthorized(msg.sender, msg.sig), "Not authorized");
        }
    }

    // solhint-disable-next-line no-empty-blocks
    receive() external payable {}

    // use the proxy to execute calldata _data on contract _code
    function execute(bytes memory _code, bytes memory _data)
        public
        payable
        virtual
        returns (address target, bytes32 response);

    function execute(address _target, bytes memory _data)
        public
        payable
        virtual
        returns (bytes32 response);

    //set new cache
    function setCache(address _cacheAddr) public payable virtual returns (bool);
}

contract DSProxyCache {
    mapping(bytes32 => address) cache;

    function read(bytes memory _code) public view returns (address) {
        bytes32 hash = keccak256(_code);
        return cache[hash];
    }

    function write(bytes memory _code) public returns (address target) {
        assembly {
            target := create(0, add(_code, 0x20), mload(_code))
            switch iszero(extcodesize(target))
                case 1 {
                    // throw if contract failed to deploy
                    revert(0, 0)
                }
        }
        bytes32 hash = keccak256(_code);
        cache[hash] = target;
    }
}





abstract contract DSProxyFactoryInterface {
    function build(address owner) public virtual returns (DSProxy proxy);
    function build() public virtual returns (DSProxy proxy);
}





contract MainnetUtilAddresses {
    address internal refillCaller = 0x33fDb79aFB4456B604f376A45A546e7ae700e880;
    address internal feeAddr = 0x76720aC2574631530eC8163e4085d6F98513fb27;

    address internal constant BOT_REGISTRY_ADDRESS = 0x637726f8b08a7ABE3aE3aCaB01A80E2d8ddeF77B;
    address internal constant UNI_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address internal constant MKR_PROXY_REGISTRY = 0x4678f0a6958e4D2Bc4F1BAF7Bc52E8F3564f3fE4;
    address internal constant AAVE_MARKET = 0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5;

    address internal constant PROXY_FACTORY_ADDR = 0xA26e15C895EFc0616177B7c1e7270A4C7D51C997;
    address internal constant DFS_PROXY_REGISTRY_ADDR = 0x29474FdaC7142f9aB7773B8e38264FA15E3805ed;

    address internal constant WETH_ADDR = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address internal constant ETH_ADDR = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address internal constant WSTETH_ADDR = 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0;
    address internal constant STETH_ADDR = 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84;
    address internal constant WBTC_ADDR = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;
    address internal constant CHAINLINK_WBTC_ADDR = 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB;
    address internal constant DAI_ADDR = 0x6B175474E89094C44Da98b954EedeAC495271d0F;

    address internal constant FEE_RECEIVER_ADMIN_ADDR = 0xA74e9791D7D66c6a14B2C571BdA0F2A1f6D64E06;

    address internal constant UNI_V3_ROUTER = 0xE592427A0AEce92De3Edee1F18E0157C05861564;
    address internal constant UNI_V3_QUOTER = 0xb27308f9F90D607463bb33eA1BeBb41C27CE5AB6;

    address internal constant FEE_RECIPIENT = 0x39C4a92Dc506300c3Ea4c67ca4CA611102ee6F2A;

    // not needed on mainnet
    address internal constant DEFAULT_BOT = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;

    address public constant CHAINLINK_FEED_REGISTRY = 0x47Fb2585D2C56Fe188D0E6ec628a38b74fCeeeDf;
}





contract UtilHelper is MainnetUtilAddresses{
}








contract LSVProxyRegistry is AdminAuth, UtilHelper, ActionsUtilHelper {

    /// @dev List of proxies a user owns
    mapping(address => address[]) public proxies;

    /// @dev List of prebuilt proxies the users can claim to save gas
    address[] public proxyPool;

    event NewProxy(address, address);
    event ChangedOwner(address oldOwner, address newOwner, address proxy);

    /// @notice User calls from EOA to build a new LSV registered proxy
    function addNewProxy() public returns (address) {
        address newProxy = getFromPoolOrBuild(msg.sender);
        proxies[msg.sender].push(newProxy);

        emit NewProxy(msg.sender, newProxy);

        return newProxy;
    }

    function updateRegistry(address _proxyAddr, address _oldOwner, uint256 _indexNumInOldOwnerProxiesArr) public {
        // check if msg.sender is the owner of proxy in question
        require(DSProxy(payable(_proxyAddr)).owner() == msg.sender);

        // check if oldOwner really was the owner of proxy in question
        require(proxies[_oldOwner][_indexNumInOldOwnerProxiesArr] == _proxyAddr);

        // remove proxy from oldOwners proxies
        uint256 oldOwnersProxyCount = proxies[_oldOwner].length;
        if (oldOwnersProxyCount > 1 && _indexNumInOldOwnerProxiesArr < (oldOwnersProxyCount - 1))  {
            proxies[_oldOwner][_indexNumInOldOwnerProxiesArr] = proxies[_oldOwner][oldOwnersProxyCount - 1];
        }
        proxies[_oldOwner].pop();

        // add proxy to msg.sender proxies
        proxies[msg.sender].push(_proxyAddr);
    }

    /// @notice Adds proxies to pool for users to later claim and save on gas
    function addToPool(uint256 _numNewProxies) public {
        for (uint256 i = 0; i < _numNewProxies; ++i) {
            DSProxy newProxy = DSProxyFactoryInterface(PROXY_FACTORY_ADDR).build();
            proxyPool.push(address(newProxy));
        }
    }

    /// @notice helper function to get all users proxies
    function getProxies(address _user) public view returns (address[] memory){
        address[] memory resultProxies = new address[](proxies[_user].length);
        for (uint256 i = 0; i < proxies[_user].length; i++){
            resultProxies[i] = proxies[_user][i];
        }
        return resultProxies;
    }
    
    /// @notice helper function to check how many proxies are there in the proxy pool for cheaper user onboarding
    function getProxyPoolCount() public view returns (uint256) {
        return proxyPool.length;
    }

    /// @notice Create a new DSProxy or grabs a prebuilt one
    function getFromPoolOrBuild(address _user) internal returns (address) {
        if (proxyPool.length > 0) {
            address newProxy = proxyPool[proxyPool.length - 1];
            proxyPool.pop();
            
            DSAuth(newProxy).setOwner(_user);
            return newProxy;
        } else {
            DSProxy newProxy = DSProxyFactoryInterface(PROXY_FACTORY_ADDR).build(_user);
            return address(newProxy);
        }
    }
    
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"name":"NonContractCall","type":"error"},{"inputs":[],"name":"SenderNotAdmin","type":"error"},{"inputs":[],"name":"SenderNotOwner","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"},{"indexed":false,"internalType":"address","name":"proxy","type":"address"}],"name":"ChangedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"NewProxy","type":"event"},{"inputs":[],"name":"CHAINLINK_FEED_REGISTRY","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addNewProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numNewProxies","type":"uint256"}],"name":"addToPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminVault","outputs":[{"internalType":"contract AdminVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getProxies","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProxyPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kill","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"proxies","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proxyPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_proxyAddr","type":"address"},{"internalType":"address","name":"_oldOwner","type":"address"},{"internalType":"uint256","name":"_indexNumInOldOwnerProxiesArr","type":"uint256"}],"name":"updateRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStuckFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600080546001600160a01b03199081167333fdb79afb4456b604f376a45a546e7ae700e88017909155600180549091167376720ac2574631530ec8163e4085d6f98513fb2717905534801561005857600080fd5b506112d3806100686000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063632e6e3211610081578063ac890c4e1161005b578063ac890c4e14610199578063c579d490146101aa578063dfc0c754146101bd57600080fd5b8063632e6e32146101435780637d9f7712146101635780638cedca711461017e57600080fd5b806341c0e1b5116100b257806341c0e1b514610115578063438aacf21461011d5780635dcf7c8c1461013057600080fd5b80631c5fc483146100ce578063214f403f146100e3575b600080fd5b6100e16100dc366004610f97565b6101d0565b005b6100eb6102ec565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e1610399565b6100eb61012b366004610f97565b610483565b6100eb61013e366004610fd5565b6104ba565b610156610151366004611001565b6104ff565b60405161010c919061101e565b6100eb7347fb2585d2c56fe188d0e6ec628a38b74fceeedf81565b6100eb73ccf3d848e08b94478ed8f46ffead3008faf581fd81565b60035460405190815260200161010c565b6100e16101b8366004611078565b61064f565b6100e16101cb366004611078565b6107d7565b60005b818110156102e857600073a26e15c895efc0616177b7c1e7270a4c7d51c99773ffffffffffffffffffffffffffffffffffffffff16638e1a55fc6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561023e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026291906110b9565b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506102e181611105565b90506101d3565b5050565b6000806102f833610ad4565b33600081815260026020908152604080832080546001810182559084529282902090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301529192507fa94ca626c15b5acbc6f820b88b794bce0d7a9198f2ed3e248aa0a362e2bdd60b910160405180910390a1919050565b3373ffffffffffffffffffffffffffffffffffffffff1673ccf3d848e08b94478ed8f46ffead3008faf581fd73ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561040f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043391906110b9565b73ffffffffffffffffffffffffffffffffffffffff1614610480576040517fa6c827a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b6003818154811061049357600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600260205281600052604060002081815481106104d657600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260205260408120546060919067ffffffffffffffff8111156105415761054161113e565b60405190808252806020026020018201604052801561056a578160200160208202803683370190505b50905060005b73ffffffffffffffffffffffffffffffffffffffff84166000908152600260205260409020548110156106485773ffffffffffffffffffffffffffffffffffffffff841660009081526002602052604090208054829081106105d4576105d461116d565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106106115761061161116d565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101528061064081611105565b915050610570565b5092915050565b3373ffffffffffffffffffffffffffffffffffffffff1673ccf3d848e08b94478ed8f46ffead3008faf581fd73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e991906110b9565b73ffffffffffffffffffffffffffffffffffffffff1614610736576040517f19494c8a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff841614156107b15760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f193505050501580156107ab573d6000803e3d6000fd5b50505050565b6107d273ffffffffffffffffffffffffffffffffffffffff84168383610cc9565b505050565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085d91906110b9565b73ffffffffffffffffffffffffffffffffffffffff161461087d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020805491851691839081106108b9576108b961116d565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146108e557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054600181118015610924575061092160018261119c565b82105b156109fc5773ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902061095960018361119c565b815481106109695761096961116d565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600290925260409092208054919092169190849081106109b3576109b361116d565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260409020805480610a3057610a306111b3565b600082815260208082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908401810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155930190935533815260028352604081208054600181018255908252929020909101805490911673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355505050565b60035460009015610c1b576003805460009190610af39060019061119c565b81548110610b0357610b0361116d565b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff90921692509080610b3b57610b3b6111b3565b6000828152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908201810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190556040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528216906313af403590602401600060405180830381600087803b158015610bfc57600080fd5b505af1158015610c10573d6000803e3d6000fd5b509295945050505050565b6040517ff3701da200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260009073a26e15c895efc0616177b7c1e7270a4c7d51c9979063f3701da2906024016020604051808303816000875af1158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc291906110b9565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526107d292869291600091610d94918516908490610e43565b8051909150156107d25780806020019051810190610db291906111e2565b6107d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6060610e528484600085610e5a565b949350505050565b6060610e6585610f5e565b610e9b576040517f304619b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610ec49190611230565b60006040518083038185875af1925050503d8060008114610f01576040519150601f19603f3d011682016040523d82523d6000602084013e610f06565b606091505b50915091508115610f1a579150610e529050565b805115610f2a5780518082602001fd5b836040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a919061124c565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610e52575050151592915050565b600060208284031215610fa957600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610fd257600080fd5b50565b60008060408385031215610fe857600080fd5b8235610ff381610fb0565b946020939093013593505050565b60006020828403121561101357600080fd5b8135610cc281610fb0565b6020808252825182820181905260009190848201906040850190845b8181101561106c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161103a565b50909695505050505050565b60008060006060848603121561108d57600080fd5b833561109881610fb0565b925060208401356110a881610fb0565b929592945050506040919091013590565b6000602082840312156110cb57600080fd5b8151610cc281610fb0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611137576111376110d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156111ae576111ae6110d6565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000602082840312156111f457600080fd5b81518015158114610cc257600080fd5b60005b8381101561121f578181015183820152602001611207565b838111156107ab5750506000910152565b60008251611242818460208701611204565b9190910192915050565b602081526000825180602084015261126b816040850160208701611204565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea264697066735822122093648c8257e965fa48751a3fab548e3bec1d301e7e75ca1af43d1c87db4749ce64736f6c634300080a0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063632e6e3211610081578063ac890c4e1161005b578063ac890c4e14610199578063c579d490146101aa578063dfc0c754146101bd57600080fd5b8063632e6e32146101435780637d9f7712146101635780638cedca711461017e57600080fd5b806341c0e1b5116100b257806341c0e1b514610115578063438aacf21461011d5780635dcf7c8c1461013057600080fd5b80631c5fc483146100ce578063214f403f146100e3575b600080fd5b6100e16100dc366004610f97565b6101d0565b005b6100eb6102ec565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e1610399565b6100eb61012b366004610f97565b610483565b6100eb61013e366004610fd5565b6104ba565b610156610151366004611001565b6104ff565b60405161010c919061101e565b6100eb7347fb2585d2c56fe188d0e6ec628a38b74fceeedf81565b6100eb73ccf3d848e08b94478ed8f46ffead3008faf581fd81565b60035460405190815260200161010c565b6100e16101b8366004611078565b61064f565b6100e16101cb366004611078565b6107d7565b60005b818110156102e857600073a26e15c895efc0616177b7c1e7270a4c7d51c99773ffffffffffffffffffffffffffffffffffffffff16638e1a55fc6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561023e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026291906110b9565b600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506102e181611105565b90506101d3565b5050565b6000806102f833610ad4565b33600081815260026020908152604080832080546001810182559084529282902090920180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86169081179091558251938452908301529192507fa94ca626c15b5acbc6f820b88b794bce0d7a9198f2ed3e248aa0a362e2bdd60b910160405180910390a1919050565b3373ffffffffffffffffffffffffffffffffffffffff1673ccf3d848e08b94478ed8f46ffead3008faf581fd73ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561040f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043391906110b9565b73ffffffffffffffffffffffffffffffffffffffff1614610480576040517fa6c827a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33ff5b6003818154811061049357600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b600260205281600052604060002081815481106104d657600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600260205260408120546060919067ffffffffffffffff8111156105415761054161113e565b60405190808252806020026020018201604052801561056a578160200160208202803683370190505b50905060005b73ffffffffffffffffffffffffffffffffffffffff84166000908152600260205260409020548110156106485773ffffffffffffffffffffffffffffffffffffffff841660009081526002602052604090208054829081106105d4576105d461116d565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168282815181106106115761061161116d565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101528061064081611105565b915050610570565b5092915050565b3373ffffffffffffffffffffffffffffffffffffffff1673ccf3d848e08b94478ed8f46ffead3008faf581fd73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e991906110b9565b73ffffffffffffffffffffffffffffffffffffffff1614610736576040517f19494c8a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff841614156107b15760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f193505050501580156107ab573d6000803e3d6000fd5b50505050565b6107d273ffffffffffffffffffffffffffffffffffffffff84168383610cc9565b505050565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085d91906110b9565b73ffffffffffffffffffffffffffffffffffffffff161461087d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600260205260409020805491851691839081106108b9576108b961116d565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16146108e557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260026020526040902054600181118015610924575061092160018261119c565b82105b156109fc5773ffffffffffffffffffffffffffffffffffffffff8316600090815260026020526040902061095960018361119c565b815481106109695761096961116d565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600290925260409092208054919092169190849081106109b3576109b361116d565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b73ffffffffffffffffffffffffffffffffffffffff83166000908152600260205260409020805480610a3057610a306111b3565b600082815260208082207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908401810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116909155930190935533815260028352604081208054600181018255908252929020909101805490911673ffffffffffffffffffffffffffffffffffffffff9590951694909417909355505050565b60035460009015610c1b576003805460009190610af39060019061119c565b81548110610b0357610b0361116d565b6000918252602090912001546003805473ffffffffffffffffffffffffffffffffffffffff90921692509080610b3b57610b3b6111b3565b6000828152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff908201810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690550190556040517f13af403500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528216906313af403590602401600060405180830381600087803b158015610bfc57600080fd5b505af1158015610c10573d6000803e3d6000fd5b509295945050505050565b6040517ff3701da200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260009073a26e15c895efc0616177b7c1e7270a4c7d51c9979063f3701da2906024016020604051808303816000875af1158015610c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc291906110b9565b9392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908401526107d292869291600091610d94918516908490610e43565b8051909150156107d25780806020019051810190610db291906111e2565b6107d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6060610e528484600085610e5a565b949350505050565b6060610e6585610f5e565b610e9b576040517f304619b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051610ec49190611230565b60006040518083038185875af1925050503d8060008114610f01576040519150601f19603f3d011682016040523d82523d6000602084013e610f06565b606091505b50915091508115610f1a579150610e529050565b805115610f2a5780518082602001fd5b836040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3a919061124c565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590610e52575050151592915050565b600060208284031215610fa957600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114610fd257600080fd5b50565b60008060408385031215610fe857600080fd5b8235610ff381610fb0565b946020939093013593505050565b60006020828403121561101357600080fd5b8135610cc281610fb0565b6020808252825182820181905260009190848201906040850190845b8181101561106c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161103a565b50909695505050505050565b60008060006060848603121561108d57600080fd5b833561109881610fb0565b925060208401356110a881610fb0565b929592945050506040919091013590565b6000602082840312156110cb57600080fd5b8151610cc281610fb0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611137576111376110d6565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000828210156111ae576111ae6110d6565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000602082840312156111f457600080fd5b81518015158114610cc257600080fd5b60005b8381101561121f578181015183820152602001611207565b838111156107ab5750506000910152565b60008251611242818460208701611204565b9190910192915050565b602081526000825180602084015261126b816040850160208701611204565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea264697066735822122093648c8257e965fa48751a3fab548e3bec1d301e7e75ca1af43d1c87db4749ce64736f6c634300080a0033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.