mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			65 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;
 | |
|     }
 | |
| }
 | |
| 
 | |
| // ====
 | |
| // compileToEwasm: 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)
 |