diff --git a/contracts/utils/Address.sol b/contracts/utils/Address.sol index 61830f0b1..7ad6ad804 100644 --- a/contracts/utils/Address.sol +++ b/contracts/utils/Address.sol @@ -7,19 +7,21 @@ 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. * - * 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) { - // 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('')`