0
0
Blockchain / Solidityprogramming~10 mins

msg.value and msg.sender in Blockchain / Solidity - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - msg.value and msg.sender
Transaction sent
msg.sender set to sender address
msg.value set to sent ether amount
Function executes using msg.sender and msg.value
Contract updates state or transfers ether
Transaction ends
When a transaction calls a contract, msg.sender holds the caller's address and msg.value holds the amount of ether sent. The contract uses these to process logic.
Execution Sample
Blockchain / Solidity
function buy() public payable {
    require(msg.value == 1 ether, "Send 1 ether");
    buyers[msg.sender] = true;
}
This function requires exactly 1 ether sent and records the sender as a buyer.
Execution Table
Stepmsg.sendermsg.value (ether)ConditionActionState Change
10xABC1231msg.value == 1 etherCheck conditionPass
20xABC1231Condition passedSet buyers[0xABC123] = truebuyers[0xABC123] = true
30xDEF4560.5msg.value == 1 etherCheck conditionFail
40xDEF4560.5Condition failedRevert transactionNo state change
💡 Execution stops when condition fails or function completes successfully.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4Final
msg.senderN/A0xABC1230xABC1230xDEF4560xDEF456N/A
msg.valueN/A1 ether1 ether0.5 ether0.5 etherN/A
buyers[0xABC123]falsefalsetruetruetruetrue
Key Moments - 2 Insights
Why does msg.sender always show the caller's address?
Because msg.sender is automatically set by the blockchain to the address that initiated the transaction or call, as shown in steps 1 and 3 of the execution_table.
What happens if msg.value is less than required?
The require condition fails and the transaction reverts, so no state changes happen. This is shown in step 4 where the condition fails and buyers mapping is not updated.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is msg.sender at step 3?
A0xABC123
B0xDEF456
C0x000000
DNot set
💡 Hint
Check the msg.sender column at step 3 in the execution_table.
At which step does the transaction revert due to msg.value?
AStep 3
BStep 2
CStep 4
DStep 1
💡 Hint
Look for the step where the condition fails and action is 'Revert transaction' in the execution_table.
If msg.value was exactly 1 ether at step 3, what would happen?
Abuyers[0xDEF456] would be set to true
BTransaction would revert
CNothing changes
Dmsg.sender changes
💡 Hint
Refer to the pattern in steps 1 and 2 where condition passes and buyers mapping updates.
Concept Snapshot
msg.sender is the address calling the contract.
msg.value is the amount of ether sent with the call.
Use msg.value to check payment amount.
Use msg.sender to identify who called.
If msg.value is wrong, revert transaction.
These are set automatically by the blockchain.
Full Transcript
When a blockchain transaction calls a contract, the system sets msg.sender to the caller's address and msg.value to the ether sent. The contract can check msg.value to ensure correct payment and use msg.sender to track who called. If the payment is incorrect, the contract can stop execution and revert changes. This example shows a buy function that requires exactly 1 ether and records the buyer's address. The execution table traces two calls: one with correct payment that updates state, and one with insufficient payment that reverts. Variables msg.sender and msg.value change per call, and the buyers mapping updates only on success. Understanding these helps write secure contracts that handle payments and identify callers correctly.