Bird
Raised Fist0
Blockchain / Solidityprogramming~10 mins

SPDX license and pragma version in Blockchain / Solidity - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - SPDX license and pragma version
Start of Solidity file
↓
Add SPDX License Identifier
↓
Add pragma solidity version
↓
Write contract code
↓
Compile and deploy
This flow shows adding SPDX license and pragma version at the top of a Solidity file before writing contract code.
Execution Sample
Blockchain / Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Simple {
    uint x;
}
This code sets the license to MIT and specifies Solidity compiler version 0.8.0 or higher.
Execution Table
StepCode LineActionEffectNotes
1// SPDX-License-Identifier: MITAdd license identifierSpecifies MIT license for the codeHelps tools know license type
2pragma solidity ^0.8.0;Set compiler versionCompiler must be 0.8.0 or higher, less than 0.9.0Ensures compatibility
3contract Simple {Start contractDefines contract named SimpleStart of contract code
4 uint x;Declare variableCreates unsigned integer xInside contract
5}End contractCloses contract definitionEnd of contract
6CompileCheck license and versionCompiler checks pragma and SPDXIf mismatch, error occurs
💡 Compilation succeeds if SPDX and pragma are valid and code is correct
Variable Tracker
VariableStartAfter Step 4Final
xundefined0 (default uint value)0
Key Moments - 3 Insights
Why do we add the SPDX license line at the top?
The SPDX line tells tools and users what license the code uses. It is a comment but important for legal clarity, as shown in execution_table step 1.
What does the pragma solidity ^0.8.0 mean?
It means the code works with compiler version 0.8.0 or higher but less than 0.9.0. This prevents using incompatible compiler versions, as seen in execution_table step 2.
What happens if the pragma version does not match the compiler?
The compiler will give an error and stop compiling, shown in execution_table step 6 where compilation checks pragma version.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the purpose of the line '// SPDX-License-Identifier: MIT' at step 1?
AIt sets the compiler version
BIt specifies the license type for the code
CIt declares a contract
DIt initializes a variable
💡 Hint
See execution_table row 1 under 'Effect' and 'Notes'
At which step does the compiler check the pragma version?
AStep 6
BStep 1
CStep 4
DStep 2
💡 Hint
Check execution_table step 6 where compilation happens
If we change pragma to 'pragma solidity ^0.9.0;', what will happen during compilation?
ACompilation will succeed with any compiler version
BLicense will change automatically
CCompilation will fail if compiler is below 0.9.0
DVariable x will be initialized differently
💡 Hint
Refer to key_moments about pragma version compatibility and execution_table step 6
Concept Snapshot
// SPDX-License-Identifier: <license>
pragma solidity ^<version>;

- SPDX line declares license for legal clarity
- Pragma sets compiler version range
- Both go at top of Solidity files
- Compiler enforces pragma version
- Helps tools and users understand code licensing
Full Transcript
In Solidity files, the SPDX license identifier is a comment at the top that tells what license the code uses, like MIT. This helps tools and users know the legal terms. Next, the pragma solidity line sets the compiler version range, for example ^0.8.0 means version 0.8.0 or higher but less than 0.9.0. This ensures the code compiles only with compatible compiler versions. The contract code follows these lines. During compilation, the compiler checks the pragma version and license comment. If the pragma version does not match the compiler, compilation fails. The variable inside the contract starts with a default value. This flow helps keep Solidity code clear, legal, and compatible.

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