📖 Scenario: You are learning about blockchains. Blockchains can be public or private. Public blockchains let anyone join and see all transactions. Private blockchains only allow certain people to join and see transactions.We will create simple data to represent users and transactions in both types of blockchains.
🎯 Goal: Build a simple program that stores users and transactions for a public blockchain and a private blockchain. Then filter transactions visible to a user based on blockchain type.
📋 What You'll Learn
Create a list of users for the public blockchain
Create a list of users for the private blockchain
Create a list of transactions with user names and amounts
Filter transactions visible to a user based on blockchain type
Print the visible transactions for a given user
💡 Why This Matters
🌍 Real World
Understanding who can see transactions in different blockchain types helps build secure and private blockchain applications.
💼 Career
Blockchain developers must know how to manage access and visibility of data in public and private blockchains.
Progress0 / 4 steps
1
Create user lists for public and private blockchains
Create a list called public_users with these exact names: 'Alice', 'Bob', 'Charlie'. Then create a list called private_users with these exact names: 'Dave', 'Eve'.
Blockchain / Solidity
Hint
Use square brackets [] to create lists. Separate names with commas.
2
Create a list of transactions
Create a list called transactions with these exact dictionaries: {'user': 'Alice', 'amount': 50}, {'user': 'Dave', 'amount': 100}, {'user': 'Bob', 'amount': 75}, {'user': 'Eve', 'amount': 200}.
Blockchain / Solidity
Hint
Use a list of dictionaries. Each dictionary has keys 'user' and 'amount'.
3
Filter visible transactions for a user
Create a variable called user and set it to 'Bob'. Create a variable called blockchain_type and set it to 'public'. Then create a list called visible_transactions that includes only transactions where the 'user' is in public_users if blockchain_type is 'public', or in private_users if blockchain_type is 'private'.
Blockchain / Solidity
Hint
Use an if statement to check blockchain_type. Use a list comprehension to filter transactions.
4
Print visible transactions for the user
Write a print statement to display the list visible_transactions.
Blockchain / Solidity
Hint
Use print(visible_transactions) to show the filtered list.
Practice
(1/5)
1. Which statement best describes a public blockchain?
easy
A. Anyone can join and participate without permission.
B. Only invited members can access the network.
C. It is controlled by a single organization.
D. It uses private keys only for administrators.
Solution
Step 1: Understand public blockchain access
Public blockchains are open networks where anyone can join and participate without needing permission.
Step 2: Compare with private blockchain features
Private blockchains restrict access to trusted members, unlike public ones.
Final Answer:
Anyone can join and participate without permission. -> Option A
Quick Check:
Public blockchain = open access [OK]
Hint: Public means open to all, no permission needed [OK]
Common Mistakes:
Confusing public with private blockchain access
Thinking public blockchains are controlled by one entity
Assuming private keys limit public blockchain access
2. Which of the following is the correct way to describe a private blockchain?
easy
A. It is always slower than public blockchains.
B. It allows anyone to validate transactions.
C. It restricts access to selected participants only.
D. It uses proof-of-work exclusively.
Solution
Step 1: Identify private blockchain access rules
Private blockchains restrict access to selected participants, unlike public blockchains.
Step 2: Eliminate incorrect options
Private blockchains do not necessarily use proof-of-work or are always slower; these are unrelated to access control.
Final Answer:
It restricts access to selected participants only. -> Option C
Quick Check:
Private blockchain = restricted access [OK]
Hint: Private means limited access to trusted members only [OK]
Common Mistakes:
Assuming private blockchains allow anyone to validate
Confusing consensus methods with access control
Believing private blockchains are always slower
3. Consider this code snippet representing blockchain access control:
def can_access(user, blockchain_type):
if blockchain_type == 'public':
return True
elif blockchain_type == 'private':
return user in ['Alice', 'Bob']
else:
return False
print(can_access('Alice', 'public'))
print(can_access('Eve', 'private'))
print(can_access('Bob', 'private'))
What is the output?
medium
A. False
False
True
B. True
False
True
C. True
True
False
D. False
True
False
Solution
Step 1: Evaluate access for 'Alice' on public blockchain
Public blockchain always returns True, so can_access('Alice', 'public') is True.
Step 2: Evaluate access for 'Eve' on private blockchain
'Eve' is not in ['Alice', 'Bob'], so can_access('Eve', 'private') returns False.
Step 3: Evaluate access for 'Bob' on private blockchain
'Bob' is in the allowed list, so can_access('Bob', 'private') returns True.
Final Answer:
True
False
True -> Option B
Quick Check:
Public always True, private checks user list [OK]
Hint: Public always True; private checks user list membership [OK]
Common Mistakes:
Assuming private blockchain allows all users
Mixing up True/False return values
Ignoring the user list check for private blockchains
4. The following code is intended to check if a user can access a private blockchain. What is the error?
def check_access(user, blockchain):
if blockchain == 'private':
if user == ['Alice', 'Bob']:
return True
else:
return False
else:
return True
print(check_access('Alice', 'private'))
medium
A. The user comparison uses == with a list instead of membership check.
B. The function does not return anything for public blockchains.
C. The else block is missing for private blockchain condition.
D. The print statement has incorrect syntax.
Solution
Step 1: Analyze user comparison in private blockchain check
The code uses 'user == ['Alice', 'Bob']' which compares a string to a list, always False.
Step 2: Identify correct way to check user membership
It should use 'user in ['Alice', 'Bob']' to check if user is in the allowed list.
Final Answer:
The user comparison uses == with a list instead of membership check. -> Option A
Quick Check:
Use 'in' to check list membership, not '==' [OK]
Hint: Use 'in' to check if user is in list, not '==' [OK]
Common Mistakes:
Using '==' to compare a string with a list
Forgetting to handle public blockchain case
Syntax errors in print statement
5. You want to design a blockchain system for a company where only employees can add transactions, but anyone can view the ledger. Which blockchain type fits best and why?
hard
A. Private blockchain, because it hides the ledger from everyone except employees.
B. Public blockchain, because it allows everyone to add transactions.
C. Public blockchain, because it restricts access to employees only.
D. Private blockchain, because it restricts who can add transactions but allows public viewing.
Solution
Step 1: Identify who can add transactions
The company wants only employees to add transactions, so write access must be restricted.
Step 2: Identify who can view the ledger
Anyone can view the ledger, so read access is open to the public.
Step 3: Match blockchain type to requirements
Private blockchains restrict write access to trusted members but can allow public read access, fitting the need.
Final Answer:
Private blockchain, because it restricts who can add transactions but allows public viewing. -> Option D
Quick Check:
Restrict writes, allow public reads = Private blockchain [OK]
Hint: Restrict who writes, allow public reads means private blockchain [OK]
Common Mistakes:
Choosing public blockchain for restricted write access
Thinking private blockchain hides ledger from public
Confusing read and write permissions
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.