현재 주소가 일반 유저 Address인가? 아니면 Contract Address인가 체크하는 함수
- 체크할Address의 코드 사이즈를 확인해서 코드가 존재하면 Contract Address, 그렇지 않으면 일반 Address라고 판단
uint size;
address target = 체크할Address;
assembly {
size := extcodesize(target)
}
require(size > 0);
Method ID
- 컨트랙트의 각 내부 함수에 대한 고유 아이디(4바이트)
- 아래 이미지를 보면 matchWithCoin이라는 함수의 MethodID는 0x5c2ecfcb로 표시가 되는 것이지요.
- 바이트코드로 변환시 아래처럼 처음에 4바이트는 Method ID가 들어 가는 것을 볼 수 있습니다.
- 그리고 그 뒤에는 Parameters 값들이 순서대로 들어갑니다.
- MethodID 찾는방법은 "함수명(parameter 변수형태,...)"를 keccak256으로 해싱해서 나온 값의 앞 4바이트로 찾을 수 있습니다.
- ex) safeTransferFrom(address,address,uint256) => 42842e0eb38857a7775b4e7364b2775df7325074d088e7fb39590cd6281184ed ==> MethodID = 0x42842e0e