30 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
pragma solidity ^0.5.3;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * 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;
 | 
						|
    }
 | 
						|
 | 
						|
}
 |