curio-wrapper-truffle/contracts/Address.sol

31 lines
1.1 KiB
Solidity
Raw Normal View History

2023-01-29 18:29:54 +00:00
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity ^0.8.17;
2022-02-11 04:17:00 +00:00
/**
* Utility library of inline functions on addresses
*/
library Address {
/**
* Returns whether the target address is a contract
* @dev This function will return false if invoked during the constructor of a contract,
* as the code is not actually created until after the constructor finishes.
* @param account address of the account to check
* @return whether the target address is a contract
*/
function isContract(address account) internal view returns (bool) {
uint256 size;
// XXX Currently there is no better way to check if there is a contract in an address
// than to check the size of the code at that address.
// See https://ethereum.stackexchange.com/a/14016/36603
// for more details about how this works.
// TODO Check this again before the Serenity release, because all addresses will be
// contracts then.
// solium-disable-next-line security/no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
}