Bird
Raised Fist0
Blockchain / Solidityprogramming~20 mins

Blocks, chains, and hashing in Blockchain / Solidity - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Blockchain Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this simple block hash calculation?
Consider a block with data 'Block1' and previous hash '0000'. The hash function returns the length of the combined string. What is the output of the hash calculation?
Blockchain / Solidity
data = 'Block1'
previous_hash = '0000'
block_string = data + previous_hash
block_hash = len(block_string)
print(block_hash)
A11
B10
C9
D12
Attempts:
2 left
💡 Hint
Count the characters in 'Block1' plus '0000'.
🧠 Conceptual
intermediate
1:30remaining
Which property of a cryptographic hash ensures blockchain security?
Which property of a cryptographic hash function makes it hard to change a block without changing its hash?
AFast computation
BDeterministic output
CCollision resistance
DFixed output length
Attempts:
2 left
💡 Hint
Think about how hard it is to find two inputs with the same hash.
🔧 Debug
advanced
2:30remaining
Why does this blockchain chain break?
This code tries to link blocks by storing previous hashes. Why does the chain verification fail?
Blockchain / Solidity
blocks = [
  {'data': 'Block1', 'prev_hash': '0000', 'hash': 'abc123'},
  {'data': 'Block2', 'prev_hash': 'abc123', 'hash': 'def456'},
  {'data': 'Block3', 'prev_hash': 'xyz789', 'hash': 'ghi012'}
]

for i in range(1, len(blocks)):
    if blocks[i]['prev_hash'] != blocks[i-1]['hash']:
        print(f"Chain broken at block {i+1}")
        break
else:
    print("Chain is valid")
ABecause block 3's prev_hash does not match block 2's hash
BBecause block 2's hash is incorrect
CBecause block 1's prev_hash is not '0000'
DBecause the loop does not check the first block
Attempts:
2 left
💡 Hint
Check the prev_hash of block 3 and the hash of block 2.
📝 Syntax
advanced
2:00remaining
Which code snippet correctly creates a block hash using SHA-256?
Select the code that correctly computes a SHA-256 hash of a block's data and previous hash in Python.
A
import hashlib
block_string = data + prev_hash
block_hash = hashlib.sha256(block_string.encode()).hexdigest()
B
import hashlib
block_hash = hashlib.sha256(data + prev_hash).hexdigest()
C
import hashlib
block_hash = hashlib.sha256(block_string.encode).hexdigest()
D
import hashlib
block_hash = hashlib.sha256(block_string.encode()).digest()
Attempts:
2 left
💡 Hint
Remember to encode the string before hashing and use hexdigest() for readable output.
🚀 Application
expert
3:00remaining
How many blocks are in the valid chain after this code runs?
Given this blockchain list, how many blocks form a valid chain starting from the first block?
Blockchain / Solidity
blockchain = [
  {'data': 'Genesis', 'prev_hash': '0', 'hash': 'a1'},
  {'data': 'Block1', 'prev_hash': 'a1', 'hash': 'b2'},
  {'data': 'Block2', 'prev_hash': 'b2', 'hash': 'c3'},
  {'data': 'Block3', 'prev_hash': 'x9', 'hash': 'd4'},
  {'data': 'Block4', 'prev_hash': 'd4', 'hash': 'e5'}
]

valid_count = 1
for i in range(1, len(blockchain)):
    if blockchain[i]['prev_hash'] == blockchain[i-1]['hash']:
        valid_count += 1
    else:
        break
print(valid_count)
A2
B4
C5
D3
Attempts:
2 left
💡 Hint
Check where the prev_hash does not match the previous block's hash.

Practice

(1/5)
1. What is the main purpose of a hash in a blockchain block?
easy
A. To create a unique fingerprint of the block's data
B. To store the block's timestamp
C. To list all transactions in the block
D. To connect the block to the internet

Solution

  1. Step 1: Understand what a hash does

    A hash is a unique code generated from the block's data, like a fingerprint.
  2. Step 2: Identify the purpose of the hash in blockchain

    The hash ensures the block's data cannot be changed without detection.
  3. Final Answer:

    To create a unique fingerprint of the block's data -> Option A
  4. Quick Check:

    Hash = Unique fingerprint [OK]
Hint: Hash = unique code for block data [OK]
Common Mistakes:
  • Confusing hash with timestamp
  • Thinking hash stores transactions
  • Believing hash connects to internet
2. Which of the following is the correct way to represent a block's hash in code?
easy
A. hash = block_data + SHA256
B. hash = SHA256(block_data)
C. hash = SHA256(block_data + hash)
D. hash = block_data.hash()

Solution

  1. Step 1: Recognize the correct hash function usage

    SHA256 is a common hash function applied to block data to get the hash.
  2. Step 2: Check each option for correct syntax

    hash = SHA256(block_data) correctly applies SHA256 to block_data. Others misuse the function or syntax.
  3. Final Answer:

    hash = SHA256(block_data) -> Option B
  4. Quick Check:

    Correct hash function call = hash = SHA256(block_data) [OK]
Hint: Hash function called with data inside parentheses [OK]
Common Mistakes:
  • Adding hash function as string instead of calling it
  • Using incorrect syntax for hash function
  • Confusing method call with variable
3. Consider this simplified Python code for creating a blockchain block hash:
import hashlib
block_data = 'Block 1 data'
hash_object = hashlib.sha256(block_data.encode())
block_hash = hash_object.hexdigest()
print(block_hash)
What will be the output type of block_hash?
medium
A. integer
B. bytes
C. string
D. list

Solution

  1. Step 1: Understand hashlib.sha256 and hexdigest()

    hashlib.sha256 returns a hash object; hexdigest() converts it to a hex string.
  2. Step 2: Identify the output type of hexdigest()

    hexdigest() returns a string representing the hash in hexadecimal form.
  3. Final Answer:

    string -> Option C
  4. Quick Check:

    hexdigest() output = string [OK]
Hint: hexdigest() returns string, digest() returns bytes [OK]
Common Mistakes:
  • Thinking hexdigest() returns bytes
  • Confusing output with integer or list
  • Ignoring .encode() usage
4. The following code tries to link blocks in a chain by storing the previous block's hash. What is the error?
class Block:
    def __init__(self, data, prev_hash):
        self.data = data
        self.prev_hash = prev_hash

block1 = Block('First block', None)
block2 = Block('Second block', block1.hash)
medium
A. block1.hash is not defined before use
B. prev_hash should be a list, not a single value
C. None cannot be used as prev_hash
D. block2 data should be a number, not string

Solution

  1. Step 1: Check block1 attributes

    block1 has data and prev_hash but no attribute named 'hash'.
  2. Step 2: Identify usage of undefined attribute

    block2 tries to use block1.hash which does not exist, causing an error.
  3. Final Answer:

    block1.hash is not defined before use -> Option A
  4. Quick Check:

    Accessing undefined attribute = block1.hash is not defined before use [OK]
Hint: Check if attribute exists before using it [OK]
Common Mistakes:
  • Assuming hash attribute exists by default
  • Confusing prev_hash type requirements
  • Thinking data type causes error
5. You want to create a simple blockchain where each block stores its own hash and the previous block's hash. Which code snippet correctly computes and links the hashes for two blocks?
hard
A. import hashlib class Block: def __init__(self, data, prev_hash): self.data = data self.prev_hash = prev_hash self.hash = hashlib.sha256(data.encode()).hexdigest() block1 = Block('Block 1', '0') block2 = Block('Block 2', block1.hash)
B. import hashlib class Block: def __init__(self, data): self.data = data self.hash = hashlib.sha256(data.encode()).hexdigest() block1 = Block('Block 1') block2 = Block('Block 2') block2.prev_hash = block1.hash
C. class Block: def __init__(self, data, prev_hash): self.data = data self.prev_hash = prev_hash self.hash = data + prev_hash block1 = Block('Block 1', '0') block2 = Block('Block 2', block1.hash)
D. import hashlib class Block: def __init__(self, data, prev_hash): self.data = data self.prev_hash = prev_hash self.hash = hashlib.sha256((data + prev_hash).encode()).hexdigest() block1 = Block('Block 1', '0') block2 = Block('Block 2', block1.hash)

Solution

  1. Step 1: Check hash calculation includes previous hash

    The correct implementation computes the hash from both data and prev_hash: self.hash = hashlib.sha256((data + prev_hash).encode()).hexdigest(), ensuring secure linking.
  2. Step 2: Verify other options

    B: prev_hash set after hash computation (hash ignores prev_hash); C: no hashing, just concatenation; D: hash ignores prev_hash.
  3. Final Answer:

    self.hash = hashlib.sha256((data + prev_hash).encode()).hexdigest() -> Option D
  4. Quick Check:

    Hash(data + prev_hash) [OK]
Hint: Hash must include previous hash to link blocks [OK]
Common Mistakes:
  • Not including prev_hash in hash calculation
  • Assigning prev_hash after block creation
  • Using plain concatenation without hashing
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard