Contract

0x7D5f6108e23c0CB2cfD744E5c46f1aAfFc30A348

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

-

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer Ownersh...7303602024-12-19 17:02:224 days ago1734627742IN
0x7D5f6108...fFc30A348
0 S0.000035891.11
Set User Role7273092024-12-19 16:40:554 days ago1734626455IN
0x7D5f6108...fFc30A348
0 S0.000036961
Set User Role7273052024-12-19 16:40:544 days ago1734626454IN
0x7D5f6108...fFc30A348
0 S0.000036961
Set Public Capab...6712682024-12-19 7:58:265 days ago1734595106IN
0x7D5f6108...fFc30A348
0 S0.000032281
Set Public Capab...6712652024-12-19 7:58:255 days ago1734595105IN
0x7D5f6108...fFc30A348
0 S0.000032281
Set Public Capab...6712612024-12-19 7:58:235 days ago1734595103IN
0x7D5f6108...fFc30A348
0 S0.000032281
Set Public Capab...6712582024-12-19 7:58:225 days ago1734595102IN
0x7D5f6108...fFc30A348
0 S0.000032281
Set Public Capab...6712542024-12-19 7:58:205 days ago1734595100IN
0x7D5f6108...fFc30A348
0 S0.000032281
Set Public Capab...6712522024-12-19 7:58:195 days ago1734595099IN
0x7D5f6108...fFc30A348
0 S0.000032281
Set Role Capabil...6712502024-12-19 7:58:145 days ago1734595094IN
0x7D5f6108...fFc30A348
0 S0.000056711
Set Role Capabil...6712482024-12-19 7:58:135 days ago1734595093IN
0x7D5f6108...fFc30A348
0 S0.000056711
Set User Role6712452024-12-19 7:58:115 days ago1734595091IN
0x7D5f6108...fFc30A348
0 S0.000036961
Set User Role6712442024-12-19 7:58:095 days ago1734595089IN
0x7D5f6108...fFc30A348
0 S0.00003191
Set User Role6712422024-12-19 7:58:085 days ago1734595088IN
0x7D5f6108...fFc30A348
0 S0.00003671
Set User Role6712412024-12-19 7:58:065 days ago1734595086IN
0x7D5f6108...fFc30A348
0 S0.00003671
Set User Role6712382024-12-19 7:58:055 days ago1734595085IN
0x7D5f6108...fFc30A348
0 S0.00003671
Set User Role6712352024-12-19 7:58:035 days ago1734595083IN
0x7D5f6108...fFc30A348
0 S0.000055791
Set User Role6712332024-12-19 7:58:015 days ago1734595081IN
0x7D5f6108...fFc30A348
0 S0.000036981
Set User Role6712292024-12-19 7:58:005 days ago1734595080IN
0x7D5f6108...fFc30A348
0 S0.000036981
Set User Role6712252024-12-19 7:57:585 days ago1734595078IN
0x7D5f6108...fFc30A348
0 S0.000036981
Set User Role6712232024-12-19 7:57:575 days ago1734595077IN
0x7D5f6108...fFc30A348
0 S0.000036981
Set User Role6712192024-12-19 7:57:555 days ago1734595075IN
0x7D5f6108...fFc30A348
0 S0.000055791
Set User Role6712162024-12-19 7:57:535 days ago1734595073IN
0x7D5f6108...fFc30A348
0 S0.000036981
Set User Role6712152024-12-19 7:57:525 days ago1734595072IN
0x7D5f6108...fFc30A348
0 S0.000036981
Set User Role6712122024-12-19 7:57:505 days ago1734595070IN
0x7D5f6108...fFc30A348
0 S0.000036981
View all transactions

Latest 1 internal transaction

Parent Transaction Hash Block From To
5880282024-12-18 16:51:135 days ago1734540673  Contract Creation0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RolesAuthority

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
File 1 of 2 : RolesAuthority.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

import {Auth, Authority} from "../Auth.sol";

/// @notice Role based Authority that supports up to 256 roles.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/authorities/RolesAuthority.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-roles/blob/master/src/roles.sol)
contract RolesAuthority is Auth, Authority {
    /*//////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event UserRoleUpdated(address indexed user, uint8 indexed role, bool enabled);

    event PublicCapabilityUpdated(address indexed target, bytes4 indexed functionSig, bool enabled);

    event RoleCapabilityUpdated(uint8 indexed role, address indexed target, bytes4 indexed functionSig, bool enabled);

    /*//////////////////////////////////////////////////////////////
                               CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(address _owner, Authority _authority) Auth(_owner, _authority) {}

    /*//////////////////////////////////////////////////////////////
                            ROLE/USER STORAGE
    //////////////////////////////////////////////////////////////*/

    mapping(address => bytes32) public getUserRoles;

    mapping(address => mapping(bytes4 => bool)) public isCapabilityPublic;

    mapping(address => mapping(bytes4 => bytes32)) public getRolesWithCapability;

    function doesUserHaveRole(address user, uint8 role) public view virtual returns (bool) {
        return (uint256(getUserRoles[user]) >> role) & 1 != 0;
    }

    function doesRoleHaveCapability(
        uint8 role,
        address target,
        bytes4 functionSig
    ) public view virtual returns (bool) {
        return (uint256(getRolesWithCapability[target][functionSig]) >> role) & 1 != 0;
    }

    /*//////////////////////////////////////////////////////////////
                           AUTHORIZATION LOGIC
    //////////////////////////////////////////////////////////////*/

    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) public view virtual override returns (bool) {
        return
            isCapabilityPublic[target][functionSig] ||
            bytes32(0) != getUserRoles[user] & getRolesWithCapability[target][functionSig];
    }

    /*//////////////////////////////////////////////////////////////
                   ROLE CAPABILITY CONFIGURATION LOGIC
    //////////////////////////////////////////////////////////////*/

    function setPublicCapability(
        address target,
        bytes4 functionSig,
        bool enabled
    ) public virtual requiresAuth {
        isCapabilityPublic[target][functionSig] = enabled;

        emit PublicCapabilityUpdated(target, functionSig, enabled);
    }

    function setRoleCapability(
        uint8 role,
        address target,
        bytes4 functionSig,
        bool enabled
    ) public virtual requiresAuth {
        if (enabled) {
            getRolesWithCapability[target][functionSig] |= bytes32(1 << role);
        } else {
            getRolesWithCapability[target][functionSig] &= ~bytes32(1 << role);
        }

        emit RoleCapabilityUpdated(role, target, functionSig, enabled);
    }

    /*//////////////////////////////////////////////////////////////
                       USER ROLE ASSIGNMENT LOGIC
    //////////////////////////////////////////////////////////////*/

    function setUserRole(
        address user,
        uint8 role,
        bool enabled
    ) public virtual requiresAuth {
        if (enabled) {
            getUserRoles[user] |= bytes32(1 << role);
        } else {
            getUserRoles[user] &= ~bytes32(1 << role);
        }

        emit UserRoleUpdated(user, role, enabled);
    }
}

File 2 of 2 : Auth.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Provides a flexible and updatable auth pattern which is completely separate from application logic.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
abstract contract Auth {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    event AuthorityUpdated(address indexed user, Authority indexed newAuthority);

    address public owner;

    Authority public authority;

    constructor(address _owner, Authority _authority) {
        owner = _owner;
        authority = _authority;

        emit OwnershipTransferred(msg.sender, _owner);
        emit AuthorityUpdated(msg.sender, _authority);
    }

    modifier requiresAuth() virtual {
        require(isAuthorized(msg.sender, msg.sig), "UNAUTHORIZED");

        _;
    }

    function isAuthorized(address user, bytes4 functionSig) internal view virtual returns (bool) {
        Authority auth = authority; // Memoizing authority saves us a warm SLOAD, around 100 gas.

        // Checking if the caller is the owner only after calling the authority saves gas in most cases, but be
        // aware that this makes protected functions uncallable even to the owner if the authority is out of order.
        return (address(auth) != address(0) && auth.canCall(user, address(this), functionSig)) || user == owner;
    }

    function setAuthority(Authority newAuthority) public virtual {
        // We check if the caller is the owner first because we want to ensure they can
        // always swap out the authority even if it's reverting or using up a lot of gas.
        require(msg.sender == owner || authority.canCall(msg.sender, address(this), msg.sig));

        authority = newAuthority;

        emit AuthorityUpdated(msg.sender, newAuthority);
    }

    function transferOwnership(address newOwner) public virtual requiresAuth {
        owner = newOwner;

        emit OwnershipTransferred(msg.sender, newOwner);
    }
}

/// @notice A generic interface for a contract which provides authorization data to an Auth instance.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Auth.sol)
/// @author Modified from Dappsys (https://github.com/dapphub/ds-auth/blob/master/src/auth.sol)
interface Authority {
    function canCall(
        address user,
        address target,
        bytes4 functionSig
    ) external view returns (bool);
}

Settings
{
  "remappings": [
    "@solmate/=lib/solmate/src/",
    "@forge-std/=lib/forge-std/src/",
    "@ds-test/=lib/forge-std/lib/ds-test/src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "@ccip/=lib/ccip/",
    "@oapp-auth/=lib/OAppAuth/src/",
    "@devtools-oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/contracts/oapp/",
    "@layerzerolabs/lz-evm-messagelib-v2/=lib/OAppAuth/node_modules/@layerzerolabs/lz-evm-messagelib-v2/",
    "@layerzerolabs/lz-evm-protocol-v2/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/protocol/",
    "@layerzerolabs/oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/",
    "@lz-oapp-evm/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/oapp/contracts/oapp/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "@sbu/=lib/OAppAuth/lib/solidity-bytes-utils/",
    "LayerZero-V2/=lib/OAppAuth/lib/",
    "OAppAuth/=lib/OAppAuth/",
    "ccip/=lib/ccip/contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "halmos-cheatcodes/=lib/OAppAuth/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "solidity-bytes-utils/=lib/OAppAuth/node_modules/solidity-bytes-utils/",
    "solmate/=lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"contract Authority","name":"_authority","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"AuthorityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"PublicCapabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":true,"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"RoleCapabilityUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint8","name":"role","type":"uint8"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"UserRoleUpdated","type":"event"},{"inputs":[],"name":"authority","outputs":[{"internalType":"contract Authority","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"}],"name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"}],"name":"doesRoleHaveCapability","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"role","type":"uint8"}],"name":"doesUserHaveRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"getRolesWithCapability","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getUserRoles","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"isCapabilityPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract Authority","name":"newAuthority","type":"address"}],"name":"setAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPublicCapability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSig","type":"bytes4"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setRoleCapability","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint8","name":"role","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setUserRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051610b9c380380610b9c83398101604081905261002f916100e1565b600080546001600160a01b03199081166001600160a01b0385811691821784556001805490931690851617909155604051849284929133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a35050505061011b565b6001600160a01b03811681146100de57600080fd5b50565b600080604083850312156100f457600080fd5b82516100ff816100c9565b6020840151909250610110816100c9565b809150509250929050565b610a728061012a6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063bf7e214f11610066578063bf7e214f14610236578063c6b0263e14610249578063ea7ca2761461025c578063f2fde38b1461029357600080fd5b80638da5cb5b146101ab578063b4bad06a146101d6578063b70096131461022357600080fd5b806306a36aee146100d45780632f47571f1461010757806367aff484146101455780637917b7941461015a5780637a9e5e4b146101855780637d40583d14610198575b600080fd5b6100f46100e23660046107d7565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b610135610115366004610818565b600360209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100fe565b61015861015336600461086c565b6102a6565b005b6100f4610168366004610818565b600460209081526000928352604080842090915290825290205481565b6101586101933660046107d7565b610384565b6101586101a63660046108b5565b61046e565b6000546101be906001600160a01b031681565b6040516001600160a01b0390911681526020016100fe565b6101356101e436600461090d565b6001600160a01b039190911660009081526004602090815260408083206001600160e01b031990941683529290522054600160ff929092161c16151590565b610135610231366004610952565b610579565b6001546101be906001600160a01b031681565b610158610257366004610972565b6105f8565b61013561026a3660046109a0565b6001600160a01b0391909116600090815260026020526040902054600160ff9092161c16151590565b6101586102a13660046107d7565b610699565b6102bc336000356001600160e01b031916610716565b6102e15760405162461bcd60e51b81526004016102d8906109cc565b60405180910390fd5b8015610310576001600160a01b03831660009081526002602052604090208054600160ff85161b179055610336565b6001600160a01b03831660009081526002602052604090208054600160ff85161b191690555b8160ff16836001600160a01b03167f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf283604051610377911515815260200190565b60405180910390a3505050565b6000546001600160a01b0316331480610419575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906103d890339030906001600160e01b031960003516906004016109f2565b602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610a1f565b61042257600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b610484336000356001600160e01b031916610716565b6104a05760405162461bcd60e51b81526004016102d8906109cc565b80156104e4576001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b17905561051f565b6001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b191690555b816001600160e01b031916836001600160a01b03168560ff167fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e8460405161056b911515815260200190565b60405180910390a450505050565b6001600160a01b03821660009081526003602090815260408083206001600160e01b03198516845290915281205460ff16806105f057506001600160a01b0380841660009081526004602090815260408083206001600160e01b031987168452825280832054938816835260029091529020541615155b949350505050565b61060e336000356001600160e01b031916610716565b61062a5760405162461bcd60e51b81526004016102d8906109cc565b6001600160a01b03831660008181526003602090815260408083206001600160e01b0319871680855290835292819020805460ff191686151590811790915590519081529192917f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9101610377565b6106af336000356001600160e01b031916610716565b6106cb5760405162461bcd60e51b81526004016102d8906109cc565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001546000906001600160a01b031680158015906107a0575060405163b700961360e01b81526001600160a01b0382169063b70096139061075f908790309088906004016109f2565b602060405180830381865afa15801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190610a1f565b806105f057506000546001600160a01b03858116911614949350505050565b6001600160a01b03811681146107d457600080fd5b50565b6000602082840312156107e957600080fd5b81356107f4816107bf565b9392505050565b80356001600160e01b03198116811461081357600080fd5b919050565b6000806040838503121561082b57600080fd5b8235610836816107bf565b9150610844602084016107fb565b90509250929050565b803560ff8116811461081357600080fd5b80151581146107d457600080fd5b60008060006060848603121561088157600080fd5b833561088c816107bf565b925061089a6020850161084d565b915060408401356108aa8161085e565b809150509250925092565b600080600080608085870312156108cb57600080fd5b6108d48561084d565b935060208501356108e4816107bf565b92506108f2604086016107fb565b915060608501356109028161085e565b939692955090935050565b60008060006060848603121561092257600080fd5b61092b8461084d565b9250602084013561093b816107bf565b9150610949604085016107fb565b90509250925092565b60008060006060848603121561096757600080fd5b833561092b816107bf565b60008060006060848603121561098757600080fd5b8335610992816107bf565b925061089a602085016107fb565b600080604083850312156109b357600080fd5b82356109be816107bf565b91506108446020840161084d565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215610a3157600080fd5b81516107f48161085e56fea26469706673582212200f1f0819869ebc74004492c1b2e05c8c67a7beb3788bbc39ce4b1805a4f136ec64736f6c634300081500330000000000000000000000005f2f11ad8656439d5c14d9b351f8b09cdac2a02d0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063bf7e214f11610066578063bf7e214f14610236578063c6b0263e14610249578063ea7ca2761461025c578063f2fde38b1461029357600080fd5b80638da5cb5b146101ab578063b4bad06a146101d6578063b70096131461022357600080fd5b806306a36aee146100d45780632f47571f1461010757806367aff484146101455780637917b7941461015a5780637a9e5e4b146101855780637d40583d14610198575b600080fd5b6100f46100e23660046107d7565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b610135610115366004610818565b600360209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016100fe565b61015861015336600461086c565b6102a6565b005b6100f4610168366004610818565b600460209081526000928352604080842090915290825290205481565b6101586101933660046107d7565b610384565b6101586101a63660046108b5565b61046e565b6000546101be906001600160a01b031681565b6040516001600160a01b0390911681526020016100fe565b6101356101e436600461090d565b6001600160a01b039190911660009081526004602090815260408083206001600160e01b031990941683529290522054600160ff929092161c16151590565b610135610231366004610952565b610579565b6001546101be906001600160a01b031681565b610158610257366004610972565b6105f8565b61013561026a3660046109a0565b6001600160a01b0391909116600090815260026020526040902054600160ff9092161c16151590565b6101586102a13660046107d7565b610699565b6102bc336000356001600160e01b031916610716565b6102e15760405162461bcd60e51b81526004016102d8906109cc565b60405180910390fd5b8015610310576001600160a01b03831660009081526002602052604090208054600160ff85161b179055610336565b6001600160a01b03831660009081526002602052604090208054600160ff85161b191690555b8160ff16836001600160a01b03167f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf283604051610377911515815260200190565b60405180910390a3505050565b6000546001600160a01b0316331480610419575060015460405163b700961360e01b81526001600160a01b039091169063b7009613906103d890339030906001600160e01b031960003516906004016109f2565b602060405180830381865afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190610a1f565b61042257600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b610484336000356001600160e01b031916610716565b6104a05760405162461bcd60e51b81526004016102d8906109cc565b80156104e4576001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b17905561051f565b6001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b191690555b816001600160e01b031916836001600160a01b03168560ff167fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e8460405161056b911515815260200190565b60405180910390a450505050565b6001600160a01b03821660009081526003602090815260408083206001600160e01b03198516845290915281205460ff16806105f057506001600160a01b0380841660009081526004602090815260408083206001600160e01b031987168452825280832054938816835260029091529020541615155b949350505050565b61060e336000356001600160e01b031916610716565b61062a5760405162461bcd60e51b81526004016102d8906109cc565b6001600160a01b03831660008181526003602090815260408083206001600160e01b0319871680855290835292819020805460ff191686151590811790915590519081529192917f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9101610377565b6106af336000356001600160e01b031916610716565b6106cb5760405162461bcd60e51b81526004016102d8906109cc565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001546000906001600160a01b031680158015906107a0575060405163b700961360e01b81526001600160a01b0382169063b70096139061075f908790309088906004016109f2565b602060405180830381865afa15801561077c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a09190610a1f565b806105f057506000546001600160a01b03858116911614949350505050565b6001600160a01b03811681146107d457600080fd5b50565b6000602082840312156107e957600080fd5b81356107f4816107bf565b9392505050565b80356001600160e01b03198116811461081357600080fd5b919050565b6000806040838503121561082b57600080fd5b8235610836816107bf565b9150610844602084016107fb565b90509250929050565b803560ff8116811461081357600080fd5b80151581146107d457600080fd5b60008060006060848603121561088157600080fd5b833561088c816107bf565b925061089a6020850161084d565b915060408401356108aa8161085e565b809150509250925092565b600080600080608085870312156108cb57600080fd5b6108d48561084d565b935060208501356108e4816107bf565b92506108f2604086016107fb565b915060608501356109028161085e565b939692955090935050565b60008060006060848603121561092257600080fd5b61092b8461084d565b9250602084013561093b816107bf565b9150610949604085016107fb565b90509250925092565b60008060006060848603121561096757600080fd5b833561092b816107bf565b60008060006060848603121561098757600080fd5b8335610992816107bf565b925061089a602085016107fb565b600080604083850312156109b357600080fd5b82356109be816107bf565b91506108446020840161084d565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215610a3157600080fd5b81516107f48161085e56fea26469706673582212200f1f0819869ebc74004492c1b2e05c8c67a7beb3788bbc39ce4b1805a4f136ec64736f6c63430008150033

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

0000000000000000000000005f2f11ad8656439d5c14d9b351f8b09cdac2a02d0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _owner (address): 0x5F2F11ad8656439d5C14d9B351f8b09cDaC2A02d
Arg [1] : _authority (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005f2f11ad8656439d5c14d9b351f8b09cdac2a02d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


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  ]
[ 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.