Bird
Raised Fist0
Blockchain / Solidityprogramming~5 mins

SPDX license and pragma version in Blockchain / Solidity - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the SPDX license identifier in a Solidity file?
The SPDX license identifier specifies the license under which the Solidity code is released. It helps tools and users understand the legal terms quickly.
Click to reveal answer
beginner
Where should the SPDX license identifier be placed in a Solidity file?
It should be placed as the very first line in the Solidity file, starting with // SPDX-License-Identifier: followed by the license type.
Click to reveal answer
beginner
What does the pragma version statement do in Solidity?
The pragma version statement tells the compiler which versions of Solidity the code is compatible with, ensuring the code compiles correctly.
Click to reveal answer
intermediate
Explain the difference between pragma solidity ^0.8.0; and pragma solidity 0.8.0;.
pragma solidity ^0.8.0; means the code works with version 0.8.0 and any newer 0.8.x versions but not 0.9.0 or above. pragma solidity 0.8.0; means it only works with exactly version 0.8.0.
Click to reveal answer
intermediate
Why is it important to specify both SPDX license and pragma version in Solidity files?
Specifying SPDX license clarifies legal usage rights, and pragma version ensures the code compiles with the intended compiler version, preventing errors and misunderstandings.
Click to reveal answer
What is the correct way to specify an MIT license in a Solidity file?
A// SPDX-License-Identifier: MIT
B// License: MIT
Cpragma license MIT;
Dlicense MIT;
What does pragma solidity ^0.8.0; mean?
ACompatible with Solidity version 0.8.0 and above, but less than 0.9.0
BCompatible only with Solidity version 0.8.0
CCompatible with any Solidity version
DCompatible with Solidity versions below 0.8.0
Where should the pragma version statement be placed in a Solidity file?
AInside the contract functions
BAnywhere in the contract code
CAt the very end of the file
DAfter the SPDX license identifier and before the contract code
What happens if you omit the SPDX license identifier in your Solidity file?
AThe code will automatically be licensed under MIT
BThe compiler will throw an error and refuse to compile
CThere is no legal information about the code license, which may cause confusion
DThe pragma version will be ignored
Which of the following is a valid SPDX license identifier?
AGPLv3
BGPL-3.0-or-later
CGNU Public License 3
DGPL version 3
Describe the role of the SPDX license identifier and where it should be placed in a Solidity file.
Think about legal clarity and file structure.
You got /3 concepts.
    Explain how the pragma version statement controls which Solidity compiler versions can compile your code.
    Consider compatibility and preventing errors.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What is the purpose of the SPDX-License-Identifier line in a Solidity smart contract?

      easy
      A. To specify the license type of the contract's source code
      B. To set the Solidity compiler version
      C. To declare the contract's owner
      D. To define the contract's storage variables

      Solution

      1. Step 1: Understand SPDX-License-Identifier usage

        The SPDX-License-Identifier line is a comment that clearly states the license under which the source code is released.
      2. Step 2: Differentiate from pragma version

        Unlike pragma which sets compiler version, SPDX is about legal licensing information.
      3. Final Answer:

        To specify the license type of the contract's source code -> Option A
      4. Quick Check:

        SPDX-License-Identifier = License type [OK]
      Hint: SPDX line always shows license info, not compiler version [OK]
      Common Mistakes:
      • Confusing SPDX line with pragma version
      • Thinking SPDX sets compiler behavior
      • Ignoring SPDX line as just a comment
      2.

      Which of the following is the correct way to specify the Solidity compiler version to accept any version from 0.8.0 up to but not including 0.9.0?

      pragma solidity ?;
      easy
      A. pragma solidity ^0.8.19;
      B. pragma solidity 0.8.0;
      C. pragma solidity >=0.8.0 <0.9.0;
      D. pragma solidity >0.8.0 <=0.9.0;

      Solution

      1. Step 1: Understand version range syntax

        The syntax >=0.8.0 <0.9.0 means any version from 0.8.0 up to but not including 0.9.0.
      2. Step 2: Compare with caret (^) operator

        The ^0.8.19 syntax allows >=0.8.19 <0.9.0, excluding earlier 0.8.x versions like 0.8.0. The explicit range >=0.8.0 <0.9.0 matches exactly.
      3. Final Answer:

        pragma solidity >=0.8.0 <0.9.0; -> Option C
      4. Quick Check:

        Version range syntax = >=0.8.0 <0.9.0 [OK]
      Hint: Use >= and < to specify exact version range [OK]
      Common Mistakes:
      • Using exact version without range
      • Misplacing comparison operators
      • Confusing caret (^) with range syntax
      3.

      What will happen if you compile this Solidity code snippet?

      // SPDX-License-Identifier: MIT
      pragma solidity ^0.7.0;
      contract Test {
        uint public x = 5;
      }

      Assuming you use Solidity compiler version 0.8.10.

      medium
      A. Compilation fails due to pragma version mismatch
      B. Compilation fails due to SPDX license missing
      C. Compilation succeeds but with a warning
      D. Compilation succeeds without errors

      Solution

      1. Step 1: Check pragma version compatibility

        The pragma ^0.7.0 means compiler versions from 0.7.0 up to but not including 0.8.0 are allowed.
      2. Step 2: Compare with compiler version used

        Compiler version 0.8.10 is outside the allowed range, so compilation will fail due to version mismatch.
      3. Final Answer:

        Compilation fails due to pragma version mismatch -> Option A
      4. Quick Check:

        Pragma ^0.7.0 excludes 0.8.10 = mismatch [OK]
      Hint: Compiler version must fit pragma range exactly [OK]
      Common Mistakes:
      • Ignoring pragma version mismatch
      • Thinking SPDX license affects compilation
      • Assuming caret (^) allows all newer versions
      4.

      Identify the error in this Solidity contract header:

      // SPDX-License-Identifier MIT
      pragma solidity ^0.8.0;
      contract Sample {}
      medium
      A. SPDX license identifier must be in quotes
      B. Incorrect pragma version syntax
      C. Contract name must be lowercase
      D. Missing colon ':' after SPDX-License-Identifier

      Solution

      1. Step 1: Check SPDX license line format

        The SPDX license line must be in the format // SPDX-License-Identifier: LicenseName with a colon after the identifier.
      2. Step 2: Verify other parts

        The pragma syntax and contract name are correct; SPDX license identifier does not require quotes.
      3. Final Answer:

        Missing colon ':' after SPDX-License-Identifier -> Option D
      4. Quick Check:

        SPDX line requires colon ':' [OK]
      Hint: SPDX line always has colon after identifier [OK]
      Common Mistakes:
      • Omitting colon after SPDX-License-Identifier
      • Adding quotes around license name
      • Thinking contract names must be lowercase
      5.

      You want to write a Solidity contract that is compatible with any compiler version from 0.6.0 up to but not including 0.9.0, and you want to specify the MIT license. Which of the following headers is correct?

      hard
      A. // SPDX-License-Identifier: MIT pragma solidity 0.6.0;
      B. // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.9.0;
      C. // SPDX-License-Identifier MIT pragma solidity ^0.6.0;
      D. // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <=0.9.0;

      Solution

      1. Step 1: Check SPDX license line correctness

        The SPDX line must have a colon after the identifier and specify the license, so // SPDX-License-Identifier: MIT is correct.
      2. Step 2: Verify pragma version range

        The pragma >=0.6.0 <0.9.0 correctly specifies compatibility from 0.6.0 up to but not including 0.9.0. Using <=0.9.0 would include 0.9.0, which is not desired.
      3. Final Answer:

        // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.9.0; -> Option B
      4. Quick Check:

        SPDX with colon + correct pragma range = // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.9.0; [OK]
      Hint: Use colon in SPDX and < for upper pragma bound [OK]
      Common Mistakes:
      • Omitting colon in SPDX line
      • Using exact version instead of range
      • Including upper bound version with <= instead of <
      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