Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the Factory pattern in programming?
The Factory pattern is a design method that creates objects without specifying the exact class. It helps make code flexible by letting a special function or contract decide which object to make.
Click to reveal answer
beginner
Why use the Factory pattern in blockchain smart contracts?
It helps create many similar contracts easily and safely. Instead of writing the same code many times, a Factory contract makes new contracts on demand, saving time and gas fees.
Click to reveal answer
intermediate
In Solidity, what does a Factory contract usually do?
It has a function that creates new contracts using the 'new' keyword and keeps track of them. This way, users can get new contract instances from one place.
Click to reveal answer
intermediate
How does the Factory pattern improve code maintenance?
By centralizing contract creation, changes happen in one place. This reduces errors and makes updating contracts easier without changing all copies.
Click to reveal answer
beginner
Give a simple example of a Factory pattern in blockchain.
A Factory contract has a function that creates new Token contracts. Each time it runs, it makes a new Token with its own address, so many tokens can exist without repeating code.
Click to reveal answer
What is the main purpose of the Factory pattern?
ATo create objects without specifying the exact class
BTo delete objects automatically
CTo speed up the program by skipping object creation
DTo store data permanently
✗ Incorrect
The Factory pattern focuses on creating objects without needing to know their exact class.
In blockchain, why is a Factory contract useful?
AIt manages user wallets
BIt mines new blocks faster
CIt encrypts user data
DIt creates multiple contracts efficiently
✗ Incorrect
Factory contracts help create many similar contracts easily and save resources.
Which Solidity keyword is commonly used in Factory contracts to create new contracts?
Anew
Bcreate
Cdeploy
Dinit
✗ Incorrect
The 'new' keyword is used to create new contract instances in Solidity.
How does the Factory pattern help with code updates?
ABy encrypting contract code
BBy deleting old contracts automatically
CBy centralizing contract creation in one place
DBy running contracts faster
✗ Incorrect
Centralizing creation means updates happen in one place, making maintenance easier.
What does a Factory contract usually keep track of?
AUser passwords
BAddresses of created contracts
CTransaction fees
DBlock timestamps
✗ Incorrect
Factory contracts often store addresses of the contracts they create for reference.
Explain the Factory pattern and why it is useful in blockchain smart contracts.
Think about how to make many contracts without repeating code.
You got /4 concepts.
Describe how a Factory contract works in Solidity with an example.
Imagine a contract that makes many small contracts for you.
You got /4 concepts.
Practice
(1/5)
1.
What is the main purpose of the Factory pattern in blockchain development?
easy
A. To create multiple similar contracts easily and manage their addresses
B. To encrypt data on the blockchain
C. To mine new blocks faster
D. To validate transactions off-chain
Solution
Step 1: Understand the Factory pattern role
The Factory pattern is used to create many similar contracts efficiently.
Step 2: Identify its key feature
It also stores the addresses of these created contracts for easy access later.
Final Answer:
To create multiple similar contracts easily and manage their addresses -> Option A
Quick Check:
Factory pattern = create and manage contracts [OK]
Hint: Factory pattern creates and tracks contracts easily [OK]
Common Mistakes:
Confusing factory with encryption or mining
Thinking factory validates transactions
Assuming factory works off-chain
2.
Which of the following is the correct Solidity syntax to deploy a new contract inside a factory contract?
function create() public returns (address) {
address newContract = new ?();
return newContract;
}
easy
A. ContractName
B. contractname
C. new ContractName()
D. ContractName()
Solution
Step 1: Recall Solidity contract creation syntax
To create a new contract instance, use new ContractName().
Step 2: Match syntax with code snippet
The placeholder new ?() expects the contract name without 'new' repeated.
Final Answer:
ContractName -> Option A
Quick Check:
Use 'new ContractName()' but only 'ContractName' inside parentheses [OK]
Hint: Use contract name only inside new keyword parentheses [OK]
Common Mistakes:
Writing 'new' twice
Using lowercase contract names
Omitting parentheses
3.
Consider this Solidity factory contract snippet:
contract Simple {
uint public value;
constructor(uint _value) {
value = _value;
}
}
contract Factory {
Simple[] public simples;
function createSimple(uint _val) public {
Simple s = new Simple(_val);
simples.push(s);
}
function getValue(uint index) public view returns (uint) {
return simples[index].value();
}
}
What will getValue(0) return after calling createSimple(42) once?
medium
A. Address of the contract
B. 0
C. 42
D. Compilation error
Solution
Step 1: Understand contract creation and storage
Calling createSimple(42) creates a new Simple contract with value = 42 and stores it in simples array.
Step 2: Check what getValue(0) returns
It returns the value of the first Simple contract, which is 42.
Final Answer:
42 -> Option C
Quick Check:
Created contract value = 42 [OK]
Hint: Created contract stores value; getValue returns it [OK]
Common Mistakes:
Confusing contract address with stored value
Assuming default zero value
Thinking it returns array length
4.
Identify the error in this factory contract code snippet:
contract Product {
uint public id;
constructor(uint _id) {
id = _id;
}
}
contract ProductFactory {
Product[] public products;
function createProduct(uint _id) public {
Product p = Product(_id);
products.push(p);
}
}
medium
A. Array products should be a mapping
B. Missing new keyword when creating Product
C. Constructor should not have parameters
D. Function createProduct must be view
Solution
Step 1: Check contract instantiation syntax
In Solidity, to create a new contract instance, you must use the new keyword.
Step 2: Identify the missing keyword
The line Product p = Product(_id); misses new, it should be Product p = new Product(_id);.
Final Answer:
Missing new keyword when creating Product -> Option B
Quick Check:
Contract creation requires 'new' keyword [OK]
Hint: Always use 'new' to create contracts in Solidity [OK]
Common Mistakes:
Forgetting 'new' keyword
Changing array to mapping unnecessarily
Marking create function as view incorrectly
5.
You want to build a factory contract that creates multiple token contracts with different initial supplies and keeps track of them. Which approach best applies the factory pattern to save gas and organize your project?
hard
A. Use a single token contract and change its supply dynamically for each user
B. Deploy all token contracts manually and hardcode their addresses in the factory
C. Create token contracts but do not store their addresses anywhere
D. Create each token contract separately and store their addresses in an array inside the factory
Solution
Step 1: Understand factory pattern benefits
The factory pattern helps create many similar contracts and keeps track of them efficiently.
Step 2: Evaluate options for managing multiple tokens
Creating each token contract inside the factory and storing their addresses allows easy management and gas savings.
Step 3: Reject other options
Hardcoding addresses is inflexible, using one contract for all tokens breaks isolation, and not storing addresses loses track.
Final Answer:
Create each token contract separately and store their addresses in an array inside the factory -> Option D
Quick Check:
Factory creates and tracks contracts for organization [OK]
Hint: Factory creates and stores contracts for easy management [OK]
Common Mistakes:
Hardcoding addresses reduces flexibility
Using one contract for all tokens causes conflicts