The Ethereum Toolbox: When to Use 'send', 'transfer', and 'call'


In the context of Ethereum smart contracts, send
, transfer
, and call
are functions used to send Ether (ETH) from one contract to another. Each of these functions has its own advantages and disadvantages, depending on the situation.
First, we'll compare these three functions in a table, followed by a discussion of the scenarios where each is most suitable—and where they might not be appropriate.
Comparison Table
Feature | send | transfer | call |
Description | Low-level function to send Ether | Safer function to send Ether | Low-level function to call a function and send Ether |
Gas Limit | 2300 gas | 2300 gas | Forwards all gas (can be manually limited) |
Return Value | Returns true or false | No return value (throws on failure) | Returns true or false and returned data |
Error Handling | No revert on failure (must handle manually) | Reverts on failure | No revert on failure (must handle manually) |
Flexibility | Limited | Limited | Highly flexible, can execute functions with Ether send |
Use Case | Simple transfers with error handling | Simple transfers with automatic revert | Complex interactions, upgradable contracts, fallback |
When to Use vs When Not to Use
send
When to Use:
Fallback Payments: Use
send
when distributing funds to multiple addresses where some may fail to receive Ether. It's useful in situations where you want to continue the transaction even if a particular transfer fails.Error Handling: If you want to handle transfer failures without reverting the entire transaction,
send
allows you to check for success and proceed accordingly.
When Not to Use:
Critical Transfers: Avoid using
send
for important transactions where failure should cause the entire transaction to revert. The failure of a transfer won't automatically revert the transaction, potentially leading to unintended outcomes.Complex Contract Interactions: Do not use
send
when interacting with contracts that have fallback functions requiring more than 2300 gas, as the transaction will likely fail due to insufficient gas.
transfer
When to Use:
Simple Payouts:
Transfer
is ideal for straightforward payments where you want the transfer to either succeed completely or fail, reverting the entire transaction. This ensures the Ether reaches the intended recipient or the transaction fails.Safety: Use
transfer
when you want a safer alternative tosend
, as it will automatically revert on failure, ensuring that funds are not lost.
When Not to Use:
Contracts with Complex Logic: Avoid
transfer
if the receiving contract has a fallback function or other logic that requires more than 2300 gas, astransfer
will revert the transaction in such cases.Fallback Function Requirements: Do not use
transfer
if the recipient contract relies on a fallback function that needs more gas than the 2300 stipend provided bytransfer
.
call
When to Use:
Upgradeable Contracts:
Call
is best for interacting with contracts that may change over time, such as proxy contracts, where the function signatures or logic might differ. It offers flexibility to forward gas and interact with any function, making it suitable for complex scenarios.Complex Interactions: Use
call
when you need to execute a specific function on the recipient contract while sending Ether. It allows you to forward all available gas, making it ideal for contracts that perform more complex logic.
When Not to Use:
Simple Transfers: Avoid using
call
for basic Ether transfers, as it introduces unnecessary complexity and potential security risks that are not justified for simple operations.Risk of Reentrancy Attacks: Be cautious with
call
in scenarios where reentrancy attacks could be a concern. It requires additional security measures, such as checks-effects-interactions patterns, to prevent such vulnerabilities.
In conclusion, by understanding the strengths and limitations of each function, you can choose the most appropriate one to achieve your desired outcome effectively.
Subscribe to my newsletter
Read articles from David Alenoghena directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
