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:
- targetmust be a contract.
- calling targetwithdatamust 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.