📖 Scenario: You are creating a simple smart contract for a blockchain project. To make your code clear and compatible with tools, you need to add a license identifier and specify the Solidity compiler version.
🎯 Goal: Learn how to add the SPDX license identifier and the pragma version statement at the top of a Solidity contract.
📋 What You'll Learn
Add the SPDX license identifier comment at the top of the file
Add the pragma solidity version statement below the license
Use the exact license identifier MIT
Use the exact pragma version ^0.8.0
💡 Why This Matters
🌍 Real World
Adding SPDX license identifiers and pragma versions is a standard practice in Solidity smart contract development to ensure legal clarity and compiler compatibility.
💼 Career
Understanding these basics is essential for blockchain developers to write professional and maintainable smart contracts.
Progress0 / 4 steps
1
Add SPDX License Identifier
Add the SPDX license identifier comment // SPDX-License-Identifier: MIT as the very first line of your Solidity file.
Blockchain / Solidity
Hint
The SPDX license identifier is a comment that starts with // SPDX-License-Identifier: followed by the license name.
2
Add Pragma Solidity Version
Below the SPDX license identifier, add the pragma solidity version statement pragma solidity ^0.8.0; to specify the compiler version.
Blockchain / Solidity
Hint
The pragma statement tells the compiler which Solidity versions are allowed.
3
Create a Simple Contract
Create a simple contract named MyContract below the pragma statement using contract MyContract { }.
Blockchain / Solidity
Hint
A contract is defined using the keyword contract followed by its name and curly braces.
4
Output the Contract Code
Print the entire contract code as a string using console.log in JavaScript or just display the code as output. For this exercise, just print the SPDX line, pragma line, and contract declaration exactly as written.
Blockchain / Solidity
Hint
Use a print statement to show the full contract code exactly as it appears.
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
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.
Step 2: Differentiate from pragma version
Unlike pragma which sets compiler version, SPDX is about legal licensing information.
Final Answer:
To specify the license type of the contract's source code -> Option A
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
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.
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.
Final Answer:
pragma solidity >=0.8.0 <0.9.0; -> Option C
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
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.
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.
Final Answer:
Compilation fails due to pragma version mismatch -> Option A
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
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.
Step 2: Verify other parts
The pragma syntax and contract name are correct; SPDX license identifier does not require quotes.
Final Answer:
Missing colon ':' after SPDX-License-Identifier -> Option D
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
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.
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.
Final Answer:
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0; -> Option B
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 unknownstrongwhile earning +1 Grip toward your certificate.