📖 Scenario: Imagine you are building a simple blockchain system where different types of blocks share common features but also have unique properties.
🎯 Goal: Learn how inheritance helps reuse code by creating a base block and extending it for specific block types.
📋 What You'll Learn
Create a base contract called Block with common properties
Create a derived contract called TransactionBlock that inherits from Block
Add a new property to TransactionBlock to show unique features
Show how to create an instance of TransactionBlock and access inherited and new properties
💡 Why This Matters
🌍 Real World
Blockchain systems often have many types of blocks sharing common features. Inheritance helps developers reuse code for these shared features easily.
💼 Career
Understanding inheritance is key for blockchain developers to write efficient smart contracts that are easier to maintain and extend.
Progress0 / 4 steps
1
Create the base contract Block
Create a contract called Block with a public string variable blockHash set to "abc123".
Blockchain / Solidity
Hint
Use contract Block { string public blockHash = "abc123"; } to define the base contract.
2
Create the derived contract TransactionBlock
Create a contract called TransactionBlock that is Block to inherit from Block.
Blockchain / Solidity
Hint
Use contract TransactionBlock is Block { } to inherit from Block.
3
Add a unique property to TransactionBlock
Inside TransactionBlock, add a public uint variable called transactionCount set to 5.
Blockchain / Solidity
Hint
Declare uint public transactionCount = 5; inside TransactionBlock.
4
Access inherited and new properties
Write a public function getInfo in TransactionBlock that returns blockHash and transactionCount as a tuple of (string memory, uint).
Blockchain / Solidity
Hint
Use function getInfo() public view returns (string memory, uint) { return (blockHash, transactionCount); }.
Practice
(1/5)
1. Why does inheritance promote code reuse in blockchain smart contracts?
easy
A. It allows new contracts to use existing code without rewriting it
B. It makes contracts run faster on the blockchain
C. It encrypts the contract code automatically
D. It prevents contracts from being copied
Solution
Step 1: Understand inheritance concept
Inheritance lets a new contract use code from an existing contract, avoiding rewriting.
Step 2: Identify how this saves effort
By reusing code, developers save time and reduce errors, making maintenance easier.
Final Answer:
It allows new contracts to use existing code without rewriting it -> Option A
Quick Check:
Inheritance = reuse code [OK]
Hint: Inheritance means reuse existing code easily [OK]
Common Mistakes:
Thinking inheritance speeds up contract execution
Confusing inheritance with encryption
Believing inheritance blocks code copying
2. Which of the following is the correct Solidity syntax to inherit from a contract named BaseContract?
easy
A. contract NewContract inherits BaseContract {}
B. contract NewContract from BaseContract {}
C. contract NewContract extends BaseContract {}
D. contract NewContract is BaseContract {}
Solution
Step 1: Recall Solidity inheritance syntax
Solidity uses is keyword to inherit from another contract.
Step 2: Match syntax with options
contract NewContract is BaseContract {} uses is correctly; others use invalid keywords.
Final Answer:
contract NewContract is BaseContract {} -> Option D
Quick Check:
Solidity inheritance uses 'is' [OK]
Hint: Remember Solidity uses 'is' for inheritance [OK]
Common Mistakes:
Using 'inherits' or 'extends' instead of 'is'
Forgetting curly braces after contract declaration
Mixing syntax from other languages
3. Given the following Solidity code, what will be the output of getValue() when called on Child contract?
contract Parent {
function getValue() public pure returns (string memory) {
return "Parent";
}
}
contract Child is Parent {
function getValue() public pure returns (string memory) {
return "Child";
}
}
medium
A. "Parent"
B. "Child"
C. Compilation error due to duplicate function
D. Runtime error
Solution
Step 1: Understand function overriding in inheritance
The Child contract overrides getValue() from Parent.
Step 2: Determine which function runs on Child
Calling getValue() on Child runs the overridden version returning "Child".
Final Answer:
"Child" -> Option B
Quick Check:
Override method runs in child contract [OK]
Hint: Child overrides parent method, so child's version runs [OK]
Common Mistakes:
Assuming parent method runs instead of child's
Thinking duplicate functions cause compile error
Confusing runtime errors with override behavior
4. Identify the error in this Solidity inheritance code:
contract A {
uint public x = 5;
}
contract B is A {
uint public x = 10;
}
medium
A. Variable x is redeclared in child contract causing shadowing
B. Missing constructor in child contract
C. Incorrect inheritance keyword used
D. No error, code is correct
Solution
Step 1: Check variable declarations in parent and child
Both A and B declare x, causing shadowing.
Step 2: Understand shadowing issue
Child's x hides parent's x, which can cause confusion or bugs.
Final Answer:
Variable x is redeclared in child contract causing shadowing -> Option A
Quick Check:
Variable redeclaration causes shadowing [OK]
Hint: Avoid redeclaring variables in child contracts [OK]
Common Mistakes:
Ignoring variable shadowing effects
Thinking constructors are mandatory for inheritance
Confusing inheritance keyword syntax
5. You want to create a smart contract that reuses code from two existing contracts, Token and Ownable. Which approach best promotes code reuse and avoids duplication?
hard
A. Write new code that mimics Token and Ownable functions
B. Copy all code from Token and Ownable into the new contract
C. Create a new contract that inherits from both Token and Ownable
D. Deploy Token and Ownable separately and call them externally
Solution
Step 1: Understand multiple inheritance in Solidity
Solidity supports inheriting from multiple contracts to reuse their code.
Step 2: Compare options for code reuse
Inheriting from both Token and Ownable avoids duplication and keeps code organized.
Final Answer:
Create a new contract that inherits from both Token and Ownable -> Option C
Quick Check:
Multiple inheritance promotes reuse best [OK]
Hint: Use multiple inheritance to combine existing contracts [OK]
Common Mistakes:
Copy-pasting code instead of inheriting
Rewriting code manually causing errors
Ignoring Solidity's multiple inheritance feature
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.