Constructor function in Blockchain / Solidity - Time & Space Complexity
When we create a new blockchain contract, the constructor function runs once to set up initial values.
We want to know how the time it takes to run the constructor changes as we add more data.
Analyze the time complexity of the following constructor function.
contract SimpleContract {
uint[] public numbers;
constructor(uint[] memory initialNumbers) {
for (uint i = 0; i < initialNumbers.length; i++) {
numbers.push(initialNumbers[i]);
}
}
}
This constructor copies each number from the input list into the contract's storage one by one.
Look for loops or repeated steps.
- Primary operation: The for-loop that runs once for each number in the input array.
- How many times: Exactly as many times as the length of the input array.
Each extra number means one more step in the loop.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 steps |
| 100 | 100 steps |
| 1000 | 1000 steps |
Pattern observation: The time grows directly with the number of items; double the items, double the steps.
Time Complexity: O(n)
This means the constructor takes longer in a straight line as you add more numbers.
[X] Wrong: "The constructor runs in constant time no matter how many numbers we add."
[OK] Correct: Because the constructor loops through each number, more numbers mean more steps, so time grows with input size.
Understanding how constructor time grows helps you write efficient contracts and explain your code clearly in real projects.
"What if we replaced the loop with a fixed number of assignments? How would the time complexity change?"
Practice
What is the main purpose of a constructor function in a blockchain smart contract?
Solution
Step 1: Understand the role of constructor
A constructor runs only once when the contract is deployed to set initial values.Step 2: Compare with other functions
Other functions run multiple times; constructor is special for initialization only.Final Answer:
To set initial values when the contract is deployed -> Option CQuick Check:
Constructor sets initial values = B [OK]
- Thinking constructor runs on every function call
- Confusing constructor with regular functions
- Believing constructor can be called multiple times
Which of the following is the correct syntax to declare a constructor in Solidity?
contract MyContract {
? {
// initialization code
}
}Solution
Step 1: Recall Solidity constructor syntax
In Solidity, the constructor is declared with the keywordconstructor()without thefunctionkeyword.Step 2: Check options for correct syntax
constructor() public matches the correct syntax:constructor() public. function constructor() public wrongly usesfunction constructor(), which is outdated. def constructor() uses Python syntax. init() public uses a wrong name.Final Answer:
constructor() public -> Option BQuick Check:
Solidity constructor uses 'constructor()' keyword = C [OK]
- Using 'function constructor()' which is deprecated
- Using other function names like 'init()'
- Mixing syntax from other languages
What will be the output of the following Solidity contract after deployment?
contract Simple {
uint public value;
constructor(uint _value) {
value = _value;
}
}Assuming the contract is deployed with _value = 42, what is the value of value?
Solution
Step 1: Understand constructor parameter usage
The constructor takes_valueand assigns it to the state variablevalue.Step 2: Check deployment argument effect
Since the contract is deployed with_value = 42,valuewill be set to 42.Final Answer:
42 -> Option AQuick Check:
Constructor sets value to 42 at deployment = D [OK]
- Assuming default zero value instead of passed value
- Thinking constructor runs after deployment
- Confusing variable names
Identify the error in this Solidity contract constructor:
contract Test {
uint public x;
constructor() {
x = 10
}
}Solution
Step 1: Check Solidity syntax rules
Each statement must end with a semicolon;. The linex = 10is missing a semicolon.Step 2: Verify constructor naming
Since Solidity 0.4.22+, constructors use theconstructor()keyword, so naming is correct.Final Answer:
Missing semicolon after x = 10 -> Option DQuick Check:
Statements need semicolons in Solidity = A [OK]
- Using old constructor naming style
- Forgetting semicolons
- Thinking constructor can't assign variables
You want to create a smart contract that stores an owner address set only once during deployment and cannot be changed later. Which constructor code snippet correctly achieves this?
contract OwnerContract {
address public owner;
?
}Solution
Step 1: Understand owner initialization best practice
Settingowner = msg.senderin the constructor assigns the deployer's address as owner once.Step 2: Evaluate options
constructor(address _owner) { owner = _owner; } requires passing owner address manually, which is possible but less secure. function OwnerContract(address _owner) { owner = _owner; } uses old constructor syntax. constructor() { owner = address(0); } sets owner to zero address, which is invalid. constructor() { owner = msg.sender; } correctly sets owner to deployer address.Final Answer:
constructor() { owner = msg.sender; } -> Option AQuick Check:
Use msg.sender in constructor to set owner = A [OK]
- Using old constructor syntax
- Setting owner to zero address
- Passing owner address manually risking errors
Ready to prove it?
Pass the test and this pattern moves unknown
