//SPDX-License-Identifier: MIT
pragma solidity 0.8.14;
contract ModernSolidityFeatures {
TestContract tcInstance = new TestContract();
function modernFunctionSelector() public view returns(bytes4) {
return tcInstance.square.selector;
}
function modernIsContract(address addr) public view returns(bool) {
return (addr.code.length > 0 ? true : false);
}
function conventionalIsContract(address addr) public view returns(bool) {
uint32 sizeOfAddressCodeSection;
assembly {
sizeOfAddressCodeSection := extcodesize(addr)
}
return (sizeOfAddressCodeSection > 0);
}
function conventionalFunctionSelector(string memory functionSignature) public pure returns(bytes4) {
return bytes4(keccak256(bytes(functionSignature)));
}
}
contract TestContract {
uint256 public number;
function square(uint256 a) public pure returns(uint256) {
return a*a;
}
}