Contract

0x8751ea0634f85474c94e8462e93751D2104Ed487

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

-

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Swapx Multis...14834672024-12-24 17:03:0816 days ago1735059788IN
0x8751ea06...2104Ed487
0 S0.000031111.1
Set Swapx Team M...14825152024-12-24 16:47:2016 days ago1735058840IN
0x8751ea06...2104Ed487
0 S0.000031161.1
Set Emergency Co...14824782024-12-24 16:46:4616 days ago1735058806IN
0x8751ea06...2104Ed487
0 S0.000031231.1
Set Role For14824132024-12-24 16:45:4816 days ago1735058748IN
0x8751ea06...2104Ed487
0 S0.000137181.1
Set Role For14824102024-12-24 16:45:4616 days ago1735058746IN
0x8751ea06...2104Ed487
0 S0.000137061.1
Set Role For14824082024-12-24 16:45:4616 days ago1735058746IN
0x8751ea06...2104Ed487
0 S0.000118261.1
Set Role For14823662024-12-24 16:45:1516 days ago1735058715IN
0x8751ea06...2104Ed487
0 S0.000118261.1
Set Role For14744412024-12-24 15:20:5516 days ago1735053655IN
0x8751ea06...2104Ed487
0 S0.000137071.1
Set Role For14744352024-12-24 15:20:5016 days ago1735053650IN
0x8751ea06...2104Ed487
0 S0.000155881.1
Set Role For14744292024-12-24 15:20:4616 days ago1735053646IN
0x8751ea06...2104Ed487
0 S0.000155881.1

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

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x8CeFA409...9950c30C8
The constructor portion of the code might be different and could alter the actual behaviour of the contract

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"}]

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.