Bird
Raised Fist0
Blockchain / Solidityprogramming~20 mins

Constants and immutables in Blockchain / Solidity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Immutable Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of constant and immutable variables in Solidity
What is the output of the following Solidity contract when calling getValues()?
Blockchain / Solidity
pragma solidity ^0.8.0;

contract Test {
    uint256 public constant CONST_VAL = 100;
    uint256 public immutable IMMUTABLE_VAL;

    constructor(uint256 _val) {
        IMMUTABLE_VAL = _val;
    }

    function getValues() public view returns (uint256, uint256) {
        return (CONST_VAL, IMMUTABLE_VAL);
    }
}
A(0, 200)
B(100, 200)
C(100, 0)
D(200, 100)
Attempts:
2 left
💡 Hint
Remember that constant variables are fixed at compile time, and immutable variables are set once during construction.
🧠 Conceptual
intermediate
1:30remaining
Understanding immutables in smart contracts
Which statement about immutable variables in Solidity is correct?
AImmutable variables can be changed multiple times after contract deployment.
BImmutable variables must be assigned a value at declaration and cannot be changed later.
CImmutable variables can be assigned once during contract construction and then cannot be changed.
DImmutable variables behave exactly like constant variables and are replaced at compile time.
Attempts:
2 left
💡 Hint
Think about when the value of an immutable variable is set.
🔧 Debug
advanced
2:00remaining
Identify the error with constant variable assignment
What error will the Solidity compiler produce for this code snippet?
Blockchain / Solidity
pragma solidity ^0.8.0;

contract Demo {
    uint256 public constant MY_CONST;

    constructor() {
        MY_CONST = 10;
    }
}
ATypeError: Constant variables must be assigned at declaration.
BSyntaxError: Missing semicolon after constant declaration.
CRuntimeError: Cannot assign to constant variable in constructor.
DNo error, code compiles and runs fine.
Attempts:
2 left
💡 Hint
Check where constant variables must be assigned.
❓ Predict Output
advanced
2:00remaining
Gas cost difference between constant and immutable
Given the following Solidity contract, which statement about gas cost when accessing CONST_VAL and IMMUTABLE_VAL is true?
Blockchain / Solidity
pragma solidity ^0.8.0;

contract GasTest {
    uint256 public constant CONST_VAL = 123;
    uint256 public immutable IMMUTABLE_VAL;

    constructor() {
        IMMUTABLE_VAL = 456;
    }

    function readConst() public pure returns (uint256) {
        return CONST_VAL;
    }

    function readImmutable() public view returns (uint256) {
        return IMMUTABLE_VAL;
    }
}
AReading CONST_VAL costs less gas than reading IMMUTABLE_VAL.
BReading IMMUTABLE_VAL costs less gas than reading CONST_VAL.
CReading CONST_VAL costs gas, but reading IMMUTABLE_VAL is free.
DBoth CONST_VAL and IMMUTABLE_VAL cost the same gas to read.
Attempts:
2 left
💡 Hint
Consider where the values are stored and how the EVM accesses them.
🧠 Conceptual
expert
2:30remaining
Why use immutables instead of constants in Solidity?
Which is the best reason to use immutable variables instead of constant variables in Solidity?
AImmutable variables are stored in memory, constants are stored in storage.
BImmutable variables use less gas than constants when accessed.
CImmutable variables can be changed after deployment, constants cannot.
DImmutable variables allow setting values at runtime during contract deployment, while constants require compile-time values.
Attempts:
2 left
💡 Hint
Think about when you know the value you want to assign.

Practice

(1/5)
1. What is the main difference between constant and immutable variables in a blockchain smart contract?
easy
A. Both constant and immutable variables can be changed after deployment.
B. constant variables can be changed anytime, immutable variables cannot be changed.
C. immutable variables are fixed at compile time, constant variables are set during contract creation.
D. constant variables are fixed at compile time, immutable variables are set once during contract creation.

Solution

  1. Step 1: Understand constant variables

    constant variables are assigned a value at compile time and cannot be changed later.
  2. Step 2: Understand immutable variables

    immutable variables are assigned once during contract creation (deployment) and then remain fixed.
  3. Final Answer:

    constant fixed at compile time, immutable set once at creation -> Option D
  4. Quick Check:

    constant = compile time, immutable = creation time [OK]
Hint: Constant fixed at compile, immutable set once at deployment [OK]
Common Mistakes:
  • Thinking immutable can be changed after deployment
  • Confusing when constants are assigned
  • Assuming both can be modified anytime
2. Which of the following is the correct way to declare a constant integer named MAX_SUPPLY with value 1000 in Solidity?
easy
A. constant uint MAX_SUPPLY = 1000;
B. uint constant MAX_SUPPLY = 1000;
C. uint MAX_SUPPLY constant = 1000;
D. constant MAX_SUPPLY uint = 1000;

Solution

  1. Step 1: Recall Solidity constant syntax

    In Solidity, the type comes first, then the keyword constant, then the variable name.
  2. Step 2: Check each option

    uint constant MAX_SUPPLY = 1000; matches the correct syntax: uint constant MAX_SUPPLY = 1000;. Others have wrong order.
  3. Final Answer:

    uint constant MAX_SUPPLY = 1000; -> Option B
  4. Quick Check:

    Type + constant + name = correct order [OK]
Hint: Type first, then constant keyword, then variable name [OK]
Common Mistakes:
  • Placing constant before type
  • Putting constant after variable name
  • Missing semicolon at end
3. Consider the Solidity contract snippet:
contract Example {
    uint public immutable creationTime;
    constructor() {
        creationTime = block.timestamp;
    }
}

What will creationTime hold after deployment?
medium
A. The timestamp when the contract was deployed
B. The timestamp when the contract was compiled
C. Zero, because it is not initialized
D. It will cause a compilation error

Solution

  1. Step 1: Understand immutable assignment

    immutable variables can be assigned once during contract creation, here in the constructor.
  2. Step 2: Analyze the assignment

    creationTime = block.timestamp; sets it to the current block timestamp at deployment.
  3. Final Answer:

    The timestamp when the contract was deployed -> Option A
  4. Quick Check:

    Immutable set at deployment time [OK]
Hint: Immutable set once in constructor at deployment [OK]
Common Mistakes:
  • Thinking it holds compile time value
  • Assuming default zero value
  • Confusing immutable with constant
4. What is wrong with this Solidity code snippet?
contract Test {
    uint public immutable value;
    function setValue(uint _val) public {
        value = _val;
    }
}
medium
A. You cannot assign to an immutable variable outside the constructor.
B. The variable value should be declared as constant.
C. The function setValue should be marked as view.
D. There is no error; the code is correct.

Solution

  1. Step 1: Recall rules for immutable variables

    immutable variables can only be assigned once during contract creation, typically in the constructor.
  2. Step 2: Check assignment location

    Here, value is assigned inside a public function, which is not allowed.
  3. Final Answer:

    Cannot assign immutable outside constructor -> Option A
  4. Quick Check:

    Immutable assigned only once in constructor [OK]
Hint: Immutable only set in constructor, not in other functions [OK]
Common Mistakes:
  • Trying to assign immutable in regular functions
  • Confusing constant and immutable rules
  • Thinking public functions can set immutable
5. You want to store a fixed token symbol in your smart contract that never changes and a deployment timestamp that is set once at deployment. Which declarations are correct?
contract Token {
    // Declare symbol
    // Declare deploymentTime
    constructor() {
        deploymentTime = block.timestamp;
    }
}
hard
A. string public constant symbol; uint public immutable deploymentTime = block.timestamp;
B. string public immutable symbol = "TKN"; uint public constant deploymentTime = block.timestamp;
C. string public constant symbol = "TKN"; uint public immutable deploymentTime;
D. string public immutable symbol = "TKN"; uint public immutable deploymentTime = block.timestamp;

Solution

  1. Step 1: Declare fixed symbol as constant

    Since symbol never changes and is known at compile time, declare as constant with value assigned inline.
  2. Step 2: Declare deploymentTime as immutable

    Deployment timestamp is set once at deployment, so declare as immutable and assign in constructor.
  3. Final Answer:

    symbol constant with value, deploymentTime immutable assigned in constructor -> Option C
  4. Quick Check:

    Constant fixed value, immutable set once at deployment [OK]
Hint: Constant for fixed value, immutable for deployment-time set [OK]
Common Mistakes:
  • Assigning immutable variables inline without constructor
  • Declaring constant without value
  • Confusing when to use constant vs immutable
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