ETH Price: $2,430.69 (-9.58%)

Contract

0xbd04750EC4ecc513C81db997F06D615349D6215D

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RolesRepo

Compiler Version
v0.8.8+commit.dddeac2f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: UNLICENSED

/* *
 * Copyright (c) 2021-2023 LI LI @ JINGTIAN & GONGCHENG.
 *
 * This WORK is licensed under ComBoox SoftWare License 1.0, a copy of which 
 * can be obtained at:
 *         [https://github.com/paul-lee-attorney/comboox]
 *
 * THIS WORK IS PROVIDED ON AN "AS IS" BASIS, WITHOUT 
 * WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
 * TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. IN NO 
 * EVENT SHALL ANY CONTRIBUTOR BE LIABLE TO YOU FOR ANY DAMAGES.
 *
 * YOU ARE PROHIBITED FROM DEPLOYING THE SMART CONTRACTS OF THIS WORK, IN WHOLE 
 * OR IN PART, FOR WHATEVER PURPOSE, ON ANY BLOCKCHAIN NETWORK THAT HAS ONE OR 
 * MORE NODES THAT ARE OUT OF YOUR CONTROL.
 * */

pragma solidity ^0.8.8;

library RolesRepo {

    struct Role {
        address admin;
        mapping(address => bool) isMember;
    }

    struct Repo {
        address owner;
        uint8 state; // 0-pending; 1-initiated; 2-finalized
        mapping(bytes32 => Role) roles;
    }

    // ##################
    // ##    Modifier  ##
    // ##################

    modifier isOwner(Repo storage repo, address caller) {
        require(
            repo.owner == caller,
            "RR.isOwner: not owner"
        );
        _;
    }

    modifier isRoleAdmin(Repo storage repo, bytes32 role, 
        address caller) 
    {
        require(
            repo.roles[role].admin == caller, 
            "RR.isRoleAdmin: not admin"
        );
        _;
    }

    // #################
    // ##    Write    ##
    // #################

    function initDoc(Repo storage repo, address owner) public 
    {
        require(repo.state == 0, "already initiated");
        repo.state = 1;
        repo.owner = owner;
    }

    function setOwner(
        Repo storage repo, 
        address acct,
        address caller
    ) public isOwner(repo, caller){
        repo.owner = acct;
    }

    // ==== role ====

    function setRoleAdmin(
        Repo storage repo,
        bytes32 role,
        address acct,
        address caller
    ) public isOwner(repo, caller) {
        repo.roles[role].admin = acct;
        repo.roles[role].isMember[acct] = true;
    }

    function quitRoleAdmin(
        Repo storage repo,
        bytes32 role,
        address caller
    ) public isRoleAdmin(repo, role, caller) {
        delete repo.roles[role].admin;
        delete repo.roles[role].isMember[caller];
    }
    
    function grantRole(
        Repo storage repo,
        bytes32 role,
        address acct,
        address caller
    ) public isRoleAdmin(repo, role, caller) {
        repo.roles[role].isMember[acct] = true;
    }

    function revokeRole(
        Repo storage repo,
        bytes32 role,
        address acct,
        address caller
    ) public isRoleAdmin(repo, role, caller) {
        delete repo.roles[role].isMember[acct];
    }

    function renounceRole(
        Repo storage repo,
        bytes32 role,
        address caller
    ) public {
        delete repo.roles[role].isMember[caller];
    }

    function abandonRole(
        Repo storage repo,
        bytes32 role,
        address caller
    ) public isOwner(repo, caller) {
        delete repo.roles[role];
    }

    // ###############
    // ##   Read    ##
    // ###############

    function getOwner(
        Repo storage repo
    ) public view returns (address) {
        return repo.owner;
    }

    function getRoleAdmin(Repo storage repo, bytes32 role)
        public view returns (address)
    {
        return repo.roles[role].admin;
    }

    function hasRole(
        Repo storage repo,
        bytes32 role,
        address acct
    ) public view returns (bool) {
        return repo.roles[role].isMember[acct];
    }
}

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

Contract Security Audit

Contract ABI

API
[]

61077e61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100b35760003560e01c80639423dd051161007b5780639423dd05146101bc57806394916c47146102015780639fd7a4801461021c578063a2b745dd1461023c578063bf2755e31461025c578063f17b81511461027c57600080fd5b80632c7ebf73146100b8578063303b779f1461010c5780633d3c5d271461012e57806351e7e8051461014e5780635a2cc4461461016e575b600080fd5b6100f76100c63660046105cd565b60009182526001928301602090815260408084206001600160a01b0393909316845291909301909252205460ff1690565b60405190151581526020015b60405180910390f35b81801561011857600080fd5b5061012c610127366004610602565b61029c565b005b81801561013a57600080fd5b5061012c610149366004610602565b61031d565b81801561015a57600080fd5b5061012c610169366004610648565b610397565b81801561017a57600080fd5b5061012c6101893660046105cd565b60009182526001928301602090815260408084206001600160a01b0390931684529190930190925220805460ff19169055565b6101e96101ca36600461067b565b600090815260019190910160205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610103565b6101e961020f36600461069d565b546001600160a01b031690565b81801561022857600080fd5b5061012c6102373660046106b6565b6103eb565b81801561024857600080fd5b5061012c6102573660046105cd565b61045c565b81801561026857600080fd5b5061012c6102773660046105cd565b6104e2565b81801561028857600080fd5b5061012c610297366004610602565b610536565b60008381526001850160205260409020548490849083906001600160a01b038083169116146102e65760405162461bcd60e51b81526004016102dd906106e2565b60405180910390fd5b5050506000928352506001928301602090815260408084206001600160a01b0390931684529190930190925220805460ff19169055565b60008381526001850160205260409020548490849083906001600160a01b0380831691161461035e5760405162461bcd60e51b81526004016102dd906106e2565b5050506000928352506001928301602090815260408084206001600160a01b03909316845291840190529020805460ff19169091179055565b8254839082906001600160a01b038083169116146103c75760405162461bcd60e51b81526004016102dd90610719565b505082546001600160a01b0319166001600160a01b03929092169190911790915550565b8154600160a01b900460ff16156104385760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481a5b9a5d1a585d1959607a1b60448201526064016102dd565b81546001600160a01b039091166001600160a81b031990911617600160a01b179055565b60008281526001840160205260409020548390839083906001600160a01b0380831691161461049d5760405162461bcd60e51b81526004016102dd906106e2565b505050600091825260019283016020908152604080842080546001600160a01b03191681556001600160a01b039390931684529190930190925220805460ff19169055565b8254839082906001600160a01b038083169116146105125760405162461bcd60e51b81526004016102dd90610719565b505050600090815260019091016020526040902080546001600160a01b0319169055565b8354849082906001600160a01b038083169116146105665760405162461bcd60e51b81526004016102dd90610719565b505050600091825260019283016020908152604080842080546001600160a01b039094166001600160a01b03199094168417815592845291840190529020805460ff19169091179055565b80356001600160a01b03811681146105c857600080fd5b919050565b6000806000606084860312156105e257600080fd5b83359250602084013591506105f9604085016105b1565b90509250925092565b6000806000806080858703121561061857600080fd5b843593506020850135925061062f604086016105b1565b915061063d606086016105b1565b905092959194509250565b60008060006060848603121561065d57600080fd5b8335925061066d602085016105b1565b91506105f9604085016105b1565b6000806040838503121561068e57600080fd5b50508035926020909101359150565b6000602082840312156106af57600080fd5b5035919050565b600080604083850312156106c957600080fd5b823591506106d9602084016105b1565b90509250929050565b60208082526019908201527f52522e6973526f6c6541646d696e3a206e6f742061646d696e00000000000000604082015260600190565b60208082526015908201527429291734b9a7bbb732b91d103737ba1037bbb732b960591b60408201526060019056fea26469706673582212204826e5c3088bb73dcf2f83c65bc3ea9df047e287da408713205be028f943447664736f6c63430008080033

Deployed Bytecode

0x73bd04750ec4ecc513c81db997f06d615349d6215d30146080604052600436106100b35760003560e01c80639423dd051161007b5780639423dd05146101bc57806394916c47146102015780639fd7a4801461021c578063a2b745dd1461023c578063bf2755e31461025c578063f17b81511461027c57600080fd5b80632c7ebf73146100b8578063303b779f1461010c5780633d3c5d271461012e57806351e7e8051461014e5780635a2cc4461461016e575b600080fd5b6100f76100c63660046105cd565b60009182526001928301602090815260408084206001600160a01b0393909316845291909301909252205460ff1690565b60405190151581526020015b60405180910390f35b81801561011857600080fd5b5061012c610127366004610602565b61029c565b005b81801561013a57600080fd5b5061012c610149366004610602565b61031d565b81801561015a57600080fd5b5061012c610169366004610648565b610397565b81801561017a57600080fd5b5061012c6101893660046105cd565b60009182526001928301602090815260408084206001600160a01b0390931684529190930190925220805460ff19169055565b6101e96101ca36600461067b565b600090815260019190910160205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610103565b6101e961020f36600461069d565b546001600160a01b031690565b81801561022857600080fd5b5061012c6102373660046106b6565b6103eb565b81801561024857600080fd5b5061012c6102573660046105cd565b61045c565b81801561026857600080fd5b5061012c6102773660046105cd565b6104e2565b81801561028857600080fd5b5061012c610297366004610602565b610536565b60008381526001850160205260409020548490849083906001600160a01b038083169116146102e65760405162461bcd60e51b81526004016102dd906106e2565b60405180910390fd5b5050506000928352506001928301602090815260408084206001600160a01b0390931684529190930190925220805460ff19169055565b60008381526001850160205260409020548490849083906001600160a01b0380831691161461035e5760405162461bcd60e51b81526004016102dd906106e2565b5050506000928352506001928301602090815260408084206001600160a01b03909316845291840190529020805460ff19169091179055565b8254839082906001600160a01b038083169116146103c75760405162461bcd60e51b81526004016102dd90610719565b505082546001600160a01b0319166001600160a01b03929092169190911790915550565b8154600160a01b900460ff16156104385760405162461bcd60e51b8152602060048201526011602482015270185b1c9958591e481a5b9a5d1a585d1959607a1b60448201526064016102dd565b81546001600160a01b039091166001600160a81b031990911617600160a01b179055565b60008281526001840160205260409020548390839083906001600160a01b0380831691161461049d5760405162461bcd60e51b81526004016102dd906106e2565b505050600091825260019283016020908152604080842080546001600160a01b03191681556001600160a01b039390931684529190930190925220805460ff19169055565b8254839082906001600160a01b038083169116146105125760405162461bcd60e51b81526004016102dd90610719565b505050600090815260019091016020526040902080546001600160a01b0319169055565b8354849082906001600160a01b038083169116146105665760405162461bcd60e51b81526004016102dd90610719565b505050600091825260019283016020908152604080842080546001600160a01b039094166001600160a01b03199094168417815592845291840190529020805460ff19169091179055565b80356001600160a01b03811681146105c857600080fd5b919050565b6000806000606084860312156105e257600080fd5b83359250602084013591506105f9604085016105b1565b90509250925092565b6000806000806080858703121561061857600080fd5b843593506020850135925061062f604086016105b1565b915061063d606086016105b1565b905092959194509250565b60008060006060848603121561065d57600080fd5b8335925061066d602085016105b1565b91506105f9604085016105b1565b6000806040838503121561068e57600080fd5b50508035926020909101359150565b6000602082840312156106af57600080fd5b5035919050565b600080604083850312156106c957600080fd5b823591506106d9602084016105b1565b90509250929050565b60208082526019908201527f52522e6973526f6c6541646d696e3a206e6f742061646d696e00000000000000604082015260600190565b60208082526015908201527429291734b9a7bbb732b91d103737ba1037bbb732b960591b60408201526060019056fea26469706673582212204826e5c3088bb73dcf2f83c65bc3ea9df047e287da408713205be028f943447664736f6c63430008080033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

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

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.