S Price: $0.534602 (-0.15%)

Contract

0x8CeFA4096264486D639CA92428548D79950c30C8

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Role For16402902024-12-26 9:54:0930 days ago1735206849IN
0x8CeFA409...9950c30C8
0 S0.000118261.1
Set Role For15728592024-12-25 15:47:1430 days ago1735141634IN
0x8CeFA409...9950c30C8
0 S0.000118251.1
Set Role For15691462024-12-25 15:13:2530 days ago1735139605IN
0x8CeFA409...9950c30C8
0 S0.000137071.1
Set Swapx Multis...14835232024-12-24 17:04:0331 days ago1735059843IN
0x8CeFA409...9950c30C8
0 S0.000031111.1
Set Swapx Team M...14835122024-12-24 17:03:5231 days ago1735059832IN
0x8CeFA409...9950c30C8
0 S0.000031161.1
Set Emergency Co...14835032024-12-24 17:03:4331 days ago1735059823IN
0x8CeFA409...9950c30C8
0 S0.000031231.1
Set Role For13411872024-12-23 13:00:3632 days ago1734958836IN
0x8CeFA409...9950c30C8
0 S0.000137061.1
Set Role For13411862024-12-23 13:00:3632 days ago1734958836IN
0x8CeFA409...9950c30C8
0 S0.000118261.1
Set Role For13411832024-12-23 13:00:3432 days ago1734958834IN
0x8CeFA409...9950c30C8
0 S0.000120141.1
Set Role For13411802024-12-23 13:00:3332 days ago1734958833IN
0x8CeFA409...9950c30C8
0 S0.000137071.1
Set Role For13393332024-12-23 12:40:1532 days ago1734957615IN
0x8CeFA409...9950c30C8
0 S0.000137071.1
Set Role For13393272024-12-23 12:40:1132 days ago1734957611IN
0x8CeFA409...9950c30C8
0 S0.000155881.1
Set Role For13393192024-12-23 12:40:0732 days ago1734957607IN
0x8CeFA409...9950c30C8
0 S0.000155881.1

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PermissionsRegistry

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : PermissionsRegistry.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

/*
    This contract handles the accesses to the various SwapX contracts.
*/

contract PermissionsRegistry {

    /// @notice Control this contract. This is the main multisig 4/6
    address public swpxMultisig;

    /// @notice This is the swpx team multisig 2/2
    address public swpxTeamMultisig;

    /// @notice Control emergency functions (set to multisig)
    address public emergencyCouncil;

    /// @notice Check if caller has a role active   (role -> caller -> true/false)
    mapping(bytes => mapping(address => bool)) public hasRole;
    mapping(bytes => bool) internal _checkRole;

    mapping(bytes => address[]) internal _roleToAddresses;
    mapping(address => bytes[]) internal _addressToRoles;

    /// @notice Roles array
    bytes[] internal _roles;

    event RoleAdded(bytes role);
    event RoleRemoved(bytes role);
    event RoleSetFor(address indexed user, bytes indexed role);
    event RoleRemovedFor(address indexed user, bytes indexed role);
    event SetEmergencyCouncil(address indexed council);
    event SetSwapxTeamMultisig(address indexed multisig);
    event SetSwapxMultisig(address indexed multisig);



    constructor() {
        swpxTeamMultisig = msg.sender;
        swpxMultisig = msg.sender;
        emergencyCouncil = msg.sender;


        _roles.push(bytes("GOVERNANCE"));
        _checkRole[(bytes("GOVERNANCE"))] = true;

        _roles.push(bytes("VOTER_ADMIN"));
        _checkRole[(bytes("VOTER_ADMIN"))] = true;

        _roles.push(bytes("GAUGE_ADMIN"));
        _checkRole[(bytes("GAUGE_ADMIN"))] = true;

        _roles.push(bytes("BRIBE_ADMIN"));
        _checkRole[(bytes("BRIBE_ADMIN"))] = true;

        _roles.push(bytes("FEE_MANAGER"));
        _checkRole[(bytes("FEE_MANAGER"))] = true;

        _roles.push(bytes("CL_FEES_VAULT_ADMIN"));
        _checkRole[(bytes("CL_FEES_VAULT_ADMIN"))] = true;

    }

    modifier onlySwapxMultisig() {
        require(msg.sender == swpxMultisig, "!swpxMultisig");
        _;
    }

    /* -----------------------------------------------------------------------------
    --------------------------------------------------------------------------------
                                    ROLES SETTINGS
    --------------------------------------------------------------------------------
    ----------------------------------------------------------------------------- */

    /// @notice add a new role
    /// @param  role    new role's string (eg role = "GAUGE_ADMIN")
    function addRole(string memory role) external onlySwapxMultisig {
        bytes memory _role = bytes(role);
        require(!_checkRole[_role], 'is a role');
        _checkRole[_role] = true;
        _roles.push(_role);
        emit RoleAdded(_role);
    }

    /// @notice Remove a role
    /// @dev    set last one to i_th position then .pop()
    function removeRole(string memory role) external onlySwapxMultisig {
        bytes memory _role = bytes(role);
        require(_checkRole[_role], 'not a role');

        for(uint i = 0; i < _roles.length; i++){
            if(keccak256(_roles[i]) == keccak256(_role)){
                _roles[i] = _roles[_roles.length -1];
                _roles.pop();
                _checkRole[_role] = false;
                emit RoleRemoved(_role);
                break;
            }
        }

        address[] memory rta = _roleToAddresses[bytes(role)];
        for(uint i = 0; i < rta.length; i++){
            hasRole[bytes(role)][rta[i]] = false;
            bytes[] memory __roles = _addressToRoles[rta[i]];
            for(uint k = 0; k < __roles.length; k++){
                if(keccak256(__roles[k]) == keccak256(bytes(role))){
                    _addressToRoles[rta[i]][k] = _roles[_roles.length -1];
                    _addressToRoles[rta[i]].pop();
                }
            }
        }

    }



    /// @notice Set a role for an address
    function setRoleFor(address c, string memory role) external onlySwapxMultisig {
        bytes memory _role = bytes(role);
        require(_checkRole[_role], 'not a role');
        require(!hasRole[_role][c], 'assigned');

        hasRole[_role][c] = true;

        _roleToAddresses[_role].push(c);
        _addressToRoles[c].push(_role);

        emit RoleSetFor(c, _role);

    }


    /// @notice remove a role from an address
    function removeRoleFrom(address c, string memory role) external onlySwapxMultisig {
        bytes memory _role = bytes(role);
        require(_checkRole[_role], 'not a role');
        require(hasRole[_role][c], 'not assigned');

        hasRole[_role][c] = false;

        address[] storage rta = _roleToAddresses[_role];
        for(uint i = 0; i < rta.length; i++){
            if(rta[i] == c){
                rta[i] = rta[rta.length -1];
                rta.pop();
            }
        }

        bytes[] storage atr = _addressToRoles[c];
        for(uint i = 0; i < atr.length; i++){
            if(keccak256(atr[i]) == keccak256(_role)){
                atr[i] = atr[atr.length -1];
                atr.pop();
            }
        }

        emit RoleRemovedFor(c, _role);

    }





    /************************************************************
                                VIEW
    *************************************************************/

    /// @notice Read roles and return strings
    function rolesToString() external view returns(string[] memory __roles){
        __roles = new string[](_roles.length);
        for(uint i = 0; i < _roles.length; i++){
            __roles[i] = string(_roles[i]);
        }
    }


    /// @notice Read roles array and return bytes
    function roles() external view returns(bytes[] memory){
        return _roles;
    }

    /// @notice Read roles length
    function rolesLength() external view returns(uint){
        return _roles.length;
    }

     /// @notice Return addresses for a given role
    function roleToAddresses(string memory role) external view returns(address[] memory _addresses){
        return _roleToAddresses[bytes(role)];
    }

    /// @notice Return roles for a given address
    function addressToRole(address _user) external view returns(string[] memory){
        string[] memory _temp = new string[](_addressToRoles[_user].length);
        uint i = 0;
        for(i; i < _temp.length; i++){
            _temp[i] = string(_addressToRoles[_user][i]);
        }
        return _temp;
    }


    /************************************************************
                                HELPERS
    *************************************************************/

    /// @notice Helper function to get bytes from a string
    function helper_stringToBytes(string memory _input) public pure returns(bytes memory){
        return bytes(_input);
    }

    /// @notice Helper function to get string from bytes
    function helper_bytesToString(bytes memory _input) public pure returns(string memory){
        return string(_input);
    }



    /* -----------------------------------------------------------------------------
    --------------------------------------------------------------------------------
                                EMERGENCY AND MULTISIG
    --------------------------------------------------------------------------------
    ----------------------------------------------------------------------------- */


    /// @notice set emergency counsil
    /// @param _new new address
    function setEmergencyCouncil(address _new) external {
        require(msg.sender == emergencyCouncil || msg.sender == swpxMultisig, "not allowed");
        require(_new != address(0), "addr0");
        require(_new != emergencyCouncil, "same emergencyCouncil");
        emergencyCouncil = _new;

        emit SetEmergencyCouncil(_new);
    }


    /// @notice set SwapX team multisig
    /// @param _new new address
    function setSwapxTeamMultisig(address _new) external {
        require(msg.sender == swpxTeamMultisig, "not allowed");
        require(_new != address(0), "addr 0");
        require(_new != swpxTeamMultisig, "same multisig");
        swpxTeamMultisig = _new;

        emit SetSwapxTeamMultisig(_new);
    }

    /// @notice set SwapX multisig
    /// @param _new new address
    function setSwapxMultisig(address _new) external {
        require(msg.sender == swpxMultisig, "not allowed");
        require(_new != address(0), "addr0");
        require(_new != swpxMultisig, "same multisig");
        swpxMultisig = _new;

        emit SetSwapxMultisig(_new);
    }



}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"role","type":"bytes"}],"name":"RoleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"role","type":"bytes"}],"name":"RoleRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"bytes","name":"role","type":"bytes"}],"name":"RoleRemovedFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"bytes","name":"role","type":"bytes"}],"name":"RoleSetFor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"council","type":"address"}],"name":"SetEmergencyCouncil","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"multisig","type":"address"}],"name":"SetSwapxMultisig","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"multisig","type":"address"}],"name":"SetSwapxTeamMultisig","type":"event"},{"inputs":[{"internalType":"string","name":"role","type":"string"}],"name":"addRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addressToRole","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyCouncil","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"address","name":"","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_input","type":"bytes"}],"name":"helper_bytesToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"_input","type":"string"}],"name":"helper_stringToBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"role","type":"string"}],"name":"removeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"c","type":"address"},{"internalType":"string","name":"role","type":"string"}],"name":"removeRoleFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"role","type":"string"}],"name":"roleToAddresses","outputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roles","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rolesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rolesToString","outputs":[{"internalType":"string[]","name":"__roles","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setEmergencyCouncil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"c","type":"address"},{"internalType":"string","name":"role","type":"string"}],"name":"setRoleFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setSwapxMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setSwapxTeamMultisig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swpxMultisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swpxTeamMultisig","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060018054336001600160a01b031991821681178355600080548316821781556002805490931690911790915560408051808201909152600a815269474f5645524e414e434560b01b60208201908152600780549485018155909252516200008c92600080516020620021d88339815191520191906200043c565b50600160046040518060400160405280600a815260200169474f5645524e414e434560b01b815250604051620000c39190620004e2565b9081526040805160209281900383018120805460ff1916941515949094179093558281019052600b82526a2b27aa22a92fa0a226a4a760a91b9082019081526007805460018101825560009190915291516200013292600080516020620021d88339815191520191906200043c565b50600160046040518060400160405280600b81526020016a2b27aa22a92fa0a226a4a760a91b8152506040516200016a9190620004e2565b9081526040805160209281900383018120805460ff1916941515949094179093558281019052600b82526a23a0aaa3a2afa0a226a4a760a91b908201908152600780546001810182556000919091529151620001d992600080516020620021d88339815191520191906200043c565b50600160046040518060400160405280600b81526020016a23a0aaa3a2afa0a226a4a760a91b815250604051620002119190620004e2565b9081526040805160209281900383018120805460ff1916941515949094179093558281019052600b82526a212924a122afa0a226a4a760a91b9082019081526007805460018101825560009190915291516200028092600080516020620021d88339815191520191906200043c565b50600160046040518060400160405280600b81526020016a212924a122afa0a226a4a760a91b815250604051620002b89190620004e2565b9081526040805160209281900383018120805460ff1916941515949094179093558281019052600b82526a2322a2afa6a0a720a3a2a960a91b9082019081526007805460018101825560009190915291516200032792600080516020620021d88339815191520191906200043c565b50600160046040518060400160405280600b81526020016a2322a2afa6a0a720a3a2a960a91b8152506040516200035f9190620004e2565b9081526040805160209281900383018120805460ff1916941515949094179093558281019052601382527221a62fa322a2a9afab20aaa62a2fa0a226a4a760691b908201908152600780546001810182556000919091529151620003d692600080516020620021d88339815191520191906200043c565b50600160046040518060400160405280601381526020017221a62fa322a2a9afab20aaa62a2fa0a226a4a760691b815250604051620004169190620004e2565b908152604051908190036020019020805491151560ff199092169190911790556200055c565b8280546200044a9062000520565b90600052602060002090601f0160209004810192826200046e5760008555620004b9565b82601f106200048957805160ff1916838001178555620004b9565b82800160010185558215620004b9579182015b82811115620004b95782518255916020019190600101906200049c565b50620004c7929150620004cb565b5090565b5b80821115620004c75760008155600101620004cc565b6000825160005b81811015620005055760208186018101518583015201620004e9565b8181111562000515576000828501525b509190910192915050565b600181811c908216806200053557607f821691505b6020821081036200055657634e487b7160e01b600052602260045260246000fd5b50919050565b611c6c806200056c6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063818bedf1116100a25780639dce27ae116100715780639dce27ae1461026c578063adb0630a1461027d578063c193dbb214610290578063ddc48952146102a3578063e586875f146102c357600080fd5b8063818bedf114610228578063829797c514610246578063909102bf146102285780639c0589641461025957600080fd5b80634bf6c0cf116100e95780634bf6c0cf146101af5780636755d7b1146101c257806368aa9d1a146101ed5780637778960e1461020d5780637b59f03c1461022057600080fd5b80630d31e2ea1461011b578063392f5f64146101305780633e96e8681461014e5780634448e1eb14610161575b600080fd5b61012e6101293660046117f9565b6102d6565b005b61013861067b565b604051610145919061189f565b60405180910390f35b61012e61015c366004611901565b610754565b61019f61016f36600461193e565b81516020818401810180516003825292820194820194909420919093529091526000908152604090205460ff1681565b6040519015158152602001610145565b61012e6101bd36600461198c565b61088e565b6001546101d5906001600160a01b031681565b6040516001600160a01b039091168152602001610145565b6102006101fb36600461198c565b61098c565b60405161014591906119ae565b6002546101d5906001600160a01b031681565b610200610af7565b610239610236366004611901565b90565b6040516101459190611a03565b61012e610254366004611901565b610c32565b61012e6102673660046117f9565b61116c565b600754604051908152602001610145565b6000546101d5906001600160a01b031681565b61012e61029e36600461198c565b611355565b6102b66102b1366004611901565b611456565b6040516101459190611a16565b61012e6102d136600461198c565b6114d0565b6000546001600160a01b031633146103095760405162461bcd60e51b815260040161030090611a63565b60405180910390fd5b604051819060049061031c908390611a8a565b9081526040519081900360200190205460ff1661034b5760405162461bcd60e51b815260040161030090611aa6565b60038160405161035b9190611a8a565b90815260408051602092819003830190206001600160a01b0386166000908152925290205460ff166103be5760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185cdcda59db995960a21b6044820152606401610300565b60006003826040516103d09190611a8a565b90815260408051602092819003830181206001600160a01b03881660009081529352908220805460ff19169315159390931790925590600590610414908490611a8a565b9081526020016040518091039020905060005b815481101561052957846001600160a01b031682828154811061044c5761044c611aca565b6000918252602090912001546001600160a01b031603610517578154829061047690600190611af6565b8154811061048657610486611aca565b9060005260206000200160009054906101000a90046001600160a01b03168282815481106104b6576104b6611aca565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818054806104f4576104f4611b0d565b600082815260209020810160001990810180546001600160a01b03191690550190555b8061052181611b23565b915050610427565b506001600160a01b0384166000908152600660205260408120905b815481101561062a57838051906020012082828154811061056757610567611aca565b9060005260206000200160405161057e9190611b76565b604051809103902003610618578154829061059b90600190611af6565b815481106105ab576105ab611aca565b906000526020600020018282815481106105c7576105c7611aca565b906000526020600020019080546105dd90611b3c565b6105e89291906115ed565b50818054806105f9576105f9611b0d565b6001900381819060005260206000200160006106159190611674565b90555b8061062281611b23565b915050610544565b50826040516106399190611a8a565b604051908190038120906001600160a01b038716907fa4ee8ba3d4fa99564490ccc0d24115c129e1d527ce326e2693fbc6066a42378790600090a35050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b8282101561074b5783829060005260206000200180546106be90611b3c565b80601f01602080910402602001604051908101604052809291908181526020018280546106ea90611b3c565b80156107375780601f1061070c57610100808354040283529160200191610737565b820191906000526020600020905b81548152906001019060200180831161071a57829003601f168201915b50505050508152602001906001019061069f565b50505050905090565b6000546001600160a01b0316331461077e5760405162461bcd60e51b815260040161030090611a63565b6040518190600490610791908390611a8a565b9081526040519081900360200190205460ff16156107dd5760405162461bcd60e51b81526020600482015260096024820152686973206120726f6c6560b81b6044820152606401610300565b60016004826040516107ef9190611a8a565b90815260405160209181900382019020805460ff191692151592909217909155600780546001810182556000919091528251610852927fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688909201918401906116b1565b507f653c7fd6974afa5afbb64671ae46627f13633272e5fb2bd632ecf49713ebfe63816040516108829190611a03565b60405180910390a15050565b6000546001600160a01b031633146108b85760405162461bcd60e51b815260040161030090611c11565b6001600160a01b0381166108f65760405162461bcd60e51b8152602060048201526005602482015264061646472360dc1b6044820152606401610300565b6000546001600160a01b03908116908216036109445760405162461bcd60e51b815260206004820152600d60248201526c73616d65206d756c746973696760981b6044820152606401610300565b600080546001600160a01b0319166001600160a01b038316908117825560405190917fc033e3bf37d7ae29d78fb5f4480cf0a5664ad9e9ccdf1622be5967c3f579a8e191a250565b6001600160a01b0381166000908152600660205260408120546060919067ffffffffffffffff8111156109c1576109c1611756565b6040519080825280602002602001820160405280156109f457816020015b60608152602001906001900390816109df5790505b50905060005b8151811015610af0576001600160a01b0384166000908152600660205260409020805482908110610a2d57610a2d611aca565b906000526020600020018054610a4290611b3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6e90611b3c565b8015610abb5780601f10610a9057610100808354040283529160200191610abb565b820191906000526020600020905b815481529060010190602001808311610a9e57829003601f168201915b5050505050828281518110610ad257610ad2611aca565b60200260200101819052508080610ae890611b23565b9150506109fa565b5092915050565b60075460609067ffffffffffffffff811115610b1557610b15611756565b604051908082528060200260200182016040528015610b4857816020015b6060815260200190600190039081610b335790505b50905060005b600754811015610c2e5760078181548110610b6b57610b6b611aca565b906000526020600020018054610b8090611b3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac90611b3c565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b5050505050828281518110610c1057610c10611aca565b60200260200101819052508080610c2690611b23565b915050610b4e565b5090565b6000546001600160a01b03163314610c5c5760405162461bcd60e51b815260040161030090611a63565b6040518190600490610c6f908390611a8a565b9081526040519081900360200190205460ff16610c9e5760405162461bcd60e51b815260040161030090611aa6565b60005b600754811015610df757818051906020012060078281548110610cc657610cc6611aca565b90600052602060002001604051610cdd9190611b76565b604051809103902003610de55760078054610cfa90600190611af6565b81548110610d0a57610d0a611aca565b9060005260206000200160078281548110610d2757610d27611aca565b90600052602060002001908054610d3d90611b3c565b610d489291906115ed565b506007805480610d5a57610d5a611b0d565b600190038181906000526020600020016000610d769190611674565b90556000600483604051610d8a9190611a8a565b908152604051908190036020018120805492151560ff19909316929092179091557f2c48f81b3be6f2583bd7766be9bead1529f9759f846e854d191bcd3924673d7290610dd8908490611a03565b60405180910390a1610df7565b80610def81611b23565b915050610ca1565b506000600583604051610e0a9190611a8a565b9081526040805191829003602090810183208054808302850183019093528284529190830182828015610e6657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e48575b5050505050905060005b8151811015611166576000600385604051610e8b9190611a8a565b90815260200160405180910390206000848481518110610ead57610ead611aca565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600060066000848481518110610f0457610f04611aca565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610ff8578382906000526020600020018054610f6b90611b3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9790611b3c565b8015610fe45780601f10610fb957610100808354040283529160200191610fe4565b820191906000526020600020905b815481529060010190602001808311610fc757829003601f168201915b505050505081526020019060010190610f4c565b50505050905060005b815181101561115157858051906020012082828151811061102457611024611aca565b6020026020010151805190602001200361113f576007805461104890600190611af6565b8154811061105857611058611aca565b906000526020600020016006600086868151811061107857611078611aca565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002082815481106110b1576110b1611aca565b906000526020600020019080546110c790611b3c565b6110d29291906115ed565b50600660008585815181106110e9576110e9611aca565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002080548061112057611120611b0d565b60019003818190600052602060002001600061113c9190611674565b90555b8061114981611b23565b915050611001565b5050808061115e90611b23565b915050610e70565b50505050565b6000546001600160a01b031633146111965760405162461bcd60e51b815260040161030090611a63565b60405181906004906111a9908390611a8a565b9081526040519081900360200190205460ff166111d85760405162461bcd60e51b815260040161030090611aa6565b6003816040516111e89190611a8a565b90815260408051602092819003830190206001600160a01b0386166000908152925290205460ff16156112485760405162461bcd60e51b8152602060048201526008602482015267185cdcda59db995960c21b6044820152606401610300565b600160038260405161125a9190611a8a565b90815260408051602092819003830181206001600160a01b038816600090815293529120805460ff19169215159290921790915560059061129c908390611a8a565b9081526040805160209281900383019020805460018082018355600092835284832090910180546001600160a01b0319166001600160a01b0389169081179091558252600684529181208054928301815581528290208351611306939190920191908401906116b1565b50806040516113159190611a8a565b604051908190038120906001600160a01b038516907f22efbd5010fe3ab1daad601999aba290f97caf7856c253f4f8ec551873be6dee90600090a3505050565b6001546001600160a01b0316331461137f5760405162461bcd60e51b815260040161030090611c11565b6001600160a01b0381166113be5760405162461bcd60e51b815260206004820152600660248201526506164647220360d41b6044820152606401610300565b6001546001600160a01b039081169082160361140c5760405162461bcd60e51b815260206004820152600d60248201526c73616d65206d756c746973696760981b6044820152606401610300565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f266c9c09b9b435932992b96d7c3c05c61c93621e28994f6089020488e3b7d0ba90600090a250565b60606005826040516114689190611a8a565b90815260408051918290036020908101832080548083028501830190935282845291908301828280156114c457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114a6575b50505050509050919050565b6002546001600160a01b03163314806114f357506000546001600160a01b031633145b61150f5760405162461bcd60e51b815260040161030090611c11565b6001600160a01b03811661154d5760405162461bcd60e51b8152602060048201526005602482015264061646472360dc1b6044820152606401610300565b6002546001600160a01b03908116908216036115a35760405162461bcd60e51b81526020600482015260156024820152741cd85b5948195b595c99d95b98de50dbdd5b98da5b605a1b6044820152606401610300565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f6eba45b867b647f00a6a295ba1fdfc5929f1b38a68a3beda302d7eab77b9029a90600090a250565b8280546115f990611b3c565b90600052602060002090601f01602090048101928261161b5760008555611668565b82601f1061162c5780548555611668565b8280016001018555821561166857600052602060002091601f016020900482015b8281111561166857825482559160010191906001019061164d565b50610c2e929150611725565b50805461168090611b3c565b6000825580601f10611690575050565b601f0160209004906000526020600020908101906116ae9190611725565b50565b8280546116bd90611b3c565b90600052602060002090601f0160209004810192826116df5760008555611668565b82601f106116f857805160ff1916838001178555611668565b82800160010185558215611668579182015b8281111561166857825182559160200191906001019061170a565b5b80821115610c2e5760008155600101611726565b80356001600160a01b038116811461175157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261177d57600080fd5b813567ffffffffffffffff8082111561179857611798611756565b604051601f8301601f19908116603f011681019082821181831017156117c0576117c0611756565b816040528381528660208588010111156117d957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561180c57600080fd5b6118158361173a565b9150602083013567ffffffffffffffff81111561183157600080fd5b61183d8582860161176c565b9150509250929050565b60005b8381101561186257818101518382015260200161184a565b838111156111665750506000910152565b6000815180845261188b816020860160208601611847565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156118f457603f198886030184526118e2858351611873565b945092850192908501906001016118c6565b5092979650505050505050565b60006020828403121561191357600080fd5b813567ffffffffffffffff81111561192a57600080fd5b6119368482850161176c565b949350505050565b6000806040838503121561195157600080fd5b823567ffffffffffffffff81111561196857600080fd5b6119748582860161176c565b9250506119836020840161173a565b90509250929050565b60006020828403121561199e57600080fd5b6119a78261173a565b9392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156118f457603f198886030184526119f1858351611873565b945092850192908501906001016119d5565b6020815260006119a76020830184611873565b6020808252825182820181905260009190848201906040850190845b81811015611a575783516001600160a01b031683529284019291840191600101611a32565b50909695505050505050565b6020808252600d908201526c21737770784d756c746973696760981b604082015260600190565b60008251611a9c818460208701611847565b9190910192915050565b6020808252600a90820152696e6f74206120726f6c6560b01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611b0857611b08611ae0565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201611b3557611b35611ae0565b5060010190565b600181811c90821680611b5057607f821691505b602082108103611b7057634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680611b9257607f831692505b60208084108203611bb157634e487b7160e01b86526022600452602486fd5b818015611bc55760018114611bd657611c03565b60ff19861689528489019650611c03565b60008a81526020902060005b86811015611bfb5781548b820152908501908301611be2565b505084890196505b509498975050505050505050565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b60408201526060019056fea264697066735822122025fa50a828b0753bdc0ae4486e67aa97aaf7fdde31220a564f6073ac8936c70264736f6c634300080d0033a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063818bedf1116100a25780639dce27ae116100715780639dce27ae1461026c578063adb0630a1461027d578063c193dbb214610290578063ddc48952146102a3578063e586875f146102c357600080fd5b8063818bedf114610228578063829797c514610246578063909102bf146102285780639c0589641461025957600080fd5b80634bf6c0cf116100e95780634bf6c0cf146101af5780636755d7b1146101c257806368aa9d1a146101ed5780637778960e1461020d5780637b59f03c1461022057600080fd5b80630d31e2ea1461011b578063392f5f64146101305780633e96e8681461014e5780634448e1eb14610161575b600080fd5b61012e6101293660046117f9565b6102d6565b005b61013861067b565b604051610145919061189f565b60405180910390f35b61012e61015c366004611901565b610754565b61019f61016f36600461193e565b81516020818401810180516003825292820194820194909420919093529091526000908152604090205460ff1681565b6040519015158152602001610145565b61012e6101bd36600461198c565b61088e565b6001546101d5906001600160a01b031681565b6040516001600160a01b039091168152602001610145565b6102006101fb36600461198c565b61098c565b60405161014591906119ae565b6002546101d5906001600160a01b031681565b610200610af7565b610239610236366004611901565b90565b6040516101459190611a03565b61012e610254366004611901565b610c32565b61012e6102673660046117f9565b61116c565b600754604051908152602001610145565b6000546101d5906001600160a01b031681565b61012e61029e36600461198c565b611355565b6102b66102b1366004611901565b611456565b6040516101459190611a16565b61012e6102d136600461198c565b6114d0565b6000546001600160a01b031633146103095760405162461bcd60e51b815260040161030090611a63565b60405180910390fd5b604051819060049061031c908390611a8a565b9081526040519081900360200190205460ff1661034b5760405162461bcd60e51b815260040161030090611aa6565b60038160405161035b9190611a8a565b90815260408051602092819003830190206001600160a01b0386166000908152925290205460ff166103be5760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185cdcda59db995960a21b6044820152606401610300565b60006003826040516103d09190611a8a565b90815260408051602092819003830181206001600160a01b03881660009081529352908220805460ff19169315159390931790925590600590610414908490611a8a565b9081526020016040518091039020905060005b815481101561052957846001600160a01b031682828154811061044c5761044c611aca565b6000918252602090912001546001600160a01b031603610517578154829061047690600190611af6565b8154811061048657610486611aca565b9060005260206000200160009054906101000a90046001600160a01b03168282815481106104b6576104b6611aca565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550818054806104f4576104f4611b0d565b600082815260209020810160001990810180546001600160a01b03191690550190555b8061052181611b23565b915050610427565b506001600160a01b0384166000908152600660205260408120905b815481101561062a57838051906020012082828154811061056757610567611aca565b9060005260206000200160405161057e9190611b76565b604051809103902003610618578154829061059b90600190611af6565b815481106105ab576105ab611aca565b906000526020600020018282815481106105c7576105c7611aca565b906000526020600020019080546105dd90611b3c565b6105e89291906115ed565b50818054806105f9576105f9611b0d565b6001900381819060005260206000200160006106159190611674565b90555b8061062281611b23565b915050610544565b50826040516106399190611a8a565b604051908190038120906001600160a01b038716907fa4ee8ba3d4fa99564490ccc0d24115c129e1d527ce326e2693fbc6066a42378790600090a35050505050565b60606007805480602002602001604051908101604052809291908181526020016000905b8282101561074b5783829060005260206000200180546106be90611b3c565b80601f01602080910402602001604051908101604052809291908181526020018280546106ea90611b3c565b80156107375780601f1061070c57610100808354040283529160200191610737565b820191906000526020600020905b81548152906001019060200180831161071a57829003601f168201915b50505050508152602001906001019061069f565b50505050905090565b6000546001600160a01b0316331461077e5760405162461bcd60e51b815260040161030090611a63565b6040518190600490610791908390611a8a565b9081526040519081900360200190205460ff16156107dd5760405162461bcd60e51b81526020600482015260096024820152686973206120726f6c6560b81b6044820152606401610300565b60016004826040516107ef9190611a8a565b90815260405160209181900382019020805460ff191692151592909217909155600780546001810182556000919091528251610852927fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688909201918401906116b1565b507f653c7fd6974afa5afbb64671ae46627f13633272e5fb2bd632ecf49713ebfe63816040516108829190611a03565b60405180910390a15050565b6000546001600160a01b031633146108b85760405162461bcd60e51b815260040161030090611c11565b6001600160a01b0381166108f65760405162461bcd60e51b8152602060048201526005602482015264061646472360dc1b6044820152606401610300565b6000546001600160a01b03908116908216036109445760405162461bcd60e51b815260206004820152600d60248201526c73616d65206d756c746973696760981b6044820152606401610300565b600080546001600160a01b0319166001600160a01b038316908117825560405190917fc033e3bf37d7ae29d78fb5f4480cf0a5664ad9e9ccdf1622be5967c3f579a8e191a250565b6001600160a01b0381166000908152600660205260408120546060919067ffffffffffffffff8111156109c1576109c1611756565b6040519080825280602002602001820160405280156109f457816020015b60608152602001906001900390816109df5790505b50905060005b8151811015610af0576001600160a01b0384166000908152600660205260409020805482908110610a2d57610a2d611aca565b906000526020600020018054610a4290611b3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6e90611b3c565b8015610abb5780601f10610a9057610100808354040283529160200191610abb565b820191906000526020600020905b815481529060010190602001808311610a9e57829003601f168201915b5050505050828281518110610ad257610ad2611aca565b60200260200101819052508080610ae890611b23565b9150506109fa565b5092915050565b60075460609067ffffffffffffffff811115610b1557610b15611756565b604051908082528060200260200182016040528015610b4857816020015b6060815260200190600190039081610b335790505b50905060005b600754811015610c2e5760078181548110610b6b57610b6b611aca565b906000526020600020018054610b8090611b3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac90611b3c565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b5050505050828281518110610c1057610c10611aca565b60200260200101819052508080610c2690611b23565b915050610b4e565b5090565b6000546001600160a01b03163314610c5c5760405162461bcd60e51b815260040161030090611a63565b6040518190600490610c6f908390611a8a565b9081526040519081900360200190205460ff16610c9e5760405162461bcd60e51b815260040161030090611aa6565b60005b600754811015610df757818051906020012060078281548110610cc657610cc6611aca565b90600052602060002001604051610cdd9190611b76565b604051809103902003610de55760078054610cfa90600190611af6565b81548110610d0a57610d0a611aca565b9060005260206000200160078281548110610d2757610d27611aca565b90600052602060002001908054610d3d90611b3c565b610d489291906115ed565b506007805480610d5a57610d5a611b0d565b600190038181906000526020600020016000610d769190611674565b90556000600483604051610d8a9190611a8a565b908152604051908190036020018120805492151560ff19909316929092179091557f2c48f81b3be6f2583bd7766be9bead1529f9759f846e854d191bcd3924673d7290610dd8908490611a03565b60405180910390a1610df7565b80610def81611b23565b915050610ca1565b506000600583604051610e0a9190611a8a565b9081526040805191829003602090810183208054808302850183019093528284529190830182828015610e6657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e48575b5050505050905060005b8151811015611166576000600385604051610e8b9190611a8a565b90815260200160405180910390206000848481518110610ead57610ead611aca565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600060066000848481518110610f0457610f04611aca565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610ff8578382906000526020600020018054610f6b90611b3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9790611b3c565b8015610fe45780601f10610fb957610100808354040283529160200191610fe4565b820191906000526020600020905b815481529060010190602001808311610fc757829003601f168201915b505050505081526020019060010190610f4c565b50505050905060005b815181101561115157858051906020012082828151811061102457611024611aca565b6020026020010151805190602001200361113f576007805461104890600190611af6565b8154811061105857611058611aca565b906000526020600020016006600086868151811061107857611078611aca565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002082815481106110b1576110b1611aca565b906000526020600020019080546110c790611b3c565b6110d29291906115ed565b50600660008585815181106110e9576110e9611aca565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002080548061112057611120611b0d565b60019003818190600052602060002001600061113c9190611674565b90555b8061114981611b23565b915050611001565b5050808061115e90611b23565b915050610e70565b50505050565b6000546001600160a01b031633146111965760405162461bcd60e51b815260040161030090611a63565b60405181906004906111a9908390611a8a565b9081526040519081900360200190205460ff166111d85760405162461bcd60e51b815260040161030090611aa6565b6003816040516111e89190611a8a565b90815260408051602092819003830190206001600160a01b0386166000908152925290205460ff16156112485760405162461bcd60e51b8152602060048201526008602482015267185cdcda59db995960c21b6044820152606401610300565b600160038260405161125a9190611a8a565b90815260408051602092819003830181206001600160a01b038816600090815293529120805460ff19169215159290921790915560059061129c908390611a8a565b9081526040805160209281900383019020805460018082018355600092835284832090910180546001600160a01b0319166001600160a01b0389169081179091558252600684529181208054928301815581528290208351611306939190920191908401906116b1565b50806040516113159190611a8a565b604051908190038120906001600160a01b038516907f22efbd5010fe3ab1daad601999aba290f97caf7856c253f4f8ec551873be6dee90600090a3505050565b6001546001600160a01b0316331461137f5760405162461bcd60e51b815260040161030090611c11565b6001600160a01b0381166113be5760405162461bcd60e51b815260206004820152600660248201526506164647220360d41b6044820152606401610300565b6001546001600160a01b039081169082160361140c5760405162461bcd60e51b815260206004820152600d60248201526c73616d65206d756c746973696760981b6044820152606401610300565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f266c9c09b9b435932992b96d7c3c05c61c93621e28994f6089020488e3b7d0ba90600090a250565b60606005826040516114689190611a8a565b90815260408051918290036020908101832080548083028501830190935282845291908301828280156114c457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114a6575b50505050509050919050565b6002546001600160a01b03163314806114f357506000546001600160a01b031633145b61150f5760405162461bcd60e51b815260040161030090611c11565b6001600160a01b03811661154d5760405162461bcd60e51b8152602060048201526005602482015264061646472360dc1b6044820152606401610300565b6002546001600160a01b03908116908216036115a35760405162461bcd60e51b81526020600482015260156024820152741cd85b5948195b595c99d95b98de50dbdd5b98da5b605a1b6044820152606401610300565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f6eba45b867b647f00a6a295ba1fdfc5929f1b38a68a3beda302d7eab77b9029a90600090a250565b8280546115f990611b3c565b90600052602060002090601f01602090048101928261161b5760008555611668565b82601f1061162c5780548555611668565b8280016001018555821561166857600052602060002091601f016020900482015b8281111561166857825482559160010191906001019061164d565b50610c2e929150611725565b50805461168090611b3c565b6000825580601f10611690575050565b601f0160209004906000526020600020908101906116ae9190611725565b50565b8280546116bd90611b3c565b90600052602060002090601f0160209004810192826116df5760008555611668565b82601f106116f857805160ff1916838001178555611668565b82800160010185558215611668579182015b8281111561166857825182559160200191906001019061170a565b5b80821115610c2e5760008155600101611726565b80356001600160a01b038116811461175157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261177d57600080fd5b813567ffffffffffffffff8082111561179857611798611756565b604051601f8301601f19908116603f011681019082821181831017156117c0576117c0611756565b816040528381528660208588010111156117d957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561180c57600080fd5b6118158361173a565b9150602083013567ffffffffffffffff81111561183157600080fd5b61183d8582860161176c565b9150509250929050565b60005b8381101561186257818101518382015260200161184a565b838111156111665750506000910152565b6000815180845261188b816020860160208601611847565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156118f457603f198886030184526118e2858351611873565b945092850192908501906001016118c6565b5092979650505050505050565b60006020828403121561191357600080fd5b813567ffffffffffffffff81111561192a57600080fd5b6119368482850161176c565b949350505050565b6000806040838503121561195157600080fd5b823567ffffffffffffffff81111561196857600080fd5b6119748582860161176c565b9250506119836020840161173a565b90509250929050565b60006020828403121561199e57600080fd5b6119a78261173a565b9392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156118f457603f198886030184526119f1858351611873565b945092850192908501906001016119d5565b6020815260006119a76020830184611873565b6020808252825182820181905260009190848201906040850190845b81811015611a575783516001600160a01b031683529284019291840191600101611a32565b50909695505050505050565b6020808252600d908201526c21737770784d756c746973696760981b604082015260600190565b60008251611a9c818460208701611847565b9190910192915050565b6020808252600a90820152696e6f74206120726f6c6560b01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015611b0857611b08611ae0565b500390565b634e487b7160e01b600052603160045260246000fd5b600060018201611b3557611b35611ae0565b5060010190565b600181811c90821680611b5057607f821691505b602082108103611b7057634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c915080831680611b9257607f831692505b60208084108203611bb157634e487b7160e01b86526022600452602486fd5b818015611bc55760018114611bd657611c03565b60ff19861689528489019650611c03565b60008a81526020902060005b86811015611bfb5781548b820152908501908301611be2565b505084890196505b509498975050505050505050565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b60408201526060019056fea264697066735822122025fa50a828b0753bdc0ae4486e67aa97aaf7fdde31220a564f6073ac8936c70264736f6c634300080d0033

Block Transaction 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
[ 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.