Bird
Raised Fist0
Blockchain / Solidityprogramming~5 mins

Payable functions in Blockchain / Solidity - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a payable function in blockchain smart contracts?
A payable function is a special type of function in smart contracts that can receive cryptocurrency (like Ether) when called. It allows the contract to accept and handle payments.
Click to reveal answer
beginner
Why do we need to mark a function as payable?
Marking a function as payable tells the blockchain that this function can accept money. Without it, sending money to the function will cause the transaction to fail.
Click to reveal answer
beginner
What happens if you send Ether to a non-payable function?
The transaction will be rejected and the Ether will not be transferred. The contract will not accept the payment because the function is not marked as payable.
Click to reveal answer
intermediate
How can you access the amount of Ether sent to a payable function?
Inside a payable function, you can use msg.value to get the amount of Ether (in wei) sent with the transaction.
Click to reveal answer
beginner
Show a simple example of a payable function in Solidity.
Example:<br><pre>function deposit() public payable {
    // Function can receive Ether
    balance[msg.sender] += msg.value;
}</pre>This function accepts Ether and updates the sender's balance.
Click to reveal answer
What keyword must a Solidity function have to accept Ether?
Apayable
Bexternal
Cview
Dpure
What does msg.value represent inside a payable function?
AThe block timestamp
BThe sender's address
CThe gas price
DThe amount of Ether sent with the transaction
What happens if you send Ether to a function NOT marked payable?
ATransaction fails and reverts
BEther is accepted anyway
CFunction runs but ignores Ether
DEther is sent back automatically
Which of these is a correct way to declare a payable function in Solidity?
Afunction buy() public {}
Bfunction buy() public payable {}
Cfunction buy() payable {}
Dfunction buy() external view payable {}
Can a constructor be payable in Solidity?
ANo, constructors cannot be payable
BOnly if marked external
CYes, constructors can be payable
DOnly in older Solidity versions
Explain what a payable function is and why it is important in smart contracts.
Think about how contracts get money from users.
You got /3 concepts.
    Describe how to access the amount of Ether sent to a payable function and give a simple example.
    Look inside the function for the special variable.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a payable function in a blockchain smart contract?
      easy
      A. To allow the function to receive cryptocurrency along with the call
      B. To make the function run faster
      C. To restrict the function to only the contract owner
      D. To prevent the function from modifying state variables

      Solution

      1. Step 1: Understand the role of payable

        The payable keyword marks a function that can accept cryptocurrency (like Ether) when called.
      2. Step 2: Compare other options

        Options A, C, and D describe unrelated behaviors. Only To allow the function to receive cryptocurrency along with the call correctly describes the purpose of payable.
      3. Final Answer:

        To allow the function to receive cryptocurrency along with the call -> Option A
      4. Quick Check:

        Payable = Receive money [OK]
      Hint: Payable means function can accept money sent [OK]
      Common Mistakes:
      • Thinking payable makes function faster
      • Confusing payable with access control
      • Believing payable prevents state changes
      2. Which of the following is the correct syntax to declare a payable function in Solidity?
      easy
      A. payable function deposit() public {}
      B. function deposit() payable public {}
      C. function payable deposit() public {}
      D. function deposit() public payable {}

      Solution

      1. Step 1: Recall Solidity function declaration order

        In Solidity, the visibility modifier (e.g., public) comes before payable keyword.
      2. Step 2: Check each option

        function deposit() public payable {} uses correct order: function deposit() public payable {}. Options A, B, and D have incorrect keyword order or syntax.
      3. Final Answer:

        function deposit() public payable {} -> Option D
      4. Quick Check:

        Correct order: visibility then payable [OK]
      Hint: Visibility modifier before payable keyword [OK]
      Common Mistakes:
      • Placing payable before function keyword
      • Switching order of public and payable
      • Using payable as a function name
      3. What will be the output of the following Solidity function when called with 2 Ether?
      contract Test {
          uint public balance;
          function deposit() public payable {
              balance = msg.value;
          }
      }
      medium
      A. balance will be 2000000000000000000 (2 Ether in wei)
      B. balance will be 2
      C. Compilation error
      D. balance will be 0

      Solution

      1. Step 1: Understand msg.value in Solidity

        msg.value holds the amount of wei (smallest Ether unit) sent with the transaction. 2 Ether equals 2 * 10^18 wei = 2000000000000000000 wei.
      2. Step 2: Analyze the assignment to balance

        The function sets balance = msg.value, so balance stores the wei amount sent, which is 2000000000000000000.
      3. Final Answer:

        balance will be 2000000000000000000 (2 Ether in wei) -> Option A
      4. Quick Check:

        msg.value stores wei amount sent [OK]
      Hint: msg.value is in wei, not Ether [OK]
      Common Mistakes:
      • Assuming msg.value is in Ether
      • Expecting balance to be zero
      • Thinking function won't compile
      4. Identify the error in this Solidity function that is intended to receive Ether:
      function receiveFunds() public {
          require(msg.value > 0, "Send some Ether");
      }
      medium
      A. require condition is incorrect
      B. Function must be marked payable to receive Ether
      C. Function visibility should be private
      D. msg.value cannot be used inside functions

      Solution

      1. Step 1: Check function declaration for payable

        To receive Ether, a function must be declared with the payable keyword. This function lacks it.
      2. Step 2: Validate other options

        The require condition is valid, visibility can be public, and msg.value is accessible in payable functions.
      3. Final Answer:

        Function must be marked payable to receive Ether -> Option B
      4. Quick Check:

        Missing payable causes Ether rejection [OK]
      Hint: Add payable to accept Ether in function [OK]
      Common Mistakes:
      • Forgetting payable keyword
      • Misusing require condition
      • Changing visibility unnecessarily
      5. You want to create a smart contract function that accepts Ether and updates the sender's balance only if at least 1 Ether is sent. Which of the following implementations correctly achieves this?
      hard
      A. function deposit() payable public { if (msg.value > 1) { balances[msg.sender] = msg.value; } }
      B. function deposit() public { require(msg.value >= 1 ether, "Minimum 1 Ether required"); balances[msg.sender] += msg.value; }
      C. function deposit() public payable { require(msg.value >= 1 ether, "Minimum 1 Ether required"); balances[msg.sender] += msg.value; }
      D. function deposit() public payable { if (msg.value >= 1) { balances[msg.sender] += msg.value; } }

      Solution

      1. Step 1: Check for payable keyword and require condition

        function deposit() public payable { require(msg.value >= 1 ether, "Minimum 1 Ether required"); balances[msg.sender] += msg.value; } correctly marks the function as payable and uses require(msg.value >= 1 ether) to enforce minimum Ether sent.
      2. Step 2: Validate balance update and syntax

        function deposit() public payable { require(msg.value >= 1 ether, "Minimum 1 Ether required"); balances[msg.sender] += msg.value; } updates balances[msg.sender] by adding msg.value. Other options either miss payable, use wrong comparison, or incorrect balance update.
      3. Final Answer:

        function deposit() public payable { require(msg.value >= 1 ether, "Minimum 1 Ether required"); balances[msg.sender] += msg.value; } -> Option C
      4. Quick Check:

        Payable + require with 1 ether check [OK]
      Hint: Use require with 1 ether and payable function [OK]
      Common Mistakes:
      • Omitting payable keyword
      • Using incorrect Ether comparison
      • Not updating balance correctly
      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