Why Ethereum enables programmable money in Blockchain / Solidity - Performance Analysis
When we look at Ethereum, we want to understand how the time it takes to run programs changes as the program or data grows.
We ask: How does running smart contracts on Ethereum scale with more instructions or users?
Analyze the time complexity of the following Ethereum smart contract function.
contract SimpleWallet {
address owner;
address[] payees;
function addPayee(address _payee) public {
payees.push(_payee);
}
function payAll() public {
for (uint i = 0; i < payees.length; i++) {
payable(payees[i]).transfer(1 ether);
}
}
}
This contract stores a list of payees and sends 1 ether to each payee when payAll is called.
Look for loops or repeated actions in the code.
- Primary operation: The for-loop in
payAll()that sends ether to each payee. - How many times: It runs once for every payee in the
payeeslist.
As the number of payees grows, the number of transfers grows too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 transfers |
| 100 | 100 transfers |
| 1000 | 1000 transfers |
Pattern observation: The work grows directly with the number of payees. More payees mean more transfers.
Time Complexity: O(n)
This means the time to run payAll() grows linearly with the number of payees.
[X] Wrong: "Sending ether to all payees happens instantly no matter how many payees there are."
[OK] Correct: Each transfer takes time and gas, so more payees mean more work and longer execution.
Understanding how loops affect execution time helps you explain how smart contracts behave as they handle more data, a key skill for blockchain developers.
What if the contract used a mapping instead of an array for payees? How would the time complexity of sending payments change?
Practice
Solution
Step 1: Understand Ethereum's core feature
Ethereum uses smart contracts, which are pieces of code that run automatically on the blockchain.Step 2: Connect smart contracts to programmable money
Smart contracts can control money by following rules written in code, making money programmable without middlemen.Final Answer:
Because it uses smart contracts that run code automatically -> Option AQuick Check:
Smart contracts = Programmable money [OK]
- Thinking Ethereum uses physical wallets only
- Assuming banks approve Ethereum transactions
- Confusing Ethereum with paper currency systems
Solution
Step 1: Check function signature for sending Ether
The function must be public and payable to receive and send Ether, and the recipient must be declared payable.Step 2: Verify the transfer method usage
Using recipient.transfer(msg.value) correctly sends the Ether amount received in the call.Final Answer:
function sendEther(address payable recipient) public payable { recipient.transfer(msg.value); } -> Option BQuick Check:
Payable recipient + public payable function + transfer = Correct [OK]
- Missing 'payable' keyword on function or address
- Using 'send' without checking return value
- Declaring function as private when it should be public
checkBalance() is called after sending 5 Ether to the contract?contract Wallet {
uint public balance;
function deposit() public payable {
balance += msg.value;
}
function checkBalance() public view returns (uint) {
return balance;
}
}Solution
Step 1: Understand msg.value unit in Solidity
Ether values in Solidity are handled in wei, where 1 Ether = 10^18 wei.Step 2: Calculate balance after deposit
Sending 5 Ether means msg.value = 5 * 10^18 wei = 5000000000000000000 wei, which is added to balance.Final Answer:
5000000000000000000 -> Option AQuick Check:
5 Ether = 5 * 10^18 wei = 5000000000000000000 [OK]
- Returning Ether as 5 instead of wei
- Confusing balance with contract's actual Ether balance
- Expecting output in Ether units without conversion
contract Pay {
function payTo(address recipient) public payable {
recipient.transfer(msg.value);
}
}Solution
Step 1: Check recipient address type
In Solidity, to send Ether, the recipient address must be declared as payable.Step 2: Identify missing payable keyword
The code uses 'address recipient' instead of 'address payable recipient', causing a compilation error.Final Answer:
The recipient address must be declared payable -> Option DQuick Check:
Address payable needed to send Ether [OK]
- Forgetting 'payable' on recipient address
- Thinking transfer() is invalid
- Removing payable from function incorrectly
Solution
Step 1: Use smart contract code to automate sending
Writing a payable function that checks the amount received and sends Ether automatically uses Ethereum's programmable money feature.Step 2: Avoid manual or external triggers
Manual sending or external scripts do not leverage Ethereum's automatic, trustless execution.Final Answer:
Write a payable function that checks if msg.value >= 2 Ether, then sends 1 Ether to the address using transfer() -> Option CQuick Check:
Smart contract automation = programmable money [OK]
- Relying on manual or external triggers
- Not using payable functions for receiving Ether
- Ignoring automatic code execution on Ethereum
Ready to prove it?
Pass the test and this pattern moves unknown
