Determining contract addresses
Now that we understand the process of calling a contract
function using Solidity assembly programming, another important coding requirement is to find out whether a given address belongs to an externally owned account or a contract account. This is especially useful when writing ERC20 and ERC721 token contracts.
To demonstrate how to determine whether an address is a contract address or an externally owned account, the same TargetContract
contract shown in the previous section will be used. The TargetContract
contract should be available on the Ethereum network and can be accessed using its address. The address of the TargetContract
address can be supplied as an argument to the CheckIfContract
function shown next. This function uses the assembly extcodesize
opcode to determine the type of address supplied to it. It is a contract account if the length of the value returned by extcodesize opcode
is greater than zero; otherwise, it belongs to a user...