A constructor function sets up a new smart contract with initial values when it is created. It helps prepare the contract to work correctly from the start.
Constructor function in Blockchain / Solidity
constructor() {
// code to run once when contract is created
}contract MyContract {
address public owner;
constructor() {
owner = msg.sender;
}
}contract Token {
string public name;
uint public totalSupply;
constructor(string memory _name, uint _supply) {
name = _name;
totalSupply = _supply;
}
}This smart contract sets the owner to the creator and stores an initial balance passed when deployed. It also has a function to check the balance.
pragma solidity ^0.8.0; contract SimpleWallet { address public owner; uint public balance; constructor(uint initialBalance) { owner = msg.sender; balance = initialBalance; } function getBalance() public view returns (uint) { return balance; } }
Constructor functions cannot be called again after deployment.
If you do not write a constructor, a default empty one is used.
Use msg.sender to get the address that creates the contract.
Constructor functions run once when the contract is created.
They set up initial values and important settings.
They help make your contract ready to use safely.
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
