You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.6 KiB
40 lines
1.6 KiB
pragma solidity ^0.5.0;
|
|
|
|
/**
|
|
* @dev Collection of functions related to the address type
|
|
*/
|
|
library Address {
|
|
/**
|
|
* @dev Returns true if `account` is a contract.
|
|
*
|
|
* This test is non-exhaustive, and there may be false-negatives: during the
|
|
* execution of a contract's constructor, its address will be reported as
|
|
* not containing 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.
|
|
*/
|
|
function isContract(address account) internal view returns (bool) {
|
|
// This method relies in extcodesize, which returns 0 for contracts in
|
|
// construction, since the code is only stored at the end of the
|
|
// constructor execution.
|
|
|
|
// 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 != 0x0 && codehash != accountHash);
|
|
}
|
|
|
|
/**
|
|
* @dev Converts an `address` into `address payable`. Note that this is
|
|
* simply a type cast: the actual underlying value is not changed.
|
|
*/
|
|
function toPayable(address account) internal pure returns (address payable) {
|
|
return address(uint160(account));
|
|
}
|
|
}
|
|
|