Bird
Raised Fist0
Blockchain / Solidityprogramming~10 mins

Staking mechanisms in Blockchain / Solidity - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare a staking balance mapping in Solidity.

Blockchain / Solidity
mapping(address => uint256) public [1];
Drag options to blanks, or click blank then click option'
AstakeAmount
BstakingBalance
Cbalances
DuserStake
Attempts:
3 left
💡 Hint
Common Mistakes
Using a variable name that does not clearly represent staking balances.
Forgetting to specify the mapping key or value types.
2fill in blank
medium

Complete the code to allow users to stake tokens by updating their balance.

Blockchain / Solidity
function stakeTokens(uint256 _amount) public {
    require(_amount > 0, "Amount must be greater than zero");
    [1][msg.sender] += _amount;
}
Drag options to blanks, or click blank then click option'
AstakingBalance
Bbalances
CuserStake
DstakeAmount
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong mapping name.
Not using msg.sender as the key.
3fill in blank
hard

Fix the error in the function that allows users to unstake their tokens.

Blockchain / Solidity
function unstakeTokens() public {
    uint256 balance = [1][msg.sender];
    require(balance > 0, "No tokens to unstake");
    stakingBalance[msg.sender] = 0;
    // Transfer tokens back to user
}
Drag options to blanks, or click blank then click option'
AstakingBalance
BuserStake
Cbalances
DstakeAmount
Attempts:
3 left
💡 Hint
Common Mistakes
Using a mapping name that does not exist or is inconsistent.
Not checking the correct balance before unstaking.
4fill in blank
hard

Fill both blanks to create a dictionary comprehension that maps user addresses to their staked amounts greater than zero.

Blockchain / Solidity
activeStakes = {address: amount for (address, amount) in [1].items() if amount [2] 0};
Drag options to blanks, or click blank then click option'
AstakingBalance
B>
C==
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong comparison operator.
Using a mapping name that does not exist.
5fill in blank
hard

Fill all three blanks to calculate rewards for each user with staked tokens above a threshold.

Blockchain / Solidity
rewards = { [1]: [2] * rewardRate for ([3], amount) in stakingBalance.items() if amount > threshold };
Drag options to blanks, or click blank then click option'
Auser
Bamount
Dstake
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up variable names in the comprehension.
Using incorrect variable names for keys or values.

Practice

(1/5)
1. What is the main purpose of staking tokens in a blockchain network?
easy
A. To create new tokens instantly
B. To transfer tokens to another user
C. To help secure the network and earn rewards
D. To delete tokens from the blockchain

Solution

  1. Step 1: Understand staking concept

    Staking means locking tokens to support blockchain security.
  2. Step 2: Identify staking benefits

    Users earn rewards for staking, helping network stability.
  3. Final Answer:

    To help secure the network and earn rewards -> Option C
  4. Quick Check:

    Staking = Security + Rewards [OK]
Hint: Staking locks tokens to secure network and gain rewards [OK]
Common Mistakes:
  • Confusing staking with token transfer
  • Thinking staking creates new tokens
  • Believing staking deletes tokens
2. Which of the following is the correct way to represent staking tokens in a smart contract pseudocode?
easy
A. stakeAmount = userBalance - lockedTokens
B. lockedTokens = stakeAmount + userBalance
C. userBalance = stakeAmount + lockedTokens
D. lockedTokens = stakeAmount

Solution

  1. Step 1: Understand staking variables

    Locked tokens represent the amount staked by user.
  2. Step 2: Match correct assignment

    lockedTokens should equal stakeAmount to show tokens locked.
  3. Final Answer:

    lockedTokens = stakeAmount -> Option D
  4. Quick Check:

    Locked tokens = stake amount [OK]
Hint: Locked tokens equal the stake amount directly [OK]
Common Mistakes:
  • Adding stakeAmount to userBalance incorrectly
  • Subtracting lockedTokens from userBalance wrongly
  • Mixing variable roles in assignment
3. Consider this pseudocode for calculating staking rewards:
reward = stakedAmount * rewardRate * stakingDuration
print(reward)
If stakedAmount = 100, rewardRate = 0.05, and stakingDuration = 10, what is the output?
medium
A. 50
B. 5
C. 0.5
D. 500

Solution

  1. Step 1: Substitute values into formula

    reward = 100 * 0.05 * 10
  2. Step 2: Calculate reward

    100 * 0.05 = 5; then 5 * 10 = 50
  3. Final Answer:

    50 -> Option A
  4. Quick Check:

    100 * 0.05 * 10 = 50 [OK]
Hint: Multiply all values stepwise: amount * rate * duration [OK]
Common Mistakes:
  • Multiplying only two values
  • Confusing rewardRate as 5 instead of 0.05
  • Adding values instead of multiplying
4. The following pseudocode has an error. What is the problem?
function stakeTokens(userBalance, stakeAmount) {
  if (stakeAmount > userBalance) {
    return "Error: Not enough balance";
  }
  lockedTokens = stakeAmount;
  userBalance = userBalance - stakeAmount;
  return lockedTokens;
}
medium
A. lockedTokens is not declared before assignment
B. The function does not return userBalance
C. The if condition should be stakeAmount < userBalance
D. The subtraction should add stakeAmount instead

Solution

  1. Step 1: Check variable declarations

    lockedTokens is assigned without declaration, causing error in strict languages.
  2. Step 2: Understand variable scope

    lockedTokens should be declared (e.g., let or var) before use.
  3. Final Answer:

    lockedTokens is not declared before assignment -> Option A
  4. Quick Check:

    Undeclared variable causes error [OK]
Hint: Always declare variables before assigning [OK]
Common Mistakes:
  • Ignoring variable declaration errors
  • Misreading the if condition logic
  • Thinking subtraction should be addition
5. You want to write a function that calculates total rewards for multiple users staking different amounts for different durations. Which approach correctly applies staking mechanisms?
hard
A. Add all staked amounts first, then multiply by rewardRate and total duration
B. Loop through each user, calculate reward = stakedAmount * rewardRate * duration, then sum all rewards
C. Calculate reward only for the user with the highest stake
D. Multiply rewardRate by duration only once, ignoring staked amounts

Solution

  1. Step 1: Understand reward calculation per user

    Each user's reward depends on their own stake and duration.
  2. Step 2: Sum individual rewards for total

    Calculate each reward separately, then add for total rewards.
  3. Final Answer:

    Loop through each user, calculate reward = stakedAmount * rewardRate * duration, then sum all rewards -> Option B
  4. Quick Check:

    Calculate per user, then sum [OK]
Hint: Calculate rewards individually, then add for total [OK]
Common Mistakes:
  • Summing stakes before multiplying
  • Ignoring individual durations
  • Calculating reward for only one user