Bird
Raised Fist0
Blockchain / Solidityprogramming~5 mins

Access control patterns in Blockchain / Solidity - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is Access Control in blockchain?
Access Control in blockchain means deciding who can do what actions on the blockchain, like reading data or making changes. It helps keep the system safe by allowing only trusted users to perform certain tasks.
Click to reveal answer
beginner
Explain the Role-Based Access Control (RBAC) pattern.
RBAC gives permissions to users based on their roles. For example, an 'admin' role can add or remove users, while a 'viewer' role can only see data. This makes managing permissions easier and clearer.
Click to reveal answer
intermediate
What is the Attribute-Based Access Control (ABAC) pattern?
ABAC controls access by checking user attributes like age, location, or membership status. It uses rules that combine these attributes to decide if someone can do an action.
Click to reveal answer
intermediate
Describe the Capability-Based Access Control pattern.
This pattern gives users special tokens or 'capabilities' that prove they have permission to do certain actions. If a user has the right token, they can perform the action without checking roles or attributes every time.
Click to reveal answer
beginner
Why is Access Control important in smart contracts?
Smart contracts run automatically and control valuable assets. Access control ensures only authorized users can trigger sensitive functions, preventing theft or mistakes.
Click to reveal answer
Which access control pattern assigns permissions based on user roles?
ARole-Based Access Control (RBAC)
BAttribute-Based Access Control (ABAC)
CCapability-Based Access Control
DDiscretionary Access Control
In ABAC, access decisions are made based on:
AUser attributes and rules
BTokens or capabilities
CUser roles only
DFixed permissions
What does Capability-Based Access Control use to grant permissions?
AUser attributes
BSpecial tokens or capabilities
CUser roles
DPasswords
Why is access control critical in smart contracts?
ATo speed up transactions
BTo allow anyone to change contract code
CTo restrict sensitive actions to authorized users
DTo increase blockchain size
Which pattern is best when permissions depend on multiple user details like location and membership?
AMandatory Access Control
BRBAC
CCapability-Based
DABAC
Describe the main differences between RBAC and ABAC in blockchain access control.
Think about how permissions are decided in each pattern.
You got /3 concepts.
    Explain why access control is essential for smart contracts and give an example of a risk without it.
    Consider what could happen if anyone could call any function.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of access control patterns in blockchain smart contracts?
      easy
      A. To restrict who can perform certain actions on the blockchain
      B. To increase the speed of blockchain transactions
      C. To store large amounts of data efficiently
      D. To create new cryptocurrencies automatically

      Solution

      1. Step 1: Understand access control concept

        Access control limits permissions, deciding who can do what on the blockchain.
      2. Step 2: Identify the main goal

        The goal is to protect blockchain data and functions by restricting unauthorized actions.
      3. Final Answer:

        To restrict who can perform certain actions on the blockchain -> Option A
      4. Quick Check:

        Access control = restrict actions [OK]
      Hint: Access control means who can do what, not speed or storage [OK]
      Common Mistakes:
      • Confusing access control with transaction speed
      • Thinking access control stores data
      • Assuming access control creates cryptocurrencies
      2. Which of the following is the correct Solidity syntax to define a modifier named onlyOwner for access control?
      easy
      A. modifier onlyOwner() => { require(msg.sender == owner); _; }
      B. function onlyOwner() { require(msg.sender == owner); }
      C. modifier onlyOwner { if(msg.sender == owner) _; }
      D. modifier onlyOwner() { require(msg.sender == owner); _; }

      Solution

      1. Step 1: Recall modifier syntax in Solidity

        A modifier uses the keyword 'modifier', parentheses for parameters, and the '_;' placeholder.
      2. Step 2: Check each option

        modifier onlyOwner() { require(msg.sender == owner); _; } correctly uses 'modifier onlyOwner() { require(msg.sender == owner); _; }'. Others have syntax errors or missing parts.
      3. Final Answer:

        modifier onlyOwner() { require(msg.sender == owner); _; } -> Option D
      4. Quick Check:

        Modifier syntax = modifier onlyOwner() { require(msg.sender == owner); _; } [OK]
      Hint: Modifiers need 'modifier', parentheses, and '_;' inside [OK]
      Common Mistakes:
      • Using 'function' instead of 'modifier'
      • Omitting parentheses after modifier name
      • Using arrow syntax which is invalid here
      3. Consider this Solidity snippet:
      mapping(address => bool) public admins;
      
      modifier onlyAdmin() {
        require(admins[msg.sender], "Not admin");
        _;
      }
      
      function addAdmin(address newAdmin) public onlyAdmin {
        admins[newAdmin] = true;
      }
      
      constructor() {
        admins[msg.sender] = true;
      }
      
      What happens if a non-admin calls addAdmin?
      medium
      A. The contract crashes and becomes unusable
      B. The transaction reverts with error 'Not admin'
      C. The function runs but does nothing
      D. The new admin is added successfully

      Solution

      1. Step 1: Understand the onlyAdmin modifier

        The modifier requires that the caller's address is in the admins mapping as true, else it reverts with "Not admin".
      2. Step 2: Analyze calling addAdmin by non-admin

        If the caller is not an admin, require fails, causing the transaction to revert with the error message.
      3. Final Answer:

        The transaction reverts with error 'Not admin' -> Option B
      4. Quick Check:

        Non-admin call triggers require revert [OK]
      Hint: Require false causes revert with error message [OK]
      Common Mistakes:
      • Assuming function silently fails
      • Thinking non-admin can add admins
      • Believing contract crashes permanently
      4. Identify the bug in this Solidity access control code:
      address public owner;
      
      modifier onlyOwner() {
        require(msg.sender = owner, "Not owner");
        _;
      }
      
      constructor() {
        owner = msg.sender;
      }
      
      medium
      A. Missing semicolon after owner declaration
      B. Constructor should be named differently
      C. Using assignment '=' instead of comparison '==' in require
      D. Modifier missing parentheses

      Solution

      1. Step 1: Check require statement syntax

        The require uses '=' which assigns, not '==' which compares. This causes a compile error or unexpected behavior.
      2. Step 2: Verify other parts

        Semicolon is present, constructor name is correct, and modifier has parentheses, so no issues there.
      3. Final Answer:

        Using assignment '=' instead of comparison '==' in require -> Option C
      4. Quick Check:

        Use '==' for comparison in require [OK]
      Hint: Use '==' to compare, '=' is assignment [OK]
      Common Mistakes:
      • Confusing '=' and '==' in conditions
      • Thinking constructor name must differ
      • Ignoring parentheses in modifier
      5. You want to implement a multi-level access control in Solidity where: - The contract owner can add or remove admins. - Admins can add or remove users. - Users can only call a restricted function. Which pattern best fits this scenario?
      hard
      A. Use nested mappings with modifiers for owner, admin, and user roles
      B. Use a single boolean mapping for all roles and check in functions
      C. Use public variables for roles without modifiers
      D. Use events only to track roles without restrictions

      Solution

      1. Step 1: Understand multi-level access control needs

        Different roles require different permissions; owner controls admins, admins control users, users have limited access.
      2. Step 2: Evaluate patterns

        Nested mappings with modifiers (Use nested mappings with modifiers for owner, admin, and user roles) is complex but correct. Single boolean mapping (Use a single boolean mapping for all roles and check in functions) cannot distinguish roles well. Public variables without modifiers (Use public variables for roles without modifiers) is insecure and insufficient. Events only (Use events only to track roles without restrictions) do not enforce control.
      3. Step 3: Choose best practical pattern

        Nested mappings with modifiers provide clear, secure role checks and control flow.
      4. Final Answer:

        Use nested mappings with modifiers for owner, admin, and user roles -> Option A
      5. Quick Check:

        Multi-level roles need nested mappings + modifiers [OK]
      Hint: Use nested mappings and modifiers for clear role control [OK]
      Common Mistakes:
      • Using single mapping for all roles
      • Skipping modifiers for access checks
      • Relying only on events without restrictions
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard