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 a multi-signature wallet in blockchain?
A multi-signature wallet is a digital wallet that requires multiple private keys to approve a transaction, adding extra security by needing more than one person to agree.
Click to reveal answer
beginner
How does a multi-signature wallet improve security?
It improves security by requiring multiple approvals before spending funds, so no single person can move money alone, reducing risks of theft or mistakes.
Click to reveal answer
intermediate
What does 'm-of-n' mean in a multi-signature wallet?
'm-of-n' means that out of 'n' total owners, at least 'm' must sign to approve a transaction. For example, 2-of-3 means 2 out of 3 owners must agree.
Click to reveal answer
beginner
Give a real-life example of when a multi-signature wallet is useful.
It is useful for a company where multiple managers must approve spending company funds, preventing one person from using money without others' consent.
Click to reveal answer
beginner
What happens if not enough signatures are collected in a multi-signature wallet?
The transaction will not be approved or executed, keeping the funds safe until the required number of signatures is reached.
Click to reveal answer
What does a multi-signature wallet require to approve a transaction?
AMultiple private keys' signatures
BOnly one private key signature
CNo signatures needed
DA password only
✗ Incorrect
A multi-signature wallet requires multiple private keys to sign a transaction for approval.
In a 3-of-5 multi-signature wallet, how many signatures are needed?
A2
B5
C1
D3
✗ Incorrect
3-of-5 means at least 3 signatures out of 5 owners are needed to approve a transaction.
Why might a business use a multi-signature wallet?
ATo allow anyone to spend funds freely
BTo require multiple approvals for spending funds
CTo avoid using private keys
DTo speed up transactions without approval
✗ Incorrect
Businesses use multi-signature wallets to require multiple approvals, increasing security.
What happens if a transaction does not get enough signatures in a multi-signature wallet?
AThe wallet sends funds to a random address
BThe transaction executes anyway
CThe transaction is not executed
DThe wallet deletes funds
✗ Incorrect
Without enough signatures, the transaction is blocked and not executed.
Which of these is NOT a benefit of multi-signature wallets?
AFaster transaction approval with fewer signatures
BShared control over funds
CIncreased security
DProtection against single key loss
✗ Incorrect
Multi-signature wallets require multiple signatures, so they do not speed up approval with fewer signatures.
Explain how a multi-signature wallet works and why it is more secure than a single-signature wallet.
Think about how needing more than one key protects money.
You got /4 concepts.
Describe a situation where using a multi-signature wallet would be important and how it helps.
Imagine a group managing money together.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of a multi-signature wallet in blockchain?
easy
A. To require multiple approvals before spending funds
B. To speed up transaction processing
C. To store private keys on a single device
D. To allow unlimited spending by one user
Solution
Step 1: Understand the multi-signature wallet concept
A multi-signature wallet requires more than one person to approve a transaction before it can be executed.
Step 2: Identify the main purpose
This setup protects funds by preventing a single user from spending money alone, increasing security.
Final Answer:
To require multiple approvals before spending funds -> Option A
Quick Check:
Multi-signature = multiple approvals [OK]
Hint: Multi-signature means multiple people must approve [OK]
Common Mistakes:
Thinking it speeds up transactions
Believing one user controls all funds
Confusing it with single-key wallets
2. Which of the following is the correct way to define a multi-signature wallet threshold in Solidity?
easy
A. bool threshold = true;
B. uint8 threshold = '2';
C. string threshold = 2;
D. uint8 threshold = 1;
Solution
Step 1: Identify correct data type for threshold
The threshold is a number representing how many signatures are needed, so an unsigned integer like uint8 is appropriate.
Step 2: Check syntax correctness
Assigning a number directly to uint8 is correct. Using quotes or wrong types causes errors.
Final Answer:
uint8 threshold = 1; -> Option D
Quick Check:
Threshold is a number, use uint8 [OK]
Hint: Threshold is a number, use uint type without quotes [OK]
Common Mistakes:
Using quotes around numbers
Assigning string type to threshold
Using boolean type for threshold
3. Given this Solidity snippet for a multi-signature wallet, what will be the value of isApproved after calling approveTransaction(1, msg.sender) if the threshold is 2 and only one approval is made?
mapping(uint => mapping(address => bool)) approvals;
uint8 threshold = 2;
function approveTransaction(uint txId, address approver) public {
approvals[txId][approver] = true;
}
function isApproved(uint txId) public view returns (bool) {
uint count = 0;
for (uint i = 0; i < owners.length; i++) {
if (approvals[txId][owners[i]]) {
count++;
}
}
return count >= threshold;
}
medium
A. true
B. false
C. Compilation error
D. Undefined behavior
Solution
Step 1: Understand approval counting logic
The function counts how many owners approved the transaction and compares it to the threshold.
Step 2: Analyze given scenario
Only one approval is made but threshold is 2, so count is 1 which is less than 2.
Final Answer:
false -> Option B
Quick Check:
Approvals < threshold = false [OK]
Hint: Approval count must meet threshold to be true [OK]
Common Mistakes:
Assuming one approval is enough
Ignoring threshold comparison
Confusing approval mapping structure
4. Identify the bug in this Solidity function for approving transactions in a multi-signature wallet:
function approveTransaction(uint txId) public {
approvals[txId][msg.sender] = true;
if (isApproved(txId)) {
executeTransaction(txId);
}
}
function isApproved(uint txId) public view returns (bool) {
uint count = 0;
for (uint i = 0; i <= owners.length; i++) {
if (approvals[txId][owners[i]]) {
count++;
}
}
return count >= threshold;
}
medium
A. Missing event emission after approval
B. approveTransaction should be external, not public
C. Loop condition should be < instead of <=
D. executeTransaction should not be called inside approveTransaction
Solution
Step 1: Check the for loop boundary
The loop uses i <= owners.length, which causes out-of-bounds access because array indices go from 0 to length-1.
Step 2: Correct the loop condition
Changing to i < owners.length prevents accessing invalid index and runtime errors.
Final Answer:
Loop condition should be < instead of <= -> Option C
Quick Check:
Array index out of bounds fixed by < [OK]
Hint: Array loops use < length, not <= length [OK]
Common Mistakes:
Using <= in loops causing errors
Ignoring array index limits
Thinking event emission fixes logic bugs
5. You want to create a multi-signature wallet that requires 3 out of 5 owners to approve a transaction. Which approach correctly enforces this rule in Solidity?
mapping(uint => mapping(address => bool)) approvals;
address[5] owners;
uint8 threshold = 3;
function executeTransaction(uint txId) public {
uint count = 0;
for (uint i = 0; i < owners.length; i++) {
if (approvals[txId][owners[i]]) {
count++;
}
}
if (count >= threshold) {
// execute the transaction
} else {
revert("Not enough approvals");
}
}
hard
A. This code correctly enforces the 3-of-5 approval rule
B. The threshold should be set to 5 to require all owners
C. The loop should iterate over approvals, not owners
D. Revert should be replaced with a simple return statement
Solution
Step 1: Analyze the approval counting logic
The code counts how many owners approved the transaction by checking the approvals mapping for each owner.
Step 2: Check threshold enforcement
If the count is at least the threshold (3), the transaction executes; otherwise, it reverts with an error.
Final Answer:
This code correctly enforces the 3-of-5 approval rule -> Option A
Quick Check:
Count approvals >= threshold = enforce rule [OK]
Hint: Count approvals, compare with threshold, revert if not met [OK]