What does the public visibility modifier mean in blockchain smart contracts?
A public function or variable can be accessed both internally within the contract and externally by other contracts or users.
Click to reveal answer
beginner
Explain the private visibility modifier.
A private function or variable is only accessible inside the contract where it is defined. It cannot be accessed by derived contracts or externally.
Click to reveal answer
intermediate
What is the difference between internal and private visibility?
Internal functions or variables can be accessed inside the contract and by contracts that inherit from it, while private ones are only accessible inside the defining contract.
Click to reveal answer
intermediate
When should you use the external visibility modifier?
External functions are meant to be called from other contracts or transactions, but not from within the same contract. They are efficient for functions called only externally.
Click to reveal answer
advanced
Can a public function call an external function internally?
No, a public function cannot call an external function internally using a simple function call. External functions require a message call (like a transaction). However, a public function can call an external function using this.<functionName>().
Click to reveal answer
Which visibility modifier allows access only within the contract it is defined in?
Aexternal
Bpublic
Cprivate
Dinternal
✗ Incorrect
Private members are accessible only inside the contract they are defined in.
Which visibility modifier allows access from derived contracts?
Ainternal
Bprivate
Cexternal
Dpublic
✗ Incorrect
Internal members can be accessed inside the contract and by contracts that inherit from it.
Which visibility modifier is designed to be called only from outside the contract?
Ainternal
Bprivate
Cpublic
Dexternal
✗ Incorrect
External functions are meant to be called from other contracts or transactions, not internally.
Can a public function be called from outside the contract?
AYes
BNo
COnly if inherited
DOnly if marked external
✗ Incorrect
Public functions are accessible both internally and externally.
Which visibility modifier is the most restrictive?
Apublic
Bprivate
Cinternal
Dexternal
✗ Incorrect
Private is the most restrictive, accessible only inside the defining contract.
Describe the four visibility modifiers used in blockchain smart contracts and give a simple example of when to use each.
Think about who can call the function or access the variable.
You got /4 concepts.
Explain why you might choose 'internal' over 'private' for a function in a smart contract.
Consider contract inheritance and extending functionality.
You got /3 concepts.
Practice
(1/5)
1. Which visibility modifier allows a function to be called both inside and outside the contract, including by other contracts and users?
easy
A. public
B. private
C. internal
D. external
Solution
Step 1: Understand visibility modifiers
Public functions can be accessed anywhere, inside or outside the contract.
Step 2: Compare with other modifiers
Private is only inside the contract, internal is inside and inherited contracts, external only callable from outside.
Final Answer:
public -> Option A
Quick Check:
public = open access [OK]
Hint: Public means open to all inside and outside calls [OK]
Common Mistakes:
Confusing private with public access
Thinking internal allows outside calls
Assuming external works inside contract
2. Which of the following is the correct way to declare a function that can only be called from outside the contract in Solidity?
easy
A. function foo() private {}
B. function foo() external {}
C. function foo() internal {}
D. function foo() public {}
Solution
Step 1: Identify external function syntax
External functions are declared with the keyword external after the function name.
Step 2: Check other options
Private and internal restrict access inside the contract or inheritance, public allows all calls.
Final Answer:
function foo() external {} -> Option B
Quick Check:
external = outside calls only [OK]
Hint: External functions use keyword 'external' after function name [OK]
Common Mistakes:
Using private instead of external
Confusing public with external
Missing parentheses or braces
3. Consider the following Solidity contract snippet:
contract Test {
uint private data = 10;
function getData() public view returns (uint) {
return data;
}
function setData(uint _data) external {
data = _data;
}
}
What will happen if another contract tries to call data directly?
medium
A. It will succeed and return 10
B. It will fail because data is external
C. It will fail because data is private
D. It will succeed because data is public by default
Solution
Step 1: Check variable visibility
The variable data is declared private, so it cannot be accessed outside the contract.
Step 2: Understand access from other contracts
Other contracts cannot access private variables directly, only public or external functions.
Final Answer:
It will fail because data is private -> Option C
Quick Check:
private = no outside access [OK]
Hint: Private variables can't be accessed outside their contract [OK]
Common Mistakes:
Assuming private variables are public by default
Confusing external with private
Thinking public functions expose private variables directly
4. Given this Solidity code snippet:
contract Sample {
uint internal count = 0;
function increment() private {
count += 1;
}
function callIncrement() public {
increment();
}
}
Which of the following fixes the error preventing increment() from being called?
medium
A. No fix needed, code is correct
B. Change increment() visibility to internal
C. Change increment() visibility to external
D. Change increment() visibility to public
Solution
Step 1: Check function call context
The function increment() is private and called inside the same contract by callIncrement().
Step 2: Understand private function access
Private functions can be called inside the same contract, so this call is valid.
Final Answer:
No fix needed, code is correct -> Option A
Quick Check:
private functions callable inside contract [OK]
Hint: Private functions work inside same contract only [OK]
Common Mistakes:
Thinking private functions can't be called inside contract
Confusing internal with private
Changing visibility unnecessarily
5. You want to create a Solidity contract where a function can only be called by this contract or contracts that inherit from it, but not by external users. Which visibility modifier should you use for this function?
hard
A. public
B. external
C. private
D. internal
Solution
Step 1: Understand access needs
The function should be callable inside this contract and by derived contracts, but not externally.
Step 2: Match visibility modifier
Internal visibility allows access inside the contract and by inheriting contracts only.
Final Answer:
internal -> Option D
Quick Check:
internal = contract + inheritance only [OK]
Hint: Internal means accessible inside and by child contracts only [OK]
Common Mistakes:
Choosing public which allows external calls
Choosing private which blocks inheritance access
Confusing external with internal
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.