mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
interface HelloWorld {
 | 
						|
    function hello() external pure;
 | 
						|
    function world(int) external pure;
 | 
						|
}
 | 
						|
 | 
						|
interface HelloWorldDerived is HelloWorld {
 | 
						|
    function other() external pure;
 | 
						|
}
 | 
						|
 | 
						|
interface ERC165 {
 | 
						|
    /// @notice Query if a contract implements an interface
 | 
						|
    /// @param interfaceID The interface identifier, as specified in ERC-165
 | 
						|
    /// @dev Interface identification is specified in ERC-165. This function
 | 
						|
    ///  uses less than 30,000 gas.
 | 
						|
    /// @return `true` if the contract implements `interfaceID` and
 | 
						|
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
 | 
						|
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
 | 
						|
}
 | 
						|
 | 
						|
contract Test {
 | 
						|
    bytes4 public ghello_world_interfaceId = type(HelloWorld).interfaceId;
 | 
						|
    bytes4 public ERC165_interfaceId = type(ERC165).interfaceId;
 | 
						|
 | 
						|
    function hello() public pure returns (bytes4 data){
 | 
						|
        HelloWorld i;
 | 
						|
        return i.hello.selector;
 | 
						|
    }
 | 
						|
 | 
						|
    function world() public pure returns (bytes4 data){
 | 
						|
        HelloWorld i;
 | 
						|
        return i.world.selector;
 | 
						|
    }
 | 
						|
 | 
						|
    function hello_world() public pure returns (bytes4 data){
 | 
						|
        // HelloWorld i;
 | 
						|
        // return i.hello.selector ^ i.world.selector; // = 0xc6be8b58
 | 
						|
        return 0xc6be8b58;
 | 
						|
    }
 | 
						|
 | 
						|
    function hello_world_interfaceId() public pure returns (bytes4 data){
 | 
						|
        return type(HelloWorld).interfaceId;
 | 
						|
    }
 | 
						|
 | 
						|
    function other() public pure returns (bytes4 data){
 | 
						|
        HelloWorldDerived i;
 | 
						|
        return i.other.selector;
 | 
						|
    }
 | 
						|
 | 
						|
    function hello_world_derived_interfaceId() public pure returns (bytes4 data){
 | 
						|
        return type(HelloWorldDerived).interfaceId;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// ====
 | 
						|
// compileViaYul: also
 | 
						|
// ----
 | 
						|
// hello() -> left(0x19ff1d21)
 | 
						|
// world() -> left(0xdf419679)
 | 
						|
//
 | 
						|
// ERC165_interfaceId() -> left(0x01ffc9a7)
 | 
						|
//
 | 
						|
// hello_world()              -> left(0xc6be8b58)
 | 
						|
// hello_world_interfaceId()  -> left(0xc6be8b58)
 | 
						|
// ghello_world_interfaceId() -> left(0xc6be8b58)
 | 
						|
//
 | 
						|
// other() -> left(0x85295877)
 | 
						|
// hello_world_derived_interfaceId() -> left(0x85295877)
 |