Skip to content

Latest commit

 

History

History
330 lines (298 loc) · 11.5 KB

Address.md

File metadata and controls

330 lines (298 loc) · 11.5 KB

Address.sol

View Source: contracts/openzeppelin/Address.sol

Address contract

Collection of functions related to the address type

Functions


isContract

Returns true if account is a contract. * [IMPORTANT]

It is unsafe to assume that an address for which this function returns false is an externally-owned account (EOA) and not a contract. * Among others, isContract will return false for the following types of addresses: * - an externally-owned account

  • a contract in construction
  • an address where a contract will be created
  • an address where a contract lived, but was destroyed ====
function isContract(address account) internal view
returns(bool)

Arguments

Name Type Description
account address
Source Code
function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

toPayable

Converts an address into address payable. Note that this is simply a type cast: the actual underlying value is not changed. * Available since v2.4.0.

function toPayable(address account) internal pure
returns(address payable)

Arguments

Name Type Description
account address
Source Code
function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

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://diligence.consensys.net/posts/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.5.11/security-considerations.html #use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * Available since v2.4.0.

function sendValue(address recipient, uint256 amount) internal nonpayable

Arguments

Name Type Description
recipient address
amount uint256
Source Code
function sendValue(address recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

Contracts