Git Source
Collection of functions related to the address type
Functions
sendValue
Replacement for Solidity's transfer
: sends amount
wei to
recipient
, forwarding all available gas and reverting on errors.
https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
of certain opcodes, possibly making contracts go over the 2300 gas limit
imposed by transfer
, making them unable to receive funds via
transfer
. sendValue removes this limitation.
https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
IMPORTANT: because control is transferred to recipient
, care must be
taken to not create reentrancy vulnerabilities. Consider using
{ReentrancyGuard} or the
https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
function sendValue(address payable recipient, uint256 amount) internal;
functionCall
*Performs a Solidity function call using a low level call
. A
plain call
is an unsafe replacement for a function call: use this
function instead.
If target
reverts with a revert reason or custom error, it is bubbled
up by this function (like regular Solidity function calls). However, if
the call reverted with no returned reason, this function reverts with a
FailedInnerCall error.
Returns the raw returned data. To convert to the expected return value,
use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
Requirements:
target
must be a contract.
- calling
target
with data
must not revert.*
function functionCall(address target, bytes memory data) internal returns (bytes memory);
functionCallWithValue
*Same as functionCall
,
but also transferring value
wei to target
.
Requirements:
- the calling contract must have an ETH balance of at least
value
.
- the called Solidity function must be
payable
.*
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory);
functionStaticCall
Same as functionCall
,
but performing a static call.
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory);
functionDelegateCall
Same as functionCall
,
but performing a delegate call.
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory);
verifyCallResultFromTarget
Tool to verify that a low level call to smart-contract was successful, and reverts if the target
was not a contract or bubbling up the revert reason (falling back to FailedInnerCall) in case of an
unsuccessful call.
function verifyCallResultFromTarget(address target, bool success, bytes memory returndata)
internal
view
returns (bytes memory);
verifyCallResult
Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
revert reason or with a default FailedInnerCall error.
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory);
_revert
Reverts with returndata if present. Otherwise reverts with FailedInnerCall.
function _revert(bytes memory returndata) private pure;
Errors
AddressInsufficientBalance
The ETH balance of the account is not enough to perform the operation.
error AddressInsufficientBalance(address account);
AddressEmptyCode
There's no code at target
(it is not a contract).
error AddressEmptyCode(address target);
FailedInnerCall
A call to an address target failed. The target may have reverted.