| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- // SPDX-License-Identifier: GPL-2.0-or-later
- pragma solidity ^0.7.6;
- pragma abicoder v2;
- library Address {
- function isContract(address account) internal view returns (bool) {
- uint256 size;
- assembly { size := extcodesize(account) }
- return size > 0;
- }
- function sendValue(address payable recipient, uint256 amount) internal {
- require(address(this).balance >= amount, "Address: insufficient balance");
- (bool success, ) = recipient.call{ value: amount }("");
- require(success, "Address: unable to send value, recipient may have reverted");
- }
- function functionCall(address target, bytes memory data) internal returns (bytes memory) {
- return functionCall(target, data, "Address: low-level call failed");
- }
- function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
- return functionCallWithValue(target, data, 0, errorMessage);
- }
- function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
- return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
- }
- function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
- require(address(this).balance >= value, "Address: insufficient balance for call");
- require(isContract(target), "Address: call to non-contract");
- (bool success, bytes memory returndata) = target.call{ value: value }(data);
- return _verifyCallResult(success, returndata, errorMessage);
- }
- function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
- if (success) {
- return returndata;
- } else {
- if (returndata.length > 0) {
- assembly {
- let returndata_size := mload(returndata)
- revert(add(32, returndata), returndata_size)
- }
- } else {
- revert(errorMessage);
- }
- }
- }
- }
|