ETH Price: $1,792.60 (+1.95%)
Gas: 17 Gwei

Contract

0xA9229c9D3720CD359cEc51A259003C845E4C8224
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multi Chain

Multichain Addresses

1 address found via Blockscan
Transaction Hash
Method
Block
From
To
Value
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152192021-02-08 10:16:11771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Update Proxy Pai...118152162021-02-08 10:15:28771 days 11 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00637872160
Transfer Ownersh...112303242020-11-10 14:27:21861 days 7 hrs agoIN
0xA9229c...5E4C8224
0 ETH0.00399425130
0x60806040112303232020-11-10 14:26:49861 days 7 hrs agoIN
 Contract Creation
0 ETH0.09356997130

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xa12DDb...24a2A596

Contract Name:
WSController

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, GNU GPLv3 license
/**
 *Submitted for verification at Etherscan.io on 2020-11-09
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.6.12;


interface IWSProxy {
    function initialize(address _implementation, address _admin, bytes calldata _data) external;
    function upgradeTo(address _proxy) external;
    function upgradeToAndCall(address _proxy, bytes calldata data) external payable;
    function changeAdmin(address newAdmin) external;
    function admin() external returns (address);
    function implementation() external returns (address);
}

interface IWSController {
    function getLogicForPair() external view returns(address);
    function getCurrentAdmin() external view returns(address);
    function updatePairLogic(address _logic) external;
    function updateCurrentAdmin(address _newAdmin) external;
    function updateProxyPair(address _proxy) external;
    function setAdminForProxy(address _proxy) external;
}

interface IWSImplementation {
	function getImplementationType() external pure returns(uint256);
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract WSController is Ownable, IWSController {
    address public pairLogic;
    address public currentAdmin;

    /*
    * @dev Type variable:
    * 2 - Pair
    */
    uint256 constant public PAIR_TYPE = 2;

    event NewPairLogic(address indexed logic);
    event NewAdmin(address indexed adminAddress);
    event UpdateProxy(address indexed proxyAddress, address newLogic);
    event ChangeAdmin(address indexed proxyAddress, address newAdmin);

    constructor(address _pairLogic) public {
        require(_pairLogic != address(0), "WSController: Wrong pair logic address");
        currentAdmin = address(this);
        pairLogic = _pairLogic;
    }


    function updatePairLogic(address _logic) external override onlyOwner {
        pairLogic = _logic;
        emit NewPairLogic(_logic);
    }

    function updateCurrentAdmin(address _newAdmin) external override onlyOwner {
        currentAdmin = _newAdmin;
        emit NewAdmin(_newAdmin);
    }

    function updateProxyPair(address _proxy) external override {
        require(IWSImplementation(IWSProxy(_proxy).implementation()).getImplementationType() == PAIR_TYPE, "WSController: Wrong pair proxy for update.");
        IWSProxy(_proxy).upgradeTo(pairLogic);
        emit UpdateProxy(_proxy, pairLogic);
    }

    function setAdminForProxy(address _proxy) external override {
        IWSProxy(_proxy).changeAdmin(currentAdmin);
        emit ChangeAdmin(_proxy, currentAdmin);
    }

    function getLogicForPair() external view override returns(address) {
        return pairLogic;
    }

    function getCurrentAdmin() external view override returns(address){
        return currentAdmin;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_pairLogic","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"ChangeAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"adminAddress","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"logic","type":"address"}],"name":"NewPairLogic","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"proxyAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newLogic","type":"address"}],"name":"UpdateProxy","type":"event"},{"inputs":[],"name":"PAIR_TYPE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLogicForPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairLogic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"name":"setAdminForProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAdmin","type":"address"}],"name":"updateCurrentAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"}],"name":"updatePairLogic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_proxy","type":"address"}],"name":"updateProxyPair","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051610bfe380380610bfe8339818101604052602081101561003357600080fd5b5051600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36001600160a01b0381166100b95760405162461bcd60e51b8152600401808060200182810382526026815260200180610bd86026913960400191505060405180910390fd5b60028054306001600160a01b031991821617909155600180549091166001600160a01b0392909216919091179055610ae2806100f66000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063715018a611610081578063ba4bcd721161005b578063ba4bcd721461020a578063be7a76f514610212578063f2fde38b1461021a576100d4565b8063715018a6146101f257806387dcb20e146101fa5780638da5cb5b14610202576100d4565b8063508d1e6b116100b2578063508d1e6b1461017457806352985c6b1461018e578063643d430c146101c1576100d4565b8063191873fb146100d95780632acef1201461010e578063482134f414610141575b600080fd5b61010c600480360360208110156100ef57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661024d565b005b61010c6004803603602081101561012457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610342565b61010c6004803603602081101561015757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610437565b61017c610517565b60408051918252519081900360200190f35b61010c600480360360208110156101a457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661051c565b6101c961075c565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61010c610778565b6101c961086d565b6101c9610889565b6101c96108a5565b6101c96108c1565b61010c6004803603602081101561023057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166108dd565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102d357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103c857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fa2c0f858bb578c3740caa5581e42dafc7fd07bd9bc6c186652a306a6619f00f490600090a250565b600254604080517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905191831691638f2839709160248082019260009290919082900301818387803b1580156104ab57600080fd5b505af11580156104bf573d6000803e3d6000fd5b50506002546040805173ffffffffffffffffffffffffffffffffffffffff9283168152905191851693507fcf9b665e0639e0b81a8db37b60ac7ddf45aeb1b484e11adeb7dff4bf4a3a6258925081900360200190a250565b600281565b60028173ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561056657600080fd5b505af115801561057a573d6000803e3d6000fd5b505050506040513d602081101561059057600080fd5b5051604080517f2a2767e5000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff90921691632a2767e591600480820192602092909190829003018186803b1580156105fa57600080fd5b505afa15801561060e573d6000803e3d6000fd5b505050506040513d602081101561062457600080fd5b50511461067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180610a83602a913960400191505060405180910390fd5b600154604080517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152905191831691633659cfe69160248082019260009290919082900301818387803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b50506001546040805173ffffffffffffffffffffffffffffffffffffffff9283168152905191851693507fb2a0a92cb938918ddf9159f9d5ff64d03a42b735022db4fb8f80cbf34753f7ea925081900360200190a250565b60025473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1690565b60005473ffffffffffffffffffffffffffffffffffffffff16331461096357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166109cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180610a5d6026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735753436f6e74726f6c6c65723a2057726f6e6720706169722070726f787920666f72207570646174652ea26469706673582212200a4540ee12ef0fba1163274ff2d30fe72189440941e72ee34245390b94cf55a064736f6c634300060c00335753436f6e74726f6c6c65723a2057726f6e672070616972206c6f676963206164647265737300000000000000000000000033e57451dd6d0b03786467173673f57e55a29b3f

Deployed ByteCode Sourcemap

3146:1719:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3983:153;;;;;;;;;;;;;;;;-1:-1:-1;3983:153:0;;;;:::i;:::-;;3833:142;;;;;;;;;;;;;;;;-1:-1:-1;3833:142:0;;;;:::i;4468:170::-;;;;;;;;;;;;;;;;-1:-1:-1;4468:170:0;;;;:::i;3327:37::-;;;:::i;:::-;;;;;;;;;;;;;;;;4144:316;;;;;;;;;;;;;;;;-1:-1:-1;4144:316:0;;;;:::i;4756:104::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2592:148;;;:::i;3201:24::-;;;:::i;1952:79::-;;;:::i;3232:27::-;;;:::i;4646:102::-;;;:::i;2895:244::-;;;;;;;;;;;;;;;;-1:-1:-1;2895:244:0;;;;:::i;3983:153::-;2164:6;;:20;:6;2174:10;2164:20;2156:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4069:12:::1;:24:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;4109:19:::1;::::0;::::1;::::0;-1:-1:-1;;4109:19:0::1;3983:153:::0;:::o;3833:142::-;2164:6;;:20;:6;2174:10;2164:20;2156:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3913:9:::1;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;3947:20:::1;::::0;::::1;::::0;-1:-1:-1;;3947:20:0::1;3833:142:::0;:::o;4468:170::-;4568:12;;4539:42;;;;;;:28;4568:12;;;4539:42;;;;;;:28;;;;;;:42;;;;;4568:12;;4539:42;;;;;;;;4568:12;4539:28;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4617:12:0;;4597:33;;;;4617:12;;;4597:33;;;;;;;;-1:-1:-1;4597:33:0;;-1:-1:-1;4597:33:0;;;;;;;4468:170;:::o;3327:37::-;3363:1;3327:37;:::o;4144:316::-;3363:1;4249:6;4240:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4240:33:0;4222:76;;;;;;;;:74;;;;;;;:76;;;;;4240:33;;4222:76;;;;;;;;:74;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4222:76:0;:89;4214:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4396:9;;4369:37;;;;;;:26;4396:9;;;4369:37;;;;;;:26;;;;;;:37;;;;;4396:9;;4369:37;;;;;;;;4396:9;4369:26;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4442:9:0;;4422:30;;;;4442:9;;;4422:30;;;;;;;;-1:-1:-1;4422:30:0;;-1:-1:-1;4422:30:0;;;;;;;4144:316;:::o;4756:104::-;4840:12;;;;4756:104;:::o;2592:148::-;2164:6;;:20;:6;2174:10;2164:20;2156:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2699:1:::1;2683:6:::0;;2662:40:::1;::::0;::::1;2683:6:::0;;::::1;::::0;2662:40:::1;::::0;2699:1;;2662:40:::1;2730:1;2713:19:::0;;;::::1;::::0;;2592:148::o;3201:24::-;;;;;;:::o;1952:79::-;1990:7;2017:6;;;1952:79;:::o;3232:27::-;;;;;;:::o;4646:102::-;4731:9;;;;4646:102;:::o;2895:244::-;2164:6;;:20;:6;2174:10;2164:20;2156:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2984:22:::1;::::0;::::1;2976:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3086:6;::::0;;3065:38:::1;::::0;::::1;::::0;;::::1;::::0;3086:6;::::1;::::0;3065:38:::1;::::0;::::1;3114:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2895:244::o

Swarm Source

ipfs://0a4540ee12ef0fba1163274ff2d30fe72189440941e72ee34245390b94cf55a0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals
[ 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.