Bird
Raised Fist0
Blockchain / Solidityprogramming~20 mins

Abstract contracts in Blockchain / Solidity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Abstract Contract Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of an abstract contract inheritance
What is the output when deploying and calling getValue() from the ConcreteContract below?
Blockchain / Solidity
abstract contract AbstractContract {
    function getValue() public virtual returns (string memory);
}

contract ConcreteContract is AbstractContract {
    function getValue() public override returns (string memory) {
        return "Hello from Concrete!";
    }
}
A"Hello from Concrete!"
BCompilation error: Missing implementation of getValue
C"Hello from Abstract!"
DRuntime error: Abstract function called
Attempts:
2 left
💡 Hint
Remember that abstract contracts require derived contracts to implement abstract functions.
🧠 Conceptual
intermediate
1:30remaining
Purpose of abstract contracts
What is the main purpose of using abstract contracts in blockchain smart contract development?
ATo define a contract with some functions unimplemented, forcing derived contracts to implement them
BTo deploy a contract that cannot be inherited
CTo create a contract that stores data permanently without functions
DTo automatically generate user interfaces for contracts
Attempts:
2 left
💡 Hint
Think about contracts that act like blueprints.
🔧 Debug
advanced
2:00remaining
Identify the error in abstract contract implementation
What error will the Solidity compiler produce for the following code?
Blockchain / Solidity
abstract contract Base {
    function foo() public virtual returns (string memory);
}

contract Derived is Base {
    // Missing override of foo
}
ARuntimeError: Abstract function called
BTypeError: Derived contract must implement function 'foo()' or be declared abstract
CSyntaxError: Missing semicolon after function declaration
DNo error, code compiles successfully
Attempts:
2 left
💡 Hint
Check if Derived implements all abstract functions.
📝 Syntax
advanced
1:30remaining
Correct syntax for abstract function declaration
Which option shows the correct syntax to declare an abstract function in Solidity?
Aabstract function doSomething() public returns (uint);
Bfunction doSomething() public returns (uint) {}
Cfunction doSomething() public virtual returns (uint);
Dfunction doSomething() public abstract returns (uint) {}
Attempts:
2 left
💡 Hint
Abstract functions have no body and use the virtual keyword.
🚀 Application
expert
2:30remaining
Number of items in a contract inheritance chain
Given the following contracts, how many contracts must be deployed to use FinalContract and call getData() successfully?
Blockchain / Solidity
abstract contract A {
    function getData() public virtual returns (string memory);
}

abstract contract B is A {
    function getData() public virtual override returns (string memory);
}

contract FinalContract is B {
    function getData() public override returns (string memory) {
        return "Data from Final";
    }
}
ANo contracts can be deployed because of abstract functions
BTwo contracts: A and FinalContract
CThree contracts: A, B, and FinalContract
DOnly one contract: FinalContract
Attempts:
2 left
💡 Hint
Only concrete contracts can be deployed.

Practice

(1/5)
1.

What is the main purpose of an abstract contract in blockchain programming?

easy
A. To define functions without implementation that child contracts must complete
B. To deploy a contract directly on the blockchain
C. To store data permanently without functions
D. To create a user interface for blockchain apps

Solution

  1. Step 1: Understand abstract contract role

    Abstract contracts declare functions without full code, acting as templates.
  2. Step 2: Identify deployment capability

    They cannot be deployed alone but require child contracts to implement missing parts.
  3. Final Answer:

    To define functions without implementation that child contracts must complete -> Option A
  4. Quick Check:

    Abstract contract = function templates [OK]
Hint: Abstract contracts declare incomplete functions for children [OK]
Common Mistakes:
  • Thinking abstract contracts can be deployed directly
  • Confusing abstract contracts with interfaces
  • Believing abstract contracts store data only
2.

Which of the following is the correct syntax to declare an abstract contract in Solidity?

?
easy
A. contract MyContract abstract { function foo() public; }
B. abstract contract MyContract { function foo() public virtual; }
C. abstract MyContract contract { function foo() public; }
D. contract MyContract { abstract function foo(); }

Solution

  1. Step 1: Check abstract contract declaration

    In Solidity, use 'abstract contract' before the contract name.
  2. Step 2: Verify function declaration

    Abstract functions are declared with 'virtual' and no body.
  3. Final Answer:

    abstract contract MyContract { function foo() public virtual; } -> Option B
  4. Quick Check:

    Correct abstract syntax = abstract contract MyContract { function foo() public virtual; } [OK]
Hint: Use 'abstract contract' and 'virtual' for abstract functions [OK]
Common Mistakes:
  • Placing 'abstract' after 'contract'
  • Missing 'virtual' keyword on abstract functions
  • Trying to define function body in abstract contract
3.

Given the following Solidity code, what will be the output when child.getValue() is called?

abstract contract Parent {
    function getValue() public virtual returns (string memory);
}

contract Child is Parent {
    function getValue() public override returns (string memory) {
        return "Hello from Child";
    }
}
medium
A. Compilation error due to missing function body in Parent
B. "Hello from Parent"
C. "Hello from Child"
D. Runtime error because Parent is abstract

Solution

  1. Step 1: Understand abstract function in Parent

    Parent declares getValue() as abstract (no body), so Child must implement it.
  2. Step 2: Check Child's implementation

    Child overrides getValue() and returns "Hello from Child" string.
  3. Final Answer:

    "Hello from Child" -> Option C
  4. Quick Check:

    Child's override runs = "Hello from Child" [OK]
Hint: Child must implement abstract functions; output from child method [OK]
Common Mistakes:
  • Expecting Parent's abstract function to run
  • Thinking abstract contracts cause runtime errors
  • Confusing compilation errors with runtime errors
4.

Identify the error in this Solidity code snippet:

abstract contract Base {
    function doSomething() public virtual;
}

contract Derived is Base {
    // Missing implementation of doSomething
}
medium
A. Derived contract must implement doSomething() or be declared abstract
B. Base contract should not have virtual functions
C. Derived contract cannot inherit from abstract contracts
D. doSomething() must have a function body in Base

Solution

  1. Step 1: Check abstract function in Base

    doSomething() is abstract (no body), so Derived must implement it or be abstract.
  2. Step 2: Analyze Derived contract

    Derived does not implement doSomething() and is not abstract, causing error.
  3. Final Answer:

    Derived contract must implement doSomething() or be declared abstract -> Option A
  4. Quick Check:

    Abstract functions require implementation in non-abstract children [OK]
Hint: Non-abstract child must implement all abstract functions [OK]
Common Mistakes:
  • Assuming virtual means implemented
  • Forgetting to mark Derived as abstract if no implementation
  • Thinking abstract contracts can be instantiated
5.

You want to create a contract system where multiple child contracts share a common function signature but implement it differently. How should you design the parent contract?

hard
A. Use an interface with implemented functions
B. Use a regular contract with fully implemented functions
C. Use a library instead of a contract
D. Use an abstract contract with the function declared as virtual and no body

Solution

  1. Step 1: Understand shared function signature need

    Multiple children must share function names but implement differently.
  2. Step 2: Choose abstract contract design

    Abstract contracts declare functions without bodies, forcing children to implement them.
  3. Step 3: Exclude other options

    Regular contracts have implementations, libraries can't enforce function signatures, interfaces can't have implementations.
  4. Final Answer:

    Use an abstract contract with the function declared as virtual and no body -> Option D
  5. Quick Check:

    Abstract contract enforces function signature for children [OK]
Hint: Abstract contracts enforce shared function signatures [OK]
Common Mistakes:
  • Using regular contracts which fix implementation
  • Confusing interfaces with implemented functions
  • Trying to use libraries for function enforcement
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